CSS中新增的position属性sticky的使用方法
在开发前端页面的时候,前端切图人员经常会遇到一类需求,如:在默认下导航在logo等内容下方,当网页向上滑动时,为了继续保持导航的导向功能,我们会将导航固定在浏览器视口顶部。在文章详情页中,也经常会见到,文章详情部分非常长,侧栏类型数目较少,为了防止在网页向上滑动时,侧栏滑出可视范围,造成视觉上的突兀,我们一般也会设置,让侧栏的某个部分,在滑动到顶部时,像position:fixed的效果一样,粘性固定在浏览器顶部。这种效果一般被前端开发者们成为粘性定位效果。
以前为了实现这种粘性定位效果,以往我们需要借助JS,监听页面的Scroll事件,再结合给需要粘性定位的元素增删position:fixed样式来实现。但是现在,CSS3新增的属性中有了一个position:sticky的属性,可以让我们在不使用js的情况下,能更轻松的实现这种粘性定位效果。
一、position: sticky 的使用
我们熟知的position的取值一般是:: absolute、relative、fixed。对于新增的sticky值,目前使用并不是很广泛。
其中:absolute、fixed为绝对元素定位,relative为相对元素定位,新增的sticky为粘性定位。
粘性定位可以理解为是相对元素定位和绝对元素定位的结合,在未超过一定阈值之前为相对元素定位,超过之后为绝对元素定位。这里的阈值,指的是其距离其父元素的距离达到设定的sticky粘性定位的要求时,比如top:0。如以下代码:
.box { position: sticky; top: 100px; }
当box元素距离视窗viewport顶部大于100px时,此时box元素的定位为相对定位(position: relative),当box元素距离视窗顶部等于100px时,box元素则会固定在视口顶部100px处(position: fixed)。这里的top:100px即为阈值。
如果存在其父元素时,如下代码:
<div class="outbox">
<div class="box"></div>
</div>
此时,box元素的显示还取决于其父元素是否在视口内可见。如其父元素滑动出视口区域,则box元素也会一起滑出。(因为受父元素的影响,所以position: sticky并不能完全代替传统的JS实现,有时需要牺牲HTML代码结构。)
为了便于大家理解,可测试如下示例,HTML代码:
<div class="box box01">
<h1>Box01</h1>
<p>box01<br />box01<br />box01<br />box01<br />box01<br />box01</p>
</div>
<div class="box box02">
<h1>Box02</h1>
<p>box02<br />box02<br />box02<br />box02<br />box02<br />box02</p>
</div>
<div class="box box03">
<h1>Box03</h1>
<p>box03<br />box03<br />box03<br />box03<br />box03<br />box03</p>
</div>
CSS代码:
*{ margin: 0; padding: 0;}
body{ min-height: 5000px;}
.box{
width: 300px; margin-bottom: 10px; margin-left: 100px; border: 1px solid red;
h1{ width: 100%; line-height: 40px; background: #f90; color: #fff; position: sticky; top: 0;}
p{ line-height: 30px; font-size: 16px;}
}
position:sticky粘性定位属性常见的应用场景还有按首字母分类的页面,当滚动区域为A字母开头的内容时,顶部显示标题A字母,当滚动B字母开头时的内容时,顶部显示B字母的标题,以此类推。以往这些效果我们都需要通过JS监听页面滚动才能实现。
二、position: sticky 使用的注意事项:
1、position: sticky 必须指定top、right、bottom、left四个值(即阈值)中的至少一个才能生效;
2、定义了属性为position: sticky的元素的上级元素,不可使用值为:hidden、auto、scroll的overflow属性。这些设置会抑制所有子元素的position: sticky行为。

CSS颜色函数--rgb()、rgba()的语法和使用
rgb()函数和rgba()函数是前端切图工作当中经常用到的颜色函数,根据光学三原色红(red)、绿(green)、蓝(blue)三种颜色的不同分量进行混合后来
CSS最大值计算函数--max()函数的定义和使用
max()函数的作用是从一系列用逗号分割的参数中选取最大的一个,作为属性值,参数可以是直接数值,字面量、数学表达式、css函数等,支持嵌套。与min()函数的作
后台发布文章时自动保存草稿功能的实现
“正在系统后台编辑文章,顺手看了下群里的视频,关视频的时候不小心连网页一起关闭了,写了大半的文章说没就没了?”,相信很多人都遇到过这种场景,辛辛苦苦码了半天的字
WebStorm中如何配置SCSS
WebStorm是一款很优秀的用于前端开发的IDE,用于开发基于HTML、CSS、JS等的应用时非常应手,当然JetBrains旗下的其他IDE,如PHPSto
富文本编辑器CKEditor5接入指南
在后端制作CMS等需要用到富文本编辑器的时候,经常会陷入选择困难症,众所周知,目前市面上的富文本编辑器大概有数十种,比如百度的ueditor、TinyMCE、w
CSS函数整理,CSS函数的使用方法
有很多前端切图人员对CSS函数这个名词有些陌生,事实上有很多CSS函数我们经常在代码中使用,只是我们没有意识到而已。像我们常见的定义颜色值的rgb、rgba都属
CSS颜色函数--rgb()、rgba()的语法和使用
rgb()函数和rgba()函数是前端切图工作当中经常用到的颜色函数,根据光学三原色红(red)、绿(green)、蓝(blue)三种颜色的不同分量进行混合后来
CSS最大值计算函数--max()函数的定义和使用
max()函数的作用是从一系列用逗号分割的参数中选取最大的一个,作为属性值,参数可以是直接数值,字面量、数学表达式、css函数等,支持嵌套。与min()函数的作