第二部分:視覺前端設計師 CSS

第二部分:視覺前端設計師 CSS
📅 發布時間: 2024-06-12 🏷️ 標籤: CSS, HTML, 前端設計

歡迎再次回到我們的網頁開發課程,今天我們將進一步學習網頁設計中的另一個重要部分 - CSS。CSS,即層疊樣式表 (Cascading Style Sheets),是用來控制網頁的外觀和排版的語言。透過 CSS,我們可以讓網頁變得更加美觀和易於使用。


今天的目標

  • 什麼是 CSS?
  • 如何在 HTML 中使用 CSS?
  • CSS 基本語法
  • 常見的 CSS 屬性與範例

基礎介紹


💻 什麼是 CSS?

🎯 學習目標:了解 CSS 控制 HTML 呈現方式的作用透過內聯 style 修改文字顏色使用 RGB 值精確指定顏色

步驟 1: 什麼是 CSS?

<h1>這是一個大標題</h1>
CSS 呈現範例

圖: CSS 用來設定文字顏色、字體、間距等,讓 HTML 內容更有樣式


步驟 2: 我們可以在元素中加入 style 的屬性

// 前面的程式碼保持不變
<h1 style="color: red;">這是一個紅色大標題</h1>  // [新增] style 屬性直接修改顏色為紅色,因為內聯樣式簡單快速,能立即看到效果而不需外部檔案
內聯 style 範例

圖: 直接在 HTML 標籤內指定樣式


步驟 3: 當然,你可以用更複雜的三原色比例色值調整顏色

// 前面的程式碼保持不變
<h1 style="color: rgb(255, 128, 0);">這是一個橘色大標題</h1>  // [修改] color 值改為 rgb(255, 128, 0),因為 RGB 允許精確混合紅(255)、綠(128)、藍(0)來產生橘色,提供更多顏色控制
RGB 顏色範例

圖: 使用 RGB 三原色比例自訂顏色


如何在 HTML 中使用 CSS?

有三種方式可以在 HTML 中使用 CSS:


💻 如何在 HTML 中使用 CSS 與基本語法

🎯 學習目標:掌握內聯、內部、外部三種 CSS 使用方式理解 CSS 選擇器與宣告塊語法使用 class 類別選擇器重複套用樣式

步驟 1: 內聯樣式 (Inline Styles)

<p style="color: blue;">這是一段藍色文字。</p>
內聯樣式範例

圖: 直接在標籤中使用 style 屬性


步驟 2: 內部樣式 (Internal Styles)

<head>
    <style>
        p { color: blue; }  // [新增] 在 <head> 使用 <style> 定義全域 p 元素顏色為藍色,因為內部樣式適用單一 HTML 檔案,方便管理
    </style>
</head>

<body>
    <p>這是一段藍色文字。</p>
</body>
內部樣式範例

圖: 在 HTML head 內定義樣式


步驟 3: 外部樣式 (External Styles)

// styles.css 檔案
p {
    color: blue;  // [新增] 外部 CSS 檔案獨立定義,讓樣式可重複使用於多個 HTML
}

// index.html 主檔案
<head>
    <link rel="stylesheet" type="text/css" href="styles.css">  // [新增] 使用 <link> 引用外部 CSS,因為這是最佳實踐,便於維護大型專案
</head>

<body>
    <p>這是一段藍色文字。</p>
</body>
外部樣式範例

圖: 分離 CSS 檔案並引用


步驟 4: CSS 的語法很簡單

p {
    color: blue;
}
CSS 基本語法

圖: 選擇器 (p) + 宣告塊 (color: blue),目標所有 p 元素變藍色


步驟 5: 多屬性宣告

// 前面的程式碼保持不變
p {
    color: blue;
    font-size: 24px;  // [新增] 同時設定字體大小,因為多屬性可累加控制元素外觀
}
多屬性範例

圖: 藍色文字加大至 24px


步驟 6: 使用 class 類別

<!DOCTYPE html>
<html lang="en">
  <head>
    <style>
      .blue-text {
        color: blue;
        font-size: 24px;
      }
    </style>
  </head>
  <body>
    <p>這是一段一般的文字</p>
    <p class="blue-text">這是一段藍色的文字</p>  <!-- [新增] class="blue-text" 選擇特定元素,因為 class 可重複使用,提高樣式效率 -->
  </body>
</html>
class 類別範例

圖: 只套用 class 的 p 變藍色加大


步驟 7: CSS class 選擇器語法

.blue-text {
    color: blue;
    font-size: 24px;
}

類別選擇器以 . 開頭,自訂名稱 (英文與 - )


步驟 8: HTML 中使用 class

<p class="blue-text">這是一段藍色的文字</p>  <!-- 注意無 `.`,直接指定 class 名稱 -->
HTML class 使用

圖: HTML 標籤內的 class 屬性


常見的 CSS 屬性與範例


💻 常見 CSS 屬性應用

🎯 學習目標:應用 color, font-size, text-align 等基本屬性掌握背景、邊框、padding、margin 佈局控制設定 height/width 調整元素尺寸

步驟 1: color

