重学flex布局

129 阅读2分钟

基础属性

父元素属性:

  • flex-direction:row|row-reverse|column|column-reverse
  • flex-wrap:nowrap|wrap|wrap-reverse
  • flex-flow:<flex-direction>|<flex-wrap>
  • justify-content: flex-start | center | flex-end | space-around | space-between
  • align-items:flex-start | center | flex-end | baseline | stretch
  • align-content: flex-start | center | flex-end | space-around | space-between | stretch

子元素属性:

  • flex-basis
  • flex-shrink:<number>
  • flex-grow:<number>
  • flex:<flex-grow> | <flex-shrink> | <flex-basis>
  • align-self
  • order:<integer>

关于align-items于align-content区分:

单行子项

1.不设置flex容器高度

align-items默认属性为normal顶部对齐,align-content默认属性也为mormal左边对齐,效果如下: image.png

align-items

display: flex
align-items:center

由于没有设置容器高度,此时容器高度为最高子项的高度,子项中各元素在交叉轴上以此高度进行居中对齐。

image.png

align-content

display: flex
align-content:center

对于单轴子项,align-content没有效果。 image.png

2.设置flex容器高度

align-items默认属性为normal顶部对齐,和不设置容器高度时效果一样: image.png

align-items

height:500px
display: flex
align-items:center

设置了容器高度以后,align-items使得子项在交叉轴基于容器高度进行居中对齐。

image.png

align-content

height:500px
display: flex
align-content:center

即使设置了容器高度,align-content仍然不起效果。 image.png

多行子项

1.不设置flex容器高度

每一行的高度为最大子项的高度。 image.png

align-items

display: flex
align-items:center

效果与单行子项一样,各行基于最大子项的高度进行居中对齐。

image.png

align-content

display: flex
align-content:center

与初始状态一样,由于容器的高度是由子项撑开,而align-content是以所有子项作为整体的,因为交叉轴上没有多余空间可以分配,因此align-content没有效果。 image.png

2.设置flex容器高度

此时的align-items和align-content的默认值normal效果与不设置容器高度效果不同:

image.png

align-items

height:500px
display: flex
align-items:center 容器根据交叉轴上的空间按行数进行分配,各行子项在自己所在行进行居中对齐:

image.png

align-content

height:500px
display: flex
align-content:center align-content将所有行子项作为一个整体进行居中对齐:

image.png

特殊情况

当子项为单行,但flex-wrap设置为wrap时,align-content仍然会有效果:

image.png 简单练习网站:flexboxfroggy.com/

参考资料: 1.developer.mozilla.org/zh-CN/docs/… 2.blog.csdn.net/cc188688768…