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