定位position

一、定位

  - 定位可以对页面元素进行微调(页面大都使用float进行布局,定位进行微调)

- position的属性值:

static:默认值,元素是静止的,没有开启定位

relative:相对定位

absolute:绝对定位

fixed:固定定位

sticky:粘滞定位

二、相对定位(relative)

2.1 特点

  • 元素开启相对定位后,如果不设置偏移量,元素不会发生任何的变化
  • 相对定位是参照于元素在文档流中的位置进行定位的
  • 相对定位会提升元素的层级
  • 相对定位不会使元素脱离文档流
  • 相对定位不会改变元素的性质:块还是块,行内还是行内

2.2 偏移量(offset)

top、bottom、left、right

三、绝对定位(absolute)

3.1 特点

  • 开启绝对定位后,如果不设置偏移量,元素的位置不会发生变化
  • 绝对定位会提升元素的层级
  • 绝对定位会使元素脱离文档流
  • 绝对定位会改变元素的性质:块变成行内,行内变成块
  • 绝对定位是相对于其包含块进行定位的

 包含块(containing block):包含块就是离当前元素最近的祖先块元素

- 决定定位的包含块:

包含块就是离它最近的开启了定位的祖先元素,

如果所有的祖先元素没有开启定位,则根元素就是它的包含块

- html(根元素,初始包含块)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Banner</title>
    <style>
        *{
            margin: 0;
            padding: 0;
            list-style-type: none;
        }

        /* 轮播图 */
        .banner-list{
            width: 590px;
            height: 470px;
            /* overflow: hidden; */
            margin-top: 150px;
            margin-left: 300px;

            position: relative;
        }

        .banner-list li{
            position: absolute;
        }

        /* 通过修改元素的层级来显示指定的图片  */
        .banner-list li:nth-child(1){
            z-index: 1;
        }

        /* 小圆点 */
        .pointer{
            position: absolute;
            z-index: 9999;

            bottom: 20px;
            left: 50px;
        }

        .pointer a{
            /* display: block; */
            /* float设置之后脱离文档流,行内元素变为了块元素 */
            float: left;
            width: 10px;
            height: 10px;
            border-radius: 50%;
            background-color: rgba(255, 255, 255, .6);
            
            /*  
                给a标签添加border
                这样a:hover整体时不会浮动,
                缺点:
                若为其他颜色,则会显示
                若为transparent,则颜色会由background-color来填充
                所以,需要使用background-clip来裁剪(只要内容区的即可),
                但是又占据了border的位置 
            */
            border: 2px solid transparent;
            background-clip: content-box;

            margin: 0 2px;
        }

        .pointer a:hover{
            background-color: #fff;
            /* 添加了border,使得a标签变大,发生浮动 */
            border: 2px solid rgba(255, 255, 255, .6);
        }
    </style>
</head>
<body>
    <!-- 轮播图 -->
    <ul class="banner-list">
        <li><a href="javascript:;"><img src="./img/banner1.jpg"></a></li>
        <li><a href="javascript:;"><img src="./img/banner2.jpg"></a></li>
        <li><a href="javascript:;"><img src="./img/banner3.jpg"></a></li>
        <li><a href="javascript:;"><img src="./img/banner4.jpg"></a></li>

        <!-- 小圆点 -->
        <div class="pointer">
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
            <a href="javascript:;"></a>
        </div>
    </ul>
</body>
</html>

三、固定定位(fixed)

- 参照于浏览器的视口进行参照

四、粘滞定位(sticky,兼容性不好)

- 与相对定位的特点基本一致

- 不同点:粘滞定位可以在元素到达某个时将其固定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>导航条及粘滞定位</title>
    <style>
        /* 去除不必要的基础样式 */
        *{
            margin: 0px;
            padding: 0px;
            text-decoration: none;
            list-style-type: none;
        }

        body{
            height: 1000px;
        }

        .nav_bar{
            width: 1210px;
            height: 48px;
            background-color: #E8E7E3;
            /* 整个导航条居中 */
            margin: 0 auto;
            margin-top: 100px;

            /* 
                粘滞定位结合偏移量
                局限性:浏览器兼容不佳
             */
            position: sticky;
            top: 10px;
        }

        .nav_menu li{
            /* 浮动 */
            float: left;
            width: 150px;
            /* 文字垂直方向居中 */
            line-height: 48px;
            /* 文字水平居中 */
            text-align: center;
            padding: 0 11.33px;
        } 
        
        .nav_menu li a{
            font-size: 18px;
            color: #666;
        }
        
        /* 鼠标经过时,样式的改变 */
        .nav_menu li:hover{
            background-color: black;
        }
        .nav_menu li:hover a{
            color: white;
        }
    </style>
</head>
<body>
    <!-- 设置横向导航条 -->
    <nav class="nav_bar">
        <ul class="nav_menu">
            <li><a href="javascript:;">HTML/CSS</a></li>
            <li><a href="javascript:;">Browser Side</a></li>
            <li><a href="javascript:;">Server Side</a></li>
            <li><a href="javascript:;">Programming</a></li>
            <li><a href="javascript:;">XML</a></li>
            <li><a href="javascript:;">Web Building</a></li>
            <li><a href="javascript:;">Reference</a></li>
        </ul>         
    </nav>
</body>
</html>

五、z-index设置层级

- 对于开启了定位元素,可以通过z-index属性来指定元素的层级

z-index需要一个整数作为参数,值越大,元素的层级越高

元素的层级越高越优先显示

如果元素的层级一样,则优先显示靠下的元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>z-index</title>
    <style>
        .box1, .box2, .box3{
            width: 200px;
            height: 200px;
            position: absolute;
        }

        .box1{
            background-color: violet;
            z-index: 1;
        }

        .box2{
            background-color: rgba(9, 136, 136, 0.726);
            left: 50px;
            top: 50px;
            z-index: 2;
        }

        .box3{
            background-color: yellowgreen;
            left: 100px;
            top: 100px;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
</body>
</html>
原文地址:https://www.cnblogs.com/nadou/p/13874330.html