国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

移動(dòng)端的3種適配方法

SwordFly / 3304人閱讀

摘要:做移動(dòng)端頁面以來,經(jīng)常會聽說移動(dòng)端的適配這個(gè)問題,但是并沒有認(rèn)真分析過是如何適配各種機(jī)型的。目前公司用的是手淘的進(jìn)行頁面適配的。手淘那個(gè)還有的地方看不懂,還是自己太了,但是看不懂車不影響老司機(jī)開車。

做移動(dòng)端頁面以來,經(jīng)常會聽說移動(dòng)端的適配這個(gè)問題,但是并沒有認(rèn)真分析過是如何適配各種機(jī)型的。目前公司用的是手淘的flexible.js進(jìn)行頁面適配的。適配的根本原理其實(shí)就是將設(shè)計(jì)稿按一定的比例在不同的手機(jī)上實(shí)現(xiàn)。

在分析移動(dòng)段適配之前首先要了解一下rem, css3的一個(gè)相對長度單位。既然是相對長度,那就有一個(gè)參照體了,rem就是相對于html元素的font-size計(jì)算值的倍數(shù)。即1rem 等于一倍的html元素的font-size值。

接下來分析一下三種移動(dòng)端適配的方法 一、@media + rem
最早看到這個(gè)適配是在同事的代碼里,當(dāng)時(shí)并不知到是什么原理,也并不明白這些數(shù)字是怎么來的。
@media screen and (min-width:350px){
    html{font-size:342%;}
}
@media screen and (min-width:360px){
    html{font-size:351.56%;}
}
@media screen and (min-width:375px){
    html{font-size:366.2%;}
}
@media screen and (min-width:384px){
    html{font-size:375%;}
}
@media screen and (min-width:390px){
    html{font-size:380.85%;}
}
@media screen and (min-width:393px){    /* 小米NOTE */
    html{font-size:383.79%;}
}
@media screen and (min-width:410px){
    html{font-size:400%;}
}
@media screen and (min-width:432px){ /* 魅族3 */
    html{font-size:421.875%;}
}
@media screen and (min-width:480px){
    html{font-size:469%;}
}
@media screen and (min-width:540px){
    html{font-size:527.34%;}
}
@media screen and (min-width:640px){
    html{font-size: 625%;}
}

@media screen and (width:720px){
    html{font-size: 703.125%;}
}
@media
媒體查詢, 可以針對不同的屏幕尺寸設(shè)置不同的樣式,特別是如果你需要設(shè)置設(shè)計(jì)響應(yīng)式的頁面,@media 是非常有用的。當(dāng)你重置瀏覽器大小的過程中,頁面也會根據(jù)瀏覽器的寬度和高度重新渲染頁面。

上述代碼中,第一個(gè)@media screen and (min-width:350px)表示當(dāng)移動(dòng)設(shè)備的寬度大于350px的時(shí)候頁面將使用花括號內(nèi)的樣式,即將html根元素的字號設(shè)置為342%。(max-width:350px,則表示設(shè)備寬度小于350px時(shí)將采用此樣式)。上述css代碼的作用可見就是在不同分辨率的設(shè)備上設(shè)置不同的html字體大小。

為什么要這樣設(shè)置呢?因?yàn)檫@種適配方法用的是css3的rem來進(jìn)行適配的,而前面講了,rem是相對于html的字號來計(jì)算的,現(xiàn)在不同的設(shè)備上html的字號改變了,也就意味這1rem代表的px像素值不同了,也就達(dá)到了按比例在不同設(shè)備上適配同一個(gè)頁面的效果了。

html元素的font-size值又是怎么確定的呢?拿下面的舉例:

@media screen and (min-width:375px){
    html{font-size:366.2%;}
}

屏幕寬度大于375px的會按照寬度375px來適配。設(shè)計(jì)同時(shí)平時(shí)給我們的設(shè)計(jì)稿一般是640px寬度或者750px寬度的,而我們上面的都是假定設(shè)計(jì)稿是640px寬來計(jì)算的,750px也是同理計(jì)算。現(xiàn)在:

