comportamento flutuador estranho no IE7
-
06-07-2019 - |
Pergunta
Eu quero criar uma caixa simples com uma barra de cabeçalho contendo um título e alguns botões de ferramentas. Eu tenho a seguinte marcação:
<div style="float:left">
<div style="background-color:blue; padding: 1px; height: 20px;">
<div style="float: left; background-color:green;">title</div>
<div style="float: right; background-color:yellow;">toolbar</div>
</div>
<div style="clear: both; width: 200px; background-color: red;">content</div>
</div>
Isso torna bem no Firefox e Chrome:
http://www.boplicity.nl/images/firefox.jpg
No entanto IE7 totalmente mexe-se e coloca-se o direito flutuou elemento para a direita da página:
http://www.boplicity.nl/images/ie7.jpg
Isso pode ser corrigido?
Solução
Especificar largura em div externa. Se isso largura em seu meio div conteúdo Esta é a largura total da sua caixa, basta adicioná-lo à div externa, e (opcionalmente) removê-lo de conteúdo, como este:
<div style="float:left; width: 200px;">
<div style="background-color:blue; padding: 1px; height: 20px;">
<div style="float: left; background-color:green;">title</div>
<div style="float: right; background-color:yellow;">toolbar</div>
</div>
<div style="clear: both; background-color: red;">content</div>
</div>
Outras dicas
Esta é apenas uma resposta rápida, então eu segurar minhas mãos para cima se ele não funciona muito bem. Eu acho que a solução da Marko provavelmente funcionar se você adicionar apenas min de largura, em vez de largura. Se você está tentando atender para o IE6, bem, você pode precisar usar um hack, como min largura não é suportado pelo IE6 e é descendentes.
Então, isso deve funcionar com o IE7 e outros browers modernos. Definir o min-width para o que for apropriado.
<div style="float:left; min-width: 200px;">
<div style="background-color:blue; padding: 1px; height: 20px;">
<div style="float: left; background-color:green;">title</div>
<div style="float: right; background-color:yellow;">toolbar</div>
</div>
<div style="clear: both; background-color: red;">content</div>
</div>
Eu fixo-lo usando jQuery para emular o comportamento dos navegadores não-IE:
// IE fix for div widths - size header to width of content
if (!$.support.cssFloat) {
$("div:has(.boxheader) > table").each(function () {
$(this).parent().width($(this).width());
});
}
Tente colocar position:relative;
para pai-elemento e para o elemento filho. Ele resolveu o problema para mim.
Got saber recentemente que o direito flutuou elementos precisam ser anexado com as divs antes dos outros elementos. Esta é a correção mais fácil sem a adição de uma linha de mudança.
<div style="background-color:blue; padding: 1px; height: 20px;">
<div style="float: right; background-color:green;">title</div>
<div style="float: left; background-color:yellow;">toolbar</div>
</div>
Faça este <div style="background-color:blue; padding: 1px; height: 20px;>
o pai dos 2 divs flutuantes também clear:all