Pourquoi les éléments flexibles ne peuvent-ils pas être réduits à une taille inférieure à la taille du contenu ?
P粉432906880
P粉432906880 2023-08-21 22:36:03
0
2
525
<p>J'ai 4 colonnes flexbox et tout fonctionne bien, mais lorsque j'ajoute du texte à une colonne et que je la règle sur une grande taille de police, la colonne est plus large qu'elle ne devrait l'être en raison de la propriété flex. </p> <p>J'ai essayé d'utiliser <code>word-break: break-word</code> et cela m'a aidé, mais lorsque j'ai redimensionné les colonnes à une très petite largeur, les lettres du texte étaient divisées en plusieurs lignes (une lettre par ligne), mais la largeur de la colonne ne sera pas inférieure à la taille d'une lettre. </p> <p>Regardez cette vidéo (Au début, la première colonne est la plus petite, mais lorsque je redimensionne la fenêtre, elle devient la colonne la plus large. Je veux juste toujours respecter les paramètres de flexion ; la taille du flex est de 1:3 : 4 :4)</p> <p>Je sais que définir la taille de la police et le remplissage des colonnes sur des valeurs plus petites aidera... mais existe-t-il une autre solution ? </p> <p>Je ne peux pas utiliser <code>overflow-x: Hidden</code>. </p> <p>JSFiddle</p> <p><br /></p> <pre class="brush:css;toolbar:false;">.container { affichage : flexible ; largeur : 100% } .col { hauteur minimale : 200 px ; remplissage : 30 px ; saut de mot : briser le mot } .col1 { flexion : 1 ; fond : orange ; taille de la police : 80px } .col2 { flexion : 3 ; fond : jaune } .col3 { flexion : 4 ; fond : bleu ciel } .col4 { flexion : 4 ; fond : rouge }</pré> <pre class="brush:html;toolbar:false;"><div class="container"> <div class="col col1">Lorem ipsum dolor</div> <div class="col col2">Lorem ipsum dolor</div> <div class="col col3">Lorem ipsum dolor</div> <div class="col col4">Lorem ipsum dolor</div> </div></pre> <p><br /></p>
P粉432906880
P粉432906880

répondre à tous(2)
P粉440453689

J'ai constaté que cela m'a causé des problèmes à plusieurs reprises au cours des dernières années, tant pour le flex que pour la grille, je suggère donc ce qui suit :

* { min-width: 0; min-height: 0; }

Si vous avez besoin de ce comportement, utilisez simplement min-width: automin-height: auto.

En fait, vous pouvez également ajouter des dimensions de boîte pour rendre toutes les mises en page plus raisonnables :

* { box-sizing: border-box; min-width: 0; min-height: 0; }

Est-ce que quelqu'un sait s'il y a des conséquences étranges ? Depuis plusieurs années d'utilisation de la méthode ci-dessus, je n'ai eu aucun problème. En fait, je ne peux penser à aucune situation dans laquelle je voudrais mettre en page du contenu vers l'extérieur en flex/grid, plutôt que de flex/grid vers l'intérieur en contenu --- et si une telle situation existe, elle est certainement rare. Cela ressemble donc à un mauvais défaut. Mais peut-être qu'il me manque quelque chose ?

P粉752479467

Taille minimale automatique pour les projets Flex

Vous rencontrez les paramètres par défaut de flexbox.

Les éléments Flex ne peuvent pas être plus petits que la taille de leur contenu sur l'axe principal.

Le paramètre par défaut est...

  • min-width: auto
  • min-height: auto

...Applicable aux éléments flexibles respectivement dans le sens des lignes et des colonnes.

Vous pouvez définir l'élément flexible sur :

  • min-width: 0
  • min-height: 0
  • overflow: hidden(或任何其他值,除了visible)

Spécifications Flexbox

À propos de autovaleur...

En d'autres termes :

  • min-width: automin-height: auto默认仅在overflowvisible et
  • ne sont applicables par défaut que lorsque overflow est visible.
  • overflow的值不是visible,则min-size属性的值为0Si
  • .
  • overflow: hidden可以替代min-width: 0min-height: 0Par conséquent, overflow: Hidden peut remplacer
  • et
.

    et...
  • L'algorithme de taille minimale ne fonctionne que sur les broches. min-height: auto
  • Par exemple, les éléments flexibles dans des conteneurs orientés lignes ne reçoivent pas
  • par défaut.
    • Pour une explication plus détaillée, voir cet article :
    • min-width est rendu différemment dans flex-direction: row et flex-direction: column

Vous avez appliqué min-width : 0 mais votre projet ne rétrécit toujours pas ?

Conteneurs flexibles imbriqués

min-width: auto / min-height: auto

Si vous travaillez avec des éléments flexibles sur plusieurs niveaux de votre structure HTML, vous souhaiterez peut-être remplacer la valeur par défaut

/min-width: auto的较高级别flex项目可以阻止下方嵌套的具有min-width: 0 sur les éléments de niveau supérieur.

Fondamentalement, un élément flexible de niveau supérieur avec

empêche l'élément imbriqué ci-dessous avec
La propriété CSS des espaces blancs est en conflit avec la mise en page flexible


Démo révisée

.container {
  display: flex;
}

.col {
  min-height: 200px;
  padding: 30px;
  word-break: break-word
}

.col1 {
  flex: 1;
  background: orange;
  font-size: 80px;
  min-width: 0;   /* NEW */
}

.col2 {
  flex: 3;
  background: yellow
}

.col3 {
  flex: 4;
  background: skyblue
}

.col4 {
  flex: 4;
  background: red
}
<div class="container">
  <div class="col col1">Lorem ipsum dolor</div>
  <div class="col col2">Lorem ipsum dolor</div>
  <div class="col col3">Lorem ipsum dolor</div>
  <div class="col col4">Lorem ipsum dolor</div>
</div>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal