Странное поведение float в IE7

Я хочу создать простую коробку со строкой заголовка, содержащей заголовок и некоторые кнопки инструментов. У меня есть следующая разметка:

<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>

Это отлично работает в Firefox и Chrome:

http://www.boplicity.nl/images/firefox.jpg

Однако IE7 полностью запутывает и помещает правый плавающий элемент справа от страницы:

http://www.boplicity.nl/images/ie7.jpg

Можно ли это зафиксировать?

Ответы

Ответ 1

Укажите ширину во внешнем div. Если эта ширина в вашем содержании div означает, что это общая ширина вашего поля, просто добавьте его в внешний div и (необязательно) удалите его из содержимого, например:

<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>

Ответ 2

Это просто быстрый ответ, поэтому я держу руки вверх, если он не работает. Я думаю, что решение Марко, вероятно, будет работать, если вы просто добавите минимальную ширину, а не ширину. Если вы также пытаетесь удовлетворить ie6, вам может понадобиться использовать хак, поскольку минимальная ширина не поддерживается ie6 и его потомками.

Итак, это должно работать с IE7 и другими современными браузерами. Установите минимальную ширину в соответствии с тем, что подходит.

<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>

Ответ 3

Я исправил его с помощью jQuery для эмуляции поведения браузеров, отличных от 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());
        });
    }

Ответ 4

Попробуйте поместить position:relative; в родительский элемент и дочерний элемент. Он решил проблему для меня.

Ответ 5

В последнее время нужно знать, что элементы с плавающей точкой должны быть добавлены вместе с div перед другими элементами. Это самое простое исправление без добавления строки изменения.

<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>

Ответ 6

Сделайте это <div style="background-color:blue; padding: 1px; height: 20px;> родителем двух плавающих divs также clear:all