CSS-3: 偽類與偽元素、Tables、Lists、Forms 全解析

更新於 發佈於 閱讀時間約 23 分鐘

偽類與偽元素

我們來看一看常見的偽類。

  1. :hover

當使用者將滑鼠懸停在元素上時設定元素的樣式。

我們套用我們之前寫過的按鈕:

<input type="submit" value="sing up" />
input[type="submit"] {
display: block;
width: 50%;
margin: 20px auto 0 auto;
padding: 12px;
font-size: 1rem;
font-weight: bold;
color: #fff;
background-color: #007bff; /* 藍色按鈕 */
border: none;
border-radius: 10px;
cursor: pointer;
}
raw-image

我們想要當我鼠標放在按鈕上時,呈現一個更深的藍色效果,可以這麼做:

input[type="submit"]:hover {
background-color: #0056b3; /* 滑鼠懸停變色 */
}
raw-image

好,接著介紹 :first-child first-child選擇器設定其父元素的第一個子元素的樣式。

  1. :first-child

考慮以下程式碼:

<div>
<p>First paragraph.</p>
<p>Second paragraph.</p>
</div>
div p:first-child {
color: red;
}

呈現效果:

raw-image
  1. :nth-child:nth-child根據其父元素的位置來設定其父元素的特定子元素的樣式。

考慮以下程式碼:

<div>
<p>First paragraph.</p>
<p>Second paragraph.</p>
<p>Third paragraph.</p>
</div>
div p:nth-child(2) {
color: red;
}

呈現效果:

raw-image
  • 另外,讀者可以自行測試:nth-child(odd):nth-child(even) ,讓奇數漢語數字體呈現不同顏色。
  • 你更可以放入一些公式,例如 2n 或 2n+1 。讀者可以嘗試看看。

好,再來我們談偽元素選擇器:

  • ::before
    • 在選定的元素內容 前 插入內容。
    • 必須配合 content 屬性使用。
      範例:
      <p>First paragraph.</p>
      p::before {
      content: "✔ ";
      font-weight: bold;
      color: red;
      }
      效果:
raw-image
  • ::after
    • 在選定的元素內容 後 插入內容。
    • 也需要 content 屬性。

範例:

<p>First paragraph.</p>
p::after {
content: "✔ ";
font-weight: bold;
color: red;
}

效果:

raw-image
  • ::first-line
    • 用於樣式化元素的第一行內容。
    • 僅適用於塊級元素且受限於某些 CSS 屬性(例如字體、顏色)。

範例:

<p>First paragraph. First paragraph. First paragraph. First paragraph. First paragraph. First paragraph. First paragraph.</p>
p::first-line {
font-weight: bold;
color: green;
}

效果:

raw-image
  • ::first-letter
    • 用於樣式化元素的第一個字母。
    • 也僅適用於塊級元素。

範例:

<p>First paragraph. First paragraph. First paragraph. First paragraph. First paragraph. First paragraph. First paragraph.</p>
p::first-letter {
font-weight: bold;
color: green;
}

效果:

raw-image
  • ::marker
    • 用於樣式化列表項目(<li>)的標記符號(如圓點、數字)。
    • 僅適用於列表。

範例:

<ul>
<li>項目 1</li>
<li>項目 2</li>
</ul>
li::marker {
content: "★ ";
color: gold;
}

效果:

raw-image

Tables

現在考慮以下程式碼:

<table>
<caption>Students Info</caption>
<tr>
<th>Name</th>
<th>Age</th>
<th>GPA</th>
</tr>

<tr>
<td>Bob</td>
<td>18</td>
<td>4.0</td>
</tr>

<tr>
<td>Jack</td>
<td>18</td>
<td>3.7</td>
</tr>
</table>

呈現效果:

raw-image

現在我們使用CSS為其添加邊框:

table {
border: 1px solid black;
}

呈現效果:

raw-image

你會注意到表格內的行和列仍然沒有邊框。若要新增邊框,您需要將邊框套用到表格頭 (th) 和表格資料 (td) 儲存格。

table, th, td {
border: 1px solid black;
}

呈現效果:

raw-image

接下來,我想刪除表格中的雙邊框,可以這麼做:

