Почему IE7 при очистке с плавающей запятой приводит к ошибке маржи?

У меня очень простая HTML-страница (проверяется как XHTML 1.0 Strict):

<div class = "news-result">
    <h2><a href = "#">Title</a></h2><span class = "date">(1-1-2009)</span>
    <p>Some text...</p>
</div>

со следующим CSS:

.news-result {
    overflow: hidden;
    padding: 30px 0 20px;
}

.news-result h2 {
    float: left;
    margin: 0 10px 0 0;
}

.news-result span.date {
    margin: 1px 0 0;
    float : left;
}

.news-result p {
    padding: 3px 0 0 0;
    clear: left;
}

Визуализация этой страницы в IE6 или FF3 идеально отображается (заголовок и дата в одной строке, за которыми следует абзац). Однако в IE7 между заголовком и датой и абзацем есть большой промежуток.

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

Отбрасывание поплавка на элемент даты решает эту проблему, как и установка zoom: 1 в абзаце или удаление overflow: hidden из контейнера, но все не идеально. Почему число с плавающей точкой, за которым следует абзац, вызывает это дополнительное верхнее поле только в IE7?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
6 896
4

Ответы 4

Я вижу лишние пробелы в IE6, 7 и 8B2.

Похоже, что IE имеет ненулевое верхнее поле, примененное к тегу <p>.

Мне удалось удалить пробелы в IE, сделав следующее изменение:

.news-result p {
    margin-top: 0;
    padding: 3px 0 0 0;
    clear: left;
}

Похоже, что изменение не имело каких-либо отрицательных побочных эффектов в Firefox 2 или 3, Opera 9.63 или Safari для Windows 3.2.1.

Использование css reset ala Eric Meyer: meyerweb.com/eric/gotits/2007/05/01/reset-reloaded поможет свести к минимуму некоторые различия в браузере, с которыми вы можете столкнуться.

Traingamer 07.01.2009 22:22

Могу я предположить, что у вас есть документ-тип?

Однако измените h2 и span на display: inline; также должен прояснить вашу проблему.

Изменить --- добавление hasLayout

Понимание того, что встроенный не всегда вариант, вот статья, объясняющая, что происходит.

По сути, вы должны предоставить <p> hasLayout. Есть много способов сделать это, и мне не нравится использовать <div class = "clearall"></div>, и я предпочитаю использовать overflow: hidden; или zoom: 1;.

Наш тип документа - XHTML 1.0 Strict (и проверяет @ W3C).

Kamiel Wanrooij 08.01.2009 18:13

Display: inline очищает его, но не позволяет нам использовать float перед p, что нам нужно в некоторых ситуациях.

Kamiel Wanrooij 08.01.2009 18:43

Отредактировано, чтобы добавить ссылку на объяснение / решение

Steve Perks 08.01.2009 22:19

Еще одно замечание - это отступ 30 пикселей в .news-result, который дублирует IE7, поэтому, если вы найдете другой способ добавить отступ (второй div?), Вы тоже будете хороши в этом.

Steve Perks 08.01.2009 22:29

Боюсь, что IE7 - это по-прежнемуплаватьпрослушивается.

(исправления по ссылкам)

Нежелательной кажется верхняя граница поля, а не нижняя граница, которая не отображается.

Kamiel Wanrooij 08.01.2009 18:16

Просто добавьте &nbsp; между плавающим DIV и очищающим div. Это устранит разрыв.

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