flex布局怎么设置子元素大小_如何讲清楚Flex弹性盒模型?(中)

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

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

如何对子项目进行排序?

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

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

d6c09ecdf337a9e6880c9b539578c3e2.png

元素按照order顺序排列

如何定义子项目大小?

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

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

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

daab4ae9282ed29caa200a4398220916.png

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

cc3bc725ba53d9afd05f86510d477ec2.png

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

d6d88700d6a6515aaeb483433fdbd0aa.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的比例把父元素剩余的空间瓜分掉, 效果如图

d09ae16acb91d164e359b37f85779a37.png

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

div:nth-child(1) {    background-color: pink;    flex-grow: 1;}div:nth-child(2) {    background-color: lightseagreen;    flex-grow: 0;  /*默认值就是0, 其实不用写*/}
b7f82bb34438052aa4b2e9947bed7161.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; }
9866011b1e9e6a6c82577a5154f9b6b0.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 , 那么实际结果呢?

6636d6ef66f4a50c4fe706e69000414b.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;}

最终效果:

e4bf2211ab74b9d5e0bb3bbf600b78e8.png

让我们来总结一下

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

  • Order属性

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

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

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

.item {    flex-basis:  | 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: ; /* default 0 */}
  • flex-shrink属性

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

.item {    flex-shrink: ; /* default 1 */}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值