自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

CSS粘性定位 - 它的真正工作原理!

開發(fā) 前端
static? 或 relative? 與 absolute? 或 fixed? 之間的主要區(qū)別在于它們在DOM流中占用的空間。static? 和 relative? 保留其在文檔流中的自然空間,而 absolute? 和 fixed? 則不保留空間,它們具有浮動行為。而新的sticky定位具有所有類型的相似性。

這篇文章詳細解釋了CSS中的sticky定位方式,并講解了它的工作原理。

CSS中的sticky定位有很好的瀏覽器支持,但許多開發(fā)者并沒有使用它。原因有兩方面:一是等待瀏覽器支持的時間太長,導致這個特性被遺忘;二是大部分開發(fā)者并不完全理解它的工作原理。

我假設你們都知道CSS定位,但讓我們簡要回顧一下:

直到3年前,有四個CSS位置: static , relative , absolute 和 fixed 。

static 或 relative 與 absolute 或 fixed 之間的主要區(qū)別在于它們在DOM流中占用的空間。static 和 relative 保留其在文檔流中的自然空間,而 absolute 和 fixed 則不保留空間,它們具有浮動行為。而新的sticky定位具有所有類型的相似性。

使用 position: sticky

使用 position: sticky 時,每個人都很快明白,當視口到達定義的位置時,元素會粘在那里。

.some-component{
    position: sticky;
    top: 0;
}

有時候sticky定位能正常工作,有時候則不能。當它正常工作時,元素會"粘"在一定位置,但在滾動的其他部分,它又會停止"粘"住。作為一個每天都在使用CSS的人,作者無法接受自己不能深入理解這個問題的根本原因,所以決定深入研究sticky定位。

Stick 探索

在嘗試使用 sticky 定位的過程中,我很快發(fā)現(xiàn),當一個具有sticky定位樣式的元素被包裹起來,并且它是包裹元素內(nèi)唯一的元素時,這個被定義為sticky定位的元素并不會"粘"住。

<!-- DOESN'T WORK!!! -->
<style>
    .sticky{
        position: sticky;
        top: 0;
    }
</style>
<div class="wrapper">
   <div class="sticky">
        SOME CONTENT
   </div>
</div>

當我在包裹元素內(nèi)添加更多元素時,它開始正常工作了。

為什么?

這樣做的原因是,當一個元素被賦予sticky定位樣式時,粘性元素的容器是粘性元素可以粘住的唯一區(qū)域。這個元素沒有其他元素可以浮動,因為它只能浮動在兄弟元素上,而作為唯一的子元素,它沒有兄弟元素。

CSS Sticky  定位的真正工作原理!

CSS 的 sticky 定位有兩個主要部分,即粘性元素和粘性容器。

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

.some-component{
    position: sticky;
    top: 0px;
}

粘性容器——是包裹粘性項目的HTML元素。這是粘性項目可以浮動的最大區(qū)域。

當你使用 position: sticky 定義一個元素時,自動定義了父元素為粘性容器!

記住這一點非常重要!容器是粘性項目的作用域,項目無法離開其粘性容器。

這就是前面例子中,粘性元素一開始就沒有粘住的原因:粘性元素是粘性容器中唯一的子元素。

CSS Sticky 定位的視覺示例:

圖片

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

理解CSS的Sticky行為

就像我之前說的,CSS的 Sticky 定位與其他所有 CSS 定位方式的行為都不同,但另一方面,它與它們也有一些相似之處。讓我來解釋一下:

Relative 定位(或Static定位)- 粘性定位元素類似于相對定位和靜態(tài)定位,因為它保持DOM中的自然間隙(保持在流中)。

Fixed - 當項目固定時,它的行為與 position: fixed 完全相同,浮動在視口的相同位置,從流中移除。

Absolute 定位 - 在粘附區(qū)域的末尾,元素停止并堆疊在另一個元素的頂部,就像絕對定位元素在 position: relative 容器內(nèi)的行為一樣。

貼在底部?

在大多數(shù)情況下,使用 position: sticky 以將元素固定在頂部,類似于這樣:

.component{
    position: sticky;
    top: 0;
}

這正是它被創(chuàng)建出來的原因,因為在此之前,只能通過JavaScript來實現(xiàn)。

但你也可以使用它將元素粘貼到底部。這意味著可以定義頁腳具有粘性位置,并且在向下滾動時始終會出現(xiàn)粘在底部。當我們到達粘性容器的末尾時,元素將停留在其自然位置。最好將其用于自然位置為粘性容器底部的元素。

HTML

<main class="main-container">
  <header class="main-header">HEADER</header>
  <div class="main-content">MAIN CONTENT</div>
  <footer class="main-footer">FOOTER</footer>
</main>

CSS

.main-footer{     
     position: sticky; 
     bottom: 0;
}

事例地址:https://codepen.io/elad2412/pen/MZZVjw

Browsers Support

  • 除舊版 IE 外,所有主要現(xiàn)代瀏覽器都支持粘性定位。
  • 對于Safari瀏覽器,需要添加 -webkit 前綴。
position: -webkit-sticky; /* Safari */  
position: sticky;

圖片

責任編輯:武曉燕 來源: 大遷世界
相關(guān)推薦

2021-07-29 11:46:27

NAS存儲NAS服務器

2024-11-25 12:20:00

Hystrix微服務架構(gòu)

2023-05-18 22:51:08

2022-04-26 08:32:36

CSS前端

2024-03-11 00:08:00

MVCSpringURI

2010-09-07 13:04:14

CSS Hack

2017-02-22 18:15:31

AI谷歌

2010-08-30 11:08:53

DIV+CSS

2010-08-27 09:45:49

CSS Sprites

2010-09-10 11:32:23

CSS絕對定位CSS相對定位

2013-11-06 10:12:26

2019-05-08 09:43:00

Elasticsear LuceneJava

2010-09-15 15:27:06

CSS hack

2010-08-25 15:56:10

CSSPositioning定位

2023-09-25 10:20:15

2019-04-03 13:00:27

CSSBFC前端

2023-10-25 16:33:59

智能家居物聯(lián)網(wǎng)

2023-08-02 10:50:09

智能家居物聯(lián)網(wǎng)

2010-09-06 11:17:19

CSS相對定位CSS絕對定位

2020-03-05 16:47:51

Git內(nèi)部儲存
點贊
收藏

51CTO技術(shù)棧公眾號