久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      知名網(wǎng)站的移動前端自適應解決方案和比較

      互聯(lián)網(wǎng)上的自適應方案到底有幾種呢?就我個人實踐所知,有這么幾種方案:

      1. 固定一個某些寬度,使用一個模式,加上少許的媒體查詢方案

      2. 使用flexbox解決方案

      3. 使用百分比加媒體查詢

      4. 使用rem

      淘寶最近開源的一個框架和網(wǎng)易的框架有同工之異。都是采用rem實現(xiàn)一稿解決所有設置自適應。在沒出來這種方案之前,第一種做法的人數(shù)也不少。類似以下說到的拉鉤網(wǎng)??匆幌铝髟浦T葛的文章。

      以下摘自:從網(wǎng)易與淘寶的font-size思考前端設計稿與工作流

      1. 簡單問題簡單解決

      我覺得有些web app并一定很復雜,比如拉勾網(wǎng),你看看它的頁面在iphone4,iphone6,ipad下的樣子就知道了:

      知名網(wǎng)站的移動前端自適應解決方案和比較知名網(wǎng)站的移動前端自適應解決方案和比較

      知名網(wǎng)站的移動前端自適應解決方案和比較

      它的頁面有一個特點,就是:

      • 頂部與底部的bar不管分辨率怎么變,它的高度和位置都不變

      • 中間每條招聘信息不管分辨率怎么變,招聘公司的圖標等信息都位于條目的左邊,薪資都位于右邊

      這種app是一種典型的彈性布局:關鍵元素高寬和位置都不變,只有容器元素在做伸縮變換。對于這類app,記住一個開發(fā)原則就好:文字流式,控件彈性,圖片等比縮放。以圖描述:

      知名網(wǎng)站的移動前端自適應解決方案和比較

      這個規(guī)則是一套基本的適配規(guī)則,對于這種簡單app來說已經(jīng)足夠,同時它也是后面要說的rem布局的基礎。另外對于拉勾這種app可能需要額外媒介查詢對布局進行調(diào)整的就是小屏幕設備。舉例來說,因為現(xiàn)在很多設計稿是根據(jù)iphone6的尺寸來的,而iphon6設備寬的邏輯的像素是375px,而iphone4的邏輯像素是320個像素,所以如果你根據(jù)設計稿做出來的東西,在iphone4里面可能顯示不下,比如說拉鉤網(wǎng)底部那個下載框,你對比看下就知道了,這是4:

      知名網(wǎng)站的移動前端自適應解決方案和比較

      這是6:

      知名網(wǎng)站的移動前端自適應解決方案和比較

      6下面兩邊的間距比4多很多,說明拉勾對4肯定是做過適配的,從代碼也可以證實這一點:

      知名網(wǎng)站的移動前端自適應解決方案和比較

      不過如果你拿到的是根據(jù)4的設計稿,那就沒有問題,比4分辨率大的設備肯定能顯示根據(jù)4的尺寸做出來的東西。

      還有一點,這種情況css尺寸單位用px就好,不要用rem,避免增加復雜度。

      2. 網(wǎng)易的做法

      先來看看網(wǎng)易在不同分辨率下,呈現(xiàn)的效果:

      知名網(wǎng)站的移動前端自適應解決方案和比較知名網(wǎng)站的移動前端自適應解決方案和比較

      知名網(wǎng)站的移動前端自適應解決方案和比較知名網(wǎng)站的移動前端自適應解決方案和比較

      從上面幾張圖可以看出,隨著分辨率的增大,頁面的效果會發(fā)生明顯變化,主要體現(xiàn)在各個元素的寬高與間距。375*680的比320*680的導航欄明顯要高。能夠達到這種效果的根本原因就是因為網(wǎng)易頁面里除了font-size之外的其它css尺寸都使用了rem作為單位,比如你看導航欄的高度設置代碼:

      知名網(wǎng)站的移動前端自適應解決方案和比較

      可是在本文第1部分提到,使用rem布局結合在html上根據(jù)不同分辨率設置不同font-size有很多不好解決的麻煩,網(wǎng)易是如何解決的呢?最根本的原因在于,網(wǎng)易頁面上html的font-size不是預先通過媒介查詢在css里定義好的,而是通過JS計算出來的,所以當分辨率發(fā)生變化時,html的font-size就會變,不過這得在你調(diào)整分辨率后,刷新頁面才能看得到效果。你看代碼就知道為啥font-size是直接寫到html的style上面的了(js設置的原因):

      知名網(wǎng)站的移動前端自適應解決方案和比較

      它是根據(jù)什么計算的,這就跟設計稿有關了,拿網(wǎng)易來說,它的設計稿應該是基于iphone4或者iphone5來的,所以它的設計稿豎直放時的橫向分辨率為640px,為了計算方便,取一個100px的font-size為參照,那么body元素的寬度就可以設置為width: 6.4rem,于是html的font-size=deviceWidth / 6.4。這個deviceWidth就是viewport設置中的那個deviceWidth。根據(jù)這個計算規(guī)則,可得出本部分開始的四張截圖中html的font-size大小如下:

      deviceWidth = 320,font-size = 320 / 6.4 = 50px  deviceWidth = 375,font-size = 375 / 6.4 = 58.59375px  deviceWidth = 414,font-size = 414 / 6.4 = 64.6875px  deviceWidth = 500,font-size = 500 / 6.4 = 78.125px

      事實上網(wǎng)易就是這么干的,你看它的代碼就知道,body元素的寬是:

      知名網(wǎng)站的移動前端自適應解決方案和比較

      根據(jù)這個可以肯定它的設計稿豎著時的橫向分辨率為640。然后你再看看網(wǎng)易在分辨率為320*680,375*680,414*680,500*680時,html的font-size是不是與上面計算的一致:

      知名網(wǎng)站的移動前端自適應解決方案和比較320*680

      知名網(wǎng)站的移動前端自適應解決方案和比較375*680

      知名網(wǎng)站的移動前端自適應解決方案和比較414*680

      知名網(wǎng)站的移動前端自適應解決方案和比較500*680

      這個deviceWidth通過document.documentElement.clientWidth就能取到了,所以當頁面的dom ready后,做的第一件事情就是:

      document.documentElement.style.fontSize = document.documentElement.clientWidth / 6.4 + 'px';

      這個6.4怎么來的,當然是根據(jù)設計稿的橫向分辨率/100得來的。下面總結下網(wǎng)易的這種做法:

      • (1)先拿設計稿豎著的橫向分辨率除以100得到body元素的寬度:

        如果設計稿基于iphone6,橫向分辨率為750,body的width為750 / 100 = 7.5rem  如果設計稿基于iphone4/5,橫向分辨率為640,body的width為640 / 100 = 6.4rem
      • (2)布局時,設計圖標注的尺寸除以100得到css中的尺寸,比如下圖:

      • 知名網(wǎng)站的移動前端自適應解決方案和比較

      • 播放器高度為210px,寫樣式的時候css應該這么寫:height: 2.1rem。之所以取一個100作為參照,就是為了這里計算rem的方便!

      • (3)在dom ready以后,通過以下代碼設置html的font-size:

        document.documentElement.style.fontSize = document.documentElement.clientWidth / 6.4 + 'px';
      • 6.4只是舉個例子,如果是750的設計稿,應該除以7.5。

      • (4)font-size可能需要額外的媒介查詢,并且font-size不能使用rem,如網(wǎng)易的設置:

        @media screen and (max-width:321px){      .m-navlist{font-size:15px}  }    @media screen and (min-width:321px) and (max-width:400px){      .m-navlist{font-size:16px}  }    @media screen and (min-width:400px){      .m-navlist{font-size:18px}  }

      最后還有2個情況要說明:

      第一,如果采用網(wǎng)易這種做法,視口要如下設置:

      <meta name="viewport" content="initial-scale=1,maximum-scale=1, minimum-scale=1">

      第二,當deviceWidth大于設計稿的橫向分辨率時,html的font-size始終等于橫向分辨率/body元素寬:

      知名網(wǎng)站的移動前端自適應解決方案和比較640*680

      知名網(wǎng)站的移動前端自適應解決方案和比較641*680

      之所以這么干,是因為當deviceWidth大于640時,則物理分辨率大于1280(這就看設備的devicePixelRatio這個值了),應該去訪問pc網(wǎng)站了。事實就是這樣,你從手機訪問網(wǎng)易,看到的是觸屏版的頁面,如果從pad訪問,看到的就是電腦版的頁面。如果你也想這么干,只要把總結中第三步的代碼稍微改一下就行了:

      var deviceWidth = document.documentElement.clientWidth;  if(deviceWidth > 640) deviceWidth = 640;  document.documentElement.style.fontSize = deviceWidth / 6.4 + 'px';

      3. 淘寶的做法

      看看淘寶在不同分辨率下,呈現(xiàn)的效果:

      知名網(wǎng)站的移動前端自適應解決方案和比較知名網(wǎng)站的移動前端自適應解決方案和比較知名網(wǎng)站的移動前端自適應解決方案和比較

      淘寶的效果跟網(wǎng)易的效果其實是類似的,隨著分辨率的變化,頁面元素的尺寸和間距都相應變化,這是因為淘寶的尺寸也是使用了rem的原因。在介紹它的做法之前,先來了解一點關于viewport的知識,通常我們采用如下代碼設置viewport:

      <meta name="viewport"   content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

      這樣整個網(wǎng)頁在設備內(nèi)顯示時的頁面寬度就會等于設備邏輯像素大小,也就是device-width。這個device-width的計算公式為:

      設備的物理分辨率/(devicePixelRatio * scale),在scale為1的情況下,device-width = 設備的物理分辨率/devicePixelRatio 。

      devicePixelRatio稱為設備像素比,每款設備的devicePixelRatio都是已知,并且不變的,目前高清屏,普遍都是2,不過還有更高的,比如2.5, 3 等,我魅族note的手機的devicePixelRatio就是3。淘寶觸屏版布局的前提就是viewport的scale根據(jù)devicePixelRatio動態(tài)設置:

      知名網(wǎng)站的移動前端自適應解決方案和比較在devicePixelRatio為2的時候,scale為0.5

      知名網(wǎng)站的移動前端自適應解決方案和比較在devicePixelRatio為3的時候,scale為0.3333

      這么做目的當然是為了保證頁面的大小與設計稿保持一致了,比如設計稿如果是750的橫向分辨率,那么實際頁面的device-width,以iphone6來說,也等于750,這樣的話設計稿上標注的尺寸只要除以某一個值就能夠轉換為rem了。通過js設置viewport的方法如下:

      var scale = 1 / devicePixelRatio;  document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');

      淘寶布局的第二個要點,就是html元素的font-size的計算公式,font-size = deviceWidth / 10:

      知名網(wǎng)站的移動前端自適應解決方案和比較

      接下來要解決的問題是,元素的尺寸該如何計算,比如說設計稿上某一個元素的寬為150px,換算成rem應該怎么算呢?這個值等于設計稿標注尺寸/該設計稿對應的html的font-size。拿淘寶來說的,他們用的設計稿是750的,所以html的font-size就是75,如果某個元素時150px的寬,換算成rem就是150 / 75 = 2rem。總結下淘寶的這些做法:

      • (1)動態(tài)設置viewport的scale

        var scale = 1 / devicePixelRatio;  document.querySelector('meta[name="viewport"]').setAttribute('content','initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');
      • (2)動態(tài)計算html的font-size

        document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px';
      • (3)布局的時候,各元素的css尺寸=設計稿標注尺寸/設計稿橫向分辨率/10

      • (4)font-size可能需要額外的媒介查詢,并且font-size不使用rem,這一點跟網(wǎng)易是一樣的。

      最后還有一個情況要說明,跟網(wǎng)易一樣,淘寶也設置了一個臨界點,當設備豎著時橫向物理分辨率大于1080時,html的font-size就不會變化了,原因也是一樣的,分辨率已經(jīng)可以去訪問電腦版頁面了。

      知名網(wǎng)站的移動前端自適應解決方案和比較

      知名網(wǎng)站的移動前端自適應解決方案和比較

      關于這種做法的具體實現(xiàn),淘寶已經(jīng)給我們提供了一個開源的解決方案,具體請查看:

      https://github.com/amfe/lib-flexible

      之前沒有找到這相關的資料,實在不好意思:(

      4. 比較網(wǎng)易與淘寶的做法

      共同點:

      • 都能適配所有的手機設備,對于pad,網(wǎng)易與淘寶都會跳轉到pc頁面,不再使用觸屏版的頁面

      • 都需要動態(tài)設置html的font-size

      • 布局時各元素的尺寸值都是根據(jù)設計稿標注的尺寸計算出來,由于html的font-size是動態(tài)調(diào)整的,所以能夠做到不同分辨率下頁面布局呈現(xiàn)等比變化

      • 容器元素的font-size都不用rem,需要額外地對font-size做媒介查詢

      • 都能應用于尺寸不同的設計稿,只要按以上總結的方法去用就可以了

      不同點

        • 淘寶的設計稿是基于750的橫向分辨率,網(wǎng)易的設計稿是基于640的橫向分辨率,還要強調(diào)的是,雖然設計稿不同,但是最終的結果是一致的,設計稿的尺寸一個公司設計人員的工作標準,每個公司不一樣而已

        • 淘寶還需要動態(tài)設置viewport的scale,網(wǎng)易不用

        • 最重要的區(qū)別就是:網(wǎng)易的做法,rem值很好計算,淘寶的做法肯定得用計算器才能用好了 。不過要是你使用了less和sass這樣的css處理器,就好辦多了,以淘寶跟less舉例,我們可以這樣編寫less:

      //定義一個變量和一個mixin
      @baseFontSize: 75;//基于視覺稿橫屏尺寸/100得出的基準font-size  .px2rem(@name, @px){      @{name}: @px / @baseFontSize * 1rem;  }
      //使用示例:
      .container {      .px2rem(height, 240);  }
      //less翻譯結果:  .container {      height: 3.2rem;  }

      5. 如何與設計協(xié)作

      前端與設計師的協(xié)作應該是比較簡單的,最重要的是要規(guī)范設計提供給你的產(chǎn)物,通常對于前端來說,我們需要設計師提供標注尺寸后的設計稿以及各種元素的切圖文件,有了這些就可以開始布局了。考慮到Retina顯示屏以及這么多移動設備分辨率卻不一樣的問題,那么設計師應該提供多套設計稿嗎?從網(wǎng)易和淘寶的做法來看,應該是不用了,我們可以按照設計稿,先做出一套布局,按照以上方法做適配,由于是等比適配,所以各個設備的視覺效果差異應該會很小,當然也排除不了一些需要媒介查詢特殊處理的情況,這肯定避免不了的。下面這張圖是淘寶設計師分享的他們的工作流程:

      知名網(wǎng)站的移動前端自適應解決方案和比較

      解釋一下就是:

      第一步,視覺設計階段,設計師按寬度750px(iphone 6)做設計稿,除圖片外所有設計元素用矢量路徑來做。設計定稿后在750px的設計稿上做標注,輸出標注圖。同時等比放大1.5倍生成寬度1125px的設計稿,在1125px的稿子里切圖。

      第二步,輸出兩個交付物給開發(fā)工程師:一個是程序用到的@3x切圖資源,另一個是寬度750px的設計標注圖。

      第三步,開發(fā)工程師拿到750px標注圖和@3x切圖資源,完成iPhone 6(375pt)的界面開發(fā)。此階段不能用固定寬度的方式開發(fā)界面,得用自動布局(auto layout),方便后續(xù)適配到其它尺寸。

      第四步,適配調(diào)試階段,基于iPhone 6的界面效果,分別向上向下調(diào)試iPhone 6 plus(414pt)和iPhone 5S及以下(320pt)的界面效果。由此完成大中小三屏適配。

      注意第三步,就要使用我們以上介紹的網(wǎng)易跟淘寶的適配方法了。假如公司設計稿不是基于750的怎么辦,其實很簡單,按上圖做一些相應替換即可,但是流程和方法還是一樣的。解釋一下為什么要在@3x的圖里切,這是因為現(xiàn)在市面上也有不少像魅藍note這種超高清屏幕,devicePixelRatio已經(jīng)達到3了,這個切圖保證在所有設備都清晰顯示。

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號