Aller au contenu

Ombres portées SVG

Description des filtres SVG

Tous les filtres SVG sont définis à l'intérieur d'un <defs> élément. L'élément <defs> est une abréviation pour « définitions ». Il contient la définition d'éléments spécifiques comme les filtres. L'élément <filter> définit un filtre SVG. Cet élément possède un attribut id (obligatoire) qui identifie le filtre.

Pour créer des ombres portées, utilisez l'élément <feOffset>. Vous devrez prendre une image SVG et la déplacer dans le plan xy.

Exemple de l'élément SVG <feOffset> :

Ombres portées SVG

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <svg width="150" height="150">
      <defs>
        <filter id="filter" x="0" y="0" width="150%" height="150%">
          <feOffset result="offOut" in="SourceGraphic" dx="30" dy="30" />
          <feBlend in="SourceGraphic" in2="offOut" mode="normal" />
        </filter>
      </defs>
      <rect width="110" height="110" stroke="purple" stroke-width="5" fill="pink" 
            filter="url(#filter)" /> 
      Sorry, your browser doesn't support inline SVG.
    </svg>
  </body>
</html>

Dans l'exemple ci-dessus, l'attribut id de l'élément <filter> spécifie un nom unique pour le filtre, et l'attribut filter de l'élément <rect> lie l'élément au filtre "filter".

Exemple de l'élément SVG <feGaussianBlur> :

Ombres portées SVG

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <svg width="200" height="200">
      <defs>
        <filter id="filter" x="0" y="0" width="250%" height="250%">
          <feOffset result="offOut" in="SourceGraphic" dx="30" dy="30" />
          <feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />
          <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
        </filter>
      </defs>
      <rect width="150" height="150" stroke="coral" stroke-width="5" fill="pink" 
            filter="url(#filter)" /> 
      Sorry, your browser doesn't support inline SVG.
    </svg>
  </body>
</html>

Ici, il est possible de flouter l'image décalée avec l'élément <feGaussianBlur>. L'attribut stdDeviation de cet élément spécifie la quantité de flou.

Dans l'exemple suivant, l'attribut in de l'élément <feOffset> est modifié pour "SourceAlpha". Il utilise le canal Alpha pour appliquer le flou au lieu de l'intégralité du pixel RGBA.

Exemple de coloration de l'ombre :

Ombres portées SVG

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <svg height="200" width="200">
      <defs>
        <filter id="filter" x="0" y="0" width="150%" height="150%">
          <feOffset result="offOut" in="SourceAlpha" dx="15" dy="15" />
          <feGaussianBlur result="blurOut" in="offOut" stdDeviation="8" />
          <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
        </filter>
      </defs>
      <rect width="120" height="120" stroke="purple" stroke-width="5" fill="pink" 
            filter="url(#filter)" /> 
       Sorry, your browser doesn't support inline SVG.
    </svg>
  </body>
</html>

Pour transformer les couleurs de l'image décalée, utilisez l'élément <feColorMatrix>.

Exemple de l'élément <feColorMatrix> :

Ombres portées SVG

html
<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <svg height="200" width="200">
      <defs>
        <filter id="filter" x="0" y="0" width="150%" height="150%">
          <feOffset result="offOut" in="SourceGraphic" dx="25" dy="25" />
          <feColorMatrix result="matrixOut" in="offOut" type="matrix" 
                         values="0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0" />
          <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="9" />
          <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
        </filter>
      </defs>
      <rect width="150" height="150" stroke="purple" stroke-width="5" fill="lightblue" 
            filter="url(#filter)" /> 
       Sorry, your browser doesn't support inline SVG.
    </svg>
  </body>
</html>

Pratique

Que apprend l'article 'Ombres portées SVG' sur W3Docs ?

Trouvez-vous cela utile?

Aperçu dual-run — comparez avec les routes Symfony en production.