J'ai une image d'arrière-plan configurée via CSS.
html {
background-image: url('../img/cello.jpg');
background-attachment: fixed;
background-size: 100%;
}
Je prévois d'avoir une image de fond différente pour les différentes pages du site Web: il est donc important que le texte soit lisible par-dessus. En ce moment, j'ai un fond noir translucide dans ma zone de contenu #main au milieu comme ceci afin d'assurer la lisibilité:
#main {
background: rgba(0, 0, 0, 0.5);
}
Ce que je veux vraiment faire, cependant, c'est d'avoir ce genre d'arrière-plan translucide sur toute l'image d'arrière-plan, car la boîte noire semble un peu maladroite. J'ai essayé de faire un <div id=#tint>
qui inclut tout le document HTML et donne rgba (0, 0, 0, 0.5) à #tint, mais cela ne fonctionne pas du tout - je ne peux rien faire changer ou je peux obtenir l'arrière-plan entier pour devenir un gris simple sans image d'arrière-plan visible. N'est-ce tout simplement pas possible?
Je pense que vous devez créer un élément de superposition (potentiellement div
) qui a le fond translucide recherché. Quelque chose comme:
.overlay {
z-index: 1;
height: 100%;
width: 100%;
position: fixed;
overflow: auto;
top: 0px;
left: 0px;
background: rgba(0, 0, 0, 0.7); /*can be anything, of course*/
}
Et bien sûr, une petite démo: petit lien .
background-blend-mode
pour une teinte simpleVous pouvez utiliser le background-blend-mode
propriété css:
.background-tint {
background-color: rgba(200,100,0,.5); // Tint color
background-blend-mode: multiply;
}
Placez-le sur n'importe quel élément avec une image de fond et vous êtes prêt à partir.
La propriété est bien prise en charge dans les navigateurs modernes [~ # ~] pas [~ # ~] y compris IE les plus récents et Edge ( état de prévisualisation peut être activé avec un indicateur). Pour les navigateurs non compatibles, vous pouvez utiliser un polyfill .
.background-tint {
background-image:
linear-gradient( rgba(0,0,0,.5), rgba(0,0,0,.5) ),
url('http://placehold.it/420')
}
Je pense que c'est la technique la plus utilisée, mais elle a l'inconvénient d'être codée en dur, c'est-à-dire que vous ne pouvez pas simplement prendre un cours, le coller sur un élément et faire une teinte.
Vous pouvez en faire un mixin moins ou plus, quelque chose comme:
less
.background-tint(@tint-color, @image-url) {
background-image:
linear-gradient( @tint-color, @tint-color ),
url( @image-url )
}
sass
@mixin background-tint($tint_color, $image_url) {
background-image:
linear-gradient( $tint_color, $tint_color ),
url( $image_url )
}
.background-tint { position: relative; }
.background-tint::after {
content: "";
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
background-color: rgba(0,0,0,.5);
}
Cette méthode a l'avantage de fonctionner sur la plupart des navigateurs et n'est qu'une classe Nice que vous ajoutez à n'importe quel élément. L'inconvénient est que si vous avez autre chose à l'intérieur de cet élément, vous devrez l'envelopper dans une div avec une sorte de positionnement position: relative
fonctionnerait mieux.
Exemple:
<div class="background-tint">
<div class="u-relative">Some text here</div>
</div>
.u-relative { position: relative; }
Cela a très bien fonctionné pour moi:
https://css-tricks.com/tinted-images-multiple-backgrounds/
.tinted-image {
background:
/* top, transparent red, faked with gradient */
linear-gradient(
rgba(255, 0, 0, 0.45),
rgba(255, 0, 0, 0.45)
),
/* bottom, image */
url(image.jpg);
}
Et en s'appuyant sur une autre réponse, vous pouvez le faire avec des couleurs existantes en moins comme:
linear-gradient(
fade(@brand-primary, 50%),
fade(@brand-primary, 50%)
),
Ce serait la propriété overlay
https://dvcs.w3.org/hg/FXTF/rawfile/tip/compositing/index.html#blendingoverlay Mais c'est un brouillon. Ne vous y fiez pas
Essayez l'opacité:
opacity:0.4;
filter:alpha(opacity=40); /* For IE8 and earlier */