W przypadku prostego półprzezroczystego koloru tła powyższe rozwiązania (obrazy CSS3 lub bg) są najlepszymi opcjami. Jeśli jednak chcesz zrobić coś bardziej wymyślnego (np. Animację, wiele środowisk itp.) Lub jeśli nie chcesz polegać na CSS3, możesz wypróbować „technikę okienkową”:
.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>
Technika działa przy użyciu dwóch „warstw” wewnątrz zewnętrznego elementu szyby:
- jeden („tył”), który pasuje do rozmiaru elementu okienka bez wpływu na przepływ treści,
- i jeden („cd”), który zawiera treść i pomaga określić rozmiar okienka.
position: relative
Na panelu jest ważna; informuje tylną warstwę, aby dopasowała się do rozmiaru szyby. (Jeśli potrzebujesz, aby <p>
znacznik był bezwzględny, zmień panel z a <p>
na a <span>
i zawiń wszystko w <p>
znaczniku absolutnie ustawionym ).
Główną zaletą tej techniki w porównaniu do podobnych wymienionych powyżej jest to, że okienko nie musi mieć określonego rozmiaru; zgodnie z powyższym kodem zmieści się na całej szerokości (normalny układ elementów blokowych) i tylko tak wysoko, jak treść. Zewnętrzny element panelu może być dowolnie dopasowany, pod warunkiem, że jest prostokątny (tzn. Blok wstawiany będzie działał; zwykły wstawka nie będzie).
Daje też dużą swobodę w tle; możesz dowolnie umieszczać cokolwiek w tylnym elemencie i nie wpływać na przepływ treści (jeśli chcesz mieć wiele pełnowymiarowych podwarstw, upewnij się, że mają również pozycję: bezwzględną, szerokość / wysokość: 100%, oraz góra / dół / lewo / prawo: auto).
Jedną z odmian umożliwiającą regulację wstawki w tle (przez górny / dolny / lewy / prawy) i / lub przypinanie tła (poprzez usunięcie jednej pary lewej / prawej lub górnej / dolnej) jest użycie następującego CSS:
.pane > .back {
position: absolute;
width: auto; height: auto;
top: 0px; bottom: 0px; left: 0px; right: 0px;
}
Jak napisano, działa to w Firefox, Safari, Chrome, IE8 + i Opera, chociaż IE7 i IE6 wymagają dodatkowego CSS i wyrażeń, IIRC, a kiedy ostatnio sprawdzałem, druga odmiana CSS nie działa w Operze.
Na co należy zwrócić uwagę:
- Elementy pływające wewnątrz warstwy konturu nie będą zawarte. Musisz upewnić się, że są wyczyszczone lub w inny sposób zamknięte, albo wyślizgną się z dna.
- Marginesy są umieszczane na elemencie panelu, a wypełnienie na elemencie cont. Nie używaj odwrotności (marginesy w kontakcie lub dopełnienie w okienku), bo zauważysz takie dziwactwa, że strona zawsze jest nieco szersza niż okno przeglądarki.
- Jak wspomniano, cała rzecz musi być blokowa lub wbudowana. Możesz użyć
<div>
s zamiast <span>
s, aby uprościć swój CSS.
Pełniejsze demo, pokazujące elastyczność tej techniki poprzez użycie jej w parze z display: inline-block
, oraz z obydwoma auto
i konkretnymi 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>
A oto prezentacja na żywo szeroko stosowanej techniki: