2017-01-15 6 views
2

Ich versuche, ein Hintergrundbild transparent zu machen (keine Option, um ein transparentes PNG oder helleres Bild zu machen, die Bilder werden oft geändert).Hintergrundbild Transparenz in DIV

background: url(image.jpg) no-repeat center center/cover; 
opacity: 0.2; 

Got das Bild funktioniert, aber alles innerhalb der DIV ist auch transparent. Ich habe nach einer Lösung gesucht, kann aber nicht die richtige implementieren. Irgendein Zeiger auf, wie man das repariert?

+0

Set für 'Container: background-color: rgba (0,0,0,0.5);' und klare Opazität – Khoshtarkib

Antwort

4

Verwenden Sie die Opazität auf dem Hintergrund div innerhalb des Wrapperelements.

.page { 
 
    position: relative; 
 
    width: 100px; 
 
    height: 100px; 
 
} 
 
.page::before { 
 
    content: ''; 
 
    display: block; 
 
    position: absolute; 
 
    width: 100%; 
 
    height: 100%; 
 
    background: url('http://www.visitnorwich.co.uk/assets/Uploads/Events-images/Theatre-generic.jpg'); 
 
    opacity: 0.2; 
 
    z-index: -1; 
 
} 
 
.box { 
 
    display: inline; 
 
    background: red; 
 
}
<div class="page"> 
 
    My page 
 
    <div class="box">Red box</div> 
 
</div>

+0

Musste 'z-index: -0;' verwenden, damit es funktioniert ... aber es hat seinen Zweck erfüllt! Vielen Dank. –

2

Sie können CSS linear-gradient() mit rgba() verwenden.

div { 
 
    width: 300px; 
 
    height: 200px; 
 
    background: linear-gradient(rgba(255,255,255,.5), rgba(255,255,255,.5)), url("https://i.imgur.com/xnh5x47.jpg"); 
 
} 
 
span { 
 
    background: black; 
 
    color: white; 
 
}
<div><span>Hello world.</span></div>

jsFiddle

Erläuterung:

  • Der erste Teil: linear-gradient(rgba(255,255,255,.5), rgba(255,255,255,.5)) schafft eine halbtransparenten weiße Hintergrundfarbe. Sie können den Alpha-Parameter bei Bedarf zwischen 0 (vollständig transparent) und 1 (vollständig undurchsichtig) ändern.

  • Der zweite Teil: url("https://i.imgur.com/xnh5x47.jpg") soll das tatsächliche Hintergrundbild anzeigen.

  • Zusammen: background: linear-gradient(...), url(...); erstellt mehrere Hintergründe, zwei von ihnen sind gestapelt, die erste deckt die zweite.

+0

Macht das nicht gerade das Weiß über dem Bild transparent? – Ced

+0

Wird dadurch das Browser-Rendering mehr oder weniger belastet? –

+0

@JanTeunis Ich glaube nicht, dass irgendetwas auffällt, denn es ist ziemlich normales CSS3-Zeug, du kannst einige Tests machen, wenn du willst. Weitere Informationen dazu finden Sie unter [MDN] (https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Background_and_Borders/Using_CSS_multiple_backgrounds). – Stickers

1

können Sie ein Pseudo-Elem verwenden

div { 
 
     width: 300px; 
 
     height: 200px; 
 
     color: green; 
 
     position: relative; 
 
    } 
 

 
    div:before{ 
 
     background: url(https://i.imgur.com/xnh5x47.jpg); 
 
     content: ""; 
 
     z-index: -1; 
 
     position: absolute; 
 
     opacity: 0.5; 
 
     top: 0; bottom: 0; left: 0; right: 0; 
 
     background-size: cover; 
 
    }
<div> LOLOLOL </div>

+0

musste 'z-index: -0;' verwenden, damit es funktioniert ... aber es hat seinen Zweck erfüllt! Vielen Dank. –

Verwandte Themen