移動(dòng)端框架(如WeUI)與一般的h5設(shè)計(jì)稿(750px)結(jié)合使用的方式

背景

我們?cè)谶M(jìn)行h5開發(fā)時(shí)则拷,通常使用的設(shè)計(jì)稿是750px(考慮retina)玖喘,我們會(huì)直接根據(jù)設(shè)計(jì)稿的尺寸去開發(fā)甩牺,然后進(jìn)行適配(常用的有淘寶的flexible方案以及近期流行的vw適配方案)。但有時(shí)累奈,我們又想直接使用現(xiàn)有移動(dòng)端框架的一些組件(如簡(jiǎn)潔大方的weui)贬派。weui作為基礎(chǔ)組件,大多數(shù)是使用px為單位的澎媒,比如直接在自己的項(xiàng)目中用upload組件搞乏,看起來(lái)就小了一號(hào)。

image.png

這是由于<meta>中的 viewport已經(jīng)被相關(guān)js改成 640 或 750 之類的值戒努,WeUI中的 13px 等字號(hào)或尺寸就顯得捉襟見肘了请敦。

解決方案

1. 最笨的

要解決這個(gè)問題侍筛,最直接的方式就是把框架里相關(guān)代碼拷貝過來(lái)萤皂,自己默默地覆蓋樣式,這樣做的好處是可以精確控制像素匣椰,缺點(diǎn)自然是浪費(fèi)生命~~

2. 與適配方案相關(guān)的

如果你使用rem的適配方案裆熙,有現(xiàn)成的工具可以將px轉(zhuǎn)化成rem(如,px2rem)弛车,或者在webpack工程中使用postcss-px2rem插件,并在處理css的相關(guān)rules中添加

{
    loader: 'postcss-loader',
    options: {
      plugins: [
        px2rem({
          remUnit: 375 / 20,
          remPrecision: 5
        })
      ]
    }
}

需要注意的是

  • remPrecision指的是生成的rem數(shù)值精度喻括,避免過長(zhǎng)
  • 而 remUnit 中用 375邀杏,是基于 iphone6 的尺寸做一個(gè)基準(zhǔn),計(jì)算出來(lái)的尺寸基本在各自手機(jī)型號(hào)中都可以接受
  • 20 則參考了小程序中的標(biāo)準(zhǔn)唬血,這個(gè)值其實(shí)也可以自定義望蜡,和相關(guān)rem輔助工具中的設(shè)置一致即可

該方案參考自《WeUI在rem項(xiàng)目中的一種適配方法》 一文,該文還提出“使用 webpack2-replace-loader 插件”的方式拷恨,但本人測(cè)試后無(wú)法編譯通過脖律,如果有同學(xué)成功了,請(qǐng)多多指教~

3. 字符串替換方式腕侄,修改原來(lái)的px(大概2倍大小比較合適)

這個(gè)方式的思路是找出框架中所有以px為單位的數(shù)字小泉,乘以2。借用node文件處理冕杠,按行讀取文件微姊,對(duì)每行文件進(jìn)行正則匹配,并替換所有以px結(jié)尾的數(shù)值分预。代碼如下:

let output = '';    // 最終輸出的結(jié)果
const readline = require('readline');
const path = require('path');
const fs = require('fs');
let filepath = path.join(__dirname, "weui.css");   // 需要轉(zhuǎn)化的css文件
let input = fs.createReadStream(filepath);
const rl = readline.createInterface({
  input: input
});
rl.on('line', (line) => {
  var exp = new RegExp(/\b(\d+(\.\d+)?)px\b/g);    // 獲取所有以px結(jié)尾的數(shù)值
  var out = line.replace(exp, function ($0, $1) {
    return $1 * 2 + 'px';
  });  // 將匹配到的數(shù)值進(jìn)行計(jì)算
  output += `${out}\n`; 
});
rl.on('close', (line) => {
  fs.writeFile(__dirname + '/output.css', output, function (err) {
    if (err) {
      throw err;
    }
    console.log('已保存!');
  });
  console.log("讀取完畢兢交!");
});

將輸出的文件引入項(xiàng)目,可以看到剛才的上傳組件變成正常大小啦


image.png

