Пущенные в ход Дочерние Элементы: overflow:hidden или clear:both?

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

<style type="text/css">
    #left {float:left;}
    #right {float:right;}
</style>
<div id="parent">
    <div id="left" class="child">&nbsp;</div>
    <div id="right" class="child">&nbsp;</div>
</div>

Это не работает без дополнительного бита css/html, потому что родитель автоматически не растет для установки пущенным в ход детям. Существует два популярных способа преодолеть это:
1) Добавить overflow:hidden к CSS родителя.
2) Добавьте 3-го ребенка "очистки" <br style="clear:both;" />.

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

Какой метод лучше и почему? Каковы за и против каждого?

24
задан tybro0103 15 April 2010 в 19:07
поделиться

3 ответа

  1. Скрытое переполнение - довольно солидный метод. Главный недостаток - если вы установите высоту родительского элемента, любое переполнение будет ... ну, скрытым. Я обнаружил это при создании меню с элементами плавающего списка - подменю не появлялись.

  2. Очищающий элемент - вместо разрыва строки я бы использовал div с height: 0; clear: both; , так как это не создаст зазора внизу. Это более надежный метод, единственным недостатком которого является лишний элемент в разметке.

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

  4. Вы также можете использовать сгенерированный метод содержимого:

     #parent: after {
    content: "."; 
    visibility: hidden; 
    clear: both; { {1}}} 
     

    Это избавляет от необходимости использовать дополнительный элемент в разметке, но не будет работать в IE7 и ниже.

  5. Использовать встроенные блоки - только что вспомнил об этом методе. Вместо того, чтобы перемещать два столбца, установите для них display: inline-block , и они будут отображаться рядом:

     .child {
    display: inline-block; {{ 1}} vertical-align: top; 
    } 
     

    При использовании этого метода вы должны помнить только о том, есть ли пробелы между закрывающим тегом одного блока и открывающим тегом другого , между столбцами появится пробел (размер которого зависит от шрифта, поэтому его трудно измерить). Пока вы выполняете ...

, этот метод работает нормально и превосходит плавающие элементы IMO.

27
ответ дан 29 November 2019 в 00:10
поделиться

PPK обсуждает это в Очистка поплавков в QuirksMode.

0
ответ дан 29 November 2019 в 00:10
поделиться

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

0
ответ дан 29 November 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: