Проблема, которую вы видите, возникает из-за того, что очищающий элемент находится в неправильном месте.
Рассмотрим ваши CSS:
h1 {
margin: 0;
float: left;
background: red;
text-indent: -9999px;
border: 1px dashed cyan;
}
nav {
height: 44px;
margin: 0;
float: right;
background: black;
border: 1px dashed cyan;
}
.group:after {
content:"x";
display:table;
clear:both;
background-color: cyan;
}
Вы h1
плавал налево и nav
поплыл вправо, а затем у вас есть p
блок с текстом (не плавала).
Содержимое, охватывающее два плавающих элемента, как ожидается, не добавит правила clear:both
к p
, как указано ранее.
Очищающий элемент должен появиться в DOM после элемента nav
.
В этом примере применяется .group
к nav
, который генерирует контент, который появляется после ul
блока, который является дочерним nav
блока.
Проблема становится более очевидной: вы устанавливаете высоту nav
в auto
, и вы добавляете границы и цвета, чтобы показывать края различных блоков.
См демо по адресу: http://jsfiddle.net/audetwebdesign/9nGQy/
Проблему можно рассматривать следующим образом:
Я добавил x
, чтобы отметить место в вашем сгенерированного контента для клирингового элемента, который появляется в блок nav
.
Является ли 'p' означающим быть частью заголовка? или должен ли верхний край 'p' быть ниже ссылок или' nav'? –
@MarcAudet Да, извините, я пропустил это. 'P' все еще находится в' header'. В основном у меня есть некоторые другие элементы после 'nav', и я просто заменяю их одним элементом' p', чтобы упростить код, показывая проблему. – kentz
Трудно понять, чего вы хотите, можете ли вы показать картину, как вы хотите? –