網(wǎng)頁(yè)建設(shè)中還可以做一件事來(lái)影響列表項(xiàng)的外觀,即確定標(biāo)志出現(xiàn)在列表項(xiàng)內(nèi)容之外還是在內(nèi)容內(nèi)部。這是利用list-style-position完成的。
如果標(biāo)志的位置設(shè)置為outside(默認(rèn)值),則顯示與一般Web上列表項(xiàng)的顯示無(wú)二。不過(guò),在網(wǎng)頁(yè)設(shè)計(jì)時(shí),如果你需要一個(gè)稍微不同的外觀,可以把這個(gè)值設(shè)置為inside,將標(biāo)志拉向內(nèi)容,這會(huì)使標(biāo)志放在列表項(xiàng)的內(nèi)容“以內(nèi)”。對(duì)于具體如何做沒(méi)有明確定義,不過(guò)下面顯示了一種可能的做法:
li.first {list-style-position: inside;}
li.second {list-style-position: outside;}
list-style-position
值:inside | outside | inherit
初始值:outside
應(yīng)用于:display 值為list-item 的元素
繼承性:有
計(jì)算值:根據(jù)指定確定
為簡(jiǎn)單起見(jiàn),可以將以上3個(gè)列表樣式屬性合并為一個(gè)方便的屬性:list-style。
list-style
值:[<list-stylc-type>||<list-style-image>||<list-style-position>] inherit
初始值:相對(duì)于各個(gè)屬性。
應(yīng)用于:display 值為list-item 的元素
繼承性:有
計(jì)算值:見(jiàn)單個(gè)屬性
例如:
li (list-style: url(ohio.gif) square inside;}
list-style的值可以按任何順序列出,而且這些值都可以忽略。只要提供了一個(gè)值,其他的就會(huì)填入其默認(rèn)值。例如,以下兩個(gè)規(guī)則有同樣的視覺(jué)效果:
li.norm {list-style: url(img42.gif);}
li.odd {list-style: urr(img42.gif) disc outside;}/* the same thing */
還可以用同樣的方法覆蓋之前的規(guī)則。例如:
li {list-style-type: square;}
li.norm {list-style: url(img42.gif);)
li.odd {list-style: urr(img42.gif) disc outside;}/* the same thing */
其結(jié)果與圖上面所示相同,因?yàn)橐?guī)則li.norm隱含的list-style-type值disc會(huì)覆蓋先前聲明的square值,同樣地,li.odd規(guī)則中顯式聲明的值disc也會(huì)覆蓋先前聲明的square值。
前面已經(jīng)了解了應(yīng)用列表標(biāo)志樣式的基本知識(shí),下面來(lái)考慮不同瀏覽器中列表如何布局。
從列表項(xiàng)周圍的邊框可以看出,它們就像是塊級(jí)元素。實(shí)際上,值list-item確實(shí)定義為生成塊框。
標(biāo)志和列表項(xiàng)內(nèi)容之間的距離在網(wǎng)頁(yè)建設(shè)中未定義,CSS2.1也沒(méi)有提供任何方法來(lái)控制這個(gè)距離。有意思的是,CSS2倒是提到過(guò),這個(gè)內(nèi)容將在“列表標(biāo)志定位”中簡(jiǎn)單介紹。
如果標(biāo)志放在列表項(xiàng)內(nèi)容之外,它們不會(huì)影響其他元素的布局,也不會(huì)影響列表項(xiàng)本身的布局。它們只是離內(nèi)容邊界有一段距離,只要內(nèi)容邊界移動(dòng),標(biāo)志也會(huì)跟著軫動(dòng)。標(biāo)志的行為就像是標(biāo)志相對(duì)于列表項(xiàng)內(nèi)容絕對(duì)定位一樣,比如說(shuō)position: absolute; left:如果標(biāo)志在列表項(xiàng)內(nèi)容內(nèi)部,則相當(dāng)于放在內(nèi)容開(kāi)始處的一個(gè)行內(nèi)元素。
迄今為止,還沒(méi)有增加具體的列表容器,換句話說(shuō),沒(méi)有ul也沒(méi)有ol元素。
類似于列表項(xiàng),列表元素也是一個(gè)塊框,其中包含所有后代元素。不過(guò),可以看到,標(biāo)志不僅放在列表項(xiàng)內(nèi)容之外,也放在列表元素的內(nèi)容區(qū)外。在此并沒(méi)有指定列表通常有的“縮進(jìn)”。
在寫(xiě)作本書(shū)時(shí),大多數(shù)瀏覽器會(huì)通過(guò)設(shè)置列表元素的內(nèi)邊距或外邊距來(lái)完成列表項(xiàng)的縮進(jìn)。例如,用戶代理可能應(yīng)用以下規(guī)則:
ul, ol {margin-left: 40px;}
這是Internet Explorer和Opera采用的規(guī)則,大多數(shù)基于Gecko的瀏覽器則使用類似下面的規(guī)則:
ul, ol {padding-left: 40px;}
不能說(shuō)這兩種做法不正確,但是如果你想消除列表項(xiàng)的縮進(jìn),二者的差異會(huì)導(dǎo)致一些問(wèn)題。
注意:這里40px的距離是從較早的Web瀏覽器繼承來(lái)的,早先的瀏覽器會(huì)把列表縮進(jìn)一定的像素?cái)?shù)。更好的值可能是2.5em,因?yàn)檫@樣一來(lái),縮進(jìn)就可以隨文本大小的變化而調(diào)整。
如果創(chuàng)作人員在網(wǎng)頁(yè)設(shè)計(jì)時(shí)想改變列表的縮進(jìn)距離,強(qiáng)烈建議你同時(shí)指定內(nèi)邊距和外邊距,以確??鐬g覽器兼容性。
如果想用外邊距,可以寫(xiě)作:
ul {margin-left: 1em; padding-left: 0;}
不論哪一種情況,要記住標(biāo)志總會(huì)相對(duì)于列表項(xiàng)的內(nèi)容放置,因此可能會(huì)“掛”在文檔主文本之外,甚至超出瀏覽器容器邊界。
許多創(chuàng)作人員都希望有這樣一個(gè)特性,能夠控制標(biāo)志與列表項(xiàng)內(nèi)容之間的間隔。CSS2定義了一些辦法來(lái)做到這一點(diǎn),這包括一個(gè)名為marker-off set的屬性和一個(gè)display值marker,從具體的實(shí)現(xiàn)來(lái)看,這是一個(gè)很笨拙的辦法,所以這些特性已經(jīng)從CSS2.1中去除了。
寫(xiě)作本書(shū)時(shí),CSS3列表模型的當(dāng)前工作革案定又了一個(gè)更聞潔的新方法來(lái)影響標(biāo)志位里,即::marker偽元素。飯?jiān)O(shè)這個(gè)模塊在成為完備推薦之前沒(méi)有改動(dòng),有朝一日你可能可以編寫(xiě)類似li::marker {margin-right: 0.125em;}的規(guī)則,使標(biāo)志與列表項(xiàng)內(nèi)容之間有適當(dāng)?shù)木嚯x,而不用把標(biāo)志放在內(nèi)容內(nèi)部。