CSS:層疊樣式表—position

撐船的擺渡人發表於2018-06-08

CSS position屬性用於指定一個元素在文件中的定位方式。top,right,bottom和left屬性則決定了該元素的最終位置。

常見語法

static | relative | absolute | sticky | fixed

static

預設值。沒有定位,元素出現在正常的流中(忽略 top, bottom, left, right 或者 z-index 宣告)。

relative

生成相對定位的元素,相對於其正常位置進行定位(不改變頁面佈局,因此會在此元素未新增定位時所在位置留下空白)。

absolute

生成絕對定位的元素,相對於 static 定位以外的第一個父元素進行定位。脫離了文件流,不為元素預留空間,通過指定元素相對於最近的非 static 定位祖先元素的偏移,來確定元素位置。絕對定位的元素可以設定外邊距(margins),且不會與其他邊距合併。

fixed

生成絕對定位的元素,相對於瀏覽器視窗進行定位。

inherit

規定應該從父元素繼承 position 屬性的值。

可繼承的屬性:

  • 所有元素可繼承:visibility、cursor
  • 內聯元素可繼承:letter-spacing、word-spacing、white-space、line-height、color、font、 font-family、font-size、font-style、font-variant、font-weight、text- decoration、text-transform、direction
  • 塊狀元素可繼承:text-indent和text-align
  • 列表元素可繼承:list-style、list-style-type、list-style-position、list-style-image
  • 表格元素可繼承:border-collapse

不可繼承的屬性:

  • background-color…

initial

設定 CSS 屬性為它的預設值,可作用於任何 CSS 樣式。(IE 不支援該關鍵字)

unset

不設定

sticky

  • 盒位置根據正常流計算(這稱為正常流動中的位置),然後相對於該元素在流中的 flow root(BFC)和 containing block(最近的塊級祖先元素)定位。在所有情況下(即便被定位元素為 table 時),該元素定位均不對後續元素造成影響。當元素 B 被粘性定位時,後續元素的位置仍按照 B 未定位時的位置來確定。position: sticky 對 table 元素的效果與 position: relative 相同。
  • 元素定位表現為在跨越特定閾值前為相對定位,之後為固定定位。
  • 這個特定閾值指的是 top, right, bottom 或 left 之一,換言之,指定 top, right, bottom 或 left 四個閾值其中之一,才可使粘性定位生效。否則其行為與相對定位相同。

生效規則

  • 須指定 top, right, bottom 或 left 四個閾值其中之一,才可使粘性定位生效。否則其行為與相對定位相同。

  • 並且 top 和 bottom 同時設定時,top 生效的優先順序高,left 和 right 同時設定時,left 的優先順序高。

  • 設定為 position:sticky 元素的任意父節點的 overflow 屬性必須是 visible,否則 position:sticky 不會生效。這裡需要解釋一下:

  • 如果 position:sticky 元素的任意父節點定位設定為 overflow:hidden,則父容器無法進行滾動,所以 position:sticky 元素也不會有滾動然後固定的情況。
  • 如果 position:sticky 元素的任意父節點定位設定為 position:relative | absolute | fixed,則元素相對父元素進行定位,而不會相對 viewprot 定位。

由於相容性不好而不被重用,火狐和IOS有很好的支援性。

應用場景:電話薄和微信通訊錄的字母吸頂條。

現在只需要一個屬性:

position:sticky;top:0;

相關文章