Table des matières
flex-basis
正负自由空间
flex-grow
Espace libre positif et négatif
flex-shrink
flex 的简写值
flex: 的应用:
两栏布局
三栏布局
结束语
Maison interface Web tutoriel CSS Un article expliquant en détail l'impact de trois propriétés de flexion sur les éléments

Un article expliquant en détail l'impact de trois propriétés de flexion sur les éléments

Aug 30, 2022 pm 07:50 PM
css flex

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-growflex-shrinkflex-basis的简写,可以使用一个、两个、或者三个值指定 flex 属性。具体语法可以参考MDN-flex

接下来我们逐一拆解这三个属性对元素的影响

flex-basis

flex-basis 定义了空间分配发生之前初始化 flex 子元素的尺寸,属性默认值 auto; flex 子元素未伸张和收缩之前,它的大小是多少。

如果 flex-basis 设置为 auto , 浏览器会先检查 flex 子元素的主尺寸是否设置了 flex 子元素的初始值。

比如说你已经给你的 flex 子元素设置了 150px 的宽,则 150px 就是这个 flex 子元素的 flex-basis;如果没有设置,则 auto 会解析为其内容的大小。这个例子中,给第一个元素设置宽度150px,第二、三个元素不设置宽度。

:first-child {
  width: 150px;
}
Copier après la connexion

效果如下:

Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

如果你想 flexbox 完全忽略 flex 子元素的尺寸就设置 flex-basis 为 0。这样就算元素一设置了宽度,它最终的宽度也是内容宽度。

Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

正负自由空间

在介绍剩下两个属性前先看两个概念 positive free space 正向自由空间和 negative free space反向自由空间:

  • 正向自由空间

    比如说,现在有 500px 宽的 flex 容器,flex-direction 属性值为 row, 三个 100px 宽的 flex 子元素, 那么没有被填充的 200px 的 就是正向自由空间(positive free space)。

Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

  • 反向自由空间

    当子元素的宽度总和大于容器宽度时,溢出的尺寸100px就是反向自由空间。

Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

那么用什么属性分配正负自由空间呢?

flex-grow

  • flex-grow 默认值 0
  • Nous devons d'abord comprendre, être flexibles is Les abréviations des trois attributs 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-basis

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. Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

Si flex-basis est défini sur auto, le navigateur vérifiera d'abord si la taille principale de l'élément enfant flex est définie sur la valeur initiale de l'élément enfant flex. 🎜🎜Par exemple, si vous avez défini une largeur de 150 px pour votre élément enfant flex, alors 150 px est la base flex de cet élément enfant flex si elle n'est pas définie, auto sera résolu à la taille de son contenu ; Dans cet exemple, la largeur du premier élément est définie sur 150 px et les deuxième et troisième éléments n'ont pas de largeur. 🎜
.flex-grow-father {
  width: 500px;
  div:nth-child(1) {
    width: 50px;
  }
  div:nth-child(2) {
    width: 100px;
  }
  div:nth-child(3) {
    width: 150px;
  }
}
Copier après la connexion
🎜L'effet est le suivant : 🎜🎜 Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments 🎜🎜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. 🎜🎜Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments🎜

Espace libre positif et négatif

