網(wǎng)頁設(shè)計(jì)中負(fù)外邊距確實(shí)對垂直格式化有影響,而且它們會影響外邊距如何合并。如果垂直外邊距都設(shè)置為負(fù)值,瀏覽器會取兩個外邊距絕對值的最大值。如果一個正外邊距與一個負(fù)外邊距合并,會從正外邊距減去這個負(fù)外邊距的絕對值。換句話說,負(fù)值要增加到正值,所得到的就是元素間的距離。圖7-21給出了兩個具體的例子。
圖7-21:負(fù)垂直外邊距的例子
注意,上、下外邊距為負(fù)時有一種“拉近”效果。實(shí)際上,這與負(fù)水平外邊距使元素超出其父元素沒有什么區(qū)別。請考慮:
p.neg {margin-top:-50px; margin-right: 10px; margin-left: 10px; margin-bottom: 0; border: 3px solid gray;}
<div style="width: 420px; background-color: silver;
padding: 10px; margin-top: 50px; border: 1px solid;">
<p class="neg"> A paragraph.
</p> A div.
</div>
如圖7-22所示,因?yàn)槎温涞纳贤膺吘酁樨?fù),所以它被向上“拉”了 50像素。注意,以上標(biāo)記中在段落后面有一個div,這個div的內(nèi)容也向上拉了50像素。
圖7-22:負(fù)上外邊距的效果
負(fù)的下外邊距會使段落看上去被向下拉。將以下標(biāo)記與圖7-23所示對照:
p.neg {margin-bottom:-50px; margin-right: 10px; margin-left: 10px; margin-top: 0; border: 3px solid gray;}
<div style="width: 420px; margin-top: 50px;">
<p class="neg"> A paragraph.
</p>
</div>
<p> The next paragraph.</p>
圖7-23:負(fù)下外邊距的效果
圖7-23中顯示,div后面的元素會根據(jù)div底端的位置放置??梢钥吹?,相對于視覺上子元素(段落)的底端,實(shí)際上父元素div的底端在它之上。div后面下一個元素與div底端之間的距離是正確的。根據(jù)你使用的規(guī)則,確實(shí)應(yīng)該如此。
下面來考慮一個例子,其中有一個列表項(xiàng)、一個無序列表以及一個標(biāo)題,它們的外邊距都合并。在這里,為無序列表和標(biāo)題指定了負(fù)外邊距:
li {margin-bottom: 20px;}
ul {margin-bottom:-15px;}
h1 {margin-top:-18px;}
兩個負(fù)外邊距中較大的一個(-18px)增加到了最大的正外邊距上(20px),這就得到了20px- 18px = 2px,因此,列表項(xiàng)內(nèi)容底端與h1內(nèi)容頂端之間只有2個像素的距離,如圖7-24所示。
圖7-24:正負(fù)外邊距合并詳解
網(wǎng)頁設(shè)計(jì)中還有一種行為沒有討論,如果由于負(fù)外邊距而導(dǎo)致元素彼此重疊,很難區(qū)分哪些元素在上面。你可能還會注意到,本節(jié)中所有例子都沒有使用背景色。如果確實(shí)使用了背景色,其內(nèi)容可能會被后面元素的背景色所覆蓋,這是一種可以預(yù)見的行為,因?yàn)闉g覽器總會按從前到后的順序顯示元素,所以文檔中后出現(xiàn)的正常流元素可能會覆蓋較早出現(xiàn)的元素(如果這兩個元素重疊),
網(wǎng)頁設(shè)計(jì)中列表項(xiàng)有自身的一些特殊規(guī)則。這些列表項(xiàng)前面通常有一個標(biāo)志,如一個圓點(diǎn)或一個數(shù)字。這個標(biāo)志實(shí)際上并不是列表項(xiàng)內(nèi)容區(qū)的一部分,所以如圖7-25所示的效果很常見。
圖7-25:列表項(xiàng)的內(nèi)容
網(wǎng)站建設(shè)對這些標(biāo)志相對于文檔布局的放置和效果涉及很少,但網(wǎng)站建設(shè)引入了專門為解決這個問題而設(shè)計(jì)的一些屬性,如marker-offset:。不過,光有想法但缺少實(shí)現(xiàn),這就使得這個屬性在CSS2.1中又被去掉了,很有可能CSS的將來版本還會引入另外一種方法來定義內(nèi)容和標(biāo)志之間的距離。因此,標(biāo)志的放置不在創(chuàng)作人員的控制范圍內(nèi)(至少在寫作本書時是這樣)。
注意:第12章將更詳細(xì)地研究列表及如何設(shè)置列表的樣式。
網(wǎng)頁設(shè)計(jì)中與一個列表項(xiàng)元素關(guān)聯(lián)的標(biāo)志可能在列表項(xiàng)內(nèi)容之外,也可能處理為內(nèi)容開始處的一個內(nèi)聯(lián)標(biāo)志,這取決于屬性list-style-position的值,如果標(biāo)志放在內(nèi)部,那么這個列表項(xiàng)相對于其相鄰列表項(xiàng)就像一個塊級元素一樣,如圖7-26所示。
圖7-26:標(biāo)志放在列表內(nèi)部和外部
如果標(biāo)志在內(nèi)容之外,它會放在與內(nèi)容左邊界有一定距離的位置上(對于從左向右讀的語言)。網(wǎng)頁設(shè)計(jì)中不論如何改變列表的樣式,標(biāo)志與內(nèi)容邊界的距離都不變。有時,標(biāo)志可能會放在列表元素本身之外,如圖7-26所示。