日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

移动端开发 rem 单位使用问题

發布時間:2025/6/15 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移动端开发 rem 单位使用问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

PC 端頁面開發與移動端頁面開發:

PC 端頁面開發需要考慮更多的兼容性問題,ie、谷歌、火狐等瀏覽器各自內核不同(ie 的天下)。

移動端頁面開發基本不用考慮這種瀏覽器間的兼容問題,手機上的瀏覽器絕大部分是webkit內核的(webkit 的天下),但是需要考慮屏幕分辨率。

原生開發與移動端開發:

原生 app,在瀏覽體驗上優于網頁,需要依賴具體設備,一旦更換設備,需要重新下載才能繼續使用。

移動端開發,不需依賴具體設備。

GitHub地址

一、常用單位

px:

相對長度單位,像素 px 是相對于顯示器屏幕分辨率而言的。

%:

根據父元素的倍數來計算。

em:

根據父元素的 font-size 值來計算,如果沒有給父元素設置 font-size ,就使用根元素的 font-size。

例:當父元素的 font-size 為 20px 時,子元素:

font-size: 1em => 20px font-size: 2em => 40px ... 復制代碼

rem:

根據根元素的 font-size 值來計算。

不同于 em,父元素的 font-size 不管設置為多少,都不會影響到 rem 的值,只有根元素(html)能影響他的值。

若根元素(html)沒有設置 font-size,則值的計算方式與 em 相同。

例:當根元素(html)的 font-size 為 10px 時,子元素:

font-size: 1rem => 10px font-size: 2rem => 20px ... 復制代碼

再來一個例子:

為了方便計算,我們改一下瀏覽器默認 font-size,瀏覽器默認 font-size 是 16px,16px = 100%,所以 1px = 6.25%,10px = 62.5%。

此時我們將 html 元素也就是瀏覽器默認 font-size 設置為 62.5%,也就是 10px,如果用 rem 為單位,rem 值 = 元素 px / 10。

例如寬高都為 100px 的 div,使用 rem 為單位寬高便是 10rem。

二、移動端適配方案

  • 媒體查詢。
  • js 動態設置 html 的 font-size(rem 為單位)。
  • 淘寶提供的解決方案 flexible.js(rem 為單位)。

方式一:

媒體查詢。

優點:

  • 方法簡單,成本低,移動和 PC 維護同一套代碼。
  • 只用修改 css 文件。

缺點:

  • 代碼量大,維護不方便。
  • 為兼顧大屏或高清設備,會造成其他資源浪費,特別是加載圖片資源。
  • 為了兼顧移動端和 PC 端各自響應式的展示效果,難免會損失各自特有的交互方式。

方式二:

js 動態設置 html 的 font-size(rem 為單位)。

1、設置 meta viewport 屬性

<meta name="viewport" content="width=240, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" /> 復制代碼

2、添加動態設置 html 的 font-size 的 js:

rem.js

