245 votes

Couche de couleur semi-transparente sur l'image d'arrière-plan ?

J'ai un DIV et je voudrais mettre un motif en arrière-plan. Ce motif est gris. Pour le rendre un peu plus joli, je voudrais mettre une "couche" de couleur claire et transparente par-dessus. Voici ce que j'ai essayé mais qui n'a pas fonctionné. Existe-t-il un moyen de placer le calque de couleur sur l'image d'arrière-plan ?

Voici mon CSS :

background: url('../img/bg/diagonalnoise.png');
background-color: rgba(248, 247, 216, 0.7);

367voto

BevansDesign Points 123

Je sais que c'est un très vieux sujet, mais il apparaît en tête de liste dans Google, alors voici une autre option.

Celui-ci est purement CSS, et ne nécessite pas de HTML supplémentaire.

box-shadow: inset 0 0 0 1000px rgba(0,0,0,.2);

Il existe un nombre surprenant d'utilisations de la fonction "box-shadow".

1 votes

Bien que cette possibilité soit étonnante, elle n'est prise en charge que par IE 9+, ce qui signifie que 1,8 % des utilisateurs du web ont été ignorés en octobre 2014.

3 votes

Très bien ! Est-ce une bonne idée du point de vue des performances ? Je n'ai pas examiné les performances de box-shadow.

1 votes

@Notflip & autres, c'est le cas lorsque l'utilisation est limitée, ce n'est certainement pas le cas si vous avez ce paramètre sur plus de 100 éléments. Surcharge de rendu. Source : expérience personnelle.

264voto

Johannes Klauß Points 2160

C'est ici :

.background {
    background:url('../img/bg/diagonalnoise.png');
    position: relative;
}

.layer {
    background-color: rgba(248, 247, 216, 0.7);
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

HTML pour cela :

<div class="background">
    <div class="layer">
    </div>
</div>

Bien entendu, vous devez définir une largeur et une hauteur à l'élément .background s'il n'y a pas d'autres éléments à l'intérieur.

17 votes

Il n'y a absolument aucune raison pour un positionnement relatif et absolu.

2 votes

Ah oui, bien sûr, j'étais un peu dans la popup modale, je ne sais pas pourquoi. Votre réponse est bien sûr plus propre et plus facile.

0 votes

@JohannesKlauß comment se fait-il que sa réponse soit plus propre et plus facile ? elle ne fonctionne pas, du moins dans mon cas.

171voto

Tom Points 11

D'après CSS-Tricks... il y a un moyen de faire cela en une seule étape sans z-indexation et sans ajouter de pseudo-éléments - il faut un gradient linéaire, ce qui signifie, je pense, que vous avez besoin du support CSS3.

.tinted-image {
  background-image: 
    /* top, transparent red */
    linear-gradient(
      rgba(255, 0, 0, 0.45), 
      rgba(255, 0, 0, 0.45)
    ),
    /* your image */
    url(image.jpg);
}

0 votes

Cela a bien fonctionné, vous ne pouvez pas animer les gradients, mais si vous vouliez donner une impulsion à une couleur, je ne pense pas que cela soit possible avec n'importe quelle méthode.

1 votes

J'avais background-size:cover; y background-position:center center; défini sur cet élément. Cela semble annuler cet effet.

0 votes

Cela fonctionne très bien avec un background-size:cover ; after. Sur chrome en tout cas.

58voto

TorranceScott Points 1317

Vous pouvez également utiliser un gradient linéaire et une image : http://codepen.io/anon/pen/RPweox

.background{
  background: linear-gradient(rgba(0,0,0,.5), rgba(0,0,0,.5)),
    url('http://www.imageurl.com');
}

Cela est dû au fait que la fonction de gradient linéaire crée une image qui est ajoutée à la pile d'arrière-plan. https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient

33voto

yaufaniadam Points 21

Essayez ceci. Ca marche pour moi.

.background {
    background-image: url(images/images.jpg);
    display: block;
    position: relative;
}

.background::after {
    content: "";
    background: rgba(45, 88, 35, 0.7);
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1;
}

.background > * {
    z-index: 10;
}

4 votes

Il s'agit d'une réponse vraiment excellente qui ne nécessite pas d'éléments HTML supplémentaires. Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X