viewportvisualviewpor,viewportlayoutviewportjavascript
環境 |
微信
|
qq空間 |
qq空間
|
微博
|
瀏覽器
|
導航欄 |
無
|
無 | 有 |
有
|
有
|
調試工具 |
|
|
|
|
|
在前端開發以前,視覺MM會給咱們一個psd文件,稱之爲視覺稿。css
對於移動端開發而言,爲了作到頁面高清的效果,視覺稿的規範每每會遵循如下兩點:html
問題:
1. 對於dpr=2的手機,爲何畫布大小×2,就能夠解決高清問題?前端
字體: 中文字體默認,英文使用Helvetica 。即 body{font-family:Helvetica;}java
系統/字體
|
中文
|
英文
|
數字
|
ios系統 |
HelveticaNeue
|
||
android 系統
|
Droidsansfallback
|
Droid Sans
|
Droid Sans
|
winphone 系統
|
Dengxian(方正等線體)
|
Segoe
|
Segoe
|
目前Flexible會將視覺稿分紅100份
(主要爲了之後能更好的兼容vh
和vw
),而每一份被稱爲一個單位a
。同時1rem
單位被認定爲10a
。針對咱們這份視覺稿能夠計算出:android
1a = 7.5px1rem = 75px
那麼咱們這個示例的稿子就分紅了10a
,也就是整個寬度爲10rem
,<html>
對應的font-size
爲75px
:ios
在實際生產當中,若是每一次計算px
轉換rem
,或許會以爲很是麻煩,或許直接影響你們平時的開發效率。爲了能讓你們更快進行轉換,咱們團隊內的同窗各施所長,爲px
轉換rem
寫了各式各樣的小工具。git
CSSREM是一個CSS的px
值轉rem
值的Sublime Text3自動完成插件。這個插件是由@正霖編寫。先來看看插件的效果:github
有關於CSSREM如何安裝、配置教程能夠點擊這裏查閱。web
除了使用編輯器的插件以外,還可使用CSS的處理器來幫助你們處理。好比說Sass、LESS以及PostCSS這樣的處理器。咱們簡單來看兩個示例。
使用Sass的同窗,可使用Sass的函數、混合宏這些功能來實現:
@function px2em($px, $base-font-size:16px) { @if (unitless($px)) { @warn"Assuming #{$px} to be in pixels, attempting to convert it into pixels for you"; @return px2em($px + 0px); //That may fail. } @elseif (unit($px) == em) { @return$px; } @return ($px / $base-font-size) * 1em; }
除了使用Sass函數外,還可使用Sass的混合宏:
@mixin px2rem($property,$px-values,$baseline-px:16px,$support-for-ie:false){ //Conver the baseline into rems $baseline-rem: $baseline-px / 1rem * 1; //Print the first line in pixel values@if$support-for-ie { #{$property}: $px-values; } //if there is only one (numeric) value, return the property/value line for it. @if type-of($px-values) == "number"{ #{$property}: $px-values / $baseline-rem; } @else { //Create an empty list that we can dumpvalues into $rem-values:(); @each$value in $px-values{ // If the value is zero ornot a number, return it @if$value == 0or type-of($value) != "number"{ $rem-values: append($rem-values, $value / $baseline-rem); } } // Return the property and its list of converted values #{$property}: $rem-values; } }
有關於更多的介紹,能夠點擊這裏進行了解。
除了Sass這樣的CSS處理器這外,咱們團隊的@頌奇同窗還開發了一款npm
的工具px2rem。安裝好px2rem以後,能夠在項目中直接使用。也可使用PostCSS。使用PostCSS插件postcss-px2rem:
var gulp = require('gulp'); var postcss = require('gulp-postcss'); var px2rem = require('postcss-px2rem'); gulp.task('default', function() { var processors = [px2rem({remUnit: 75})]; return gulp.src('./src/*.css') .pipe(postcss(processors)) .pipe(gulp.dest('./dest')); });
除了在Gulp中配置外,還可使用其餘的配置方式,詳細的介紹能夠點擊這裏進行了解。
配置完成以後,在實際使用時,你只要像下面這樣使用:
.selector{ width:150px;height:64px;/*px*/font-size:28px;/*px*/border:1px solid #ddd;/*no*/}
px2rem
處理以後將會變成:
.selector{ width:2rem;border:1px solid #ddd;}[data-dpr="1"].selector{ height:32px;font-size:14px;}[data-dpr="2"].selector{ height:64px;font-size:28px;}[data-dpr="3"].selector{ height:96px;font-size:42px;}
在整個開發中有了這些工具以後,徹底不用擔憂px
值轉rem
值影響開發效率。
rem
前面你們都見證瞭如何使用rem
來完成H5適配。那麼文本又將如何處理適配。是否是也經過rem
來作自動適配。
顯然,咱們在iPhone3G和iPhone4的Retina屏下面,但願看到的文本字號是相同的。也就是說,咱們不但願文本在Retina屏幕下變小,另外,咱們但願在大屏手機上看到更多文本,以及,如今絕大多數的字體文件都自帶一些點陣尺寸,一般是16px
和24px
,因此咱們不但願出現13px
和15px
這樣的奇葩尺寸。
如此一來,就決定了在製做H5的頁面中,rem
並不適合用到段落文本上。因此在Flexible整個適配方案中,考慮文本仍是使用px
做爲單位。只不過使用[data-dpr]
屬性來區分不一樣dpr
下的文本字號大小。
div { width: 1rem; height: 0.4rem; font-size: 12px; // 默認寫上dpr爲1的fontSize } [data-dpr="2"] div { font-size: 24px; } [data-dpr="3"] div { font-size: 36px; }
爲了能更好的利於開發,在實際開發中,咱們能夠定製一個font-dpr()
這樣的Sass混合宏:
@mixin font-dpr($font-size){ font-size: $font-size; [data-dpr="2"] & { font-size: $font-size * 2;}[data-dpr="3"] & { font-size: $font-size * 3;} }
有了這樣的混合宏以後,在開發中能夠直接這樣使用:
@include font-dpr(16px);
固然這只是針對於描述性的文本,好比說段落文本。但有的時候文本的字號也須要分場景的,好比在項目中有一個slogan,業務方但願這個slogan能根據不一樣的終端適配。針對這樣的場景,徹底可使用rem
給slogan作計量單位。
原本想把這個頁面的用到的CSS(或SCSS)貼出來,但考慮篇幅過長,並且這麼簡單的頁面,我想你們也能垂手可得搞定。因此就省略了。權當是給你們留的一個做業吧,感興趣的能夠試試Flexible可否幫你快速完成H5頁面終端適配。