Disons que j'ai
<div class="myDiv">Hi there</div>
Je veux mettre un background-image
et donnez-lui un opacity
de 0.5
- mais je veux que le texte que j'ai écrit ait une opacité totale (1
).
Si j'écris le CSS comme ça
.myDiv { opacity:0.5 }
tout sera dans une faible opacité - et je ne le veux pas.
Ma question est donc la suivante: comment obtenir une image d’arrière-plan à faible opacité avec un texte à pleine opacité?
Non, cela ne peut pas être fait car opacity
affecte tout l'élément, y compris son contenu, et il n'y a aucun moyen de modifier ce comportement. Vous pouvez contourner ce problème avec les deux méthodes suivantes.
Ajoutez un autre élément div
au conteneur pour conserver l’arrière-plan. Cette méthode est la plus conviviale pour tous les navigateurs et fonctionnera même sur IE6.
[~ # ~] html [~ # ~]
<div class="myDiv">
<div class="bg"></div>
Hi there
</div>
[~ # ~] css [~ # ~]
.myDiv {
position: relative;
z-index: 1;
}
.myDiv .bg {
position: absolute;
z-index: -1;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: url(test.jpg) center center;
opacity: .4;
width: 100%;
height: 100%;
}
Voir scénario de test sur jsFiddle
Une autre astuce consiste à utiliser les pseudo-éléments CSS 2.1 :before
Ou CSS 3 ::before
. Le pseudo-élément :before
Est pris en charge dans IE à partir de la version 8, alors que le pseudo-élément ::before
N'est pas pris en charge. Cela sera corrigé dans la version dix.
[~ # ~] html [~ # ~]
<div class="myDiv">
Hi there
</div>
[~ # ~] css [~ # ~]
.myDiv {
position: relative;
z-index: 1;
}
.myDiv:before {
content: "";
position: absolute;
z-index: -1;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: url(test.jpg) center center;
opacity: .4;
}
En raison du comportement de z-index
, Vous devrez définir un index z pour le conteneur ainsi qu'un négatif z-index
Pour l'image d'arrière-plan.
Voir test case sur jsFiddle:
Donc, voici une autre manière:
background-image: linear-gradient(rgba(255,255,255,0.5), rgba(255,255,255,0.5)), url("your_image.png");
div {
width: 200px;
height: 200px;
display: block;
position: relative;
}
div::after {
content: "";
background: url(image.jpg);
opacity: 0.5;
top: 0;
left: 0;
bottom: 0;
right: 0;
position: absolute;
z-index: -1;
}
<div> put your div content</div>
<!DOCTYPE html>
<html>
<head></head>
<body>
<div style=" background-color: #00000088"> Hi there </div>
<!-- #00 would be r, 00 would be g, 00 would be b, 88 would be a. -->
</body>
</html>
y compris 4 ensembles de nombres le rend rgba, pas cmyk, mais dans tous les cas fonctionnerait (rgba = 00000088, cmyk = 0%, 0%, 0%, 50%)
J'ai implémenté solution de Marcus Ekwall mais j'ai pu supprimer quelques éléments pour le rendre plus simple et cela fonctionne toujours. Peut-être que 2017 version de html/css?
html:
<div id="content">
<div id='bg'></div>
<h2>What is Lorem Ipsum?</h2>
<p><strong>Lorem Ipsum</strong> is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen
book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with
desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.</p>
</div>
css:
#content {
text-align: left;
width: 75%;
margin: auto;
position: relative;
}
#bg {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: url('https://static.pexels.com/photos/6644/sea-water-ocean-waves.jpg') center center;
opacity: .4;
width: 100%;
height: 100%;
}
Aucune des solutions n'a fonctionné pour moi. Si tout le reste échoue, transférez l'image vers Photoshop et appliquez un effet. 5 minutes contre tant de temps sur ce ...
Cela peut être fait en utilisant la classe div différente pour le texte Hi There ...
<div class="myDiv">
<div class="bg">
<p> Hi there</p>
</div>
</div>
Maintenant, vous pouvez appliquer les styles au
étiquette. sinon pour la classe bg. Je suis sûr que ça marche bien
Bonjour à tous j'ai fait ça et ça a bien fonctionné
var canvas, ctx;
function init() {
canvas = document.getElementById('color');
ctx = canvas.getContext('2d');
ctx.save();
ctx.fillStyle = '#bfbfbf'; // #00843D // 118846
ctx.fillRect(0, 0, 490, 490);
ctx.restore();
}
section{
height: 400px;
background: url(https://images.pexels.com/photos/265087/pexels-photo-265087.jpeg?w=1260&h=750&auto=compress&cs=tinysrgb);
background-repeat: no-repeat;
background-position: center;
background-size: cover;
position: relative;
}
canvas {
width: 100%;
height: 400px;
opacity: 0.9;
}
#text {
position: absolute;
top: 10%;
left: 0;
width: 100%;
text-align: center;
}
.middle{
text-align: center;
}
section small{
background-color: #262626;
padding: 12px;
color: whitesmoke;
letter-spacing: 1.5px;
}
section i{
color: white;
background-color: grey;
}
section h1{
opacity: 0.8;
}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Metrics</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
</head>
<body onload="init();">
<section>
<canvas id="color"></canvas>
<div class="w3-container middle" id="text">
<i class="material-icons w3-highway-blue" style="font-size:60px;">assessment</i>
<h1>Medimos las acciones de tus ventas y disenamos en la WEB tu Marca.</h1>
<small>Metrics & WEB</small>
</div>
</section>