px ,em ,rem
做移動端或者響應式的頁面必然需要字體的變化的。這次我就自己的經驗來說說他們之間的關系,以及怎么用。
px?(絕對單位)是我們常用的就不說了。
em(相對單位,相對父級)
em 指字體高,任意瀏覽器的默認字體高都是16px。所以未經調整的瀏覽器都符合: 1em=16px。那么12px=0.75em, 10px=0.625em。為了簡化font -size的換算,需要在css中的body選擇器中聲明Font-size=62.5%,這就使em值變為16px*62.5%=10px, 這樣12px=1.2em, 10px=1em, 也就是說只需要將你的原來的px數值除以10,然后換上em作為單位就行了。
CSS代碼
html { font-size: 62.5%; }
這個換算在IE瀏覽器下不成立,1.2em會比12px稍大一些,解決辦法是把html標簽樣式中的62.5%改成63%,即:
CSS代碼
html { font-size: 63%; } ?
注:(有一點不懂的是)
你可能會在content這個div里把字體大小設為1.2em, 也就是12px。然后你又把選擇器p的字體大小也設為1.2em,但如果p屬于content的子級的話,p的字體大小就不是12px,而是1.2em= 1.2 * 12px=14.4px。這是因為content的字體大小被設為1.2em,這個em值繼承其父級元素body的大小,也就是16px * 62.5% * 1.2=12px, 而p作為其子級,em則繼承content的字體高,也就是12px。所以p的1.2em就不再是12px,而是14.4px。
所以這個用的時候會有點問題
rem(相對單位 ,css3,相對根),在ie8及ie8以下的版本不支持外其他瀏覽器都支持,如果你要考慮ie8及一下,最好把px也寫上。
我們設置html的字體大小的值為html{font-size: 87.5%;}(也就是14px)。然后其他的字體就是將你要的值除以14得到的值;
你根元素的字體大小選62.5%,那px和rem之間的換算就是px直接除以10就得到rem了。
?
這里我就不負責任說一句,這里是看到別人寫的,我自己還沒喲用過,不知道什么樣。
javascript方式,通過上面的公式,計算出基準值rem,然后寫入樣式,大概如下(代碼參考自kimi的m-base模塊)
var?dpr,?rem,?scale; var?docEl?=?document.documentElement; var?fontEl?=?document.createElement('style'); var?metaEl?=?document.querySelector('meta[name="viewport"]'); scale?=?1?/?dpr; dpr?=?win.devicePixelRatio?||?1; rem?=?docEl.clientWidth?*?dpr?/?10; //?設置viewport,進行縮放,達到高清效果 metaEl.setAttribute('content',?'width='?+?dpr?*?docEl.clientWidth?+?', ?????????????????????initial-scale='?+?scale?+?',maximum-scale='?+?scale?+?', ?????????????????????minimum-scale='?+?scale?+?',user-scalable=no'); //?設置data-dpr屬性,留作的css?hack之用 docEl.setAttribute('data-dpr',?dpr); //?動態寫入樣式 docEl.firstElementChild.appendChild(fontEl); fontEl.innerHTML?=?'html{font-size:'?+?rem?+?'px!important;}'; //?給js調用的,某一dpr下rem和px之間的轉換函數 window.rem2px?=?function(v)?{ ????v?=?parseFloat(v); ????return?v?*?rem; }; window.px2rem:?function(v)?{ ????v?=?parseFloat(v); ????return?v?/?rem; }; window.dpr?=?dpr; window.rem?=?rem;這種方式,可以精確地算出不同屏幕所應有的rem基準值,缺點就是要加載這么一段js代碼,但個人覺得是這是目前最好的方案了。
因為這個方案同時解決了三個問題:
1)border: 1px問題
2)圖片高清問題
3)屏幕適配布局問題
?
推薦網頁:http://www.cocoachina.com/webapp/20150715/12585.html
轉載于:https://www.cnblogs.com/zxhh/p/6872318.html
總結
以上是生活随笔為你收集整理的px ,em ,rem的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 记一次ora-1652错误的解决过程
- 下一篇: 单片机串行通信全解析