浅谈Flex布局
最近学习Flex布局,写了一个骰子的小案例,运行结果如下:
它的实现代码如下:
See the Pen EgKQOp by xwj_pen (@xwj_pen) on CodePen.
这里就总结下写这个案例中过程中涉及的Flex布局以及其他一些CSS属性:
什么是Flex布局
Flex是Flexible Box的缩写,意思是“弹性布局”。
无论是块级元素还是行内元素,都可以使用弹性布局:
|
|
但是在Webkit内核的浏览器上,比如加上-webkit前缀。
注意:设为Flex布局之后,子元素的float、clear和vertical-align属性将失效。
基本概念
如下图所示,采用Flex布局的元素,称为Flex容器(flex container),简称“容器”。
它的所有子元素自动成为容器成员,称为Flex项目,简称“项目”。
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。
项目默认按照主轴排列,当flex-direction
属性设置为column
或者column-reverse
时,主轴变为垂直方向。
容器的6个属性
有以下6个属性可以设置在容器上。
flex-direction
flex-direction属性决定主轴的方向(即项目的排列方向)
|
|
flex-wrap
flex-wrap属性定义,如果一个容器中项目很多,如何换行。
|
|
flex-flow
flex-flow属性是flex-direction
属性和flex-wrap
属性的简写形式,默认值为row nowrap。
|
|
justify-content
justify-content属性定义了项目在主轴上的对齐方式。
|
|
align-items
algin-items属性定义项目在交叉轴上如何对齐。
|
|
align-content
align-content属性定义了多根轴线的对齐方式。如果容器只有一根轴线,那么该属性不起作用。
|
|
项目的6个属性
以下6个属性设置在项目上:
order
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
|
|
flex-grow
flex-grow属性定义项目的放大比例。默认为0,即如果存在剩余空间也不放大。
|
|
如果某个项目的flex-grow属性值为1,则它将剩余空间全部占满。
如果所有项目都为1,那所有项目将均分全部剩余空间。
如果一个项目的flex-grow属性值为2,其他项目都为1,则前者将占据的剩余空间比其他项多一倍。
flex-shrink
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
|
|
如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。
如果一个项目的felx-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
flex-basis
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间。默认值为auto,即项目本来大小。
它可以为某个项目分配固定大小的空间。
|
|
flex
flex属性是flex-grow,flex-shrink,flex-basis的简写,默认值是0,1,auto
。后两个属性可选。
该属性有两个快捷值:auto(1,1,auto)
和none(0,0,auto)
。
align-self
align-self属性允许单个项目有与其他项目不一样的对齐方式,可以覆盖align-items属性。
默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
其他一些CSS属性
当然在写这个案例的过程中,除了Flex布局,还涉及到了其他一些常用属性。整理如下:
box-sizing
box-sizing属性用来改变默认的CSS盒模型对元素宽高的计算方式。
它的取值主要有以下:
|
|
box-shadow
骰子的阴影效果就是由box-shadow设置内阴影来实现的。
box-shadow允许向元素盒子添加阴影,包括内阴影和外阴影。
其属性如下:
|
|
如下代码,较为清晰地展示了内阴影的实现:
|
|
其实现效果为;
背景渐变
线性渐变使用linear-gradient函数,而径向渐变使用radial-gradient函数,重复的渐变可以使用repeating-linear-gradient和repeating-radial-gradient函数。
关于渐变更加详细的使用,请移步这里。