如何利用好CSS粘性定位

2021-02-14    分類: 網站建設

瀏覽器對 CSS粘性定位有著非常好的支持,但很多開發者都沒有用過它。

究其原因有兩個:

第一,受到瀏覽器的良好支持需要漫長的等待:瀏覽器的支持往往需要很長的時間才能完成,到時候它的功能已經被人們遺忘了。

第二個原因是很多開發者并不能完全理解其工作原理背后的邏輯,這就是我的切入點。


我假設你們都知道什么事CSS定位,不過還是先簡單回顧一下比較好:

在3年前,有四種 CSS 定位: static、 relative、 absolute 和fixed。

static 、 relative 、 absolute 和 fixed之間主要的區別在于它們在DOM流中占用的空間。 static 和 relative 會保留它們在文檔流中的自然空間,而 absolute 和 fixed 則不會 —— 它們的空間被移除而且具有浮動行為。

正如我下面將要解釋的那樣,新的粘性定位與所有類型都有相似之處。

我的第一個粘性定位

可能很多人都玩過粘性定位。我已經接觸過一段時間了,直到我意識到自己并不是完全理解它。

在第一個例子中,大家很容易就能看明白 當視口到達定義的位置時,元素會被粘住。

例:



但問題是,它有時候能用,而有時卻不起作用。 當它工作時,元素會粘住,但在滾動到其他部分,它會停止粘貼。 作為一個靠 CSS 混飯吃的人,我完全不能接受自己對這個問題是不理解的,所以我決定把粘性位置徹底搞清楚。

探索粘性定位

在擺弄它的過程中,我很快就注意到了:當一個具有 position:sticky 樣式的元素被包裝,且它是包裝元素中唯一的元素時,這個被定義為 position:sticky 的元素就不會粘住。



當我在包裝元素中添加更多元素時,它就能開始正常工作了。

這是為什么?

這是因為當一個元素被賦予 position: sticky 樣式時,粘性項目的容器是它可以粘貼的唯一區域。 粘性元素沒有任何要浮動的元素,因為它只能浮動在同級元素上,作為唯一的子元素,它不能浮動。

怎樣才能讓 CSS 粘性定位起作用

CSS 粘性定位有兩個主要部分,粘性元素(sticky item)和 粘性容器(sticky container)。

粘性元素 —— 是我們用位置定義的 position: sticky 樣式。 當視口位置與位置定義匹配時,該元素將會浮動,例如: top: 0px 。

例:



粘性容器 —— 是包裝粘性元素的 HTML 元素。 這是粘性元素可以浮動的大區域。

當你定義一個具有 position:sticky 樣式的元素時,父元素會被自動定義為粘性容器!

記住這一點非常重要! 容器是粘性元素的范圍,并且該元素無法離開其所在的粘性容器。

這就是為什么在前面的例子中,粘性元素沒有被粘住的原因:這個粘性元素是粘性容器中唯一的子元素。

CSS 粘性定位的示意圖:



粘性元素與粘性容器

查看在CodePen上的例子:

https://codepen.io/elad2412/pen/QYLEdK

理解 CSS 的粘性行為

正如我前面說過的那樣,CSS 粘性定位的行為與所有其他 CSS 定位不一樣,但從另一個角度來說,它們也有一些相似之處。我來解釋一下:

相對(或靜態)—— 粘性定位元素類似于相對和靜態位置,因為它保留了 DOM 中的自然間隙(留在流中)。

固定 —— 當元素被粘住時,它的行為與 position: fixed 完全相同,浮動在與視口的相同位置,并從流中移除。

絕對 —— 在粘貼區域的末尾,元素會停止,并堆疊在另一個元素的頂部,就像一個絕對定位的元素被放在一個 position: relative 容器內的行為。

粘在底部?

在大多數情況下,您可以使用粘性定位將元素粘貼到頂部,如下所示:



這正是它被設計的初衷,而在此之前,只能使用JavaScript完成這個功能。

但你也可以使用它把元素粘到底部。 這意味著你可以把頁腳定義為粘性,并且在向下滾動時使它看起來總是被粘在底部。 當到達粘性容器的末端時,元素會停在它的自然位置。 最好是在以粘性容器底部為自然位置的元素上使用它。

完整示例:

HTML



CSS



去CodePen查看演示效果:https://codepen.io/elad2412/pen/MZZVjw

我在開發中常用它來粘貼摘要表,也會用在粘性頁腳導航上,這種方法非常適合。

瀏覽器支持

  • 除了老 IE 瀏覽器外,所有流行的現代瀏覽器都支持粘性定位。
  • 如果用在 Safari 瀏覽器上,你需要添加 -webkit 前綴。



超過86%的瀏覽器支持粘性定位

新聞標題:如何利用好CSS粘性定位
本文鏈接:http://m.kartarina.com/news/100822.html

成都網站建設公司_創新互聯,為您提供全網營銷推廣移動網站建設服務器托管用戶體驗電子商務自適應網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都seo排名網站優化
主站蜘蛛池模板: 亚洲毛片无码专区亚洲乱| 国产亚洲精久久久久久无码77777| 国产精品久久久久无码av| 亚洲成在人线在线播放无码| 无码人妻一区二区三区免费手机| 精品韩国亚洲av无码不卡区| 亚洲啪啪AV无码片| 免费一区二区无码视频在线播放| 无码午夜人妻一区二区三区不卡视频| 精品无码国产AV一区二区三区| 无套中出丰满人妻无码| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 亚洲AV无码成人精品区日韩| 国产精品无码不卡一区二区三区| 亚洲日韩国产AV无码无码精品| 国产在线拍揄自揄拍无码| 国产精品无码一本二本三本色| 精品无码国产一区二区三区AV | 永久免费无码网站在线观看个| 久久亚洲AV成人无码国产 | 亚洲日韩av无码中文| 欧洲人妻丰满av无码久久不卡 | r级无码视频在线观看| 亚洲欧洲无码一区二区三区 | 无码人妻久久一区二区三区免费| 精品无码久久久久久久久水蜜桃| 无码国内精品久久综合88| 免费A级毛片无码专区| 麻豆亚洲AV永久无码精品久久| 国产av永久无码天堂影院| 中文字幕无码一区二区三区本日| 国产精品无码不卡一区二区三区| 爽到高潮无码视频在线观看| 精品久久久久久无码中文字幕漫画 | 麻豆亚洲AV成人无码久久精品| 亚洲精品无码久久久久APP| 中文字幕精品三区无码亚洲| 18禁免费无码无遮挡不卡网站| 无码无套少妇毛多18PXXXX| 天堂无码在线观看| 国产三级无码内射在线看|