Подтвердить что ты не робот

Как сделать div, чтобы обернуть два плавающих div внутри?

Я не знаю, является ли это общей проблемой, но пока я не могу найти решение в сети. Я хотел бы иметь два divs, завернутых внутри другого div, однако эти два div внутри должны быть выровнены на одном уровне (например: left one занимает 20% ширины wrappedDiv, правый занимает еще 80%). Для достижения этой цели я использовал следующий пример CSS. Однако теперь обертка DIV не обертывала все эти divs. Обертка Div имеет небольшую высоту, чем те два div, которые находятся внутри. Как я могу убедиться, что обертка Div имеет наибольшую высоту в виде содержащихся в ней div? Спасибо!!!

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <title>liquid test</title>
    <style type="text/css" media="screen">
        body
        {
            margin: 0;
            padding: 0;
            height:100%;
        }
        #nav
        {
            float: left;
            width: 25%;
            height: 150px;
            background-color: #999;
            margin-bottom: 10px;
        }

        #content
        {
            float: left;
            margin-left: 1%;
            width: 65%;
            height: 150px;
            background-color: #999;
            margin-bottom: 10px;
        }       
        #wrap
        {
          background-color:#DDD;
          height:100%;
        }

</style>
</head>
<body>
<div id="wrap">
    <h1>wrap1 </h1>
    <div id="nav"></div>
    <div id="content"><a href="index.htm">&lt; Back to article</a></div>
</div>
</body>
</html>
4b9b3361

Ответ 1

Это обычная проблема, когда у вас есть два поплавка внутри блока. Лучшим способом его фиксации является использование clear:both после второго div.

<div style="display: block; clear: both;"></div>

Это должно привести к правильной высоте контейнера.

Ответ 2

Помимо тэга clear: both, вы можете пропустить дополнительный элемент и использовать overflow: hidden на обертке div:

<div style="overflow: hidden;">
    <div style="float: left;"></div>
    <div style="float: left;"></div>
</div>

Ответ 3

Это должно сделать это:

<div id="wrap">
  <div id="nav"></div>
  <div id="content"></div>
  <div style="clear:both"></div>
</div>

Ответ 4

overflow:hidden (как упоминается @Mikael S) не работает в любой ситуации, но он должен работать в большинстве ситуаций.

Другой вариант - использовать трюк :after:

<div class="wrapper">
  <div class="col"></div>
  <div class="col"></div>
</div>

.wrapper {
  min-height: 1px; /* Required for IE7 */
  }

.wrapper:after {
  clear: both;
  display: block;
  height: 0;
  overflow: hidden;
  visibility: hidden;
  content: ".";
  font-size: 0;
  }

.col {
  display: inline;
  float: left;
  }

И для IE6:

.wrapper { height: 1px; }

Ответ 5

Поплавьте все.

Если у вас есть плавающий div внутри неплавающего div, все становится все вяло. Поэтому большинство CSS-фреймворков, таких как Blueprint и 960.gs, используют плавающие контейнеры и divs.

Чтобы ответить на ваш конкретный вопрос,

<div class="container">
<!--
.container {
  float: left;
  width: 100%;
}
-->
  <div class="sidebar">
  <!--
  .sidebar {
    float: left;
    width: 20%;
    height: auto;
  }
  -->
  </div>
  <div class="content">
  <!--
  .sidebar {
    float: left;
    width: 20%;
    height: auto;
  }
  -->
  </div>
</div>

должен работать нормально, если вы float:left; все ваши <div> s.

Ответ 7

Вот еще, я нашел полезным. Он работает даже для адаптивного CSS-дизайна.

#wrap
{
   display: table;
   table-layout: fixed; /* it'll enable the div to be responsive */
   width: 100%; /* as display table will shrink the div to content-wide */
}

ПРЕДУПРЕЖДЕНИЕ: Но эта теория не будет работать, чтобы держатель содержал внутренние элементы с абсолютными позициями. И это создаст проблему для макета фиксированной ширины. Но для отзывчивого дизайна это просто отлично.:)

ДОПОЛНЕНИЕ К Meep3D ОТВЕТ

С CSS3 в динамической части вы можете добавить clear float к последнему элементу:

#wrap [class*='my-div-class']:last-of-type {
  display: block;
  clear: both;
}

Где ваши divs:

<div id="wrap">
<?php for( $i = 0; $i < 3; $i++ ) {
   <div class="my-div-class-<?php echo $i ?>>
      <p>content</p>
   </div> <!-- .my-div-class-<?php echo $i ?> -->
}
</div>

Справка:

Ответ 8

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

#nav
        {
            float: left;
            width: 25%;
            height: 150px;
            background-color: #999;
            margin-bottom: 10px;
        }

        #content
        {
            float: left;
            margin-left: 1%;
            width: 65%;
            height: 150px;
            background-color: #999;
            margin-bottom: 10px;
        }       
        #wrap
        {
          background-color:#DDD;
          overflow: hidden
        }
    <div id="wrap">
    <h1>wrap1 </h1>
    <div id="nav"></div>
    <div id="content"><a href="index.htm">&lt; Back to article</a></div>
    </div>

Ответ 9

<html>
<head>
    <style>
        #main { border: 1px #000 solid; width: 600px; height: 400px; margin: auto;}
        #one { width: 20%; height: 100%; background-color: blue; display: inline-block; }
        #two { width: 80%; height: 100%; background-color: red; display: inline-block; }
    </style>
</head>
<body>
<div id="main">
    <span id="one">one</span><span id="two">two</span>
</div>
</body>
</html>

Секрет - это inline-block. Если вы используете границы или поля, вам может потребоваться уменьшить ширину используемого им div.

ПРИМЕЧАНИЕ. Это не работает должным образом в IE6/7, если вы используете "DIV" вместо "SPAN". (см. http://www.quirksmode.org/css/display.html)

Ответ 10

Вместо использования overflow:hidden, который является своего рода взломом, почему бы просто не установить фиксированную высоту, например. height:500px, в родительское подразделение?

Ответ 11

HTML

<div id="wrapper">
    <div id="nav"></div>
    <div id="content"></div>      
    <div class="clearFloat"></div>
</div>

CSS

.clearFloat {
    font-size: 0px;
    line-height: 0px;
    margin: 0px;
    padding: 0px;
    clear: both;
    height: 0px;
}