粘性布局 position:sticky

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

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

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

  • sticky

没错= =就是它!

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

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

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

 

html代码如下:

<div>
    <dl>
         <dt>Adt>
         <dd>A1dd>
         <dd>A2dd>
         <dd>A3dd>
         <dd>A4dd>
         <dd>A5dd>
         <dd>A6dd>
     dl>
     <dl>
          <dt>Cdt>
          <dd>C1dd>
          <dd>C2dd>
          <dd>C3dd>
          <dd>C4dd>
          <dd>C5dd>
          <dd>C6dd>
      dl>
      <dl>
          <dt>Ddt>
          <dd>D1dd>
          <dd>D2dd>
          <dd>D3dd>
          <dd>D4dd>
          <dd>D5dd>
          <dd>D6dd>
      dl>
      <dl>
          <dt>Edt>
          <dd>E1dd>
          <dd>E2dd>
          <dd>E3dd>
          <dd>E4dd>
          <dd>E5dd>
          <dd>E6dd>        
      dl>
      <dl>
          <dt>Fdt>
          <dd>F1dd>
          <dd>F2dd>
          <dd>F3dd>
          <dd>F4dd>
          <dd>F5dd>
          <dd>F6dd>
      dl>
      <dl>
          <dt>Tdt>
          <dd>T1dd>
          <dd>T2dd>
          <dd>T3dd>
          <dd>T4dd>
          <dd>T5dd>
          <dd>T6dd>
      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;
}    

 运行效果如下:

粘性布局 position:sticky_第1张图片

 粘性布局可以用于:

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

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

 粘性布局 position:sticky_第2张图片

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

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

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

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

转载于:https://www.cnblogs.com/ALOLONGHUN/p/6666491.html

你可能感兴趣的:(粘性布局 position:sticky)