CSS04——定位布局

CSS04——定位布局

定位布局

静态定位(Static positioning)

是所有元素的默认定位方式。意味着经一个元素定位在默认文档流中。

position:static;

相对定位(Relative position)

相对定位就是相对于自己以前在标准流中的位置来移动

position:relative;

使用top,right,bottom,left来控制

例如:

<body>
    <div class="div1"></div>
    <div class="div2"></div>
    <div class="div3"></div>
</body>
   <style>
        *{
            margin: 0;
            padding: 0;
        }
        .div1,.div2,.div3{
            width: 200px;
            height: 200px;
        }
        .div1{
            background-color: pink;
        }
        .div2{
            background-color: skyblue;
        	position: relative;
        	top: 40px;
       	 	left: 40px;
        }
        .div3{
            background-color: yellow;
        }
    </style>

注意点:
1、相对定位是相对自身在浏览器中的默认位置,不脱离文档流
2、同一方向的属性只能用一个
3、因为不脱离文档流,所以相对定位中是区分块级元素/行内元素/行内块元素
4、给相对定位的元素设置margin/padding等属性时也影响到标准流的布局。

相对定位的应用场景:
1、用于对元素进行微调
2、配合绝对定位使用(子绝父相)

绝对定位

绝对定位是相对于body来定位

例如:

<body>
    <div class="div1"></div>
    <div class="div2">
        <div class="div4"></div>
    </div>
    <div class="div3"></div>
</body>
    <style>
*{
            margin: 0;
            padding: 0;
        }
        .div1,.div2,.div3{
            width: 100px;
            height: 100px;
        }
        .div1{
            background-color: pink;
        }
        .div2{
             background-color: skyblue;
             position: relative;
        }
        .div3{
            background-color: yellow;
        }
        .div4{
            width: 50px;
            height: 50px;
            background-color: plum;
            position: absolute;
            top: 40px;
        }
    </style>

/* 绝对定位
特性:
1、脱离文档流 原先位置不保留
2、默认使用了绝对定位元素 无论有没有父元素
参照点是body浏览器视口区域
3、如果祖先元素使用了定位属性
则相对于祖先元素定位
*/

注意点:
1、脱离文档流,原先位置不保留区
2、默认使用了绝对定位元素,无论有没有父元素,参照点都是body的视口区域
3、如果祖先元素使用了定位属性,则相对于祖先元素定位

子绝父相

相对定位弊端:
         相对定位不会脱离标准流, 会继续在标准流中占用一份空间, 所以不利于布局界面

​ 绝对定位弊端:
​         默认情况下绝对定位的元素会以body作为参考点, 所以会随着浏览器的宽度高度的变化而变化

​ 子绝父相
​       子元素用绝对定位, 父元素用相对定位

固定定位

固定定位可以让某个盒子不随着滚动条的滚动而滚动

position: fixed;

例如:

<body>
    <div>第1个标签</div>
    <div>第2个标签</div>
    <div>第3个标签</div>
    <div>第4个标签</div>
    <div>第5个标签</div>
    <div>第6个标签</div>
    <div>第7个标签</div>
    <div>第8个标签</div>
    <div>第9个标签</div>
    <div>第10个标签</div>
    <div>第11个标签</div>
    <div>第12个标签</div>
    <div>第13个标签</div>
    <div>第14个标签</div>
    <div>第15个标签</div>
    <div>第16个标签</div>
    <div>第17个标签</div>
    <div>第18个标签</div>
    <div>第19个标签</div>
    <div>第20个标签</div>
    <div>第21个标签</div>
    <div>第22个标签</div>
    <div>第23个标签</div>
    <div>第24个标签</div>
    <div>第25个标签</div>
    <div>第26个标签</div>
    <div>第27个标签</div>
    <div>第28个标签</div>
    <div>第29个标签</div>
    <div>第30个标签</div>
    <div>第31个标签</div>
    <div>第32个标签</div>
    <div>第33个标签</div>
    <div>第34个标签</div>
    <div>第35个标签</div>
    <div>第36个标签</div>
    <div>第37个标签</div>
    <div>第38个标签</div>
    <div>第39个标签</div>
    <div>第40个标签</div>
    <div>第41个标签</div>
    <div>第42个标签</div>
    <div>第43个标签</div>
    <div>第44个标签</div>
    <div>第45个标签</div>
    <div>第46个标签</div>
    <div>第47个标签</div>
    <div>第48个标签</div>
    <div>第49个标签</div>
    <div>第50个标签</div>
    <div>第51个标签</div>
    <div>第52个标签</div>
    <div>第53个标签</div>
    <div>第54个标签</div>
    <div>第55个标签</div>
    <div>第56个标签</div>
    <div>第57个标签</div>
    <div>第58个标签</div>
    <div>第59个标签</div>
    <div>第60个标签</div>
    <div>第61个标签</div>
    <div>第62个标签</div>
    <div>第63个标签</div>
    <div>第64个标签</div>
    <div>第65个标签</div>
    <div>第66个标签</div>
    <div>第67个标签</div>
    <div>第68个标签</div>
    <div>第69个标签</div>
    <div>第70个标签</div>
    <div>第71个标签</div>
    <div>第72个标签</div>
    <div>第73个标签</div>
    <div>第74个标签</div>
    <div>第75个标签</div>
    <div>第76个标签</div>
    <div>第77个标签</div>
    <div>第78个标签</div>
    <div>第79个标签</div>
    <div>第80个标签</div>
    <div>第81个标签</div>
    <div>第82个标签</div>
    <div>第83个标签</div>
    <div>第84个标签</div>
    <div>第85个标签</div>
    <div>第86个标签</div>
    <div>第87个标签</div>
    <div>第88个标签</div>
    <div>第89个标签</div>
    <div>第90个标签</div>
    <div>第91个标签</div>
    <div>第92个标签</div>
    <div>第93个标签</div>
    <div>第94个标签</div>
    <div>第95个标签</div>
    <div>第96个标签</div>
    <div>第97个标签</div>
    <div>第98个标签</div>
    <div>第99个标签</div>
    <div>第100个标签</div>
    <div class="divBot"><a href="#">回到顶部</a></div>
