在angular中做移動端適配

描述

做移動端的項目橡淆,最重要的是做適配相關(guān)的工作榆纽,移動設(shè)備的屏幕是有大有小,大到平板芬探,也是說我們的頁面內(nèi)容是不能固定死的神得,要根據(jù)屏幕的大小進(jìn)行等比的放大和縮小,本文所講的是參照手淘使用的方案lib-flexible自適應(yīng)偷仿,用單位rem來做適配哩簿,lib-flexible插件會自動根據(jù)屏幕的大小來動態(tài)的設(shè)置根html的大小,只有html設(shè)置了rem酝静。
相關(guān)插件:
1.lib-flexible(手淘):實現(xiàn)動態(tài)修改根html的大小
2.postcss-pxtorem:把項目中的px轉(zhuǎn)為rem

也有人會用白百分比

有的人會用百分比的來做节榜,其實百分比有點類似于rem,百分比相對于父元素的大小,而rem是相對根元素的大小别智,用百分比不利于元素大小轉(zhuǎn)換宗苍,每個元素的寬高和字體都要人工去算,而且并不精準(zhǔn)薄榛,
例如設(shè)計稿的大小通常是675/667的屏幕大小進(jìn)行設(shè)計的讳窟, 設(shè)計稿上設(shè)計的元素寬高為40px50px,字體為16px敞恋,如果用百分比要算675/667的大小的屏的顯示丽啡,正好是寬高為40px50px,字體為16px硬猫,這個才是百分百還原設(shè)計稿的流程补箍,也許用百分比來布局,可以起到不同屏幕大小下可以進(jìn)行等比例縮放啸蜜,但是在675*667的屏幕下跟設(shè)計稿比很難做到準(zhǔn)確坑雅,所以不推薦,
總結(jié)

  1. 每寫一個元素都要人工手動去算衬横,比較麻煩
  2. 在設(shè)計搞的屏幕下很難一 一對應(yīng)大小裹粤,不準(zhǔn)確,只能說是差不多冕香,實現(xiàn)出來的同一個元素大小看是不是設(shè)計稿上的大小就知道了
    3.一般做響應(yīng)式網(wǎng)站用蛹尝,做app或h5不適用后豫,做app或h5的這些項目精確度較高悉尾,不能是差不多突那,要從百分百還原設(shè)計稿出發(fā)

了解rem布局原理

假如我們不用手淘插件會自動轉(zhuǎn)換html元素的大小,人工如何配置實現(xiàn)相應(yīng)效果呢构眯?
我門知道元素用rem是一個相對單位愕难,是根據(jù)html的字體大小來改變樣式的大小。

image.png

當(dāng)html的fontSize設(shè)置100px后惫霸,下面的元素如果用1rem,那么會自動換為1*100px,這是關(guān)于rem的相對大小的解釋猫缭。這是屏幕固定的情況下的這樣設(shè)置,那如何區(qū)分屏幕呢壹店,那么這里要引申另外一個概念叫vw,要實現(xiàn)適配就是rem+vw的適配方案猜丹。

了解rem+vw布局方案

我們知道每個屏幕都是100vw的寬,它也是個相對大小硅卢,那我們可以設(shè)置html的fontSize的大小為vw,這樣就可以根據(jù)不同屏幕放大縮小了射窒,但是換算后怎么具體到設(shè)計稿的大小呢。假如定fontSize的大小為100px将塑,就有如下推導(dǎo)公式:


image.png

100px占了375的屏寬是多少比值脉顿,那么相應(yīng)的就能得到所占vw的比值是多少,從而得出應(yīng)該給html設(shè)置多少vw点寥,這力取值為100px,是方便子孫元素給值得計算艾疟,通過公式計算得出的vw為26.66vw,設(shè)置樣式如下:


image.png
,
這樣設(shè)置之后的結(jié)果,在375的屏幕下敢辩,看到設(shè)計搞上寬高分別為100px/200px的效果一樣
image.png

這里我在頁面中直接設(shè)置元素寬高為1rem/2rem,自動換算成100px/200px,有一點點誤差請忽略蔽莱,是因為給html計算fontSize時的vw換算沒有整除,我們可以切換到其他寬度的屏幕看下效果戚长,看有沒有放大或者縮小


