Pourquoi faire de pourcentage de la largeur de la taille d'flex éléments de la zone n'est pas correctement augmentation de la largeur de la table d'enrubannage qui a un quelconque (c'est à dire auto) largeur?
Veuillez jeter un oeil à cet extrait:
CSS:
table {
background-color: yellow;
box-shadow: inset 0 0 1px red;
max-width: 100%;
/* You would get similarly strange behavior with collapsing borders: */
/* border-collapse: collapse; */
}
td {
background-color: lightgreen;
box-shadow: inset 0 0 1px blue;
max-width: 100%;
}
.flex {
max-width: 100%;
display: flex;
flex: 1;
background-color: lightblue;
box-shadow: inset 0 0 1px black;
flex-wrap: wrap;
}
.box {
width: 50%;
background-color: cyan;
border-radius: 9px;
box-shadow: inset 0 0 1px red;
}
HTML:
<table>
<tr>
<td>
<div class="flex">
<div class="box">
123456789ABCDEFGHIJKL
</div>
<div class="box">
meeedium
</div>
<div class="box">
short
</div>
</div>
</td>
</tr>
</table>
(Voici un codepen si vous voulez jouer avec elle plus facilement: http://codepen.io/anon/pen/MKJmBM)
Veuillez noter que le texte dans le coin supérieur gauche box
n'est pas complètement en elle. (Au moins dans google Chrome, il ne le fait pas.) J'ai été en supposant que la table d'enrubannage voudrais essayer de "pousser" sa largeur pour que son contenu complètement sur lui-même. Alors, est-ce un bug de mise en œuvre? Ou un comportement quelconque? Ou est-ce mon code tout simplement erronée?
Quelqu'un peut m'expliquer ce problème et de fournir une solution pour le réparer?
(Par la route... je suis tombé sur cet étrange comportement tandis que l'expérimentation de certains solution initiale des croquis pour cette question: À l'aide de CSS, comment créer un à deux colonnes de la grille avec l'égalité des colonnes de largeur qui sont "seulement autant que nécessaire"?)
Edit: Les deux "colonnes visuels" doit à la fois avoir une largeur égale. Par conséquent, les solutions impliquant par exemple max-width: 50%;
pour .box
ne sont pas ce que je cherche. Ma question est vraiment sur la table: Pourquoi n'est-il pas augmenter sa largeur, de sorte que l'ensemble de son contenu sont bien insérées dans lui-même?
Une solution pour le problème devrait s'assurer que la table ne sera pas "trop large": Il ne doit être aussi large que nécessaire, de sorte que le contenu sera juste bon - mais pas un seul sous-pixel de large.
- Je suis à la recherche dans ce au moment, mais la première erreur est
.flex { flex: 1 }
. Cet attribut est dans le parent conteneur souple tout enflex:
doivent être utilisés dans ou sur les fléchie classes enfant. Tout simplement supprimer la ligne et vous allez voir il n'y a pas de changement dans son comportement. Déplacer vers.box
et vous verrez qu'il ya. Ce n'est pas une solution (encore), juste une observation.
Vous devez vous connecter pour publier un commentaire.
Ceci est expliqué dans 9.2. Détermination De La Longueur De La Ligne.
Tout d'abord, le flex taille de base est déterminé pour chaque élément. Ce cas, c'est compliqué, parce que
width: 50%
dépend de la taille disponible. La spécification ditJe ne suis pas sûr si cela signifie que le flex taille de base sera le min-contenu ou max-content, parce que CSS utilisation de tables à la fois. Mais depuis il n'y a pas envelopper les opportunités, à la fois devrait être la même.
De sorte que le flex de la base de la taille de la largeur du texte.
Puis,
Ensuite, le tableau et le conteneur flex sera aussi large que la somme des textes.
Une fois la largeur du conteneur flex a été établi, le pourcentage de la flex éléments peuvent être résolus. Mais ils n'affecte pas la largeur du conteneur flex (ni la table).
Vous pouvez le voir mieux dans cet extrait de code:
CSS:
HTML:
Fondamentalement, ce que vous voulez, c'est de faire tous les flex éléments aussi large que la plus large une. Je ne pense pas qu'il existe un moyen de le faire en CSS, mais vous pouvez utiliser du JS.
En fait, alors que je ne suis pas sûr à 100% sur ce que vous voulez, la solution semble être proche de mon commentaire précédent. Supprimer
flex: 1
de.flex
et changementwidth:50%
dans.box
àflex-basis: 50%
.Oh, et pendant que vous y êtes, ajoutez un espace dans le
123456789ABCDEF
donc elle peut envelopper....CSS:
HTML:
Utilisation min-width sur la boîte. Qu'essayez-vous de faire exactement? pourquoi êtes-vous à l'aide de tableaux? vous pourriez utiliser des divs flottantes pour quelque chose comme ça et il l'habitude de faire face à beaucoup de problème.
CSS:
HTML:
La chose est que vous devez définir la largeur d'une certaine façon.
Il y a deux façons de le faire.
1) Largeur gestionnaire: Dernier outter élément
Ajuster les éléments internes d'une largeur de outter éléments " de largeur avec des valeurs en pourcentage, donc le dernier élément ( l'intérieur vers l'extérieur ) que vous définissez la largeur de la, sera la largeur gestionnaire pour tous les éléments internes.
2) Largeur gestionnaire: Contenu
Ajuster outter éléments à la largeur du contenu, les laissant sans châsse pour envelopper le contenu comme une chaussette prendrait la forme de votre pied.
De toute façon, vous devriez vraiment envisager de changer votre balisage et de le rendre tableless comme @Riche, il a dit.