web移動(dòng)端開發(fā)總結(jié)-布局篇

這周做了一個(gè)移動(dòng)端的項(xiàng)目隔节,在開發(fā)過程中鹅经,踩到了不少坑,也學(xué)到了不少東西怎诫。在此記錄下來一些重要的東西瘾晃。

一、單位

說到移動(dòng)端刽虹,不得不提適配問題酗捌,大大小小的移動(dòng)設(shè)備不但讓做Androidios的難過,因?yàn)樵O(shè)備大小和瀏覽器的差異涌哲,現(xiàn)在也讓前端開始頭疼了胖缤,不過,方法總是比問題多阀圾,我們是革命的隊(duì)伍哪廓,遇到問題就要上!
因?yàn)楝F(xiàn)如今市面上移動(dòng)設(shè)備的分辨率大小不同初烘,顯然咱們常用的px單位在這個(gè)時(shí)候就有些不太靈光了涡真,為此分俯,css3出了一個(gè)新單位——rem,rem是移動(dòng)端神器哆料,它完美解決了分辨率的適配問題缸剪。

rem就是相對(duì)于根元素<html>的font-size來做計(jì)算,舉個(gè)例子:

/*定義HTML根元素字體大小*/
html{
        font-size: 10px;
}
/*定義子元素,采用rem作為單位*/
body{
       width: 10rem;  /*相當(dāng)于10*10px=100px*/
       height: 10rem; /*相當(dāng)于10*10px=100px*/
       font-size: 1.4rem;  /*相當(dāng)于1.4*10px=14px*/
       border-radius: .5rem /*相當(dāng)于0.5*10px=5px*/
}

像這樣一個(gè)寬高各100px的box就出現(xiàn)了东亦,很簡(jiǎn)單吧杏节,發(fā)現(xiàn)沒,有些像我們以前常用的em典阵,不過rem是相對(duì)于根元素(<html>)的字體大小奋渔,em相對(duì) 于父元素的字體大小。

雖然很簡(jiǎn)單壮啊,但是移動(dòng)設(shè)備那么多嫉鲸,我們又怎么根據(jù)手機(jī)屏幕的分辨率不同,去設(shè)置<html>的字體大小呢歹啼?

我知道的方法有2個(gè):

1)通過媒體查詢

/*默認(rèn)為20px*/
html{
    font-size: 20px;
}

/*判斷寬度設(shè)置不同的Html font-size值去覆蓋默認(rèn)值*/
@media only screen and (min-width: 320px) {
html{
       font-size: 10px;
    }
}
@media only screen and (min-width: 375px) {
html{
       font-size: 16px;
    }
 }
@media only screen and (min-width: 414px) {
html{
       font-size: 20px;
    }
 }

像這樣通過媒體查詢的方式玄渗,只需要把常用的屏幕寬度考慮進(jìn)去即可,能夠滿足大部分應(yīng)用場(chǎng)景染突,不過這一做法不夠嚴(yán)謹(jǐn)捻爷,處女座的你,怎么能滿足呢份企?那就用js去設(shè)置fontSize吧也榄!

2)通過js計(jì)算

 //設(shè)置fontSize
var doc = document, win = window;
function initFontSize () {
    var docEl = doc.documentElement,
    resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
    recalc = function() {
        var clientWidth = docEl.clientWidth; 
        //window.innerWidth;
        if (!clientWidth) return;
        fontSizeRate = (clientWidth / 375);
        var baseFontSize = 10 * fontSizeRate;
        docEl.style.fontSize = baseFontSize + 'px';
    };

    recalc();
    if (!doc.addEventListener) return;
    win.addEventListener(resizeEvt, recalc, false);
    doc.addEventListener('DOMcontentLoaded', recalc, false);
};
initFontSize();

通過js設(shè)備的屏幕分辨率,可以計(jì)算出相應(yīng)的字體的大小司志,這個(gè)方法可以適配所有屏幕的大小甜紫,這下就完美許多了。

二骂远、使用<meta>標(biāo)簽中的viewport布局

有了rem單位還不夠囚霸,得再加上viewport,如下:

