转载的~移动端程序员手机移动程序开发

移动端开发系列——flex和响应式布局

2017-02-28  本文已影响1965人  犯迷糊的小羊

导语

这篇文章不是弹性布局和响应式布局的语法教程,而是小羊在学习上述两种布局时的一点心得体会,所以建议各位看官舍得浪费时间看这篇文章之前,对弹性布局和响应式布局有一定了解,如果还没有了解,我在下面一节给出我在学习时所用的学习资料,以供童鞋们借鉴;

网页布局的一些小见解

以小羊目前掌握的知识范畴,网页布局大致经历了个阶段,我融入了自己的理解:

flex布局和响应式布局的学习资料

flex布局的一些学习笔记

相信童鞋们已经看完阮一峰的教程,并且做了骰子demo;
但是看到那么多的属性,不免头大,小羊在此做一下不成熟的知识梳理:

justify-content相当于移动每一个项目的交叉轴
align-content相当于移动同在一行项目的主轴
flex-start || flex-end || center || space-between || space-around || (stretch)

code

flex-start || flex-end || center || baseline || stretch

code

flex-basis功能最强大,可设置宽度的固定值或百分比;
flex-grow: 项目的伸展属性,可按比例分配项目空间,这一特性也可以结合响应式媒体查询实现响应式设计;
flex-shrink: 项目的缩放属性,空间不足时是否缩放,通常使用默认值1即可;

code

** 三栏布局为例**

<div class="normal-box">
  <div class="normal-item">1</div>
  <div class="normal-item">2</div>
  <div class="normal-item">3</div>
</div>
.normal-box{
    border: 1px solid ;
    padding: 10px;
    margin: 10px;
    width: 300px;
    overflow: hidden;
}
.normal-item{
    box-sizing: border-box;
    float: left;
    width: 33.33%;
    height: 50px;
    border: 1px solid red;  
}

去掉一个item,在清除的位置会“留白”,得重新设置元素的宽度;

normal-box

使用flex-box后,只要给flex-item设置flex-grow: 1的属性,那么元素就可以动态变宽;

<div class="flex-box">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
</div>
<div class="flex-box">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
</div>
<div class="flex-box">
  <div class="flex-item">1</div>
</div>
.flex-box{
    border: 1px solid ;
    padding: 10px;
    margin: 10px;
    display: flex;
    width: 300px;
}
.flex-item{
    flex-grow: 1;
    width: 100px;
    height: 50px;
    border: 1px solid red;
}
flex-box
code
<div class="flex-box flex-box-1">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
</div>
<div class="flex-box flex-box-2">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
</div>
.flex-box{
    border: 1px solid ;
    padding: 10px;
    margin: 10px;
    display: flex;
    width: 600px;
}
.flex-item{
    width: 100px;
    height: 50px;
    border: 1px solid red;
}
.flex-box-1{
    .flex-item:first-child{
        flex-basis: 20%;
    }
    .flex-item:nth-child(2){
        flex-basis: 60%
    }
    .flex-item:last-child{
        flex-basis: 20%;
    }
}
.flex-box-2{
    .flex-item:first-child{
        flex-basis: 50%;
    }
    .flex-item:last-child{
        flex-basis: 50%;
    }
}

code

<div class="flex-box flex-box-1">
  <div class="flex-item">1</div>
  <div class="flex-item">2</div>
  <div class="flex-item">3</div>
</div>
.flex-box{
    border: 1px solid ;
    padding: 10px;
    margin: 10px;
    display: flex;
    flex-warp: wrap;
}
.flex-item{
    flex-basis: 33.33%;
    height: 50px;
    border: 1px solid red;
}
@media (max-width:768px){
    .flex-box{
        flex-direction: column;
    }
}

code


响应式媒体查询的一些心得

响应式媒体查询无非就是条件样式语句,怎么理解?


@media (min-width:768px) and (max-width: 992px){
    //条件样式...
}

就是在不同设备条件(宽度或高度,设备类型,摆放方向等)去设置特定样式;


总结:

上一篇 下一篇

猜你喜欢

热点阅读