Für eine einfache halbtransparente Hintergrundfarbe sind die oben genannten Lösungen (CSS3- oder BG-Bilder) die besten Optionen. Wenn Sie jedoch etwas ausgefalleneres tun möchten (z. B. Animation, mehrere Hintergründe usw.) oder sich nicht auf CSS3 verlassen möchten, können Sie die „Fenstertechnik“ ausprobieren:
.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>
Bei dieser Technik werden zwei „Ebenen“ innerhalb des äußeren Fensterelements verwendet:
- eine (die "Rückseite"), die der Größe des Fensterelements entspricht, ohne den Inhaltsfluss zu beeinträchtigen,
- und eine (die "Fortsetzung"), die den Inhalt enthält und dabei hilft, die Größe des Bereichs zu bestimmen.
Das Ein- position: relative
Fenster ist wichtig. Die hintere Ebene wird an die Größe des Fensters angepasst. (Wenn das <p>
Tag absolut sein soll, ändern Sie den Bereich von a <p>
in a <span>
und verpacken Sie alles in ein <p>
Tag mit absoluter Position .)
Der Hauptvorteil dieser Technik gegenüber den oben aufgeführten ist, dass der Bereich keine bestimmte Größe haben muss. Wie oben codiert, passt es in voller Breite (normales Blockelement-Layout) und nur so hoch wie der Inhalt. Das äußere Fensterelement kann beliebig dimensioniert werden, solange es rechteckig ist (dh der Inline-Block funktioniert; ein einfacher alter Inline-Block funktioniert nicht).
Außerdem gibt es Ihnen viel Freiheit für den Hintergrund; Sie können wirklich alles in das hintere Element einfügen und es hat keinen Einfluss auf den Inhaltsfluss (wenn Sie mehrere Unterebenen in voller Größe möchten, stellen Sie einfach sicher, dass sie auch die Position haben: absolut, Breite / Höhe: 100%, und oben / unten / links / rechts: auto).
Eine Variante, um die Anpassung des Hintergrundeinsatzes (über oben / unten / links / rechts) und / oder das Fixieren des Hintergrunds (über das Entfernen eines der Paare links / rechts oder oben / unten) zu ermöglichen, besteht darin, stattdessen das folgende CSS zu verwenden:
.pane > .back {
position: absolute;
width: auto; height: auto;
top: 0px; bottom: 0px; left: 0px; right: 0px;
}
Wie geschrieben funktioniert dies in Firefox, Safari, Chrome, IE8 + und Opera, obwohl IE7 und IE6 zusätzliches CSS und Ausdrücke erfordern, IIRC, und als ich das letzte Mal nachgesehen habe, funktioniert die zweite CSS-Variante in Opera nicht.
Dinge, auf die Sie achten sollten:
- Schwebende Elemente innerhalb der Cont-Ebene sind nicht enthalten. Sie müssen sicherstellen, dass sie gelöscht oder anderweitig enthalten sind, da sie sonst aus dem Boden rutschen.
- Ränder werden für das Fensterelement und die Polsterung für das Element cont angezeigt. Verwenden Sie nicht das Gegenteil (Ränder im Cont oder Auffüllen im Bereich), da Sie sonst merkwürdige Dinge entdecken, z. B. dass die Seite immer etwas breiter als das Browserfenster ist.
- Wie bereits erwähnt, muss das Ganze Block oder Inline-Block sein. Verwenden Sie
<div>
s anstelle von <span>
s, um Ihr CSS zu vereinfachen.
Eine ausführlichere Demo, die die Flexibilität dieser Technik demonstriert, indem sie zusammen mit display: inline-block
und mit auto
& spezifischen width
s / min-height
s verwendet wird:
.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>
Und hier ist eine Live-Demo der Technik, die ausgiebig verwendet wird: