css--弹性布局

什么是Flex :Flex 是 Flexible Box 的缩写,意为"弹性布局",可以轻松的控制元素排列、对齐和顺序的控制。
现在的终端类型非常多,使用弹性盒模型可以让元素在不同尺寸终端控制尺寸。

浏览器兼容性:参考网站 https://caniuse.com/ 针对绝大多数尤其是移动设备都可以很好的支持flex

弹性盒子

声明定义

display:flex; 
display:inline-flex;
容器盒子里面包含着容器元素,使用 display:flex 或 display:inline-flex 声明为弹性盒子。

属性:flex-direction
用于控制盒子元素排列的方向,并且决定主轴的方向。

row     从左到右水平排列元素     主轴为水平轴
  row-reverse 从右向左排列元素    
  column 从上到下垂直排列元素        主轴为垂直轴
  column-reverse 从下到上锤子排列元素

属性:flex-wrap
flex-wrap 属性规定flex容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向。

nowrap 元素不拆行或者不拆列(selected)
wrap 容器元素在必要的时候进行拆行或者拆列
wrap-reverse 容器元素在必要的时候拆行或者拆列,但是以相反的顺序排列

属性:flex-flow
flex-flow 是 flex-direction 与 flex-wrap 的组合简写模式。

flex-flow: flex-direction flex-wrap

轴说明
主轴与交叉轴,默认主轴是横向的轴,交叉轴是垂直的轴,在一个二位平面里,轴是垂直的。
doc.houdunren.com 的轴说明最后一个示例图有误。

属性:justify-content
用于控制元素在主轴上的排列方式。

flex-start: 元素紧靠主轴起点
flex-end:   元素紧靠主轴终点
center:     元素从弹性容器中心开始
space-between: 第一个元素靠起点,最后一个元素靠终点,剩下元素平分空间
space-around: 每个元素两侧的间隔相等。 导致元素之间间隔比元素到容器边缘的间隔大一倍
space-evenly: 元素间距平均分配

交叉轴行
元素在交叉轴上有行的概念

  • align-item 是控制元素在行上的排列
  • align-content 是控制行在交叉轴上的排列

align-item

stretch: 元素被拉伸以适应容器(selceted)
center: 元素位于容器的中心
flex-start: 元素位于容器的交叉轴开头
flex-end: 元素位于容器的交叉轴结尾

stretch:如果设置了width | height | min/max-width/height 等属性,将影响stretch的结果,因为stretch优先级不如前几项高

align-content

stretch: 元素被拉伸以适应容器(selceted)
center: 元素位于容器的中心
flex-start: 元素位于容器的交叉轴开头
flex-end: 元素位于容器的交叉轴结尾
space-between: 第一个元素靠起点,最后一个元素靠终点,剩下元素平分空间
space-around: 每个元素两侧的间隔相等。 导致元素之间间隔比元素到容器边缘的间隔大一倍
space-evenly: 元素间距平均分配

弹性元素

放在容器盒子中的元素即为容器元素。

  • 不能使用float 和 clear 规则
  • 弹性元素均为块元素
  • 绝对定位的弹性元素不参与弹性布局

align-self
用于控制单个元素在交叉轴上的排列方式,相比align-item 控制所有元素,align-slef控制单个元素,并且这个属性应该被添加到元素上,而align-item应该添加到容器上。

stretch: 元素被拉伸以适应容器(selceted)
center: 元素位于容器的中心
flex-start: 元素位于容器的交叉轴开头
flex-end: 元素位于容器的交叉轴结尾

flex-grow
用于将弹性盒子的可用空间,分配给弹性元素。
计算公式 (宽度/总份数)*该元素份数

举例: 下例的三个div元素flex-grow 设置为 1,2,3
    则第三个元素所占空间为     width = (宽度/1+2+3)*3

如果弹性元素设置了宽度,将把(弹性盒子宽度-弹性元素已设置宽度)作为新的宽度再计算

flex-shrink
与flex-grow相反,flex-shrink是在弹性盒子装不下元素时候定义的缩小值。

计算公式:

缩小比例 = 不足的空间 / (sum(元素宽度*缩小比例)
最终尺寸 = 元素宽度 - (flex-shrink系数 * 元素原本宽度)*缩小比例

flex-basis
flex-basis属性定义了在分配多余空间或者根据不足空间缩小之前,所有元素占据的主轴空间,浏览器根据这个属性来计算,是否需要grow or shrink。
优先级高于width 和 height。

flex
flex: flex-grow flex-shrink flex-basis

order
用于控制弹性元素的位置,默认为 order:0 数值越小越在前面,可以负数or整数。

弹性文本

文本节点也在弹性布局的操作范围内,被视作块级元素。

绝对定位
绝对定位的弹性元素不参与弹性布局

自动空间
在弹性布局中队元素使用后margin-right:auto等形式课有自动撑满空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值