HTML & CSS
本篇為 [FE101] 前端基礎:HTML 與 CSS 這門課程的學習筆記。如有錯誤歡迎指正。
學習目標:
P1 你知道 CSS 是什麼
P1 你知道 inline、block 跟 inline-block 的區別
P1 你知道什麼是 box model
P1 你知道 position 的所有屬性及其差別
P2 你知道 :hover, :before, :after
P2 你知道 :nth-child 的各種用法
P2 你熟悉 CSS selector,可以輕鬆選到想選到的元素
Cascading Style Sheets 階層式樣式表
style=""
<html>
<head>
<meta charset="UTF-8">
<title>網頁前端</title>
</head>
<body>
<!-- 文字變紅色 -->
<div style="color: red;">
網頁前端課程
</div>
</body>
</html>
<style>
標籤:
<html>
<head>
<meta charset="UTF-8">
<title>網頁前端</title>
<style>
div {
color: blue;
}
</style>
</head>
<body>
<!-- 文字變藍色 -->
<div>
網頁前端課程
</div>
</body>
</html>
使用 <link>
元素,從外部引用 CSS 檔,這是一個空白的元素(不需要結束標記):
href
:指定 CSS 檔的路徑,通常放在 css 或 styles 資料夾rel
:表示 HTML 頁面與連結其連結檔案的關係,連到 CSS 檔其值應為 stylesheet將 style.css 引入 index.html 為例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>網頁前端</title>
<link rel="stylesheet" href="css/style.css" >
</head>
<body>
網頁前端課程
</body>
</html>
內部引入的兩種方法,因不易維護而較少使用。使用外部引入的優點如下:
利用 CSS 選取器,可將規則套用在 HTML 文件的特定元素上,寫法如下:
<!-- 選取器 -->
selector {
<!-- 宣告(分成屬性和值兩個部分) -->
attribute: value;
}
<!-- 所有背景均為藍色 -->
* {
background: blue
}
<!-- 將所有 <h3> 元素套用該樣式 -->
h3 {
color: red
}
<!-- 找出所有 class 屬性之值為 note 的元素 -->
.note {}
<!-- 找出所有 class 屬性之值為 note 的 <h3> 元素 -->
h3.note{}
<!-- 找出 id 為 name 的元素 -->
#name {}
>
區隔兩個元素,表示在有父子關係的元素才會套用。
<!-- 找出任何身為 <li> 元素之子的 <a> 元素 -->
li > a {
color: red;
}
<!-- 找出任何位在 <li> 元素內的 <a> 元素 -->
li a {
color: yellow;
}
以 hover(滑鼠滑入的樣式)為例:
<!-- 當滑鼠移至任何 a 連結上時,背景會變成黃色 -->
a:hover {
background: yellow
}
參考資料:CSS Selectors Reference - W3Schools
參考資料:CSS選取第幾個標籤元素:nth-child(n)、first-child、last-child
當選擇器作用在同一元素上時:
權重由高到低如下:
!important > inline style > id > class > tag > *
各類選擇器:
#
)
*
):選擇所有元素
參考資料:
盒模型又稱為區塊模型,意思是所有 HTML 元素均可被視為一個盒子。我們能透過 CSS 控制內距、外距、邊框屬性,來調整盒子的外觀及位置。
盒模型的組成由外而內分別為:
透過這個屬性,我們能控制盒模型長寬的計算方式。
以長寬同樣為 150px 的 box 為例:
我們可以使用 DevTool 看盒模型:
box-sizing: content-box
:為預設屬性。「內容」就等於長寬度。
加上 border 和 padding 會導致元素實際大小比設定值還大。
box-sizing: border-box
:「邊框到邊框之間的範圍」等於長寬度。
此時長寬設定會套用到 border、padding、content。
而 margin 在兩種盒模型都是額外加上去的,並不會影響盒子長寬。
參考資料:
display 是 CSS 中用於控制排版的屬性。每個 HTML 元素都有一個預設的 display 值,大部分的元素可分為 block(區塊元素)和 inline(行內元素)兩類:
display: block
display: inline
display: inline-block
參考資料:
參考資料:
margin: auto;
設定左右外邊距(margin-left 與 margin-right)為 auto 可達成水平居中。
參考資料:學習 CSS 版面配置
盒模型在瀏覽器中會有默認的外邊距。此時只要利用 CSS Reset 即可解決空隙問題。
* {
margin: 0;
padding: 0;
}
/* 設定基底字體大小 */
html {
font-size: 12px;
}
/* 取消預設空隙 */
html, body, h1, h2, h3, h4, p{
padding: 0;
margin: 0 ;
}
優點:統整、重置了各個瀏覽器的樣式設定。 缺點:必須全部重新做設定,比較沒有彈性。且在使用開發者工具時,會看到一大坨的繼承鏈(inheritance chain)。
最大的特色就是保留原本預設 HTML 標籤的樣式,僅針對不同瀏覽器與各版本間不相容的標籤進行些微調整。
參考資料: Day21:小事之CSS Reset 與CSS normalize
例如:.header、.content、.footer 不用寫死高度,以內容撐出高度,並用 padding 產生留白,往後若更動內容才不易跑版。
原理:「DIV 區塊的高度設定 = 文字的 line-height(行高)」
text-align: center
margin: 0 auto
不管容器有多大,只要將 img 的寬高設定成 100 %(這裡的100%是相對於父級寬高而言)就能自適應容器大小。
參考資料:css讓圖片自適應容器(div)大小- IT閱讀 - ITREAD01.COM
/* 修飾過長的文字,ellipsis:用點點點來表示被切斷的字串 */
text-overflow: ellipsis;
/* 不進行換行 */
white-space: nowrap
/* 投影方式 X軸偏移 Y軸偏移 模糊半徑 擴展半徑 顏色}*/
box-shadow:inset x-offset y-offset blur-radius spread-radius color
opacity: x
/* x 取值 0~1,該區塊元素均會調整透明度 */
background: rgba(red, green, blue, alpha)
/* alpha 代表透明度,取值 0~1 */
/* 預設不換行 */
flex-wrap: no-wrap;
/* 換行 */
flex-wrap: wrap;
word-break
:文字斷行效果word-break: break-all;
:遇到邊界就換行
white-space
:如何處理元素內的空白white-space: pre-line;
:自動合併多個空白,但保留換行符號