文章

偽類(Pseudo-classes)和 偽元素(Pseudo-elements)

偽類和偽元素

在 CSS 中,偽類和偽元素提供了一種方法,可以選擇和樣式化特定的元素狀態或者特定部分。這些功能使得設計更加靈活和強大。

1. 偽類(Pseudo-classes)

偽類是一種用來選擇元素的特殊狀態的 CSS 選擇器。例如,當元素被鼠標懸停時、當元素是第一個子元素時、或者當元素被聚焦時,偽類都可以用來指定特定樣式。

語法

1
2
3
selector:pseudo-class {
    property: value;
}

常見偽類

  • :hover — 當鼠標懸停在元素上時應用樣式。
  • :active — 當元素被點擊並保持激活狀態時應用樣式。
  • :focus — 當元素獲得焦點時(例如,輸入框被點擊)應用樣式。
  • :first-child — 當元素是父元素的第一個子元素時應用樣式。
  • :last-child — 當元素是父元素的最後一個子元素時應用樣式。
  • :nth-child(n) — 當元素是父元素的第 n 個子元素時應用樣式。
  • :nth-of-type(n) — 當元素是指定類型的第 n 個子元素時應用樣式。
  • :not(selector) — 用於選擇不符合指定選擇器的元素。

範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* 當鼠標懸停在按鈕上時改變背景顏色 */
.button:hover {
    background-color: #4CAF50;
}

/* 當輸入框獲得焦點時改變邊框顏色 */
input:focus {
    border-color: #3498db;
}

/* 父元素的第一個子元素設置為粗體 */
p:first-child {
    font-weight: bold;
}

2. 偽元素(Pseudo-elements)

偽元素用於選擇元素的某個特定部分或在元素內創建虛擬元素。例如,選擇元素的第一行或第一個字母,或在元素之前或之後插入內容。

語法

1
2
3
selector::pseudo-element {
    property: value;
}

CSS3 之前,偽元素語法使用單個冒號 (:),CSS3 開始使用雙冒號 (::) 以區分偽類。舊語法仍被大多數瀏覽器支持。

常見偽元素

  • ::before — 用於在元素的內容之前插入內容。
  • ::after — 用於在元素的內容之後插入內容。
  • ::first-line — 用於選擇元素的第一行。
  • ::first-letter — 用於選擇元素的第一個字母。
  • ::selection — 用於選擇被用戶選取的文本部分。

範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* 使用 ::before 在段落之前添加一個引號 */
p::before {
    content: "“";
    font-size: 2em;
    color: #ccc;
}

/* 使用 ::after 在段落之後添加一個引號 */
p::after {
    content: "”";
    font-size: 2em;
    color: #ccc;
}

/* 選擇並樣式化元素的第一個字母 */
p::first-letter {
    font-size: 2em;
    font-weight: bold;
    color: #FF6347;
}

/* 選擇並樣式化被選中的文本 */
::selection {
    background-color: #3498db;
    color: white;
}

3. 偽類與偽元素的區別

  • 偽類:用於選擇元素的狀態(如 :hover)或根據結構選擇元素(如 :first-child)。偽類基於元素的狀態或位置改變樣式。
  • 偽元素:用於選擇元素的特定部分(如 ::first-letter)或插入虛擬內容(如 ::before::after)。

4. 實用範例

4.1 製作按鈕的滑動效果

使用偽元素 ::before::after 來創建滑動效果的按鈕:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.button {
    position: relative;
    display: inline-block;
    padding: 10px 20px;
    color: white;
    background-color: #3498db;
    text-decoration: none;
    overflow: hidden;
    transition: background-color 0.3s ease;
}

.button::after {
    content: '';
    position: absolute;
    top: 0;
    left: -100%;
    width: 100%;
    height: 100%;
    background-color: #2ecc71;
    transition: left 0.3s ease;
}

.button:hover::after {
    left: 0;
}

這個例子中,當鼠標懸停在按鈕上時,::after 偽元素從左側滑入,創建出一個滑動效果。

4.2 自訂列表樣式

使用 ::before 偽元素來創建自定義的項目符號列表:

1
2
3
4
5
6
7
8
9
10
11
12
ul.custom-list li {
    position: relative;
    padding-left: 20px;
}

ul.custom-list li::before {
    content: '•';
    position: absolute;
    left: 0;
    color: #3498db;
    font-size: 1.5em;
}

這個範例中,::before 偽元素被用來在每個列表項的左側插入一個自定義的項目符號。

5. 小結

偽類和偽元素是 CSS 中強大的功能,可以選擇特定狀態或部分來樣式化元素。使用偽類和偽元素可以大大提高樣式設計的靈活性,並創建出更豐富和更具互動性的用戶界面。

本文章以 CC BY 4.0 授權