搜尋

內邊距 padding

網頁元素容器由內而外的第一層就是「內邊距」,可以使用 padding 控制樣式,這篇教學會介紹網頁元素的 padding,除了基本的單數值設定、多數值設定和長度單位,還會介紹可置換元素和不可置換元素使用 padding 時的差異。

請先閱讀:容器盒子模型 ( box Model )

快速導覽:

CSS 教學 - 內邊距 padding

padding 撰寫語法

padding 是元素容器盒子模型裡的「內邊距」,也就是元素由內而外,緊連著內容的第一層,網頁中所有元素的內邊距 padding 預設都是 0,因此如果不做設定,內容都會貼近邊緣,如果要調整內邊距,需要使用下列幾種撰寫語法修改數值,數值的位置對應不同方向的內邊距 ( padding 沒有繼承特性 ):

語法 說明
padding: 上 右 下 左; 空白分隔「四個」數值,分別設定四個方向的內邊距。
padding: 上 (左右) 下; 空白分隔「三個」數值,分別設定上、下和左右內邊距,左右的數值相同
padding: (上下) (左右); 空白分隔「兩個」數值,分別設定上下和左右內邊距,上下的數值相同左右的數值相同
padding: (上下左右); 「一個」數值,上下左右內邊距數值相同

下方的範例使用五個 div 呈現不同的 padding 的寫法,同時在 div 裡會放入一個 em,並將 em 修改顯示類型為 block 凸顯實際內容範圍。

線上展示:https://codepen.io/oxxo/pen/ZENZoBP

<!-- HTML 程式碼 -->
<div><em>預設值</em></div>
<div class="a"><em>padding: 20px 15px 10px 5px;</em></div>
<div class="b"><em>padding: 10px 20px 5px;</em></div>
<div class="c"><em>padding: 10px 20px;</em></div>
<div class="d"><em>padding: 10px;</em></div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 240px;
    height: 50px;
    border: 1px solid #000;
    background: orange;
    margin: 10px;
  }
  em {
    display: block;
    width: 100%;
    height: 100%;
    background : yellow;
  }
  .a{padding: 20px 15px 10px 5px;}
  .b{padding: 10px 20px 5px;}
  .c{padding: 10px 20px;}
  .d{padding: 10px;}
</style>

CSS 教學 - 內邊距 padding - padding 撰寫語法

padding-* 單一內邊距

除了一次設定四個方向的 padding 數值,也可以透過單一內邊距的樣式屬性,單獨設定上下左右數值。

單一內邊距樣式 說明
padding-top 上方內邊距
padding-right 右側內邊距
padding-bottom 下方內邊距
padding-left 左側內邊距

單一內邊距的權重與 padding 相同,有時會運用「撰寫順序」來覆寫特定方向的內邊距,下方的範例先將 div 的 padding 統一設定為 10px,再運用單一內邊距調整特定方向的寬度。

線上展示:https://codepen.io/oxxo/pen/LYovmBb

<!-- HTML 程式碼 -->
<div class="a"><em>padding-top: 40px;</em></div>
<div class="b"><em>padding-right: 40px;</em></div>
<div class="c"><em>padding-bottom: 40px;</em></div>
<div class="d"><em>padding-left: 40px;</em></div>

<!-- CSS 程式碼 -->
<style>
  div {
    width: 240px;
    height: 30px;
    border: 1px solid #000;
    background: orange;
    margin: 10px;
    padding: 10px;
  }
  em {
    display: block;
    width: 100%;
    height: 100%;
    background : yellow;
  }
  .a {padding-top: 40px;}
  .b {padding-right: 40px;}
  .c {padding-bottom: 40px;}
  .d {padding-left: 40px;}
</style>

CSS 教學 - 內邊距 padding - padding-* 單一內邊距

padding 使用的長度單位

padding 使用的數值需要具有「長度單位」,支援相對長度和絕對長度,數值必須為「非負值」,長度單位如下表所示:

延伸閱讀:長度與角度單位

長度單位 性質 說明
auto 或不設定 - padding 而言是 0。
px 絕對長度 像素。
% 相對長度 父元素內容寬度的百分比。
em 相對長度 元素本身字體大小的幾倍。
rem 相對長度 根元素字體大小的幾倍。
pt、cm、mm、in 絕對長度 印刷單位。

