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