移動(dòng)端適配方法總結(jié)

以下都是自己用過的荷腊,問題挺多,擔(dān)心忘了所以來總結(jié)一下悄窃,歡迎大家指點(diǎn)讥电,嘿嘿

1.rem布局

說起rem,剛開始接觸覺得好牛逼呀,有了它各種手機(jī)適配統(tǒng)統(tǒng)搞定轧抗,但是踩了好多坑恩敌,當(dāng)時(shí)項(xiàng)目緊張,終于完成横媚,第二天就告知有些手機(jī)無(wú)法適配纠炮,當(dāng)時(shí)還在想啥破玩意手機(jī)辣么多問題,心塞灯蝴,心塞恢口,心塞,說正經(jīng)的

剛開始用的時(shí)候我基本都是根據(jù)設(shè)計(jì)稿穷躁,手動(dòng)換算成rem耕肩,之后我就用了scss,一下所有的適配我都用了scss,我覺得scss特別好问潭,寫css時(shí)候不僅速度快猿诸,而且終于不用想名字了,不用想那些各種class名字太美好了睦授,所以給大家推薦用scss,使用它換算.(推薦可以用webstorm使用scss不用配置辣么多的環(huán)境了两芳,雖然我最喜歡用的是sublime摔寨,輕便去枷,webstorm一打開,再打開Ps我的電腦就徹底報(bào)廢了)

1.1使用css3的媒體查詢

首先rem是指相對(duì)于根元素的字體大小的單位,所以可以通過設(shè)置html的字體大小來可以控制rem的大小

@charset "utf-8";
@import "px2Rem";
@media screen and (min-width:321px) and (max-width:375px) {
  html {
    font-size: 12px
  }
}

@media screen and (min-width:376px) and (max-width:414px) {
  html {
    font-size: 13px
  }
}

@media screen and (min-width:415px) and (max-width:639px) {
  html {
    font-size: 15px
  }
}

@media screen and (min-width:640px) and (max-width:719px) {
  html {
    font-size: 20px
  }
}

@media screen and (min-width:720px) and (max-width:749px) {
  html {
    font-size: 22.5px
  }
}

@media screen and (min-width:750px) and (max-width:799px) {
  html {
    font-size: 23.5px
  }
}

@media screen and (min-width:800px) {
  html {
    font-size: 25px
  }
}

@import 是scss引入scss文件的一種寫法删顶,‘px2Rem’是一個(gè)公有的scss竖螃,用來把px轉(zhuǎn)換成rem,每一個(gè)scss都引入這個(gè)公有的即可,以下是設(shè)計(jì)稿為750px的寫法:(為啥除以24我也忘了逗余,幾個(gè)月之前寫的特咆,但是只要是750px的設(shè)計(jì)稿就是這樣,誰(shuí)要是知道可以告訴我录粱,謝謝)

1508464369(1).png

除了以上這兩個(gè)公有的css其余都正常寫腻格,例如以下,每次寫上px都是:px2Rem(量取的px),如下

@charset "utf-8";
@import "px2Rem";
@import "common";