image.png
盗冷,說明這個配置是生效的
注意:
*:開發(fā)就在寬375的屏幕下做開發(fā),這樣實現(xiàn)的元素寬高就和設(shè)計稿保持一致了历葛,設(shè)計稿只有固定的一個
尺寸正塌,而真實的環(huán)境寬度屏卻不只有一個,只要保證設(shè)計稿尺寸的那個屏下的所有元素寬高一樣恤溶,其
他屏幕顯示隨著屏大小等比縮放乓诽,這個也是科學(xué)實現(xiàn)的。如果看到移動端切換不同大小屏幕咒程,元素大
小沒有變化鸠天,或者對應(yīng)尺寸的屏顯示的大小跟設(shè)計稿不一致,很多人沒有搞懂帐姻,做出來的只能說差不多
能看稠集,沒有百分百還原設(shè)計稿奶段,都是給個差不多的大小,剥纷,就暗自笑呵呵吧痹籍,投以鄙視的眼光。
以上通過rem+vw的方式解釋了適配的原理晦鞋,接下來我們可以偷個懶蹲缠,用插件自動把px轉(zhuǎn)為rem

在angular中安裝配置postcss-pxtorem lib-flexible 移動端適配

1.安裝必要的依賴

npm i -D @angular-builders/custom-webpack // 在angular中webpack自定義配置必須要裝的插件
npm i @angular-devkit/build-angular -D 
npm install postcss-pxtorem --save-dev //自動把px轉(zhuǎn)為rem的插件
npm i -S lib-flexible   //動態(tài)設(shè)置html的fontSize的插件
  1. 創(chuàng)建webpack.config.js文件(文件夾跟angular.json同級)
module.exports = {
  module: {
    rules: [{
      test: /\.(scss|css|less)$/,
      use: [
        'postcss-loader',
        'less-loader',
      ]
    }]
  }
};

3.創(chuàng)建postcss.config.js文件(文件夾跟angular.json同級)

module.exports = {
  plugins: {
    autoprefixer: {
      browsers: ['Android >= 4.0', 'iOS >= 7'],
      overrideBrowserslist: [
        'Android 4.1',
        'iOS 7.1',
        'Chrome > 31',
        'ff > 31',
        'ie >= 8'
      ],
    },
    'postcss-pxtorem': {
      rootValue: 37.5, // 這個建議37.5
      exclude: false,
      propList: ['*']
    }
  }
}

4.修改angular.json內(nèi)容
projects.architect.build中覆蓋builder

 "builder":"@angular-builders/custom-webpack:browser"

projects.architect.build.options中加入代碼

 "customWebpackConfig": {
 "path": "./webpack.config.js",
  "mergeStrategies": {
    "module.rules": "append"
  },
  "replaceDuplicatePlugins": true
}

projects.architect.serve中覆蓋builder

 "builder":"@angular-builders/custom-webpack:dev-server"

5.在main.ts中引入lib-flexible插件


image.png

當(dāng)設(shè)置div的寬高為100px/200px,我們在375的屏(設(shè)計稿尺寸屏),看是不是對應(yīng)的大小
···


image.png

當(dāng)我們切換不同寬度屏幕時看下效果悠垛,例如切到pad


image.png

從圖中看出來线定,項目中我們用的單位還是px,設(shè)計圖上看到的尺寸是多少px,就設(shè)置多少px,只不過我們配置好的postcss-pxtorem插件會自動幫我們轉(zhuǎn)成rem單位确买,當(dāng)我們切換不同屏幕時候斤讥,此時的lib-flexible插件會起作用,自動轉(zhuǎn)換根html的fonfSize的大小湾趾,此時項目中的px也都轉(zhuǎn)換成了rem,就會隨根html的fontSize大小變化而變化芭商,這樣的設(shè)計也是科學(xué)的。

注意:
有一點需要注意撑帖,假如我們有用到第三方移動端UI庫組件蓉坎,該出現(xiàn)如何問題呢,這里做適配胡嘿,很多人都沒有留意這里的問題蛉艾,移動端UI庫組件只是給你設(shè)計好了樣式,和功能交互衷敌,并沒有做適配勿侯,不妨可以找?guī)讉€移動端組件看看,切換不同屏幕時缴罗,它的元素大小無任何變化助琐,這是做移動端很多人沒弄清楚的地方,只是做了個差不多的效果面氓,跟設(shè)計稿百分百還原的前提兵钮,差別很大。那么上面已經(jīng)總結(jié)了如何適配我們自己寫的組件舌界,會自動幫我們轉(zhuǎn)rem,那能不能也把移動端組件庫中自帶的px單位也轉(zhuǎn)成rem呢掘譬,答案是可以的。
在postcss.config.js中修改要轉(zhuǎn)換的文件


