CSS 是用於設計 HTML 文件樣式的語言。它描述了 HTML 元素應如何在螢幕上顯示。其負責 「樣式呈現」 的部分:字體、顏色、排版、動態效果等。
直接在元素的 style
屬性中編寫:
<h1 style="color: blue; font-size: 24px;">Document</h1>
color: blue;
意思為字體顏色變更為藍色。font-size: 24px;
意思為將字體調整大小為24px。在 <head>
中使用 <style>
:
<!DOCTYPE html>
<html lang="en">
<head>
<style>
body {
font-family: "Microsoft JhengHei", sans-serif;
line-height: 1.5;
}
h1 {
color: blue;
}
</style>
</head>
<body>
<h1>CSS course</h1>
<p>Write code to learn.</p>
</body>
</html>
font-family
:變更字形,可列出多個備用字型,用逗號分隔,最後常寫 sans-serif
或 serif
。line-height
:行高。行高決定行與行之間的距離,通常用於提高文字的可讀性。1.5
表示 1.5 倍字體高度。在 <head>
中使用:
<link rel="stylesheet" href="styles.css">
一般使用外部連結的方式,HTML負責網頁的架構,而 CSS 負責網頁的樣式。
好,現在考慮以下網頁:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>Browser</title>
</head>
<body>
<h1>CSS course</h1>
<p>Write code to learn.</p>
</body>
</html>
呈現效果:
此時我們在 style.css
中添加一些代碼,使 <h1> 標題的背景顏色改變
h1 {
background-color: yellow;
}
<h1>
進行樣式設定。呈現效果:
好,此時我想改變背景的顏色,可以透過在 CSS 中對 <body>套用設定,以下示範:
body {
background-color: gray;
}
呈現效果:
另外,我也想讓 <p>段落的背景顏色也變更為黃色,我們可以這樣設定:
h1, p {
background-color: yellow;
}
呈現效果:
此時,我們想讓字體的顏色變為藍色,可以這樣設定:
此時,若你繼續新增<p>標籤來增加段落文字,段落文字都會繼承設定,文字顏色無一例外都會變成藍色,背景則為黃色:
<body>
<h1>CSS course</h1>
<p>Write code to learn.</p>
<p>I like this course</p>
</body>
呈現效果:
若現在我不想要字體全為藍色,只考慮對<h1>標題文字段落設定為藍色,我們將程式碼改為:
h1, p {
background-color: yellow;
}
body {
background-color: gray;
color: blue;
}
/* 這是註解 */
/* 默認字體顏色為黑色,而這邊改變<p>顏色為藍色 */
p {
color: black;
}
呈現效果:
好,目前我們設定顏色的方式都是直接通過輸入顏色的單字來設定,其實我們可以使用其他種方法來設定(不限於字體顏色):
p {
color: #000000; /* 將原先的 black 改成現在這種表示方式 */
}
#ffffff
為白色。#ff0000
為紅色。#00ff00
為綠色。#0000ff
為藍色。#ff2200
,其等校於#f20
。p {
color: rgb(0,0,0); /* 將原先的 #000000 改成現在這種表示方式 */
}
rgb(255, 0, 0)
為純紅色p {
color: rgba(0,0,0,0.5); /* 將原先的 rgb(0,0,0) 改成現在這種表示方式 */
}
呈現效果:
p {
color: hsl(0, 100%, 50%); /* 將原先的 rgba(0,0,0,0.5) 改成現在這種表示方式 */
}
呈現效果:
開始前請將style.css
的程式碼全數刪除。
現在我們使用font-size
屬性更改字體的大小。
p {
font-size: 24px;
}
呈現效果:
好,我們接著使用font-weight
控制字體的粗細程度:
p {
font-size: 24px;
font-weight: 600;
}
font-weight: bold;
同樣也能達成加粗的效果。呈現效果:
好,再進一步,使用font-style
屬性使文字以斜體顯示。
p {
font-size: 24px;
font-weight: 600;
font-style: italic;
}
好,再來還想改變字體的形式,使用font-family
:
p {
font-size: 24px;
font-weight: 600;
font-style: italic;
font-family: "DM Serif Text";
}
好,你會發現沒有任何改變,這是因為您要顯示的字體必須已安裝在您的電腦上才能正常運作。由於 CSS 是在使用者的瀏覽器中呈現的,因此您不能假設使用者已安裝該字體。
所以要透過使用外部字體服務來解決。你可以在底下找到你喜歡的字形並嵌入。
假設我要使用一種 Roboto 字形,我們需要在網頁的 <head>
中加入 Google Fonts 提供的 <link>
標籤。以本例子來說:
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Text:ital@0;1&display=swap" rel="stylesheet">
p {
font-size: 24px;
font-weight: 600;
font-style: italic;
font-family: "DM Serif Text", serif;
}
如此就可以變換字形了。
開始前請將style.css
的程式碼全數刪除。
從文字裝飾
開始,用於為文字添加劃線、刪除線等效果。
範例:
p {
text-decoration: line-through;
}
none
:無裝飾(預設值)。underline
:添加下劃線。overline
:添加上劃線。line-through
:添加刪除線(橫穿文字)。呈現效果:
而若想改變裝飾線的顏色,我們額外添加以下程式碼:
p {
text-decoration: line-through;
text-decoration-color: red;
}
呈現效果:
若想要進一步設置裝飾線的樣式,請添加以下程式碼:
p {
text-decoration: line-through;
text-decoration-color: red;
text-decoration-style: wavy;
}
solid
:實線(預設)。double
:雙線。dotted
:點線。dashed
:虛線。wavy
:波浪線。呈現效果:
好,我們接著講文字對齊
,使用text-align
屬性設置文字的水平對齊方式。
範例:
h1, p {
text-align: center;
}
left
:左對齊(預設值)。right
:右對齊。center
:置中對齊。justify
:兩端對齊(文字會調整間距,使每行的左右對齊),非常美觀。呈現效果:
好,接著講文字轉換,使用text-transform
改變文字的大小寫格式。
範例:
h1, p {
text-transform: capitalize;
}
none
:保持原文字格式(預設值)。uppercase
:將文字轉換為全大寫。lowercase
:將文字轉換為全小寫。capitalize
:將每個單詞的首字母大寫。呈現效果:
好,接著談間距問題:
行高決定行與行之間的距離,使用line-height
提高文字的可讀性。先前提過了。我們現在談談字母和單字間的間距。
字母間距用於調整每個字母之間的距離。使用letter-spacing
。
範例:
h1 {
letter-spacing: 2px;
}
呈現效果:
而字間距用於調整單詞之間的距離。使用word-spacing
。
範例:
p {
word-spacing: -2px;
}
呈現效果:
先前,我們使用background-color
設置了背景的顏色,但若是我想要將背景設置為圖像呢。需要使用background-image
在此之前,我想先介紹兩個 HTML 標籤,以方便我們之後的測試:
<div>
:是區塊元素 (block-level element),沒有特定的語意,通常用來當作容器或排版的區塊。<div>
包起來,再搭配 CSS 做排版。<span>
:是行內元素 (inline element),也沒有特定語意,常用於小範圍文字的樣式調整、標註或排版。<strong>
或 <em>
等語義標籤,就可以用 <span>
。例如價格前方要加上符號、或是文字上色,可以在 <p>
中用 <span>
包住價格文字。<div>
或 <span>
來加以包裹與控制樣式。現在考慮以下 HTML 程式碼:
<body>
<div>
<h1>CSS course</h1>
<p>Write code to learn.</p>
<p>I like this course</p>
</div>
</body>
我們要將容器背景改為以下圖片
CSS 內容如下:
div {
width: 80vw;
height: 80vh;
background-image: url(images/image.png);
}
80vw
是指視窗寬度的80%,用處是當視窗因為不同裝置呈現不同大小時,也能保持相對的比例。height
的設置概念與width
相同。呈現效果:
現在,背景為圖像顯示,但它是重複的,因為當背景圖像小於容器的寬度或高度時,就會發生這種情況。接下來讓我們修復它。
我們使用background-repeat: no-repeat
來改善情況。
div {
width: 80vw;
height: 80vh;
background-image: url(images/image.png);
background-repeat: no-repeat
}
呈現效果:
現在,背景不再重複。不過,現在圖片是小於容器的
可以透過添加背景顏色確認:
div {
width: 80vw;
height: 80vh;
background-image: url(images/image.png);
background-repeat: no-repeat;
background-color: cyan;
}
呈現效果:
在這種情況下,您需要拉伸背景以確保其覆蓋整個螢幕。使用background-size
屬性來解決此問題。
div {
width: 80vw;
height: 80vh;
background-image: url(images/image.png);
background-size: cover;
}
background-repeat: no-repeat;
cover
的特性是讓背景圖整個「不變形」、「寬高等比例」、「在必要時局部裁切」的鋪滿整個容器空間。呈現效果:
接下來我們討論背景位置background-position
。
以下是幾個呈現例子:
div {
width: 80vw;
height: 80vh;
background-image: url(images/image.png);
background-repeat: no-repeat;
background-position: right center;
background-color: cyan;
}
background-position: left bottom;
圖像位於左下**。**background-position: center;
圖像位於中心。呈現效果:
基本設定的最後一節,我想談談區塊與行內元素
在 HTML 那一章節中,我們已經有過基本的認知了,現在,我們再更認識他們一點。
考慮以下 HTML 程示碼:
<p>Write code to learn.</p>
<span>I like this course</span>
現在我們在 CSS 中添加以下程式碼:
p, span {
background: black;
color: white;
width: 300px;
height: 100px;
}
呈現效果:
我們可以藉由使用display
屬性來變更原素為block
或inline-block
。
p {background: black;
color: white;
width: 300px;
height: 100px;
}
span {
display: block; /* 改成區塊元素 */
background: black;
color: white;
width: 300px;
height: 100px;
}
呈現效果:
在瀏覽器中,每個元素都被看作一個 矩形盒子,包含:
請參考下圖:
現在考慮以下 HTML 程式碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" href="style.css" />
<title>Browser</title>
</head>
<!-- 主要內容 -->
<body>
<header class="header">
<h1>CSS demo gallery</h1>
<p>est. 1986</p>
</header>
</body>
</html>
<header>
標籤內加上class的屬性,方便我們針對特定的 class 做樣式設定,而不是一次影響全部的相同標籤。(試想你有很多<div>
標籤,若不設定class,就會一次影響全部的<div>
標籤。)好,不知道你有沒有察覺到,明明還沒開始撰寫 CSS ,元素間卻保有間距,你可以清楚看出<h1>區塊間和<p>區塊間有空隙,這是因為瀏覽器有內建一個 CSS 樣式,保持最低限度的可讀性。
可以透過以下方式將所有元素的內邊距和外邊距設為0:
* {
padding: 0;
margin: 0;
}
好,如此避免了預設值帶來的一些設計上的干擾。那我們現在著手進行一些樣式設定。
若我們要對類別header
做 CSS 設定,記得在class名稱前加一個點。
* {
padding: 0;
margin: 0;
}
.header {
background-color: #0a0a23;
color: #ffffff;
}
呈現效果:
<header>
標籤的分布範圍。這時,我想要對其做進一步的設定,以下示範:
* {
padding: 0;
margin: 0;
}
.header {
background-color: #0a0a23;
color: #ffffff;
text-align: center;
text-transform: uppercase;
padding: 32px;
}
/* 選擇 <header> 標籤下的 <p> 標籤進行設定,將字體改為斜體*/
.header p {
font-style: italic;
}
呈現效果:
現在我想要設定border
不過,我只想要讓底邊顯示出border
的效果,我們可以使用border-bottom
屬性來設定,以下示範:
.header {
text-align: center;
text-transform: uppercase;
padding: 32px;
background-color: #0a0a23;
color: #ffffff;
border-bottom: 4px solid #fdb347;
}
/* 選擇 <header> 標籤下的 <p> 標籤進行設定*/
.header p {
font-style: italic;
}
border-bottom
的參數依序為間距大小,樣式、顏色。solid
代表一般的直線。dashed
的話會變成虛線。dotted
的話會變成圓點。呈現效果:
transform: rotate
:旋轉元素。box-shadow
:添加陰影。border-radius
:圓角效果。filter: blur();
模糊效果。考慮以下程式碼:
<div></div>
div {
width: 200px;
height: 200px;
border: 10px solid green;
background-color: #ffa500;
}
呈現效果:
此時我們使用border-radius
為其添加圓角效果:
div {
width: 200px;
height: 200px;
border: 10px solid green;
background-color: #ffa500;
border-radius: 20px;
}
border-radius: 50%;
,會變成一個圓形。呈現效果:
接著,我要為其添加陰影的效果,使用box-shadow
div {
height: 200px;
width: 200px;
border: 10px solid green;
background-color: #ffa500;
border-radius: 20px;
box-shadow: 0 0 5px 5px #b20403; /* 可以替換成 box-shadow: inset 0 0 20px 5px gray; 看看 */
}
box-shadow
參數依序是: 內外側(預設為外側)| x 軸-位移 | y 軸-位移 | 模糊值 blur-radius | 擴散值 spread-radius | 顏色六個參數呈現效果:
五個參數呈現效果:
現在我希望整體區域能再有一些模糊的效果,使用filter: blur()
:
div {
height: 200px;
width: 200px;
border: 10px solid green;
background-color: #ffa500;
border-radius: 20px;
box-shadow: 0 0 5px 5px #b20403;
filter: blur(2px);
}
呈現效果:
最後我們再添加一個效果,讓容器有傾斜的角度,使用transform: rotate
:
div {
height: 200px;
width: 200px;
border: 10px solid green;
background-color: #ffa500;
border-radius: 20px;
box-shadow: 0 0 5px 5px #b20403;
filter: blur(2px);
margin: 20px; /* 添加外邊距,以利圖形全貌 */
transform: rotate(5deg); /* 你也可以輸入負號改變旋轉方向 */
}
呈現效果:
預設情況下,內邊距和邊框不包含在元素的寬度和高度中。這表示如果您設定寬度與高度為300px並新增內邊距與邊框,實際大小將大於300px的正方形。
現在考慮以下程式碼:
<div class="gallery">
<img src="images/image.png">
</div>
.gallery {
border: 5px solid red;
width: 50%;
height: auto; /* 相應地增加和縮小盒子的尺寸以適應裡面的內容。 */
}
img {
width: 100%;
border: 5px solid blue;
padding: 5px;
}
呈現效果:
如你所見,藍色邊框延伸到了紅色邊框外,這是由於瀏覽器計算容器元素大小的方式所造成的。也就和我們上面提到的一樣,內邊距和邊框不包含在元素的寬度和高度中。
box-sizing
屬性用於設定此行為。預設情況下,是使用content-box
。此時我們嘗試使用全域 * 選擇器明確將 box-sizing 設定為 border-box,可確保內邊距和邊框包含在元素的寬度和高度中。
* {
box-sizing: border-box;
}
.gallery {
border: 5px solid red;
width: 50%;
height: auto; /* 相應地增加和縮小盒子的尺寸以適應裡面的內容。 */
}
img {
width: 100%;
border: 5px solid blue;
padding: 5px;
}
呈現效果:
好,最後我們進一步探討最後一個屬性overflow
考慮以下程式碼:
<div>
<p>This is paragraph 1.</p>
<p>This is paragraph 2.</p>
<p>This is paragraph 3.</p>
<p>This is paragraph 4.</p>
<p>This is paragraph 5.</p>
<p>This is paragraph 6.</p>
</div>
div {
height: 140px;
background-color: #0cd1ba;
border: 2px solid black;
}
呈現效果:
我們使用overflow
把溢出的內容隱藏且讓其無法被存取。
div {
height: 140px;
background-color: #0cd1ba;
border: 2px solid black;
overflow: hidden;
}
overflow: auto;
,這會隱藏溢出的內容,但可以透過滾動網頁來存取內容。呈現效果: