Как я могу сделать div 100% высоты окна?

Я просто хочу иметь боковую панель, которая будет составлять 100% высоты окна, но ничего не работает, кроме этого:

#sidebarBack {
background: rgba(20, 20, 20, .3);
position: fixed;
width: 250px;
height: 100%;
left: 0;
}

Я не хочу иметь position: fixed, потому что у меня есть прокручиваемый по горизонтали контент, поэтому фиксированная часть останется, ну, исправлена.

Есть ли способ сделать такое, возможно, с relative или absolute позицией?

Здесь быстрый скрипт только для теста и объяснения: JSFiddle

Ответ 1

tl; dr - добавьте html, body {height:100%;} в ваш CSS.


Процентные значения в CSS наследуются от какого-то предка, у которого уже объявлен рост. В вашем случае вам нужно указать всем родителям боковой панели высоту 100%. Я предполагаю, что #sidebarBack является прямым дочерним элементом body.

По существу, ваш код выше сообщает #sidebarBack о 100% -ной высоте своего родителя. Его родительский элемент (мы предполагаем) body, поэтому вам нужно установить height: 100%; на body. Однако мы не можем остановиться; body наследует высоту от html, поэтому нам также нужно установить height: 100%; на html. Мы можем остановиться здесь, потому что html наследует свои свойства от viewport, который уже имеет объявленную высоту 100%.

Это также означает, что если вы вставляете #sidebar внутрь другого div, тогда для div также требуется height:100%;.

Вот Обновленный JSFiddle.

Изменен ваш CSS:

html, body {
    height:100%;
}

#sidebar {
    background: rgba(20, 20, 20, .3);
    width: 100px;
    height: 100%;
    left: 0;
    float:left;
}

section#settings {
    width:80%;   
    float:left;
    margin-left:100px;
    position:fixed;
}

Ответ 2

Вы можете использовать новый и так полезный-I-can't-imagine-what-take-W3C-so-long vh Единица CSS:

height:100vh;

Ответ 3

Сначала сообщите элементу body заполнить окно, а не уменьшаться до размера содержимого:

body { position: absolute; min-height: 100%; }

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

Теперь установите "#sidebar" как position:absolute и используйте top:0; bottom:0;, чтобы заставить его заполнить вертикальное пространство родительского элемента:

#sidebar {
    position: absolute;
    top:0; bottom:0;
    left: 0;
    width: 100px;
    background: rgba(20, 20, 20, .3);
}

Вот пара jsFiddles:

Как вы увидите, в обоих примерах я сохранил настройку ширины в разделе "#settings", тем самым показывая, что горизонтальная прокрутка работает по вашему желанию.

Ответ 4

Попробуйте выполнить

#sidebarBack {
 background: rgba(20, 20, 20, .3);
 position: fixed;
 width: 250px;
 top:0;
 bottom:0;
 left: 0;
}

Ответ 5

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

html,body{height:100%;}
#sidebar {
background: rgba(20, 20, 20, .3);
/*position: fixed;*/
width: 100px;
height: 100%;
left: 0;
float:left;
}


section#settings {
width: 62%;
height: auto;
display: inline-block;
position: relative;
margin-left: 100px;
float:left;
}