適配手機頁面佈局的動態rem方案

littlebirdflying發表於2018-06-13

1. 基礎概念

em:一個漢字寬
rem:根元素(<html>元素)的font-size
chrome瀏覽器的font-size預設值16px (注意:最小是12px,再小無效)
rem和em的區別?沒什麼關係
1em = 本身元素的font-size(可以這樣理解,不過不準確)
1rem = 根元素的font-size的大小

2. 動態 rem 方案

由於手機螢幕眾多導致的尺寸不同的問題,我們需要一種自適應方案。
自適應方案可以用百分比佈局 缺點:高度不能和寬度配合。
rem方案是以螢幕寬為基準的方案,通過js動態獲取螢幕的寬度,從而和rem產生聯絡。

var pageWidth = window.innnerWidth
document.write('<style>html{font-size:' + pageWidth/10 + 'px;'}</style>')
複製程式碼

這樣 1rem = html的font-size = 1/10 pageWidth

1.png
注意:使用rem方案,經常犯的錯誤就是,js動態更改根元素html元素的font-size時,如果換算比例過小(/100),換導致html的font-size小於12px,chrom預設不能小於,這就出錯了,不容易被察覺。 利用rem和其他單位混用可以達到很好的效果。

3. 在 SCSS 裡使用 PX2REM,自動進行rem值換算

利用scss,我們就不用自己手算了,設計稿是多少就寫多少,再將scss檔案轉成css檔案即可。 使用步驟(windows可用,命令列工具是git bash)

  • 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 檔案就會自動得到 css 檔案 在 scss 檔案裡新增
@function px( $px ){
  @return $px/$designWidth*10 + rem;
}	
$designWidth : 640; // 640 是設計稿的寬度,你要根據設計稿的寬度填寫。
.child{
  width: px(320);
  height: px(160);
  margin: px(40) px(40);
  border: 1px solid red;
  float: left;
  font-size: 1.2em;
}
複製程式碼

2.png
即可實現 px 自動變 rem,不需要手動換算。

相關文章