</body>
 <style>
        .divBot{
            width: 100px;
            height: 100px;
            background-color: yellow;
            position: fixed;
            top: 20px;
            right: 0px;
        }
    </style>

注意:
1、固定定位的元素是脱离标准流的,不会占用标准中的空间
2、相对于浏览器的视口区域移动

粘滞定位

结合了 position:relative 和 position:fixed 两种定位功能于一体的特殊定位。

position: sticky;

例如:

<body>
    <div class="container">
        <div></div>
        <div></div>
        <!-- 设置两个侧边栏 -->
        <aside class="right"></aside>
        <aside class="left"></aside>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </div>
</body>
 <style>
        .container{
            width: 1200px;
            margin: 0 auto;

        }
        .container>div{
            height: 700px;
        }
        .container>div:nth-child(odd){
            background-color: white;
        }
        .container>div:nth-child(even){
            background-color: rgb(236, 194, 236);
        }
        /* 设置左侧侧边栏的样式 */
        .left{
            width: 100px;
            height: 500px;
            margin-left: 10px;
            background-color: skyblue;
            /* 设置粘滞定位 */
            position: sticky;
            top: 50px;  
        }
        /* 设置右侧侧边栏 */
        .right{
            width: 100px;
            height: 500px;
            float: right;
            background-color: pink;
            position: sticky;
            top: 50px;

        }
    </style>

注意:
1、不脱离文档流 原先位置保留
2、设置 position:sticky 同时给一个 (top,bottom,right,left) 之一即可

使用条件:
​ 1、父元素不能overflow:hidden或者overflow:auto属性。

​ 2、必须指定top、bottom、left、right4个值之一,否则只会处于相对定位

​ 3、父元素的高度不能低于sticky元素的高度

​ 4、sticky元素仅在其父元素内生效

水平垂直居中

例如:

<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>

第一种

 .parent{
            width: 200px;
            height: 200px;
            background-color: skyblue;
            /* 1、水平垂直居中  通过给父元素设置边框*/
             border: 1px solid skyblue; 
        }
         .child{
            width: 100px;
            height: 100px;
            background-color: pink;
            /* 1.2、设置margin上下左右为宽高的各一半 */
            margin: 50px; 
        }

第二种

 .parent{
            width: 200px;
            height: 200px;
            background-color: skyblue;
            /* 2 、水平垂直居中 通过父元素挤压padding*/
            padding: 50px; 
            /* 2.2、设置边框盒模型 */
            box-sizing: border-box; 
        }
        .child{
            width: 100px;
            height: 100px;
            background-color: pink;
        }

第三种:

.parent{
            width: 200px;
            height: 200px;
            background-color: skyblue;
            /* 3、给父元素设置相对定位 */
             position: relative; 
        }
        .child{
            width: 100px;
            height: 100px;
            background-color: pink;
            /* 3.2 子元素设置绝对定位
                配合属性全部为0 */
             position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            margin: auto;
        }

第四种:

.parent{
            width: 200px;
            height: 200px;
            background-color: skyblue;
            /* 4、父元素相对定位 */
            position: relative;
        }
        .child{
            width: 100px;
            height: 100px;
            background-color: pink;
             /* 4.2、给子元素绝对定位 */
            position: absolute;
            top: 50%;
            left: 50%;
            margin-left: -50px;
            margin-top: -50px;
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值