下方的範例使用不同長度單位設定元素的內邊距,注意 padding 就算是設定上下的數值,使用百分比為單位時,仍然是採用「父元素內容寬度」進行計算

線上展示:https://codepen.io/oxxo/pen/yLWrjpw

<!-- HTML 程式碼 -->
<main>
  <div class="a"><em>padding: 10px;</em></div>
  <div class="b"><em>padding: 2em;</em></div>
  <div class="c"><em>padding: 1.5rem;</em></div>
  <div class="d"><em>padding: 10%;</em></div>
</main>

<!-- CSS 程式碼 -->
<style>
  :root {font-size: 20px;}  /* 根元素字型大小 20px */
  main {width: 400px;}      /* 父元素寬度 400px */
  div {
    width: 240px;
    height: 30px;
    border: 1px solid #000;
    background: orange;
    margin: 10px;
    font-size: 10px;         /* 元素本身字型大小 10px */ 
  }
  em {
    display: block;
    width: 100%;
    height: 100%;
    background : yellow;
  }
  .a {padding: 10px;}       /* 絕對長度       10px */
  .b { padding: 2em;}       /* 10px x 2    = 20px */
  .c {padding: 1.5rem;}     /* 20px x 1.5  = 30px */
  .d {padding: 10%;}        /* 400px x 10% = 40px */
</style>

CSS 教學 - 內邊距 padding - padding 使用的長度單位

除了使用單一種長度單位,padding 也支援多種長度單位混合使用,或使用 calc() 等 CSS 函式去計算長度,下方範例同時使用了四種不同長度單位呈現方式。

線上展示:https://codepen.io/oxxo/pen/dyELBoQ

<!-- HTML 程式碼 -->
<main>
  <div><em></em></div>
</main>

<!-- CSS 程式碼 -->
<style>
  main {width: 200px;}
  div {
    border: 1px solid #000;
    background: orange;
    width: 150px;
    height: 100px;
    font-size: 20px;
    padding: 20px 1em 10% calc(10px * 2); /* 使用四種長度呈現方式 */
  }
  em {
    display: block;
    width: 100%;
    height: 100%;
    background: yellow;
  }
</style>

CSS 教學 - 內邊距 padding - padding 同時使用多種長度單位

不可置換行內容器的 padding

雖然不可置換行內容器無法調整寬高 ( 文字樣式的顯示類型大多都是 inline ),但卻可以透過 padding 增加內邊距,進而改變寬度,不過由於行內容器的高度由字型大小和行高所管控,就算設定了 padding 數值,最多也只是覆蓋到其他行內元素,並不會影響整體高度

不可置換行內容器表示不會透過 src 等屬性改變元素內容。

下方的範例設定了 strong 和 em 這兩個行內容器元素的 padding 數值,因為寬度改變而影響了左右的間距,但上下的 padding 雖然有發生作用,但卻不影響容器的行高表現,也不會影響整體的高度。

線上展示:https://codepen.io/oxxo/pen/XWwQYrX

<!-- HTML 程式碼 -->
<div>
  <span><strong>STEAM 教育學習網</strong>透過免費且高品質的<em>教學與範例</em>讓所有人都能輕鬆跨入 STEAM 的學習領域。</span>
</div>
<span>hello world!!!!</span>

<!-- CSS 程式碼 -->
<style>
  div {border: 1px solid #000;}
  strong {
    padding: 10px;
    background: #ff550055;
  }
  em {
    padding: 100px 20px;
    background: #0000ff55;
  }
</style>

CSS 教學 - 內邊距 padding - 不可置換行內容器的 padding

可置換行內容器的 padding

網頁中的圖片元素 img 或 svg 都屬於「可置換」行內容器 ( 顯示類型大多都是 inline-block ),這些元素原本就能設定寬高,而不是根據字型或行高決定容器大小,因此如果設定了 padding 數值,就會影響整體容器的或每一行文字的間距

下方的範例在文字中插入一張圖片,當設定了圖片的 padding 數值,整體高度就會變多,且文字間的行距也會變高。

線上展示:https://codepen.io/oxxo/pen/bGyJKVZ

<!-- HTML 程式碼 -->
<div>
  <span>STEAM 教育學習網透過免費且高品質的教學與範例
    <img class="a" src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg">讓所有人都能輕鬆跨入 STEAM 的學習領域。</span>
</div>
<span>hello world!!!!</span>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid #000;
  }
  img {
    border: 1px solid #000;
    width: 50px;
    padding: 50px;
  }