p {
    color: red;
}
文字顏色

圖: 設定文字顏色為紅色


步驟 2: font-size

// 前面的程式碼保持不變
p {
    color: red;
    font-size: 32px;  // [新增] 加大字體,因為這能改善可讀性與視覺強調
}
字體大小

圖: 紅色文字加大至 32px


步驟 3: text-align

// 前面的程式碼保持不變
p {
    color: red;
    font-size: 32px;
    text-align: center;  // [新增] 置中對齊,因為這是常見的排版需求
}
置中對齊

圖: 文字置中


步驟 4: text-align: right

// 前面的程式碼保持不變
p {
    color: red;
    font-size: 32px;
    text-align: right;  // [修改] 改為右對齊,測試不同對齊效果
}
右對齊

圖: 文字置右


步驟 5: background-color

// 前面的程式碼保持不變
p {
    color: red;
    font-size: 32px;
    text-align: right;
    background-color: lightgray;  // [新增] 背景色,因為這能區分元素區塊
}
背景顏色

圖: 淺灰背景


步驟 6: background-image

// 前面的程式碼保持不變
p {
    color: red;
    font-size: 32px;
    text-align: right;
    background-image: url('example.jpg');  // [新增] 背景圖片,提供視覺豐富度
}
背景圖片

圖: 圖片背景


步驟 7: border

// 前面的程式碼保持不變
p {
    color: red;
    font-size: 32px;
    text-align: right;
    background-image: url('example.jpg');
    border: 10px solid black;  // [新增] 邊框,因為這定義元素邊界
}
邊框

圖: 粗黑邊框


步驟 8: border-radius

// 前面的程式碼保持不變
p {
    color: red;
    font-size: 32px;
    text-align: right;
    background-image: url('example.jpg');
    border: 1px solid black;  // [修改] 細邊框
    border-radius: 50%;  // [新增] 圓角,因為這創造圓形效果,提升美觀
}
圓角邊框

圖: 圓形邊框


步驟 9: padding

// 前面的程式碼保持不變
p {
    color: red;
    font-size: 32px;
    text-align: right;
    background-image: url('example.jpg');
    border: 1px solid black;
    border-radius: 50%;
    padding: 128px;  // [新增] 內距,避免文字貼邊,因為 padding 控制內容與邊框距離
}
內距 padding

圖: 增加內部空間


步驟 10: 完整 HTML 範例(兩個元素)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      p {
        color: red;
        font-size: 32px;
        text-align: right;
        background-image: url("example.jpg");
        border: 1px solid black;
        border-radius: 50%;
        padding: 128px;
      }
    </style>
  </head>
  <body>
    <p>這是一個大貓貓</p>
    <p>這是一個大貓貓</p>
  </body>
</html>
多元素範例

圖: 兩個相同樣式的 p 元素


步驟 11: margin

// 前面的程式碼保持不變,在 style 的 p 中
p {
    color: red;
    font-size: 32px;
    text-align: right;
    background-image: url("example.jpg");
    border: 1px solid black;
    border-radius: 50%;
    padding: 128px;
    margin: 128px;  // [新增] 外距,調整元素間距離,因為 margin 控制元素與其他元素間隔
}
外距 margin

圖: 元素間增加間距


步驟 12: height

// 前面的程式碼保持不變,在 style 的 p 中
p {
  height: 200px;  // [新增] 固定高度,因為這讓元素有明確尺寸,便於佈局控制
  background-color: lightgray; 
}
設定高度

圖: p 元素高度固定為 200px


步驟 13: width

// 前面的程式碼保持不變,在 style 的 p 中
p {
  height: 200px;
  width: 200px;  // [新增] 固定寬度,因為結合 height 可產生方形元素
}
設定寬度

圖: p 元素變成 200x200 正方形


常用的排版方法

他可以讓我們簡單的規定各個元素的位置


💻 Flexbox 彈性佈局

🎯 學習目標:使用 display: block/inline/flex 控制元素排列透過 justify-content 與 align-items 調整 x/y 軸位置flex-direction 切換橫/直向排列及反轉

步驟 1: 預設 block 排版

<p>這是一個大貓貓</p>
<p style="display: block">大家默認都是 block</p>
<div>這是一個大貓貓</div>
<p>這是一個大貓貓</p>
block 排版

圖: 每個元素獨占一行


步驟 2: display: inline

// 前面的程式碼保持不變
<div>
    <div style="display: inline">這是一個大貓貓</div>  // [新增] display: inline,讓子 div 同列排列,因為 inline 不換行
    <div style="display: inline">這是一個大貓貓</div>
    <div style="display: inline">這是一個大貓貓</div>
</div>
inline 排版

圖: div 元素同列顯示


步驟 3: 更複雜排列需求

// 前面的程式碼保持不變,使用 inline 的範例
inline 限制

圖: inline 無法輕易置右或平均分散


步驟 4: display: flex(預設橫向)

// 前面的程式碼保持不變
<div style="display: flex;">  // [新增] display: flex,讓子元素彈性排列在同一行,因為 flex 專為現代佈局設計
    <div>這是一個大貓貓</div>
    <div>這是一個大貓貓</div>
    <div>這是一個大貓貓</div>
