1. 程式人生 > 其它 >px、rpx、em、rem 、vw/vh、百分比的區別?

px、rpx、em、rem 、vw/vh、百分比的區別?

px

絕對長度單位,根據維基百科解釋:它是影象顯示的基本單元,既不是一個確定的物理量,也不是一個點或者小方塊,而是一個抽象概念。很多時候,px 也常被稱為 CSS 畫素,在 PC 中,通常認為 1px 的真實長度是固定的

那 px 真的是一個裝置無關,跟長度單位米和分米一樣是固定大小的嗎?

一個畫素表示了計算機螢幕所能顯示的最小區域,畫素分為兩種型別:

  • CSS 畫素:為 Web 開發者提供,在 CSS 中使用的一個抽象單位
  • 物理畫素:只與裝置的硬體密度有關,任何裝置的物理畫素都是固定的

轉換關係:CSS畫素 = 物理畫素/解析度

假設PC 端:750 * 1134的視覺稿:1 CSS畫素 = 物理畫素/解析度 = 750 / 980 =0.76

假設移動端(iphone6為例),解析度為375 * 667:1 CSS畫素 = 物理畫素 /解析度 = 750 / 375 = 2

所以 PC 端,一個CSS畫素可以用0.76個物理畫素來表示,而iphone6中 一個CSS畫素表示了2個物理畫素。此外不同的移動裝置解析度不同,也就是1個CSS畫素可以表示的物理畫素是不同的

注意,當瀏覽器頁面縮放時,px 並不能跟隨變大。當前網頁的佈局就會被打破。

rpx

  • rpx是微信小程式獨有的、解決螢幕自適應的尺寸單位
  • 可以根據螢幕寬度進行自適應,不論大小螢幕,規定螢幕寬為 750rpx
  • 通過 rpx 設定元素和字型的大小,小程式在不同尺寸的螢幕下,可以實現自動適配

rpx 和 px之間的區別:

  • 在普通網頁開發中,最常用的畫素單位是px
  • 在小程式開發中,推薦使用 rpx 這種響應式的畫素單位進行開發

設計師在出設計稿的時候,出的都是二倍圖,也就是說如果在這個設計稿上有一個寬高為 200px 的盒子,那麼它最終畫到頁面上實際上是一個寬高為 100px 的盒子,那麼再換算成 rpx 需要乘以 2 ,就又變成了 200rpx ,跟設計稿上的數字是一樣的,所以我們可以保持數字不變,直接將單位 px 替換成 rpx

em

相對長度單位,em 是相對於當前元素的父元素的font-size進行計算,如果當前元素未設定則相對於瀏覽器的預設字型尺寸。

<div class
="a">A <div class="b">B <div class="c">C</div> </div> </div> <style> .a{ font-size:16px;} .b{ font-size:2em;} /* 相當於32px */ .c{ font-size:1em;} /* 相當於32px */ </style>

rem

相對長度單位,CSS3 新增的一個相對單位,rem 是相對於根元素(html)的font-size進行計算,rem 不僅可設定字型大小,也可以設定元素寬高屬性。

<div class="a">A
    <div class="b">B
        <div class="c">C</div>
    </div>
</div>
  
<style>
    html{ font-size:16px;}
    .a{ font-size:3rem;} /* 相當於48px */
    .b{ font-size:2rem;} /* 相當於32px */
    .c{ font-size:1rem;} /* 相當於16px */
</style>

px 與 rem 的區別:

  • px 對於只需要適配少量裝置,且解析度對頁面影響不大的,使用 px 即可, px 設定更為精準 。
  • 隨著 rem 在眾多的瀏覽器都得到支援,有需要考慮到對多裝置,多解析度的自適應,無疑這時候 rem 是最合適的(如:移動端的開發)。

vw/vh

CSS3 特性 vh 和 vw:

  • vh 相對於視窗的高度,視窗高度是100vh
  • vw 相對於視窗的寬度,視窗寬度是100vw

這裡是視窗指的是瀏覽器內部的可視區域大小,即 window.innerWidth/window.innerHeight 大小,不包含工作列標題欄以及底部工具欄的瀏覽器區域大小。

百分比

通常認為子元素的百分比完全相對於直接父元素:

<div class="a">
    <div class="b"></div>
</div>
<style>
    .a{ width:200px; height:100px; background-color: aqua; } 
    .b{ width:50%; height:50%; background-color: blueviolet; }
</style>

需要注意的是,如果設定了top、margin、padding等:

  • 子元素的 top 和 bottom 如果設定百分比,則相對於直接非 static 定位(預設定位)的父元素的高度
  • 子元素的 left 和 right 如果設定百分比,則相對於直接非 static 定位(預設定位的)父元素的寬度
  • 子元素的 padding/margin 如果設定百分比,不論是垂直方向或者是水平方向,都相對於直接父親元素的 padding/margin ,而與父元素的 height 無關。

px、rpx、em、rem 、vw/vh、百分比的區別?

  • px:絕對長度單位,來描述一個元素的寬高以及定位資訊
  • rpx:微信小程式獨有的、解決螢幕自適應的尺寸單位
  • em:相對單位,基準點為父節點字型的大小,如果自身定義了font-size按自身來計算(瀏覽器預設16px)em作為字型單位,相對於父元素字型大小;em作為行高單位時,相對於自身字型大小,整個頁面內 1em 不是一個固定的值。
  • rem:相對單位,可理解為”root em”,相對根節點html的字型大小來計算,CSS3新加屬性,rem作用於非根元素時,相對於根元素字型大小;rem作用於根元素字型大小時,相對於其出初始字型大小。rem佈局的本質是等比縮放,一般是基於寬度,試想一下如果UE圖能夠等比縮放,那該多麼美好啊
  • vw/vh:viewpoint width / viewpoint height,vw 相對於視窗的寬度,vh 相對於視窗的高度,1vw等於視窗寬度的1%
  • 百分比:1% 對不同屬性有不同的含義。font-size: 200% 和font-size: 2em 一樣,表示字型大小是預設(繼承自父親)字型大小的2倍。line-height: 200% 表示行高是自己字型大小的 2 倍。width: 100%表示自己 content 的寬度等於父親 content 寬度的1倍。