Mon conteneur flex contient une liste horizontale d'éléments que tous les navigateurs affichent correctement dans leur parent, à l'exception de IE11, qui semble incapable de les conserver, mais au lieu de cela ils en "saignent", comme ceci:
Ci-dessous se trouve un Fiddle simplifié de ma configuration qui montre le problème en action:
ul, li {
list-style: none;
margin: 0;
padding: 0;
}
ul {
display: flex;
width: 200px;
border: 1px dashed red;
}
li img {
max-width: 100%;
height: auto;
}
<ul>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
</ul>
Une solution de contournement?
Il semble que IE11 nécessite que vous définissiez une taille pour les éléments flexibles (li
):
ul, li {
list-style: none;
margin: 0;
padding: 0;
}
ul {
display: flex;
width: 200px;
border: 1px dashed red;
}
li { /* NEW */
flex: 0 1 100%; /* flex-grow, flex-shrink, flex-basis */
/* flex: 1 */ /* alternatively, this also works (short for: fg:1, fs:1, fb:0px) */
}
li img {
max-width: 100%;
height: auto;
}
<ul>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
</ul>
Comme cela a déjà été mentionné, IE11 souhaite que les éléments enfant flex aient une largeur définie. Votre balisage indique que vous essayez de définir une hauteur et une largeur sur l'image. Vous pouvez supprimer ces attributs de hauteur et de largeur dans l'image, puis définir simplement votre image sur width: 100%
. Cela permettra à chaque image d’occuper l’espace de son parent et de redimensionner en fonction du nombre de celles-ci dans le conteneur.
Sinon, si vous ne voulez pas que ces images s’agrandissent, vous pouvez définir un max-width
sur la li
ul, li {
list-style: none;
margin: 0;
padding: 0;
}
ul {
display: flex;
width: 200px;
border: 1px dashed red;
}
li {
flex-grow: 1;
flex-shrink: 1;
/* max-width: 50px; for keeping image from ever getting larger than certain point */
}
li img {
width: 100%;
}
<ul>
<li><img src="http://i.imgur.com/60PVLis.png" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" alt=""></li>
</ul>
Je ne suis pas sûr, est la bonne approche ou non, mais vous pouvez essayer ce bidouillage, cela fonctionne
vous pouvez aussi essayer ceci en utilisant modernizr
pour cibler IE
browsers
ul,
li {
list-style: none;
margin: 0;
padding: 0;
}
ul {
display: flex;
width: 200px;
border: 1px dashed red;
}
_:-ms-fullscreen .ie-hack li,
:root .ie-hack li {
display: flex;
}
li img {
display: block;
max-width: 100%;
height: auto;
}
<ul class="ie-hack">
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
<li><img src="http://i.imgur.com/60PVLis.png" width="50" height="50" alt=""></li>
</ul>