移動開發之設計稿轉換頁面單位尺寸

来源:http://www.cnblogs.com/lovesong/archive/2016/04/27/5439756.html
-Advertisement-
Play Games

在寫這篇文章之前,我詢問了在唯品會和騰訊的童鞋、以及公司裡面前端大神(深哥),對於設計稿切圖的詳細方法,經過對比驗證,得出設計稿轉換頁面單位尺寸方法步驟。我分別詢問下麵四個問題: 1. 設計稿的單位是什麼,一般大小是什麼? 2. 頁面長度單位用什麼,px、em、rem,還是混合,如果用rem,htm ...


在寫這篇文章之前,我詢問了在唯品會和騰訊的童鞋、以及公司裡面前端大神(深哥),對於設計稿切圖的詳細方法,經過對比驗證,得出設計稿轉換頁面單位尺寸方法步驟。我分別詢問下麵四個問題:

1. 設計稿的單位是什麼,一般大小是什麼?

2. 頁面長度單位用什麼,px、em、rem,還是混合,如果用rem,html的font-size是多少?

3. 設計稿轉換成頁面長度的方法?

4. 如果做媒體查詢,合適的區間是什麼?

PS:他們都已設置viewport

Q&A

--朱姐(騰訊)回答

1. 設計稿的單位是px,一般是750px。

2. px、rem混合著用,rem的html font-size用16px。

3. 750px的設計圖以375px量長寬,例如設計圖裡有元素寬度是100px,那麼得到寬度會是 100px/2/16px = 3.125rem。

4. 根據設備寬度不同,設置不同的html 的font-size,這個區間並沒說明。

--濱神(唯品會)回答

1. 設計稿的單位是px,一般是 750px。

2. 限制用rem,rem的html font-size用312.5%(由於預設字體大小是16px,所以最終是16px * 312.5% = 50px)。

3. 750px的設計圖以375px量長寬,例如設計圖裡有元素寬度是100px,那麼得到寬度會是 100px/2/50px = 1rem。

4. 如果設置固定html font-size,那麼就需要弄媒體查詢;如果按不同設備寬度算出各自的font-size,就不用弄媒體查詢。

--深哥(公司大神)回答

1. 設計稿的單位是px,一般是1080px。

2. 建議是全部使用rem及百分比的方式,rem的html font-size用100px。

3. 1080px的設計圖以540px量長寬,例如設計圖裡有元素寬度是100px,那麼得到寬度會是 100px/2/100px = 0.5rem。

4. 按不同設備寬度算出各自的font-size,如果需要相容特殊設備(例如iPad),才要做媒體查詢。如果在iPad上的效果偏大,就要修改小一點字體,一般是76px,就可以跟手機差不多保持一致的效果了。

--得出結論

1. 設計稿的單位是px(PhotoShop出來當然是這個)。

2. 沒人頁面長度用em。

3. 元素長寬量取是設計圖裡的1/2。

這三個結論還並不能得出一個好的方案。

假設

為了簡化問題,做一個假設,假如世界上只有一種手機型號(恰好是iPhone6),那設計稿轉換的方式是怎麼樣的?

(1). 有張750px的設計稿,iPhone6的設備寬度375,取375為量取大小。

(2). 那麼設計稿裡面100px,在iPhone6顯示為100px / (750 /375 ) = 50px。

(3). 規定一個html font-size值 X(例如50px),那rem值就是 (50/X) rem (例如 50px/ 50px = 1rem)

這裡面可以很明顯看到,font-size值並沒有規定要用哪個值,它只是一個基數,元素的像素大小並不會因為這個基數有變化(所以上面問了三個人有三個不同的值,這沒問題的)。也由於我們以375量取大小,所以在iPhone6上效果是與設計稿一致的。另外不是rem也是可以的(第三步不做),直接用px, 更加簡單。

假設破滅

世界上當然有很多亂七八糟的機型,那如何在上面的基礎上做適配?

(1). 假如用的是px單位,又不做媒體查詢做適配。那麼可能在某些機型上偏大偏小,但是還能用。之所以可以這麼乾,是因為手機的設備寬度一般是在320-470之間,與375產生的偏差效果並不會很大,當然偏差越大差異越大。

(2). 假如用的是px單位,媒體查詢做適配。雖然這麼做能適配機型,讓效果看起來都差不多,但是做起來應該很痛苦,每個固定長度的元素都要寫一遍,這會是很要命的吧。

(3). 假如用的是rem單位,不動態計算font-size值,不做媒體查詢。我靠,那這不是跟第一種情況一樣。

(4). 假如用的是rem單位,動態計算font-size值。計算方式如下:

var baseSize = 50, // 基數
    baseWidth = 375, //量取值大小
    fontSize =  (document.documentElement.clientWidth / baseWidth * baseSize).toFixed(2) ; //這個就是動態font-size值

這裡我有一點沒有說是, 這個計算公式是viewport設置initial-scale=1的情況,如果是其他縮放比例,那就需要乘以這個縮放比例。

例如:https://m.taobao.com/(淘寶移動版)

