移動(dòng)端布局那點(diǎn)事—多種布局總有你需要的

隨著網(wǎng)絡(luò)的快速發(fā)展辽故,移動(dòng)端設(shè)備頁面也越來越重要叠蝇。但由于各個(gè)手機(jī)的屏幕大小不一涤久,那么如何讓一個(gè)頁面匹配各個(gè)頁面呢∥膛耍現(xiàn)在我們來看看下面的幾種布局方式趁冈。
注意我們要想在移動(dòng)端完美顯示效果,需要在head標(biāo)簽內(nèi)加一個(gè)viewport的meta標(biāo)簽

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

彈性盒模型布局

  1. 需要在父級開啟彈性盒模型:display:-webkit-box;
  2. 自己設(shè)置需要的大小(份數(shù)):-webkit-box-flex:1;(份數(shù)/總份數(shù))
  3. 如果有固定寬度(設(shè)置好的px寬度)拜马,先剔除掉固定的寬度再按照份數(shù)劃分
  4. 注意 不要用浮動(dòng)和定位
    我們先簡單的用一下:
<div id="box">    
      <div style="background:red">left</div>    
      <div style="background:green">center</div> 
      <div style="background:blue">right</div>
</div>

CSS樣式開啟彈性盒模型渗勘,并設(shè)置子級的寬度

#box{ display:-webkit-box;}
#box div{  
      /* 當(dāng)然了這里我們也可根據(jù)具體需求設(shè)置我們所需的大小 */
      -webkit-box-flex:1;  
      height:300px;
}

效果如下:


  1. 設(shè)置子級div豎直排列(每個(gè)占一行,高度分割):-webkit-box-orient: vertical;要給父級加哦
  2. 將子級div進(jìn)行倒序排列:-webkit-box-direction: reverse;要給父級加哦
<div id="box">   
     <div style="background: red;">1</div>    
     <div style="background: yellow;">2</div> 
     <div style="background: blue;">3</div> 
     <div style="background: green;">4</div>
</div>

在CSS中設(shè)置子級div所占份數(shù)俩莽,并豎直倒序排列

html,body{  
    height:100%;  
    overflow: hidden;
}
#box{  
     display:-webkit-box; 
     -webkit-box-orient: vertical;
     -webkit-box-direction: reverse; 
     height:100%;   
     font-size:100px;   
     text-align: center; 
     color: #fff;
}
#box div{ -webkit-box-flex:1;}

效果如下:



接下來我們旺坠,回到一個(gè)老問題讓未知寬高的div,在父級內(nèi)垂直水平居中呢扮超?這里我們加深點(diǎn)難度讓一組未知寬高的div在父級內(nèi)垂直水平居中取刃。
我們不得不說的是彈性盒模型里正好有此屬性

  1. 讓子級元素垂直方向居中:-webkit-box-align: center;要給父級加哦
  2. 讓子級元素水平方向居中:-webkit-box-pack: center;要給父級加哦
<div id="box">   
     <div class="div1" style="background-color: lawngreen">div1</div>  
     <div class="div2" style="background-color: red">div2</div>
</div>

在父級元素下設(shè)置彈性盒模型和相關(guān)樣式

#box{ 
     display: -webkit-box;  
     width: 300px;height: 300px;   
     border: 1px solid #000;    
     margin: 100px auto; 
     /* 子級水平居中 */
    -webkit-box-pack: center;
   /* 子級垂直居中 */
   -webkit-box-align: center;
}
#box div{    width: 100px;height: 100px;}

效果如下:

流體式布局

基本思想就是:用100%來時(shí)div與父級的寬度一致并與浮動(dòng)一起(width:100%+float);
缺點(diǎn):每一個(gè)設(shè)備上最終的顯示效果都與設(shè)計(jì)圖有出入出刷。不完美
例(iphone4屏幕):

<div id="wrap">   
   [站外圖片上傳中……(1)]
</div>

設(shè)置css樣式

*{margin: 0;padding: 0}
#wrap  { width: 100%;}
#wrap img{    width: 100%;}

效果如下:


針對流體式布局的缺點(diǎn)有改進(jìn)方式璧疗,就是設(shè)置一下min-width與max-width的值(某東用的)。但依然有缺點(diǎn)馁龟,就是讓屏幕寬度大于max-width時(shí)崩侠,兩側(cè)會有留白
例:

<div id="wrap">   
   [站外圖片上傳中……(2)]
</div>

設(shè)置css樣式

*{margin: 0;padding: 0}
#wrap  { 
   width: 100%;
   min-width:320px;
   max-width:640px;
}
#wrap img{    width: 100%;}

效果如下:


響應(yīng)式布局

基本思想就是:利用媒體查詢(@media)設(shè)置針對不同尺寸的設(shè)備展現(xiàn)不同的效果。用一套css兼容所有設(shè)備
注意寫條件的時(shí)候坷檩,從大值往小值寫却音,否則后面的會覆蓋前面的

第一種方式,將判斷條件寫在style內(nèi)

例:

<div></div>
<div></div>
<div></div>
<div></div>

CSS媒體查詢設(shè)置

/* 設(shè)置默認(rèn)的情況顯示效果 */
div{    
    width:25%;  height: 100px;
    background: red; 
    /* css3的盒模型屬性矢炼,內(nèi)縮系瓢,border算在寬度(width)內(nèi) */
    box-sizing: border-box; 
    border:1px solid green; 
    float: left;
}
/* 平板情況顯示效果  */
@media (max-width:1023px) {   
   div{ 
        width:50%; height: 100px;  
        background: red;     
        box-sizing: border-box;  
        border:1px solid green;    
       float: left;   
    }
}
/* 大屏手機(jī)情況顯示效果 */
@media (max-width:480px) {   
 div{        
       width:100%; height: 100px; 
       background: red;     
       box-sizing: border-box;   
      border:1px solid green;        float: left;  
    }
}

