CSS3 中 positions:ticky

156 阅读1分钟

关于 position 属性主要是四种:

static:

默认值,没有定位,静态定位的元素不会受到 top、bottom、left、right 影响

relative:

相对定位,相对定位元素的定位是相对其他正常位置,一般和绝对定位一起使用

fixed:

固定定位,元素的位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会移动。

absolute:

绝对定位,绝对定位的元素的位置相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于html,经常和相对定位结合使用

那么sticky是什么意思呢?

sticky是CSS3定位新增属性,可以说是相对定位relative和固定定位fixed的结合;主要是用在对scroll事件的监听。

简单来说,在滑动的过程中,某个元素距离其父元素的距离达到sticky粘性定位的要求时(例如top:100px),position:sticky此时的效果相当于fixed定位,固定在适当的位置。

position:sticky:基于用户的滚动位置来定位。在跨域特定阈值前为相对定位,之后称为固定定位。

MDN上的案例:

html

<div>
  <dl>
    <dt>A</dt>
    <dd>Andrew W.K.</dd>
    <dd>Apparat</dd>
    <dd>Arcade Fire</dd>
    <dd>At The Drive-In</dd>
    <dd>Aziz Ansari</dd>
  </dl>
  <dl>
    <dt>C</dt>
    <dd>Chromeo</dd>
    <dd>Common</dd>
    <dd>Converge</dd>
    <dd>Crystal Castles</dd>
    <dd>Cursive</dd>
  </dl>
  <dl>
    <dt>E</dt>
    <dd>Explosions In The Sky</dd>
  </dl>
  <dl>
    <dt>T</dt>
    <dd>Ted Leo & The Pharmacists</dd>
    <dd>T-Pain</dd>
    <dd>Thrice</dd>
    <dd>TV On The Radio</dd>
    <dd>Two Gallants</dd>
  </dl>
</div>

css

* {
  box-sizing: border-box;
}

dl {
  margin: 0;
  padding: 24px 0 0 0;
}

dt {
  background: #B8C1C8;
  border-bottom: 1px solid #989EA4;
  border-top: 1px solid #717D85;
  color: #FFF;
  font: bold 18px/21px Helvetica, Arial, sans-serif;
  margin: 0;
  padding: 2px 0 0 12px;
  position: -webkit-sticky;
  position: sticky;
  top: -1px;
}

dd {
  font: bold 20px/45px Helvetica, Arial, sans-serif;
  margin: 0;
  padding: 0 0 0 12px;
  white-space: nowrap;
}

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