Fondamentalement, dans IE10, un élément p dont le texte est plus large que son parent lorsque la "direction" est une ligne, débordera et poussera par la suite tous les autres frères et sœurs hors du conteneur. L'habillage semble fonctionner correctement en mode colonne (et vous pouvez afficher le même jsfiddle dans Chrome et le voir se comporter comme prévu).
<div id="flex-one">
<p>Some extra long content (for the container) that correctly wraps!</p>
<aside>Content</aside>
</div>
<div id="flex-two">
<p>Some extra long content (for the container) that incorrectly wraps!</p>
<aside>Content</aside>
</div>
div {
width: 250px;
padding: 1em;
background: blue;
display: -webkit-flex;
display: -ms-flexbox;
margin-bottom: 1em;
}
#flex-one {
-webkit-flex-flow: column;
-ms-flex-direction: column;
}
#flex-two {
-webkit-flex-flow: row;
-ms-flex-direction: row;
}
p {
margin: 0;
padding: 0;
background: yellow;
}
aside {
background: red;
}
Des idées sur la façon de corriger ce comportement afin qu'il ne déborde pas de son conteneur? (sans fournir un fixe avec car il est utilisé dans une configuration fluide).
Cela n'a aucun sens pour moi, mais ajouter -ms-flex: 0 1 auto
ou -ms-flex: 1 1 auto
au paragraphe et à côté le corrige dans IE10. Par défaut, les éléments sont censés avoir flex: 0 1 auto
leur est appliqué lorsqu'ils deviennent des éléments flexibles.
Pour moi, je devais le faire avant qu'il ne commence à travailler pour moi:
(utiliser des classes pour plus de clarté et ne pas inclure de préfixes pour plus de concision)
HTML:
<a class="flex">
<span class="flex-child">Text that isn't wrapping in IE10</span>
</a>
CSS:
.flex {
display: flex;
}
.flex-child {
display: block;
max-width: 100%;
flex-shrink: 1;
}
Notez que vous devez définir des éléments enfants naturellement inline sur autre chose que inline (principalement display:block
ou display:inline-block
) pour que le correctif fonctionne.
Merci aux réponses précédentes de m'avoir aidé la plupart du temps :)
Mise à jour:
La technique ci-dessus ne fonctionne pas si flex-direction est défini sur column.
Ma recommandation pour quand flex-direction est définie sur colonne est d'utiliser une requête multimédia de largeur minimale pour attribuer une largeur maximale sur le bureau.
.flex {
display: flex;
flex-direction: column;
}
//a media query targeting desktop sort of sized screens
@media screen and (min-width: 980px) {
.flex-child {
display: block;
max-width: 500px;//maximimum width of the element on a desktop sized screen
flex-shrink: 1;
}
}
La réponse acceptée n'a pas fonctionné pour moi.
Mon problème ( http://jsfiddle.net/Hoffmeyer/xmjs1rmq/ ) a été résolu comme décrit dans flexbugs https://github.com/philipwalton/flexbugs#2-column-flex -items-set-to-align-itemscenter-overflow-their-container
Ensemble
max-width: 100%
Ajouter flex-shrink: 1
au parent des éléments qui doivent être enveloppés a corrigé cela pour moi dans IE10.
Remarque: flex: 1 1 auto
(ou -ms-flex
) est un raccourci pour:
flex-grow: 1
flex-shrink: 1
flex-basis: auto
Dans ce cas, il s'agit spécifiquement de flex-shrink
qui résoudra le problème. Cette propriété doit être 1
par défaut, donc je suppose que c'est un bogue avec l'implémentation IE10 de flex box et en définissant explicitement sa valeur, il corrige le bogue.
cette image montre la moyenne de flexion par défaut dans IE 10, la valeur par défaut de flex-shrink dans IE10 est 0; donc si le code est:
.title {
display: flex;
justify-content: space-between;
}
<div class="title">
<span class="title-name">some Word word Word</span>
<label >some one checkbox</label>
</div>
mais la plage ne sera pas encapsulée dans IE10, le code doit donc être le suivant:
.title {
display: flex;
justify-content: space-between;
}
.title-name{
display: block;
flex-shrink: 1;
}