<meta name="viewport" content="width=device-width, Initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>

其中width=device-width表示設(shè)備寬度激才,也可以寫死拓型;Initial-scale=1.0表示初始化縮放; minimum-scale=1.0, maximum-scale=1.0分別表示最大和最小縮放值瘸恼;user-scalable=no表示不允許縮放劣挫。name="viewport"這個(gè)是必須要有的,有了這個(gè)<meta>標(biāo)簽东帅,頁面就有那么點(diǎn)意思了压固。

三、彈性布局盒子布局

以前PC端布局方式通常會(huì)使用float靠闭、margin帐我、padding等方式布局坎炼,這些方法不僅有繁瑣的計(jì)算,而且在移動(dòng)端還容易出錯(cuò)±辜現(xiàn)在移動(dòng)端谣光,有更好的選擇,使用flexbox布局方式矿咕。

一直以來這種布局方式都有兼容性問題抢肛,讓前端同學(xué)想用,又不敢用碳柱,究其原因也就是即分不清它各個(gè)版本的編寫規(guī)范和兼容性。值得驚喜的是熬芜,目前除了Opera mobile12莲镣,移動(dòng)端的各大瀏覽器都是支持flexbox的舊版語法的,但不包含flex的wrap屬性涎拉。所以可以大膽用瑞侮,不用太擔(dān)心。

需要注意的問題:

a) 雖然移動(dòng)端的各大瀏覽器都是支持flexbox的舊版語法的鼓拧,但是還是得有兼容性寫法;

b) 在開發(fā)的時(shí)候半火,我發(fā)現(xiàn)在使用彈性盒子模型時(shí),如果涉及到文字的時(shí)候需要注意季俩,在li里寫上“我們”和“我們的”钮糖,分別是兩個(gè)字和三個(gè)字。會(huì)有不同的寬度而導(dǎo)致不均分酌住,解決辦法店归,如上面css所示,我設(shè)置了子元素width為5%(只有設(shè)置了li是統(tǒng)一的width就行酪我,不一定需要是5%)就可以解決這個(gè)問題消痛。

總結(jié)

移動(dòng)端布局的問題就說到這,等后端做好接口然后開始綁定數(shù)據(jù)都哭。不過移動(dòng)端開發(fā)的問題遠(yuǎn)遠(yuǎn)不止秩伞,要想做好移動(dòng)端,需要學(xué)習(xí)的還有很多欺矫。革命尚未成功纱新,同志仍需努力啊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末汇陆,一起剝皮案震驚了整個(gè)濱河市怒炸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌毡代,老刑警劉巖阅羹,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件勺疼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捏鱼,警方通過查閱死者的電腦和手機(jī)执庐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來导梆,“玉大人轨淌,你說我怎么就攤上這事】茨幔” “怎么了递鹉?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)藏斩。 經(jīng)常有香客問我躏结,道長(zhǎng),這世上最難降的妖魔是什么狰域? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任媳拴,我火速辦了婚禮,結(jié)果婚禮上兆览,老公的妹妹穿的比我還像新娘屈溉。我一直安慰自己,他們只是感情好抬探,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布子巾。 她就那樣靜靜地躺著,像睡著了一般驶睦。 火紅的嫁衣襯著肌膚如雪砰左。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天场航,我揣著相機(jī)與錄音缠导,去河邊找鬼。 笑死溉痢,一個(gè)胖子當(dāng)著我的面吹牛僻造,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孩饼,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼髓削,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了镀娶?” 一聲冷哼從身側(cè)響起立膛,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宝泵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體好啰,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年儿奶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了框往。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闯捎,死狀恐怖椰弊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瓤鼻,我是刑警寧澤秉版,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站茬祷,受9級(jí)特大地震影響沐飘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牲迫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望借卧。 院中可真熱鬧盹憎,春花似錦、人聲如沸铐刘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽镰吵。三九已至檩禾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間疤祭,已是汗流浹背盼产。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留勺馆,地道東北人戏售。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像草穆,于是被迫代替她去往敵國(guó)和親灌灾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

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