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 en flex: 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.
InformationsquelleAutor Hauke P. | 2016-01-03