flex 会使div撑满_如何讲清楚Flex弹性盒模型?(中)

本文介绍了Flex布局中子元素的属性,包括order属性的排序功能,flex-basis属性用于设定主轴方向的大小,重点解析了flex-grow属性如何让元素按比例填充剩余空间,以及flex-shrink属性在空间不足时如何按比例缩减元素大小。通过实例展示了这些属性的实际效果和计算逻辑。
摘要由CSDN通过智能技术生成

上一篇我们讲解了, flex容器的属性, 如何定义主轴方向, 以及主轴侧轴对齐方式

这篇讲解子元素的一些属性.

如何对子项目进行排序?

弹性盒模型第一次可以让我们方便的对元素进行排序

使用 order属性, 它的默认值是0

968d75618b050ec852427c5518353881.png
元素按照order顺序排列

如何定义子项目大小?

flex布局提供另外一个属性 flex-basis

它用来设定元素在主轴方向的大小

注意主轴可以是row方向, 也可以column方向

02026fea610c1870bf1543e03a4421d2.png

另外, 某个子元素, 可以单独设置跟其它子元素不一致的(侧轴)对齐方式.

4a3b0dffeaa81169173c4cd3ac9c3c95.png

最后, 要隆重的介绍flex-grow这个属性了

802cff83b31b1b43d6b352f0a81a19cc.png

它叫做『剩余空间瓜分比例』

从图上可以看出, AB没有撑满flex容器, 如果希望AB调整大小撑满容器的话

我们需要加上flex-grow这个属性

.container {
    display: flex;
    width: 500px;
    ....
}
div:nth-child(1) {
    width: 100px;
    background-color: pink;
    flex-grow: 1;
}
div:nth-child(2) {
    width: 100px;
    background-color: lightseagreen;
    flex-grow: 1;
}

那么AB元素会按照1:1的比例把父元素剩余的空间瓜分掉, 效果如图

a4ab4624778fa47f61ec744133bfaf97.png

当然, 如果你希望B保持不变, 只有A变大的话, 你可以这样写

div:nth-child(1) {
    background-color: pink;
    flex-grow: 1;
}
div:nth-child(2) {
    background-color: lightseagreen;
    flex-grow: 0;  /*默认值就是0, 其实不用写*/
}

e377a24badfadc0e90ee9f1b869fd122.png

我们也可以调整比例

div:nth-child(1) {
    width:100px;
    background-color: pink;
    flex-grow: 2;
}
div:nth-child(2) {
    width:100px;
    background-color: lightseagreen;
    flex-grow: 1; 
}

0f33b2e72059fe0c105b3cf749946620.png
AB按照2:1的比例瓜分了剩余空间

既然可以放大, 元素也能缩小

接下来介绍flex-shrink属性, 它叫做多余空间削减比例

当元素大小超出了flex父容器, 子元素可以按比例缩减.

但是这里的算法比刚才的flex-grow复杂了一些

我们先看一种简单的情况

.container{
	display: flex;
	flex-direction: row;
	justify-content: flex-start;
	box-shadow: 0 0 0 1px black;
	height: 100px; width: 400px; /*父元素宽度为400*/
} 
div:nth-child(1) {
	width: 300px;  /*子元素A宽度为300*/
	background-color: pink;
	flex-shrink: 1; /*多余空间削减比例为1, 默认值为1, 可以不写*/
}
div:nth-child(2) {
	width: 200px;  /*子元素B宽度为200*/
	background-color: lightseagreen;
	flex-shrink: 1; /*多余空间削减比例为1, 默认值为1, 可以不写*/
}

削减比例我们设置了1:1 , 那么实际结果呢?

193af26466f4748a8a942e9d47c8aacb.png

从图中的实际效果来看,

A元素削减了60个像素

B元素削减了40个像素

这并不是1:1啊, 这是3:2啊

这个3:2又是怎么来的呢?

其实, 它就是AB元素的原始比例大小

所以, 在削减比例上, 元素还会受到原始大小比例的影响 总结一个公式如下: 子元素的削减比例===原始大小比例 X flex-shrink比例

那么, 根据我们所得的公式, 如果我们想让上面的例子当中

AB元素都削减一样的大小该如何做呢?

答案就是:

div:nth-child(1) {
	width: 300px;
	background-color: pink;
	flex-shrink: 2;
}
div:nth-child(2) {
	width: 200px;
	background-color: lightseagreen;
	flex-shrink: 3;
}

最终效果:

75f2ba873f72fdd4d2f0ec8b6bcb9419.png

让我们来总结一下

项目的属性(添加在子元素身上的属性)

  • Order属性

order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。

.item {
   order: <integer>;
}
  • flex-basis属性

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。

.item {
    flex-basis: <length> | auto; /* default auto */
}
  • align-self属性

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

.item {
     align-self: auto | flex-start | flex-end | center | baseline | stretch;
}
  • flex-grow属性

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

.item {
   flex-grow: <number>; /* default 0 */
}
  • flex-shrink属性

flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

.item {
    flex-shrink: <number>; /* default 1 */
}

本文摘自 知乎号:千锋HTML5学院

原文链接:如何讲清楚Flex弹性盒模型(中)?

Eric:如何讲清楚Flex弹性盒模型?(上)​zhuanlan.zhihu.com
zhihu-card-default.svg
Eric:详解JavaScript严格模式​zhuanlan.zhihu.com
1860a33922d3a4cea28ca65eaf2023cb.png
Eric:vue 过滤器​zhuanlan.zhihu.com
4c17c03fd1d73590ba6779e145d1d9e0.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值