---
title: fill-rule
slug: Web/SVG/Attribute/fill-rule
tags:
  - SVG
  - SVG Attribute
translation_of: Web/SVG/Attribute/fill-rule
---
<div>{{SVGRef}}</div>

<p>L'attribut <strong><code>fill-rule</code></strong> définit l'algorithme à utiliser pour déterminer les parties qui sont considérées <em>à l'intérieur</em> de la forme.</p>

<p class="note"><strong>Note:</strong> <code>fill-rule</code> est un attribut de présentation et peut donc être utilisé comme propriété CSS.</p>

<p>Cet attribut peut être appliqué à n'importe quel élément mais n'aura d'effet que sur les éléments suivants: {{SVGElement('altGlyph')}}, {{SVGElement('path')}}, {{SVGElement('polygon')}}, {{SVGElement('polyline')}}, {{SVGElement('text')}}, {{SVGElement('textPath')}}, {{SVGElement('tref')}}, et {{SVGElement('tspan')}}</p>

<div id="topExample">
<div class="hidden">
<pre class="brush: css">html,body,svg { height:100% }</pre>
</div>

<pre class="brush: html">&lt;svg viewBox="-10 -10 220 120" xmlns="http://www.w3.org/2000/svg"&gt;
  &lt;!-- Valeur par défaut pour fill-rule --&gt;
  &lt;polygon fill-rule="nonzero" stroke="red"
   points="50,0 21,90 98,35 2,35 79,90"/&gt;

  &lt;!--
  Les points au centre de la forme ont 2
  segments (matérialisés par le trait rouge)
  Avec la règle evenodd, ils sont considérés en
  dehors de la forme, et l'intérieur de l'étoile
  est donc vide.
  --&gt;
  &lt;polygon fill-rule="evenodd" stroke="red"
   points="150,0 121,90 198,35 102,35 179,90"/&gt;
&lt;/svg&gt;</pre>
</div>

<p>{{EmbedLiveSample('topExample', '100%', 200)}}</p>

<h2 id="Usage">Usage</h2>

<table class="standard-table">
 <tbody>
  <tr>
   <th scope="row">Valeur</th>
   <td><code>nonzero</code> | <code>evenodd</code></td>
  </tr>
  <tr>
   <th scope="row">Valeur par défaut</th>
   <td><code>nonzero</code></td>
  </tr>
  <tr>
   <th scope="row">Animation</th>
   <td>Yes</td>
  </tr>
 </tbody>
</table>

<p>L'attribut <code>fill-rule</code> peut prendre deux valeurs:</p>

<h3 id="nonzero">nonzero</h3>

<p>La valeur <code>nonzero</code> détermine si un point est à l'intérieur d'une forme en dessinant un rayon à partir de ce point vers l'infini dans toutes les directions, puis examine les endroits où un segment de la forme traverse le rayon.</p>

<p>À chaque fois qu'un segment traverse le rayon de gauche à droite, on ajoute un. À chaque fois qu'un segment traverse le rayon de droite à gauche, on soustrait un. Si au final, le compte est égal à zéro, le point est l'extérieur. Dans le cas contraire, il est à l'intérieur.</p>

<h4 id="Exemple">Exemple</h4>

<div class="hidden">
<pre class="brush: css">html,body,svg { height:100% }</pre>
</div>

<pre class="brush: html">&lt;svg viewBox="-10 -10 320 120" xmlns="http://www.w3.org/2000/svg"&gt;
  &lt;!-- Effet de la règle de remplissage sur les segments qui se croisent --&gt;
  &lt;polygon fill-rule="nonzero" stroke="red"
           points="50,0 21,90 98,35 2,35 79,90"/&gt;

  &lt;!--
  Effet sur une forme dans une forme
  lorsque le segment va dans la même direction
  (vers la droite)
  --&gt;
  &lt;path fill-rule="nonzero" stroke="red"
        d="M110,0  h90 v90 h-90 z
           M130,20 h50 v50 h-50 z"/&gt;

  &lt;!--
  Effet sur une forme dans une forme
  lorsque le segment va dans la direction opposée
  (vers la gauche contre vers la droite)
  --&gt;
  &lt;path fill-rule="nonzero" stroke="red"
        d="M210,0  h90 v90 h-90 z
           M230,20 v50 h50 v-50 z"/&gt;
&lt;/svg&gt;</pre>

<p>{{EmbedLiveSample('nonzero', '100%', 200)}}</p>

<h3 id="evenodd">evenodd</h3>

<p>La valeur <code>evenodd</code> détermine si un point est à l'intérieur d'une forme en dessinant un rayon de à partir de ce point vers l'infini dans toutes les directions, et compte le nombre de segments de la forme qui traversent ce rayon. Si ce nombre est impair (<em>odd</em> en anglais), alors le point est à l'intérieur. Si le nombre est pair (<em>even</em> en anglais), alors le point est à l'extérieur.</p>

<h4 id="Exemple_2">Exemple</h4>

<div class="hidden">
<pre class="brush: css">html,body,svg { height:100% }</pre>
</div>

<pre class="brush: html">&lt;svg viewBox="-10 -10 320 120" xmlns="http://www.w3.org/2000/svg"&gt;
  &lt;!-- Effet de la règle de remplissage sur les segments qui se croisent --&gt;
  &lt;polygon fill-rule="evenodd" stroke="red"
           points="50,0 21,90 98,35 2,35 79,90"/&gt;

  &lt;!--
  Effet sur une forme dans une forme
  lorsque le segment va dans la même direction
  (vers la droite)
  --&gt;
  &lt;path fill-rule="evenodd" stroke="red"
        d="M110,0  h90 v90 h-90 z
           M130,20 h50 v50 h-50 z"/&gt;

  &lt;!--
  Effet sur une forme dans une forme
  lorsque le segment va dans la direction opposée
  (vers la gauche contre vers la droite)
  --&gt;
  &lt;path fill-rule="evenodd" stroke="red"
        d="M210,0  h90 v90 h-90 z
           M230,20 v50 h50 v-50 z"/&gt;
&lt;/svg&gt;</pre>

<p>{{EmbedLiveSample('evenodd', '100%', 200)}}</p>

<h2 id="Browser_Compatibility" name="Browser_Compatibility">Compatibilité des navigateurs</h2>

<p class="hidden">Le tableau de compatibilité de cette page a été généré à partir de données structurées. Si vous souhaitez contribuer à ces données, n'hésitez pas à envoyer une <em>pull request</em> sur <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>.</p>

<p>{{Compat("svg.attributes.presentation.fill-rule")}}</p>

<h2 id="Spécification">Spécification</h2>

<table class="standard-table">
 <thead>
  <tr>
   <th scope="col">Spécification</th>
   <th scope="col">Statut</th>
   <th scope="col">Commentaire</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>{{SpecName("SVG2", "painting.html#FillRuleProperty", "fill-rule")}}</td>
   <td>{{Spec2("SVG2")}}</td>
   <td>Définition pour les formes et le texte</td>
  </tr>
  <tr>
   <td>{{SpecName("SVG1.1", "painting.html#FillRuleProperty", "fill-rule")}}</td>
   <td>{{Spec2("SVG1.1")}}</td>
   <td>Définition initiale pour les formes et le texte</td>
  </tr>
 </tbody>
</table>

<p> </p>