CSS使用position:sticky 實(shí)現(xiàn)粘性布局的方法
簡(jiǎn)介
前面寫(xiě)了一篇文章講解了position常用的幾個(gè)屬性:《CSS基礎(chǔ)篇-- position屬性講解》
一般都知道下面幾個(gè)常用的:
{
position: static;
position: relative;
position: absolute;
position: fixed;
}
在https://developer.mozilla.org/zh-CN/docs/Web/CSS/position還說(shuō)了下面這三個(gè)值:
/* 全局值 */ position: inherit; position: initial; position: unset;
估計(jì)大部分都沒(méi)有用過(guò)position:sticky吧。這個(gè)屬性值還在試驗(yàn)階段。怎樣描述它呢?
初窺 position:sticky
sticky 英文字面意思是粘,粘貼,所以姑且稱(chēng)之為粘性定位。下面就來(lái)了解下這個(gè)處于實(shí)驗(yàn)性的取值的具體功能及實(shí)用場(chǎng)景。
這是一個(gè)結(jié)合了 position:relative 和 position:fixed 兩種定位功能于一體的特殊定位,適用于一些特殊場(chǎng)景。
什么是結(jié)合兩種定位功能于一體呢?
元素先按照普通文檔流定位,然后相對(duì)于該元素在流中的 flow root(BFC)和 containing block(最近的塊級(jí)祖先元素)定位。
而后,元素定位表現(xiàn)為在跨越特定閾值前為相對(duì)定位,之后為固定定位。
這個(gè)特定閾值指的是 top, right, bottom 或 left 之一,換言之,指定 top, right, bottom 或 left 四個(gè)閾值其中之一,才可使粘性定位生效。否則其行為與相對(duì)定位相同。
sticky:對(duì)象在常態(tài)時(shí)遵循常規(guī)流。它就像是relative和fixed的合體,當(dāng)在屏幕中時(shí)按常規(guī)流排版,當(dāng)卷動(dòng)到屏幕外時(shí)則表現(xiàn)如fixed。該屬性的表現(xiàn)是現(xiàn)實(shí)中你見(jiàn)到的吸附效果。
常用場(chǎng)景:當(dāng)元素距離頁(yè)面視口(Viewport,也就是fixed定位的參照)頂部距離大于 0px 時(shí),元素以 relative 定位表現(xiàn),而當(dāng)元素距離頁(yè)面視口小于 0px 時(shí),元素表現(xiàn)為 fixed 定位,也就會(huì)固定在頂部。
代碼:
{
position: -webkit-sticky;
position: sticky;
top: 0;
}
如下圖表現(xiàn)方式:
距離頁(yè)面頂部大于20px,表現(xiàn)為 position:relative;

距離頁(yè)面頂部小于20px,表現(xiàn)為 position:fixed;

運(yùn)用 position:sticky 實(shí)現(xiàn)頭部導(dǎo)航欄固定
html代碼:
<div class="con">
<div class="samecon">
<h2>標(biāo)題一</h2>
<p>這是一段文本</p>
<p>這是一段文本</p>
<p>這是一段文本</p>
</div>
<div class="samecon">
<h2>標(biāo)題二</h2>
<p>這是一段文本</p>
<p>這是一段文本</p>
<p>這是一段文本</p>
</div>
<div class="samecon">
<h2>標(biāo)題三</h2>
<p>這是一段文本</p>
<p>這是一段文本</p>
<p>這是一段文本</p>
</div>
<div class="samecon">
<h2>標(biāo)題四</h2>
<p>這是一段文本</p>
<p>這是一段文本</p>
<p>這是一段文本</p>
</div>
<div class="samecon">
<h2>標(biāo)題五</h2>
<p>這是一段文本</p>
<p>這是一段文本</p>
<p>這是一段文本</p>
</div>
<div class="samecon">
<h2>標(biāo)題五六</h2>
<p>這是一段文本</p>
<p>這是一段文本</p>
<p>這是一段文本</p>
</div>
</div>
CSS代碼:
.samecon h2{
position: -webkit-sticky;
position: sticky;
top: 0;
background:#ccc;
padding:10px 0;
}
同理,也可以實(shí)現(xiàn)側(cè)邊導(dǎo)航欄的超出固定。
生效規(guī)則
- 須指定
top, right, bottom 或 left四個(gè)閾值其中之一,才可使粘性定位生效。否則其行為與相對(duì)定位相同。- 并且
top和bottom同時(shí)設(shè)置時(shí),top生效的優(yōu)先級(jí)高,left和right同時(shí)設(shè)置時(shí),left的優(yōu)先級(jí)高。
- 并且
- 設(shè)定為
position:sticky元素的任意父節(jié)點(diǎn)的overflow屬性必須是visible,否則position:sticky 不會(huì)生效。這里需要解釋一下:- 如果
position:sticky元素的任意父節(jié)點(diǎn)定位設(shè)置為overflow:hidden,則父容器無(wú)法進(jìn)行滾動(dòng),所以position:sticky元素也不會(huì)有滾動(dòng)然后固定的情況。 - 如果
position:sticky元素的任意父節(jié)點(diǎn)定位設(shè)置為position:relative | absolute | fixed,則元素相對(duì)父元素進(jìn)行定位,而不會(huì)相對(duì)viewprot定位。
- 如果
- 達(dá)到設(shè)定的閥值。這個(gè)還算好理解,也就是設(shè)定了
position:sticky的元素表現(xiàn)為relative還是fixed是根據(jù)元素是否達(dá)到設(shè)定了的閾值決定的。兼容性

這個(gè)屬性的兼容性還不是很好,目前仍是一個(gè)試驗(yàn)性的屬性,并不是W3C推薦的標(biāo)準(zhǔn)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章

position:sticky 粘性定位的幾種巧妙應(yīng)用詳解
這篇文章主要介紹了position:sticky 粘性定位的幾種巧妙應(yīng)用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小2021-04-23
詳解css粘性定位position:sticky問(wèn)題采坑
這篇文章主要介紹了詳解css粘性定位position:sticky問(wèn)題采坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下2019-08-26
CSS中Position:Sticky不起作用的問(wèn)題解決
本文主要介紹了CSS中Position:Sticky不起作用的問(wèn)題解決,包含了5種不生效的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的2024-02-18
用position:sticky完美解決小程序吸頂問(wèn)題的實(shí)現(xiàn)方法
這篇文章主要介紹了用position:sticky完美解決小程序吸頂問(wèn)題的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下2021-04-23- 用戶的屏幕越來(lái)越大,而頁(yè)面太寬的話會(huì)不宜閱讀,所以絕大部分網(wǎng)站的主體寬度和之前相比沒(méi)有太大的變化,于是瀏覽器中就有越來(lái)越多的空白區(qū)域,所以你可能注意到很多網(wǎng)站開(kāi)2012-12-25
粘性定位的元素是依賴于用戶的滾動(dòng),在position:relative與position:fixed定位之間切換,這篇文章給大家介紹css中position:sticky 粘性定位的相關(guān)知識(shí),感興趣的朋友跟隨小2024-02-28



