Grundlegendes CSS - Überlagern eines DIV mit einem halbtransparenten DIV darüber


75

Ich habe Probleme, dieses Rendering in meinem Browser (Chrome) richtig zu machen. Ich habe einen Wrapper, der alle Elemente des HTML-Codes enthält, und ich möchte einen DIV (nennen wir ihn div-1), der ein Bild enthält, und einen Overlay-Div darüber links, wie ich hier skizziert habe Bild ... irgendwelche schnellen Lösungen?

div bg mit Overlay halbtransparent div

Antworten:


152

Hier ist eine reine CSS-Lösung, ähnlich der Antwort von DarkBee, jedoch ohne zusätzliche .wrapperDiv:

.dimmed {
  position: relative;
}

.dimmed:after {
  content: " ";
  z-index: 10;
  display: block;
  position: absolute;
  height: 100%;
  top: 0;
  left: 0;
  right: 0;
  background: rgba(0, 0, 0, 0.5);
}

Ich verwende hier rgba, aber Sie können natürlich auch andere Transparenzmethoden verwenden, wenn Sie möchten.


@marcvangend die Lösung funktioniert, aber wenn es anstelle des Bildes ein scrollbares Div gibt, können wir trotzdem zulassen, dass das Scrollen funktioniert?
Onkar

2
@Onkar Sie können versuchen pointer-events: none;, dem .dimmed:afterSelektor etwas hinzuzufügen . Siehe auch stackoverflow.com/questions/1009753/… . Bitte lassen Sie uns wissen, ob es in diesem speziellen Anwendungsfall funktioniert.
Marcvangend

4
Fantastisch. Wenn Sie sich zum zugrunde liegenden Element durchklicken möchten, fügen Sie die Regelzeigerereignisse hinzu: none; zu den After-Element-CSS-Regeln
Adam Diament

25

Mit CSS3 müssen Sie mit der Transparenz kein eigenes Bild erstellen.

Haben Sie einfach ein div mit dem folgenden

position:absolute;
left:0;
background: rgba(255,255,255,.5);

Der letzte Parameter im Hintergrund (.5) ist die Transparenzstufe (eine höhere Zahl ist undurchsichtiger).

Beispiel Geige


16
.foo {
   position : relative;
}
.foo .wrapper {
    background-image : url('semi-trans.png');
    z-index : 10;
    position : absolute;
    top : 0;
    left : 0;
}

<div class="foo">
   <img src="example.png" />
   <div class="wrapper">&nbsp;</div>
</div>

1
Vielleicht möchten Sie top:0; left: 0;die.wrapper
Collin Henderson

Das ist richtig. Geändert
DarkBee

1
Auch wenn das Bild noch nicht transparent ist,opacity:0.4; filter:alpha(opacity=40); /* For IE8 and earlier */
Echolocation

1
PS - ist die Verwendung von rgba nicht ratsam, ich sehe, Sie haben sich für transparentes PNG entschieden ... das liegt am Internet Explorer, oder?
TM23

Ja, um ältere Browser zu unterstützen, die CSS3 nicht verarbeiten können
DarkBee

10

Für ein div-Element können Sie die Deckkraft einfach über eine Klasse festlegen, um den Effekt zu aktivieren oder zu deaktivieren.

.mute-all {
   opacity: 0.4;
}

5

Wie die vorherige Antwort, aber ich würde :: vorher setzen, nur zum Stapeln. Wenn Sie Text über das Overlay einfügen möchten (ein häufiger Anwendungsfall), sollte dies durch die Verwendung von :: before behoben werden.

.dimmed {
  position: relative;
}

.dimmed:before {
  content: " ";
  z-index: 10;
  display: block;
  position: absolute;
  height: 100%;
  top: 0;
  left: 0;
  right: 0;
  background: rgba(0, 0, 0, 0.5);
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.