CSS - Flex属性 - flex-grow / flex-shrink / flex-basis(下)

简介: CSS - Flex属性 - flex-grow / flex-shrink / flex-basis(下)

flex-basis总和加起来为1000px; 那么 1000px > 800px (父级的宽度);子元素势必要压缩;溢出了200px;

son1 = (flex-shrink) flex-basis;
son2 = (flex-shrink)
flex-basis;

…..

sonN = (flex-shrink) * flex-basis;

如果flex-basis的总和加起来大于父级宽度,子级被压缩,最后的选择是flex-shrink来进行压缩计算:

加权值 = son1 + son2 + …. + sonN;

那么压缩后的计算公式就是:

压缩后宽度 w = (子元素flex-basis值 (flex-shrink)/加权值) 溢出值。

所以最后的加权值是:

1200 + 2300 + 3500 = 2300px

son1的扩展量:(200 1 / 2300) 200,即约等于17px;

son2的扩展量:(300 2 / 2300) 200,即约等于52px;

son3的扩展量:(500 3 / 2300) 200,即约等于130px;

最后son1、son2、son3,的实际宽度为:

200 – 16 = 184px;

300 – 52 = 248px;

500 – 230 = 370px;

看demo http://www.heibaipig.com/demo/flex/demo1.html

 

第二种情况

上面的例子已经说明,继续看第二个例子,同样上面的例子,我们改下父级宽度为1200px。

flex-basis的总和为 1000px,小于父级宽度,将有200px的剩余宽度。

既然有剩余,我们就不要加权计算,剩余的宽度将根据flex-grow,值得总和进行百分比,那么200px就会根据份数比来分配剩余的空间。

剩余后宽度 w = (子元素flex-grow值 /所有子元素flex-grow的总和) * 剩余值。

总份数为 total = 1 + 2 + 3;

son1的扩展量:(3/total) 200,即约等于100px;
son2的扩展量:(2/total)
200,即约等于67px;

son3的扩展量:(1/total) * 200,即约等于33px;

最后son1、son2、son3,的实际宽度为:

200 + 100 = 300px;

300 + 67 = 367px;

500 + 33 = 533px;

看demo http://www.heibaipig.com/demo/flex/demo1.html

 

总结

所以以上两种情况下,第二种flex-basis和flex-shrink是不列入计算公式的;第一种flex-grow是不列入计算公式的。

ok,上面的两种情况总结完毕,但是很多时候我们的父级是不固定的,那么怎么办,其实很简单了,对照上面的公式,前提是已经设置了flex-basis值得元素,如果宽度的随机值小于flex-basis的时候就按第一种计算,反之第二种;明白了吧。

但是在实际中,我们有些子元素不想进行比例分配,永远是固定的,那么flex就必须设置为none;否则设置的宽度(width)将无效。

flex:1,则其计算值为 flex:1 1 0%

flex:auto,则其计算值为 flex:1 1 auto

flex:none,则其计算值为 flex:0 0 auto

根据上面的公式

flex:1的时候第一种方式其实是无效的,因为加权值是0,所以只能是第二种方式计算;

flex:none的时候,两种都失效,自己元素不参与父级剩余还是溢出的分配,flex:none的应用场景还是很多的。

好了,想必大家也明白了吧,这个用法了吧。有兴趣的可以实际操作下吧~


目录
相关文章
|
28天前
|
开发者 容器
flex 布局属性在实际项目中的应用场景有哪些?
flex 布局属性在实际项目中的应用场景有哪些?
|
29天前
|
前端开发
CSS属性:盒子模型
CSS属性:盒子模型
27 0
|
29天前
|
前端开发
CSS属性
CSS属性
28 0
|
1月前
|
前端开发
前端基础(五)_CSS文本文字属性、背景颜色属性
本文详细介绍了CSS中关于文本和背景颜色的样式属性。包括字体大小、字体族、字体加粗、字体样式、文本行高、`font`属性、文本颜色、文本对齐方式、文本装饰线、首行缩进等文本属性,以及背景颜色、背景图片、背景重复、背景位置等背景属性。文章通过示例代码展示了这些属性的具体应用和效果。
21 3
前端基础(五)_CSS文本文字属性、背景颜色属性
|
12天前
|
数据可视化 前端开发 搜索推荐
FLEX组件可视化设计器CSS3代码生成器
FLEX组件可视化设计器CSS3代码生成器
16 4
|
12天前
|
前端开发
CSS 中哪些属性可以继承
在 CSS 中,属性分为可继承与不可继承。可继承属性会在子元素中沿用父元素的样式设定。常见可继承属性包括:文本属性(如 `font-family`, `color`),列表属性(如 `list-style`),表格布局属性(如 `border-collapse`),以及其他如 `visibility` 和 `direction` 等属性。正确理解这些属性有助于更高效地进行样式设计。
|
9天前
|
前端开发 开发者 容器
CSS3:flex&box-sizing
本文介绍了CSS中的Flex布局及其相关属性,如`flex-direction`、`flex-wrap`、`justify-content`等,并通过代码示例展示了如何使用这些属性来控制容器内的项目排列方式。同时,还讲解了`align-items`属性用于定义子元素在交叉轴上的对齐方式,以及`box-sizing`属性的不同取值对元素尺寸计算的影响。
|
9天前
|
前端开发 JavaScript
如何在CSS中添加自定义属性
如何在CSS中添加自定义属性
8 0
|
9天前
|
前端开发
运用CSS伪类与属性,巧妙实现背景图片旋转效果
运用CSS伪类与属性,巧妙实现背景图片旋转效果
11 0