CSS中position 属性对应的值有 static、relative、absolute、fixed、sticky,在开发页面过程中会遇到元素的定位问题,那么如果我们了解了 position 属性的用处,在理清个值之间的区别之后,遇到需要定位处理的地方就不至于摸不清头脑了。
这里需要说明的是,如果设置了 position 属性,并且值不为 static ,那么元素可以设置对应的坐标属性 top | right | bottom | left 和 z-index ,记住哦,坐标属性只有在设置了 position 属性且值不为 static 的元素身上起作用。接下来我们将一一攻破 position 各项值的作用。
position:static是元素默认的定位设置。不管开发者有没有设置此属性,元素都会在正常的布局流中。
注意看下面的代码
<body>
<div class="block-red"></div>
<div class="block-blue"></div>
</body>
<style>
body {
margin: 0;
}
.block-red{
position:static;
width:100px;
height:100px;
background-color:red;
}
.block-blue{
width:100px;
height:100px;
background-color:blue;
}
</style>
position:relative,元素相对于其自身最初位置的定位。元素不会从正常的布局流中删除。下面我们来给设置了 relative 属性的红色模块添加附加的属性 top:100px 和 left:100px设置。
.block-red{
position:relative;
width:100px;
height:100px;
background-color:red;
top:100px;
left:100px;
}
.block-red{
position:absolute;
width:100px;
height:100px;
background-color:red;
}
<body>
<div>
<div class="block-red"></div>
<div class="block-blue"></div>
</div>
</body>
.wrapper{
background-color:#000;
width:300px;
height:300px;
margin-left:100px;
}
.block-red{
position:absolute;
width:100px;
height:100px;
background-color:red;
left:0px;
}
.block-blue{
width:100px;
height:100px;
background-color:blue;
}
<body>
<div class="wrapper">
<div class="block-red"></div>
<div class="block-blue"></div>
</div>
</body>
此时我们会发现,设置了position 属性的 div 变成了红色方块的参考点了。
fixed 和 absolute 类似,元素会从正常的布局流中删除。设置了 position:fixed 的元素参考点是浏览器窗口,他的位置不会随着页面的滚动而发生变化,在日常的开发中也是很常用的。我们看一下代码
.wrapper{
background-color:#000;
width:300px;
height:3000px;
margin-left:100px;
}
.block-red{
width:100px;
height:100px;
background-color:red;
}
.block-blue{
position:fixed;
top:0px;
left:200px;
width:100px;
height:100px;
background-color:blue;
}
我们发现不管页面如何滚动,蓝色方块的位置都不会改变,颇有一种管你们怎么变,反正我就在这里了你拿我也我没本法得感觉。
position:sticky 属性,相当于 absolute 和 fixed 的叠加,我们来用实际代码来理解一下。修改一下代码红色方块和黑色方块不加 position 属性,给黑色方块设置一个可以滚动的高度,再给蓝色方块设置 position:sticky属性,再来观察一下:
.wrapper{
background-color:#000;
width:300px;
height:3000px;
margin-left:100px;
}
.block-red{
width:100px;
height:100px;
background-color:red;
}
.block-blue{
position:sticky;
top:0px;
width:100px;
height:100px;
background-color:blue;
}
.block-green{
width:100px;
height:100px;
background-color:green;
}
<div class="wrapper">
<div class="block-red"></div>
<div class="block-blue"></div>
<div class="block-green"></div>
</div>
我们发现在页面没有滚动时,蓝色方块没什么变化,定位规则遵循 position:relative设置。当我们滚动页面至蓝色方块时,我们会发现,这时蓝色方块定位遵循 position:fixed设置,是不是很神奇呀。因为该属性比较新,浏览器兼容方面还不是很好,所以很少有人用,有兴趣的可以自己试一下。说到这里,有没有对 position 属性有一个清晰认识呢?当然如果想要更好的理解,还是要自己去实际操作。花不了半个小时,就会弄清楚的,为何不试试呢,对吧?
媛代码社区微信公众号