Effets améliorés avec le mode de fusion des couches d'arrière-plan CSS

Si une image mérite mille mots, alors mélanger deux images mérite bien plus. De même, les possibilités de conception qui s'ouvrent avec la possibilité de mélanger des couches en CSS sont bien plus que vous ne le pensez.

Lorsque vous entendez une discussion sur les fonctionnalités des modes de mélange CSS , vous parlez généralement de trois nouvelles propriétés CSS qui ont reçu un bon support dans les navigateurs modernes.

Ces propriétés sont:

  • background-blend-mode - pour mélanger les images d'arrière-plan, les dégradés et les couleurs d'arrière-plan des éléments;
  • mix-blend-mode - pour mélanger des éléments avec d'autres éléments;
  • isolation est une propriété moins utilisée qui est utilisée avec le mode mix-blend pour empêcher les éléments de se mélanger.



Quoi qu'il en soit, cet article sera consacré au background-blend-mode de background-blend-mode , la propriété qui bénéficie du support le plus répandu, et les possibilités de l'utiliser pour créer des arrière-plans attrayants et des effets photo sur votre site Web qui n'étaient auparavant possibles que dans Photoshop.

Combinaison de dégradés CSS avec le mode de mélange en arrière-plan


Les dégradés CSS peuvent être utilisés dans la propriété background . Des fonctions telles que linear-gradient() , radial-gradient() , repeating-linear-gradient() et repeating-radial-gradient() ont un large support et une syntaxe standardisée plus stricte dans les navigateurs.

Mais la propriété background peut autoriser plusieurs dégradés, en les affichant les uns sur les autres, si vous listez chacun des suivants avec une virgule. Lea Verou a présenté des designs impressionnants qui peuvent être créés en utilisant cette technique: des échiquiers aux briques et aux étoiles.



Mais maintenant que nous avons la propriété background-blend-mode , nous pouvons créer tous les nouveaux dégradés et motifs.

Fond spectral


Appliquons trois dégradés pour créer un arrière-plan avec une gamme presque complète de couleurs pouvant être affichées sur le moniteur.

 .spectrum-background { background: linear-gradient(red, transparent), linear-gradient(to top left, lime, transparent), linear-gradient(to top right, blue, transparent); background-blend-mode: screen; } 



Cet effet n'était auparavant possible que sous la forme d'une image qui prenait des dizaines de kilo-octets. Mais nous venons de le reproduire en utilisant CSS de moins de 200 octets, sans parler de l'enregistrement de la requête HTTP.

Fond quadrillé


Nous pouvons également créer des motifs intéressants qui simulent un plaid à carreaux en utilisant un mode dégradé et background-blend-mode .

 .plaid-background { background: repeating-linear-gradient( -45deg, transparent 0, transparent 25%, dodgerblue 0, dodgerblue 50% ), repeating-linear-gradient( 45deg, transparent 0, transparent 25%, tomato 0, tomato 50% ), repeating-linear-gradient( transparent 0, transparent 25%, gold 0, gold 50% ), white; background-blend-mode: multiply; background-size: 100px 100px; } 



Fond de cercle


Voici un autre arrière-plan, utilisant maintenant un dégradé radial:

 .circles-background { background: radial-gradient( khaki 40px, transparent 0, transparent 100% ), radial-gradient( skyblue 40px, transparent 0, transparent 100% ), radial-gradient( pink 40px, transparent 0, transparent 100% ), snow; background-blend-mode: multiply; background-size: 100px 100px; background-position: 0 0, 33px 33px, -33px -33px; } 



Plus d'arrière-plans


Avec l'aide de Yoksel et Una Kravets, j'ai préparé une collection de 24 modèles réalisés en utilisant le mixage, ce qui rendra votre site plus rapide et plus attrayant.



Effets photo à l'aide du mode de fusion en arrière-plan