</style>

CSS 教學 - 內邊距 padding - 可置換行內容器的 padding

padding 的背景延伸特性

因為 padding 也屬於容器內容的一部分,所以在預設狀態下,不論可置換元素還是不可置換元素,元素的「背景」都會延伸到 padding 所延展的區域 ( 可透過 background-clip 樣式修改 ),下方的範例會替所有元素加上背景色,可以觀察到背景色都延伸到 padding 所延展出的區域 ( 造成圖片元素也會出現背景的有趣效果 )。

線上展示:https://codepen.io/oxxo/pen/wvbZXWO

<!-- HTML 程式碼 -->
<div>
  <span><strong>STEAM 教育學習網</strong>透過免費且高品質的教學與範例
    <img src="https://steam.oxxostudio.tw/download/css/function-filter-demo.jpg">讓所有人都能輕鬆跨入 STEAM 的學習領域。</span>
  <div class="a"><em>hello world!!</em></div>    
</div>

<!-- CSS 程式碼 -->
<style>
  div {border: 1px solid #000;}
  img {
    border: 1px solid #000;
    width: 50px;
    padding: 50px;
    background: #00f5;
  }
  span {background: cyan;}
  strong {
    padding: 30px;
    background: #f005
  }
  .a {
    width: 100px;
    height: 100px;
    padding: 30px;
    background: orange;
  }
  em {
    display: block;
    width: 100%;
    height: 100%;
    background: green;
  }
</style>

CSS 教學 - 內邊距 padding - padding 的背景延伸特性

小結

元素的內邊距 padding 其實很容易理解,在大部分的情況下也不容易出錯,排版實作時也常用來讓內容與邊緣保持距離,讓版面更為清爽舒適,在早期瀏覽器的定義不一致時,操作往往令人困擾,但在今時今日已經可以非常簡單的使用。

意見回饋

如果有任何建議或問題,可傳送「意見表單」給我,謝謝~

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則

CSS 選擇器

認識 CSS 選擇器 優先順序 ( 權重 ) 樣式繼承與聯集 元素選擇器 ID 和 Class 選擇器 屬性選擇器 文件結構選擇器 虛擬類別選擇器 ( 結構 ) 虛擬類別選擇器 ( 類型 ) 虛擬類別選擇器 ( 輸入 ) 虛擬類別選擇器 ( 行為 ) 虛擬類別選擇器 ( 超連結 ) 虛擬類別選擇器 ( 邏輯 ) 虛擬類別選擇器 ( 其他 ) 虛擬元素選擇器 群組與組合選擇器

數值與單位

關鍵字與文字數值 長度與角度單位 顏色單位 位置名稱與時間單位

變數與內容函式

變數 數學計算 文字與清單計數 生成內容與引號

顏色與濾鏡

色彩模型 漸層色 影像濾鏡

文字樣式

使用通用字型 使用外部字型 @font-face 定義字型 文字尺寸 常用文字樣式 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 特殊文字樣式

元素容器

容器顯示類型 ( display ) 元素 display 對照表 盒子模型 ( Box Model ) 寬度與高度 內邊距 ( padding ) 外邊界 ( margin ) 邊框 ( border ) 邊框圓角 影像邊框 輪廓 ( outline ) 可見性與透明度 內容溢出與裁切

背景與陰影

背景顏色 背景圖 ( 定位、尺寸 ) 背景圖 ( 固定、重複 ) 背景圖 ( 多重背景、混合 ) 背景縮寫 ( background ) 容器陰影 ( box-shadow )

清單與表格

清單樣式 清單計數器 定義計數規則 表格基本樣式 表格邊框樣式 表格內容寬度與對齊

基本排版與定位

元素排版方式 浮動 ( float ) 浮動形狀 定位 ( position )

Flexbox 彈性排版

Flexbox 彈性盒子 Flexbox 對齊方式 Flexbox 彈性伸縮

Grid 網格排版

Grid 網格容器與格線 Grid 網格空間與命名 Grid 網格流向與間距 Grid 排列網格項目 Grid 項目對齊與順序

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 動畫觸發事件 多重動畫的權重與順序

變形、裁切與遮罩

裁切路徑 ( clip-path ) 影像遮罩 ( mask ) 物件填滿方式與定位 轉換函式 ( transform ) 3D 轉換與透視