Comment utiliser les techniques de découpage et de masquage CSS et SVG

Publié: 2023-11-02

Les SVG sont parfaits pour travailler sur le Web, et le découpage et le masquage offrent des moyens intéressants d'afficher ou de masquer des parties de vos graphiques Web. L'utilisation de ces techniques permet également une plus grande flexibilité dans vos conceptions, car vous n'avez pas besoin d'apporter des modifications manuellement ni de créer de nouvelles images : tout est réalisé avec du code. En utilisant une combinaison de techniques de découpage et de masquage CSS, vous disposerez de nombreuses options pour les graphiques de votre site Web.

Pour aider à clarifier les choses, le masquage et le découpage sont deux manières différentes de manipuler des images avec CSS. Commençons par le découpage.

Bases du découpage

Si vous avez déjà utilisé Photoshop, vous connaissez probablement déjà les masques d'écrêtage. C'est un type d'approche similaire. Le découpage consiste à poser une forme vectorielle, comme un cercle ou un triangle, au-dessus d'une image ou d'un élément. Toute partie de l'image située derrière la forme sera visible, tandis que tout ce qui se trouve en dehors des limites de la forme sera masqué.

Par exemple, si un masque d'écrêtage triangulaire se trouve au-dessus d'une image d'une forêt, vous verrez l'image de la forêt dans la forme triangulaire. La limite de la forme est appelée chemin de découpage, à ne pas confondre avec la propriété clip dépréciée. Vous créez le chemin de détourage à l’aide de la propriété clip-path .

Graphique montrant la progression d'une image, un chemin de détourage de forme irrégulière et la façon dont l'image a changé après avoir été découpée

Remarque : n'essayez pas ceci sur votre site en direct

N'oubliez pas : vous ne devez jamais modifier le code directement sur votre site, pour garantir que rien ne se casse. Notre application gratuite de développement local, Local, vous aidera à mettre en place un environnement de test dans lequel vous pourrez suivre ce didacticiel en toute sécurité.


Le découpage en action

Les clips sont toujours des chemins vectoriels. Cela peut être déroutant à comprendre, mais tout ce qui se trouve en dehors du chemin sera caché, tandis que tout ce qui se trouve à l'intérieur du chemin sera visible. Pour mieux comprendre et tester cela vous-même, consultez l'exemple sur CodePen.

Capture d'écran de l'exemple d'image sur CodePen

Voici un extrait de la structure HTML de l'exemple :

 [html]

<svg class="clip-svg">
	<defs>
		<clipPath id="polygon-clip-triangle-equilatéral" clipPathUnits="objectBoundingBox">
			<points polygonaux ="0 0,87, 0,5 0, 0,5 0, 1 0,87" />
		</clipPath>
	</defs>
</svg>

[/html]

Voici le CSS permettant de réaliser le découpage :

 [css]

.polygon-clip-triangle-équilatéral {
	-webkit-clip-path : polygone (0% 87%, 50% 0%, 50% 0%, 100% 87%) ;
	chemin de détourage : polygone (0 % 87 %, 50 % 0 %, 50 % 0 %, 100 % 87 %) ;
	-webkit-clip-path : url("#polygon-clip-triangle-equilateral");
	clip-path: url("#polygon-clip-triangle-equilatéral");
}

[/css]

Vous pouvez voir où l'identifiant clipPath est référencé dans le HTML et comment il utilise l'URL clip-path pour effectuer le découpage.

Outil Clippy

Clippy est un excellent outil pour générer des chemins de clips CSS. Il existe une grande variété de formes et de tailles de démarreurs qui peuvent être personnalisées.

capture d'écran illustrant un chemin de détourage d'une forme à 7 côtés

Bases du masquage

Le masquage se fait à l'aide d'une image PNG, d'un dégradé CSS ou d'un élément SVG pour masquer une partie d'une image ou un autre élément de la page. Nous nous concentrerons sur les graphiques SVG, mais gardez à l’esprit que cela peut être réalisé avec d’autres types ou styles d’images.

La propriété Mask et l'élément Mask

Juste un rappel pour aider à visualiser, il est important de garder à l'esprit que l'élément masqué est l'image « originale » (avant l'application du masque). Vous ne voudrez peut-être pas voir l'image entière, donc en masquer certaines parties se fait avec la propriété CSS mask . Le mask est le raccourci CSS pour un groupe de propriétés individuelles, que nous aborderons dans une seconde. L'élément SVG <mask> est utilisé dans un graphique SVG pour ajouter des effets de masquage. Dans cet exemple, le masque est un cercle et un dégradé est également appliqué.

Utilisation de l'élément de masque SVG sur un graphique SVG

Pour avoir une idée du <mask> SVG, nous allons le masquer avec un graphique SVG.

