這裏是修真院前端小課堂,每篇分享文從css
【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】html
八個方面深度解析前端知識/技能,本篇分享的是:前端
【px、em、rem、%、vw、vh、vm等單位有什麼區別?】css3
px、em、rem、%、vw、vh、vm等單位有什麼區別?程序員
你們好,我是IT修真院西安分院第5期的學員許恆倩,一枚正直純潔善良的web程序員,今天給你們分享一下,修真院官網CSS任務三,深度思考中的知識點——px、em、rem、%、vw、vh、vm等單位有什麼區別?web
(1)背景介紹:chrome
傳統的項目開發中,咱們只會用到px、%、em這幾個單位,它能夠適用於大部分的項目開發,瀏覽器
而且擁有比較良好的兼容性。可是從css3開始,瀏覽器對邏輯單位的支持又提高到了另一個境界,字體
增長了rem、vh、vw、vm等一些新的長度單位,咱們能夠利用這些新的單位開發出比較良好的響應式頁面,編碼
隨之覆蓋多種不一樣分辨率的終端,包括移動設備等。接下來就講下這些長度單位有什麼區別。
(2)知識剖析:
px單位名稱爲像素,像素是固定大小的單元,用於屏幕媒體(即在電腦屏幕上讀取)。一個像素等於電腦屏幕上的一個點
(是你屏幕分辨率的最小分割)。是 CSS 中最經常使用的長度單位,能夠用來指定字體大小,元素的寬度、高度、邊框、內邊距,外邊距的大小等等
px是絕對長度單位,它不會根據屏幕的大小進行調整。
2.%
百分比是一個相對長度單位,相對於包含塊(containing block)的高寬或字體大小。
關於包含塊(containing block)的概念,不能簡單地理解成是父元素。
若是是靜態定位和相對定位,包含塊通常就是其父元素。
若是是絕對定位的元素,包含塊應該是離它最近的 position爲非static屬性的祖先元素。
若是是固定定位的元素,它的包含塊是視口(viewport)
em是相對字體長度單位。若是用於font-size屬性自己,則是相對於父元素的font-size。
em單位有以下特色:
em是繼承父元素的字體大小,但是當父元素字體大小改變時,又得從新計算了。
rem是CSS3新增的一個相對字體長度單位,只相對根元素即html元素字體大小
因此咱們只要在html標籤上設置字體大小爲標準,文檔中的字體大小都會以此爲參照
咱們知道任意瀏覽器的默認字體大小都是16px。
爲了簡化font-size的換算,須要在css中的根元素html中聲明font-size=62.5%,這就使rem值變爲 16px*62.5%=10px,
這樣 10px=1rem, 也就是說只須要將你的原來的px數值除以10,而後換上rem做爲單位就好了
CSS3新增的長度單位,分別是viewpoint Width和viewpoint Height的縮寫。
1vh 等於1/100的視口高度。舉個列子:瀏覽器高度900px, 1 vh = 900px/100 = 9 px。
同理,若是視口寬度爲750, 1vw = 750px/100 = 7.5 px
vmin 是當前 vm 和 vh 中較小的一個值,也就是說,是可視區域較小的一邊的1/100的長度;
例如:可視區大小爲 1000x800, 則 wmin = 800/100 = 8px;
若是可視區大小爲 600x800, 則 wmin = 600/100 = 6px;
相似的, vmax 是當前 vm 和 vh 中較大的一個值,也就是說,是可視區域較大的一邊的1/100的長度;
例如:可視區大小爲 1000x800, 則 wmin = 1000/100 =10px;
若是可視區大小爲 600x800, 則 wmin = 800/100 = 8px;
(3)常見問題:
在使用REM爲單位時,爲什麼將HTML的FONT-SIZE:625%
(4)解決方案:
大部分現代瀏覽器默認時16px,chrome強制最小字體爲12號,即便設置成 10px 最終都會顯示成12px,
當把html的font-size設置成10px,子節點rem的計算仍是以12px爲基準,
因此提到的將html的font-size設爲10方便計算不是那麼可取)。致使chrome的em/rem計算不許確。
爲了解決這個坑,設置html字體爲625%,即100px,body 修正爲16px,這樣 0.1rem 就是 10px,
而body的字體仍然是默認大小,不影響未設置大小的元素的默認字體的大小。
(5)編碼實戰:
body {
font-size: 20px;
}
.txt {
font-size: 1.5em;
}
.block {
font-size: 1.5em;
}
</style>
<body>
<div class="txt">
我是文字
<div class="block">
我是文字2
</div>
</div>
</body>
(6)拓展思考:
CSS還有哪些長度單位?
英寸in(inches) 1in = 96px
釐米cm(centimeters) 1cm = 37.8px
點pt(points) 1pt = 1.33px
派卡pc(picas) 1pc = 16px
(7)參考文獻:
參考:
你可能不瞭解的七個 CSS 單位
CSS/CSS3長度、時間、頻率、角度單位大全--張鑫旭
(8)更多討論:
Q1:提問人:若是父元素沒有指定高度,那麼子元素的百分比的高度是多少?
A1:我:會按照子元素的實際高度,設置百分比已經沒有效果了。
(9)結束語:
今天的分享就到這裏啦,歡迎你們點贊、轉發、留言、拍磚~