adodo0829 / blog

搭建知识体系
29 stars 4 forks source link

flex元素属性详解 #66

Open adodo0829 opened 4 years ago

adodo0829 commented 4 years ago

flex元素属性

创建一个 flex 容器区域: 把一个容器的 display 属性值改为 flex 或者 inline-flex即可, 容器中的直系子元素就会变为 flex 元素

flex 元素上的属性

Flex 简写形式: flex-grow,flex-shrink,flex-basis。 flex 属性的作用改变了 flex 容器中的可用空间(正负)的行为;

假设在 1 个 500px 的容器中,我们有 3 个 100px 宽的元素,那么这 3 个元素需要占 300px 的宽,剩下 200px 的可用空间。在默认情况下, flexbox 的行为会把这 200px 的空间留在最后一个元素的后面

如果没有给元素设定尺寸,flex-basis 的值采用元素内容的尺寸content-box。 这就解释了:我们给只要给Flex元素的父元素声明 display: flex ,所有子元素就会排成一行,且自动分配小大以充分展示元素的内容。 */


- flex-grow
```css
/*
flex-grow 若被赋值为一个正整数, flex 元素会以 flex-basis 为基础,沿主轴方向增长尺寸。
这会使该元素延展,并占据此方向轴上的可用空间(available space)。
如果有其他元素也被允许延展,那么他们会各自占据可用空间的一部分。

如果我们给上例中的所有元素设定 flex-grow 值为1, 容器中的可用空间会被这些元素平分。
它们会延展以填满容器主轴方向上的空间。

flex-grow 属性可以按比例分配空间。如果第一个元素 flex-grow 值为2, 其他元素值为1,
则第一个元素将占有2/4(上例中,即为 200px 中的 100px), 另外两个元素各占有1/4(各50px)。
*/

在计算flex元素收缩的大小时,它的最小尺寸也会被考虑进去,就是说实际上flex-shrink属性可能会和flex-grow属性表现的不一致。

在给 flex-grow 和 flex-shrink 赋值是要注意比例。如果我们给所有flex元素的flex属性赋值为 1 1 200px , 并且希望其中一个元素可以增加到2倍,我们可以给该元素的flex属性赋值为2 1 200px */


## 小结: Flex子元素大小
- flex 子元素的基本大小

flex-basis: auto: 默认(content-box 大小) 固定尺寸: 100px 100px 0: 忽略flex子元素的尺寸, 等比划分的基础

- flex 容器的可用空间(正负)  

flex-grow 会在可用空间发挥作用 0: 不分配空间 1: 按比例划分空间

flex-shrink 会在可用空间发挥作用 0: 不收缩空间 1: 收缩对应比例的负空间尺寸



## 参考
[控制Flex子元素在主轴上的比例](https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout/Controlling_Ratios_of_Flex_Items_Along_the_Main_Ax)