本文收纳于: 从零开始的大前端筑基之旅(深刻浅出,持续更新~)css
CSS position
属性用于指定一个元素在文档中的定位方式。top
,right
,bottom
和 left
属性则决定了该元素的最终位置。前端
例如:web
.element {
position: relative;
top: 50px;
left: 50px;
}
复制代码
该关键字指定元素使用正常的布局行为,即元素在文档常规流中当前的布局位置。此时 top
, right
, bottom
, left
和 z-index
属性无效。浏览器
该关键字下,元素先放置在未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(所以会在此元素未添加定位时所在位置留下空白)。wordpress
position:relative 对 table-*-group, table-row, table-column, table-cell, table-caption 元素无效。布局
如上图所示,虽然第一个方块由于relative
移动了位置,但并未影响页面本来布局。post
元素会被移出正常文档流,并不为元素预留空间,经过指定元素相对于最近的非 static 定位祖先元素的偏移,来肯定元素位置。绝对定位的元素能够设置外边距(margins),且不会与其余边距合并。spa
此时,蓝色框的父元素设置为
position: relative
,用来限定子元素绝对定位的位置,child element
设置为top: 80px, left: 50px
3d
元素会被移出正常文档流,并不为元素预留空间,而是经过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出如今的每页的固定位置。fixed
属性会建立新的层叠上下文。rest
当元素祖先的
transform
,perspective
或filter
属性非none
时,容器由视口改成该祖先。
元素根据正常文档流进行定位,而后相对它的_最近滚动祖先(nearest scrolling ancestor)_和 containing block (最近块级祖先 nearest block-level ancestor),包括table-related元素,基于top
, right
, bottom
, 和 left
的值进行偏移。偏移值不会影响任何其余元素的位置。该值老是建立一个新的层叠上下文(stacking context。
注意,一个sticky元素会“固定”在离它最近的一个拥有“滚动机制”的祖先上(当该祖先的
overflow
是hidden
,scroll
,auto
, 或overlay
时),即使这个祖先不是真的滚动祖先。
粘性定位能够被认为是相对定位和固定定位的混合。当元素在屏幕或滚动元素显示区域时,表现为relative,就要滚出显示器屏幕的时候,表现为fixed。
能够滚动下面这个框感觉下交互表现
其中,标示A被设置为:
{
position: sticky;
top: 10px;
}
复制代码
随着页面的滚动,当标示A距离上边缘10px距离的时候,黏在了上边缘,表现如同position:fixed
。
sticky
和fixed
定位有着根本性的不一样,fixed元素直抵页面根元素,其余父元素对其left/top定位没法限制。而sticky元素效果彻底受制于父级元素。
仍是上面的栗子,我在每一个标题组上加了红色或蓝色的边框,这些边框就是标示A、C、E、T的父元素边框,能够很明显的看到,粘性定位的元素在移动到父元素的底部时,就不会再保持吸顶,而是随着父元素移出显示区域。
所以能够推出一些特性:
height
高度值,或者高度计算值和粘性定位元素高度同样,不会粘滞效果。因为每个标示组,属于不一样的父元素,所以,滚动的时候,后面的标题才能把前面已经sticky定位的标题推开,造成层次滚动吸顶效果。这是sticky定位自然的特性,无需任何JavaScript的帮助。
若是全部的标题头都在同一个父元素下,就会致使全部sticky定位的新闻标题都会重叠在一块儿。
仍是不理解粘性定位规则的花建议看一下参考文档1。
若是你收获了新知识,或者收获了左侧精美图片,请点个赞吧~
参考文档: