web前端基础之SCC(定位-z-index模态框)

一:定位(position)

  • 静态static
所有的标签默认都是静态的static,无法改变位置
static 默认值,无定位,不能当作绝对定位的参照物,并且设置标签对象的left、top等值是不起作用的的。
1.relative(相对定位)
  • 相对于标签原来的位置做移动relative
相对定位是相对于该元素在文档流中的原始位置,即以自己原始位置为参照物。有趣的是,即使设定了元素的相对定位以及偏移值,元素还占有着原来的位置,即占据文档流空间。对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。

注意:position:relative的一个主要用法:方便绝对定位元素找到参照物。
2.absolute(绝对定位)
  • 相对于已经定位过的父标签做移动(如果没有父标签那么就以body为参照物)

  • 定义:

设置为绝对定位的元素框从文档流完全删除,并相对于最近的已定位祖先元素定位,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块(即body元素)。元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
  • 重点
如果父级设置了position属性,例如position:relative;,那么子元素就会以父级的左上角为原始点进行定位。这样能很好的解决自适应网站的标签偏离问题,即父级为自适应的,那我子元素就设置position:absolute;父元素设置position:relative;,然后Top、Right、Bottom、Left用百分比宽度表示。
  • 另外,对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。
  • 参照物:
    ![image](https://img20image
3.fixed(固定)
  • 相对于浏览器窗口固定在某个位置
fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性 定义。 注意点: 一个元素若设置了 position:absolute | fixed; 则该元素就不能设置float。这 是一个常识性的知识点,因为这是两个不同的流,一个是浮动流,另一个是“定位流”。但是 relative 却可以。因为它原本所占的空间仍然占据文档流。
  • 在理论上,被设置为fixed的元素会被定位于浏览器窗口的一个指定坐标,不论窗口是否滚动,它都会固定在这个位置。
  • 参照物
    image

二:相对定位

 相对于标签原来的位置做移动
1.相对定位
    <style>
        body {
            /*与边框贴合*/
            margin: 0;
        }
        #d1 {
            /*高度*/
            height: 100px;
            /*宽度*/
            width: 100px;
            /*背景颜色*/
            background-color: red;
        }
    </style>

image

2.实现相对定位
    <style>
        body {
            /*与边框贴合*/
            margin: 0;
        }
        #d1 {
            /*高度*/
            height: 100px;
            /*宽度*/
            width: 100px;
            /*背景颜色*/
            background-color: red;
            left: 50px;  /*从左往右  如果是负数 方向则相反*/
            top: 50px;  /*从上往下   如果是负数 方向则相反*/
            /*position: static;  !*默认是static 静态 无法修改位置*!*/
            /*相对定位 表由static变为relative它的性质就从原来没有定位的标签变成了已经定位过的标签*/
            position: relative;
            /*虽然你哪怕没有动 但是性质已经变了*/
        }

image

三:绝对定位

相对于已经定义过的父标签,我只给你一个父标签,然后你按照这个父标签定位,绝对定位
1.实现绝对定位
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body {
            /*与边框贴合*/
            margin: 0;
        }
        #d2 {
            /*高度*/
            height: 100px;
            /*宽度*/
            width: 200px;
            /*背景颜色*/
            background-color: red;
            /*已经定位过的标签*/
            position: relative;
        }
        #d3 {
            /*高度*/
            height: 200px;
            /*宽度*/
            width: 400px;
            /*背景颜色*/
            background-color: yellowgreen;
            /*绝对定位*/
            position: absolute;
            /*从左往右移动*/
            left: 200px;
            /*从上往下*/
            top: 100px;
        }
    </style>
</head>
<body>
<div id="d2">
    <div id="d3"></div>
</div>
</body>
</html>

image

四:固定定位

  • 固定在浏览器的某个位置
1.实现固定定位
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body {
            /*与边框贴合*/
            margin: 0;
        }
        #d2 {
            /*高度*/
            height: 100px;
            /*宽度*/
            width: 200px;
            /*背景颜色*/
            background-color: red;
            /*已经定位过的标签*/
            position: relative;
        }
        #d3 {
            /*高度*/
            height: 200px;
            /*宽度*/
            width: 400px;
            /*背景颜色*/
            background-color: yellowgreen;
            /*绝对定位*/
            position: absolute;
            /*从左往右移动*/
            left: 200px;
            /*从上往下*/
            top: 100px;
        }
        #d4 {
            /*固定 写了fixed之后 定位就是一句浏览器窗口*/
            position: fixed;
            /*距离浏览器底部 距离*/
            bottom: 10px;
            /*距离浏览器右侧 距离*/
            right: 20px;
            /*高度*/
            height: 50px;
            /*宽度*/
            width: 100px;
            /*背景颜色*/
            background-color: white;
            /*上下左右边框*/
            border: 3px solid black;
        }
    </style>
