CSS Flex布局属性整理

Flex布局

  • display: flex; 将对象做为弹性伸缩盒展现,用于块级元素
  • display: inline-flex; 将对象做为弹性伸缩盒展现,用于行内元素

注意兼容问题:javascript

  • webkit内核浏览器应使用前缀-webkit
  • IE浏览器,能够很好的兼容IE11+版本,对于IE10只有部分能够兼容,且使用时需增长-ms,IE10浏览器中容器定义成弹性伸缩盒时,需使用display: -ms-flexbox

示例的dom结构:java

<div class="box"> <!--容器--> <div class="item">1</div> <!--子项--> <div class="item">2</div> <div class="item">3</div> </div>复制代码

基础样式设计:git

.box {
  width: 200px;
  height: 200px;
  background-color: #58a;
}
.item {
  width: 50px;
  height: 50px;
  margin: 2px;
  background-color: #fb3;
}复制代码

Flex 做用于Box容器上的6个属性介绍

一、flex-directiongithub

用于指定Flex主轴的方向,继而决定 Flex子项在Flex容器中的位置web

取值:row | row-reverse | column | column-reverse浏览器

  • row:默认值,表示水平方向从左到右排列,此时水平方向轴线为主轴
  • row-reverse:与row相反
  • column:表示垂直方向从上到下排列,此时垂直方向轴线为主轴
  • column-reverse:与column相反

flex-direction四种取值的效果图以下:dom

row.png

column.png

二、flex-wrap布局

用于指定Flex子项是否换行flex

取值:nowrap | wrap | wrap-reverseflexbox

  • nowrap:默认值,表示不换行,Flex子项可能会溢出
  • wrap:表示换行,溢出的Flex子项会被放到下一行
  • wrap-reverse:表示反方向换行

flex-wrap三种取值的效果图以下:

wrap.png

从示例图中不难发现,换行之后两行之间产生了很大的间距,这个问题,在后面介绍的 align-content 属性中能够获得很好的解决。

三、flex-flow

复合属性,是flex-directionflex-wrap 的简写属性,是用于指定Flex子项的排列方式

四、justify-content

用于指定主轴(水平方向)上Flex子项的对齐方式

取值:flex-start | flex-end | center | space-between | space-around

  • flex-start:默认值,表示与行的起始位置对齐
  • flex-end:表示与行的结束位置对齐
  • center:表示与行中间对其
  • space-between:表示两端对齐,中间间距相等。要注意特殊状况,当剩余空间为负数或者只有一个项时,效果等同于flex-start
  • space-around:表示间距相等,中间间距是两端间距的2倍。要注意特殊状况,当剩余空间为负数或者只有一个项时,效果等同于center

justify-content 的前三种取值的效果图以下:

justify-content.png

justify-content 取值为 space-between 的效果图以下(注意特殊状况下效果等同于flex-start):

space-between.png

justify-content 取值为 space-around 的效果图以下(注意特殊状况下效果等同于center):

space-around.png

五、align-items

用于指定侧轴(垂直方向)上Flex子项的对齐方式

取值:stretch | flex-start | flex-end | center | baseline

  • stretch:默认值,当Flex子项未设置高度或者高度值为auto时,stretch起做用,将Flex子项高度设置为行高度。这里须要注意,在只有一行的状况下,行的高度为容器的高度,即Flex子项高度为容器的高度
  • flex-start:表示与侧轴开始位置对齐
  • flex-end:表示与侧轴的结束位置对齐
  • center:表示与侧轴中间对其
  • baseline:表示基线对齐,当行内轴与侧轴在同一线上,即全部Flex子项的基线在同一线上时,效果等同于flex-start

align-items 取值为 stretch 的效果图以下:

stretch.png

align-items 取值为 flex-start flex-end center 的效果图以下:

align-items.png

align-items 取值为 baseline 的效果图以下:

baseline.png

六、align-content

该属性只做用于多行的状况下,用于多行的对齐方式