Bien que background-image vous permette de définir plusieurs dégradés pour un élément, l'astuce est que de la même manière, nous pouvons définir plusieurs images d'arrière-plan en utilisant la construction url() . Lorsque nous combinons cela avec le background-blend-mode et des propriétés comme le filter , nous pouvons obtenir quelque chose de vraiment intéressant.

Effet d'esquisse au crayon




Nous pouvons utiliser CSS pour faire ressembler la photo de gauche à un croquis au crayon. Nous n'avons pas besoin de bibliothèques Photoshop, HTML5 canvas, WebGL, Javascript. Cinq propriétés CSS suffisent.

Bien que nous puissions utiliser d'autres éléments de bloc, tels que le body , la section , la figure , pour commencer, nous utilisons le code HTML suivant:

 <div class=”pencil-effect”></div> 

Commençons la simulation. chapel.jpg par l'url de l'image que vous utilisez. Nous définissons l'image d'arrière-plan deux fois et conservons sa taille d'arrière-plan.

 .pencil-effect { background: url(chapel.jpg), url(chapel.jpg); background-size: cover; } 

Ci-dessous sur le premier carré le résultat de notre première étape:



Ajoutez maintenant un mode de fusion:

 background-blend-mode: difference; 

Oh non, où est-ce que tout est allé? Nous avons obtenu un carré complètement noir. Le mode de soustraction pour le mélange prend deux arrière-plans et soustrait pixel par pixel la couleur plus foncée d'un arrière-plan de la couleur plus claire de l'autre arrière-plan.



Si vous n'êtes pas sûr de ce qui se passe, voyons ce qui se passe lorsque nous décalons légèrement les deux background-position plans en utilisant background-position et calc() .

 background-position: calc(50% — 1px) calc(50% — 1px), calc(50% + 1px) calc(50% + 1px); 



À l'aide d'une virgule, nous définissons deux positions d'arrière-plan, chacune correspondant à une copie de l'image d'arrière-plan. La première image, nous nous déplaçons du centre le long de l'axe x vers la gauche d'un pixel et du centre le long de l'axe y vers le haut par le pixel. Pour la deuxième copie de l'image d'arrière-plan, nous faisons exactement le contraire, en la déplaçant vers le bas et vers la droite.

Nous avons obtenu deux images d'arrière-plan légèrement décalées, mais l'image entière est toujours centrée dans notre élément. Maintenant que le mode de soustraction détecte la différence entre les deux images, les bords de la photo sont visibles. Super, non?

Enfin, nous utiliserons la propriété filter pour inverser la photo et la traduire en nuances de gris.

 filter: brightness(3) invert(1) grayscale(1); 

Pour cette photo particulière, nous augmenterons également la luminosité, ce qui a un effet secondaire par rapport à l'augmentation du contraste des lignes.

Voici l'extrait CSS final pour cet effet:

 .pencil-effect { background: url(photo.jpg), url(photo.jpg); background-size: cover; background-blend-mode: difference; background-position: calc(50% — 1px) calc(50% — 1px), calc(50% + 1px) calc(50% + 1px); filter: brightness(3) invert(1) grayscale(1); } 



Effet tableau noir




Nous pouvons recréer l'effet du tableau noir en suivant les étapes de l'effet d'esquisse au crayon et en excluant la fonction invert(1) au stade final.

Effet de vision nocturne




Recréons un autre effet en utilisant les capacités de mélange CSS et prenons une photo qui ressemble à celle que nous avons prise à travers l'objectif d'un appareil de vision nocturne.

Il y a trois parties de notre fond que nous mélangerons ensemble en utilisant le mode de overlay . Ce mode de fusion éclaircit et assombrit l'arrière-plan et fonctionne comme une combinaison de deux autres modes de fusion - multiply et screen .

Nous avons d'abord défini l'image d'arrière-plan, cette fois-ci.

 background: url(moose.jpg); background-size: cover; background-position: center; 



