美文网首页转载的~移动端vue -demo前端
移动端布局那点事—多种布局总有你需要的

移动端布局那点事—多种布局总有你需要的

作者: 108N8 | 来源:发表于2016-12-10 23:31 被阅读1755次

随着网络的快速发展,移动端设备页面也越来越重要。但由于各个手机的屏幕大小不一,那么如何让一个页面匹配各个页面呢。现在我们来看看下面的几种布局方式。
注意我们要想在移动端完美显示效果,需要在head标签内加一个viewport的meta标签

<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. 自己设置需要的大小(份数):-webkit-box-flex:1;(份数/总份数)
  3. 如果有固定宽度(设置好的px宽度),先剔除掉固定的宽度再按照份数划分
  4. 注意 不要用浮动和定位
    我们先简单的用一下:
<div id="box">    
      <div style="background:red">left</div>    
      <div style="background:green">center</div> 
      <div style="background:blue">right</div>
</div>

CSS样式开启弹性盒模型,并设置子级的宽度

#box{ display:-webkit-box;}
#box div{  
      /* 当然了这里我们也可根据具体需求设置我们所需的大小 */
      -webkit-box-flex:1;  
      height:300px;
}

效果如下:


  1. 设置子级div竖直排列(每个占一行,高度分割):-webkit-box-orient: vertical;要给父级加哦
  2. 将子级div进行倒序排列:-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中设置子级div所占份数,并竖直倒序排列

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;}

效果如下:



接下来我们,回到一个老问题让未知宽高的div,在父级内垂直水平居中呢?这里我们加深点难度让一组未知宽高的div在父级内垂直水平居中。
我们不得不说的是弹性盒模型里正好有此属性

  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>

在父级元素下设置弹性盒模型和相关样式

#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%来时div与父级的宽度一致并与浮动一起(width:100%+float);
缺点:每一个设备上最终的显示效果都与设计图有出入。不完美
例(iphone4屏幕):

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

设置css样式

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

效果如下:


针对流体式布局的缺点有改进方式,就是设置一下min-width与max-width的值(某东用的)。但依然有缺点,就是让屏幕宽度大于max-width时,两侧会有留白
例:
<div id="wrap">   
   [站外图片上传中……(2)]
</div>

设置css样式

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

效果如下:


响应式布局

基本思想就是:利用媒体查询(@media)设置针对不同尺寸的设备展现不同的效果。用一套css兼容所有设备
注意写条件的时候,从大值往小值写,否则后面的会覆盖前面的

第一种方式,将判断条件写在style内

例:

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

CSS媒体查询设置

/* 设置默认的情况显示效果 */
div{    
    width:25%;  height: 100px;
    background: red; 
    /* css3的盒模型属性,内缩,border算在宽度(width)内 */
    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;   
    }
}
/* 大屏手机情况显示效果 */
@media (max-width:480px) {   
 div{        
       width:100%; height: 100px; 
       background: red;     
       box-sizing: border-box;   
      border:1px solid green;        float: left;  
    }
}

效果如下:


默认情况 平板情况 大屏手机情况
第二种方式,将判断条件写在head的link标签内,需要创建对应的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)字体的大小,来计算相应元素的宽高

  1. 一般将html的font-size设置为:20px或30px或50px或100px
  2. 还有利用浏览器默认自己大小(16px)也就是16px*62.5%=10px,这样就是html{font-size:62.5%;},而不是html{font-size:10px;}因为浏览器(PC)最小就是12px。这样一来1rem = 10px;
    我们来简单的看一下:
<div id="wrap"> 
     <div id="div1">我是一个div标签</div>
</div>

CSS设置样式

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

效果如下:


这里说一下为啥不用em,因为em是相对于父级字体大小的,这样一层套一层比较麻烦,还有就是当我想改变其中一个div的字体大小时,整个布局就乱套了
还有一个问题就是当我们的浏览器窗口发生大小变化时,原来的布局是不是也应该完美的显示呢。这里我们就利用js来根据浏览器可视区(clientWidth)来重新给html设置响应的字体大小
/* 这里我们利用了一个自执行函数 */
(function(){  
    change();  
    function change(){     
         /* 这里的html字体大小利用了一个简单书序公式(十字相乘),当我们默认设置以屏幕320px位基准此时的字体大小为20px(320    20px),那么浏览器窗口大小改变的时候新的html的fontSize(clientWidth  新的值)就是clientWidth*20/320 */
         document.documentElement.style.fontSize = document.documentElement.clientWidth*20/320 + 'px';  
    }    
 /* 监听窗口大小发生改变时 */
  window.addEventListener('resize',change,false);})();

注意:一般情况下我们利用rem单位来设置元素的宽高就行,没必要页面中的所有元素都用rem来弄(当然了这个也得看具体需求了)

相关文章

  • 移动端布局那点事—多种布局总有你需要的

    随着网络的快速发展,移动端设备页面也越来越重要。但由于各个手机的屏幕大小不一,那么如何让一个页面匹配各个页面呢。现...

  • web移动端布局之流式布局

    移动端布局之流式布局meta视口标签,写移动端布局必须加入视口标签: 二倍图:在移动端布局中,我们需要一个5050...

  • 补充8: flex布局

    flex 布局与传统布局 传统布局兼容性好, 但是布局繁琐, 且不适合移动端flex布局更方便, 更适用移动端. ...

  • 移动端网页布局中需要注意事项以及解决方法总结

    移动端网页布局中需要注意事项以及解决方法总结,这份对我们在布局移动端网页的时候非常有用! winphone系统a、...

  • 网络编程(七)移动端布局(1)

    pink老师移动端布局还有最后一小部分,坚持下,很快就能把网页端及移动端布局学完了。这篇博客主要讲述的是移动端布局...

  • 移动端布局多种实现方式

    title: 移动端布局多种实现方式date: 2017年9月17日 02:04:03tags: csscateg...

  • 移动端css(三)

    目录: 1 移动端特点 2 百分比布局 3 Flex布局 一 移动端特点 • 移动端和PC端网页不同点• 谷歌模拟...

  • rem布局

    移动端布局有很多做法,例如流式布局,固定宽度,Media Queries响应式布局,rem。 流式布局:在页面布局...

  • css-进阶-css开发技巧-Layout Skill:布局技巧

    Layout Skill 使用vw定制rem自适应布局 要点:移动端使用rem布局需要通过JS设置不同屏幕宽高比的...

  • 移动端布局

    移动端布局 移动端h5、Android、iOS的各自实现方式不同,布局方式也不同。但,随着移动终端的普及,用户展示...

网友评论

  • semyin:OPPO给你多少广告费,我vivo给你双倍
    108N8:@semyin 没没没
    semyin:@semyin 开个玩笑,大佬莫介意!我要向大佬学习
    108N8: @semyin 😂😂😂,没一毛钱关系
  • 司振飞:布局眼
    108N8:@司振飞 怎么了

本文标题:移动端布局那点事—多种布局总有你需要的

本文链接:https://www.haomeiwen.com/subject/vuiumttx.html