1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
---
title: Remplissages et contours
slug: Web/SVG/Tutoriel/Fills_and_Strokes
tags:
- SVG
- 'SVG:Tutoriel'
translation_of: Web/SVG/Tutorial/Fills_and_Strokes
---
<p>{{ PreviousNext("Web/SVG/Tutoriel/Paths", "Web/SVG/Tutoriel/Gradients") }}</p>
<p>Il y a différentes manières de colorer des formes: utiliser différents attributs SVG sur l'objet, utiliser du {{glossary("CSS")}} en ligne, une section CSS ou un fichier CSS externe. La plupart des {{glossary("SVG")}} que vous trouverez sur le Web utilisent du CSS en ligne, mais il y a des avantages et inconvénients pour chaque manière.</p>
<h2 id="Fill_and_Stroke_Attributes" name="Fill_and_Stroke_Attributes">Attributs Fill et Stroke</h2>
<h3 id="Painting" name="Painting">Colorer</h3>
<p>La coloration peut être faite en définissant deux attributs sur l'objet: <code>fill</code> et <code>stroke</code>. <code>Fill</code> définit la couleur de remplissage et <code>stroke</code> définit la couleur de la bordure. Vous pouvez utiliser la même convention de nommage des couleurs que CSS, que ce soit les noms (comme <em>red</em>), les valeurs rgb (comme <em>rgb(255,0,0)</em>), les valeurs hexadécimales, rgba, etc.</p>
<pre class="brush:xml;"><rect x="10" y="10" width="100" height="100"
stroke="blue" fill="purple"
stroke-opacity="0.8" fill-opacity="0.5"/>
</pre>
<p>De plus, vous pouvez spécifier l'opacité de <code>fill</code> et/ou <code>stroke</code>. Celle-ci est contrôlé par les attributs <code>fill-opacity</code> et <code>stroke-opacity</code> respectivement.</p>
<div class="note style-wrap"><strong>Note</strong>: Dans Firefox 3+, les valeurs rgba sont autorisés, ce qui donne le même effet qu'utiliser les attributs d'opacité. En revanche, pour être compatible avec les autres navigateurs, il est souvent préférable de spécifier fill/stoke-opacity séparemment. Si vous spécifiez à la fois une valeur rgba et fill/stoke-opacity, les deux seront appliquées.</div>
<h3 id="Stroke" name="Stroke">Options du contour</h3>
<p>Outre les propriétés de couleur, il existe quelques attributs additionnels pour contrôler la manière dont le contour est dessiné.</p>
<h4 id="stroke-width">stroke-width</h4>
<p>La propriété <code>stroke-width</code> définit la taille du contour. La ligne du contour est centrée autour du remplissage (si le contour vaut 10, 5 pixels du contour chevauchent le remplissage).</p>
<h4 id="stroke-linecap">stroke-linecap</h4>
<p>Le second attribut affectant le contour est la propriété <code>stroke-linecap</code>. Elle contrôle la forme des fins de ligne. Dans l'image ci-dessous, le chemin est dessiné en rose et le contour en noir.</p>
<p><img alt="" class="internal" src="/@api/deki/files/355/=SVG_Stroke_Linecap_Example.png" style="float: right;"></p>
<pre class="brush:html;"><svg width="160" height="140" xmlns="http://www.w3.org/2000/svg" version="1.1">
<line x1="40" x2="120" y1="20" y2="20"
stroke-linecap="butt" stroke="black" stroke-width="20"/>
<line x1="40" x2="120" y1="60" y2="60"
stroke-linecap="square" stroke="black" stroke-width="20"/>
<line x1="40" x2="120" y1="100" y2="100"
stroke-linecap="round" stroke="black" stroke-width="20"/>
</svg></pre>
<p>{{ EmbedLiveSample('stroke-linecap', '220', '150') }}</p>
<p>Il y a trois valeurs possibles pour <code>stroke-linecap</code>:</p>
<ul>
<li><code>butt</code> (valeur par défaut) ferme la ligne avec un bord droit, à 90 degrés à l'endroit où la ligne se termine.</li>
<li><code>square</code> a la même apparence mais termine au delà de la ligne. La distance ajoutée est la moitié de <code>stroke-width</code>.</li>
<li><code>round</code> produit un effet arrondi à la fin du trait. La rayon de cette courbe est également contrôlé par <code>stroke-width</code>.</li>
</ul>
<h4 id="stroke-linejoin">stroke-linejoin</h4>
<p>La propriété <code>stroke-linejoin</code> permet de contrôler la manière de dessiner la liaison entre deux segments de ligne.</p>
<p><img alt="" class="internal" src="/@api/deki/files/356/=SVG_Stroke_Linejoin_Example.png" style="float: right;"></p>
<pre class="brush:html;"><svg width="160" height="280" xmlns="http://www.w3.org/2000/svg" version="1.1">
<polyline points="40 60 80 20 120 60" stroke="black" stroke-width="20"
stroke-linecap="butt" fill="none" stroke-linejoin="miter"/>
<polyline points="40 140 80 100 120 140" stroke="black" stroke-width="20"
stroke-linecap="round" fill="none" stroke-linejoin="round"/>
<polyline points="40 220 80 180 120 220" stroke="black" stroke-width="20"
stroke-linecap="square" fill="none" stroke-linejoin="bevel"/>
</svg></pre>
<p>{{ EmbedLiveSample('stroke-linejoin', '220', '150') }}</p>
<p>Chacune des ces polylignes est composée de deux segments de lignes. La liaison entre les deux est contrôlée par l'attribut <code>stroke-linejoin</code>. Il y a trois valeurs possibles pour cet attribut:</p>
<ul>
<li><code>miter</code> (valeur par défaut) prolonge légèrement la ligne au-delà de sa largeur normale pour créer un coin carré, de telle sorte qu'il n'y ait qu'un seul angle.</li>
<li><code>round</code> crée un coin arrondi.</li>
<li><code>bevel</code> crée un nouvel angle pour faciliter la transition entre les deux segments.</li>
</ul>
<h4 id="stroke-dasharray">stroke-dasharray</h4>
<p>Finalement, vous pouvez également créer des lignes pointillées en spécifiant l'attribut <code>stroke-dasharray</code>.</p>
<p><img alt="" class="internal" src="/@api/deki/files/354/=SVG_Stroke_Dasharray_Example.png" style="float: right;"></p>
<pre class="brush:html;"><svg width="200" height="150" xmlns="http://www.w3.org/2000/svg" version="1.1">
<path d="M 10 75 Q 50 10 100 75 T 190 75" stroke="black"
stroke-linecap="round" stroke-dasharray="5,10,5" fill="none"/>
<path d="M 10 75 L 190 75" stroke="red"
stroke-linecap="round" stroke-width="1" stroke-dasharray="5,5" fill="none"/>
</svg></pre>
<p>{{ EmbedLiveSample('stroke-dasharray', '220', '150') }}</p>
<p>L'attribut <code>stroke-dasharray</code> prend une série de nombres séparés par une virgule en argument. </p>
<div class="note">
<p><strong>Note</strong>: Contrairement aux paths, ces nombres <strong><em>doivent</em></strong> être séparés par des virgules (les espaces sont ignorés).</p>
</div>
<p>Le premier nombre spécifie la distance du trait et le second la distance de l'espace. Dans l'exemple précédent, la ligne rouge commence par un trait de 5 suivit d'un espace de 5 (<code>5,5</code>), motif qui se répète sur le reste de la ligne. Vous pouvez spécifier davantage de nombres pour créer un motif de pointillés plus complexe. Pour la ligne noire on a spécifié trois nombres (<code>5,10,5</code>), ce qui a pour effet d'alterner le motif: (5 trait, 10 espace, 5 trait), (5 espace, 10 trait, 5 espace), etc.</p>
<h4 id="Autres">Autres</h4>
<p>Il existe d'autres propriétés disponibles:</p>
<ul>
<li><code><a href="/fr/docs/Web/SVG/Attribute/fill-rule">fill-rule</a></code>, spécifie la règle de remplissage pour les formes où des chemins se chevauchent.</li>
<li><code><a href="/fr/docs/Web/SVG/Attribute/stroke-miterlimit">stroke-miterlimit</a></code>, détermine à partir de quel angle une liaison de segment de type <code>miter</code> sera affichée en <code>bevel</code>.</li>
<li><code><a href="/fr/docs/Web/SVG/Attribute/stroke-dashoffset">stroke-dashoffset</a></code>, définit à partir d'où commencer les pointilliés sur la ligne.</li>
</ul>
<h2 id="Using_CSS" name="Using_CSS">Utiliser CSS</h2>
<p>En plus de définir des attributs sur des objets, vous pouvez également utiliser CSS pour styliser les remplissages et les contours. Tous les attributs ne peuvent pas être définis via CSS. Ceux qui traitent le remplissage et le contour le sont généralement, <code>fill</code>, <code>stroke</code>, <code>stroke-dasharray</code>, etc... peuvent donc être définis de cette manière. Les attributs tels que <code>width</code>, <code>height</code>, ou les commandes des paths, ne peuvent pas être définis par CSS. Le plus simple est de tester pour découvrir ce qui est disponible et ce qui ne l'est pas.</p>
<div class="note style-wrap"><strong>Note:</strong> La <a class="external" href="http://www.w3.org/TR/SVG/propidx.html" title="http://www.w3.org/TR/SVG/propidx.html">spécification SVG</a> décide strictement entre les attributs qui sont des <em>propriétés</em> et les autres. Les premiers peuvent être modifiés avec CSS, les derniers non.</div>
<h4 id="En_ligne">En ligne</h4>
<p>CSS peut être inséré en ligne avec l'élément via l'attribut <code>style</code>:</p>
<pre class="brush:xml;"> <rect x="10" height="180" y="10" width="180" style="stroke: black; fill: red;"/>
</pre>
<h4 id="Dans_un_section_style">Dans un section style</h4>
<p>Sinon, il peut être déplacé vers une section <code>style</code>. Au lieu de l'insérer dans une section <code><head></code> comme vous le feriez en HTML, on la place dans la zone <a href="/en/SVG/Element/defs" title="en/SVG/Element/defs"><code><defs></code></a> du SVG. <code><defs></code> (abbréviation de definitions) est l'endroit où vous placez les éléments qui n'apparaissent pas dans le SVG directement, mais qui sont utilisés par les autres éléments.</p>
<pre class="brush:xml;"><?xml version="1.0" standalone="no"?>
<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<style type="text/css"><![CDATA[
#MyRect {
stroke: black;
fill: red;
}
]]></style>
</defs>
<rect x="10" height="180" y="10" width="180" id="MyRect"/>
</svg></pre>
<p>Déplacer les styles dans une zone comme ceci peut rendre les choses plus simples pour ajuster les propriétés d'un grand nombre d'éléments. Vous pouvez également utiliser les <strong>pseudo-classes comme hover</strong> pour créer des effets:</p>
<pre class="brush:css;"> #MyRect:hover {
stroke: black;
fill: blue;
}
</pre>
<h4 id="Dans_un_fichier_externe">Dans un fichier externe</h4>
<p>Ou vous pouvez spécifier une feuille de style externe pour vos règles CSS avec la <a class="external" href="http://www.w3.org/TR/xml-stylesheet/" title="http://www.w3.org/TR/xml-stylesheet/">syntaxe XML pour les stylesheets</a>:</p>
<pre class="brush:xml;"><?xml version="1.0" standalone="no"?>
<?xml-stylesheet type="text/css" href="style.css"?>
<svg width="200" height="150" xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect height="10" width="10" id="MyRect"/>
</svg></pre>
<p>où style.css ressemble à ça:</p>
<pre class="brush:css;">#MyRect {
fill: red;
stroke: black;
}</pre>
<p>{{ PreviousNext("Web/SVG/Tutoriel/Paths", "Web/SVG/Tutoriel/Gradients") }}</p>
|