1.屏幕寬度是375,設(shè)計(jì)稿寬度是640,ratio = 375/640=0.5859375;
2.我們要將設(shè)計(jì)稿上元素用css單位rem寫下來,那么該如何轉(zhuǎn)換,1rem應(yīng)該等于稿子上多少px。
這里我們設(shè)定1rem = 100px ;可以設(shè)定其它值嗎,當(dāng)然可以,這里設(shè)置為100只是方便我們在寫css的時(shí)候好計(jì)算,小數(shù)點(diǎn)直接左移兩位就可以了。比如,設(shè)計(jì)稿上一個(gè)寬46px按鈕,這樣轉(zhuǎn)換成rem直接就是0.46rem。
3.現(xiàn)在1rem代表設(shè)計(jì)稿上100px,那么又該是等于設(shè)備上最后真實(shí)的多少像素呢。就要用到前面的屏幕寬度和設(shè)計(jì)稿的寬度比 ratio,設(shè)計(jì)稿上100px代表了真實(shí)的設(shè)備100*ratio = 58.59375px。
換句話說 css中寫的1rem等于設(shè)備58.59375px。又因?yàn)?rem等于1倍的html元素的font-size,所以這里的html元素的font-size最終應(yīng)該設(shè)置成58.59375px。可為什么上述代碼中用的是百分比呢?因?yàn)橐话銥g覽器中html元素的默認(rèn)字號都是16px,但是當(dāng)用戶放大或者縮小瀏覽器字號設(shè)置時(shí),就不會是16px了,所以我們將html的font-size還是設(shè)置成百分比更好,即 58.59375/16= 366.2109375%,也就是上面例子中的366.2%了。

其它的屏幕上也是同此道理計(jì)算出html的font-size值的。

@media + rem適配移動(dòng)端還有一個(gè)不可少的條件就是要在head標(biāo)簽中寫入一個(gè)meta標(biāo)簽。 ;關(guān)于viewport的了解可以看這里。此標(biāo)簽的作用是讓layout viewport = visual viewport,用戶也不可縮放頁面。

二、手機(jī)淘寶 flexible.js