Cela peut paraître un peu complexe à première vue, mais tout cela fonctionne ensemble pour masquer l'image sous-jacente. Nous avons une véritable image comme arrière-plan, alors où le SVG entre-t-il en jeu ? Contrairement aux exemples de découpage, cette image d’arrière-plan se trouve techniquement à l’intérieur d’un élément SVG. Nous utiliserons CSS pour appliquer ce masque à l'image. Les propriétés proviendront de l'élément de masque SVG, et nous lui donnerons l'identifiant de masked-element dans notre CSS.

Pour voir cela en action, consultez cet exemple Codepen. Voici le code de travail pour le graphique SVG masqué :

 [html]

&amp;amp;amp;lt;svg class=&amp;quot;élément-masqué&amp;quot; largeur = "300" hauteur = "300" viewBox=&amp;quot;0 0 300 300&amp;quot;&amp;amp;amp;gt;
	&amp;amp;amp;lt;image xlink:href=&amp;quot;lien image&amp;quot; width=&amp;quot;300px&amp;quot; hauteur=&amp;quot;300px&amp;quot; /&amp;amp;amp;gt;
&amp;amp;amp;lt;/svg&amp;amp;amp;gt;

[/html] 
capture d'écran montrant les limites de l'élément masqué
si vous accédez à l'inspecteur, vous pouvez voir les limites de l'élément masqué. La forme circulaire est créée avec un masque.

Avec ce CSS, nous précisons où trouver le masque. Il recherchera l'ID de #mask-this:

 [css]
/* Voici le CSS pour le masquage */
.image d'élément masqué {
  masque : url(#masque1);
}

[/css] 
un rectangle bleu, au milieu se trouve une image circulaire d’une forêt. Le texte sur l'image se lit comme suit : Il s'agit d'un masque SVG sur un élément SVG. Masque SVG sur élément SVG. Fonctionne actuellement dans Webkit, Firefox et IE

Vous remarquez un dégradé dans la forme du cercle ? Un dégradé a été appliqué, ainsi que la définition de la forme du cercle pour le masque.

 [html]

&amp;amp;amp;lt;svg class=&amp;quot;svg-mask&amp;quot;&amp;amp;amp;gt;
 	&amp;amp;amp;lt;defs&amp;amp;amp;gt;
 		&amp;amp;amp;lt;id du masque=&amp;quot;mask1&amp;quot; maskUnits=&amp;quot;objectBoundingBox&amp;quot; maskContentUnits=&amp;quot;objectBoundingBox&amp;quot;&amp;amp;amp;gt;
    &amp;amp;amp;lt;linearGradient id=&amp;quot;grad&amp;quot; gradientUnits=&amp;quot;objectBoundingBox&amp;quot; x2=&amp;quot;0&quot; y2=&amp;quot;1&amp;quot;&amp;amp;amp;gt;
      &amp;amp;amp;lt;stop stop-color=&amp;quot;blanc&amp;quot; offset=&amp;quot;0&amp;quot;/&amp;amp;amp;gt;
      &amp;amp;amp;lt;stop stop-color=&amp;quot;vert&amp;quot; stop-opacity=&amp;quot;0&amp;quot; offset=&amp;quot;1&amp;quot;/&amp;amp;amp;gt;
    &amp;amp;amp;lt;/linearGradient&amp;amp;amp;gt;
    &amp;amp;amp;lt;cercle cx=&amp;quot;0,50&amp;quot; cy=&amp;quot;0,50&quot; r=&amp;quot;0,50&quot; id=&amp;quot;cercle&amp;quot; fill=&amp;quot;url(#grad)&amp;quot;/&amp;amp;amp;gt;
  	&amp;amp;amp;lt;/masque&amp;amp;amp;gt;
 	&amp;amp;amp;lt;/defs&amp;amp;amp;gt;
&amp;amp;amp;lt;/svg&amp;amp;amp;gt;

[/html]

Masquage de texte SVG

Le masquage de texte peut faire des choses plutôt intéressantes, comme afficher une image à travers un bloc de texte. La bonne nouvelle est qu’un élément texte peut être utilisé à l’intérieur d’un masque SVG. À mesure que la prise en charge des navigateurs augmentera à l’avenir, cela pourrait être un moyen très intéressant de combiner images et typographie.

une image d'une forêt avec une superposition de texte qui dit : Mon texte Masquage SVG avec des éléments de texte et de masque SVG : s'affiche dans Webkit, Firefox et IE

Voici une explication de base de ce qui se passe. Il y a un élément de texte SVG à l'intérieur du masque SVG. Nous avons spécifié la valeur RVB pour le blanc, qui crée la zone ovale autour du texte masqué. Tout ce qui se trouve derrière la zone ovale apparaît à travers le texte, donnant une impression de découpe.

 [html]

&amp;amp;amp;lt;div class=&amp;quot;text-wrap&amp;quot;&amp;amp;amp;gt;
    &amp;amp;amp;lt;svg class=&amp;quot;text-demo&amp;quot; viewBox=&amp;quot;0 0 600 400&amp;quot; largeur = "600" hauteur =&amp;quot;400&amp;quot;&amp;amp;amp;gt;
    &amp;amp;amp;lt;defs&amp;amp;amp;gt;
      &amp;amp;amp;lt;mask id=&amp;quot;myMask&amp;quot;&amp;amp;amp;gt;
        &amp;amp;amp;lt;rect largeur =&amp;quot;100%&amp;quot; hauteur=&amp;quot;100%&amp;quot; fill=&amp;quot;#fff&amp;quot; /&amp;amp;amp;gt;
        &amp;amp;amp;lt;texte x=&amp;quot;50&amp;quot; y=&amp;quot;200&quot; id=&amp;quot;myText&amp;quot;&amp;amp;amp;gt;Mon texte&amp;amp;amp;lt;/text&amp;amp;amp;gt;
        &amp;amp;amp;lt;texte x=&amp;quot;125&amp;quot; y=&amp;quot;293&amp;quot; id=&amp;quot;mySubtext&amp;quot;&amp;amp;amp;gt;SVG&amp;amp;amp;lt;/text&amp;amp;amp;gt;
      &amp;amp;amp;lt;/masque&amp;amp;amp;gt;
    &amp;amp;amp;lt;/defs&amp;amp;amp;gt;
    &amp;amp;amp;lt;ellipse class=&amp;quot;masqué&amp;quot; cx=&amp;quot;300&quot; cy=&amp;quot;200&quot; rx=&amp;quot;300&quot; ry=&amp;quot;150&quot; fill=&amp;quot;rgba(255, 255, 255, 0.8)&amp;quot; /&amp;amp;amp;gt;
  &amp;amp;amp;lt;/svg&amp;amp;amp;gt;
  &amp;amp;amp;lt;/div&amp;amp;amp;gt;

[/html]
 [css]

/* Voici le CSS pour l'élément texte */
#monTexte {
taille de police : 125 px ;
style de police : gras ;
remplir : #000 ;
}

