CSS 基礎知識結構 現在雖然有AI但還是要有基礎知識才能夠控制AI所產生的code
CSS 規則結構:CSS由選擇器和聲明塊組成,格式為:
cssselector {
property: value;
}
例如:p { color: blue; } 將段落文字設為藍色。
層疊(Cascade):CSS 樣式根據來源(瀏覽器預設、作者樣式、使用者樣式)和優先級應用:
優先級(Specificity):計算方式為 inline > ID > class/attribute > element。例如,#id 優先於 .class,.class 優先於 p。
!important:最高優先級,但應謹慎使用。
繼承(Inheritance):某些屬性(如 color、font-family)會從父元素繼承到子元素。
應用方式:
內聯(Inline):(不推薦,難維護)。
內部(Internal):在 標籤內(用於單頁)。
外部(External):透過 引入 .css 檔案(最佳實踐)。
基本選擇器:
元素選擇器:p(選取所有 元素)。
類別選擇器:.class(選取具有特定 class 的元素)。
ID 選擇器:#id(選取唯一 ID 的元素)。
通用選擇器:*(選取所有元素,謹慎使用)。
組合選擇器:
後代選擇器:div p(選取 內的所有 )。
子選擇器:div > p(僅選取 的直接子 )。
相鄰兄弟:h1 + p(選取緊跟 的 )。
一般兄弟:h1 ~ p(選取 之後的所有同級 )。
屬性選擇器:[type="text"](選取 type 為 text 的元素)。
偽類(Pseudo-classes):用於特定狀態,如 :hover(滑鼠懸停)、:focus(獲得焦點)、:first-child。
偽元素(Pseudo-elements):用於元素特定部分,如 ::before、::after(插入內容)、::first-line。
Content:內容區域(由 width 和 height 定義)。
Padding:內容與邊框間的內間距(padding-top 等)。
Border:包圍 padding 的邊框(border-width、border-style、border-color)。
Margin:盒子外的間距(margin-top 等)。
關鍵屬性:
box-sizing:
content-box(預設,width/height 只算內容)。
border-box(推薦,width/height 包含 padding 和 border)。
速記屬性:margin: 10px 20px;(上下 10px,左右 20px)。
應用:理解盒模型對於佈局計算至關重要,避免溢出或意外間距。
顯示屬性(Display):
block:佔滿整行(如 、)。
inline:僅佔內容寬度(如 、)。
inline-block:行內顯示但可設寬高。
none:隱藏元素(不佔空間)。
定位(Position):
static:預設,依文件流排列。
relative:相對於原始位置偏移(top、left 等)。
absolute:相對於最近的定位祖先(非 static)定位。
fixed:相對於視窗固定(如導航欄)。
sticky:滾動時在 static 和 fixed 間切換。
浮動(Float):
float: left/right;:元素靠左/右,常用於圖文環繞(但 Flexbox/Grid 更現代)。
clear: both/left/right;:清除浮動影響。
現代佈局:
Flexbox(一維佈局):
display: flex;
關鍵屬性:flex-direction(row/column)、justify-content(主軸對齊)、align-items(交叉軸對齊)、flex-wrap。
用於靈活的行或列排列。
Grid(二維佈局):
display: grid;
關鍵屬性:grid-template-columns、grid-template-rows、gap。
用於複雜網格佈局。
文字與字型:
font-family: "Arial", sans-serif;(字型堆疊)。
font-size: 16px;(支援 px、rem、em、vw 等單位)。
font-weight: 400;(100-900 或 bold)。
line-height: 1.5;(行高,無單位或 px)。
text-align: center;(左、右、居中、兩端對齊)。
color: #333;(顏色,支援 HEX、RGB、HSL)。
背景:
background-color: blue;(背景色)。
background-image: url('image.jpg');(背景圖)。
background-size: cover;(縮放圖片)。
background-position: center;(圖片位置)。
邊框與輪廓:
border: 1px solid black;(速記:寬度、樣式、顏色)。
border-radius: 5px;(圓角)。
outline: 2px solid red;(輪廓,不佔空間)。
尺寸與間距:
width、height(固定或百分比)。
padding、margin(控制內外間距)。
單位:
絕對單位:px(像素)。
相對單位:rem(根字型大小)、em(父元素字型大小)、vw/vh(視窗寬高百分比)、%(父元素比例)。
媒體查詢(Media Queries):
css@media (max-width: 768px) {
body { font-size: 14px; }
}
常用斷點:320px(手機)、768px(平板)、1024px(桌面)。
Viewport 設置:
在 HTML 中添加:
html
相對單位:使用 rem、em、vw、vh 確保縮放靈活性。
圖片響應:img { max-width: 100%; height: auto; } 防止圖片溢出。
轉換(Transition):
cssbutton {
transition: background-color 0.3s ease;
}
button:hover {
background-color: blue;
}
屬性:transition-property、transition-duration、transition-timing-function。
動畫(Animation):
css@keyframes slide {
from { transform: translateX(0); }
to { transform: translateX(100px); }
}
div {
animation: slide 2s infinite;
}
變換(Transform):
transform: rotate(45deg);(旋轉)、scale(1.2)(縮放)、translate(10px, 20px)(平移)。
命名規範:使用 BEM(Block-Element-Modifier)命名,如 .button--primary,提高可讀性和可維護性。
簡化選擇器:避免過深巢狀選擇器(如 div ul li a),降低優先級衝突和性能影響。
跨瀏覽器相容:
使用 -webkit-、-moz- 前綴(或工具如 Autoprefixer)處理瀏覽器差異。
測試主流瀏覽器(Chrome、Firefox、Safari、Edge)。
性能優化:
減少 reflow/repaint(如避免頻繁更改佈局屬性)。
合併樣式,壓縮 CSS 檔案。
可訪問性(Accessibility):
確保顏色對比符合 WCAG 標準(例如,文字與背景對比至少 4.5:1)。
提供 :focus 樣式支持鍵盤導航。
避免純 CSS 隱藏內容影響螢幕閱讀器(如 display: none;)。
模組化:將 CSS 分成模組(如 header.css、footer.css),或使用預處理器(如 Sass)管理變數和巢狀。
學習與應用建議
實作練習:
創建簡單頁面(如響應式卡片佈局)練習 Flexbox 和 Grid。
模擬常見 UI 組件(如導航欄、表單),結合偽類和動畫。
工具使用:
使用瀏覽器 DevTools 檢查元素樣式和佈局。
試用 CSS 框架(如 Tailwind CSS、Bootstrap)理解其背後原理。
常見問題:
佈局崩潰:檢查 box-sizing、浮動清除或溢出設置(overflow: auto/hidden)。
樣式未生效:檢查優先級、選擇器拼寫或檔案載入順序。
進階準備:
學習 CSS 變數(--var: value;)和函數(calc()、clamp())。
探索 CSS-in-JS(如 Styled Components)或預處理器(如 Sass、Less)。
Flexbox(靈活盒模型)
Flexbox 是一維佈局系統,適合在單一行或列中排列元素,特別適用於導航欄、卡片列表、居中內容等場景。它提供靈活的對齊和間距控制,解決了傳統浮動佈局的許多痛點。
核心概念
Flex 容器與項目:
設置 display: flex; 或 display: inline-flex; 將元素轉為 Flex 容器,其直接子元素成為 Flex 項目(Flex Items)。
容器控制整體佈局,項目則根據容器屬性排列。
主軸與交叉軸:
主軸(Main Axis):由 flex-direction 決定(row 或 column)。
交叉軸(Cross Axis):垂直於主軸,用於對齊。
關鍵屬性(容器)
display: flex;
啟用 Flexbox 佈局。
inline-flex 使容器行內顯示。
flex-direction
定義主軸方向:
row(預設,左到右)。
row-reverse(右到左)。
column(上到下)。
column-reverse(下到上)。
flex-wrap
控制項目是否換行:
nowrap(預設,單行擠壓)。
wrap(多行,溢出換行)。
wrap-reverse(多行,反向排列)。
justify-content
主軸對齊方式:
flex-start(靠主軸起點)。
flex-end(靠主軸終點)。
center(居中)。
space-between(兩端對齊,間距均分)。
space-around(項目周圍均等間距)。
space-evenly(間距完全均等)。
align-items
交叉軸對齊(單行):
flex-start(靠交叉軸起點)。
flex-end(靠交叉軸終點)。
center(居中)。
baseline(按文字基線對齊)。
stretch(預設,填充交叉軸)。
align-content
交叉軸對齊(多行,需 flex-wrap: wrap):
類似 justify-content,但作用於多行間的間距。
gap
設置項目間的間距,如 gap: 10px;(行與列間距)或 gap: 10px 20px;(行間距 10px,列間距 20px)。
關鍵屬性(Flex 項目)
flex
速記屬性,結合 flex-grow、flex-shrink、flex-basis:
flex: 1; 表示均分空間。
flex: 0 0 100px; 表示固定寬度 100px。
flex-grow
控制項目如何擴展以填充剩餘空間(預設 0)。
flex-shrink
控制項目如何收縮(預設 1)。
flex-basis
定義項目的基礎尺寸(預設 auto)。
align-self
單獨項目在交叉軸上的對齊,覆蓋 align-items(如 align-self: center;)。
order
改變項目的排列順序(預設 0),如 order: 1; 將項目移到後面。
實用範例
居中一個 div:
css.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}
導航欄(均分項目):
css.nav {
display: flex;
justify-content: space-between;
gap: 20px;
}
響應式卡片列表:
css.cards {
display: flex;
flex-wrap: wrap;
gap: 15px;
}
.card {
flex: 1 1 200px; /* 至少 200px,均分剩餘空間 */
}
用例與優勢
適合一維佈局(如導航欄、表單、卡片列)。
自動處理項目的靈活縮放和對齊。
解決浮動佈局的問題(如清除浮動)。
CSS Grid(網格佈局)
CSS Grid 是二維佈局系統,適合複雜的網頁結構(如儀表板、頁面框架)。它允許你精確控制行和列,形成網格結構。
核心概念
Grid 容器與項目:
設置 display: grid; 或 display: inline-grid; 將元素轉為 Grid 容器,其直接子元素成為 Grid 項目。
網格線與單元格:
網格由行(row)和列(column)組成,交點形成單元格。
網格線(Grid Lines)用於定位項目。
顯式與隱式網格:
顯式:由 grid-template-columns/rows 定義。
隱式:由 grid-auto-columns/rows 自動生成。
關鍵屬性(容器)
display: grid;
啟用 Grid 佈局。
grid-template-columns / grid-template-rows
定義網格的列和行尺寸:
如 grid-template-columns: 100px 200px 1fr;(固定 100px、200px,剩餘空間均分)。
使用 repeat(3, 1fr) 表示 3 列等寬。
支持單位:px、%、fr(剩餘空間比例)、auto。
gap
設置網格間距,如 gap: 10px; 或 gap: 10px 20px;(行/列)。
grid-auto-columns / grid-auto-rows
定義隱式網格的尺寸,如 grid-auto-rows: 100px;。
justify-items / align-items
控制單元格內項目的對齊:
start、end、center、stretch(預設)。
justify-content / align-content
控制整個網格在容器中的對齊(類似 Flexbox)。
grid-template-areas
使用命名區域定義佈局:
css.container {
display: grid;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
}
.header { grid-area: header; }
關鍵屬性(Grid 項目)
grid-column / grid-row
指定項目跨網格線:
如 grid-column: 1 / 3;(從第 1 線到第 3 線,跨 2 列)。
速記:grid-column: 1 / span 2;(跨 2 列)。
grid-area
將項目分配到命名區域或指定線。
justify-self / align-self
單獨項目在單元格內的對齊,覆蓋 justify-items/align-items。
實用範例
簡單 3x2 網格:
css.container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: auto auto;
gap: 10px;
}
頁面佈局:
css.container {
display: grid;
grid-template-columns: 200px 1fr;
grid-template-areas:
"sidebar header"
"sidebar main"
"sidebar footer";
min-height: 100vh;
}
.sidebar { grid-area: sidebar; }
.header { grid-area: header; }
.main { grid-area: main; }
.footer { grid-area: footer; }
響應式網格:
css.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 15px;
}
用例與優勢
適合二維佈局(如網站主結構、儀表板)。
精確控制行和列,支援複雜重疊。
響應式設計更強大(如 auto-fit 和 minmax)。
Flexbox vs. Grid:何時使用?
Flexbox:
適用於一維佈局(如導航欄、卡片列表)。
擅長動態內容(項目大小不固定)。
簡單、靈活,適合快速對齊。
Grid:
適用於二維佈局(如頁面框架、複雜網格)。
適合固定結構或需要精確定位的場景。
更強大的控制,但語法較複雜。
結合使用:
外層用 Grid 定義頁面結構,內層用 Flexbox 排版小組件。
例如:Grid 佈局主頁,Flexbox 排版導航欄或卡片內容。
實踐建議與注意事項
練習範例:
用 Flexbox 實現導航欄(水平排列,響應式折疊)。
用 Grid 創建響應式圖片庫(自動調整列數)。
結合兩者:Grid 做頁面框架,Flexbox 處理內容區。
常見問題:
Flexbox 間距不均:檢查 justify-content 和 gap。
Grid 項目溢出:確保 grid-template-columns 使用 fr 或 minmax。
老舊瀏覽器:Flexbox 和 Grid 在現代瀏覽器(Chrome、Firefox、Safari)支援良好,但 IE11 需回退方案(如浮動或 display: table)。
工具輔助:
使用 DevTools 的 Flexbox/Grid 檢查器視覺化佈局。
參考線上工具如 CSS Grid Generator 或 Flexbox Froggy 練習。
最佳實踐:
使用 gap 替代 margin 控制間距。
結合媒體查詢實現響應式:
css@media (max-width: 768px) {
.container {
grid-template-columns: 1fr; /* 手機單列 */
}
}
避免過於複雜的選擇器,保持代碼簡潔。
範例專案建議
Flexbox:創建一個響應式導航欄,包含 logo、菜單和按鈕,桌面水平排列,手機垂直堆疊。
Grid:設計一個博客頁面,包含側邊欄、主要內容和頁腳,適配不同螢幕尺寸。
結合:用 Grid 做頁面框架,Flexbox 排版文章卡片。
如果需要具體的程式碼範例(如某個佈局的實現)或更深入的某屬性講解(如 minmax 或 grid-template-areas),請告訴我!