Странное поведение с плавающей запятой в 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

Это можно исправить?

Возможно, вам потребуется дать немного больше контекста для этого вопроса. вы говорили, что область содержимого будет содержать таблицы разного размера?

Sam Murray-Sutton 10.10.2008 12:32

Полезный css-class.com/articles/explorer/floats/floatandcleartest1.ht‌ m

elclanrs 11.02.2012 00:10
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
12
2
61 718
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

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

Извините, это не помогло. Вот скриншоты: www.boplicity.nl/images/firefox.jpg www.boplicity.nl/images/ie7.jpg

Kees de Kooter 09.10.2008 17:54
Ответ принят как подходящий

Укажите ширину в крайнем 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>

Это исправляет. Однако размер содержимого может быть неизвестен заранее. На моем сайте он обычно содержит таблицы, ширина которых может увеличиваться.

Kees de Kooter 09.10.2008 17:53

Это просто быстрый ответ, поэтому я поднимаю руки, если он не совсем работает. Я думаю, что решение Марко, вероятно, сработает, если вы просто добавите минимальную ширину, а не ширину. Если вы также пытаетесь обслужить 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>

К сожалению, минимальная ширина в этом случае не действует

Kees de Kooter 09.10.2008 20:35

Я исправил это с помощью 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());
        });
    }

Как это отвечает на исходный вопрос?

Craig 30.03.2010 20:35

Это устраняет проблему. Вместо того, чтобы устанавливать ширину статически, как предлагали другие плакаты, я теперь устанавливаю ее динамически.

Kees de Kooter 30.03.2010 22:36

Использование библиотеки javascript размером 50 КБ - не лучшее решение, если взлом CSS может это исправить.

Rob 19.10.2010 15:16

Я уже использовал jQuery в своем приложении, так что это не было проблемой.

Kees de Kooter 25.10.2010 16:07

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

Недавно узнал, что правильные плавающие элементы должны быть добавлены с помощью 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>

Это правда, однако важное отличие здесь в том, что ваш внешний div не плавает. Если вы разместите это, это не сработает.

kasimir 12.04.2012 16:08

Другие вопросы по теме