table, th, td {
border: 1px solid black;
border-collapse: collapse;
}

接下來,我想將每個表格單元內的文字水平和垂直居中,同時加入內邊距,讓整體結構更好一些。

table, th, td {
border: 1px solid black;
padding: 10px;
text-align: center;
vertical-align: middle;
border-collapse: collapse;
}
  • text-align: 值可以使用(leftrightcenterjustify)達成不同效果。
  • vertical-align值可以使用(topmiddlebottombaseline)達成不同效果。

呈現效果:

raw-image

好,最後我想將最上方添加顏色:

table, th, td {
border: 1px solid black;
padding: 10px;
text-align: center;
vertical-align: middle;
border-collapse: collapse;
}
th {
background-color: #4caf50;
}

呈現效果:

raw-image

Lists

這邊我們已經有一定程度的了解了,這段我會簡單帶過:

我們先前有使用過list-style: none; 移除項目符號,其實這行語法也是相同效果list-style-type: none;

你也可以使用以下幾種值改變項目符號的外觀:

  1. list-style-type: square;
  2. list-style-type: circle;

好,接著談list-style-position屬性,這用來控制( 項目符號)是放置在清單項目內容流的內部還是外部。

<ul class="inside">
<li>First paragraph.</li>
</ul>

<ul>
<li>Second paragraph.</li>
</ul>
ul.inside {
list-style-position: inside;
}

呈現效果:

raw-image

Forms

好,我們實際構建一個表單項目,首先處理 HTML 程式碼。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Feedback Form</title>
<link rel="stylesheet" href="style.css">
</head>

<body>
<h1 id="title">XXX Company</h1>
<p id="description">Thank you for your feedback!</p>
<form action="#" method="post" class="form">
<!-- Personal Information Section -->
<div class="form-group">
<label for="name">Name:</label>
<input id="name" type="text" name="name" placeholder="Enter your name" required>
</div>

<div class="form-group">
<label for="email">Email:</label>
<input id="email" type="email" name="email" placeholder="Enter your email" required>
</div>

<div class="form-group">
<label id="number-label" for="number">Age:</label>
<input id="number" type="number" name="age" min="12" max="100" placeholder="Enter your age" required>
</div>
<!-- Preferences Section -->
<div class="form-group">
<label for="dropdown">Choose your favorite color:</label>
<select id="dropdown" name="color" required>
<option value="" disabled selected>Select a color</option>
<option value="red">Red</option>
<option value="blue">Blue</option>
</select>
</div>

<div class="form-group">
<label>Gender:</label>
<label for="male">
<input type="radio" id="male" name="gender" value="male" checked> Male
</label>
<label for="female">
<input type="radio" id="female" name="gender" value="female"> Female
</label>
</div>

<div class="form-group">
<label>Hobbies:</label>
<label for="reading">
<input type="checkbox" id="reading" name="hobbies" value="reading" checked> Reading
</label>
<label for="traveling">
<input type="checkbox" id="traveling" name="hobbies" value="traveling"> Traveling
</label>
</div>

<!-- Additional Comments Section -->
<div class="form-group">
<label for="comments">Comments:</label>
<textarea id="comments" name="comments" placeholder="Enter your comments here"></textarea>
</div>

<!-- Submit Button -->
<button type="submit" class="submit-btn">Send Message</button>
</form>
</body>
</html>

好,我們先刪除任何預設樣式,以方便我們設計:

* {
margin: 0;
padding: 0;
box-sizing: border-box;
}

呈現效果:

raw-image

接著,我們增加以下設定:

body {
font-family: Arial, sans-serif;
background-color: #f7f7f7; /* 主背景色 */
padding: 20px;
}
h1, p {
text-align: center;
}
.form {
width: 60vw; /* 表單寬度 */
margin: 0 auto; /* 置中 */
padding: 30px;
background-color: #ffffff; /* 白色表單底 */
border: 1px solid #000000; /* 邊界設定 */
border-radius: 10px; /* 圓角效果 */
}

呈現效果:

raw-image

效果不太好,進行一點微調:

