動(dòng)態(tài)REM

rem

  1. 這個(gè)單位代表根元素的 font-size 大?。ɡ?<html> 元素的font-size)。
  2. rem 與 em 的區(qū)別
    首先理解em的意義,它表示當(dāng)前元素的font-size的計(jì)算值,即em==font-size
    兩者區(qū)別:rem 是相對(duì)于根元素的 font-size,而 em 是相對(duì)于當(dāng)前元素的font-size
  3. 手機(jī)端方案的特點(diǎn)
  • 所有手機(jī)顯示的界面都是一樣的,只是大小不同
  • 1 rem == html font-size == viewport width



    一切單位以寬度為基準(zhǔn),就能完美還原設(shè)計(jì)稿

  1. 使用 js 動(dòng)態(tài)調(diào)整 rem
// html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
  <script>
    // 1 rem 等于一個(gè)頁(yè)面的寬度
    var pageWidth = window.innerWidth
    document.write('<style>html{font-size: '+pageWidth+'px;}</style>')
  </script>
</head>
<body>
<div class="parent clearfix">
  <div class="child">1</div>
  <div class="child">2</div>
  <div class="child">3</div>
  <div class="child">4</div>
</div>
</body>
</html>
// css
*{margin:0;padding:0;}
body{
  // 設(shè)置字體大小,不然就變成和頁(yè)面一樣大了
  font-size: 16px;
}
.child{
  background-color: #ddd;
  float: left;
}
.clearfix::after{
  content: '';
  display: block;
  clear: both;
}
// 所有寬高邊距等都用 rem 設(shè)置
.child{
  width: 0.4rem;
  height: 0.2rem;
  margin: 0.05rem;
}

這樣,不論手機(jī)寬度如何,比例仍然是一樣的,只是大小不同
另外,直接將rem與頁(yè)面寬度等同,太大了,設(shè)置css都要使用小數(shù),很麻煩
所以可以設(shè)置的小一點(diǎn),比如百分之一,但是這樣可能會(huì)出現(xiàn)一個(gè)新的問(wèn)題

var pageWidth = window.innerWidth
document.write('<style>html{font-size: '+ pageWidth/100 +'px;}</style>')

得到的font-size值太小,別忘了chrome默認(rèn)限制font-size最小為12px,于是頁(yè)面就變‘大了’
為了防止這樣的情況,不能除以太大的數(shù)字

var pageWidth = window.innerWidth
document.write('<style>html{font-size: '+ pageWidth/10 +'px;}</style>')

一般而言,10比較合適,因?yàn)橹悄苁謾C(jī)屏幕通常在300-400px左右,除以10后在30-40,不會(huì)出現(xiàn)因?yàn)椤?2px原則’而被‘放大頁(yè)面’

  1. rem 可以與其他單位同時(shí)存在
font-size: 16px;
border: 1px solid red;
width: 0.5rem;

比如 font-size,如果使用rem,會(huì)在屏幕很小的時(shí)候變得很難看
還有border,1px轉(zhuǎn)換rem在屏幕太小的時(shí)候仍然是1px,因?yàn)闉g覽器最小就是1px了
這里建議太小的單位,或者如font-size這樣的(字體太大太小都不好看),可以使用其它單位與rem混合使用
比如px、em

  1. 在 SCSS 里使用 PX2REM
    這個(gè)是node-sass,
    npm config set registry https://registry.npm.taobao.org/
    touch ~/.bashrc
    echo 'export SASS_BINARY_SITE="https://npm.taobao.org/mirrors/node-sass"' >> ~/.bashrc
    source ~/.bashrc
    npm i -g node-sass
    mkdir ~/Desktop/scss-demo
    cd ~/Desktop/scss-demo
    mkdir scss css
    touch scss/style.scss
    start scss/style.scss
    node-sass -wr scss -o css

編輯 scss 文件就會(huì)自動(dòng)得到 css 文件

在 scss 文件里添加

@function px( $px ){
@return $px/$designWidth*10 + rem;
}

$designWidth : 640; // 640 是設(shè)計(jì)稿的寬度,你要根據(jù)設(shè)計(jì)稿的寬度填寫。如果設(shè)計(jì)師的設(shè)計(jì)稿寬度不統(tǒng)一,就殺死設(shè)計(jì)師,換個(gè)新的。

.child{
width: px(320);
height: px(160);
margin: px(40) px(40);
border: 1px solid red;
float: left;
font-size: 1.2em;
}
即可實(shí)現(xiàn) px 自動(dòng)變 rem
饑人谷教學(xué)視頻

一些知識(shí)點(diǎn)

  • 如果不給頁(yè)面添加font-size,則默認(rèn)字體大小為16px
  • Chrome有最小字號(hào)設(shè)置,一般默認(rèn)為12px,這個(gè)時(shí)候即使你設(shè)置更小的像素也無(wú)法生效,依然是12px(僅chrome)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 動(dòng)態(tài)REM是手機(jī)專用的自適應(yīng)方案 REM是什么 我們常用的單位有(有問(wèn)題看MDN) px em (一個(gè)漢字M的寬度...
    YM雨蒙閱讀 456評(píng)論 0 0
  • 單位 px:像素em:一個(gè) M 的寬度(面試:一個(gè)字的寬度)rem:root em 根元素( )的 font-si...
    饑人谷_風(fēng)爭(zhēng)閱讀 602評(píng)論 0 1
  • 設(shè)備像素(device pixel): 設(shè)備像素是物理概念,指的是設(shè)備中使用的物理像素。 比如iPhone 5的分...
    fredah閱讀 452評(píng)論 0 0
  • 響應(yīng)式 1.meta:vp 阻止縮放 2.盡量不要寫width / height,改用max / min 不要把寬...
    阿魯提爾閱讀 497評(píng)論 0 1
  • 問(wèn)答題47 /72 常見瀏覽器兼容性問(wèn)題與解決方案? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,157評(píng)論 1 92

友情鏈接更多精彩內(nèi)容