(function(doc, win) {var docEl = doc.documentElement,resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',recalc = function() {var clientWidth = docEl.clientWidth;if (!clientWidth) return;if (clientWidth >= 640) {docEl.style.fontSize = '100px';} else {docEl.style.fontSize = 100 * (clientWidth / 640) + 'px';};};if (!doc.addEventListener) return;win.addEventListener(resizeEvt, recalc, false);doc.addEventListener('DOMContentLoaded', recalc, false); })(document, window); 復制代碼

在以下兩處設置設計稿的寬度:

使用說明:例如設計稿的寬度是 640px,如果一個元素的實際寬高都為 200px,那么如果使用 rem 為單位,寬高便都為 2rem。

rem = px / 100。

參考實例:

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=240, user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0" /><title>rem 使用</title><script src="rem.js"></script> </head><body><div class="box"><p>在 640px 的設計稿下:</p><p>width: 200px => 2rem</p><p>height: 200px => 2rem</p><p>font-size: 14px => 0.14rem</p></div> </body><style> .box { font-size: .14rem; width: 2rem; height: 2rem; background-color: #cacaca; } </style></html> 復制代碼

方式三:

淘寶提供的解決方案 flexible.js,這個解決方案只解決蘋果設備上的 dpr 為2和3的情況,不考慮安卓設備也不考 pad。

1、設置 meta 標簽。

<meta content="yes" name="apple-mobile-web-app-capable" /> <meta content="yes" name="apple-touch-fullscreen" /> <meta content="telephone=no,email=no" name="format-detection" /> <meta content="maximum-dpr=2" name="flexible" /> 復制代碼

2、引入 flexible.js 文件。

計算方法:

元素的 rem 值 = 元素在設計稿中的 px 值 / (設計稿寬 / 10)。

例:一個元素的寬高為 100px ,該元素寬高的 rem 值 = 100 / ( 640 / 10)= 1.5625 rem。

這樣的計算方式會比較浪費時間,如果使用 flexible.js 方式,我建議使用 sublime 插件:CSSREM(在我的文章 代碼編輯器Sublime_Text3的使用 中有 sublime 插件安裝方法),把 px 轉換為 rem,或使用其他方式轉換。

CSSREM 插件安裝成功后,依次打開 Preferences → Package Settings → cssrem → Settings-Default 去設置設計稿的寬。

  • px_to_rem :px 轉 rem 的單位比例,默認為40,如果是640的設計稿,設置為64。
  • max_rem_fraction_length:px 轉 rem 的小數部分的最大長度,默認為6。

在 .css 文件中(該插件僅在 .css 文件中生效),編寫 px 值后會自動轉換為 rem 的值。

參考實例:

<!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta content="yes" name="apple-mobile-web-app-capable" /><meta content="yes" name="apple-touch-fullscreen" /><meta content="telephone=no,email=no" name="format-detection" /><meta content="maximum-dpr=2" name="flexible" /><title>flexible 使用說明</title><script src="flexible.js"></script> </head><body><div class="box"><p>在 640px 的設計稿下:</p><p>width: 200px => 3.125rem</p><p>height: 200px => 3.125rem</p><p>font-size: 14px => .21875rem</p> </div><style> .box { font-size: .21875rem; width: 3.125rem; height: 3.125rem; background-color: #cacaca; } </style></body></html> 復制代碼

三、補充

關于 dpr(設備像素比)。

dpr(設備像素比) = 物理像素 / 設備獨立像素。

在不同的屏幕上(普通屏幕 VS retina 屏幕),css 像素所呈現的大小(物理尺寸)是一致的,不同的是1個 css 像素所對應的物理像素個數是不一致的。

在普通屏幕下,1個 css 像素 對應 1個物理像素(1:1),在retina 屏幕下,1個 css 像素對應 4個物理像素(1:4)。

計算方式是在水平或垂直方向上,一個物理像素中可以放兩個 css 像素,此時 dpr = 2 / 1 = 2。

例:在一個 dpr = 2 的設備中,如果一張圖片的實際寬高都是 200px,在瀏覽器中設置寬高 200px 時,在手機中就會顯示模糊,因為在 dpr = 2 的設備下,圖片的寬高被擴展成了 400px,但是如果 css 把寬高設置為 100px, 在設備下寬高就會擴展為 200px,此時就為原圖大小了。

這就是為什么設計師做移動端時會出兩倍寬度的設計稿,比如 320 的分辨率會出 640 的設計稿。


期待您的關注!

總結

以上是生活随笔為你收集整理的移动端开发 rem 单位使用问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 最新的黄色网址 | 久久人人妻人人人人妻性色av | 在线中文字幕第一页 | 特黄aaaaaaaaa真人毛片 | 古代玷污糟蹋np高辣h文 | 久久综合色视频 | av永久免费网站 | 天天色播 | 女人被男人操 | 黑人干亚洲女 | 国产成人久久久 | 国产黄色一区二区三区 | 成人在线看片 | 久久伊人亚洲 | 特级西西444www高清大视频 | 男人桶进美女尿囗 | 欧美一区二区三区四区五区六区 | 日本视频免费在线 | 香蕉视频色版 | 国产视频一区在线播放 | 九九热精品在线视频 | 四季av日韩精品一区 | 小sao货水好多真紧h无码视频 | 国产真实乱偷精品视频 | 国产亚洲成人精品 | 国产伦理片在线观看 | 丁香色婷婷 | 色七七网站 | 青青草色视频 | 欧洲最强rapper网站直播 | 国产肉体xxxx裸体784大胆 | 人人妻人人爽人人澡人人精品 | 女女互慰揉小黄文 | 人人插人人看 | 久久久久xxxx| 色综合av| 日韩高清一区二区 | 啪啪导航 | 色优久久 | 久久夜色网 | 凹凸国产熟女精品视频 | 日日撸视频 | 欧美xxxx喷水| 久久精品久久久精品美女 | 美女超碰| 亚色成人 | 亚洲国产私拍精品国模在线观看 | 久久久久免费看 | 亚洲伦理在线 | 日本成人小视频 | jizz18国产| 成人免费视频国产免费 | 国产黄色大片在线观看 | 日本人视频69式jzzij | 在线视频观看免费 | 国产一区二区在线免费 | 国产xx在线观看 | 日本高清精品 | 亚州av在线播放 | 2019毛片 | 午夜伦理视频 | xxx性日本| 午夜精品在线视频 | www.17c.com喷水少妇 | 奇米久久久 | 奇米影视在线观看 | 午夜久久网站 | 在线观看国产免费av | 天堂亚洲精品 | 国产系列精品av | 天天爱夜夜操 | 开心六月婷婷 | 手机在线看片1024 | xxxx69视频| 久久久国产精华液 | 久久久久亚洲av无码专区体验 | 中文字幕一区二区在线播放 | 日韩特黄毛片 | 国产又黄又爽视频 | 亚洲无码精品免费 | 亚洲精品国产熟女久久久 | 人人妻人人澡人人爽欧美一区双 | 久久露脸 | 欧美一区二区三区网站 | 奇米在线777| 69热在线 | gai免费观看网站外网 | 在线视频观看国产 | 久久久久久久久免费视频 | 蜜桃tv在线观看 | 国产在线专区 | 朋友的姐姐2在线观看 | 一级视频在线播放 | 久久99综合| 五月婷婷一区二区三区 | 中文字幕精 | 91香蕉一区二区三区在线观看 | 人人舔人人插 | 欧美亚洲国产成人 |