主要介绍 position 属性值 - sticky,中文意思是“黏性的”, position:sticky 黏性定位
简介
sticky 属性值的设计的初衷就是把原来 JavaSctipt 才能实现的黏性效果改由css实现,效果常用语导航元素上
案例
button {
width: -webkit-fill-available;
width: -moz-available;
width: stretch;
margin-left: 15px;
margin-right: 15px;
position: sticky;
top: 0;
}
.table {
width: 100%;
height: 50vh;
}
<div style="height: 500vh;">
<button type="button">asd1</button>
<div class="table"></div>
<button type="button">asd2</button>
<div class="table"></div>
<button type="button">asd3</button>
<div class="table"></div>
<button type="button">asd4</button>
<div class="table"></div>
<button type="button">asd5</button>
<div class="table"></div>
<button type="button">asd6</button>
<div class="table"></div>
</div>
兼容性
- ie 不支持
- Edge 16+
- Firefox 32+
- Chrome 56+
- Safari 6.1+
- ios Safari 6+
- Android Browser 5+
黏性定位与固定定位
以前通过 js 计算滚动的位置,让 position 属性的值在 relative 和 fixed 之间切换来实现,因此,很多开发者误认为黏性定位就是相对定位和绝对定位的结合体,但两者是没有任何关系,黏性定位是相对定位的延伸
与相对定位相似的地方
- 元素发生偏移的时候,元素的原位置是保留的
- 创建了新的绝对定位包含块,也就是黏性定位元素里面如果有绝对定位的子元素,那个子元素设置 left/top/right/bottom 属性时的偏移计算是相对于当前黏性定位元素
- 支持设置 z-index 属性值来改变元素的层叠顺序
黏性定位和相对定位不一样的地方
- 偏移计算元素不一样,相对定位偏移计算的容器是父元素,而黏性定位偏移计算的元素是层级最近的可滚动元素 (overflow属性值不是visible的元素),如果一个可滚动元素都没有,则相对浏览器进行位置偏移
- 偏移定位计算规则不一样,黏性定位的计算规则比较复杂,涉及多个黏性定位专有的概念
- 重叠表现不一样。相对定位元素彼此独立,重叠的时候表现为堆叠;但黏性定位元素在特定结构下,元素重叠的时候并不是表现为堆叠,而是会有A黏性定位元素推开B黏性定位元素的视觉表现
可滚动对黏性定位的影响
通常 Web 页面都是窗体滚动的,而黏性定位偏移计算元素是层级最近的那个滚动元素,因此,如果黏性定位元素的某个祖先元素的 overflow 属性值不是 visible ,那么窗体滚动时候不会有定位效果
- 如
<div>
<nav></nav>
</div>
div{overflow:hidden;}
nav{position:sticky;top:0;}