Estou planejando deixar de usar layouts "flutuantes" e usar CSS flexbox para projetos futuros. Fiquei encantado em ver que todos os principais navegadores em suas versões atuais parecem oferecer suporte (de uma forma ou de outra) ao flexbox.
Eu fui para "Resolvido pelo Flexbox" para ver alguns exemplos. No entanto, o exemplo do "Rodapé Fixo" não parece funcionar no Internet Explorer 11. Eu brinquei um pouco e fiz com que funcionasse adicionando display:flex
ao <html>
e width:100%
ao<body>
Portanto, minha primeira pergunta é: Alguém pode me explicar essa lógica? Eu apenas brinquei e funcionou, mas não entendo muito bem por que funcionou assim ...
Depois, há o exemplo de "Objeto de mídia" que funciona em todos os navegadores, exceto - você adivinhou - o Internet Explorer. Eu também mexi nisso, mas sem sucesso.
Minha segunda pergunta, portanto, é: Existe uma possibilidade "limpa" de fazer o exemplo de "Objeto de mídia" funcionar no Internet Explorer?
fonte
Respostas:
De acordo com http://caniuse.com/#feat=flexbox :
"Os valores padrão do IE10 e IE11 para
flex
são, em0 0 auto
vez de0 1 auto
, conforme as especificações do rascunho, em setembro de 2013"Então, em palavras simples, se em algum lugar do seu CSS você tiver algo assim:,
flex:1
isso não é traduzido da mesma forma em todos os navegadores. Tente mudá-lo para1 0 0
e acredito que você verá imediatamente que -kinda- funciona.O problema é que esta solução provavelmente bagunçará o firefox, mas então você pode usar alguns hacks para atingir apenas o Mozilla e alterá-lo de volta:
Como
flexbox
é um candidato do W3C e não oficial, os navegadores tendem a fornecer resultados diferentes, mas acho que isso vai mudar no futuro imediato.Se alguém tiver uma resposta melhor gostaria de saber!
fonte
-ms-flex: 1 0 0;
e o IE11flex: 1 0 0;
..?flex: 1 0 0;
. Masflex: 1 0 0%;
( observe o % ) ouflex: 1 0 auto;
funcionará.flex: 1;
Acho que depende do que você estáflex-basis
. O Github tem uma boa discussão sobre por queflex:1 0 100%
funciona em alguns casos para o IE11 enquantoflex: 1 0 0%
ou mesmoflex: 1 0 auto
funciona em outros. Você tem que saber o conteúdo com antecedência.Use outro flex container para corrigir o
min-height
problema no IE10 e IE11:HTML
CSS
Veja uma demonstração de trabalho .
body
porque ele confunde os elementos inseridos por meio de plug-ins jQuery (autocomplete, pop-up, etc.).height:100%
ouheight:100vh
em seu contêiner porque o rodapé ficará colado na parte inferior da janela e não se adaptará a conteúdo longo.flex-grow:1
vez deflex:1
causar, os valores padrão do IE10 e IE11 paraflex
are0 0 auto
e not0 1 auto
.fonte
flex-direction: column
para.ie-fixMinHeight
evitar efeitos colaterais. Se você não tiver um HTML específico do IE, pode usar.fixMinHeight { display: -ms-flexbox; -ms-flex-direction: column; }
height
vsmin-height
foi a chave.Você só precisa
flex:1
; Isso corrigirá o problema do IE11. Eu apoio Odisseas. Além disso, atribua 100% de altura para html, elementos do corpo .Mudanças CSS:
url de trabalho: http://jsfiddle.net/3tpuryso/13/
fonte
display: flex;
e estilos associados deve ser aplicada a ambos osbody
e container: jsfiddle.net/Skateside/nezdrrkrmain
pare de crescer adequadamente (no cromo, pelo menos); se você adicionar conteúdo suficiente, o rodapé será ultrapassado. jsfiddle.net/3tpuryso/65html
comomin-height: 100%
para acompanhar o seu conteúdoAqui está um exemplo de uso do flex que também funciona no Internet Explorer 11 e no Chrome.
HTML
fonte
Html
.Às vezes, é tão simples quanto adicionar: '-ms-' na frente do estilo Like -ms-flex-flow: row wrap; para fazê-lo funcionar também.
fonte