成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

移動端頁面布局及字體大小該如何設(shè)置

nevermind / 2667人閱讀

摘要:首先是屏幕問題,現(xiàn)在主流的移動設(shè)備以安卓和為主,我們在制作移動端頁面也是以兼容這兩種設(shè)備去布局。而其實目前安卓,很多的設(shè)備還是比較常見的了,所以我們這里,將之前對設(shè)備的判斷,轉(zhuǎn)變成對是否是整數(shù)的一個判斷。

之前發(fā)過一篇文章《移動端應(yīng)該如何動態(tài)設(shè)置字體大???》,主要說了移動web端布局的一些解決方法,本文再一次把這個問題提出來,并分別對安卓和IOS設(shè)備的屏幕了解做出自己的分享,在進入正文之前最好先了解:物理像素邏輯像素、DPRRem

那么進入正文,不廢話,直接把自己了解到的和一些看法說出來。

首先是屏幕問題,現(xiàn)在主流的移動設(shè)備以安卓和IOS為主,我們在制作移動端頁面也是以兼容這兩種設(shè)備去布局。

首先說iPhone,不得不說iPhone的屏幕考慮到了我們開發(fā)者的難處,從而給出iPhone屏幕的dpr都是整數(shù)值,在6plus出現(xiàn)之前,iphone的dpr始終是2(物理像素/邏輯像素=2),即使是6plus出現(xiàn)了,iphone到底其實也就只有2,3這兩個dpr。其實6plus的實際dpr并不是整數(shù),而是2.87左右,不過,為了方便開發(fā)者來開發(fā),iphone6plus對其做了一個調(diào)整,將dpr調(diào)整為3,然后在對屏幕進行了一個縮放。所以我們很容易對其做到兼顧。

而安卓的dpr值,并不像iphone那樣就只有兩個值。安卓的dpr是千奇百怪的,可能是1.5,2,3,4,2.5等等的都有。(甚至我還看到了1.7之類的,安卓的各個設(shè)備商,玩的真尼瑪high啊。怎么高興怎么來。)

那么現(xiàn)在開始說說移動端怎么布局以及字體該怎么設(shè)置,因為有各種各樣的解決方式,我就不一一贅述,直接說手淘的解決方案:flexible.js

我為什么又一次把這個拿出來說,主要有兩點原因:1.我覺得它好用,解決方式簡單粗暴。2.它經(jīng)過了比較長時間的考驗,如今手淘還在用它。

具體的使用方法自己可以去flexible.js看看,這里我簡單說說它的方案以及個人對它的改良。

我們UI在制作移動端頁面時,主流的寬度有640、750或者還有其他尺寸,這里我們用640做為例子,那么手淘的做法就是將640的寬度分為10份,每份是64,那么1個rem=64px,也就是說此時 html{font-size:64px;},比如設(shè)計稿中有個元素寬64px,高128px,那么這個div的寬用rem表示就是:64(設(shè)計稿元素的寬)/64(1rem為64px)=該元素計算出的rem值,同理高度從px換成rem就是128/64=2rem樣式就是div{width:1rem;height:2rem;}。然后再配上flexible.js的代碼段:

function refreshRem(){
        var width = docEl.getBoundingClientRect().width;
        if (width / dpr > 540) {
            width = 540 * dpr;
        }
        var rem = width / 10;//看到了嗎 看到了嗎 這句話 分成10份哦
        docEl.style.fontSize = rem + "px";
        flexible.rem = win.rem = rem;
    }

對于布局,我們可以使用rem去結(jié)局,那么字體呢?

大家知道,現(xiàn)在PC端主流的字體大小都是類似12px、14px、16px,幾乎沒有13、15、17這樣的數(shù)字出現(xiàn),至于為什么,請進穿越門了解。如果我們用rem做為字體單位,那么轉(zhuǎn)成px的時候,勢必會出現(xiàn)奇數(shù)或者小數(shù)的情況,為了避免這種情況,我們還是要用px做為字體的單位。那么又如何用px去當(dāng)作字體大小呢?

首先看這段代碼:

div {
    width: 1rem; 
    height: 0.4rem;
    font-size: 12px; // 默認(rèn)寫上dpr為1的fontSize
}

[data-dpr="2"] div {
    font-size: 24px;
}

[data-dpr="3"] div {
    font-size: 36px;
}

沒有錯,手淘的解決方案就是默認(rèn)寫個dpr為1時的字體大小,然后根據(jù)不同dpr下的值去匹配不同的字體大小。

flexible會獲取設(shè)備的dpr值,然后在html標(biāo)簽上自定義data-dpr屬性,并放入dpr值,后面的font-size就是動態(tài)設(shè)置一個rem單位的大小。

其實我覺得這種方案挺惡心的,每個牽扯到字體的大小就必須多些幾套去兼容,但這也算是個方案。

最后就是對flexible.js的看法,話不多說上代碼:

if (!dpr && !scale) {
        var isAndroid = win.navigator.appVersion.match(/android/gi);
        var isIPhone = win.navigator.appVersion.match(/iphone/gi);
        var devicePixelRatio = win.devicePixelRatio;
        if (isIPhone) {//只對iPhone做了處理!?。?!
            // iOS下,對于2和3的屏,用2倍的方案,其余的用1倍方案
            if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {                
                dpr = 3;
            } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){
                dpr = 2;
            } else {
                dpr = 1;
            }
        } else {
            // 其他設(shè)備下,仍舊使用1倍的方案
            dpr = 1;
        }
        scale = 1 / dpr;
    }

