Ce morceau de code fonctionne bien dans Firefox, Chrome et Edge, mais il ne fonctionne pas correctement dans IE11 en raison du modèle flex, apparemment. Comment puis-je résoudre ce problème?
Voici à quoi ça ressemble dans Firefox
Voici à quoi ça ressemble dans IE11
body * {
box-sizing: border-box;
}
html {
height: 100%;
}
body {
min-height: 100%;
display: flex;
flex-flow: column;
margin: 0;
}
main {
flex: 1;
display: flex;
}
header,
footer {
background: #7092BF;
border: solid;
width: 100%;
}
section {
border: solid;
background: #9AD9EA;
flex: 1
}
aside {
border: solid;
width: 150px;
background: #3E48CC
}
<header>
<p>header
</header>
<main>
<aside>
<p>aside
<p>aside
</aside>
<section>
<p>content
<p>content
<p>content
<p>content
</section>
</main>
<footer>
<p>footer
<p>footer
</footer>
Selon Flexbugs :
Dans IE 10-11,
min-height
Les déclarations sur les conteneurs flex fonctionnent pour dimensionner les conteneurs eux-mêmes, mais les enfants de leurs éléments flex ne semblent pas connaître la taille de leurs parents. Ils agissent comme si aucune hauteur n'avait été définie.
Voici quelques solutions de contournement:
<aside>
et <section>
:html {
height: 100%;
}
body {
display: flex;
flex-direction: column;
height: 100%;
margin: 0;
}
header,
footer {
background: #7092bf;
}
main {
flex: 1;
display: flex;
}
aside, section {
overflow: auto;
}
aside {
flex: 0 0 150px;
background: #3e48cc;
}
section {
flex: 1;
background: #9ad9ea;
}
<header>
<p>header</p>
</header>
<main>
<aside>
<p>aside</p>
</aside>
<section>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
</section>
</main>
<footer>
<p>footer</p>
</footer>
html {
height: 100%;
}
body {
display: flex;
flex-direction: column;
height: 100%;
margin: 0;
}
header,
footer {
background: #7092bf;
}
main {
flex: 1 0 auto;
display: flex;
}
aside {
flex: 0 0 150px;
background: #3e48cc;
}
section {
flex: 1;
background: #9ad9ea;
}
<header>
<p>header</p>
</header>
<main>
<aside>
<p>aside</p>
</aside>
<section>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
<p>content</p>
</section>
</main>
<footer>
<p>footer</p>
</footer>
Il existe de nombreux bogues Flexbox dans IE11 et dans d'autres navigateurs - voir flexbox sur Puis-je utiliser -> Problèmes connus, les éléments suivants étant répertoriés sous IE11:
display: flex
et flex-direction: column
ne calculera pas correctement la taille de leurs enfants si le conteneur contient min-height
mais pas de propriété height
explicitemin-height
est utiliséVoir également la liste des problèmes et des solutions de contournement de Flexbugs de Philip Walton.
J'ai testé une mise en page complète en utilisant flexbox il contient en-tête, pied de page, corps principal avec les panneaux gauche, central et droit. Les panneaux peuvent contenir des éléments de menu ou des pieds de page et des en-têtes devant défiler. Très complexe
IE11 et même IE Edge rencontrent des difficultés pour afficher le contenu flex, mais il peut être surmonté. Je l’ai testé dans la plupart des navigateurs et cela semble fonctionner.
Quelques corrections que j'ai appliquées sont: bug de hauteur IE11, Ajout de hauteur: 100vh et hauteur minimum: 100% au format HTML/body. Cela aide également à ne pas avoir à régler la hauteur du conteneur dans le dom. Faites également du body/html un conteneur flexible. Sinon, IE11 compressera la vue.
html,body {
display: flex;
flex-flow:column nowrap;
height:100vh; /* fix IE11 */
min-height:100%; /* fix IE11 */
}
Un correctif pour IE Edge qui déborde du conteneur flex: overflow: masqué sur le conteneur flex principal. Si vous supprimez le débordement, IE Edge exportera le contenu de la fenêtre d'affichage au lieu de la contenir à l'intérieur du conteneur principal flex.
main{
flex:1 1 auto;
overflow:hidden; /* IE Edge overflow fix */
}
Vous pouvez voir mes tests et mes exemples sur ma page codepen . J'ai remarqué les parties css importantes avec les correctifs que j'ai appliqués et j'espère que quelqu'un le trouvera utile.