</div>
flex 預設

圖: 子元素自動橫向排列


步驟 5: flex 容器仍占一行

// 前面的程式碼保持不變
<div>這是一個大貓貓</div>  <!-- flex 容器本身仍是 block,占一行 -->
flex 容器行為

圖: flex 只影響子元素


步驟 6: justify-content: end

// 前面的程式碼保持不變
<div style="display: flex; justify-content: end;">  // [新增] justify-content: end,將子元素推到右端,因為這控制主軸 (x 軸) 對齊
    <div>這是一個大貓貓</div>
    <div>這是一個大貓貓</div>
    <div>這是一個大貓貓</div>
</div>
右對齊

圖: 子元素置右


步驟 7: justify-content: start

// 前面的程式碼保持不變
<div style="display: flex; justify-content: start;">  // [修改] start 推到左端 (預設行為)
左對齊

圖: 子元素置左


步驟 8: justify-content: space-between

// 前面的程式碼保持不變
<div style="display: flex; justify-content: space-between;">  // [新增] space-between,平均分散無邊距空間
間距分散

圖: 子元素平均分布


步驟 9: justify-content: space-evenly

// 前面的程式碼保持不變
<div style="display: flex; justify-content: space-evenly;">  // [修改] space-evenly,包括邊緣空間
均勻間距

圖: 包含邊緣的均勻間距


步驟 10: 加入顏色與高度觀察

<div
    style="
    display: flex;
    justify-content: space-evenly;
    background: blue;
    height: 200px;  // [新增] 高度固定,因為這提供觀察空間
    "
>
    <div style="background: red; height: 30px">這是一個大貓貓</div>
    <div style="background: red; height: 90px">這是一個大貓貓</div>
    <div style="background: red; height: 60px">這是一個大貓貓</div>
</div>
顏色高度標記

圖: 不同高度子元素


步驟 11: align-items: end

// 前面的程式碼保持不變,在 style 中
align-items: end;  // [新增] align-items: end,所有子元素底部對齊,因為這控制交叉軸 (y 軸)
底部對齊

圖: 子元素底部一致


步驟 12: align-items: center

// 前面的程式碼保持不變,在 style 中
align-items: center;  // [修改] 垂直置中
垂直置中

圖: 子元素垂直對齊中間


步驟 13: align-items: start

// 前面的程式碼保持不變,在 style 中
align-items: start;  // [修改] 頂部對齊
頂部對齊

圖: 子元素頂部一致


步驟 14: flex-direction: column

// 前面的程式碼保持不變,在 style 中
flex-direction: column;  // [新增] 切換為垂直排列,因為這讓 flex 適用欄位佈局
<div style="background: red; height: 30px">這是一個大貓貓</div>  <!-- 子元素顏色區分 -->
<div style="background: green; height: 90px">這是一個大貓貓</div>
<div style="background: orange; height: 60px">這是一個大貓貓</div>
垂直排列

圖: y 軸排列


步驟 15: flex-direction: column-reverse

// 前面的程式碼保持不變,在 style 中
flex-direction: column-reverse;  // [修改] 垂直反轉,紅色移到底
垂直反轉

圖: 順序反轉


步驟 16: flex-direction: row

// 前面的程式碼保持不變,在 style 中
flex-direction: row;  // [修改] 橫向 (預設)
橫向排列

圖: x 軸排列


步驟 17: flex-direction: row-reverse

// 前面的程式碼保持不變,在 style 中
flex-direction: row-reverse;  // [修改] 橫向反轉
橫向反轉

圖: 順序反轉


步驟 18: 巢狀 flex 複雜佈局

<div
    style="
    display: flex;
    justify-content: space-between;
    background: blue;
    height: 200px;
    "
>
    <div  // [新增] 左側 flex 子容器,負責 x: start + y: column
    style="
        display: flex;
        justify-content: start;
        flex-direction: column;
        height: 100%;
    "
    >
        <div style="background: red; height: 30px">這是一個大貓貓</div>
    </div>
    <div  // [新增] 中間 flex,x: center + y: column
    style="
        display: flex;
        justify-content: center;
        flex-direction: column;
        height: 100%;
    "
    >
        <div style="background: green; height: 90px">這是一個大貓貓</div>
    </div>

    <div  // [新增] 右側 flex,x: end + y: column
    style="
        display: flex;
        justify-content: end;
        flex-direction: column;
        height: 100%;
    "
    >
        <div style="background: orange; height: 60px">這是一個大貓貓</div>
    </div>
</div>
巢狀 flex

圖: 多層 flex 組合精確定位


display: grid(網格)

也是 css 數一數二重要的屬性

grid 控制的也是元素小孩們的排列

他可以將容器切成如同 excel 般的網格

你可以調整每一行的高度 每一列的高度

元素會根據你網格的設計來自動排列

詳細內容可以參見文章

https://medium.com/enjoy-life-enjoy-coding/css-所以我說那個版本能不能好切一點-grid-基本用法-cd763091cf70