Maison > Article > interface Web > Un article expliquant en détail l'impact de trois propriétés de flexion sur les éléments
Lors du développement, on utilise souvent l'attribut flex pour agir sur les éléments enfants de la boîte flexible, par exemple : flex:1
ou flex: 1 1 auto
, alors cet attribut Comment contrôle-t-il le comportement des éléments ? Que signifie exactement flex:1
? Laissez cet article vous guider dans une compréhension approfondie de la propriété flex ! [Apprentissage recommandé : tutoriel vidéo CSS]flex:1
或者flex: 1 1 auto
,那么这个属性到底控制了元素怎么的行为呢?flex:1
又究竟是什么含义呢?让这篇文章带你彻底了解 flex 属性吧!【推荐学习:css视频教程】
首先我们需要了解,flex 是三个属性 flex-grow
、flex-shrink
、flex-basis
的简写,可以使用一个、两个、或者三个值指定 flex 属性。具体语法可以参考MDN-flex
接下来我们逐一拆解这三个属性对元素的影响
flex-basis 定义了空间分配发生之前初始化 flex 子元素的尺寸,属性默认值 auto
; flex 子元素未伸张和收缩之前,它的大小是多少。
如果 flex-basis 设置为 auto , 浏览器会先检查 flex 子元素的主尺寸是否设置了 flex 子元素的初始值。
比如说你已经给你的 flex 子元素设置了 150px 的宽,则 150px 就是这个 flex 子元素的 flex-basis;如果没有设置,则 auto 会解析为其内容的大小。这个例子中,给第一个元素设置宽度150px,第二、三个元素不设置宽度。
:first-child { width: 150px; }
效果如下:
如果你想 flexbox 完全忽略 flex 子元素的尺寸就设置 flex-basis 为 0。这样就算元素一设置了宽度,它最终的宽度也是内容宽度。
在介绍剩下两个属性前先看两个概念 positive free space
正向自由空间和 negative free space
反向自由空间:
正向自由空间
比如说,现在有 500px 宽的 flex 容器,flex-direction 属性值为 row, 三个 100px 宽的 flex 子元素, 那么没有被填充的 200px 的 就是正向自由空间(positive free space)。
反向自由空间
当子元素的宽度总和大于容器宽度时,溢出的尺寸100px就是反向自由空间。
那么用什么属性分配正负自由空间呢?
默认值 0
flex-grow
, flex-shrink
et flex-basis
peuvent être spécifiées avec un, deux ou trois valeurs. Pour une syntaxe spécifique, veuillez vous référer à MDN-flex
Ensuite, décomposons l'impact de ces trois attributs sur l'élément un par un
flex-base définit la taille de l'élément enfant flex initialisé avant que l'allocation d'espace ne se produise. L'attribut la valeur par défaut est auto
; rétrécit.
.flex-grow-father { width: 500px; div:nth-child(1) { width: 50px; } div:nth-child(2) { width: 100px; } div:nth-child(3) { width: 150px; } }🎜L'effet est le suivant : 🎜🎜🎜🎜Si vous souhaitez que flexbox ignore complètement la taille des éléments enfants flex, définissez flex-basis sur 0. De cette façon, même si l'élément 1 a une largeur définie, sa largeur finale sera la largeur du contenu. 🎜🎜🎜
espace libre positif
Vers la liberté space et espace libre négatif
Espace libre inversé :🎜Valeur par défaut 0, s'il est affecté à un entier positif, l'élément flex augmentera en taille le long de l'axe principal en fonction de la base flex et occupera l'espace disponible. flex-grow alloue un espace de croissance proportionnellement. 🎜🎜🎜État initial : nous définissons la largeur des trois éléments, et la somme n'est pas supérieure à la largeur de l'axe principal🎜<pre class="brush:php;toolbar:false">.with-same-flex-grow {
* {
flex-grow: 1;
}
}</pre>🎜🎜🎜<p>增加的宽度计算方法:假设元素的 <code>flex-grow
值为 x
,正向自由空间宽度为l,则每个元素增加的宽度=,元素最终宽度 = ;
.with-same-flex-grow { * { flex-grow: 1; } }
效果如下:
Calcul de la largeur du premier élément dans cet exemple;
第二个元素宽度宽度计算 ;
第三个同理为
.with-different-flex-grow { div:nth-child(1) { flex-grow: 2; } div:nth-child(2) { flex-grow: 1; } div:nth-child(3) { flex-grow: 1; } }
效果如下:
Calcul de la largeur du premier élément dans cet exemple;
第二个元素宽度的计算;
第三个同理是
.average { * { /* flex: 1 1 0; */ flex-basis: 0; flex-grow: 1; } }
效果如下:
flex-shrink 属性指定了 flex 元素的缩小值,默认值为 1
; 它确定在分配 negative free space 时,flex 子元素相对于 flex 容器中其余 flex 子元素收缩的程度。默认值 1。用于减少盒子空间使盒子适应容器而不溢出(为了避免 border 干扰去掉边框)
我们给三个元素都设定宽度,并且总和大于主轴宽度;这里我们将元素的flex-shrink值设置为 0 (元素宽度不变,不需要吸收溢出的宽度),目的是观察一下反向自由空间。
.flex-shrink-wrapper { display: flex; div:nth-child(1) { width: 100px; background: gold; } div:nth-child(2) { width: 200px; background: tan; } div:nth-child(3) { width: 300px; background: gold; } } .zero { * { flex-shrink: 0; } }
Calcul de la largeur absorbée : supposons que la valeur de chaque flex-rétrécissement est , la largeur initiale de l'élément est , l'espace libre inversé est Alors la largeur absorbée par chaque élément est :
.with-same-flex-shrink { * { flex-shrink: 1; } }
À ce moment, la largeur d'absorption du premier élément est : 0 0 0
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!