引言:

  网页布局在flex出来之前,是由盒模型为底子,float,position,table,百分比来进行布局的,重绘的比较多,影响性能,复杂又不好维护。flex布局,可以简便、完整、响应式地实现各种页面布局。我在网上看到有很多写flex布局的博文,自己就写着复习一下这个flex布局。

一 基本概念:

  采用Flex布局的元素,称为Flex容器(flex container),简称”容器”。(任何一个容器都可以指定为Flex布局,块级元素,行内元素也可。)
  它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称”项目”。

二 属性:

 容器的6大属性:
  1 flex-direction 项目的排列方向
    flex-direction: row;(默认值)主轴为水平方向,从右往左。
             row-reverse; 主轴为水平方向,从左往右。
             column; 主轴为垂直方向,从上往下。
           column-reverse; 主轴为垂直方向,从下往上。
  2 flex-wrap 是否换行
    flex-wrap: no-wrap(默认):不换行。
            wrap : 换行。
          wrap-reverse : 换行,从下往上换行。
  3 flex-flow flex-direction属性和flex-wrap属性的简写形式。
    flex-flow : row nowrap (默认值)
  4 justify-content 项目item在水平上的对齐方式。
    justify-content: flex-start; 往右边对齐
             flex-end; 往左边对齐
             center; 往中间对齐
             space-between; 两边对齐,项目之间的间隔都相等。
             space-around; 每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
  5 align-items 项目item在垂直上的对齐方式。
    align-items: flex-start; 往上对齐。
          flex-end; 往下对齐。
          center; 往中间对齐。
          baseline; 项目的第一行文字的基线对齐。
          stretch;(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
  6 align-content 多个项目在垂直上的对齐方式。
    ps:如果项目只有一根轴线,该属性不起作用
    属性和align-content的属性一样。
 
 项目的6大属性
 
  1 order 项目的排列顺序。数值越小,排列越靠前,默认为0(按代码书写的顺序来。)
  2 flex-grow 项目的放大比例,默认为0(即如果存在剩余空间,也不放大。)
    如果item都为1,则均等平摊整个空间。如果有一个item和其他的item不相等,则按照比例放大。
  3 flex-shrink 项目的缩小比例,默认为1(即如果空间不足,该项目将缩小。)
    如果item都相等,则均等平摊空间,若空间不足,则都等比例缩小。如果有一个item为0;当空间不足时,其不缩小。
    ps:负值无效。
  4 flex-basis 在分配多余空间之前,项目占据的水平上的空间。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
  5 flex 是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
    优先级:auto (1 1 auto) 或者 none (0 0 auto);
  6 align-self 允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
    ps:只针对于垂直方向上的,水平方向上没有该属性。
    属性和align-items是的属性一样,多了一个auto。

三 实例

 flex布局大部分实例可以参考https://www.w3.org/TR/css-flexbox/#box-model 写的特别详细。

  1 div使用display:flex后初始化的结果:

  html代码:

<div class="container">
<span class="item">
<span class="item">111</span>
</span>
<span class="item">2</span>
<span class="item">3</span>
<span class="item">4</span>
<span class="item">5</span>
</div>

  css 样式:

.container{
height: 500px;
width: 500px;
border: 1px solid;
display: flex;
position: relative;
}
.item{
width: 50px;
height: 50px;
border:1px solid #ccc;
float: right;
vertical-align: middle;
}

  结果:

  这个例子说明了:

    1 只要父元素设置了display:flex;所有的item都成了行内块或者块级元素,可以设置宽度高度.
    2 item中的flaot无效,同样的 clear也无效,vertical-align也无效, 但是position:absolute是有效(我看网上有人说是无效的。)
    3 父元素设置了flex后,只针对于子元素,其后代元素不起作用,若想要后代元素起作用,必先给他的父元素声明flex。
 
  2 实现导航栏的nav两边对齐,就是有导航的在左边,登陆之类的在右边。
  html:
<nav>
<ul>
<li><a href="/">首页</a> </li>
<li><a href="/">产品</a></li>
<li><a href="/">关于我们</a></li>
<li class="login"><a href="/">登陆</a></li>
</ul>
</nav>

  css样式:

nav > ul{
display: flex;
}
nav li {
list-style: none;
margin: 10px;
}
.login{
margin-left: auto;
}

  结果如下:

    

  如果不使用display:flex来做的话,可以使用float的方式来说,但是相对来说稍微麻烦点,代码量绝对比flex多。追求简单何乐不为?

四 兼容性

  

  如图可知,兼容性基本上都支持来,只有ie9以下不支持。flex布局最适合在移动端进行布局,开发中要适当的添加私有前缀来兼容。

.flex() {
display: -webkit-box;
display: -moz-box;
display:-webkit-flex;
display: -ms-flexbox;
display:flex;
}

参考资料:

菜鸟教程 http://www.runoob.com/w3cnote/flex-grammar.html

阮一峰大大 http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?^%$

浅谈新的布局方式-flex的更多相关文章

  1. 浅谈Android五大布局

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ...

  2. [转]浅谈Android五大布局(一)——LinearLayout、FrameLayout和AbsoulteLayout

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ...

  3. [转]浅谈Android五大布局(二)——RelativeLayout和TableLayout

    在浅谈Android五大布局(一)中已经描述了LinearLayout(线性布局).FrameLayout(单帧布局)和AbsoulteLayout(绝对布局)三种布局结构,剩下的两种布局Relati ...

  4. 浅谈Android五大布局(一)——LinearLayout、FrameLayout和AbsoulteLayout

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLay ...

  5. 浅谈 JS 内存泄露方式与避免方法(二)

    Concept WHAT : 内存泄露是指一块被分配的内存既不能使用,又不能回收,直到浏览器进程结束.正常情况下,垃圾回收器在DOM元素和event处理器不被引用或访问的时候回收它们.但是,IE的早些 ...

  6. 布局方式-flex布局

    .弹性盒子 .盒子本来就是并列的 .指定宽度即可 <style> .container { width: 800px; height: 200px; display: flex; bord ...

  7. 浅谈Android五大布局——LinearLayout、FrameLayout、AbsoulteLayout、RelativeLayout和TableLayout

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建 筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.Android的五大布局分别是LinearLa ...

  8. 浅谈分析表格布局与Div+CSS布局的区别

    (1)表格布局 表格布局容易掌握,布局方便.但表格布局需要通过表格的间距或者使用透明的gif图片来填充布局板块间的间距,这样布局的网页中表格会生成大量难以阅读和维护的代码:而且表格布局的网页要等整个表 ...

  9. 浅谈inline-block

    一.区分block,inline,inline-block 1.block block元素会独占一行,多个block元素会各自新起一行.默认情况下,block元素宽度自动填满其父元素宽度. block ...

随机推荐

  1. 【2019雅礼集训】【CF 960G】【第一类斯特林数】【NTT&多项式】permutation

    目录 题意 输入格式 输出格式 思路 代码 题意 找有多少个长度为n的排列,使得从左往右数,有a个元素比之前的所有数字都大,从右往左数,有b个元素比之后的所有数字都大. n<=2*10^5,a, ...

  2. 编译ROCKSDB总结

    Rocksdb是挺好的一个东西,就是取得一个可用的库太麻烦.之前我是用的rocksdbsharp里面他有编译好windows 和 linux的库 兼 容性还挺好,ubuntu win10 直接跑没毛病 ...

  3. [POJ2823]Sliding Window 滑动窗口(单调队列)

    题意 刚学单调队列的时候做过 现在重新做一次 一个很经典的题目 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗 ...

  4. [转]C# 使用Conditional特性而不是#if条件编译

    转自: http://www.cnblogs.com/xibei666/p/5495561.html 概述 #if/#endif 语句常用来基于同一份源码生成不同的编译结果,其中最常见的就是debug ...

  5. Django model对象接口

    Django model查询 # 直接获取表对应字段的值,列表嵌元组形式返回 Entry.objects.values_list('id', 'headline') #<QuerySet [(1 ...

  6. node03

    1.express处理post请求 借助body-parse中间件,其实最终我们也不会使用这个 对于get请求,无需中间件,用req.query即可返回相应的数据 但是post我们尝试借助中间件处理 ...

  7. Spring源码学习-容器BeanFactory(三) BeanDefinition的创建-解析Spring的默认标签

    写在前面 上文Spring源码学习-容器BeanFactory(二) BeanDefinition的创建-解析前BeanDefinition的前置操作中Spring对XML解析后创建了对应的Docum ...

  8. SDKmanager的位置

    最近学习Android Studio 因为配置的问题,需要查找SDKmanager的位置 一下是查找方法: 查找到啦~

  9. 总结css

    一.背景  1. background-color: 背景颜色   2.background-image 设置图像为背景 url("http://images.cnblogs.com/cnb ...

  10. FCC(ES6写法) Symmetric Difference

    创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组. 给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2 ...