Je prévois m'éloigner des mises en page "flottantes" et utiliser CSS flexbox pour les projets futurs. J'ai été ravi de constater que tous les principaux navigateurs de leur version actuelle semblent prendre en charge (d'une manière ou d'une autre) la flexbox.
Je me suis dirigé vers "résolu par Flexbox" pour regarder quelques exemples. Cependant, l'exemple "Sticky Footer" ne semble pas fonctionner dans Internet Explorer 11. J'ai joué un peu et je l'ai obtenu en ajoutant display:flex
au <html>
et width:100%
au <body>
Ma première question est donc la suivante: quelqu'un peut-il m'expliquer cette logique? Je me suis contenté de tripoter et cela a fonctionné, mais je ne comprends pas très bien pourquoi cela a fonctionné de cette façon ...
Ensuite, il y a l'exemple "Media Object" qui fonctionne dans tous les navigateurs sauf pour - vous l'avez deviné - Internet Explorer. Je me suis amusé avec ça aussi, mais sans succès.
Ma deuxième question est donc la suivante: existe-t-il une possibilité "propre" de faire fonctionner l’exemple "Objet multimédia" dans Internet Explorer?
Selon http://caniuse.com/#feat=flexbox :
"Les valeurs par défaut d'IE10 et IE11 pour flex
sont 0 0 auto
plutôt que 0 1 auto
, conformément au projet de spécification, à compter de septembre 2013"
Donc, en termes simples, si quelque part dans votre CSS, vous avez quelque chose comme ceci: flex:1
, cela ne se traduit pas de la même manière dans tous les navigateurs. Essayez de le changer en 1 0 0
et je pense que vous verrez immédiatement que cela -kinda- fonctionne.
Le problème est que cette solution va probablement gâcher firefox, mais vous pouvez ensuite utiliser quelques hacks pour cibler uniquement Mozilla et le rétablir:
@-moz-document url-prefix() {
#flexible-content{
flex: 1;
}
}
Puisque flexbox
est un candidat au W3C et n'est pas officiel, les navigateurs ont tendance à donner des résultats différents, mais je suppose que cela changera dans un avenir immédiat.
Si quelqu'un a une meilleure réponse, j'aimerais savoir!
Utilisez un autre conteneur flex pour résoudre le problème min-height
dans IE10 et IE11:
HTML
<div class="ie-fixMinHeight">
<div id="page">
<div id="header"></div>
<div id="content"></div>
<div id="footer"></div>
</div>
</div>
CSS
.ie-fixMinHeight {
display:flex;
}
#page {
min-height:100vh;
width:100%;
display:flex;
flex-direction:column;
}
#content {
flex-grow:1;
}
Voir un démo de travail .
body
, car elle aurait endommagé les éléments insérés via les plugins jQuery (saisie semi-automatique, popup, etc.).height:100%
ou height:100vh
sur votre conteneur car le pied de page va rester en bas de la fenêtre et ne s'adaptera pas à un contenu long.flex-grow:1
plutôt que flex:1
, car les valeurs par défaut d'IE10 et IE11 pour flex
sont 0 0 auto
et non 0 1 auto
.Vous avez juste besoin de flex:1
; Cela corrigera le problème pour IE11. Je seconde Odisseas. Attribuez en outre 100% de la hauteur au html, éléments du corps .
Changements CSS:
html, body{
height:100%;
}
body {
border: red 1px solid;
min-height: 100vh;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-ms-flex-direction: column;
-webkit-flex-direction: column;
flex-direction: column;
}
header {
background: #23bcfc;
}
main {
background: #87ccfc;
-ms-flex: 1;
-webkit-flex: 1;
flex: 1;
}
footer {
background: #dd55dd;
}
uRL de travail: http://jsfiddle.net/3tpuryso/13/
Voici un exemple d'utilisation de flex qui fonctionne également dans Internet Explorer 11 et Chrome.
HTML
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1" >
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
<title>Flex Test</title>
<style>
html, body {
margin: 0px;
padding: 0px;
height: 100vh;
}
.main {
display: -webkit-flex;
display: flex;
-ms-flex-direction: row;
flex-direction: row;
align-items: stretch;
min-height: 100vh;
}
.main::after {
content: '';
height: 100vh;
width: 0;
overflow: hidden;
visibility: hidden;
float: left;
}
.left {
width: 200px;
background: #F0F0F0;
flex-shrink: 0;
}
.right {
flex-grow: 1;
background: yellow;
}
</style>
</head>
<body>
<div class="main">
<div class="left">
<div style="height: 300px;">
</div>
</div>
<div class="right">
<div style="height: 1000px;">
test test test
</div>
</div>
</div>
</body>
</html>
Parfois, c'est aussi simple que d'ajouter: '-ms-' devant le style Like -ms-flex-flow: row wrap; pour le faire fonctionner aussi.