移動端適配---rem

rem(font size of the root element)是指相對于根元素的字體大小的單位拐揭。簡單的說它就是一個相對單位玩荠,即:元素


樣式設(shè)置了n rem茬贵,其實際的像素大小為:n * html.fontSize px

將它應(yīng)用在移動端時摘完,可以通過修改html的字體大小值,改變頁面最終展示的大小羹令。

可以理解為通過改變html的字體大小鲤屡,就可以縮放頁面元素。

以設(shè)計稿750*1206為例

假設(shè)當(dāng)屏幕為750*1206時福侈,html字體大小為(750/16)px

當(dāng)屏幕為375*603時酒来,html字體大小為(375/16)px(即:縮小了一倍)

但是,通常情況下癌刽,屏幕大小都不是固定比例的役首,所以需要進(jìn)行計算,我的計算方式是將16作為基準(zhǔn)显拜,最終以屏幕大小與基準(zhǔn)的比值作為當(dāng)前頁面html的字體大小

原理

以750*1206的屏幕(設(shè)計稿大小RC)作為標(biāo)準(zhǔn),默認(rèn)字體大小為(750/16)

如果是寬屏爹袁,則以高來計算html的字體大小基準(zhǔn)值(GC為屏幕實際大小,lastSize=16(即標(biāo)準(zhǔn)時html字體的大小基準(zhǔn)值))

? ? ? ? size = (RC.h / GC.h * GC.w) / RC.w * lastSize;

? ? ? ? fontSize = GC.w / size

? ? ? ? 理解:以高為基準(zhǔn)远荠,獲取標(biāo)準(zhǔn)高與屏幕高的比例RC.h / GC.h,再通過比例獲取到按標(biāo)準(zhǔn)比例的時候失息,寬度不變譬淳,此時的寬理應(yīng)為多少(RC.h / GC.h * GC.w),最后通過理應(yīng)得到的寬與設(shè)計的寬的比值(RC.h / GC.h * GC.w) / RC.w來確定此時字體大小基準(zhǔn)值size盹兢,最終得到的當(dāng)前屏幕的字體大小為fontSize

如果是長屏邻梆,則以標(biāo)準(zhǔn)來計算html的字體大小

可能有人會好奇,為什么只是寬屏稍作調(diào)整绎秒,而長屏不需要呢浦妄?那是因為如果屏幕太寬,還以寬進(jìn)行適配的話见芹,就會發(fā)現(xiàn)頁面中的元素要么都擠到一起了剂娄,要么部分元素顯示不全

完整js代碼如下:

var lastSize = 16, ?// (默認(rèn)標(biāo)準(zhǔn)的html字體大小的基準(zhǔn)值,可以隨自己喜好定義玄呛,但必須與樣式統(tǒng)一)

? ? ? htmlStatus = 0,

? ? ? bodyElement = document.documentElement || document.body,

? ? ? RC = { w:750, ? ?h:1206 }, ? // 標(biāo)準(zhǔn)尺寸阅懦,即:設(shè)計稿尺寸

? ? ? GC = {

? ? ? ? ? ? ? w:bodyElement.clientWidth,

? ? ? ? ? ? ? h:bodyElement.clientHeight

? ? ? },

? ? ? rightSize = RC.w / RC.h, ? // 標(biāo)準(zhǔn)比例

? ? ? currentSize = GC.w / GC.h,

? ? ? html = document.getElementsByTagName("html")[0];

if(rightSize > currentSize){? // 長屏

? ? ? lastHTMLSize = 16;

}else if(rightSize < currentSize){? //寬屏

? ? ? lastHTMLSize = (RC.h / GC.h * GC.w) / RC.w * 16;

}

html.style.fontSize=GC.w/lastHTMLSize+'px';

以上是所有js代碼,為保證效果徘铝,最好是添加在html文件的head里

由于使用了rem耳胎,所以頁面的樣式是計算出來的惯吕,建議使用sass或less的函數(shù)進(jìn)行計算,

注意:樣式文件以設(shè)計稿為準(zhǔn)

@function rem($n){

? ? ? ? ?@return $n / (750 / 16) + rem

}

以上是最基本的代碼怕午,但這還不夠混埠,因為你會發(fā)現(xiàn),在寬屏上頁面元素可能偏左或偏右诗轻,比較零散钳宪,所有建議以中心進(jìn)行適配,即left:50%扳炬,添加margin-left值吏颖,由于之前的縮放是寬屏按高縮放,長屏或標(biāo)準(zhǔn)屏都按標(biāo)準(zhǔn)縮放恨樟,所以不需要擔(dān)心高的問題半醉,所以高可以放心直接設(shè)置top值。

為了方便劝术,以下是個人以中心適配的計算(scss)

