2013-11-14 3 views
1

У меня проблема с последним абзацем, который, по-видимому, не очищается и не скользит в середину h1 и nav. Но когда я положил div с ясным: оба свойства перед абзацем, похоже, работают.Где применять класс clearfix

Медведь с моим fiddle, пожалуйста.

  • Я использовал фиолетовый фон, чтобы представить технику замены изображения, которую я узнал из неттоков.
  • Часть clearfix - это класс с именем «группа», CSS находится внизу.
  • Кроме того, если я удаляю display:block; с h1 > a, развод разбивается, поэтому вопрос о том, какие элементы следует плавать, и где следует применять clearfix.
+0

Является ли 'p' означающим быть частью заголовка? или должен ли верхний край 'p' быть ниже ссылок или' nav'? –

+1

@MarcAudet Да, извините, я пропустил это. 'P' все еще находится в' header'. В основном у меня есть некоторые другие элементы после 'nav', и я просто заменяю их одним элементом' p', чтобы упростить код, показывая проблему. – kentz

+0

Трудно понять, чего вы хотите, можете ли вы показать картину, как вы хотите? –

ответ

1

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

Рассмотрим ваши 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/

Проблему можно рассматривать следующим образом:

enter image description here

Я добавил x, чтобы отметить место в вашем сгенерированного контента для клирингового элемента, который появляется в блок nav.

+0

О, теперь я озадачен тем, почему x (: after content) появляется внутри 'nav'; разве он не должен появляться после него? Я думал, что это между «nav» и «p». С тех пор я понимаю, что я плаваю и расправы ошибаюсь. Что и где я должен плавать и чистить, чтобы достичь намеченного результата? – kentz

+1

Селекторы псевдоэлементов ': after' и': before' генерируют контент, который вставлен внутри элемента, к которому применяются селекторы псевдоэлементов. «Clear: both» необходимо применить к элементу 'p' в вашем примере. –

+0

Итак, вы говорите: часть ': before' на самом деле после открытия'

')? – kentz

0

Try:

p{ 
    clear:both; 
} 

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

+0

Хорошо, да, это похоже на добавление div и применение четкого: и для него, что мне интересно, почему clearfix не работает. Разве метод clearfix не должен освобождать нас от необходимости очищать элементы после каждого перемещаемого элемента, применяя класс clearfix вместо очистки всех элементов после каждого плавающего элемента? – kentz

+0

@kentz clearfix позволяет очистить элемент после _itself_. Обычно он используется, когда все дети перемещаются с тех пор, как они удаляют их из обычного потока. На самом деле это даже не нужно в этом случае, потому что он будет содержать последний тег 'p', так как он не плавает, и он находится ниже всех остальных элементов. – thgaskell

+0

@thgaskell Да точно. Поскольку я размещал «nav», я думал, что применение clearfix к нему приведет к тому, что абзац появится под ним, как если бы я использовал «clear: both;» в параграфе, но, похоже, это не имеет никакого эффекта. – kentz

Смежные вопросы