Подтвердить что ты не робот

Как сделать div на 100% страницы (не экрана)?

Я пытаюсь использовать CSS для создания эффекта "greyed out" на моей странице, пока поле загрузки отображается на переднем плане, пока приложение работает. Я сделал это, создав 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;
}

Спасибо.

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

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

Здесь правильный ответ:

body {
    position: relative;
}

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

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

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

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

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

Это оставляет следующий рекомендуемый полный 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

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>, и действует стандартная модель окна (т.е. Режим quirks не был запущен), это будет охватывать всю страницу.

Ответ 4

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

<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>

Ответ 5

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

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