🎜Regardons deux concepts avant d'introduire les deux attributs restants espace libre positif Vers la liberté space et espace libre négatif Espace libre inversé :🎜
  • 🎜Espace libre vers l'avant🎜🎜Par exemple, il existe maintenant un conteneur flexible de 500 px de large et la valeur de l'attribut flex-direction est row , trois éléments enfants flexibles de 100 px de large, alors les 200 px qui ne sont pas remplis sont l'espace libre positif. 🎜🎜🎜🎜Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments🎜
    • 🎜Espace libre inversé🎜🎜Lorsque la somme des largeurs des éléments enfants est supérieure à la largeur du conteneur, la taille de débordement de 100px est l'espace libre inversé. 🎜🎜🎜🎜Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments🎜 🎜Alors, quels attributs sont utilisés pour allouer un espace libre positif et négatif ? 🎜

      flex-grow

      • flex-grow 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🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">.with-same-flex-grow {   * {     flex-grow: 1;   } }</pre><div class="contentsignin">Copier après la connexion</div></div><div class="contentsignin">Copier après la connexion</div></div>🎜🎜🎜<p>增加的宽度计算方法:假设元素的 <code>flex-grow 值为 x,正向自由空间宽度为l,则每个元素增加的宽度=xx的总和l\frac{x}{x的总和}*l,元素最终宽度 = 元素初始宽度+增加的宽度元素初始宽度 + 增加的宽度

        • 相同比例增长:当给每个子元素的都设定相同的 flex-grow 值,每个元素就会增长相同的宽度
        .with-same-flex-grow {
          * {
            flex-grow: 1;
          }
        }
        Copier après la connexion
        Copier après la connexion

        效果如下:

        Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

        Calcul de la largeur du premier élément dans cet exemple11+1+1 2 00+ 50 =116.67pxfrac{1}{1+1+1}*200 + 50 = 116.67px;

        第二个元素宽度宽度计算 11+1+1200+100=166.67px\frac{1}{1+1+1}*200 + 100 = 166.67px

        第三个同理为216.67px216.67px

        • 不同比例增长:给每个子元素的都设定不同的 flex-grow 值
        .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;
          }
        }
        Copier après la connexion

        效果如下:

        Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

        Calcul de la largeur du premier élément dans cet exemple22+1+1 2 00+ 50 =150pxfrac{2}{2+1+1}*200 + 50 = 150px;

        第二个元素宽度的计算12+1+1200+100=150px\frac{1}{2+1+1}*200 + 100 = 150px

        第三个同理是200px200px

        • 如果想让开始时尺寸不同的元素内容宽度相等(平分容器宽度),可以将 flex-basis 设置为 0(完全忽略 flex 子元素的尺寸) flex-grow 为 1(等比例分配)
        .average {
          * {
            /* flex: 1 1 0; */
            flex-basis: 0;
            flex-grow: 1;
          }
        }
        Copier après la connexion

        效果如下:

        Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

        flex-shrink

        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;
          }
        }
        Copier après la connexion

        Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

        Calcul de la largeur absorbée : supposons que la valeur de chaque flex-rétrécissement est xnx_n, la largeur initiale de l'élément est lnl_n , l'espace libre inversé est L L Alors la largeur absorbée par chaque élément est : x n l n +xnlnLfrac{x_n*l_n}{x_1 *l_1+...+x_n*l_n}*L

        • 给子元素相同的 flex-shrink 值,这里以默认值 1 为例
        .with-same-flex-shrink {
          * {
            flex-shrink: 1;
          }
        }
        Copier après la connexion

        Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

        À ce moment, la largeur d'absorption du premier élément est : 11001100 + 1200+1300100=16.67p x frac{1*100}{1*100+1 *200 +1*300}*100 = 16,67 pixels 100 0 16.67=

        À ce moment, la largeur d'absorption du premier élément est : 12001100 + 1200+1300100=33.33p x frac{1*200}{1*100+1 *200 +1*300}*100 = 33,33px 33.33=166.67px200-33.33=166.67px2 00

        这时第一个元素的吸收宽度为:13001100+1200+1300100=50px\frac{1*300}{1*100+1*200+1*300}*100 = 50px,最终元素宽度为 30050=250px300-50=250px

        • 给子元素不同的 flex-shrink 值
        .with-different-flex-shrink {
          div:nth-child(1) {
            flex-shrink: 1;
          }
          div:nth-child(2) {
            flex-shrink: 2;
          }
          div:nth-child(3) {
            flex-shrink: 0;
          }
        }
        Copier après la connexion

        1Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

        À ce moment, la largeur d'absorption du premier élément est : 11001100 + 2 200100=20pxfrac{1*100}{1*100+2*200}*100 = 20px 20=80p x100-20=80px1 00

        À ce moment, la largeur d'absorption du deuxième élément est : 22001100 + 2 200100=80pxfrac{2*200}{1*100+2*200}*100 = 80px 80=120p x200-80=120px2 00p

        x

        300px 3 0 0p

        flex 的简写值

        一般我们很少见上述属性单独使用,都是用flex这一个简写属性来表述元素的伸缩。

        Flex 简写形式允许你把三个数值按这个顺序书写 flex-growflex-shrinkflex-basis。以下是常见的几种取值:

        • flex: initial 的扩展为 0 1 auto (不可放大、可缩小、大小与容器元素大小一致)
        • flex: auto 的扩展为 1 1 auto (可放大、可缩小、大小与容器元素大小一致)
        • flex: none 的扩展为 0 0 auto (不可放大、不可缩小、大小与容器元素大小一致)
        • flex: <positive-number></positive-number>的扩展为 <positive-number> 1 0</positive-number>

        flex: <positive-number></positive-number>的应用:

        两栏布局

        .two-grid-wrapper {
          display: flex;
          margin-top: 20px;
          height: 200px;
          .left {
            width: 200px;
            background-color: gold;
          }
          .right {
            flex: 1;
            background-color: tan;
          }
        }
        Copier après la connexion

        效果如下:左侧宽度不变,右侧自适应

        1Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

        三栏布局

        .three-grid-wrapper {
          display: flex;
          margin-top: 20px;
          height: 200px;
          .left {
            width: 200px;
            background-color: gold;
          }
          .right {
            width: 200px;
            background-color: gold;
          }
          .center {
            flex: 1;
            background-color: tan;
          }
        }
        Copier après la connexion

        效果如下:左右宽度不变,中间自适应

        1Un article expliquant en détail limpact de trois propriétés de flexion sur les éléments

        PS.flex 子元素没有 positive free space 就不会增长;没有 negative free space 就不会缩小。

        结束语

        学习八股文的时候发现自己对flex布局很不熟悉,基本概念都说不上来,只会无脑用,于是去学习,然后就诞生了这篇文章。欢迎指正。

        (学习视频分享:web前端

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser le bouton bootstrap Comment utiliser le bouton bootstrap Apr 07, 2025 pm 03:09 PM

Comment utiliser le bouton bootstrap? Introduisez Bootstrap CSS pour créer des éléments de bouton et ajoutez la classe de bouton bootstrap pour ajouter du texte du bouton

Comment insérer des photos sur bootstrap Comment insérer des photos sur bootstrap Apr 07, 2025 pm 03:30 PM

Il existe plusieurs façons d'insérer des images dans Bootstrap: insérer directement les images, en utilisant la balise HTML IMG. Avec le composant d'image bootstrap, vous pouvez fournir des images réactives et plus de styles. Définissez la taille de l'image, utilisez la classe IMG-FLUID pour rendre l'image adaptable. Réglez la bordure en utilisant la classe IMG-border. Réglez les coins arrondis et utilisez la classe Roundée IMG. Réglez l'ombre, utilisez la classe Shadow. Redimensionner et positionner l'image, en utilisant le style CSS. À l'aide de l'image d'arrière-plan, utilisez la propriété CSS d'image d'arrière-plan.

Comment redimensionner le bootstrap Comment redimensionner le bootstrap Apr 07, 2025 pm 03:18 PM

Pour ajuster la taille des éléments dans Bootstrap, vous pouvez utiliser la classe de dimension, qui comprend: ajuster la largeur: .col-, .w-, .mw-ajustement Hauteur: .h-, .min-h-, .max-h-

Comment écrire des lignes fendues sur bootstrap Comment écrire des lignes fendues sur bootstrap Apr 07, 2025 pm 03:12 PM

Il existe deux façons de créer une ligne divisée bootstrap: en utilisant la balise, qui crée une ligne divisée horizontale. Utilisez la propriété CSS Border pour créer des lignes de fractionnement de style personnalisées.

Comment afficher la date de bootstrap Comment afficher la date de bootstrap Apr 07, 2025 pm 03:03 PM

Réponse: Vous pouvez utiliser le composant de sélecteur de date de bootstrap pour afficher les dates dans la page. Étapes: Présentez le framework bootstrap. Créez une boîte d'entrée de sélecteur de date dans HTML. Bootstrap ajoutera automatiquement des styles au sélecteur. Utilisez JavaScript pour obtenir la date sélectionnée.

Comment configurer le cadre de bootstrap Comment configurer le cadre de bootstrap Apr 07, 2025 pm 03:27 PM

Pour configurer le framework Bootstrap, vous devez suivre ces étapes: 1. Référez le fichier bootstrap via CDN; 2. Téléchargez et hébergez le fichier sur votre propre serveur; 3. Incluez le fichier bootstrap dans HTML; 4. Compiler les sass / moins au besoin; 5. Importer un fichier personnalisé (facultatif). Une fois la configuration terminée, vous pouvez utiliser les systèmes, composants et styles de grille de Bootstrap pour créer des sites Web et des applications réactifs.

Comment vérifier la date de bootstrap Comment vérifier la date de bootstrap Apr 07, 2025 pm 03:06 PM

Pour vérifier les dates dans Bootstrap, suivez ces étapes: introduisez les scripts et styles requis; initialiser le composant de sélecteur de date; Définissez l'attribut Data-BV-Date pour activer la vérification; Configurer les règles de vérification (telles que les formats de date, les messages d'erreur, etc.); Intégrez le cadre de vérification de bootstrap et vérifiez automatiquement l'entrée de date lorsque le formulaire est soumis.

Comment utiliser Bootstrap en Vue Comment utiliser Bootstrap en Vue Apr 07, 2025 pm 11:33 PM

L'utilisation de bootstrap dans vue.js est divisée en cinq étapes: installer bootstrap. Importer un bootstrap dans main.js. Utilisez le composant bootstrap directement dans le modèle. Facultatif: style personnalisé. Facultatif: utilisez des plug-ins.

See all articles