p {
margin-bottom: 20px; /* 也可以在 .form 中設定上下的margin */
}
.form-group {
margin-bottom: 20px;
text-align: left;
/* background-color: #15a134; 可以自行添加觀察分布範圍*/
}
.form-group label {
font-size: 24px;
margin-bottom: 10px;
display: block;
color: #333;
font-weight: 600;
/* background-color: #dbce0d; 可以自行添加觀察分布範圍*/
}

呈現效果:

raw-image

好,表單還需要再完善一點:

.form-group input[type="text"],
.form-group input[type="number"],
.form-group input[type="email"],
.form-group textarea,
.form-group select {
width: 100%;
padding: 10px;
border-radius: 5px;
border: 1px solid #ddd;
font-size: 14px;
background-color: #fafafa;
color: #333;
}
/* radio 與 checkbox 只需微調外觀 */
input[type="radio"],
input[type="checkbox"] {
margin-right: 5px;
transform: scale(1.2); /* 稍微放大 */
}

呈現效果:

raw-image

最後再更改按鈕的樣式就大功告成了:

.submit-btn {
background-color: #13be13;
color: #fff;
padding: 10px;
font-size: 24px;
border: none;
border-radius: 5px;
cursor: pointer; /* 放在按鈕上時,會改變成可點擊的鼠標樣式 */
width: 100%;
}

.submit-btn:hover {
background-color: #0dc4a5;
}

完整 CSS :

* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
background-color: #f7f7f7; /* 主背景色 */
padding: 20px;
}
h1, p {
text-align: center;
}
p {
margin-bottom: 20px;
}
.form {
width: 60vw; /* 表單寬度 */
margin: 0 auto; /* 置中 */
padding: 30px; /* 內邊距設定 */
background-color: #ffffff; /* 白色表單底 */
border: 1px solid #000000; /* 邊界設定 */
border-radius: 10px; /* 圓角效果 */
}
.form-group {
margin-bottom: 20px;
text-align: left;
/* background-color: #15a134; 可以自行添加觀察分布範圍*/
}
.form-group label {
font-size: 24px;
margin-bottom: 10px;
display: block;
color: #333;
font-weight: 600;
/* background-color: #dbce0d; 可以自行添加觀察分布範圍*/
}
.form-group input[type="text"],
.form-group input[type="number"],
.form-group input[type="email"],
.form-group textarea,
.form-group select {
width: 100%;
padding: 10px;
border-radius: 5px;
border: 1px solid #ddd;
font-size: 14px;
background-color: #fafafa;
color: #333;
}
/* radio 與 checkbox 只需微調外觀 */
.form-group input[type="radio"],
.form-group input[type="checkbox"] {
margin-right: 5px;
transform: scale(1.2); /* 稍微放大 */
}
.submit-btn {
background-color: #13be13;
color: #fff;
padding: 10px;
font-size: 24px;
border: none;
border-radius: 5px;
cursor: pointer; /* 放在按鈕上時,會改變成可點擊的鼠標樣式 */
width: 100%;
}

.submit-btn:hover {
background-color: #0dc4a5; /* 懸停變色 */
}

呈現效果:

raw-image

讀者可以自行發揮創意,設計一份更好看的表單設計,上面的程式碼僅供參考,目的只是想讓你更了解 CSS 佈局的規則及實際如何應用。

