粘性布局 position:sticky

今天在网上浏览时偶然发现原来CSS中的position属性除了有以下几个取值之外:

  • static(默认)
  • relative
  • absolute
  • fixed
  • inhert

还有一个之前没见到的取值:

  • sticky

没错= =就是它!

sticky顾名思义粘性的,它的作用如下:

盒位置根据正常流计算,然后相对于该元素在流中的 flow root(BFC)和 containing block(最近的块级祖先元素)定位。在所有情况下(即便被定位元素为 table 时),该元素定位均不对后续元素造成影响。当元素 B 被粘性定位时,后续元素的位置仍按照 B 未定位时的位置来确定。

这样的解释还是模模糊糊的,接下来用例子来看一下(一言不合就发代码):

html代码如下:

<div>
    <dl>
         <dt>A</dt>
         <dd>A1</dd>
         <dd>A2</dd>
         <dd>A3</dd>
         <dd>A4</dd>
         <dd>A5</dd>
         <dd>A6</dd>
     </dl>
     <dl>
          <dt>C</dt>
          <dd>C1</dd>
          <dd>C2</dd>
          <dd>C3</dd>
          <dd>C4</dd>
          <dd>C5</dd>
          <dd>C6</dd>
      </dl>
      <dl>
          <dt>D</dt>
          <dd>D1</dd>
          <dd>D2</dd>
          <dd>D3</dd>
          <dd>D4</dd>
          <dd>D5</dd>
          <dd>D6</dd>
      </dl>
      <dl>
          <dt>E</dt>
          <dd>E1</dd>
          <dd>E2</dd>
          <dd>E3</dd>
          <dd>E4</dd>
          <dd>E5</dd>
          <dd>E6</dd>
      </dl>
      <dl>
          <dt>F</dt>
          <dd>F1</dd>
          <dd>F2</dd>
          <dd>F3</dd>
          <dd>F4</dd>
          <dd>F5</dd>
          <dd>F6</dd>
      </dl>
      <dl>
          <dt>T</dt>
          <dd>T1</dd>
          <dd>T2</dd>
          <dd>T3</dd>
          <dd>T4</dd>
          <dd>T5</dd>
          <dd>T6</dd>
      </dl>
 </div>

CSS代码如下:

PS:(一定要设置top值,否则效果会和相对定位一样。以下设置了top: -1px;则当sticky元素位置距离定位的父级大于-1px时,相对定位;小于-1px时(fixed)固定定位)

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

dl {
    padding: 24px 0 0 0;
}

dl:nth-child(1) {
    padding: 0;
}

dt {
    font: bold 18px/21px sans-serif;
    background: #B8C1C8;
    border-bottom: 1px solid #989EA4;
    border-top: 1px solid #717D85;
    color: #FFF;
    padding: 2px 0 0 12px;
    /*粘性布局*/
    position: sticky;
    position: -webkit-sticky;
    position: -moz-sticky;
    position: -ms-sticky;
    position: -o-sticky;
    top: -1px;
}

dd {
    font: bold 20px/45px sans-serif;
    padding: 0 0 0 12px;
}

dd + dd {
    border-top: 1px solid #CCC;
}    

运行效果如下:

粘性布局可以用于:

  • 制作电话簿列表
  • 旅游app的地点选择页
  • 宣传页面的顶部导航条
  • 等等。。。

虽然粘性布局非常方便,但它的缺点也很明显,即兼容性不好,见下图:

相对来说,在ios的兼容性较好,所以放心大胆的在ios上用吧!

由此看来,对于使用粘性布局我们还是需要用js来检测一下浏览器是否支持sticky值的,可以用以下代码来判断:

if (CSS.supports("position", "sticky") || CSS.supports("position", "-webkit-sticky")) {
    // 支持 sticky
}

本文也是胡乱写了一通,毕竟第一次写博客,如果有错误的地方,希望大家不吝指教。

时间: 2024-08-28 15:22:57

粘性布局 position:sticky的相关文章

粘性定位position:sticky

原文:https://www.zhangxinxu.com/wordpress/2018/12/css-position-sticky/ 前些日子,我在小程序上使用了这个属性,经个人实践及思考,发现原文的如下片段有些问题,比如使用position:sticky的限制条件,当时没有及时总结,具体是什么我忘了,还需下次实践的时候补充. 原文地址:https://www.cnblogs.com/djjlovedjj/p/11326444.html

position:sticky实现iOS6+下的粘性布局

position:sticky实现iOS6+下的粘性布局 使用 position: sticky 达到粘性元素区域悬浮效果

使用 position: sticky 达到粘性元素区域悬浮效果

在一些很长的表格中,常常会使用表头悬浮的设计以方便阅读,即在表格离开窗口之前,表头会一直 fixed 悬浮在表格的最顶上.还有许多诸如评论框等元素,也采用了这种被称为 Sticky Pin 或者 粘性元素 的设计. 这种效果一直以来需要通过 JavaScript 实现.不过就在去年,这项结合了 Relative (在屏幕中时) 和 Fixed (移出屏幕时) 的样式效果被提案添加到了 CSS3 中.下面是一个示例: .sticky { position: -webkit-sticky; posi

position:sticky布局

用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如,侧边栏的部分区域.position:sticky为此而生. position:sticky用法   position:sticky 是一个新的css3属性,它的表现类似 position:relative 和 position:fixed 的合体,在目标区域在屏幕中可见时,它的行为就像 posit

position:sticky

前言:position:sticky是css定位新增属性:可以说是相对定位relative和固定定位fixed的结合:它主要用在对scroll事件的监听上:简单来说,在滑动过程中,某个元素距离其父元素的距离达到sticky粘性定位的要求时(比如top:100px):position:sticky这时的效果相当于fixed定位,固定到适当位置.使用:#sticky-nav {position: sticky;top: 100px;}设置position:sticky同时给一个(top,bottom

CSS3的position:sticky介绍

用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如,侧边栏的部分区域.position:sticky为此而生. position:sticky用法 position:sticky是一个新的css3属性,它的表现类似position:relative和position:fixed的合体,在目标区域在屏幕中可见时,它的行为就像position:rela

粒子效果 QQ粘性布局 (CAShapeLayer形状图层)

CAShapeLayer 可以根据一个路径生成一个形状: 1.基本功能的实现:(1)添加一个button:自定义button,创建一个类:绑定按钮:(2)在自定义的button类中,在awakeFromNib中对这个按钮进行初始化:设置圆角,背景颜色,字体颜色,字体大小:(3)调用取消高亮状态的方法:-setHightLighted:(4)awakeFromNib添加pan手势,(5)在pan方法中:获取偏移量:修改self.transform=CGAffine...:进行复位操作:(6)在aw

position:sticky用法

用户的屏幕越来越大,而页面太宽的话会不宜阅读,所以绝大部分网站的主体宽度和之前相比没有太大的变化,于是浏览器中就有越来越多的空白区域,所以你可能注意到很多网站开始在滚动的时候让一部分内容保持可见,比如,侧边栏的部分区域.position:sticky为此而生. position:sticky用法 position:sticky是一个新的css3属性,它的表现类似position:relative和position:fixed的合体,在目标区域在屏幕中可见时,它的行为就像position:rela

鼠标滚动,导航置顶.纯css3的position: sticky;

position: sticky; 这东西来自css3,并且瞬间就完成了置顶的效果. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .a{ //定位头部置顶效果 top: 0; position: sticky; } .b{ //当纯的给个滚