效果如下:


默認(rèn)情況
平板情況
大屏手機(jī)情況
第二種方式,將判斷條件寫在head的link標(biāo)簽內(nèi)句灌,需要?jiǎng)?chuàng)建對應(yīng)的css文件
<link rel="stylesheet" href="css-1023.css" media="(min-width:1024px)">
<link rel="stylesheet" href="css-481-1023.css" media="(min-width: 481px) and (max-width: 1023px)">
<link rel="stylesheet" href="css-480.css" media="(max-width: 480px)">

相對單位布局(rem)

基本思路就是:利用rem單位八拱,就是相對于跟(html)字體的大小,來計(jì)算相應(yīng)元素的寬高

  1. 一般將html的font-size設(shè)置為:20px或30px或50px或100px
  2. 還有利用瀏覽器默認(rèn)自己大小(16px)也就是16px*62.5%=10px涯塔,這樣就是html{font-size:62.5%;}肌稻,而不是html{font-size:10px;}因?yàn)闉g覽器(PC)最小就是12px。這樣一來1rem = 10px匕荸;
    我們來簡單的看一下:
<div id="wrap"> 
     <div id="div1">我是一個(gè)div標(biāo)簽</div>
</div>

CSS設(shè)置樣式

#wrap{    font-size: 20px;}
#div1{    
  font-size: 1em;  
  width: 16em;   
  height: 2em; 
  background-color: lawngreen;
}

效果如下:


這里說一下為啥不用em爹谭,因?yàn)閑m是相對于父級字體大小的,這樣一層套一層比較麻煩榛搔,還有就是當(dāng)我想改變其中一個(gè)div的字體大小時(shí)诺凡,整個(gè)布局就亂套了
還有一個(gè)問題就是當(dāng)我們的瀏覽器窗口發(fā)生大小變化時(shí)东揣,原來的布局是不是也應(yīng)該完美的顯示呢。這里我們就利用js來根據(jù)瀏覽器可視區(qū)(clientWidth)來重新給html設(shè)置響應(yīng)的字體大小

/* 這里我們利用了一個(gè)自執(zhí)行函數(shù) */
(function(){  
    change();  
    function change(){     
         /* 這里的html字體大小利用了一個(gè)簡單書序公式(十字相乘)腹泌,當(dāng)我們默認(rèn)設(shè)置以屏幕320px位基準(zhǔn)此時(shí)的字體大小為20px(320    20px),那么瀏覽器窗口大小改變的時(shí)候新的html的fontSize(clientWidth  新的值)就是clientWidth*20/320 */
         document.documentElement.style.fontSize = document.documentElement.clientWidth*20/320 + 'px';  
    }    
 /* 監(jiān)聽窗口大小發(fā)生改變時(shí) */
  window.addEventListener('resize',change,false);})();

注意:一般情況下我們利用rem單位來設(shè)置元素的寬高就行嘶卧,沒必要頁面中的所有元素都用rem來弄(當(dāng)然了這個(gè)也得看具體需求了)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市凉袱,隨后出現(xiàn)的幾起案子芥吟,更是在濱河造成了極大的恐慌,老刑警劉巖专甩,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钟鸵,死亡現(xiàn)場離奇詭異,居然都是意外死亡涤躲,警方通過查閱死者的電腦和手機(jī)棺耍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來种樱,“玉大人蒙袍,你說我怎么就攤上這事∧奂罚” “怎么了害幅?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長俐镐。 經(jīng)常有香客問我,道長哺哼,這世上最難降的妖魔是什么佩抹? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮取董,結(jié)果婚禮上棍苹,老公的妹妹穿的比我還像新娘。我一直安慰自己茵汰,他們只是感情好枢里,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蹂午,像睡著了一般栏豺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豆胸,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天奥洼,我揣著相機(jī)與錄音,去河邊找鬼晚胡。 笑死灵奖,一個(gè)胖子當(dāng)著我的面吹牛嚼沿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播瓷患,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼骡尽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了擅编?” 一聲冷哼從身側(cè)響起攀细,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎沙咏,沒想到半個(gè)月后辨图,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肢藐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年故河,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吆豹。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鱼的,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痘煤,到底是詐尸還是另有隱情凑阶,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布衷快,位于F島的核電站宙橱,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蘸拔。R本人自食惡果不足惜师郑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望调窍。 院中可真熱鬧宝冕,春花似錦、人聲如沸邓萨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缔恳。三九已至宝剖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間歉甚,已是汗流浹背诈闺。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铃芦,地道東北人雅镊。 一個(gè)月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓襟雷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親仁烹。 傳聞我的和親對象是個(gè)殘疾皇子耸弄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,737評論 1 92
  • H5移動(dòng)端知識點(diǎn)總結(jié) 閱讀目錄 移動(dòng)開發(fā)基本知識點(diǎn) calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,435評論 0 26
  • 移動(dòng)開發(fā)基本知識點(diǎn) 一.使用rem作為單位 html { font-size: 100px; } @media(m...
    橫沖直撞666閱讀 3,460評論 0 6
  • 我是個(gè)害怕孤獨(dú)的人,雙子座都害怕孤獨(dú)征唬,不像天蝎以孤獨(dú)為食捌显,所以我不喜歡異地戀,也接受不了… 我噓寒問暖無微不至...
    路不成雙閱讀 341評論 0 1
  • 車已經(jīng)駛出家很遠(yuǎn)了总寒,但是母親和父親的身影還是好像在我的眼前扶歪,心里難受的厲害。三十到家摄闸,初三善镰,就離開了家。年枕。炫欺。 在家...
    Echo_long閱讀 187評論 1 3