留言
avatar-img
留言分享你的想法!
avatar-img
電資鼠 - 您的學習好夥伴
9會員
215內容數
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
2025/03/03
本章節你將了解 日期物件,包括處理日期的方法以及如何設定日期格式,切入要點的示範所有常見的使用方法範例與應用。
Thumbnail
2025/03/03
本章節你將了解 日期物件,包括處理日期的方法以及如何設定日期格式,切入要點的示範所有常見的使用方法範例與應用。
Thumbnail
2025/03/03
表單驗證是一個在用戶輸入資料時確保其正確性、完整性及格式符合要求的重要功能,它可以在用戶提交表單之前進行檢查,防止錯誤資料的傳輸。本章節將帶你初步了解其原理與使用。
2025/03/03
表單驗證是一個在用戶輸入資料時確保其正確性、完整性及格式符合要求的重要功能,它可以在用戶提交表單之前進行檢查,防止錯誤資料的傳輸。本章節將帶你初步了解其原理與使用。
2025/03/03
本篇文章深入淺出地介紹 JavaScript 正規表達式,從基本語法、常用符號、方法應用到進階的捕獲群組、斷言等,並搭配豐富的範例程式碼,幫助讀者快速掌握正規表達式的使用技巧。
2025/03/03
本篇文章深入淺出地介紹 JavaScript 正規表達式,從基本語法、常用符號、方法應用到進階的捕獲群組、斷言等,並搭配豐富的範例程式碼,幫助讀者快速掌握正規表達式的使用技巧。
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
重點摘要: 6 月繼續維持基準利率不變,強調維持高利率主因為關稅 點陣圖表現略為鷹派,收斂 2026、2027 年降息預期 SEP 連續 2 季下修 GDP、上修通膨預測值 --- 1.繼續維持利率不變,強調需要維持高利率是因為關稅: 聯準會 (Fed) 召開 6 月利率會議
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
在這個章節中,我們介紹了HTML的基本概念,包括其作為結構化標記語言的特性、應用領域,以及主要使用者。這些知識為後續的深入學習和實踐奠定了基礎,幫助讀者了解HTML在現代網頁開發中的重要性。
Thumbnail
在本章節中,我們介紹了 CSS 偽元素的基本概念和常見用法,通過一些示例,我們展示了如何使用這些偽元素來樣式化文檔中的特定部分。此外,我們還探討了一些高級用法,如創建自定義引號和實現複雜的圖形效果。這些內容應該能夠幫助你更好地理解和應用 CSS 偽元素。
Thumbnail
在本章節中,我們介紹了 CSS 偽元素的基本概念和常見用法,通過一些示例,我們展示了如何使用這些偽元素來樣式化文檔中的特定部分。此外,我們還探討了一些高級用法,如創建自定義引號和實現複雜的圖形效果。這些內容應該能夠幫助你更好地理解和應用 CSS 偽元素。
Thumbnail
在本章中,我們探討了CSS Grid佈局的基本概念和應用。CSS Grid提供了一個強大而靈活的二維佈局系統,使得處理複雜的網頁佈局變得更加簡單和直觀。我們學習了如何設置Grid容器和Grid項目,以及如何使用各種Grid屬性來定義和管理佈局。
Thumbnail
在本章中,我們探討了CSS Grid佈局的基本概念和應用。CSS Grid提供了一個強大而靈活的二維佈局系統,使得處理複雜的網頁佈局變得更加簡單和直觀。我們學習了如何設置Grid容器和Grid項目,以及如何使用各種Grid屬性來定義和管理佈局。
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
CSS 盒模型是理解和設計網頁佈局的核心概念。它包括元素的內容、填充、邊框和外邊距。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
你好,在下最近在學習開發web,學了html css js,也得出一些心得,由於網路上已有許多教學,所以我會著重在如何開發出to do List,以及解釋我寫的程式碼。相關的教學我會直接貼網址。如果我有什麼地方出錯,或者是可以寫得更好,歡迎在下方留言,討論。 首先先介紹我的開發環境: 我用了vs
Thumbnail
本章節旨在介紹 TypeScript 的基本資料型別,包括內建型別、型別轉換、自訂型別、元組、集合、陣列、和字典型別。透過理解和使用這些型別,可以提高代碼的可讀性和可維護性。
Thumbnail
本章節旨在介紹 TypeScript 的基本資料型別,包括內建型別、型別轉換、自訂型別、元組、集合、陣列、和字典型別。透過理解和使用這些型別,可以提高代碼的可讀性和可維護性。
Thumbnail
您對前端有興趣,對CSS不陌生。CSS新特性前應瞭解基本內容。CSS屬性制定經歷過程,瀏覽器私有前綴及處理,開發者對新特性漸進增強,優雅降級處理,Web標準定義、作用等。
Thumbnail
您對前端有興趣,對CSS不陌生。CSS新特性前應瞭解基本內容。CSS屬性制定經歷過程,瀏覽器私有前綴及處理,開發者對新特性漸進增強,優雅降級處理,Web標準定義、作用等。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News