跟著KP用21天征服Responsive Layout-W1-熟悉相對單位(relative units)

更新於 發佈於 閱讀時間約 7 分鐘

這周KP分享的第二個概念是相對單位(relative units) 、使用的2個原則與陷阱、如何應用它們來做Responsive Layout。

甚麼是相對單位(relative units)

相對單位(relative units)有兩種:

  1. em
  2. rem

相對於px是固定的單位,相對單位會根據某個基準下去縮放。相對單位可以在字體大小(font-size)與 距離間距(padding、margin)使用。

1.em


1.使用於字體大小

使用在字體大小(font-size)的話,em的基準點就是父層元素(parent)。這裡來看個例子:

<div class="parent">
父層​
<div class="child">
子元素​
</div>

</div>
.chid{
font-size:2em
}


  • parent 沒有設定font-size,其font-size就會是瀏覽器預設的16px
  • child的font-size設定2em,其基準是parent。所以child的font-size就是16px*2 = 32px

2.使用於距離間距

<div class="parent">
父層​
<div class="child">
子元素​
</div>

</div>
.chid{
​font-size:2em;
padding: 1em,/*加上padding*/
margin:2em;/*加上margin*/

}
}
  • child的font-size如上述是32px
  • child的padding是1em,這時候相對的基準是child的font-size,而不是parent的。所以child的padding是32px*1 = 32px
  • child的margin是2em,所以是32px*2 = 64px


em的層層放大的陷阱

<div class="parent">
父層​
<div class="child">
子元素​
<div class="child2">
子元素​2
<div class="child3">
子元素​3
</div>
</div>
</div>

</div>
.chid{
​font-size:2em;
}
.chid2{
​font-size:2em;
}
.chid3{
​font-size:2em;
}
  • child1的font-size 是 16px *2 =32px
  • child2的font-size 是 16px *2 *2=64px
  • child3的font-size 是 16px *2 *2=128px

如果字體大小使用em的話,從上面的例子可以看到兩點

1.字體會一層層的累乘,進而讓內層的字體變得超大或是超小(如果乘的是小數的話)

2.內層的字體大小會受到所有外層的影響,難以控制。

這麼看來,對字體大小使用em真的不是個好點子。難道我們要回頭用px嗎?

當然不是,我們還有rem可以使用。

2.rem

不論使用在字體大小或是間距,其基準都是根元素(也就是html)。

現在來讓我們來將上個例子改成rem

<div class="parent">
父層​
<div class="child">
子元素​
<div class="child2">
子元素​2
<div class="child3">
子元素​3
</div>
</div>
</div>

</div>
.chid{
​font-size:2em; /*改成rem*/
}
.chid2{
​font-size:2em;/*改成rem*/
}
.chid3{
​font-size:2em;/*改成rem*/
}
  • 不論是child、child2、child3,其font-size都是 16px*2 =32px


比起em,rem更適合用於設定字體的大小。這也導出了個第一項原則:

使用rem來設定font-size


相對單位(relative units)在Responsive Layout的應用

在前面介紹相對單位(relative units)-em與rem,你一定在想,這個跟Responsive Layout有甚麼關係?為何我不能單單純純的用px,px不偷也不搶,為甚麼Responsive Layout要這麼歧視她

這裡KP用了兩個應用來展現了相對單位(relative units)的威力。

1.配合media Query與rem來一鍵調整不同螢幕大小的font-size

<div class="parent">
父層​
<div class="child">
子元素​
</div>
<div class="child">
子元素​2
</div>

</div>
.chid{
​font-size:2rem;
padding: 1em;
margin:2em;

}
@media only screen and (max-width: 600px){/*Big smartphones [426px -> 600px]*/
​html{
font-size:12px
}
}


}

在max-width: 600px的media Query中,重設html的font-size為12px,這一次連動改變了兩個子元素的

  • ​font-size:從原本的16px*2變成12px*2 =24px
  • padding:從原本的16px*1變成12px*1=12px
  • margin:從原本的16px*2變成12px*2=24px


如果都使用相對單位的話,我們可以透過更改html的font-size來一次修改所有元素的font-size與間距。

2.使用em來一次設計各式大小的按鈕

<button class="btn btn1">
按鈕1
</button>