#banner{
  height: px2Rem(443);
  width: 100%;
  img{
    width: 100%;
    height: 100%;
  }
}
#introduce{
  width: 100%;
  background:#f2f4f7 ;
  .intro_up{
    width: 100%;
    height: auto;
    background: url("../images/js_tc.png") no-repeat center center;
    background-size: 100% 100%;
    box-sizing: border-box;
    margin-bottom: px2Rem(11);
    p{
      display: flex;
      display: -webkit-flex;
      align-items: center;
      padding: px2Rem(31) px2Rem(7.5) px2Rem(20) px2Rem(7.5) ;
      border-bottom: px2Rem(2) solid #eee;
      font-size: px2Rem(30);
      i{
        width: px2Rem(71);
        height: px2Rem(49);
        background: url("../images/jianjie-.png") no-repeat center center;
        background-size: 100% 100%;
        margin-right: px2Rem(19);
        margin-left: px2Rem(34.5);
      }
    }

總結(jié):這個(gè)方法適配不管是微信啥繁,還是手機(jī)目前都適配菜职,測(cè)試過華為,oppo,iphone旗闽,ipad,中興酬核,型號(hào)都木有錯(cuò)。

1.2js動(dòng)態(tài)設(shè)置html的fontsize大小

動(dòng)態(tài)加載meta標(biāo)簽設(shè)置html的fontsize

var scale = 1 / window.devicePixelRatio;
var meta = document.createElement('meta');
meta.setAttribute('name','viewport');
meta.setAttribute('content','initial-scale='+scale+',maximum-scale='+scale+',minimum-scale='+scale+',user-scalable=no');
document.querySelector('head').appendChild(meta);
var fontSize = document.documentElement.clientWidth/10;
document.querySelector('html').style.fontSize = fontSize +'px';

寫一個(gè)共有的scss,換算px

$designWidth:750;
$remCount:10;

@function px2Rem($px){
  @return $px/$designWidth*$remCount * 1rem
}

之后調(diào)用的方法就和第一個(gè)方法一樣
總結(jié):這是我最開始使用的适室,不管是微信端還是瀏覽器都是相當(dāng)不錯(cuò)嫡意,但是后來發(fā)現(xiàn)對(duì)于一些oppo,中興手機(jī)的部分型號(hào)不適配,聽朋友說還有華為的p9,解決的方法就是判斷捣辆,然后重新計(jì)算fontsize蔬螟。

1.3淘寶的flexible.js

首先我想說的是,這里我也用了sass:
第一步:引入一個(gè)flexible.js(木有寫Meta這個(gè)標(biāo)簽)
第二步:寫一個(gè)共有的common.scss

@function px2Rem($px){
  @return $px/(750/10) * 1rem
}
@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;
    }
}

第三步:在index.scss引用common.scss(本來我準(zhǔn)備用rem寫字體大小汽畴,但是聽說rem換算的字體不好看就用px吧)

@charset "utf-8";
@import "common";
*{
    margin: 0;
    padding: 0;
    max-height: 9999999px;
}
ul{
    list-style: none;
    width: 100%;
    height: px2Rem(100);
    background: pink;
    @include font-dpr(17px);
    text-align: center;
    line-height: px2Rem(100);
}
li{
    display: inline-block;
}
article{
    @include font-dpr(10px); 
}

總結(jié):這種方法的使用網(wǎng)上應(yīng)該很多促煮,比我詳細(xì),以上是我的方法整袁,大同小異菠齿。

2.百分比+彈性盒布局

不管是用哪種布局我都習(xí)慣性用彈性盒布局,display:flex,我覺得相當(dāng)?shù)拿篮米迹挥靡稽c(diǎn)點(diǎn)的去量寬度绳匀,而且可以替換浮動(dòng),也不用清除浮動(dòng)炸客,不管是PC還是移動(dòng)都是不錯(cuò)的疾棵,有時(shí)候懶得用rem我就是用百分比+彈性盒,但是痹仙,各位請(qǐng)注意是尔,兼容性問題考慮一下,彈性盒的集中兼容寫法注意一下开仰,手機(jī)端感覺是各種通用的拟枚,瀏覽器兼容一般薪铜,主流OK的,但是IE10以下估計(jì)完蛋恩溅。

 display: -webkit-box;
 display: -moz-box;
 display: -ms-flexbox;
 display: -webkit-flex;
 display: flex;
//垂直居中
-webkit-box-align: center;
-moz-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
//子元素分割
-webkit-box-pack: justify;
-moz-box-pack: justify;
-ms-flex-pack: justify;
-webkit-justify-content: space-around;
justify-content: space-around;

總結(jié):沒有辣么嚴(yán)格的兼容要求隔箍,這個(gè)簡(jiǎn)直棒棒噠。

3.直接使用一種標(biāo)簽

直接在頁(yè)面寫以下三句話

<meta name="viewport" content="width=640,target-densitydpi=device-dpi, user-scalable=no"/>
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black">

