flex布局

前言

  1. 传统的基于盒子模型的布局: 
    • 定位: position
    • 布局: Layout (dispaly + float)
  2. flex(flexible box)弹性盒布局:为盒模型提供最大的灵活性。

flex布局:

flex布局的相关属性:

  • flex容器属性:作用于定义为flex容器的元素
flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content
  • flex容器属性:定义在flex容器内的子项上
order
flex-grow
flex-shrink
flex-basis
flex
align-self

说明 
  关于这些CSS3的属性,我先把它分成2大类,然后分别说明每一个属性的作用,默认值,可选值,组合作用等几个角度说明。

flex布局

任何容器都可以被声明为flex布局

.box{
  display: flex;
}
/*行内元素也可以使用Flex布局*/
.box{
  display: inline-flex;
}

设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。

容器的属性:

  1. flex-direction:主轴方向 
    • 默认值:raw
    • 可取值:raw | raw-reverse | column | column-reverse
    • 值说明:水平| 水平翻转| 竖直 | 竖直翻转
    • 这个值的取值将影响后面的对齐方式
  2. flex-wrap:换行 
    • 默认值:nowrap
    • 可取值: nowrap | wrap | wrap-reverse
    • 值说明:不换行 | 换行 | 换行顺序翻转
    • 这个取值影响align-items和align-content.
  3. flex-flow: 的简写
  4. justify-content: 主轴上的对齐方式 
    • 默认值:flex-start
    • 可取值:flex-end|center|space-between|space-around
    • 值说明:水平对齐
  5. align-items:
  6. align-content: 这2个属性决定纵轴的对齐方式. 
    当子项只有多行时,align-content才起作用; 
    单行,还是多行,align-items都起作用. 
    区别是: 
    align-items对齐的标准是行 
    align-content对齐的是容器
说明:
  1. 先定义flex-flow(尽量使用简写属性),确定主轴方向,和是否换行。
  2. flex-direction去column时,对齐方式使用align-items,而不再是justify-content。
  3. align-items和align-content的区别在域,当子项有多行时的对齐差异,在子项没有设置margin-top,margin-bottom时,前者每行之间有空隙,后者每行紧挨着。
  4. 子项有多行,取决于子项的宽度,数目,还有子项的flex的取值。

子项的属性:

  1. order: 属性定义项目的排列顺序。数值越小,排列越靠前,默认为0 
     
    .item {
    order: n;
    }
  2. flex-grow: 定义项目的放大比例:默认值是0.
  3. flex-shrink: 定义项目的缩小比例,默认是1,即如果空间不足,该项目将缩小。
  4. flex-basis: | auto 
    定义定义了在分配多余空间之前,项目占据的空间的大小,默认值auto,即项目的本来大小。
  5. flex: 的缩写
  6. align-self: 覆盖父元素的align-items的属性,默认是auto,继承父元素的align-items属性。 
     
    .item {
    align-self: auto | flex-start | flex-end | center | baseline | stretch;
    }
  7. 建议优先使用简写属性flex,而不是单独写三个分离的属性,因为浏览器会推算相关值。
说明:
  1. order决定了子项可以自己定义在兄弟元素的顺序。
  2. flex-grow|flex-shrink 放大还是缩小都是针对剩余空间说的,flex布局根据flex-basis来判断子项的空间,轴上的剩余空间。
  3. 放大的说明: 剩余空间,根据所有子项的放大比例划分。子项的显示空间=自身的大小+分配的剩余空间。
  4. 缩小的说明:这时的剩余空间为负值,从各个子项按比例划出一块贡献给剩余空间。子项的显示空间=自身的大小-贡献的空间。
  5. order是父元素只能决定大的排序方向,内部的排序还是需要设置order,一般值越小,考前显示。

flex布局的应用:

  1. 网格布局(Bootstrap)
  2. 百分比布局
  3. 圣杯布局
  4. 。。。。。。。

这些在阮一峰的博客flex布局实例有简单的说明。在写的过程中,需要注意一些小细节,以及属性的掌握程度。通过demo来验证,本来想把demo放在github上,用gitpages显示效果,然而只有通过组合,修改属性来验证真正的用法,这些都没有办法展示,所有自己谢demo,调整属性取值才是王道。

说明:
  1. flex: 1; 
    flex是简写的属性,而flex-grow,flex-shrink,都只能去非负的数。 
    flex-basis可以取值百分比,长度。 
    所有规定: 
     
    /* 等价写法*/
    .item{
    flex: auto;
    }
    .item {
    flex-grow: 0;
    flex-shrink: 1;
    flex-basis: auto;
    }

     
    /* 等价写法*/
    .item{
    flex: none;
    }
    .item {
    flex-grow: 0;
    flex-shrink: 0;
    flex-basis: auto;
    }

     
    /* 等价写法*/
    .item{
    flex: 1;
    }
    .item {
    flex-grow: 1;
    flex-shrink: 1;
    flex-basis: 0%;
    }

    flex-basis取0%的值表示:自身空间为0,剩余空间100%; 
    要特别注意:剩余空间的分配规则,而我们往往关注最终显示空间的效果。

后言

  • 理解了属性的应用,什么百分比,网格布局完全没有问题,关注属性的默认值。
  • 再次说明: flex-grow的默认值是0,flex-shrink默认值是1,有的手册上关于这个值的说明错误的。
  • 在放大还是缩小属性的选择前,先考虑flex-basis的取值。
  • 百分比布局是flex取值为: flex: 0 0 n%;
  • 注意理解0%。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值