摘要:塊級元素生成一個矩形框,作為文檔流的一部分,行內元素則會創建一個或多個行框,置于其父元素中。相對定位,相對于自己的初始位置,不脫離文檔流。
有過css開發經驗的同學,對于position這個屬性一定不會陌生,然而這個熟悉的屬性確是面試題中的常客,也就說明了該屬性在css的世界是有一定的江湖地位的,那么我們就來詳細的說說position這個屬性。
在w3school中是這樣解釋position屬性的
定義和用法position 屬性規定元素的定位類型。
說明這個屬性定義建立元素布局所用的定位機制。任何元素都可以定位,不過絕對或固定元素會生成一個塊級框,而不論該元素本身是什么類型。相對定位元素會相對于它在正常流中的默認位置偏移。
CSS 定位機制
CSS 有三種基本的定位機制:普通流、浮動和絕對定位。
除非專門指定,否則所有框都在普通流中定位。也就是說,普通流中的元素的位置由元素在 (X)HTML 中的位置決定。
塊級框從上到下一個接一個地排列,框之間的垂直距離是由框的垂直外邊距計算出來。
行內框在一行中水平布置。可以使用水平內邊距、邊框和外邊距調整它們的間距。但是,垂直內邊距、邊框和外邊距不影響行內框的高度。由一行形成的水平框稱為行框(Line Box),行框的高度總是足以容納它包含的所有行內框。不過,設置行高可以增加這個框的高度。
position屬性對應的值有
position: static;
position: inherit;
position: relative;
position: absolute;
position: fixed;
position: sticky;(新的屬性值)
1、position: static默認值。沒有定位,元素出現在正常的流中(忽略 top, bottom, left, right 或者 z-index 聲明)。元素框正常生成。塊級元素生成一個矩形框,作為文檔流的一部分,行內元素則會創建一個或多個行框,置于其父元素中。
2、position: inheritinherit值如同其他css屬性的 inherit 值,即繼承父元素的position值。
3、position: relative相對定位,相對于自己的初始位置,不脫離文檔流。也就是說元素框偏移某個距離,元素仍保持其未定位前的形狀,它原本所占的空間仍保留。
舉個例子,html結構
div1div2div3
css樣式
div { width: 100px; height: 100px; } .div1 { background: #ffff00; } .div2 { background: #00ff00; position: relative; top: 40px; left: 40px; } .div3 { background: #0000ff; }
結果
其中紅色框為div2的初始位置,由于div2設置了position:relative;top: 40px;left: 40px;,所以該元素相對于自己的初始位置的上面40px、左邊40px。同時,其他元素的位置未被改變。
4、position: absolute絕對定位的元素的位置相對于最近的已定位祖先元素,如果元素沒有已定位的祖先元素,那么它的位置相對于最初的包含塊。
例子中我們把div2的樣式稍作改動
.div2 { background: #00ff00; position: absolute; top: 40px; left: 40px; }
由于div2的祖先元素都沒有定位,所以相對于最初的包含塊也就是body,同時由于絕對定位脫離文檔流,所以div3占了div2原來的位置。
5、position: fixedfixed元素脫離正常的文檔流,所以它與absolute元素很相似,同樣會被周圍元素忽略,支持top,bottom,left,right屬性,但fixed 元素正如它的名字一樣,它是固定在屏幕的某個位置,它不會隨著瀏覽器滾動條的滾動而一起滾動。比如我們常見的回到頂部的功能,按鈕一直在瀏覽器的左下方,不管滾動條如何滾動,該按鈕都會在左下方的固定的位置,這個需求就可以使用position: fixed來完成。
但需要注意的是,position: fixed是有兼容性問題的,不支持IE6、IE7、IE8。可以通過給該元素設置position: absolute并獲取滾動條距離頂部高度加上某個固定高度來實現。
很多同學會對該屬性比較陌生,這是一個相對來講比較新的屬性值。
sticky 的本意是粘貼,可以稱之為粘性定位,但在 css 中的表現更像是吸附。這是一個結合了 position:relative 和 position:fixed 兩種定位功能于一體的特殊定位。常見的吸頂、吸底(網站的頭部返回欄,底部切換欄之類)的效果用這個屬性非常適合。例如下面淘寶這個效果
當元素距離頁面視口(Viewport,也就是fixed定位的參照)頂部距離大于 0px 時,元素以 relative 定位表現,而當元素距離頁面視口小于 0px 時,元素表現為 fixed 定位,也就會固定在頂部。
注意須指定 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,則元素相對父元素進行定位,而不會相對 viewport 定位。
達到設定的閥值,也就是設定了 position:sticky 的元素表現為 relative 還是 fixed是根據元素是否達到設定了的閾值決定的。
兼容性 caniuse文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/115792.html
摘要:上篇文章半透明效果的屬性和場景最后提到了層疊上下文,在這篇文章中就說說和層疊上下文。探索一使用生成的層疊上下文會壓蓋基本元素。仔細一想,層疊上下文的概念還是挺好理解的,比和都簡單一些。 上篇文章《CSS半透明效果的屬性和場景》最后提到了層疊上下文,在這篇文章中就說說opacity和層疊上下文。建議讀者在讀本篇文章之前,先仔細閱讀張鑫旭大神的《深入理解CSS中的層疊上下文和層疊順序》,并...
摘要:可以試試去掉的會發生很奇妙的事呢附加關于子元素設置為而引發的問題。附加關于開啟硬件加速提升網站動畫渲染性能問題。合并后的外邊距的高度等于兩個發生合并的外邊距的高度中的較大者。 1. 水平垂直居中問題 這可以說是最經典的問題了,水平垂直居中,這個問題從入門前端一直到面試,甚至到工作之后都會時不時遇到,最近的面試也被問過這之類的問題,這里還是好好總結一番,以作備忘。公用 HTML 部分: ...
摘要:頁面布局結構層搭我們的頁面框架。不需要使用浮動解決的問題盡量不用。使用浮動之后會使該元素脫標,宋體并且該元素的宋體。備注以后我們做定位的時候,盡量保持子絕父相。宋體宋體是一種協議,就是客戶端和服務端鏈接的一種協議。頁面布局 結構層:搭我們的頁面框架。 布局層:針對框架內部結構進行排版。 不需要使用浮動解決的問題盡量不用。 使用浮動之后會使該元素脫標,并且該元素的margin。 div 盒子模...
摘要:生成相對定位的元素,相對于元素本身正常位置進行定位。元素的位置通過以及屬性進行規定。因為絕對定位與文檔流無關,所以絕對定位的元素可以覆蓋頁面上的其他元素,可以通過屬性控制疊放順序,越高,元素位置越靠上。頁面布局,或者是在頁面上做些小效果的時候經常會用到 display,position和float 屬性,如果對它們不是很了解的話,很容易出現一些莫名其妙的效果,痛定思痛讀了《CSS Maste...
摘要:在中與半透明效果相關的屬性有兩個和。屬性的值規定透明度。以及更早的版本支持替代的屬性。接下來通過場景來描述半透明效果的實現。圖片出現半透明效果,如果將文字設置為白色,文字的半透明效果會很小。 在CSS中與半透明效果相關的屬性有兩個:opacity和rgba。opacity屬性的值規定透明度。從 0.0 (完全透明)到 1.0(完全不透明)。設置opacity元素的所有后代元素會隨著一起...
閱讀 1841·2021-08-19 11:12
閱讀 1418·2021-07-25 21:37
閱讀 980·2019-08-30 14:07
閱讀 1260·2019-08-30 13:12
閱讀 645·2019-08-30 11:00
閱讀 3523·2019-08-29 16:28
閱讀 982·2019-08-29 15:33
閱讀 2960·2019-08-26 13:40