如果設(shè)計(jì)圖是640直接就把width寫成了640px脚乡,然后按照設(shè)計(jì)圖量取的px直接寫就可以了
總結(jié):目前自己測(cè)試的結(jié)果是沒有出現(xiàn)不適配的蜒滩,字體也寫成px,相當(dāng)?shù)姆奖悖褪侵幌拗朴趯挾冗m配奶稠,高度會(huì)出現(xiàn)偏差俯艰,但是如果項(xiàng)目允許出現(xiàn)滾動(dòng)條就完全不礙事,不影響布局啥的锌订,但是如果想做h5頁(yè)面那種一屏一屏的不帶滾動(dòng)的蟆炊,不建議你使用,說好的高度有偏差瀑志,直接用百分比或者rem吧涩搓。

關(guān)于字體的顯示大小,與在CSS中指定的大小不一致

說明:之前用rem做的一個(gè)項(xiàng)目劈猪,一個(gè)段落的字?jǐn)?shù)超過了一定數(shù)量昧甘,字體的大小立馬就變大了,我明明寫的是16px的字體战得,進(jìn)入比32px都大充边,瞬間無(wú)語(yǔ)了,后來可勁找常侦,在github找到了方法浇冰,https://github.com/amfe/article/issues/10#issuecomment-305942512(這是那個(gè)人的詳解)。
解決方法:
方法1.max-height:99999999999px;
方法2. text-size-adjust: none;(兼容性不好聋亡,畢竟是屬于新屬性)

html,body,div,span,p,i,img,a,h1,h2,h3,h4,h5,h6,dd,dl,dt,header,footer,article,ul,li{
  margin: 0;
  padding: 0;
  max-height: 999999px;
  text-size-adjust: none;
  -webkit-text-size-adjust:none;
}

關(guān)于在微信端使用rem布局的時(shí)候肘习,底部會(huì)出現(xiàn)內(nèi)容不全面,或者滾動(dòng)的時(shí)候中間內(nèi)容不全面

說明:例如頂部和底部固定坡倔,中間滾動(dòng)漂佩,但是在微信端,應(yīng)該是頁(yè)面計(jì)算了微信端固定的頂部罪塔,所以會(huì)出現(xiàn)底部?jī)?nèi)容不全面
解決方法:中間不寫固定高度投蝉,只寫margin-bottom和margin-top.

body{
      display:flex;
      flex-direction: column;
}
header,footer{
      flex:1;
      position:fixed
}

目前就這么多,其他的沒想到征堪,好久了瘩缆,小菜鳥一枚,先記錄下來佃蚜,然后慢慢改正庸娱,完善着绊,歡迎挑刺,畢竟我的問題太多涌韩。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畔柔,一起剝皮案震驚了整個(gè)濱河市氯夷,隨后出現(xiàn)的幾起案子臣樱,更是在濱河造成了極大的恐慌,老刑警劉巖腮考,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雇毫,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡踩蔚,警方通過查閱死者的電腦和手機(jī)棚放,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馅闽,“玉大人飘蚯,你說我怎么就攤上這事「R玻” “怎么了局骤?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)暴凑。 經(jīng)常有香客問我峦甩,道長(zhǎng),這世上最難降的妖魔是什么现喳? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任凯傲,我火速辦了婚禮,結(jié)果婚禮上嗦篱,老公的妹妹穿的比我還像新娘冰单。我一直安慰自己,他們只是感情好灸促,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布球凰。 她就那樣靜靜地躺著,像睡著了一般腿宰。 火紅的嫁衣襯著肌膚如雪呕诉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天吃度,我揣著相機(jī)與錄音甩挫,去河邊找鬼。 笑死椿每,一個(gè)胖子當(dāng)著我的面吹牛伊者,可吹牛的內(nèi)容都是我干的英遭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼亦渗,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼挖诸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起法精,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤多律,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后搂蜓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狼荞,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年帮碰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了相味。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡殉挽,死狀恐怖丰涉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情斯碌,我是刑警寧澤一死,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站输拇,受9級(jí)特大地震影響摘符,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜策吠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一逛裤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猴抹,春花似錦带族、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至跋理,卻和暖如春择克,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背前普。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工肚邢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓骡湖,卻偏偏與公主長(zhǎng)得像贱纠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子响蕴,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容