<button class="btn btn2">
按鈕2
</button>
.btn{
padding:2em 3em; /*長寬為3:2*/
}
.btn1{
font-size:0.5rem;
}
.btn2{
font-size:1.5rem;
}
  • 先用btn的共用class 來用em來設置padding。em會相對於元素的font-size縮放
  • 用btn1的特定class來設置第一個按鈕的font-size為0.5rem。其padding會隨著font-size大小而縮小,且比例維持一樣。產生一個等比例的小按鈕。
  • 用btn2的特定class來設置第一個按鈕的font-size為1.5rem。其padding會隨著font-size大小而縮大,且比例維持一樣。產生一個等比例的大按鈕。
raw-image


由於相對單位可以更有效率的設置不同螢幕下的元素大小,所以又導出第二項原則

不要使用px,用em或rem


總結

這就是今天相對單位的內容了,記得兩項原則

1.單位不要使用px,用em或rem

2.使用rem來設定font-size

留言
avatar-img
留言分享你的想法!
avatar-img
Shang的 前端開發筆記
3會員
13內容數
歡迎來到我的部落格!這裡是一個分享前端開發、貓咪寫真以及與菲律賓女友生活的文化衝擊與英文學習的個人空間。我熱愛前端技術,喜歡追求最新的網頁開發趨勢,並將這些知識分享給大家。
2024/03/21
CatHelper是我開發的前端 SideProject,是貓咪募資收養的一站式平台。 我用戶使用流程、資料庫、頁面來構思這個專案。
Thumbnail
2024/03/21
CatHelper是我開發的前端 SideProject,是貓咪募資收養的一站式平台。 我用戶使用流程、資料庫、頁面來構思這個專案。
Thumbnail
2024/03/14
不同的運算子一起出現時,會根據其優先性(Precedence)來決定誰先誰後。MDN也很貼心的整理成表格了。 雖然有表格可以供我們查找,但是總不可能每一次用到運算子的時候,我們都去查找吧?我們最好對這張表有直觀上的理解與記憶。 那麼就讓我來分享我如何理解與記憶這張表吧! 運算子在做甚麼
Thumbnail
2024/03/14
不同的運算子一起出現時,會根據其優先性(Precedence)來決定誰先誰後。MDN也很貼心的整理成表格了。 雖然有表格可以供我們查找,但是總不可能每一次用到運算子的時候,我們都去查找吧?我們最好對這張表有直觀上的理解與記憶。 那麼就讓我來分享我如何理解與記憶這張表吧! 運算子在做甚麼
Thumbnail
2024/02/08
當前大多數網站不再是靜態網站,需要向後端的 Server 請求資料。而且,這些資料的請求通常是非同步進行的。在React中,目前被視為最佳實踐的方式是使用 useEffect。
2024/02/08
當前大多數網站不再是靜態網站,需要向後端的 Server 請求資料。而且,這些資料的請求通常是非同步進行的。在React中,目前被視為最佳實踐的方式是使用 useEffect。
看更多
你可能也想看
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
全球科技產業的焦點,AKA 全村的希望 NVIDIA,於五月底正式發布了他們在今年 2025 第一季的財報 (輝達內部財務年度為 2026 Q1,實際日曆期間為今年二到四月),交出了打敗了市場預期的成績單。然而,在銷售持續高速成長的同時,川普政府加大對於中國的晶片管制......
Thumbnail
CSS入門-Day3 的主要內容包括字體大小、字體顏色、字體系列、字體樣式、字體粗細等屬性。此外,還涵蓋了文本對齊、行高、文字間距、單詞間距和文本裝飾。最後,介紹了如何引入和使用 Google 字體,以提高網頁的排版效果。
Thumbnail
CSS入門-Day3 的主要內容包括字體大小、字體顏色、字體系列、字體樣式、字體粗細等屬性。此外,還涵蓋了文本對齊、行高、文字間距、單詞間距和文本裝飾。最後,介紹了如何引入和使用 Google 字體,以提高網頁的排版效果。
Thumbnail
在學習 CSS 的過程中,Padding 與 Margin 是兩個經常出現的名詞,但對於初學者來說,可能會有些難以理解。因此,本篇文章將解釋這兩個非常重要的 CSS 屬性。當你掌握後,便能設計出更具層次或易讀的網頁。
Thumbnail
在學習 CSS 的過程中,Padding 與 Margin 是兩個經常出現的名詞,但對於初學者來說,可能會有些難以理解。因此,本篇文章將解釋這兩個非常重要的 CSS 屬性。當你掌握後,便能設計出更具層次或易讀的網頁。
Thumbnail
今天的功課,說多也不多 國語大部分是訂正錯字 但數學來問的怎麼都是那幾題?@@ 連頁數都一模模一樣樣 莫非你們全部都卡在J邊? 勞絲今天不是代課也不是扶助教學 但是也太多人來問惹......... 只好拿起白板筆:你們是不是都卡在這個周長和面積? 畫了兩個圖給他們,周長和面積。 然後:
Thumbnail
今天的功課,說多也不多 國語大部分是訂正錯字 但數學來問的怎麼都是那幾題?@@ 連頁數都一模模一樣樣 莫非你們全部都卡在J邊? 勞絲今天不是代課也不是扶助教學 但是也太多人來問惹......... 只好拿起白板筆:你們是不是都卡在這個周長和面積? 畫了兩個圖給他們,周長和面積。 然後:
Thumbnail
CSS 裡的「寬度,最大寬度,最小寬度」分別是什麼呢? ➊ width 用來設定元素的寬度,且 width 作用範圍僅在 content-box 區塊 ➋ max-width → 用來設定元素的最大寬度 ➌ min-width → 用來設定元素的最小寬度
Thumbnail
CSS 裡的「寬度,最大寬度,最小寬度」分別是什麼呢? ➊ width 用來設定元素的寬度,且 width 作用範圍僅在 content-box 區塊 ➋ max-width → 用來設定元素的最大寬度 ➌ min-width → 用來設定元素的最小寬度
Thumbnail
本課程學習如何使用 LinearLayout 線性佈局中的 padding 內部間距屬性。
Thumbnail
本課程學習如何使用 LinearLayout 線性佈局中的 padding 內部間距屬性。
Thumbnail
在上一篇文章-跟著KP用21天征服Responsive Layout-W2-Flexbox基礎-flex-item的伸縮 。我們提到了flex-item的width會由自身的內容長度決定。這其實是件很不可控的事情,所以我們在開發上會傾向於對flex-item設置width。 flex-item
Thumbnail
在上一篇文章-跟著KP用21天征服Responsive Layout-W2-Flexbox基礎-flex-item的伸縮 。我們提到了flex-item的width會由自身的內容長度決定。這其實是件很不可控的事情,所以我們在開發上會傾向於對flex-item設置width。 flex-item
Thumbnail
歡迎來到第二周,這一周我們就要進入Flexbox了。今天我們會先認識Flexbox的起手式與flex-item的伸縮規則。
Thumbnail
歡迎來到第二周,這一周我們就要進入Flexbox了。今天我們會先認識Flexbox的起手式與flex-item的伸縮規則。
Thumbnail
這周KP分享的第二個概念是相對單位(relative units) ,使用上的陷阱與原則,以及如何應用它們來做Responsive Layout。
Thumbnail
這周KP分享的第二個概念是相對單位(relative units) ,使用上的陷阱與原則,以及如何應用它們來做Responsive Layout。
Thumbnail
「px」,即像素,是最基本的單位,它常被用於指定字體大小、邊框粗細等。「em」和「rem」通常用於調整相對大小,「em」在子元素中的適用,而「rem」則以根元素為參考。另一方面,「vh」和「vw」分別代表視窗的高度和寬度百分比,特別適合實現響應式設計。「vmin」和「vmax」則根據視窗的最小或最大
Thumbnail
「px」,即像素,是最基本的單位,它常被用於指定字體大小、邊框粗細等。「em」和「rem」通常用於調整相對大小,「em」在子元素中的適用,而「rem」則以根元素為參考。另一方面,「vh」和「vw」分別代表視窗的高度和寬度百分比,特別適合實現響應式設計。「vmin」和「vmax」則根據視窗的最小或最大
Thumbnail
網頁中經常會出現正方形的設計,在切版時如果直接設定固定寬高就是破版的節奏,但單用百分比設定長寬,RWD 時還是會變得不夠正,這邊提供兩個方法:
Thumbnail
網頁中經常會出現正方形的設計,在切版時如果直接設定固定寬高就是破版的節奏,但單用百分比設定長寬,RWD 時還是會變得不夠正,這邊提供兩個方法:
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News