Как сделать div 100% высоты страницы (не экрана)? - PullRequest
51 голосов
/ 16 июня 2009

Я пытаюсь использовать CSS, чтобы создать эффект «серого» на моей странице, когда окно загрузки отображается на переднем плане во время работы приложения. Я сделал это, создав 100% высоту / ширину, полупрозрачный черный div, чья видимость включается / выключается с помощью javascript. Я думал, что это будет достаточно просто; однако, когда содержимое страницы расширяется до такой степени, что экран прокручивается, при прокрутке до основания страницы отображается часть, которая не затенена. Другими словами, кажется, что 100% высоты div относится к размеру окна просмотра браузера, а не к фактическому размеру страницы. Как я могу расширить div, чтобы охватить весь контент страницы? Я пытался использовать JQuery .css ('height', '100%'), прежде чем включить его видимость, но это ничего не меняет.

Это CSS рассматриваемого div:

div.screenMask
{
    position: absolute;
    left: 0px;
    top: 0px;
    width: 100%;
    height: 100%;
    z-index: 1000;
    background-color: #000000;
    opacity: 0.7;
    filter: alpha(opacity=70);
    visibility: hidden;
}

Спасибо.

Ответы [ 5 ]

54 голосов
/ 17 июня 2009

Если вы измените position: absolute на position: fixed, он будет работать во всех браузерах, кроме IE6. Это исправляет div в окне просмотра, поэтому он не перемещается из поля зрения при прокрутке.

Вы можете использовать $(document).height() в jQuery, чтобы он работал и в IE6. Э.Г.

$('.screenMask').height($(document).height());

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

Существует множество хаков, позволяющих работать с фиксированным позиционированием и в IE6 , но они, как правило, либо накладывают некоторые другие ограничения на ваш CSS, либо используют JavaScript, так что они, вероятно, не стоят проблем .

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

17 голосов
/ 16 августа 2012

Я понимаю, что отвечаю так долго, очень долго после того, как об этом спросили, но я приземлился здесь после краткого упоминания этой проблемы, и ни один из текущих ответов не является правильным.

Вот правильный ответ:

body {
    position: relative;
}

Вот и все! Теперь ваш элемент будет расположен относительно <body>, а не в области просмотра.

Я бы не стал беспокоиться о position: fixed, так как его поддержка браузера остается нечеткой. Safari до iOS 5 вообще не поддерживал его.

Обратите внимание, что ваш элемент <div> будет закрывать рамку <body> (box + padding + border), но не будет покрывать ее поле. Компенсируйте, устанавливая отрицательные позиции на вашем <div> (например, top: -20px), или удаляя маржу <body>.

Я бы также порекомендовал установить <body> в height: 100%, чтобы гарантировать, что у вас никогда не появится частично замаскированное окно просмотра на более короткой странице.

Два действительных пункта взяты из предыдущих ответов. Как говорит Бен Бланк, вы можете потерять декларации width и height, расположив все четыре угла. И Mercator прав, что вы должны использовать идентификатор вместо класса для такого важного отдельного элемента.

Это оставляет следующий рекомендуемый полный CSS:

body {
    position: relative;
    margin: 0;
}

#screenMask {
    position: absolute;
    left: 0; right: 0;
    top: 0; bottom: 0;
    z-index: 1000;
    background-color: #000;
    opacity: 0.7;
    filter: alpha(opacity=70);
    visibility: hidden;
}

И HTML:

<body>
    <div id="screenMask"></div>
</body>

Надеюсь, это поможет кому-то еще!

3 голосов
/ 17 июня 2009
div.screenMask
{
    position: absolute;
    left: 0px;
    top: 0px;
    right: 0px;
    bottom: 0px;
    z-index: 1000;
    background-color: #000000;
    opacity: 0.7;
    filter: alpha(opacity=70);
    visibility: hidden;
}

При установке всех значений top, bottom, left и right высота и ширина рассчитываются автоматически. Если screenMask является прямым потомком элемента <body> и действует стандартная блочная модель (то есть режим причуд не был запущен), это будет охватывать всю страницу.

2 голосов
/ 18 сентября 2014

Если вы хотите всплывающее окно с эффектом наложения, вы можете использовать эти шаги ..

<style>
.overlay{
 background:#000;
 opacity:0.5;
 position:fixed;
 z-index:1;
 width:100%;
 height:100%;
}
.popup{
 width:500px;
 margin:auto;
 position:fixed;
 z-index:2;
 height:300px;
}
</style>
<div class="overlay"></div>
<div class="popup">
      Hello everyone
</div>
1 голос
/ 17 июня 2009

Если вы используете jQuery для установки высоты перед всплывающим окном, я думаю, что можно добавить еще javascript:)

Вы можете установить высоту div для scrollHeight of document.body - таким образом, он должен охватывать все тело. Вам действительно нужно добавить дополнительную хитрость, чтобы убедиться, что она покрывает тело на случай, если что-то снизу решит расти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...