CSS 使用說明
1. CSS 概述
CSS (Cascading Style Sheets) 是一種用于描述 HTML 或 XML(包括如 SVG、MathML 等 XML 方言)文檔呈現的樣式表語言。CSS 描述了元素應該如何在屏幕、紙張或其他媒體上顯示。
2. CSS 的基本語法
CSS 規則由兩個主要部分組成:選擇器和聲明塊。
選擇器 { 屬性: 值; 屬性: 值; ... }
例如:
p { color: red; font-size: 16px; }
3. CSS 引入方式
3.1 內聯樣式(Inline Style)
直接在 HTML 元素的 style
屬性中定義 CSS。
<p style="color: red; font-size: 16px;">這是紅色文本</p>
3.2 內部樣式表(Internal Style Sheet)
在 HTML 文檔的 <head>
部分使用 <style>
標簽定義 CSS。
<head><style>p { color: red; font-size: 16px; }</style>
</head>
3.3 外部樣式表(External Style Sheet)
創建單獨的 .css
文件,然后在 HTML 中通過 <link>
標簽引入。
<head><link rel="stylesheet" href="styles.css">
</head>
4. 選擇器
4.1 基本選擇器
-
元素選擇器:選擇特定類型的元素
p { color: blue; }
-
ID 選擇器:選擇具有特定 ID 的元素(ID 是唯一的)
#header { background-color: gray; }
-
類選擇器:選擇具有特定類的元素
.container { width: 100%; }
-
通用選擇器:選擇所有元素
* { margin: 0; padding: 0; }
4.2 組合選擇器
-
后代選擇器:選擇元素內的所有后代元素
div p { color: green; }
-
子選擇器:選擇元素的直接子元素
div > p { color: purple; }
-
相鄰兄弟選擇器:選擇緊接在另一個元素后的元素
p + ul { margin-top: 10px; }
-
通用兄弟選擇器:選擇在另一個元素后的所有兄弟元素
p ~ ul { margin-left: 20px; }
4.3 屬性選擇器
選擇具有特定屬性或屬性值的元素
[href] { color: blue; }
[href="https://example.com"] { color: green; }
[class^="box-"] { border: 1px solid black; }
[class$="-active"] { background-color: yellow; }
4.4 偽類和偽元素
-
偽類:選擇處于特定狀態的元素
a:hover { color: red; } p:first-child { font-weight: bold; } input:focus { border: 2px solid blue; }
-
偽元素:選擇元素的特定部分
p::first-line { font-size: 120%; } p::before { content: "? "; } p::after { content: " ..."; }
5. 常用 CSS 屬性
5.1 文本相關
color
:設置文本顏色font-family
:設置字體類型font-size
:設置字體大小font-weight
:設置字體粗細text-align
:設置文本對齊方式(left、right、center、justify)text-decoration
:設置文本裝飾(none、underline、overline、line-through)line-height
:設置行高
5.2 背景相關
background-color
:設置背景顏色background-image
:設置背景圖片background-repeat
:設置背景圖片是否重復background-position
:設置背景圖片位置background-size
:設置背景圖片大小
5.3 盒模型相關
width
、height
:設置元素的寬度和高度margin
:設置元素外部邊距padding
:設置元素內部填充border
:設置元素邊框box-sizing
:設置盒模型計算方式(content-box、border-box)
5.4 定位相關
position
:設置元素定位方式(static、relative、absolute、fixed、sticky)top
、right
、bottom
、left
:設置元素的偏移量display
:設置元素的顯示類型(block、inline、inline-block、none 等)float
:設置元素的浮動方式(left、right、none)clear
:清除浮動(left、right、both、none)
5.5 其他常用屬性
opacity
:設置元素透明度cursor
:設置鼠標指針樣式z-index
:設置元素的堆疊順序overflow
:設置元素溢出內容的處理方式
6. CSS 盒模型
CSS 盒模型是 CSS 布局的基礎,它由以下部分組成:
- 內容區域(content):顯示實際內容的部分
- 內邊距(padding):內容與邊框之間的空白
- 邊框(border):圍繞內邊距的邊界
- 外邊距(margin):元素與其他元素之間的空白
.box {width: 300px;height: 200px;padding: 20px;border: 5px solid black;margin: 15px;box-sizing: border-box; /* 設置為 border-box 時,width/height 包含 padding 和 border */
}
7. CSS 布局技術
7.1 Flexbox(彈性盒子)
Flexbox 是一種一維布局模型,用于創建靈活的布局結構。
.container {display: flex;flex-direction: row; /* row | row-reverse | column | column-reverse */justify-content: space-between; /* flex-start | flex-end | center | space-between | space-around */align-items: center; /* stretch | flex-start | flex-end | center | baseline */flex-wrap: wrap; /* nowrap | wrap | wrap-reverse */
}
7.2 Grid(網格布局)
Grid 是一種二維布局模型,可同時處理行和列。
.container {display: grid;grid-template-columns: 1fr 1fr 1fr; /* 創建3個等寬列 */grid-template-rows: 100px 200px; /* 創建2行,高度分別為100px和200px */grid-gap: 10px; /* 網格項之間的間距 */
}
7.3 響應式設計
使用媒體查詢(Media Queries)創建適應不同屏幕尺寸的布局。
/* 當屏幕寬度小于 768px 時應用的樣式 */
@media (max-width: 768px) {.container {flex-direction: column;}.sidebar {display: none;}
}
8. CSS 優先級和繼承
8.1 優先級
當多個選擇器應用于同一個元素時,CSS 會按照以下優先級順序應用樣式:
- 內聯樣式(
style
屬性) - ID 選擇器
- 類選擇器、屬性選擇器、偽類
- 元素選擇器、偽元素
- 通用選擇器
可以使用 !important
覆蓋任何樣式,但應謹慎使用。
8.2 繼承
某些 CSS 屬性會從父元素繼承到子元素,如 color
、font-family
等。
可以使用 inherit
、initial
或 unset
控制屬性的繼承行為。
div {color: red; /* 所有子元素默認會繼承這個顏色 */
}p {color: inherit; /* 顯式繼承父元素的顏色 */
}span {color: initial; /* 使用屬性的初始值 */
}
9. CSS 變量(自定義屬性)
CSS 變量允許您定義可重用的值,有助于維護和主題化。
:root {--primary-color: #3498db;--secondary-color: #2ecc71;--spacing-unit: 16px;
}.header {background-color: var(--primary-color);padding: var(--spacing-unit);
}.button {background-color: var(--secondary-color);margin: calc(var(--spacing-unit) * 2);
}
10. 最佳實踐
-
組織和維護
- 使用有意義的選擇器名稱
- 按邏輯分組相關樣式
- 使用注釋解釋復雜樣式
- 考慮使用 CSS 預處理器(如 Sass、Less)提高代碼可維護性
-
性能優化
- 減少選擇器的復雜性
- 避免過度使用
!important
- 合并和壓縮 CSS 文件
- 使用 CSS 變量代替重復值
-
可訪問性
- 確保文本與背景的對比度符合 WCAG 標準
- 避免依賴顏色來傳達信息
- 確保交互元素有適當的狀態指示(hover、focus 等)
-
響應式設計
- 使用相對單位(如 em、rem、%、vh、vw)
- 采用移動優先的設計方法
- 使用媒體查詢適配不同設備
- 測試不同屏幕尺寸下的布局
11. 示例代碼
以下是一個綜合示例,展示了 CSS 的多種用法:
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>CSS 示例</title><style>/* CSS 變量定義 */:root {--primary-color: #3498db;--text-color: #333;--background-color: #f5f5f5;--border-radius: 8px;--spacing: 20px;}/* 重置默認樣式 */* {margin: 0;padding: 0;box-sizing: border-box;}body {font-family: 'Arial', sans-serif;color: var(--text-color);background-color: var(--background-color);line-height: 1.6;}.container {max-width: 1200px;margin: 0 auto;padding: var(--spacing);}header {background-color: var(--primary-color);color: white;padding: calc(var(--spacing) * 1.5);text-align: center;border-radius: var(--border-radius) var(--border-radius) 0 0;}nav {background-color: white;padding: var(--spacing);box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);}nav ul {display: flex;list-style: none;gap: var(--spacing);}nav a {text-decoration: none;color: var(--text-color);padding: 8px 16px;border-radius: 4px;transition: background-color 0.3s;}nav a:hover {background-color: var(--background-color);}.main-content {display: grid;grid-template-columns: 2fr 1fr;gap: var(--spacing);margin: var(--spacing) 0;}article {background-color: white;padding: var(--spacing);border-radius: var(--border-radius);box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);}aside {background-color: white;padding: var(--spacing);border-radius: var(--border-radius);box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);}footer {background-color: #2c3e50;color: white;text-align: center;padding: var(--spacing);border-radius: 0 0 var(--border-radius) var(--border-radius);}/* 響應式設計 */@media (max-width: 768px) {.main-content {grid-template-columns: 1fr;}nav ul {flex-direction: column;}}</style>
</head>
<body><div class="container"><header><h1>CSS 示例頁面</h1></header><nav><ul><li><a href="#">首頁</a></li><li><a href="#">關于我們</a></li><li><a href="#">聯系我們</a></li></ul></nav><div class="main-content"><article><h2>主要內容</h2><p>這是一個使用 CSS 布局的示例頁面。</p></article><aside><h3>側邊欄</h3><p>這里是側邊欄內容。</p></aside></div><footer><p>© 2023 CSS 示例。保留所有權利。</p></footer></div>
</body>
</html>
12. 學習資源
- MDN Web Docs - CSS
- CSS-Tricks
- W3Schools CSS 教程
- CSS Diner - 學習 CSS 選擇器的游戲
- Flexbox Froggy - 學習 Flexbox 的游戲
- Grid Garden - 學習 Grid 布局的游戲