這周KP分享的第二個概念是相對單位(relative units) 、使用的2個原則與陷阱、如何應用它們來做Responsive Layout。
相對單位(relative units)有兩種:
相對於px是固定的單位,相對單位會根據某個基準下去縮放。相對單位可以在字體大小(font-size)與 距離間距(padding、margin)使用。
1.使用於字體大小
使用在字體大小(font-size)的話,em的基準點就是父層元素(parent)。這裡來看個例子:
<div class="parent">
父層
<div class="child">
子元素
</div>
</div>
.chid{
font-size:2em
}
2.使用於距離間距
<div class="parent">
父層
<div class="child">
子元素
</div>
</div>
.chid{
font-size:2em;
padding: 1em,/*加上padding*/
margin:2em;/*加上margin*/
}
}
<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;
}
如果字體大小使用em的話,從上面的例子可以看到兩點
1.字體會一層層的累乘,進而讓內層的字體變得超大或是超小(如果乘的是小數的話)
2.內層的字體大小會受到所有外層的影響,難以控制。
這麼看來,對字體大小使用em真的不是個好點子。難道我們要回頭用px嗎?
當然不是,我們還有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*/
}
比起em,rem更適合用於設定字體的大小。這也導出了個第一項原則:
使用rem來設定font-size
在前面介紹相對單位(relative units)-em與rem,你一定在想,這個跟Responsive Layout有甚麼關係?為何我不能單單純純的用px,px不偷也不搶,為甚麼Responsive Layout要這麼歧視她
這裡KP用了兩個應用來展現了相對單位(relative units)的威力。
<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,這一次連動改變了兩個子元素的
如果都使用相對單位的話,我們可以透過更改html的font-size來一次修改所有元素的font-size與間距。
<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;
}
由於相對單位可以更有效率的設置不同螢幕下的元素大小,所以又導出第二項原則
不要使用px,用em或rem
這就是今天相對單位的內容了,記得兩項原則
1.單位不要使用px,用em或rem
2.使用rem來設定font-size