其viewport:

<meta name="viewport" content="initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5, user-scalable=no">

其fontsize計算方式:

var baseSize = 75, // 基數
    baseWidth = 375, //量取值大小
    fontSize =  (document.documentElement.clientWidth / baseWidth * baseSize * 0.5 ).toFixed(2) ; 

這裡面關鍵的是那個375的基礎量取值,當取375時,頁面效果在設備寬度為375就必須顯示正常,這個是很關鍵的約定。

(5). 假如用的是rem單位,媒體查詢做適配。 在各個媒體查詢的區間設置適當的font-size,沒什麼特別的。

最終方案

根據上面的情況,我覺得轉換的方式可以用下麵步驟。

(1). 設計稿應有約定的大小(例750px),選取一個手機的設備寬度做量取大小值(例375)。

(2). 限制使用rem,選取一個font-size值作為的基數。

(3). 計算每個元素的rem值,進行界面開發。

(4). js計算當前設備寬度的fontSize,並設置回html元素上。(適配步驟)

(5). 媒體查詢作為補救措施,特殊設備寬度設置特殊的font-size。(這步不是必須的)

註意

(1). px可以用,但是當心效果會偏大或偏小,元素可能還會往下掉。

(2). 界面開發時只針對iPhone6(375pt)一種機型,頁面完成後,才做適配步驟。

(3). 設計師可能會輸出標註圖(750px)和@3x切圖(1125px)兩種圖。用@3x切圖的設計稿切圖,在超清屏幕才能清晰;標註圖可用來計算元素長寬;但是設計師可能為了簡單,就只輸出一種視覺圖,就如文章開頭說的750px、1080px。

(4). 使用sass或less可以讓代碼寫得直觀、簡單。

例如:

padding: rem(5) rem(15) 0 rem(15);

這樣尺寸都是對應的設計稿的尺寸,開發人員就不用關心裡面的實現細節了。

總結

設計稿轉換頁面單位尺寸,簡單做就是——先針對某個機型做,再做適配。 

 

本文為原創文章,轉載請保留原出處,方便溯源,如有錯誤地方,謝謝指正。 本文地址 :http://www.cnblogs.com/lovesong/p/5439756.html
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 網+線下沙龍 | 移動APP模式創新:給你一個做APP的理由>> 好的 API 設計:在自描述的同時,達到抽象的目標。 設計良好的 API ,開發者可以快速上手,沒必要經常抱著手冊和文檔,也沒必要頻繁光顧技術支持社區。 流暢的介面 方法鏈:流暢易讀,更易理解 設置和獲取操作,可以合二為一;方法越多, ...
  • 最近瞎逛的時候發現了一個超炫的粒子進度效果,有多炫呢?請擦亮眼鏡! // <![CDATA[ /* */ /* Light Loader /* */ var lightLoader = function(c, cw, ch){ var _this = this; this.c = c; this.c ...
  • × 目錄 [1]line-height [2]vertical-align [3]absolute [4]flex 前面的話 相對於水平居中,人們對於垂直居中略顯為難,大部分原因是vertical-align不能正確使用。實際上,實現垂直居中也是圍繞幾個思路展開的。本文將介紹關於垂直居中的4種思路 ...
  • 這個算是 Chrome only 其他的我沒測試,也不想測試。因為我的控制台腳本僅僅在 Chrome 下載入。 如果你需要全平臺,那麼這肯定不是你需要的結果。 <! more 需求 其實我很早就想折騰這個了,但是,,因為懶,拖了很久,直到周末,我看到伺服器上統計,發現流量翻了一倍,結果訪問量還是一樣 ...
  • 在做項目的過程中遇到了需要將圖像作為背景,將字體顯示在圖像中央需求。 嘗試了兩種做法: 第一種方法為設置一個div設置屬性為relative固定這個框的位置,將圖片鋪在div塊里。 在div再設一個div存放字體,z-index設置為2,及圖片在下麵,字體在上面,字框的屬性設置為absoulte(絕 ...
  • 解決辦法:給img定義vertical align或者定義為塊狀。 最優的解決辦法是:定義vertical align,註:定義vertical align為middle時在IE6中大概還有一像素的頂邊距,最好為top或bottom。 還有種極端解決辦法就是:將父容器的字體大小為零,font siz ...
  • 有三種方法能夠確定瀏覽器視窗的尺寸(瀏覽器的視口,不包括工具欄和滾動條)。 對於Internet Explorer、Chrome、Firefox、Opera 以及 Safari: 瀏覽器視窗的內部高度:window.innerHeight 瀏覽器視窗的內部寬度:window.innerWidth 對 ...
  • 今天,開始學習第二節!!! 工欲善其事,必先利其器 react推薦我們使用webpack來打包文件,那麼我們就用吧!(其實真心不想用啊) 至於好處網上寫的天花亂墜的,大家自行解決啊... 這節主要就學習怎麼配置webpack了,這玩意我搗鼓了整整一天才弄的一知半解,哎,腦子差就是吃虧... 1.提前 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...