</head>
<body>
<div style="height: 500px;background-color: red"></div>
<div style="height: 500px;background-color: greenyellow"></div>
<div style="height: 500px;background-color: blue"></div>
<div id="d4">回到顶部</div>
</body>
</html>

image

  • (优先展示文本内容)须知:
xxxxxxxxxx 浏览器是优先展示文本内容的,如果它发现文本内容被挡住了,会想方设法的找到个位置展示出现

image

五:验证浮动和定位是否脱离文档流(验证原来的位置是否保留)

1.什么是脱离文档流?
就是原来的位置没有了,可以被顶替了
2.验证对象(能够改变标签位置的方法)
浮动
相对定位
绝对定位
固定定位
3.(不脱离文档流)
  • 相对定位
4.脱离文档流
  • 1.浮动
  • 2.决定定位
  • 3.固定定位
5.测试相对定位
<body>                                                      /*相对移动  向右移动500*/
<div style="height: 100px;width: 200px;background-color: red;position: relative;left: 500px;"></div>
<div style="height: 100px;width: 200px;background-color: greenyellow"></div>
</body>

image

6.测试绝对定位
<body>                                                 
<div style="height: 100px;width: 200px;background-color: red;position: absolute;left: 500px;"></div>
<div style="height: 100px;width: 200px;background-color: greenyellow"></div>
</body>

image

7.测试固定定位
<body>                                                      
<div style="height: 100px;width: 200px;background-color: red;position: fixed;left: 500px;"></div>
<div style="height: 100px;width: 200px;background-color: greenyellow"></div>
</body>

image

六:z-index之模态框案例

  • 浏览器平面不是一个二维坐标系而是一个三维坐标系
1.什么是模态框?
  • 以 百度登录页面 其实是三层结构
    百度登录或者退出界面>>>:三明治结构(模态框)
	1.最底部是正常内容(z=0)  最远层
	2.黑色的透明区(z=99)	中间层
	3.白色的注册区域(z=100)  离用户最近

image

2.z-index模态框
#d1 {
  z-index: 99;
}
3.设置对象的层叠顺序
    1. z-index 值表示谁压着谁,数值大的压盖住数值小的,
    1. 只有定位了的元素,才能有z-index,也就是说,不管相对定位,绝对定位,固定定位,都可以使用z-index,而浮动元素不能使用z-index
    1. z-index值没有单位,就是一个正整数,默认的z-index值为0如果大家都没有z-index值,或者z-index值一样,那么谁写在HTML后面,谁在上面压着别人,定位了元素,永远压住没有定位的元素。
    1. 从父现象:父亲怂了,儿子再牛逼也没用
4.简易版z-index模态框
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body {
            margin: 0;
        }
        .cover {
            /*固定定位*/
            position: fixed;
            /*上下左右都为0*/
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
            /*背景颜色*/
            background-color: rgba(0,0,0,0.4);
            /*模态框*/
            z-index: 99;
        }
        .modal {
            /*背景颜色*/
            background-color: white;
            height: 200px;
            width: 400px;
            /*固定定位*/
            position: fixed;
            /*从左往右占50%*/
            left: 50%;
            /*从上到下占50%*/
            top: 50%;
            /*模态框*/
            z-index: 100;
            /*从右往左移动*/
            margin-left: -200px;
            /*从下往上移动*/
            margin-top: -100px;


        }
    </style>
</head>
<body>
<div>这是最底层的页面内容</div>
<div class="cover"></div>
<div class="modal">
    <h1>百度登录</h1>
    <p>username:<input type="text"></p>
    <p>password:<input type="text"></p>
    <button>点我</button>
</div>
</body>
</html>

image

七:透明度opacity

1.opacity作用
透明度opacity它不单单可以修改颜色的透明还同时修改字体的透明度
  • rgba : 只能影响颜色
  • opacity : 可以修改颜色和字体
rgba(124,124,124,0.5)
	只影响颜色
opacity:0.5
    影响颜色和字体

image

posted @ 2022-01-23 21:22  AlexEvans  阅读(643)  评论(0编辑  收藏  举报