@function getTop($n) {

? ? ? ? ? @return ($n - 1206 / 2) / (750 / 16) + rem;

}

@function getLeft($n) {

? ? ? ? ? ?@return ($n - 750 / 2) / (750 / 16) + rem;

}

@function getRight($n) {

? ? ? ? ? ?@return (($n - 750) / 2) / (750 / 16) + rem;

}

@mixin center($left,$top) { ? // 默認(rèn)以left計算中心的

? ? ? ? ? ? position:absolute;

? ? ? ? ? ? left:50%;

? ? ? ? ? ? top: rem($top);

? ? ? ? ? ? margin:0 0 0 getLeft($left);

}

@mixin center-right($right,$top) {// 默認(rèn)以right計算中心的

? ? ? ? ? ?position:absolute;

? ? ? ? ? ?right:50%;

? ? ? ? ? ?top: rem($top);

? ? ? ? ? ?margin:0 getRight($right) 0 0;

}

@mixin centerb($left,$bottom) {// 默認(rèn)以left計算中心的,但設(shè)置bottom

? ? ? ? ? ?position:absolute;

? ? ? ? ? ?left:50%;

? ? ? ? ? ?bottom: rem($bottom);

? ? ? ? ? ?margin:0 0 0 getLeft($left);

}

以上即為全部代碼缩多,基本上可以適配任何屏幕,包括PC

我是以 750/16 作為標(biāo)準(zhǔn)去計算的值养晋,且以16為基準(zhǔn)衬吆,但這不是唯一,可以以任何值為標(biāo)準(zhǔn)去計算绳泉,但是計算方式都差不多




文檔信息

版權(quán)聲明:自由轉(zhuǎn)載-非商用-非衍生-保持署名

發(fā)表日期:2017年2月24日

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逊抡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子零酪,更是在濱河造成了極大的恐慌冒嫡,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件四苇,死亡現(xiàn)場離奇詭異孝凌,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)月腋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門蟀架,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人罗售,你說我怎么就攤上這事辜窑。” “怎么了寨躁?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵穆碎,是天一觀的道長。 經(jīng)常有香客問我职恳,道長所禀,這世上最難降的妖魔是什么方面? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮色徘,結(jié)果婚禮上恭金,老公的妹妹穿的比我還像新娘。我一直安慰自己褂策,他們只是感情好横腿,可當(dāng)我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著斤寂,像睡著了一般耿焊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遍搞,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天罗侯,我揣著相機(jī)與錄音,去河邊找鬼溪猿。 笑死钩杰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诊县。 我是一名探鬼主播讲弄,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼翎冲!你這毒婦竟也來了垂睬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤抗悍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钳枕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缴渊,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年鱼炒,在試婚紗的時候發(fā)現(xiàn)自己被綠了衔沼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡昔瞧,死狀恐怖指蚁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情自晰,我是刑警寧澤凝化,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站酬荞,受9級特大地震影響搓劫,放射性物質(zhì)發(fā)生泄漏瞧哟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一枪向、第九天 我趴在偏房一處隱蔽的房頂上張望勤揩。 院中可真熱鬧,春花似錦秘蛔、人聲如沸陨亡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽负蠕。三九已至,卻和暖如春辨液,著一層夾襖步出監(jiān)牢的瞬間虐急,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工滔迈, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留止吁,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓燎悍,卻偏偏與公主長得像敬惦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子谈山,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 移動端適配中俄删,我所了解的兩種解決方案 Media Query(由于比較繁瑣,我在開發(fā)中已經(jīng)使用很少了): : ...
    XFE_Noah閱讀 6,915評論 0 22
  • 前言 對于熟悉pc端的小伙伴來說,對于靜態(tài)頁面的布局,一般都是沒有什么問題的,為了保持各瀏覽器顯示的一致性,無論是...
    itclanCoder閱讀 13,637評論 5 61
  • 剛開始做移動端web開發(fā)的同學(xué)應(yīng)該都碰到過頁面適配問題奏路,為什么我在開發(fā)手機(jī)上調(diào)試好的頁面在其他手機(jī)會有這樣或那樣的...
    留七七閱讀 19,316評論 5 80
  • 了解真實的『REM』手機(jī)屏幕適配rem 作為一個低調(diào)的長度單位畴椰,由于手機(jī)端網(wǎng)頁的興起,在屏幕適配中得到重用鸽粉。 使用...
    張憲宇閱讀 2,234評論 0 5
  • 《次北固山下》 唐:王灣 首聯(lián):客路青山外斜脂,行舟綠水前。 頷聯(lián):潮平兩岸闊触机,風(fēng)正一帆懸帚戳。 頸聯(lián):海日生殘夜,江春入...
    春天33閱讀 3,256評論 0 0