Ajoutez maintenant le dégradé et la propriété de fusion des calques d'arrière-plan. Ici, nous utilisons un gradient radial de la chaux translucide au noir.

 background: url(moose.jpg), radial-gradient( rgba(0,255,0,.8), black ); background-blend-mode: overlay; 



Pas si mal, vous pouvez le laisser comme ça. Mais j'ai une autre idée qui peut rendre l'effet plus authentique - ajoutez de fausses lignes de balayage à l'arrière-plan avec un dégradé d'arrière-plan répétitif.

 background: url(moose.jpg), radial-gradient( rgba(0,255,0,.8), black ), repeating-linear-gradient( transparent 0, rgba(0,0,0,.2) 3px, transparent 6px ); 



Et enfin, voici l'extrait CSS complet utilisé pour cet effet:

 .night-vision-effect { background: url(moose.jpg), radial-gradient( rgba(0,255,0,.8), black ), repeating-linear-gradient( transparent 0, rgba(0,0,0,.2) 3px, transparent 6px ); background-blend-mode: overlay; background-size: cover; } 

Plus d'effets photo.


J'ai fait une galerie de 20 images avec des effets CSS que vous pouvez utiliser pour vos sites.



Prise en charge du navigateur et dégradation progressive


La bonne nouvelle est que la propriété background-blend-mode est entièrement prise en charge dans Firefox, Chrome et Opera.

Une partie de la bonne nouvelle est qu'il a un support suffisant dans Safari pour les effets que nous avons couverts ici, mais Safari ne prend actuellement pas en charge la saturation , la hue , la color et la luminosity .

La mauvaise nouvelle est qu'Internet Explorer et IE Edge ne prennent pas du tout en charge les propriétés de mélange CSS.

Cela signifie que nous devons tenir compte de la présence de navigateurs qui ne prennent toujours pas en charge le background-blend-mode . La merveilleuse règle CSS @supports rend cela assez simple. Voici deux exemples.

Pour le premier exemple, nous prenons notre gradient d'arrière-plan spectral et fournissons des options de secours au cas où la fonction de background-blend-mode n'est pas prise en charge. Pour notre exemple, nous utilisons background: gray comme réserve, mais n'importe quel CSS peut être utilisé à ce stade.

 .spectrum-background { background: gray; @supports (background-blend-mode: screen) { background: linear-gradient(red, transparent), linear-gradient(to top left, lime, transparent), linear-gradient(to top right, blue, transparent); background-blend-mode: screen; } } 

Et voici l'effet de croquis au crayon avec un repli. Nous vérifions deux propriétés importantes qui sont nécessaires pour créer un effet: le filter et le background-blend-mode . Si le navigateur de l'utilisateur ne les prend pas en charge (ou si le navigateur ne prend pas en charge CSS @supports ), nous reviendrons sur la photo d'origine.

 .pencil-effect { background-image: url(photo.jpg); background-size: cover; @supports (background-blend-mode: difference) and (filter: invert(1)) { background-image: url(photo.jpg), url(photo.jpg); background-blend-mode: difference; background-position: calc(50% — 1px) calc(50% — 1px), calc(50% + 1px) calc(50% + 1px); filter: brightness(3) invert(1) grayscale(1); } } 

Sources:


Modes de mélange démystifiés par Justin McDowell
Principes de base des modes de mélange CSS par Chris Coyier
Galerie de motifs CSS3 par Lea Verou
Série d'effets d'image CSS en 6 parties d'Una Kravets
Puis-je utiliser ... Prise en charge du mode de mélange de fond
Effets d'image avec CSS par Bennett Feely
Nouvelles possibilités de dégradé CSS avec la propriété background-blend-mode de Bennett Feely
Polyfill expérimental pour fond-mélange-mode par Rik Cabanier
Compositing et Blending niveau 1 spécification par le W3C


LOOKING.HOUSE - le projet a collecté plus de 150 points de miroir dans 40 pays. Vous pouvez exécuter rapidement les commandes host, ping, traceroute et mtr.


Source: https://habr.com/ru/post/fr423115/


All Articles