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

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

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

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

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

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

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

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

兼容性:兼容性

2、rem
rem是相對于根元素(html)的字體大?。╢ont-size)來計算的長度單位。

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


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

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

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

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


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

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

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

html{font-size: 20px;}


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


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

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

<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)。

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

基于上面這些原因,個人更傾向于使用rem,因為em使用不當?shù)脑?,當出現(xiàn)多層繼承時,會很容易混淆,比如:

<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時,如果其祖先元素都是用了em,那么就會像上面一樣,body繼承其父元素html的字體大小,而div又繼承其父元素body的字體大小,而span又繼承其父元素div的字體大小,最終span的字體大小最終是12.96px(20 × 0.9 ×0.8 × 0.9)。

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

對于rem的兼容性,無須擔心,點擊查看:兼容性

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

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

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




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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號