У меня есть сайт со следующей структурой:
<div id="header"></div>
<div id="main">
<div id="navigation"></div>
<div id="content"></div>
</div>
<div id="footer"></div>
Навигация находится слева, а раздел содержимого - справа. Информация для содержимого div передается через PHP, поэтому каждый раз она меняется.
Как я могу масштабировать навигацию по вертикали, чтобы ее высота совпадала с высотой содержимого div, независимо от того, какая страница загружена?
display: flex; align-items: stretch;
для div # main. И не используйтеheight: 100%
для содержимого div #Ответы:
ПРИМЕЧАНИЕ . Этот ответ применим к устаревшим браузерам без поддержки стандарта Flexbox. Для современного подхода, см .: https://stackoverflow.com/a/23300532/1155721
Я предлагаю вам взглянуть на столбцы одинаковой высоты с кросс-браузерным CSS и без хаков .
По сути, делать это с помощью CSS совместимым с браузером способом не тривиально (но тривиально с таблицами), поэтому найдите себе подходящее готовое решение.
Кроме того, ответ зависит от того, хотите ли вы 100% высоты или равной высоты. Обычно это равная высота. Если это 100% высота, ответ немного другой.
источник
border:1px solid blue
напримерcontainer2
: синяя рамка находится на первых двух столбцах, а не на втором столбце, как вы ожидали.display:table
Для родителя:
Вы должны добавить некоторые префиксы, http://css-tricks.com/using-flexbox/ .
Изменить: как заметил @ Адам Гарнер, выровнять элементы: растянуть; не нужен Его использование также для родителей, а не детей. Если вы хотите определить растяжение детей, вы используете align-self.
источник
align-items: center
то, что нужно растянуть,align-self: normal
Это неприятная проблема, с которой постоянно сталкиваются дизайнеры. Хитрость в том, что вам нужно установить высоту 100% для тела и HTML в вашем CSS.
Этот, казалось бы, бессмысленный код должен определять браузеру, что означает 100%. Разочарование, да, но это самый простой способ.
источник
html { height: 100%; } body { height: 98%; }
.Я считаю, что установка двух столбцов
display: table-cell;
вместо того, чтобыfloat: left;
работать хорошо.источник
Если вы не возражаете против того, чтобы div навигации был обрезан в случае неожиданно короткого содержимого div, есть по крайней мере один простой способ:
В противном случае есть техника искусственных колонн .
источник
источник
используя jQuery:
источник
Math.max()
был бы вашим другом здесь.css
функции JQuery вы не можете различить экранные и печатные носители, как это обычно делается при использовании чисто CSS-решений. Таким образом, у вас могут возникнуть проблемы с печатью.Попробуйте сделать нижнее поле 100%.
источник
Посмотрите на этот пример .
источник
height: 100%
но оказалось, что это было не нужно.height : <percent>
будет работать, только если у вас есть все родительские узлы с указанным процентом высоты с фиксированной высотой в пикселях, ems и т. д. на верхнем уровне. Таким образом, высота будет каскадно снижаться до вашего элемента.Вы можете указать 100% для html и body элементов, как указано ранее @Travis, чтобы высота страницы каскадно доходила до ваших узлов.
источник
После долгих поисков и попыток ничто не решило мою проблему, кроме
на детей Div
и для родителей применить это
Кроме того, я использую загрузчик, и это не повредило отзывчивый для меня.
источник
flex-direction: column;
чтобы это работало на меня.На основе метода, описанного в этой статье, я создал динамическое решение .Less:
Html:
Меньше:
источник
Добавить
display: grid
к родителюисточник
Я знаю, что прошло много времени с тех пор, как вопрос был задан, но я нашел простое решение и подумал, что кто-то может его использовать (извините за плохой английский). Здесь это идет:
CSS
HTML
Простой пример Обратите внимание, что вы можете превратиться в отзывчивость.
источник
Мое решение:
источник
В названии вопроса и его содержании есть некоторое противоречие. Название говорит о родительском div, но вопрос заставляет это звучать так, как будто вы хотите, чтобы два родственных div (навигация и контент) были одинаковой высоты.
Вы (а) хотите, чтобы навигация и контент были на 100% выше основной, или (б) хотите, чтобы навигация и контент были одинаковой высоты?
Я буду считать (б) ... если это так, я не думаю, что вы сможете сделать это, учитывая вашу текущую структуру страницы (по крайней мере, не с чистым CSS и без сценариев). Вам, вероятно, нужно сделать что-то вроде:
и установите для содержимого div, чтобы было левое поле любой ширины навигационной панели. Таким образом, контент находится справа от навигации, и вы можете установить div навигации равным 100% высоты контента.
РЕДАКТИРОВАТЬ: я делаю это полностью в моей голове, но вам, вероятно, также необходимо установить левое поле навигационного элемента в отрицательное значение или установить его абсолютное левое значение на 0, чтобы переместить его обратно в крайнее левое положение. Проблема в том, что есть много способов сделать это, но не все они будут совместимы со всеми браузерами.
источник
[Ссылаясь на код Less из Dmity в другом ответе] Я предполагаю, что это какой-то «псевдокод»?
Из того, что я понимаю, попробуйте использовать технику искусственных столбцов, которая должна сработать.
http://www.alistapart.com/articles/fauxcolumns/
Надеюсь это поможет :)
источник
источник
давать
position: absolute;
ребенку работали в моем случаеисточник
Вы используете CSS Flexbox
источник
Этот ответ больше не идеален, так как CSS flexbox и grid были реализованы в CSS. Однако это все еще рабочее решение
На меньшем экране вы, вероятно, захотите сохранить высоту автоматически, так как col1, col2 и col3 накладываются друг на друга.
Однако после точки останова медиа-запроса вы бы хотели, чтобы столбцы отображались рядом друг с другом с одинаковой высотой для всех столбцов.
1125 пикселей - это только пример точки останова ширины окна, после которой вы хотите установить для всех столбцов одинаковую высоту.
Вы можете, конечно, установить больше точек останова, если вам нужно.
источник
У меня была такая же проблема, она работала, основываясь на ответе Хакама Фостока, я создал небольшой пример, в некоторых случаях он мог бы работать без добавления
display: flex;
иflex-direction: column;
в родительском контейнере.JSFiddle
источник
Как показано ранее, flexbox является самым простым. например.
это выровняет все дочерние элементы по центру в родительском элементе.
источник
От:
http://getbootstrap.com.vn/examples/equal-height-columns/equal-height-columns.css
заявляет загрузчик, но вам не нужен загрузчик, чтобы использовать это. Отвечая на этот старый вопрос, как это работает для меня, и, кажется, довольно легко реализовать.
Это был тот же ответ, который я дал на этот вопрос
источник
Здесь старомодная демоверсия на основе
position: absolute
контейнера содержимого иposition: relative
родительского контейнера.Что касается современного способа сделать это - гибкие боксы являются лучшими.
источник
Самый простой способ сделать это - просто подделать его. В течение нескольких лет этот список широко освещался, как в статье Дана Седерхолма от 2004 года .
Вот как я обычно это делаю:
Вы можете легко добавить заголовок к этому дизайну, обернув #container в другой div, вставив div заголовка в качестве родственного элемента # контейнера и перенеся стили полей и ширины в родительский контейнер. Кроме того, CSS должен быть перемещен в отдельный файл и не храниться в строке и т. Д. И т. Д. Наконец, класс clearfix может быть найден в positioniseverything .
источник