談?wù)凜SS3的長(zhǎng)度單位(vh、vw、rem)

2018-06-19 18:38 更新
      在CSS3中,新增了很多長(zhǎng)度單位,今天就來(lái)談?wù)劊?div>
  • vw、vh、vmin、vmax
  • rem與em

1、vw、vh、vmin、vmax
vh、vw、vmin、vmax這四個(gè)單位都是基于視口的,含義如下:
(1)vw、vh
vw是相對(duì)視口(viewport)的寬度而定的,長(zhǎng)度等于視口寬度的1/100。

假如瀏覽器的寬度為200px,那么1vw就等于2px(200px/100)。

vh是相對(duì)視口(viewport)的高度而定的,長(zhǎng)度等于視口高度的1/100

假如瀏覽器的高度為500px,那么1vh就等于5px(500px/100)。

(2)vmin、vmax
vminvmax是相對(duì)于視口的高度和寬度兩者之間的最小值最大值

如果瀏覽器的高為300px、寬為500px,那么1vmin就是3px,1vmax就是5px;如果瀏覽器的高為800px,寬為1080px,那么1vmin也是8px,1vmax也是10.8px。

兼容性:兼容性

2、rem
rem是相對(duì)于根元素(html)的字體大小(font-size)來(lái)計(jì)算的長(zhǎng)度單位。

html{font-size: 62.5%}  /* 10 ÷ 16 × 100% = 62.5% */


body{font-size: 1.4rem;} /* 1.4 × 10px = 14px */

如果你沒(méi)有設(shè)置html的字體大小,就會(huì)以瀏覽器默認(rèn)字體大小,一般是16px。

注意:由于瀏覽器默認(rèn)最小字體大小的限制,如果設(shè)置的根元素字體大小小于默認(rèn)最小字體大小,那么就會(huì)以默認(rèn)最小字體大小設(shè)置根元素。比如:在chrome中,最小字體大小是12px,如果你設(shè)置的字體大小小于12px,還是會(huì)以12px設(shè)置:

html{font-size: 62.5%}  /* 16px * 62.5% = 10px */


body{font-size: 1.4rem;} /* 1.4rem * 12px = 16.8px */

本意設(shè)置body的字體大小為14px,可是實(shí)際上卻是16.8px,就是因?yàn)?0px小于12px,所以采取了12px。

所以,我一般都是這樣設(shè)置:

html{font-size: 20px;}


body{font-size: 0.7rem;}  /* 0.7 * 20px = 14px */


說(shuō)到rem,我們還會(huì)想到em,兩者都是相對(duì)單位,由瀏覽器轉(zhuǎn)換為像素值,那兩者有什么區(qū)別?使用哪個(gè)更好呢?

rem與em的區(qū)別:
  • rem是相對(duì)于根元素(html)的字體大小,而em是相對(duì)于其父元素的字體大小
  • em最多取到小數(shù)點(diǎn)的后三位

<style>

  html{ font-size: 20px; }

  body{ 

    font-size: 1.4rem;  /* 1rem = 28px */

    padding: 0.7rem;  /* 0.7rem = 14px */

  } 

  div{

    padding: 1em;  /* 1em = 28px */

  }

  span{

    font-size:1rem;  /* 1rem = 20px */

    padding: 0.9em;  /* 1em = 18px */

  }

</style>


<html>

  <body>

    <div>   

      <span></span>  

    </div>

  </body>

</html>

在上面的代碼中,我們將根元素(html)的字體大小font-size設(shè)為20px,body的字體大小設(shè)為1rem,那么轉(zhuǎn)換為像素就是28px(20 × 1.4),接著我們又將div的padding設(shè)為1em,由于其基于父元素,所以轉(zhuǎn)換為像素是28px ( 28 × 1),然后我們又將span的字體大小設(shè)為1rem,也就是20px,由于其自身設(shè)置了字體大小,所以padding設(shè)為1em,轉(zhuǎn)換為像素是20px(20 × 1),而不是乘以其父元素的字體大小28px(28 × 1)。

注意:當(dāng)元素自身設(shè)置了字體大小,那么如果它的其他css屬性也使用em單位,則會(huì)基于它自身的字體大小。(就像上面例子的span的padding一樣)

基于上面這些原因,個(gè)人更傾向于使用rem,因?yàn)?code>em使用不當(dāng)?shù)脑挘?dāng)出現(xiàn)多層繼承時(shí),會(huì)很容易混淆,比如:

<style>

  html{ font-size: 20px; }

  body{ 

    font-size: 0.9em;  /* 1rem = 18px */

  } 

  div{

    font-size: 0.8em;  /* 1em = 14.4px */

  }

  span{

    font-size: 0.9em;  /* 1rem = 12.96px */

  }

</style>


<html>

  <body>

    <div>   

      <span></span>  

    </div>

  </body>

</html>

看到?jīng)]有,使用em時(shí),如果其祖先元素都是用了em,那么就會(huì)像上面一樣,body繼承其父元素html的字體大小,而div又繼承其父元素body的字體大小,而span又繼承其父元素div的字體大小,最終span的字體大小最終是12.96px(20 × 0.9 ×0.8 × 0.9)。

而rem總是相對(duì)于根元素(html)的,也就是說(shuō),不管哪里使用了rem單位,都是根元素的字體大小 × 數(shù)字,由瀏覽器轉(zhuǎn)為像素值。

對(duì)于rem的兼容性,無(wú)須擔(dān)心,點(diǎn)擊查看:兼容性

當(dāng)然,em和rem各有優(yōu)缺點(diǎn),簡(jiǎn)單的使用規(guī)則:
  • 如果這個(gè)屬性根據(jù)它的font-size進(jìn)行測(cè)量,則使用em
  • 其他的一切事物屬性均使用rem.

兩者都不使用的情況:
  • 多列布局,一般使用百分比%

這里提供了一個(gè)px、em、rem單位的轉(zhuǎn)換工具:http://pxtoem.com/




以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)