flexible.js也是rem適配的,它是將設(shè)備分成10份,1rem等于1/10。分析其中部分代碼:

   var devicePixelRatio = win.devicePixelRatio;

        dpr = devicePixelRatio || 1;
        if (isIPhone) {

            // 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;
        
       ......
       .......
        
       metaEl.setAttribute("content", "initial-scale=" + scale + ", maximum-scale=" + scale + ", minimum-scale=" + scale + ", user-scalable=no");

win.devicePixelRatio(簡稱dpr),即設(shè)備像素比(戳我了解)

上述代碼當(dāng)dpr(設(shè)備物理像素和設(shè)備獨(dú)立像素比)為3時(shí)候,頁面縮入1/3,dpr為2時(shí),頁面綻放2/1。

   function refreshRem(){
        var width = docEl.getBoundingClientRect().width;
        if (width / dpr > 750) {
            width = 750 * dpr;
        }
        var rem = width / 10;
        docEl.style.fontSize = rem + "px";
        flexible.rem = win.rem = rem;
    }

上述代碼將1rem設(shè)置成了設(shè)備真實(shí)寬度的1/10,因此html根元素的fontSize也就是設(shè)備真實(shí)寬度的1/10,假如設(shè)計(jì)老鐵們給的漂亮稿子是750px寬的,寫scss時(shí)1rem也就應(yīng)該等于75px,那邊我么的scss文件可以這樣寫:

@function px2rem($px, $base: 75) {
    @return ($px / $base) * 1rem;
}
/*
稿子上量得某按鈕寬60px,高20px
*/
.btn{
    width:px2rem(60);
    height:px2rem(20);
}
三、vw,vh進(jìn)行適配

vw:viewport width(可視窗口寬度)
vh:viewport height(可視窗口高度)
vw和vh等詳情可以點(diǎn)這里
1vw等于1%的設(shè)備寬度(設(shè)計(jì)稿寬度),1vh等于1%的設(shè)備高度(設(shè)計(jì)稿高度),這樣看來vw,vh其它是最方便的,但是目前兼容性不是特別好。

所以只有在不需要考慮兼容的時(shí)候可以用這個(gè)相對最簡便的適配方案了,比如一些混合開發(fā)里,app內(nèi)的瀏覽器如果支持vw、vh,只在app內(nèi)使用的頁面就可以放心大膽的用了。像下面的

客戶端內(nèi)的右下角webview,一個(gè)小的PK對決頁面,這里就是用的vw,vh進(jìn)行適配的。
/*右下角窗口設(shè)計(jì)稿寬200px,高220px*/
@function px2vw($px, $base: 200) {
  @return ($px/($base/100)) + vw;
}
@function px2vh($px, $base: 220) {
  @return ($px/($base/100)) + vh;
}
/*頭像寬42px,高42px*/
.avantar{
    width:px2vw(42);
    heightx:px2vh(42);
}

目前工作中用到的就是后面的兩種適配方案了。手淘那個(gè)還有的地方看不懂,還是自己太Low了,但是看不懂車不影響老司機(jī)開車。

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

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/105349.html

相關(guān)文章

  • 移動(dòng)端的3適配方法

    摘要:做移動(dòng)端頁面以來,經(jīng)常會聽說移動(dòng)端的適配這個(gè)問題,但是并沒有認(rèn)真分析過是如何適配各種機(jī)型的。目前公司用的是手淘的進(jìn)行頁面適配的。手淘那個(gè)還有的地方看不懂,還是自己太了,但是看不懂車不影響老司機(jī)開車。 做移動(dòng)端頁面以來,經(jīng)常會聽說移動(dòng)端的適配這個(gè)問題,但是并沒有認(rèn)真分析過是如何適配各種機(jī)型的。目前公司用的是手淘的flexible.js進(jìn)行頁面適配的。適配的根本原理其實(shí)就是將設(shè)計(jì)稿按一定的...

    dockerclub 評論0 收藏0
  • 我對移動(dòng)適配的了解

    摘要:隨著移動(dòng)端的發(fā)展,在手機(jī)上看電腦端的頁面已成為非常普及現(xiàn)象。方案一固定高度,使其寬度自適應(yīng)這也是我接觸移動(dòng)端適配第一次使用的方案。 不知不覺做前端已經(jīng)兩年了,從PC端,移動(dòng)端,微信小程序一路走來到今天剛剛開放注冊的快應(yīng)用(手機(jī)廠商對抗小程序的新技能,所以在注冊時(shí)用的是qq郵箱的話要去垃圾箱里才能找到注冊郵件),對于前端圈日新月異的磅礴發(fā)展對于大前端發(fā)展是喜聞樂見的,這次的快應(yīng)用的手機(jī)廠...

    import. 評論0 收藏0
  • 我對移動(dòng)適配的了解

    摘要:隨著移動(dòng)端的發(fā)展,在手機(jī)上看電腦端的頁面已成為非常普及現(xiàn)象。方案一固定高度,使其寬度自適應(yīng)這也是我接觸移動(dòng)端適配第一次使用的方案。 不知不覺做前端已經(jīng)兩年了,從PC端,移動(dòng)端,微信小程序一路走來到今天剛剛開放注冊的快應(yīng)用(手機(jī)廠商對抗小程序的新技能,所以在注冊時(shí)用的是qq郵箱的話要去垃圾箱里才能找到注冊郵件),對于前端圈日新月異的磅礴發(fā)展對于大前端發(fā)展是喜聞樂見的,這次的快應(yīng)用的手機(jī)廠...

    snowLu 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<