取值:stretch | flex-start | flex-end | center | space-between | space-around

  • stretch:默认值,当Flex子项未设置高度或者高度值为auto时,stretch起做用,将Flex子项高度设置为行高度。
  • flex-start:表示各行与侧轴开始位置对齐,第一行紧靠侧轴开始边界,以后的每一行都紧靠前面一行
  • flex-end:表示各行与侧轴的结束位置对齐,最后一行紧靠侧轴结束边界,以后的每一行都紧靠前面一行
  • center:表示各行与侧轴中间对其
  • space-between:表示两端对齐,中间间距相等。要注意特殊状况,当剩余空间为负数时,效果等同于flex-start
  • space-around:表示各行之间间距相等,中间间距是两端间距的2倍。要注意特殊状况,当剩余空间为负数时,效果等同于center

再次强调:该属性只做用于多行的状况,在只有一行的Flex容器上无效,另外该属性能够很好的处理,换行之后相邻行之间产生的间距。

align-content 各个取值的效果图以下:

align-content.png

Flex 做用于子项上的6个属性介绍

一、order

该属性用来指定Flex子项的排列顺序,数值越小,越靠前,能够为负数

取值:数值,默认值为0

二、flex-grow

用来指定Flex子项的扩展比例,不能够为负数,Flex容器会根据Flex子项设置的扩展比例做为比率来分配剩余空间

取值:数值,默认值为0,表示即便存在剩余空间,Flex子项也不会扩展

以下图中,按照1:3分配剩余空间:

grow.png

三、flex-shrink

用来指定Flex子项的收缩比例,不能够为负数,Flex容器会根据Flex子项设置的收缩比例做为比率来收缩各个Flex子项

取值:数值,默认值为1,表示全部子项在剩余空间为负数时,等比例收缩

注意:flex-shrink只能在不换行的状况下使用

以下图中,按照1:3收缩:

shrink.png

四、flex-basis

用来指定Flex子项的占据的空间,不能够为负数

取值:auto | length | percentage | content

  • auto:默认值,计算规则:检索Flex子项是否设置了width值(或者height值,取决于flex-direction),若是设置了非auto的值,则使用width值(或者height值),若没有则使用content
  • length:用长度值定义宽度,不可为负数
  • percentage:使用百分比定义宽度,不可为负数

以下图中,为Item设置 flex-basis: 50%; ,在按照1:3分配剩余空间:

grow.png

容器宽度为200px,Item1原始宽度为50px,设置 flex-basis: 50%;后宽度变成100px,扩展后宽度为110.5px;而Item2原始宽度为50px,扩展后为81.5px,比例正好是1:3

注意:

  1. 设置flex-grow进行分配剩余空间,或者使用flex-shrink进行收缩都是在flex-basis的基础上进行的;

  2. flex-basis的值以及width(或者height)的值均为非auto时,

    • 1)若content长度同时大于flex-basis的值以及width(或者height)的值,此时以flex-basis与width(或者height)中值大的为准 ,可是,若是子项设置了overflow: hidden;或者overflow: auto;,此时以flex-basis值为准;
    • 2)若content长度同时小于flex-basis的值以及width(或者height)的值,此时以flex-basis值为准;
    • 3)若content长度小于flex-basis的值,大于width(或者height)的值,此时以flex-basis值为准;
    • 4)若content长度大于flex-basis的值,小于width(或者height)的值,此时以content自身长度值为准;
  3. 当width(或者height)的值为auto时,且内容的长度大于flex-basis设置的值,此时以content自身长度值为准,且不能进行flex-shrink收缩。相反若是内容的长度小于flex-basis设置的值,则会使用flex-basis设置的值;

  4. 当存在最小值 min-widthmin-height)时,且 flex-basis的值小于最小值时,宽度以最小值为准,当 flex-basis的值大于最小值时,以 flex-basis的值为准

五、flex

复合属性,是flex-growflex-shrinkflex-basis 的简写属性,用来指定Flex子项如何分配空间

取值:none | 各拆分项属性

  • none:0 0 auto
  • auto:1 1 auto
  • 1:1 1 0%
  • 0 auto 或 initial:0 1 auto 即初始值

注意:

  • flex-grow:默认值为0,若省略则被默认为1
  • flex-shrink:默认值为1,省略时默认为1
  • flex-basis:默认值为auto,省略时默认为0%

六、align-self

用来单独指定某Flex子项的对齐方式

取值:auto | flex-start | flex-end | center | baseline | stretch

  • auto:默认值,查找父元素的align-items值,若是没有则取值为stretch
  • 其余值同align-items

若是想了解更多关于Flex布局的内容,能够查看Flex布局应用

相关文章
相关标签/搜索