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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top