浮動(dòng)元素
網(wǎng)頁(yè)設(shè)計(jì)人員對(duì)于浮動(dòng)元素有幾點(diǎn)要記住。首先,會(huì)以某種方式將浮動(dòng)元素從文檔的正常流中刪除,不過(guò)它還是會(huì)影響布局。采用網(wǎng)站建設(shè)css的特有方式,浮動(dòng)元素幾乎“自成一派”,不過(guò)它們還是對(duì)文檔的其余部分有影響。
這種影響源自于這樣一個(gè)事實(shí):一個(gè)元素浮動(dòng)時(shí),其他內(nèi)容會(huì)“環(huán)繞”該元素。對(duì)于浮動(dòng)圖像來(lái)說(shuō),這種行為我們已經(jīng)很熟悉了,不過(guò)要知道,元素浮動(dòng)時(shí)也同樣如此(例如,浮動(dòng)一個(gè)段落在圖10-2中,由于為浮動(dòng)段落增加了外邊距,可以很清楚地看到這種行為:
p.aside {float: right; width: 15em; margin: 0 1em 1em; padding: 0.25em; border: 1px solid;}
可以注意到一些有意思的情況,首先,網(wǎng)頁(yè)設(shè)計(jì)中浮動(dòng)元素周圍的外邊距不會(huì)合并。如果浮動(dòng)一個(gè)有20像素外邊距的圖像,在這個(gè)圖像周圍將至少有20像素的空間。如果其他元素與此圖像相鄰(這表示水平相鄰和垂直相鄰),而且這些元素也有外邊距,那么這些外邊距不會(huì)與浮動(dòng)圖像的外邊距合并,如圖10-3所示:
p img {float: left; margin: 25px;}
第7章做過(guò)一個(gè)比喻,將元素比作是有塑料邊的紙片,再來(lái)看這個(gè)比喻,圖像周圍的塑料邊(外邊距)絕對(duì)不會(huì)與其他浮動(dòng)元素周圍的塑料邊重疊。
如果確實(shí)要浮動(dòng)一個(gè)非替換元素,則必須為該元素聲明一個(gè)width。否則,根據(jù)網(wǎng)站建設(shè)CSS規(guī)范,元素的寬度趨于0。因此,假設(shè)瀏覽器的最小width值是1個(gè)字符,那么浮動(dòng)段落可能只有1個(gè)字符寬。如果沒(méi)有為浮動(dòng)元素聲明width值,最后可能得到如圖10-4所示的結(jié)果(坦率地說(shuō),這種情況很少見,但確實(shí)是可能的)。
圖10-4:沒(méi)有顯式寬度的浮動(dòng)文本不浮動(dòng)
不浮動(dòng)
除了left和right外,float屬性還有一個(gè)值,float: none用于防止元素浮動(dòng),
這看上去可能有些傻,因?yàn)橐屢粋€(gè)元素不浮動(dòng),最容易的辦法就是不聲明float,這樣不就行了嗎?確實(shí)如此。首先,float的默認(rèn)值是none。換句話說(shuō),要得到正常的非浮動(dòng)行為,必須有這個(gè)值,如果沒(méi)有這個(gè)none值,所有元素都會(huì)以某種方式浮動(dòng)。
其次,網(wǎng)站建設(shè)人員可能想覆蓋導(dǎo)入樣式表中的某個(gè)樣式。假設(shè)設(shè)計(jì)人員在使用一個(gè)服務(wù)器端樣式表,這個(gè)樣式表要讓圖像浮動(dòng)。不過(guò)在某個(gè)特定的頁(yè)面上,設(shè)計(jì)人員不希望圖像浮動(dòng)。不必為此再編寫一個(gè)全新的樣式表,而只需在文檔的嵌套樣式表中增加img {float: none;},不過(guò),除了這種情況,確實(shí)很少有必要真正使用float: none.