--- 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"><svg viewBox="-10 -10 220 120" xmlns="http://www.w3.org/2000/svg"> <!-- Valeur par défaut pour fill-rule --> <polygon fill-rule="nonzero" stroke="red" points="50,0 21,90 98,35 2,35 79,90"/> <!-- 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. --> <polygon fill-rule="evenodd" stroke="red" points="150,0 121,90 198,35 102,35 179,90"/> </svg></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"><svg viewBox="-10 -10 320 120" xmlns="http://www.w3.org/2000/svg"> <!-- Effet de la règle de remplissage sur les segments qui se croisent --> <polygon fill-rule="nonzero" stroke="red" points="50,0 21,90 98,35 2,35 79,90"/> <!-- Effet sur une forme dans une forme lorsque le segment va dans la même direction (vers la droite) --> <path fill-rule="nonzero" stroke="red" d="M110,0 h90 v90 h-90 z M130,20 h50 v50 h-50 z"/> <!-- Effet sur une forme dans une forme lorsque le segment va dans la direction opposée (vers la gauche contre vers la droite) --> <path fill-rule="nonzero" stroke="red" d="M210,0 h90 v90 h-90 z M230,20 v50 h50 v-50 z"/> </svg></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"><svg viewBox="-10 -10 320 120" xmlns="http://www.w3.org/2000/svg"> <!-- Effet de la règle de remplissage sur les segments qui se croisent --> <polygon fill-rule="evenodd" stroke="red" points="50,0 21,90 98,35 2,35 79,90"/> <!-- Effet sur une forme dans une forme lorsque le segment va dans la même direction (vers la droite) --> <path fill-rule="evenodd" stroke="red" d="M110,0 h90 v90 h-90 z M130,20 h50 v50 h-50 z"/> <!-- Effet sur une forme dans une forme lorsque le segment va dans la direction opposée (vers la gauche contre vers la droite) --> <path fill-rule="evenodd" stroke="red" d="M210,0 h90 v90 h-90 z M230,20 v50 h50 v-50 z"/> </svg></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>