flex 下对齐_Flex 布局大全

bd4b95e348a86c43fcf331d49ee1886a.png

在讲Flex前先准备一下基础的盒模型及样式:

<div class="box"> 
  <div class="item">a</div> 
  <div class="item">b</div> 
  <div class="item">c</div> 
</div> 
 .box {  
  width: 200px;   
  height: 200px;   
  background-color:deepskyblue; 
} 
.item {   
  width: 50px;   
  height: 50px;   
  margin: 2px;   
  background-color:darkseagreen; 
}


作用于容器(父元素)的属性

1、flex-direction
用于指定Flex主轴的方向,继而决定 Flex子项在Flex容器中的位置
取值:

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

da436531d24b7649f7aa06a448d80ea8.png

2、flex-wrap
用于指定Flex子项是否换行
取值:

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

效果图:

3e24c7c2f56eccd536e6cb85d5adada6.png


从示例图中不难发现,换行以后两行之间产生了很大的间距,这个问题,在后面介绍的 align-content 属性中可以得到很好的解决。3、flex-flow
复合属性,是flex-directionflex-wrap 的简写属性,是用于指定Flex子项的排列方式4、justify-content
用于指定主轴(水平方向)上Flex子项的对齐方式
取值:

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

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

53934a9425a62effe7114bd86b0808b4.png

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

a6865d7ec5882e6e312dd6a46b3df79b.png

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

50ff22ff187aff5b2086217e47ed7424.png

5、align-items
用于指定侧轴(垂直方向)上Flex子项的对齐方式
取值:

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

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

c3208d5a6d6c045ba23c8df49a56710a.png

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

a552e24ae9a93b4314cdf4a126d19cde.png

6、align-content
该属性只作用于多行的情况下,用于多行的对齐方式
取值:

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

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

100b6636f3ab00ac1a2be17a23ff8d66.png


作用于子元素的属性1、order
该属性用来指定Flex子项的排列顺序,数值越小,越靠前,可以为负数
取值:数值,默认值为02、flex-grow
用来指定Flex子项的扩展比例,不可以为负数,Flex容器会根据Flex子项设置的扩展比例作为比率来分配剩余空间
取值:数值,默认值为0,表示即使存在剩余空间,Flex子项也不会扩展
如下图中,按照1:3分配剩余空间:

9ea586fe06ec288cd43b29c64d41cd0a.png

3、flex-shrink
用来指定Flex子项的收缩比例,不可以为负数,Flex容器会根据Flex子项设置的收缩比例作为比率来收缩各个Flex子项
取值:数值,默认值为1,表示所有子项在剩余空间为负数时,等比例收缩注意:flex-shrink只能在不换行的情况下使用
如下图中,按照1:3收缩:

c28fb3d7f3f0405188e338d3a5af2e54.png

4、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分配剩余空间:

31c315c3f35afd2e4c16a55eb0efe83f.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自身长度值为准;
当width(或者height)的值为auto时,且内容的长度大于 flex-basis设置的值,此时以content自身长度值为准,且 不能进行flex-shrink收缩。相反如果内容的长度小于 flex-basis设置的值,则会使用 flex-basis设置的值;当存在最小值 min-widthmin-height)时,且 flex-basis的值小于最小值时,宽度以最小值为准,当 flex-basis的值大于最小值时,以 flex-basis的值为准

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

  • 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%

6、align-self
用来单独指定某Flex子项的对齐方式
取值:auto | flex-start | flex-end | center | baseline | stretch

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

想了解更多前端知识私信我或关注公众号“一郭鲜”,小郭在那里等着你

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值