Для простого напівпрозорого кольору фону вищевказані рішення (CSS3 або bg зображення) - найкращі варіанти. Однак якщо ви хочете зробити щось більш фантазійне (наприклад, анімацію, декілька фонів тощо), або якщо ви не хочете покладатися на CSS3, ви можете спробувати "техніку панелей":
.pane, .pane > .back, .pane > .cont { display: block; }
.pane {
position: relative;
}
.pane > .back {
position: absolute;
width: 100%; height: 100%;
top: auto; bottom: auto; left: auto; right: auto;
}
.pane > .cont {
position: relative;
z-index: 10;
}
<p class="pane">
<span class="back" style="background-color: green; opacity: 0.6;"></span>
<span class="cont" style="color: white;">Hello world</span>
</p>
Метод працює за допомогою двох "шарів" всередині зовнішнього елемента панелі:
- один ("назад"), який відповідає розміру елемента панелі, не впливаючи на потік вмісту,
- і один ("продовження"), який містить вміст і допомагає визначити розмір області.
На position: relative
панелі важливо; він повідомляє задньому шару підходити до розміру панелі. (Якщо вам потрібен <p>
тег, щоб він був абсолютним, змініть панель з a <p>
на <span>
і загортайте все в абсолютно позиційному положенні<p>
тег .)
Основна перевага цієї методики перед аналогічними, переліченими вище, полягає в тому, що панель не повинна бути заданого розміру; як зашифровано вище, він підійде на повну ширину (нормальна компонування блокових елементів) і лише такий же високий, як вміст. Елемент зовнішньої панелі можна розмістити будь-яким способом, доки він прямокутний (тобто вбудований блок буде працювати; звичайний-старий вбудований не буде).
Крім того, це дає багато свободи для фону; Ви можете вільно вкласти в задній елемент дійсно що-небудь, і це не впливатиме на потік вмісту (якщо ви хочете декілька повнорозмірних підшарів, просто переконайтеся, що вони також мають положення: абсолютна, ширина / висота: 100%, і вгорі / внизу / вліво / вправо: авто).
Одним із варіантів, щоб дозволити коригування фонової вставки (через верхній / нижній / лівий / правий) та / або прикріплення фону (шляхом вилучення однієї з лівих / правих або верхньої / нижньої пар), є використання наступного CSS:
.pane > .back {
position: absolute;
width: auto; height: auto;
top: 0px; bottom: 0px; left: 0px; right: 0px;
}
Як було написано, це працює в Firefox, Safari, Chrome, IE8 + та Opera, хоча IE7 та IE6 вимагають додаткових CSS та виразів, IIRC, і останній раз, коли я перевірив, друга версія CSS не працює в Opera.
На що слід звернути увагу:
- Плаваючі елементи всередині контуру шару не міститимуться. Вам потрібно буде переконатися, що вони очищені чи іншим чином містяться, інакше вони вислизнуть із дна.
- Поля переходить на елемент панелі, а накладка йде на елемент cont. Не використовуйте навпаки (поля на продовженні або прокладки на панелі), інакше ви виявите дивні випадки, такі як сторінка завжди трохи ширша за вікно браузера.
- Як згадувалося, вся справа повинна бути блоком або вбудованим блоком. Ви можете використовувати
<div>
S замість <span>
s для спрощення CSS.
Повніша демонстрація, що демонструє гнучкість цієї методики, використовуючи її в тандемі display: inline-block
з обома auto
& конкретними width
s / min-height
s:
.pane, .pane > .back, .pane > .cont { display: block; }
.pane {
position: relative;
width: 175px; min-height: 100px;
margin: 8px;
}
.pane > .back {
position: absolute; z-index: 1;
width: auto; height: auto;
top: 8px; bottom: 8px; left: 8px; right: 8px;
}
.pane > .cont {
position: relative; z-index: 10;
}
.debug_red { background: rgba(255, 0, 0, 0.5); border: 1px solid rgba(255, 0, 0, 0.75); }
.debug_green { background: rgba(0, 255, 0, 0.5); border: 1px solid rgba(0, 255, 0, 0.75); }
.debug_blue { background: rgba(0, 0, 255, 0.5); border: 1px solid rgba(0, 0, 255, 0.75); }
<p class="pane debug_blue" style="float: left;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left; display: inline-block; width: auto;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left; display: inline-block; width: auto; min-height: auto;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
А ось демонстрація техніки, яка широко використовується: