2013-07-19 6 views
1

Я подозреваю, что на это нет ответа, но мне было интересно, есть ли способ установить высоту плавающего div на 100%?Установите плавающий div на высоту: 100%?

У меня есть две дивы внутри оболочки DIV:

<div id="wrapper"> 
    <div id="left"> 
    </div> 
    <div id="right"> 
    </div> 
</div> 

право DIV имеет набор высоты, и я хочу левой ДИВ, чтобы соответствовать, поэтому я создал:

#wrapper { 
    background-color: red; 
    width: 200px; 
    height: 100%; 
    overflow: auto; 
    padding: 5px; 
} 

#left{ 
    width: 90px; 
    height: 100%; 
    float:left; 
    background-color: #ccc; 
} 

#right{ 
    width: 90px; 
    height: 300px; 
    float:right; 
    background-color: blue; 
} 

Но левый div не расширяется. Fiddle here: http://jsfiddle.net/8dstK/2/

Может кто-нибудь знать способ достижения divs равной высоты?

Должен ли я использовать JQuery для захвата высоты правого div и применить его к левому div?

+0

Почему бы вам не использовать одну и ту же высоту слева? – Krishna

+0

@upcoming_coder на моем реальном сайте один столбец динамически заполнен содержимым моего CMS - неизвестная высота – MeltingDog

ответ

3

Вы можете сделать это путем создания таблицы типа scructure из <div> S Мне n ваш HTML, а затем с помощью display: table, display: table-cell и т. д. Это будет работать, потому что ячейки таблицы в той же строке автоматически изменяются до той же высоты, что и самая высокая ячейка. Однако IE7 и ниже do not supportdisplay: table.

jsFiddle

<div id="wrapper"> 
    <div id="inner-wrapper"> 
     <div id="left"> 
      left 
     </div> 
     <div id="right"> 
      right 
     </div> 
    </div> 
</div> 
#wrapper  { display: table; } 
#inner-wrapper { display: table-row; } 
#left   { display: table-cell; } 
#right   { display: table-cell; } 

мне пришлось удалить float: left и float: right от #left и #right, чтобы получить отображение таблицы ячейки для работы, так как ячейки таблицы не может плавать. Тем не менее, это закрепило два div вместе. И ячейки таблицы не принимают поля, а только отступы.Вам может понадобиться дополнительный display: table-cell div между left и right, чтобы отделить их, если вы не хотите, чтобы их отделяли.

Узнайте больше о display: table и семье on QuirksMode и on MDN.

+0

Спасибо! который работает несколько, но затем он пробегает мой нижний колонтитул. Любой совет для этого? – MeltingDog

+0

@MeltingDog [this jsFiddle] (http://jsfiddle.net/roryokane/NcAv5/) решает вашу проблему? Я просто догадываюсь, где тебе нужен нижний колонтитул. Я добавил дополнительный разделитель div, чтобы отделить табличный «div» от нижнего колонтитула. Если это не проблема с вашим нижним колонтитулом, то, пожалуйста, отправьте пример кода, в котором нижний колонтитул сломан. –

+0

Нет, пожалуйста, не используйте display: table :(Я знаю, что в css нет другого пути, я предпочитаю использовать Javascript – PaoloCargnin

0

Так я знаю, как это сделать. С позиции абсолютная и верхняя/нижняя/левая Обновлена ​​ваша скрипка: http://jsfiddle.net/8dstK/3/

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

#wrapper { 
    background-color: red; 
    width: 200px; 
    height: 100%; 
    overflow: auto; 
    padding: 5px; 
    position:relative; 
} 

#left{ 
    width: 90px; 
    float:left; 
    background-color: #ccc; 
    top:5px; 
    left:5px; 
    bottom:5px; 
    position:absolute; 
} 

#right{ 
    width: 90px; 
    height: 300px; 
    float:right; 
    background-color: blue; 
} 
+1

Вы видели это? http://jsfiddle.net/8dstK/9/ –

+0

Текст в левом div переполняется ... Я знаю .. Один отступил. Однако вопрос состоял в том, как сделать левый div расширяющимся до 100% ... И это так. –

+1

Я думал, что это было хорошее потенциальное решение, но не знал, что оно треснуло в долгосрочной перспективе. +1 @ Mr.Alien за то, что вы принесли свою точку зрения. – Nitesh

-1

Существует ответ и с решением. Высота не расширяется, потому что это <div> и <div> - элемент уровня блока.

Если вы хотите, чтобы это расширить, вы должны преобразовать его display в table, чтобы его расширить.

Ниже приведена рабочая демонстрация для этого же.

WORKING DEMO

HTML-:

<div id="wrapper"> 
    <div id="left"> 
     left 
    </div> 
    <div id="right"> 
     right 
    </div> 
</div> 

CSS-:

#wrapper { 
    background-color: red; 
    width: 200px; 
    height: 100%; 
    overflow: auto; 
    padding: 5px; 
    display:table; 
} 

#left{ 
    width: 90px; 
    height: 100%; 
    float:left; 
    background-color: #ccc; 
    display:table; 
} 

#right{ 
    width: 90px; 
    height: 300px; 
    float:right; 
    background-color: blue; 
} 
+0

где такая же высота ... –

+0

Извините, не могли бы вы получить? Вы хотите сказать, что '# left' также должны иметь одинаковую высоту? Если да, то OP хочет, чтобы плавающий div соответствовал высоте до 100%, если увеличился div '# right'. Итак, это то, что происходит. – Nitesh

+0

@RohitAzad Just made 'height: auto;' для тестирования, работы kwel ... http://jsfiddle.net/8dstK/8/ Nathan - +1 –

-1

Сделать родительский элемент установлен на фиксированную высоту (скажем, 300px), то дети будут автоматически принимать всю ширину родителя на 100% в http://jsfiddle.net/8dstK/6/

#wrapper { 
     background-color: red; 
     width: 200px; 
     height: 300px; 
     overflow: auto; 
     padding: 5px; 
    } 

    #left{ 
     width: 90px; 
     height: 100%; 
     float:left; 
     background-color: #ccc; 
    } 

    #right{ 
     width: 90px; 
     height: 100%; 
     float:right; 
     background-color: blue; 
    } 
+0

. Дело в том, что если высота должна быть установлена ​​фиксированной, то нет смысла в решении , потому что он будет давать решение на временной основе, и это не будет долговременным решением. Скажем, для этого вы установили оболочку на 300 пикселей, но когда появится контент, вы не будете увеличивать высоту. Его нужно остановить на в какой-то момент, поэтому актуальность заключается в том, чтобы сделать его текучим и не фиксированным. – Nitesh

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