image.png

利用這個exclude屬性設(shè)置需要轉(zhuǎn)換的文件呻拌,可以用正則表示葱轩,默認(rèn)值是false,所有的都轉(zhuǎn)


image.png

配置后很明顯的發(fā)現(xiàn)使用的UI庫中的組件默認(rèn)已經(jīng)轉(zhuǎn)成rem,說明配置成功。

總結(jié)

移動端之所以要適配,是因為設(shè)計圖只有一種尺寸靴拱,也就是說這個設(shè)計圖只設(shè)計一種尺寸的屏幕垃喊,前端開發(fā)也只需要針對設(shè)計圖相同尺寸的屏幕做開發(fā),且實現(xiàn)的效果接近百分百還原設(shè)計搞袜炕,保持這一種屏幕相同且實現(xiàn)元素大小也和設(shè)計稿相同就行本谜,然后保證其他和設(shè)計稿尺寸不同屏幕下切換時,能等比例的縮放就行妇蛀,例如平板看到的大小肯定要比手機(jī)屏幕要大耕突,因為屏幕變大了笤成,內(nèi)容肯定要變大评架,這就是為啥要做移動端,很多人都不懂這里面的溝溝坎坎炕泳,這都是很基礎(chǔ)的常識性業(yè)務(wù)了纵诞,不然鬧笑話。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末培遵,一起剝皮案震驚了整個濱河市浙芙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌籽腕,老刑警劉巖嗡呼,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異皇耗,居然都是意外死亡南窗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門郎楼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來万伤,“玉大人,你說我怎么就攤上這事呜袁〉新颍” “怎么了?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵阶界,是天一觀的道長虹钮。 經(jīng)常有香客問我,道長膘融,這世上最難降的妖魔是什么芙粱? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮托启,結(jié)果婚禮上宅倒,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好拐迁,可當(dāng)我...
    茶點故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布蹭劈。 她就那樣靜靜地躺著,像睡著了一般线召。 火紅的嫁衣襯著肌膚如雪铺韧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天缓淹,我揣著相機(jī)與錄音哈打,去河邊找鬼。 笑死讯壶,一個胖子當(dāng)著我的面吹牛料仗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播伏蚊,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼立轧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了躏吊?” 一聲冷哼從身側(cè)響起氛改,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎比伏,沒想到半個月后胜卤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡赁项,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年葛躏,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肤舞。...
    茶點故事閱讀 40,852評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡紫新,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出李剖,到底是詐尸還是另有隱情芒率,我是刑警寧澤,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布篙顺,位于F島的核電站偶芍,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏德玫。R本人自食惡果不足惜匪蟀,卻給世界環(huán)境...
    茶點故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宰僧。 院中可真熱鬧材彪,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至显熏,卻和暖如春雄嚣,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背喘蟆。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工缓升, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蕴轨。 一個月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓港谊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尺棋。 傳聞我的和親對象是個殘疾皇子封锉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,851評論 2 361

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

  • @(概述)[基本概念|百分比|rem|vw/vh|響應(yīng)式設(shè)計] 移動端web頁面的開發(fā),由于手機(jī)屏幕尺寸膘螟、分辨率不...
    jluemmmm閱讀 77,091評論 1 42
  • 盤點移動端適配方案 作為開發(fā)者,在手機(jī)移動端做適配的時候會出現(xiàn)很多問題:最不希望用戶看到的就是橫向滾動條碾局。其次是文...
    learninginto閱讀 648評論 0 4
  • 適配 在不同尺寸的移動設(shè)備上, 頁面相對性的達(dá)到合理的展示(自適應(yīng)), 或者保持同一效果的等比縮放(看起來差不多)...
    Veycn閱讀 1,634評論 0 0
  • 前言 2020年清明小假期荆残,雖然新型冠狀病毒疫情得到了很好的控制,但是大家還是盡量避免出門净当,在家待著不能浪費時間内斯,...
    moofyu閱讀 2,215評論 0 6
  • html5 AD:百G視頻免費分享 移動端越來越被大眾所接收,那么相應(yīng)的技術(shù)就越來越向它靠攏像啼,這是一種不可阻擋的趨...
    前端啊啊閱讀 265評論 0 0