列表樣式
列表 在大多數情況下表現得像其他任何文字一樣,但有一些特定於列表的 CSS 屬性你需要了解,以及一些需要考慮的最佳實踐。本文解釋了所有這些。
| 先決條件 | HTML 基礎知識(學習 HTML 入門),CSS 基礎知識(學習 CSS 入門),CSS 文字和字型基礎知識。 |
|---|---|
| 目標 | 熟悉與列表樣式相關的最佳實踐和屬性。 |
簡單的列表示例
首先,讓我們來看一個簡單的列表示例。在本文中,我們將瞭解無序列表、有序列表和描述列表——它們都具有相似的樣式特徵,以及一些特定於自身的特徵。未設定樣式的示例可在 GitHub 上獲取(也請檢視原始碼)。
我們列表示例的 HTML 程式碼如下所示
<h2>Shopping (unordered) list</h2>
<p>
Paragraph for reference, paragraph for reference, paragraph for reference,
paragraph for reference, paragraph for reference, paragraph for reference.
</p>
<ul>
<li>Hummus</li>
<li>Pita</li>
<li>Green salad</li>
<li>Halloumi</li>
</ul>
<h2>Recipe (ordered) list</h2>
<p>
Paragraph for reference, paragraph for reference, paragraph for reference,
paragraph for reference, paragraph for reference, paragraph for reference.
</p>
<ol>
<li>Toast pita, leave to cool, then slice down the edge.</li>
<li>
Fry the halloumi in a shallow, non-stick pan, until browned on both sides.
</li>
<li>Wash and chop the salad.</li>
<li>Fill pita with salad, hummus, and fried halloumi.</li>
</ol>
<h2>Ingredient description list</h2>
<p>
Paragraph for reference, paragraph for reference, paragraph for reference,
paragraph for reference, paragraph for reference, paragraph for reference.
</p>
<dl>
<dt>Hummus</dt>
<dd>
A thick dip/sauce generally made from chick peas blended with tahini, lemon
juice, salt, garlic, and other ingredients.
</dd>
<dt>Pita</dt>
<dd>A soft, slightly leavened flatbread.</dd>
<dt>Halloumi</dt>
<dd>
A semi-hard, unripened, brined cheese with a higher-than-usual melting
point, usually made from goat/sheep milk.
</dd>
<dt>Green salad</dt>
<dd>That green healthy stuff that many of us just use to garnish kebabs.</dd>
</dl>
如果您現在轉到即時示例並使用瀏覽器開發者工具檢查列表元素,您會注意到一些樣式預設值
<ul>和<ol>元素的頂部和底部margin為16px(1em),並且padding-left為40px(2.5em)。如果方向屬性dir設定為從右到左(rtl)對於ul和ol元素,在這種情況下padding-right生效,其預設值為40px(2.5em)。- 列表項(
<li>元素)沒有設定間距的預設值。 <dl>元素的頂部和底部margin為16px(1em),但沒有設定填充。<dd>元素的margin-left為40px(2.5em)。- 我們包含的用於參考的
<p>元素的頂部和底部margin為16px(1em)——與不同的列表型別相同。
處理列表間距
在設定列表樣式時,您需要調整其樣式,使其與周圍的元素(例如段落和影像;有時稱為垂直節奏)保持相同的垂直間距,以及彼此之間相同的水平間距(您可以看到完成的樣式示例在 GitHub 上,以及找到原始碼)。
用於文字樣式和間距的 CSS 如下所示
/* General styles */
html {
font-family: Helvetica, Arial, sans-serif;
font-size: 10px;
}
h2 {
font-size: 2rem;
}
ul,
ol,
dl,
p {
font-size: 1.5rem;
}
li,
p {
line-height: 1.5;
}
/* Description list styles */
dd,
dt {
line-height: 1.5;
}
dt {
font-weight: bold;
}
- 第一條規則設定了站點範圍的字型和 10px 的基線字型大小。這些會被頁面上的所有內容繼承。
- 規則 2 和 3 設定了標題、不同列表型別(列表元素的子元素會繼承這些)和段落的相對字型大小。這意味著每個段落和列表都將具有相同的字型大小和頂部和底部間距,有助於保持垂直節奏的一致性。
- 規則 4 在段落和列表項上設定了相同的
line-height——因此段落和每個單獨的列表項都將具有相同的行間距。這也有助於保持垂直節奏的一致性。 - 規則 5 和 6 應用於描述列表。我們在描述列表術語和描述上設定了與段落和列表項相同的
line-height。同樣,一致性很重要!我們還使描述術語具有粗體字型,以便它們更容易在視覺上脫穎而出。
列表特定樣式
現在我們已經瞭解了列表的一般間距技巧,讓我們探索一些特定於列表的屬性。有三個屬性您應該首先了解,它們可以設定在<ul> 或 <ol> 元素上
list-style-type:設定要用於列表的專案符號型別,例如,對於無序列表使用方形或圓形專案符號,或者對於有序列表使用數字、字母或羅馬數字。list-style-position:設定每個專案開頭的專案符號是在列表內還是列表外出現。list-style-image:允許您為專案符號使用自定義影像,而不是簡單的方形或圓形。
專案符號樣式
如上所述,list-style-type 屬性允許您設定要用於專案符號的專案符號型別。在我們的示例中,我們已將有序列表設定為使用大寫羅馬數字,如下所示:
ol {
list-style-type: upper-roman;
}
這給了我們如下外觀
您可以透過檢視list-style-type 參考頁面找到更多選項。
專案符號位置
list-style-position 屬性設定專案符號是在列表項內部出現,還是在每個專案開始之前出現在其外部。預設值為 outside,這會導致專案符號位於列表項外部,如上所示。
如果將值設定為 inside,則專案符號將位於行內
ol {
list-style-type: upper-roman;
list-style-position: inside;
}
使用自定義專案符號影像
list-style-image 屬性允許您為專案符號使用自定義影像。語法非常簡單
ul {
list-style-image: url(star.svg);
}
但是,此屬性在控制專案符號的位置、大小等方面受到一些限制。您最好使用background 屬性族,您已在背景和邊框文章中學習過。現在,這裡有一個示例!
在我們的完成的示例中,我們已經像這樣設定了無序列表的樣式(在您上面已經看到的樣式之上)
ul {
padding-left: 2rem;
list-style-type: none;
}
ul li {
padding-left: 2rem;
background-image: url(star.svg);
background-position: 0 0;
background-size: 1.6rem 1.6rem;
background-repeat: no-repeat;
}
我們在這裡做了以下操作
- 將
padding-left的<ul>從預設的40px減少到20px,然後在列表項上設定相同的值。這樣,總的來說,列表項仍然與有序列表項和描述列表描述對齊,但列表項有一些填充,以便背景影像可以位於其中。如果我們不這樣做,背景影像將與列表項文字重疊,這將看起來很亂。 - 將
list-style-type設定為none,以便預設情況下不顯示任何專案符號。我們將使用background屬性來處理專案符號。 - 在每個無序列表項中插入了一個專案符號。相關屬性如下
background-image:這引用了您要作為專案符號使用的影像檔案的路徑。background-position:這定義了影像將在所選元素的背景中的哪個位置出現——在本例中,我們說的是0 0,這意味著專案符號將出現在每個列表項的左上角。background-size:這設定了背景影像的大小。我們理想情況下希望專案符號與列表項大小相同(或略微小一點或大一點)。我們使用1.6rem(16px)的大小,它非常適合我們為專案符號提供的20px填充——16px 加上專案符號和列表項文字之間 4px 的空間效果很好。background-repeat:預設情況下,背景影像會重複,直到填充可用背景空間。我們只想在每種情況下插入一個影像副本,因此我們將此設定為no-repeat值。
這給了我們以下結果
list-style 簡寫
上面提到的三個屬性都可以使用單個簡寫屬性list-style設定。例如,以下 CSS
ul {
list-style-type: square;
list-style-image: url(example.png);
list-style-position: inside;
}
可以用此替換
ul {
list-style: square url(example.png) inside;
}
這些值可以按任何順序列出,您可以使用一個、兩個或所有三個值(未包含的屬性使用的預設值為 disc、none 和 outside)。如果同時指定了 type 和 image,則如果由於某種原因無法載入影像,則使用 type 作為後備。
控制列表計數
有時您可能希望在有序列表中進行不同的計數——例如,從 1 以外的數字開始,或倒數,或以大於 1 的步長計數。HTML 和 CSS 有一些工具可以幫助您解決此問題。
start
start 屬性允許您從 1 以外的數字開始列表計數。以下示例
<ol start="4">
<li>Toast pita, leave to cool, then slice down the edge.</li>
<li>
Fry the halloumi in a shallow, non-stick pan, until browned on both sides.
</li>
<li>Wash and chop the salad.</li>
<li>Fill pita with salad, hummus, and fried halloumi.</li>
</ol>
為您提供此輸出
reversed
reversed 屬性將開始倒數列表而不是正數列表。以下示例
<ol start="4" reversed>
<li>Toast pita, leave to cool, then slice down the edge.</li>
<li>
Fry the halloumi in a shallow, non-stick pan, until browned on both sides.
</li>
<li>Wash and chop the salad.</li>
<li>Fill pita with salad, hummus, and fried halloumi.</li>
</ol>
為您提供此輸出
注意:如果反向列表中的列表項多於 start 屬性的值,則計數將繼續到零,然後進入負值。
value
value 屬性允許您將列表項設定為特定的數值。以下示例
<ol>
<li value="2">Toast pita, leave to cool, then slice down the edge.</li>
<li value="4">
Fry the halloumi in a shallow, non-stick pan, until browned on both sides.
</li>
<li value="6">Wash and chop the salad.</li>
<li value="8">Fill pita with salad, hummus, and fried halloumi.</li>
</ol>
為您提供此輸出
注意:即使您使用的是非數字list-style-type,您仍然需要在 value 屬性中使用等效的數值。
主動學習:樣式化巢狀列表
在本活動學習課程中,我們希望您利用上面學到的知識,嘗試設定巢狀列表的樣式。我們為您提供了 HTML 程式碼,我們希望您
- 為無序列表提供方形專案符號。
- 為無序列表項和有序列表項提供 1.5 倍於其字型大小的行高。
- 為有序列表提供小寫字母專案符號。
- 隨意儘可能多地使用列表示例,嘗試使用專案符號型別、間距或您能找到的任何其他內容。
如果您犯了錯誤,您可以隨時使用“重置”按鈕將其重置。如果您真的卡住了,請按“顯示解決方案”按鈕檢視可能的答案。
總結
一旦您瞭解了一些相關的基本原理和特定屬性,列表的樣式就相對容易掌握。在下一篇文章中,我們將繼續學習連結樣式技巧。
另請參閱
CSS 計數器提供了用於自定義列表計數和樣式的高階工具,但它們非常複雜。如果您想挑戰自己,我們建議您研究這些工具。請參閱