可以看出,flexible中動態(tài)設(shè)置dpr時,只對iPhone進行了處理,完全沒有把安卓放在眼里,那安卓怎么辦?這里我又想吐槽安卓那些廠商,真尼瑪瞎搞,dpr設(shè)置成各種非主流數(shù)值,玩死我們這些碼農(nóng)了,連flexible都不想管了。吐槽到此為止,那么該怎么改良它,讓它能對安卓手機也能動態(tài)設(shè)置dpr呢?我們將這段代碼改一下:

if (!dpr && !scale) {
    //devicePixelRatio這個屬性是可以獲取到設(shè)備的dpr
    var devicePixelRatio = win.devicePixelRatio;
    //判斷dpr是否為整數(shù)
    var isRegularDpr = devicePixelRatio.toString().match(/^[1-9]d*$/g)
    if (isRegularDpr) {
    // 對于是整數(shù)的dpr,對dpr進行操作
     if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {                
        dpr = 3;
    } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){
        dpr = 2;
    } else {
        dpr = 1;
    }
} else {
    // 對于其他的dpr,人采用dpr為1的方案
    dpr = 1;
    }
    scale = 1 / dpr;
}

我們對這里做了一點點修改,即來判斷dpr是否是規(guī)則的,也就是是否是我們常見的1,2,3等,然后,我們只對規(guī)則的dpr,來進行一個字體的處理。這樣,iphone依然還是用之前的匹配方案。而其實目前安卓,很多的設(shè)備還是比較常見的dpr了,所以我們這里,將之前對設(shè)備的判斷,轉(zhuǎn)變成對dpr是否是整數(shù)的一個判斷。其他地方不變,可以解決對安卓dpr的部分匹配。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78536.html

相關(guān)文章

  • 移動布局與適配

    摘要:實戰(zhàn)之微信錢包騰訊服務(wù)界面網(wǎng)格布局是讓開發(fā)人員設(shè)計一個網(wǎng)格并將內(nèi)容放在這些網(wǎng)格內(nèi)。對于移動端適配,不同的公司不同的團隊有不同的解決方案。柵格系統(tǒng)用于處理頁面多終端適配的問題。 grid實戰(zhàn)之微信錢包 騰訊服務(wù)界面 CSS3網(wǎng)格布局是讓開發(fā)人員設(shè)計一個網(wǎng)格并將內(nèi)容放在這些網(wǎng)格內(nèi)。而不是使用浮動制作一個網(wǎng)格,實際上是你將一個元素聲明為一個網(wǎng)格容器,并把元素內(nèi)容置于網(wǎng)格中。 移動端頁面適配—...

    Clect 評論0 收藏0
  • px、em和rem實戰(zhàn)經(jīng)驗

    摘要:前言在自適應(yīng)布局或者移動端網(wǎng)頁開發(fā)時,我們經(jīng)常會用到和兩個長度單位。,相對長度單位。相對于當(dāng)前對象內(nèi)文本的字體尺寸。所有未經(jīng)調(diào)整的瀏覽器中都是。最大的優(yōu)點是提供一致尺寸,便于計算。為了還原設(shè)計稿和實現(xiàn)合理的布局所以需要根元素重寫。 前言 在自適應(yīng)布局或者移動端網(wǎng)頁開發(fā)時,我們經(jīng)常會用到em和rem兩個長度單位。接下來我們討論一下這兩個單位和px之間的區(qū)別,以及他們的使用場景等。 區(qū)別 ...

    xietao3 評論0 收藏0
  • 我的第一次移動頁面制作 — 總結(jié)與思考

    摘要:最近被分配到移動端開發(fā)組,支持某活動的頁面頁面制作。這算是我第一次真正接觸移動端頁面制作,下面就談?wù)剛€人總結(jié)和思考。這無疑會增強程序的可維護性。規(guī)范正如上面討論的,一個頁面由多個組成。的兼容性在安卓及以下是不支持的。 最近被分配到移動端開發(fā)組,支持某活動的頁面頁面制作。這算是我第一次真正接觸移動端頁面制作,下面就談?wù)剛€人總結(jié)和思考。 整體流程 開會大體講解、討論與排期 -> 交互設(shè)計 ...

    voyagelab 評論0 收藏0
  • 我的第一次移動頁面制作 — 總結(jié)與思考

    摘要:最近被分配到移動端開發(fā)組,支持某活動的頁面頁面制作。這算是我第一次真正接觸移動端頁面制作,下面就談?wù)剛€人總結(jié)和思考。這無疑會增強程序的可維護性。規(guī)范正如上面討論的,一個頁面由多個組成。的兼容性在安卓及以下是不支持的。 最近被分配到移動端開發(fā)組,支持某活動的頁面頁面制作。這算是我第一次真正接觸移動端頁面制作,下面就談?wù)剛€人總結(jié)和思考。 整體流程 開會大體講解、討論與排期 -> 交互設(shè)計 ...

    Cheng_Gang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<