2009-03-12 2 views
7

У меня есть следующий HTML-код, и я бы хотел отобразить синий фон за кнопками и текстом. К сожалению, со следующим кодом синий фон исчезает. Если я удалю CSS для кнопок и текста ids, фон вернется.Разрыв div при использовании float

Что я делаю неправильно?

Спасибо!

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
    <title>Untitled Page</title> 
    <style> 


    #actions 
    { 
     background: blue; 
    } 

    #buttons 
    { 
     float: left; 
    } 

    #text 
    { 
     float: right; 
    } 

    </style> 
</head> 
<body> 

     <div id="actions"> 
      <div id="buttons"> 
       <input type="button" id="btnOne" value="Bla bla" /> 
       <input type="button" id="btnTwo" value="Bla bla bls" /> 
      </div> 
      <div id="text">Bla bla bla</div> 
     </div> 

</body> 
</html> 
+0

@Oriol - Этот вопрос был открыт 12 марта 2009 года. Другой вопрос был открыт 14 января 2010 года. Вопрос, открытый 14 января 2010 года, должен быть дубликатом, а не этим. – Martin

+1

Я закрыл этот вопрос, а не другой, потому что другой более «популярен» (гораздо больше голосов, посещений и избранных). Обратите внимание, что нет ничего плохого в том, что вопрос закрыт как дубликат. – Oriol

ответ

11

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

#actions 
{ 
    background: blue; overflow: auto; 
} 

#buttons 
{ 
    float: left; 
    overflow: hidden; 
} 

#text 
{ 
    float: right; 
    overflow: hidden; 
} 

С «переполнения: авто» может производить полосы прокрутки в некоторых случаях, я обычно явно не допустить, что указав «элементы переполнения: скрытые» на дочерние элементы. Это надежно работает в моем опыте.

+0

Ничего себе! Оно работает! Благодаря! : D – Martin

2

Попробуйте это:

<div id="actions"> 
     <div id="buttons"> 
      <input type="button" id="btnOne" value="Bla bla" /> 
      <input type="button" id="btnTwo" value="Bla bla bls" />     
     </div> 
     <div id="text">Bla bla bla</div> 
     <div style="clear:both;height:1px;overflow:none;"></div> 
    </div> 

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

+0

Не работает в IE и FF. – Martin

+0

Извините. Если бы дивер в неправильном месте. – Joel

0

Не-плавающий элемент не будет иметь любую высоту, если она содержит только плавали элементы. Чтобы заставить внешний элемент растягиваться и окружать плавающие элементы, он также должен быть плавающим. Простой ответ на эту проблему заключается в том, чтобы поплавать и в div «действия». Это расширит фон, как ожидалось.

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

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