[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Распределение высот нескольких div по вертикали
Страницы: 1, 2
zhenya31
Подскажите, как сделать такую вещь:
Есть блок с не фиксированной высотой, в котором находятся еще два блока. У одного высота фиксирована, нужно сделать так, чтобы второй занимал своей высотой всё оставшееся пространство в пределах родительского div'a

<div>
<div
style="height:100px">
А у этого она фиксированна
</div>
<div>

Этот див должен занимать оставшуюся высоту
</div>
</div>

JonNik
zhenya31
Через css лучше
<div>
<div
class="diver1">
А у этого она фиксированна
</div>
<div
class="diver2">
Этот див должен занимать оставшуюся высоту
</div>
</div>

.diver1 {
height:100px;
background:#f0f0f0;
}
.diver2 {
height:100%;
min-height:100%;
background:#CCC;
position: absolute;
top: 116px;
bottom: 0;
}
zhenya31
Цитата (JonNik @ 7.12.2013 - 20:40)
zhenya31
Через css лучше
<div>
<div
class="diver1">
А у этого она фиксированна
</div>
<div
class="diver2">
Этот див должен занимать оставшуюся высоту
</div>
</div>

.diver1 {
height:100px;
background:#f0f0f0;
}
.diver2 {
height:100%;
min-height:100%;
background:#CCC;
position: absolute;
top: 116px;
bottom: 0;
}

В вашем варианте второй див выступает вниз
glock18
Когда-то давно с этим сталкивался. Ничего лучше не нашел, чем
1. перевести это дело на таблицу
2. плясать с display: table-cell, display: table-row и иже с ними, не помню уже всех

Это что касается чисто html/css решений. Как альтернатива: можно js'ом высоту просто выравнивать.

PS: пардон, не дочитал задание сначала, и понял не так.

Как бы то ни было, мои комментарии выше и в этом случае выражают мое мнение. За исключением того, что здесь еще появляется вариант-грабля выставить overflow: hidden для родителя
sergeiss
JonNik - у тебя совершенно верная идея, только реализация "хромает" немного...

Вот так, по-моему, будет лучше:
CSS
html, body {
width:100%;
height:100%;
margin:0;
padding:0;
}

.diver1 {
height:100px;
background-color:#f0f0f0;
}
.diver2 {
background-color:#CCC;
position: absolute;
top: 116px;
left: 0;
bottom: 0;
right:0;
}


HTML (сохранил твой код, только грамматику поправил немного :))
<div>
<div
class="diver1">
А у этого она фиксирована
</div>
<div
class="diver2">
Этот див должен занимать оставшуюся высоту
</div>
</div>


PS. Подобным образом можно несколько ДИВов выставить. Например, один находится вверху (прижат к верху), фиксированной высоты. Третий находится внизу (прижат к низу), фиксированной высоты. А второй между ними. С фиксированными top и bottom.... Но при этом его высота всегда будет "отслеживать" изменение размера.
Если требуется еще один элемент переменной высоты внутри, то тогда просто делаем его внутри второго :) Пусть он "пляшет" от его границ.

Аналогично можно "играться" с left/right, делая несколько гибких блоков, с изменяемой шириной.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Aeq
я бы у фиксированного сделал позишн абсолют, а не у тянущегося. у тянущегося просто маржин или пэддинг верхний размером с фиксированный блок
Aeq
кстати, прикольная растяжка получилась у sergeiss. не знал что можно так:

	top: 116px;
left: 0;
bottom: 0;
right:0;
sergeiss
Aeq, для первого (не тянущегося) ДИВа можно, конечно, сделать абсолют позишен, не принципиально совершенно; он все равно в том же месте останется. А вот для тянущегося низзя убирать этот позишен! Иначе он не будет тянуться. Как ты ему задашь размер по-другому, чтобы он всегда был привязан к низу, для произвольной высоты, кроме как "bottom:0"?

Цитата (Aeq @ 8.12.2013 - 01:03)
кстати, прикольная растяжка получилась у sergeiss. не знал что можно так:

Можно, можно smile.gif И очень даже полезно. Позволяет чистым CSS сделать очень много разной "резиновости".

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Aeq
sergeiss
да, я уже попробовал и понял что твой способ круче, а мой породил бы дополнительные костыли
zhenya31
Цитата (sergeiss @ 7.12.2013 - 23:31)
JonNik - у тебя совершенно верная идея, только реализация "хромает" немного...

Вот так, по-моему, будет лучше:
CSS
html, body {
width:100%;
height:100%;
margin:0;
padding:0;
}

.diver1 {
height:100px;
background-color:#f0f0f0;
}
.diver2 {
background-color:#CCC;
position: absolute;
top: 116px;
left: 0;
bottom: 0;
right:0;
}


HTML (сохранил твой код, только грамматику поправил немного :))
<div>
<div
class="diver1">
А у этого она фиксирована
</div>
<div
class="diver2">
Этот див должен занимать оставшуюся высоту
</div>
</div>


PS. Подобным образом можно несколько ДИВов выставить. Например, один находится вверху (прижат к верху), фиксированной высоты. Третий находится внизу (прижат к низу), фиксированной высоты. А второй между ними. С фиксированными top и bottom.... Но при этом его высота всегда будет "отслеживать" изменение размера.
Если требуется еще один элемент переменной высоты внутри, то тогда просто делаем его внутри второго :) Пусть он "пляшет" от его границ.

Аналогично можно "играться" с left/right, делая несколько гибких блоков, с изменяемой шириной.

Вроде бы все хорошо, но не тут то было. Когда diver2 заполняется текстом больше чем на высоту страницы, этот текст выступает из div'a.
sergeiss
Цитата (zhenya31 @ 8.12.2013 - 11:22)
Вроде бы все хорошо, но не тут то было. Когда diver2 заполняется текстом больше чем на высоту страницы, этот текст выступает из div'a.

Ну так подумай, чем можно это предотвратить! Средства в CSS есть. Судя по твоему ответу, ты не думал, а ждешь, что тебе и дальше код напишут.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
zhenya31
Цитата (sergeiss @ 8.12.2013 - 11:42)
Цитата (zhenya31 @ 8.12.2013 - 11:22)
Вроде бы все хорошо, но не тут то было. Когда diver2 заполняется текстом больше чем на высоту страницы, этот текст выступает из div'a.

Ну так подумай, чем можно это предотвратить! Средства в CSS есть. Судя по твоему ответу, ты не думал, а ждешь, что тебе и дальше код напишут.

Легко говорить когда есть огромный опыт и идеальное знание теории, которое скорей всего пришло с опытом.

Иногда чтобы решить задачу нужно что-то дополнительное ЗНАТЬ, причем непонятно что именно. И чтобы это узнать нужно просмотреть готовое решение. Так что лучше помогите, чем призывайте к размышлению. Все знакомые мне методы я уже перепробовал.
zhenya31
Так все же кто-то может помочь с последней проблемой?
Aeq
дак у вас высота чем задается внешним блоком или внутренним? чисто логически вам как надо? чтоб внешний блок растягивался в зависимости от контента внутреннего, или чтоб внутренний растягивался на доступное место внешнего?
sergeiss
zhenya31 - читай про "overflow:hidden", чтобы предотвратить растягивание ДИВа контентом. Точнее, не только ДИВа, но и любого другого элемента.

Вот тут, например: http://htmlbook.ru/css/overflow

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.