踩過的幾個(gè)坑:

  1. 一開始沒想到replace函數(shù)可以直接用替換函數(shù)笼痹,還在那里自己拼字符串配喳,如下:
  var result = exp.exec(line);
  var out = line;
  if (result !== null) {
    out = line.substring(0, result.index) + parseInt(result[1])*2 + line.substring(result.index+result[1].length);
  }

但這也只能解決一行只出現(xiàn)一次px的情況,如果有多個(gè)匹配串凳干,拼起來(lái)太痛苦了晴裹,就想著px轉(zhuǎn)rem的工具肯定已經(jīng)解決了這個(gè)問題,所以屁顛屁顛跑去參考了px2rem的源碼(思路!!!)纺座,發(fā)現(xiàn)replace可以這么用息拜,馬上解決了我的痛點(diǎn),開心!

  1. 本來(lái)想每行處理的時(shí)候順便寫入到文件少欺,但寫入文件的過程是異步的喳瓣,所以生成出來(lái)的文件會(huì)錯(cuò)位。一般css文件都不會(huì)很大赞别,因此我直接把結(jié)果緩存起來(lái)畏陕,最后一起寫入文件。畢竟讀寫文件的開銷比較大仿滔。

本人初入移動(dòng)端惠毁,希望各位多多吐槽,一起討論解決問題的思路崎页。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末鞠绰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子飒焦,更是在濱河造成了極大的恐慌蜈膨,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牺荠,死亡現(xiàn)場(chǎng)離奇詭異翁巍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)休雌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門灶壶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人杈曲,你說(shuō)我怎么就攤上這事驰凛。” “怎么了担扑?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵洒嗤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我魁亦,道長(zhǎng)渔隶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任洁奈,我火速辦了婚禮间唉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘利术。我一直安慰自己呈野,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布印叁。 她就那樣靜靜地躺著被冒,像睡著了一般军掂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昨悼,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天蝗锥,我揣著相機(jī)與錄音,去河邊找鬼率触。 笑死终议,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的葱蝗。 我是一名探鬼主播穴张,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼两曼!你這毒婦竟也來(lái)了皂甘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悼凑,失蹤者是張志新(化名)和其女友劉穎叮贩,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佛析,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年彪蓬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寸莫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡档冬,死狀恐怖膘茎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情酷誓,我是刑警寧澤披坏,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站盐数,受9級(jí)特大地震影響棒拂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜玫氢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一帚屉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漾峡,春花似錦攻旦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)且预。三九已至,卻和暖如春烙无,著一層夾襖步出監(jiān)牢的瞬間锋谐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工皱炉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留怀估,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓合搅,卻偏偏與公主長(zhǎng)得像多搀,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灾部,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 剛開始做移動(dòng)端web開發(fā)的同學(xué)應(yīng)該都碰到過頁(yè)面適配問題康铭,為什么我在開發(fā)手機(jī)上調(diào)試好的頁(yè)面在其他手機(jī)會(huì)有這樣或那樣的...
    留七七閱讀 19,356評(píng)論 5 80
  • 在移動(dòng)互聯(lián)網(wǎng)快速發(fā)展的今天,手機(jī)的種類和尺寸越來(lái)越多赌髓,作為前端的小伙伴們可能會(huì)越來(lái)越頭疼从藤,但又不得不去適配一款又一...
    keenjaan閱讀 26,816評(píng)論 9 86
  • rem布局之媒體匹配 最早的時(shí)候用的rem適配方法,通過手動(dòng)設(shè)置媒體查詢對(duì)不同設(shè)備進(jìn)行設(shè)置font-size 當(dāng)然...
    AkiraSun閱讀 31,609評(píng)論 3 71
  • 在我們學(xué)習(xí)如何進(jìn)行屏幕適配之前锁蠕,我們需要先了解下為什么Android需要進(jìn)行屏幕適配夷野。 由于Android系統(tǒng)的開...
    知青的葉閱讀 1,502評(píng)論 0 2
  • 生活就像一幅巨大的油畫,豐富多彩荣倾,當(dāng)筆尖點(diǎn)綴在畫板上悯搔,那栩栩如生的畫面讓我對(duì)生活有了無(wú)比的向往,豐富的層次畫...
    lucky秀_b07c閱讀 1,726評(píng)論 0 4