在研究rem布局时,无意中看到网易新闻移动端首页的导航栏用上了一个CSS 3的属性粘性定位position:sticky,它是相对定位(position:relative)和固定定位(position:fixed)的混合。

使用它,我们不再用监听scroll事件,即可实现导航栏滚动绝对定位的效果。

 
网易新闻首页效果

基本用法

nav{
position:sticky;
top:10px; /* 阈值 */
}

top/bottom属性

比如我们设置top:100px时,在 viewport 视口滚动到元素距离小于设置的top:100px之前,元素为相对定位。当滚动到top:100px之后,元素将固定在与顶部距离 top:100px 的位置,直到 viewport 视口回滚到阈值以下。
根据下面的例子,我们可以看到position:sticky元素设置的top值是距离视口的距离,当它滚到距离低于其值时将固定在视口当中,此时该元素的效果就为固定定位。

下面例子的结构:

<h1 style="height:200px;">顶部高200px 红线为中线
</h1>
<nav style="position:sticky">这是导航 top:100px</nav>
<p>滚一个</p>
<p>滚一个</p>
 
设置top:100px

生效条件

需要注意的是,使用该属性有几个必要条件,否则会失效:

  1. 父元素不能overflow:hidden或者overflow:auto属性。
  2. 必须指定topbottomleftright4个值之一,否则只会处于相对定位
  3. 父元素的高度不能低于sticky元素的高度
  4. sticky元素仅在其父元素内生效

兼容

  position: -webkit-sticky;
position: sticky;

fall back

虽然其它浏览器尚不支持,但是实现起来其实不难,我们可以用js简单实现:

HTML
<div class="header"></div>
CSS
 .sticky { position: fixed; top: 0; } .header { width: 100%; background: #F6D565; padding: 25px 0; }
JS
 var header = document.querySelector('.header'); var origOffsetY = header.offsetTop; function onScroll(e) { window.scrollY >= origOffsetY ? header.classList.add('sticky') : header.classList.remove('sticky'); } document.addEventListener('scroll', onScroll);

粘性固定 position:sticky的更多相关文章

  1. 粘性固定属性 -- position:sticky

    概述 position: sticky,这是一个比较容易忽略的css3 position 新属性,它的作用即为实现粘性布局,它是 relative 与 fixed 的结合. 用法 默认情况下,其表现为 ...

  2. 使用 position:sticky 实现粘性布局

    如果问,CSS 中 position 属性的取值有几个?大部分人的回答是,大概是下面这几个吧? { position: static; position: relative; position: ab ...

  3. CSS使用position:sticky 实现粘性布局

    简介 前面写了一篇文章讲解了position常用的几个属性:<CSS 属性之 position讲解>一般都知道下面几个常用的: { position: static; position: ...

  4. 用position: sticky 实现粘性元素区域悬浮效果(转)

    用position: sticky 实现粘性元素区域悬浮效果 原创 2017年08月02日 20:04:13 161 在一些很长的表格中,常常会使用表头悬浮的设计以方便阅读,即在表格离开窗口之前,表头 ...

  5. position:sticky 粘性定位的几种巧妙应用

    背景:position: sticky 又称为粘性定位,粘性定位的元素是依赖于用户的滚动,在 position:relative 与 position:fixed 定位之间切换.元素根据正常文档流进行 ...

  6. position:sticky粘性布局

    新的布局方式,专门用于 tab栏悬浮效果: 当tab栏在可视区域时,正常滚动, tab栏不再可视区域时,悬浮置顶. position:-webkit-sticky; position:sticky; ...

  7. position sticky 定位

    1.兼容性 https://caniuse.com/#search=sticky chrome.ios和firefox兼容性良好. 2.使用场景 sticky:粘性.粘性布局. 在屏幕范围内时,元素不 ...

  8. position:sticky的兼容性尝试

    开篇 笔者刚刚结束淘宝的工作,现在加入了一家有青春活力的垂直电商公司,正对着阿里巴巴的西溪园区,最近一直在熟悉新的工作环境和规范,因此博客有好些时间没有更新了,在此抱歉! 在忙碌完公司的发布系统之后, ...

  9. position:sticky用法

    用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如 ...

随机推荐

  1. Vue知识整理13:表单输入绑定(v-model)

    text:将输入框等表单,通过data变量实现数据绑定. textbox:数据绑定 3.checkbox和redio组件: 注意:data数据变量中,checkbox有可能会有多个结果,所以用数组: ...

  2. 使用ffmpeg来转换media Video

    FFMPEG -i 1.wmv -c:v libx264 -strict -2 1_wmv.mp4 ffmpeg -i b.mp4 -codec copy -bsf h264_mp4toannexb ...

  3. 阶段3 1.Mybatis_12.Mybatis注解开发_3 mybatis注解开发保存和更新功能

    使用直接来实现CRUD操作 Insert方法 创建测试类 把变量都定义在外面 写测试方法 修改链接的数据库 update方法 再加上address 被更新的数据

  4. 阶段3 1.Mybatis_05.使用Mybatis完成CRUD_6 Mybatis的CRUD-保存操作的细节-获取保存数据的id

    保存后得到id 默认查询出来的是0,因为没有插入就要得到最后的id值. insert语句跟在前面就可以获取到id了 新插入的这条数据就是51 order=after表示在insert语句后再去获取id ...

  5. CentOS安Elasticsearch

    工作中有需求用到es做数据分析和日志搜索的,整理记录一下安装部署过程.ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful we ...

  6. firewalld无法使用解决

    一.安装完Python3.6.5后无法使用firewalld解决 解决:需要把/usr/sbin/firewalld./usr/bin/firewall-cmd 的头部内容改为原来的 pyton2.7 ...

  7. oracle 日期格式操作

    原文转自:http://hi.baidu.com/gzfvb/blog/item/5062b7f008eb70a8a50f5206.html   Oracle日期格式:   to_date(" ...

  8. java通过jna调用so

    c++: FirstEliteValidate.h #pragma once void __attribute__((constructor)) startup();void __attribute_ ...

  9. PIL实现图片框架以及生成图片验证码

    1. PIL的基本概念 PIL:即Python Imaging Library,是Python平台事实上的图像处理标准库. PIL中涉及通道(bands)和模式(mode)这两个重要概念. (1)通道 ...

  10. 【Windows Server存储】MBR和GPT分区表

    MBR和GPT分区表 分区表用于引导操作系统 master boot record(MBR)于1983年首次在PC上推出 最大4个主分区 2太空间 GUID Partition Table(GPT), ...