/* Voici le CSS pour le masquage */
.masqué {
masque : url(&amp;quot;#monMask&amp;quot;);
}

[/css]

Pour bien comprendre, il est utile de jouer et d'expérimenter le code. Essayez de changer les couleurs, de changer le texte et d'ajuster les tailles dans ce Codepen.

La propriété Mask-Image

Une image peut être déclarée et l' mask-image peut être définie sur une valeur URL. L' mask-image peut être un PNG, un SVG ou une référence à un élément mask SVG, comme je l'ai démontré dans l'exemple précédent.

Étant donné que le masquage est utilisé pour masquer partiellement ou totalement des parties d'un objet ou d'un élément, vous souhaiterez d'abord un lien image vers un fichier pour l'élément qui va être masqué. Voici à quoi ressemble cette image. Il est coloré pour montrer très clairement quelle partie le masque montre et cache.

 [css]

&amp;amp;amp;lt;img class=&amp;quot;masque-img exemple-masque&amp;quot; src=&amp;quot;https://linktoimage.com/img/image-example.jpg&amp;quot; alt=&amp;quot;Image masquée&amp;quot;&amp;amp;amp;gt;

[/css] 
une image abstraite avec beaucoup de couleurs qui se chevauchent

Jusqu'à présent, il y a eu beaucoup de code SVG, mais cet exemple est légèrement différent puisqu'il y aura une image raster masquée avec un SVG.

 [css]

.exemple-masque {
  masque-image : url(https://linktoimage.com/browser-icon-01.svg) ;
  webkit-mask-image : url(https://linktoimage.com/browser-icon-01.svg) ;
  mode masque : alpha ;
  mode masque-webkit : alpha ;
  masque-répétition : pas de répétition ;
  webkit-mask-repeat : pas de répétition ;
  taille du masque : 200 px ;
  taille du masque du kit Web : 200 px ;
  position du masque : centre ;
  position du masque du kit Web : centre ;
}

[/css]

La propriété mask-image est l'endroit où la forme du masque sera déclarée. Dans ce cas, l'image du masque est un graphique SVG. Le lien URL inclus est la manière dont le masque est construit.

un graphique svg en noir et le même graphique plein de couleurs abstraites

Le voici sur Codepen.

Combinaison de plusieurs images de masques

Juste au moment où vous pensiez que le masquage ne pouvait pas être meilleur, il existe la possibilité de définir plusieurs calques d'image de masque. Tout ce que vous avez à faire est d'ajouter deux valeurs d'URL (ou plus si vous vous sentez ambitieux) séparées par une virgule.

Pour développer le masque simple ci-dessus, une flèche sera ajoutée au graphique original. Voici comment deux masques sont combinés.

 [css]

.masque-combiné {
   masque-image : url(https://linktoimage.com/arrow-01.svg), url(https://linktoimage.com/browser-icon-01.svg) ;
  webkit-mask-image : url(https://linktoimage.com/arrow-01.svg), url(https://linktoimage.com/browser-icon-01.svg) ;
}

[/css] 
un graphique svg différent avec beaucoup de couleurs abstraites

Tout ce que vous avez à faire est d'ajouter les deux valeurs (avec une virgule) et vous disposez désormais de deux masques combinés, ce qui rend les possibilités de masquage infinies.

Le voici sur Codepen.

Créer un dégradé simple avec mask-image

Tous les masques ne doivent pas nécessairement avoir une forme complexe. Parfois, ce n'est pas une image particulière qui constitue le masque, mais plutôt un simple masque comme un dégradé. Si vous cherchez un moyen rapide d’y parvenir, la propriété mask-image est une option assez facile à implémenter.

Dans cet exemple, une classe était appliquée à un dégradé défini comme propriété mask-image . Avec cette simple déclaration, il était facile de créer un masque dégradé sur l'image.

 [css]

masque-image : dégradé linéaire (noir, blanc, transparent) ;
-webkit-mask-image : dégradé linéaire (noir, blanc, transparent) ;

[/css] 
la même image abstraite d'en haut avec beaucoup de couleurs qui se chevauchent

Voir ceci sur Codepen.

La propriété Mask-Repeat

Une fois que vous avez créé un masque, il est assez facile d’en créer d’autres. Cela s'avère vraiment pratique si vous souhaitez créer un motif personnalisé. La propriété mask-repeat permet la répétition du masque. Si vous avez déjà créé un arrière-plan en mosaïque auparavant, ceci est similaire à cela.

Il y a quelques éléments importants à garder à l'esprit, comme la taille et le type de répétition de masque qui doit être déclaré pour créer le motif parfait.

La mask-size est assez facile à visualiser, surtout avec la valeur de pixel définie ici.

 [css]

taille du masque : 200 px ;
taille du masque du kit Web : 200 px ;

[/css] 
l'image abstraite d'en haut, mais au lieu d'être l'image solide, de multiples contours répétés remplissent l'espace et l'arrière-plan abstrait les colore

Il existe quelques options supplémentaires de répétition de masque si vous recherchez un effet différent pour le motif :

  • repeat-x se répète le long de la coordonnée x.
  • Repeat-y répète la coordonnée y.
  • space se répète et s'étale dans l'espace disponible.
  • round se répète plusieurs fois sur la zone disponible (la mise à l'échelle l'aidera à remplir l'espace si nécessaire)

Prise en charge du navigateur

Avant de s'engager dans cette nouvelle façon de travailler avec les graphiques, il est important de noter que la prise en charge des navigateurs n'est pas cohérente avec le découpage et le masquage. Le découpage est plus pris en charge que le masquage, mais Internet Explorer ne prend pas entièrement en charge le découpage.

La prise en charge actuelle des masques CSS par les navigateurs est également assez limitée, il est donc suggéré de les utiliser comme amélioration sur quelques éléments décoratifs. De cette façon, s’il n’est pas pris en charge par le navigateur de l’utilisateur, cela n’affecte pas l’expérience de visualisation du contenu.

Pour tester les choses et voir si vos masques et coupures sont pris en charge, nous vous recommandons de créer un JSFiddle ou Codepen, puis de l'essayer dans différents navigateurs. La prise en charge des navigateurs a augmenté ces dernières années et finira par arriver à un point où elle sera entièrement prise en charge.

Ne vous laissez pas abattre par les limitations : il est toujours bon d'avoir une longueur d'avance et une fois que le support sera plus courant, vous saurez exactement comment révolutionner vos graphismes. En cas de doute, assurez-vous de faire référence au Can I Use fiable.


Après avoir expérimenté ces exemples, cela devrait constituer une bonne introduction au masquage et au découpage. Bien que la prise en charge des navigateurs soit limitée pour le moment, cela deviendra probablement une pratique courante à l'avenir.

C'est toujours amusant de réfléchir à la manière dont ces techniques peuvent être utilisées pour créer des visuels intéressants. L'avenir des graphiques Web nous rendra moins dépendants des éditeurs d'images et permettra de disposer de moyens plus efficaces pour créer et modifier des images directement dans le navigateur.

Lorsque vous souhaitez vraiment mettre en valeur tout le travail acharné que vous avez consacré à vos sites, assurez-vous de choisir le meilleur hébergement WordPress possible avec WP Engine !