摘要:概覽為定位和浮動(dòng)提供了一些屬性,利用這些屬性,可以建立各種布局,極大提高頁(yè)面的表現(xiàn)力。定位屬性規(guī)定元素的定位類(lèi)型。絕對(duì)定位元素框從文檔流完全刪除,并相對(duì)于其包含塊定位。在使用相對(duì)定位時(shí),無(wú)論是否進(jìn)行移動(dòng),元素仍然占據(jù)原來(lái)的空間。
概覽
CSS 為定位和浮動(dòng)提供了一些屬性,利用這些屬性,可以建立各種布局,極大提高HTML頁(yè)面的表現(xiàn)力。
定位的基本思想很簡(jiǎn)單,它允許你定義元素框相對(duì)于其正常位置應(yīng)該出現(xiàn)的位置,或者相對(duì)于父元素,或者另一個(gè)元素甚至瀏覽器窗口本身的位置。
CSS 有三種基本的定位機(jī)制:
普通流,包含默認(rèn)定位(static)和相對(duì)定位(relative)。
浮動(dòng) float.
絕對(duì)定位,包含 absolute 和 fixed.
一切皆為框在 CSS 盒模型 一文中簡(jiǎn)單的認(rèn)識(shí)了元素框的概念(主要是塊框),這里再進(jìn)行部分補(bǔ)充。
div、h1 或 p 元素常常被稱(chēng)為 塊級(jí)元素 。這意味著這些元素顯示為一塊內(nèi)容,即 塊框 。與之相反,span 和 strong 等元素稱(chēng)為 行內(nèi)元素,這是因?yàn)樗鼈兊膬?nèi)容顯示在行中,即 行內(nèi)框。不過(guò),您可以使用 display 屬性改變生成的框的類(lèi)型。
還有一種框叫 無(wú)名框。這種情況發(fā)生在把一些文本添加到一個(gè)塊級(jí)元素(比如 div)中。假設(shè)有一個(gè)包含三行文本的段落,每行文本形成一個(gè) 無(wú)名框。
some text - 無(wú)名框Some more text. - 無(wú)名框
Some more test. - 無(wú)名框 google - 行內(nèi)框
Some more test. - 無(wú)名框
在HTML默認(rèn)布局中,塊框從上到下一個(gè)接一個(gè)地排列,框之間的垂直距離是由框的垂直外邊距計(jì)算出來(lái)(注意外邊距值合并的情況)。
行內(nèi)框在一行中水平布置??梢允褂盟絻?nèi)邊距、邊框和外邊距調(diào)整它們的間距。但是,垂直內(nèi)邊距、邊框和外邊距不影響行內(nèi)框的高度。
引用 張?chǎng)涡?文章中對(duì)框的描述:
這是一行普通的文字,這里有個(gè) em 標(biāo)簽。
這段HTML代碼涉及到四種 boxes:
首先是 p 標(biāo)簽所在的 containing box,此box包含了其他的boxes;
然后就是 inline boxes,如圖標(biāo)注;
被標(biāo)簽包圍的叫行內(nèi)框,如果是光禿禿的文字,則屬于匿名行內(nèi)框(無(wú)名框)。
line boxes,見(jiàn)下圖標(biāo)注;
在 containing boxes 里,一個(gè)一個(gè)的 inline boxes 組成了 line boxes。
content area,見(jiàn)下圖標(biāo)注;
content area 是一種圍繞文字看不見(jiàn)的box。content area 的大小與 font-size 大小相關(guān)。
定位 positionposition 屬性規(guī)定元素的定位類(lèi)型。有以下 5 種值可供選擇。
值 | 描述 |
---|---|
absolute |
生成絕對(duì)定位的元素,相對(duì)于 static 定位以外的第一個(gè)父元素進(jìn)行定位。 元素的位置通過(guò) left, top, right 以及 bottom 屬性進(jìn)行規(guī)定。 |
fixed |
生成絕對(duì)定位的元素,相對(duì)于瀏覽器窗口進(jìn)行定位。 元素的位置通過(guò) left, top, right 以及 bottom 屬性進(jìn)行規(guī)定。 |
relative |
生成相對(duì)定位的元素,相對(duì)于其正常位置進(jìn)行定位。 元素的位置通過(guò) left, top, right 以及 bottom 屬性進(jìn)行規(guī)定。 |
static | 默認(rèn)值。沒(méi)有定位,元素出現(xiàn)在正常的流中(忽略 left, top, right, bottom 以及 z-index 聲明)。 |
inherit | 從父元素繼承,IE8之前不支持。 |
任何元素都可以定位,不過(guò) absolute 或 fixed 會(huì)生成一個(gè)塊級(jí)框,而不論該元素本身是什么類(lèi)型。相對(duì)定位元素會(huì)相對(duì)于它在正常流中的默認(rèn)位置偏移。
絕對(duì)定位 absolute元素框從文檔流完全刪除,并相對(duì)于其包含塊定位。元素定位后生成一個(gè)塊級(jí)框,而不論原來(lái)它在正常流中是何種類(lèi)型的框。
絕對(duì)定位的元素的位置相對(duì)于 最近的已定位祖先元素(這里的已定位元素指除 static默認(rèn)定位的其余三種),如果元素沒(méi)有已定位的祖先元素,那么它的位置相對(duì)于 最初的包含塊。
#box2 { position: absolute; left: 30px; top: 20px; }
因?yàn)榻^對(duì)定位的框與文檔流無(wú)關(guān),所以它們可以覆蓋頁(yè)面上的其它元素??梢酝ㄟ^(guò)設(shè)置 z-index 屬性來(lái)控制這些框的堆放次序。
固定定位 fixed固定定位類(lèi)似于將 position 設(shè)置為 absolute,不過(guò)其包含塊是視窗本身。
fixed 是一種特殊的絕對(duì)定位,對(duì)其設(shè)置的偏移量永遠(yuǎn)是相對(duì)于視窗本身。我們常見(jiàn)到的導(dǎo)航條固定在頁(yè)面頂部,回到頁(yè)面頂部按鈕基本都是采用此定位方式。
div#top { position: fixed; right: 5px; bottom: 5px; }
同樣可以通過(guò)設(shè)置 z-index 屬性來(lái)控制這些框的堆放次序。
相對(duì)定位 relative元素仍保持其未定位前的形狀,它原本所占的空間仍保留。
在使用相對(duì)定位時(shí),無(wú)論是否進(jìn)行移動(dòng),元素仍然占據(jù)原來(lái)的空間。同樣可以通過(guò)設(shè)置 z-index 屬性來(lái)控制這些框的堆放次序。
默認(rèn)定位 static元素框正常生成,按框類(lèi)型正常定位。
浮動(dòng) float浮動(dòng)的框可以向左或向右移動(dòng),直到它的外邊緣碰到 包含框或 另一個(gè)浮動(dòng)框的邊框?yàn)橹埂?/p>
浮動(dòng)和絕對(duì)定位類(lèi)似(由于其是否脫離文檔流存在爭(zhēng)議故這里避而不談),可能會(huì)覆蓋掉頁(yè)面正常的框。
向右浮動(dòng),原來(lái)的空間被其他框所占用。
向左浮動(dòng),覆蓋其他框。
三個(gè)框都浮動(dòng),后面的框碰著前一個(gè)框的邊框順序排列。
當(dāng)一行無(wú)法容納下完整的一個(gè)框時(shí),自動(dòng)從下一行依次排列。
如果一行中無(wú)法容納所有浮動(dòng)框,后面的框會(huì)從下一行依次排列,排列起始位置取決于第一行已經(jīng)排好的框的高度,以已經(jīng)排好的行的最后一個(gè)框的高度為基準(zhǔn),從后往前找比此基準(zhǔn)高的框,如果找到則起始位置為找到的這個(gè)框的下一個(gè)框的下面,如果沒(méi)有找到比此基準(zhǔn)高的框則從第一個(gè)往后排,始終保證新一行所有框的頂部與基準(zhǔn)框的底部處于同一水平線(xiàn)上。(語(yǔ)言描述太麻煩了,我自己看都快暈了,看圖吧)
圖中第一行為排好的,其中框一高度最大,框三次之,其余三個(gè)高度相同,以框五為基準(zhǔn),往前找比框五大的,找到了框三,第二行第一個(gè)位置即為框四的下面(框三的下一個(gè)),框六,框七的頂部與框五的底部保持同一水平線(xiàn)(即使框四的高度小于80px,也應(yīng)該同框五底部保持一致),框八以框七為基準(zhǔn)繼續(xù)往前找。
我們上面也說(shuō)了,浮動(dòng)可能會(huì)覆蓋別的框,但有例外。
當(dāng)行框與浮動(dòng)框相遇時(shí),浮動(dòng)框旁邊的行框被縮短,從而給浮動(dòng)框留出空間,行框圍繞浮動(dòng)框,這里的行框也僅限于普通文檔流中的行框(絕對(duì)定位中的文本還是會(huì)被覆蓋的)。
浮動(dòng)框確實(shí)覆蓋了p元素框,但是文本沒(méi)有被覆蓋,換句話(huà)說(shuō)就是行框被縮短。
有時(shí)我們僅僅希望使用浮動(dòng)來(lái)進(jìn)行文檔布局,浮動(dòng)元素的尺寸仍然保留,這就需要用到浮動(dòng)清除(clear)了。
浮動(dòng)清除 clear用下面這個(gè)實(shí)際場(chǎng)景來(lái)介紹浮動(dòng)清除的使用吧。
假設(shè)希望讓一個(gè)圖片浮動(dòng)在左邊,文本塊浮動(dòng)在右邊,并且希望這幅圖片和文本包含在另一個(gè)具有背景顏色和邊框的元素中。
由于浮動(dòng),容器將無(wú)法包圍他們,當(dāng)然無(wú)法達(dá)到我們想要的效果。
由于兩個(gè)塊都是浮動(dòng)的,無(wú)法對(duì)他們進(jìn)行清除浮動(dòng),所以只能借助第三方了。
我們使用一個(gè)空的div元素以實(shí)現(xiàn)下圖的目標(biāo)。
div.clear { clear: both; }
清除浮動(dòng)的方式當(dāng)然不止上面一種,但上面的方式兼容性強(qiáng),使用方便,是初學(xué)時(shí)使用的上佳之選。
下面再介紹兩種不錯(cuò)的選擇。
overflow + zoom 方法
.clearfix{overflow:hidden; zoom:1;}
after + zoom 方法
.clearfix{zoom:1;} .clearfix:after{display:block; content:"clear"; clear:both; line-height:0; visibility:hidden;}
此方法可以說(shuō)是綜合起來(lái)最好的方法,不會(huì)影響任何其他樣式,通用性強(qiáng),覆蓋面廣。
相關(guān)屬性除了上面介紹的主要屬性,與定位和框相關(guān)聯(lián)的其他屬性也順道一起簡(jiǎn)要了解一下吧。
堆疊順序 z-indexz-index 屬性設(shè)置元素的堆疊順序。擁有更高堆疊順序的元素總是會(huì)處于堆疊順序較低的元素的前面,其值可正可負(fù),默認(rèn)為0。
img.x { position:absolute; left:0px; top:0px; z-index:-1; }框類(lèi)型 display
display 屬性規(guī)定元素應(yīng)該生成的框的類(lèi)型。通過(guò)此屬性你可以輕松的實(shí)現(xiàn)塊級(jí)元素與行級(jí)元素的互轉(zhuǎn),甚至可以通過(guò)此屬性是元素脫離文檔流隱藏起來(lái)。
常用的也就:none, block, inline, inline-block。
值 | 描述 | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
none | 此元素不會(huì)被顯示。 | ||||||||||||||||||
block | 此元素將顯示為塊級(jí)元素。 | ||||||||||||||||||
inline | 此元素會(huì)被顯示為內(nèi)聯(lián)元素。 | ||||||||||||||||||
inline-block | 行內(nèi)塊元素。 | ||||||||||||||||||
list-item | 此元素會(huì)作為列表顯示。 | ||||||||||||||||||
run-in | 此元素會(huì)根據(jù)上下文作為塊級(jí)元素或內(nèi)聯(lián)元素顯示。 | ||||||||||||||||||
table | 此元素會(huì)作為塊級(jí)表格來(lái)顯示。 | ||||||||||||||||||
inline-table | 此元素會(huì)作為內(nèi)聯(lián)表格來(lái)顯示。 | ||||||||||||||||||
table-row-group | 此元素會(huì)作為一個(gè)或多個(gè)行的分組來(lái)顯示(類(lèi)似 )。
table-header-group |
此元素會(huì)作為一個(gè)或多個(gè)行的分組來(lái)顯示(類(lèi)似 )。
| table-footer-group |
此元素會(huì)作為一個(gè)或多個(gè)行的分組來(lái)顯示(類(lèi)似 )。
| table-row |
此元素會(huì)作為一個(gè)表格行顯示(類(lèi)似 | table-column-group |
此元素會(huì)作為一個(gè)或多個(gè)列的分組來(lái)顯示(類(lèi)似 |
table-column |
此元素會(huì)作為一個(gè)單元格列顯示(類(lèi)似 |
table-cell |
此元素會(huì)作為一個(gè)表格單元格顯示(類(lèi)似 | 和 | )
| table-caption |
此元素會(huì)作為一個(gè)表格標(biāo)題顯示(類(lèi)似 |
inherit |
規(guī)定應(yīng)該從父元素繼承 display 屬性的值。 |
|
a#top { display: none; }
記住常用的即可,其余的僅供查閱。
可見(jiàn)性 visibilityvisibility 屬性規(guī)定元素是否可見(jiàn)。
值 | 描述 |
---|---|
visible | 默認(rèn)值。元素可見(jiàn)。 |
hidden | 元素不可見(jiàn)。 |
collapse | 當(dāng)在表格元素中使用時(shí),此值可刪除一行或一列,但是它不會(huì)影響表格的布局。被行或列占據(jù)的空間會(huì)留給其他內(nèi)容使用。如果此值被用在其他的元素上,會(huì)呈現(xiàn)為 hidden。 |
inherit | 從父元素繼承。 |
h2 { visibility:hidden; }
注意:使用此屬性,即使不可見(jiàn)的元素也會(huì)占據(jù)頁(yè)面上的空間。請(qǐng)使用 display 屬性來(lái)創(chuàng)建不占據(jù)頁(yè)面空間的不可見(jiàn)元素。
絕對(duì)定位剪裁 clipclip 屬性用來(lái)剪裁絕對(duì)定位元素。這個(gè)屬性可以定義一個(gè)剪裁矩形。對(duì)于一個(gè)絕對(duì)定位元素,在這個(gè)矩形內(nèi)的內(nèi)容才可見(jiàn)。剪裁區(qū)域可能比元素大,也可能比元素小。
該屬性的默認(rèn)值為 auto , 不應(yīng)用任何剪裁。
position: absolute; clip: rect (top, right, bottom, left);
top, bottom 都是相對(duì)于包圍此元素的祖先元素上框的距離。right, left 都是相對(duì)于包圍此元素的祖先元素左框的距離。
四個(gè)尺寸圍成一個(gè)矩形,元素在此矩形內(nèi)的部分被顯現(xiàn)出來(lái)。
img { position:absolute; clip:rect(0px 50px 200px 0px) }光標(biāo)定位 cursor
光標(biāo)定位應(yīng)該叫光標(biāo)樣式,此屬性用來(lái)設(shè)置當(dāng)鼠標(biāo)移動(dòng)到元素上鼠標(biāo)應(yīng)該呈現(xiàn)的樣式。這個(gè)內(nèi)容很簡(jiǎn)單,直接貼出示例。
請(qǐng)將代碼自行添加到HTML文件中檢驗(yàn)效果。
auto框溢出 overflow
crosshair
default
pointer
move
e-resize
ne-resize
nw-resize
n-resize
se-resize
sw-resize
s-resize
w-resize
text
wait
help
overflow 屬性規(guī)定當(dāng)內(nèi)容溢出元素框時(shí)發(fā)生的事情。
值 | 描述 |
---|---|
visible | 默認(rèn)值。內(nèi)容不會(huì)被修剪,會(huì)呈現(xiàn)在元素框之外。 |
hidden | 內(nèi)容會(huì)被修剪,并且其余內(nèi)容是不可見(jiàn)的。 |
scroll | 內(nèi)容會(huì)被修剪,但是瀏覽器會(huì)顯示滾動(dòng)條以便查看其余的內(nèi)容。 |
auto | 如果內(nèi)容被修剪,則瀏覽器會(huì)顯示滾動(dòng)條以便查看其余的內(nèi)容。 |
inherit | 從父元素繼承。 |
div { background-color:#00FFFF; width:150px; height:150px; overflow: scroll }
如果值為 scroll,不論是否需要,用戶(hù)代理都會(huì)提供一種滾動(dòng)機(jī)制。因此,有可能即使元素框中可以放下所有內(nèi)容也會(huì)出現(xiàn)滾動(dòng)條。
垂直對(duì)齊 vertical-alignvertical-align 屬性設(shè)置元素的垂直對(duì)齊方式。
該屬性定義行內(nèi)元素的基線(xiàn)相對(duì)于該元素所在行的基線(xiàn)的垂直對(duì)齊。允許指定負(fù)長(zhǎng)度值和百分比值。
在表單元格中,這個(gè)屬性會(huì)設(shè)置單元格框中的單元格內(nèi)容的對(duì)齊方式。
值 | 描述 |
---|---|
baseline | 默認(rèn)。元素放置在父元素的基線(xiàn)上。 |
sub | 垂直對(duì)齊文本的下標(biāo)。 |
super | 垂直對(duì)齊文本的上標(biāo) |
top | 把元素的頂端與行中最高元素的頂端對(duì)齊 |
text-top | 把元素的頂端與字體的頂端對(duì)齊 |
middle | 把此元素放置在中部。 |
bottom | 把元素的頂端與行中最低的元素的頂端對(duì)齊。 |
text-bottom | 把元素的底端與字體的底端對(duì)齊。 |
length | ? |
% | 使用 "line-height" 屬性的百分比值來(lái)排列此元素。允許使用負(fù)值。 |
inherit | 從父元素繼承。 |
具體樣式請(qǐng)將代碼自行添加到HTML文檔中驗(yàn)證。
小結(jié)這是一幅H2OX2 baseline 對(duì)齊的圖像。
這是一幅H2OX2 sub 對(duì)齊的圖像。
這是一幅H2OX2 super 對(duì)齊的圖像。
這是一幅H2OX2 top 對(duì)齊的圖像。
這是一幅H2OX2 text-top 對(duì)齊的圖像。
這是一幅H2OX2 middle對(duì)齊的圖像。
這是一幅H2OX2 bottom 對(duì)齊的圖像。
這是一幅H2OX2 text-bottom 對(duì)齊的圖像。
這是一幅H2OX2 24px 對(duì)齊的圖像。
這是一幅H2OX2 0px 對(duì)齊的圖像。
這是一幅H2OX2 -50px 對(duì)齊的圖像。
這是一幅H2OX2 20% 對(duì)齊的圖像。
CSS 定位和浮動(dòng)是HTML布局中的重要部分,需要認(rèn)真參透。注意掌握定位的幾種類(lèi)型及區(qū)別,理解浮動(dòng)的排列及清除,掌握與定位相關(guān)的一些屬性。
篇幅還是稍長(zhǎng),估計(jì)大伙都沒(méi)時(shí)間看完了。
參考資料CSS float浮動(dòng)的深入研究、詳解及拓展(一)
CSS float浮動(dòng)的深入研究、詳解及拓展(二)
還有一篇討論浮動(dòng)是不是脫離文檔流的帖子:float 有沒(méi)有脫離文檔流 ??
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/111170.html
摘要:深入布局定位與浮動(dòng)在知識(shí)體系中,除了選擇器,樣式屬性等基礎(chǔ)知識(shí)外,布局相關(guān)的知識(shí)才是比較核心和重要的點(diǎn)。定位后,原來(lái)在文檔流中占據(jù)的位置,會(huì)被其他元素所占據(jù)。清除浮動(dòng)的特殊應(yīng)用清除浮動(dòng)可以解決父元素高度塌陷問(wèn)題。? 深入css布局(2) — 定位與浮動(dòng) ? ???? 在css知識(shí)體系中,除了css選擇器,樣式屬性等基礎(chǔ)知識(shí)外,css布局相關(guān)的知識(shí)才是css比較核心和重要的點(diǎn)。今天我們來(lái)深...
摘要:生成相對(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...
摘要:讓元素脫離文檔流有三種方法浮動(dòng)絕對(duì)定位固定定位元素脫離文檔流定位的三種布局機(jī)制文檔流浮動(dòng)定位。定位元素會(huì)脫離文檔流。浮動(dòng)的元素是先站住自己所在文檔流的位置,然后左右浮動(dòng)。 文檔流 文檔流是一種默認(rèn)定位方式,在文檔流中元素框的位置由元素在html中的位置決定,文檔流中元素的position屬性為默認(rèn)的static或繼承來(lái)的static并按照普通流定位。塊級(jí)元素獨(dú)占一行,自上而下排列;內(nèi)聯(lián)...
摘要:浮動(dòng)定位的其中一種方法就是使用屬性。例如,是一個(gè)內(nèi)聯(lián)元素,它默認(rèn)的值為和值是不生效的。然而,如果我們將這個(gè)內(nèi)聯(lián)元素設(shè)置為浮動(dòng),那么它的默認(rèn)值會(huì)變成這時(shí)候和值就生效了。包裹元素就是將浮動(dòng)元素置于父元素中,父元素作為容器會(huì)置于正常的文件流中。 CSS最大的用處之一就是可以將內(nèi)容和元素定位到任何我們想要的位置,使我們的設(shè)計(jì)具有結(jié)構(gòu),使內(nèi)容更加易懂。 CSS有好幾種不同的定位屬性,每種都有自己...
摘要:浮動(dòng)定位的其中一種方法就是使用屬性。例如,是一個(gè)內(nèi)聯(lián)元素,它默認(rèn)的值為和值是不生效的。然而,如果我們將這個(gè)內(nèi)聯(lián)元素設(shè)置為浮動(dòng),那么它的默認(rèn)值會(huì)變成這時(shí)候和值就生效了。包裹元素就是將浮動(dòng)元素置于父元素中,父元素作為容器會(huì)置于正常的文件流中。 CSS最大的用處之一就是可以將內(nèi)容和元素定位到任何我們想要的位置,使我們的設(shè)計(jì)具有結(jié)構(gòu),使內(nèi)容更加易懂。 CSS有好幾種不同的定位屬性,每種都有自己...
摘要:元素框從文檔流完全刪除,并相對(duì)于其包含塊定位。簡(jiǎn)單來(lái)說(shuō)就是,元素不再占用任何文檔流的空間,只剩下相對(duì)于包含塊的定位顯示。行框和清理浮動(dòng)框旁邊的行框會(huì)被縮短,使行框圍繞浮動(dòng)框,所以創(chuàng)建浮動(dòng)框可以使文本圍繞圖像。 文章大綱來(lái)源:【Day 3】HTML復(fù)習(xí) + CSS基礎(chǔ) CSS框模型 寬度和高度 內(nèi)邊距 外邊距 CSS定位 浮動(dòng) CSS框模型 內(nèi)容引用:CSS 框模型概述 CSS 框模...
閱讀 3600·2021-10-15 09:43
閱讀 3515·2021-09-02 15:21
閱讀 2229·2021-08-11 11:23
閱讀 3264·2019-08-30 15:54
閱讀 1959·2019-08-30 13:54
閱讀 3229·2019-08-29 18:35
閱讀 699·2019-08-29 16:58
閱讀 1783·2019-08-29 12:49