Les éléments 'path' et 'text' et les formes de base peuvent recevoir un remplissage (une peinture de l'intérieur de l'objet) et un liseré (une peinture du contour de l'objet). En termes plus généraux, on peut considérer le remplissage et le liseré comme des opération de peinture.
Certains éléments (i.e., 'path', 'polyline', 'polygon' et 'line') peuvent aussi avoir des symboles marqueurs dessinés à leurs arêtes.
Avec SVG, on peut peindre (i.e., remplir ou donner un liseré) avec :
SVG emploie la notion générale de serveur de peinture. Les serveurs de peinture sont spécifiés en utilisant une référence d'URI sur les propriétés 'fill' ou 'stroke'. Les dégradés et les motifs ne sont que des types de serveur de peinture particuliers.
Les propriétés 'fill' et 'stroke' admettent une valeur de type <peinture>, spécifiée comme suit :
| <peinture>: | none | currentColor | <couleur> [icc-color(<nom>[,<valeur-couleur-icc>]*)] | <uri> [ none | currentColor | <couleur> [icc-color(<nom>[,<valeur-couleur-icc>]*)]] | inherit vf. |
| Valeur : | <peinture> (voir la section La spécification de la peinture) |
| Valeur initiale : | black |
| S'applique à : | toutes les formes et ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
La propriété 'fill' peint l'intérieur de l'élément graphique donné. La surface à peindre consiste en toutes celles à l'intérieur du contour de la forme. Pour la détermination de cet intérieur, tous les sous-tracés sont considérés et l'intérieur se détermine en fonction des règles associées à la valeur courante de la propriété 'fill-rule'. Le contour géométrique sans épaisseur d'une forme est compris dans la surface à peindre.
L'opération de remplissage s'effectue sur les tracés ouverts comme si une commande "closepath" supplémentaire était ajoutée au tracé pour relier le dernier point et le premier point du sous-tracé. Ainsi, les opérations de remplissage s'appliquent aux sous-tracés ouverts des deux élément 'path' (i.e., les sous-tracés sans commande "closepath") et 'polyline'.
.| Valeur : | nonzero | evenodd | inherit vf. |
| Valeur initiale : | nonzero |
| S'applique à : | toutes les formes et ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
La propriété 'fill-rule' indique quel algorithme utiliser pour la détermination des parties du canevas devant être incluses dans la forme. Pour un tracé simple sans intersection, on a une intuition claire de la région « à l'intérieur » ; cependant, pour un tracé plus complexe, quand un tracé se recoupe lui-même ou quand un sous-tracé en englobe un autre, l'interprétation de cet « intérieur » n'est pas si évidente.
La propriété 'fill-rule' offre deux options pour déterminer l'intérieur d'une forme :

Voir cet exemple en SVG (seulement avec navigateur gérant SVG)

Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
(Remarque : les explications ci-dessus ne spécifient pas ce qu'il faut faire si un segment de tracé est coïncident ou tangent avec le rayon. Comme tout rayon peut faire l'affaire, on peut simplement choisir un rayon différent qui ne présente pas de tels inconvénients).
| Valeur : | <valeur-opacité> | inherit vf. |
| Valeur initiale : | 1 |
| S'applique à : | toutes les formes et ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
La propriété'fill-opacity' spécifie l'opacité de l'opération de peinture utilisée pour peindre l'intérieur de l'objet courant. (Voir la section La peinture des contours et du texte).
Les propriétés en relation : 'stroke-opacity' et 'opacity'.
Les propriétés suivantes influent sur le liseré d'un élément.
Dans tous les cas, toutes les propriétés de liseré qui sont affectées par la bi-directionnalité, comme celles ayant trait aux motifs en pointillés, doivent être rendues de manière à ce que les opérations de liseré commencent au même point auquel l'élément graphique commence. Notamment, pour les éléments 'path', le début du tracé est le premier point de la commance "moveto" initiale.
Pour les propriétés de liseré, telle que les motifs en pointillés dont les calculs dépendent de la progression au long du contour de l'élément graphique, les calculs de distance doivent faire appel aux algorithmes standards de distance au long du tracé de l'agent utilisateur SVG.
Quand le liseré est effectué en utilisant un serveur de peinture complexe, tel qu'un dégradé ou un motif, l'opération de liseré doit donner un résultat identique à celui qui aurait été obtenu si la forme géométrique définie par la géométrie de l'élément graphique courant et les propriétés de liseré qui lui sont associées, avait été convertie en un élément 'path' équivalent puis rempli en utilisant le serveur de peinture en question.
| Valeur : | <peinture> (Voir la section La spécification de peinture) |
| Valeur initiale : | none |
| S'applique à : | toutes les formes et ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
La propriété 'stroke' peint suivant le contour de l'élément graphique donné.
Un sous-tracé (voir le chapitre Les tracés) composé d'une seule commande moveto ne reçoit pas de liseré. Un sous-tracé composé d'une commande moveto et d'une commande lineto allant exactement à la même position, ou composé d'une commande moveto et d'une commande closepath, recevront un liseré seulement si la valeur de la propriété 'stroke-linecap' est "round", ce qui produit un cercle ayant pour centre le point en question.
| Valeur : | <longueur> | inherit vf. |
| Valeur initiale : | 1 |
| S'applique à : | toutes les formes et ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | oui |
| Médias : | visuel |
| Animable : | oui |
| Valeur : | butt | round | square | inherit vf. |
| Valeur initiale : | butt |
| S'applique à : | toutes les formes et ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
La propriété 'stroke-linecap' spécifie la forme des extrêmités des sous-tracés ouverts quand ils ont un liseré.

Voir cet exemple en SVG (navigateur gérant SVG et CSS seulement)
| Valeur : | miter | round | bevel | inherit vf. |
| Valeur initiale : | miter |
| S'applique à : | toutes les formes et ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
La propriété 'stroke-linejoin' spécifie la forme des sommets des tracés ou des formes de base quand ils ont un liseré.

Voir cet exemple en SVG (navigateur gérant SVG et CSS seulement)
| Valeur : | <limite-onglet> | inherit vf. |
| Valeur initiale : | 4 |
| S'applique à : | toutes les formes et ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
Quand deux segments de droites se rencontre formant un angle aigu et qu'une jointure de valeur miter a été spécifiée pour la propriété 'stroke-linejoin', la jointure peut s'étendre bien au-delà de l'épaisseur du liseré du tracé. La propriété 'stroke-miterlimit' impose une limite pour le ratio de la longueur de jointure sur la propriété 'stroke-linewidth'. « errata 2002-06-06 »
| Valeur : | none | <motif-tiret> | inherit vf. |
| Valeur initiale : | none |
| S'applique à : | toutes les formes et ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | oui (voir ci-dessous) |
| Médias : | visuel |
| Animable : | oui (non cumulatif) |
La propriété 'stroke-dasharray' contrôle le motif de tirets et de blancs utilisé pour le liseré des tracés. La valeur <motif-tiret> contient un liste de valeurs de <longueur>, séparées par des virgules, qui spécifie les longueurs des tirets et des blancs en alternance. Si on fournit un nombre impair de valeurs, alors la liste des valeurs est répétée jusqu'à produire un nombre pair de valeurs. Ainsi, la valeur stroke-dasharray: 5,3,2 équivaut à stroke-dasharray: 5,3,2,5,3,2.
| Valeur : | <longueur> | inherit vf. |
| Valeur initiale : | 0 |
| S'applique à : | toutes les formes et ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | voir explication |
| Médias : | visuel |
| Animable : | oui |
La propriété 'stroke-dashoffset' spécifie à partir de quelle distance dans le motif de tirets commencer les tirets.
| Valeur : | <valeur-opacité> | inherit vf. |
| Valeur initiale : | 1 |
| S'applique à : | toutes les formes et ceux des éléments à contenu textuel |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
La propriété 'stroke-opacity' spécifie l'opacité de l'opération de peinture pour le liseré de l'objet courant. (Voir la section La peinture des contours et du texte.)
Les propriétés en relation : 'fill-opacity' et 'opacity'.
SVG dispose de deux propriétés, 'display' et 'visibility', pour le contrôle de la visibilité des éléments graphiques ou (dans le cas de 'display') des éléments conteneurs.
Les différences entre ces deux propriétés sont les suivantes :
| Valeur : | inline | block | list-item | run-in | compact | marker | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | none | vf.inherit |
| Valeur initiale : | inline |
| S'applique à : | ceux des éléments graphiques 'svg', 'g', 'switch', 'a', 'foreignObject', (y compris l'élément 'text') et aux sous-éléments de texte (i.e., 'tspan', 'tref', 'altGlyph', 'textPath') |
| Héritée : | non |
| Pourcentages : | sans objet |
| Médias : | tous |
| Animable : | oui |
Une valeur display: none indique que l'élément donné et ses enfants ne seront pas rendus directement(i.e., ceux-ci ne sont pas présents dans l'arbre de rendu). Toute autre valeur que none ou inherit indique que l'élément donné sera rendu par l'agent utilisateur SVG.
La propriété 'display' n'agit que sur le rendu direct d'un élément donné, alors qu'elle n'empêche pas les éléments d'être appelés par d'autres éléments. Par exemple, une valeur display: none sur un élément 'path' empêchera le rendu direct de celui-ci sur le canevas, mais l'élément 'path' peut toujours être appelés par un élément 'textPath' ; en outre, sa géométrie sera utilisée dans un traitement du texte sur un tracé, même si l'élément 'path' a une valeur display: none.
La propriété 'display' affecte également le rendu direct sur des canevas hors-écran, comme cela arrive avec le modèle d'implémentation des masques. Ainsi, un paramétrage display: none sur un enfant d'un élément 'mask' empêchera l'élément enfant en question d'être rendu comme partie du masque. De la même façon; un paramétrage display: none sur un enfant d'un élément 'clipPath' empêchera l'élément enfant en question de contribuer au tracé de rognage.
Les éléments avec display: none n'occupe aucun espace lors des opérations de disposition de texte, ne reçoivent aucun événement et ne contribuent pas aux calculs des boîtes de délimitation et des tracés de rognage.
Exceptés les compléments apportés dans cette spécification, la définition normative se trouve dans la définition CSS2 de la propriété 'display' vf..
| Valeur : | visible | hidden | collapse | inherit vf. |
| Valeur initiale : | visible |
| S'applique à : | ceux des éléments graphiques (y compris l'élément 'text') et aux sous-éléments de texte (i.e., 'tspan', 'tref', 'altGlyph', 'textPath' et 'a') |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
Remarquer que si la valeur de la propriété 'visibility' est hidden pour un élément 'tspan', 'tref' ou 'altGlyph', alors le texte est invisible mais occupe toujours un espace pour les calculs de disposition du texte.
En fonction de la valeur de la propriété 'pointer-events', les éléments graphiques dont la propriété 'visibility' est hidden sont susceptibles de recevoir des événements.
Exceptés les compléments apportés dans cette spécification, la définition normative se trouve dans la définition CSS2 de la propriété 'visibility' vf..
Un marqueur est un symbole qui est attaché à un ou plusieurs sommets d'un élément 'path', 'line', 'polyline' et 'polygon'. On utilise typiquement les marqueurs pour faire des flèches ou des marqueurs multiples. On peut définir une flêche en attachant un marqueur au début ou à la fin des sommets des éléments 'path', 'line' ou 'polyline'. On peut définir des marqueurs multiples en attachant un marqueur à tous les sommets d'un élément 'path', 'line', 'polyline' ou 'polygon'.
On définit le graphique pour un marqueur avec un élément 'marker'. Pour indiquer qu'un élément 'marker' doit être rendu sur les sommets d'un élément 'path', 'line', 'polyline' ou 'polygon', on paramètre une ou plusieurs propriétés de marqueur ('marker', 'marker-start', 'marker-mid' ou 'marker-end') qui appellent l'élément 'marker' en question.
L'exemple Marker dessine un symbole de marqueur triangulaire comme une flêche à la fin d'un tracé.
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="4in" height="2in"
viewBox="0 0 4000 2000"
xmlns="http://www.w3.org/2000/svg">
<defs>
<marker id="Triangle"
viewBox="0 0 10 10" refX="0" refY="5"
markerUnits="strokeWidth"
markerWidth="4" markerHeight="3"
orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
</defs>
<rect x="10" y="10" width="3980" height="1980"
fill="none" stroke="blue" stroke-width="10" />
<desc>Mettre une flèche à la fin d'un tracé.
</desc>
<path d="M 1000 750 L 2000 750 L 2500 1250"
fill="none" stroke="black" stroke-width="100"
marker-end="url(#Triangle)" />
</svg>
![]() |
Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
Les marqueurs peuvent être animés. Les effets animés apparaîtront sur tous les marqueurs courants employés dans le document.
L'élément 'marker' définit le graphique qui doit être utilisé pour le
dessin de flèches ou de marqueurs multiples sur un élément
'path',
'line',
'polyline' ou
'polygon' donné.
<!ENTITY % markerExt "" > <!ELEMENT marker (desc|title|metadata|defs| path|text|rect|circle|ellipse|line|polyline|polygon| use|image|svg|g|view|switch|a|altGlyphDef| script|style|symbol|marker|clipPath|mask| linearGradient|radialGradient|pattern|filter|cursor|font| animate|set|animateMotion|animateColor|animateTransform| color-profile|font-face %ceExt;%markerExt;)* > <!ATTLIST marker %stdAttrs; %langSpaceAttrs; externalResourcesRequired %Boolean; #IMPLIED class %ClassList; #IMPLIED style %StyleSheet; #IMPLIED %PresentationAttributes-All; viewBox %ViewBoxSpec; #IMPLIED preserveAspectRatio %PreserveAspectRatioSpec; 'xMidYMid meet' refX %Coordinate; #IMPLIED refY %Coordinate; #IMPLIED markerUnits (strokeWidth | userSpaceOnUse) #IMPLIED markerWidth %Length; #IMPLIED markerHeight %Length; #IMPLIED orient CDATA #IMPLIED > |
Définitions de l'attribut :
Les marqueurs sont dessinés de manière à ce que leur point de référence (i.e., les attributs refX et refY) soit positionné au sommet donné. En d'autres termes, l'agent utilisateur construit une transformation en translation pour faire que le point (refX et refY) dans le système de coordonnées du contenu du marqueur (après les éventuelles transformations dues aux attributs viewBox et preserveAspectRatio) s'aligne exactement sur le sommet donné.
La feuille de style de l'agent utilisateur établit la valeur de la propriété 'overflow' des éléments 'marker' à hidden, ce qui entraîne la création d'un tracé de rognage rectangulaire sur les limites du carreau du marqueur. À moins que la propriété 'overflow' ne soit surclassée, tous les graphiques dans le marqueur qui dépassent du rectangle du marqueur seront rognés.
Le contenu de l'élément 'marker' est relatif à un nouveau système de coordonnées. L'attribut markerUnits détermine un facteur d'échelle initial pour la transformation des graphiques du marqueur dans le système de coordonnées utilisateur de l'élément appelant. Un jeu supplémentaire de transformations peut intervenir s'il y a un attribut viewBox, auquel cas le système de coordonnées pour le contenu de l'élément 'marker' sera transformé du fait du traitement des attributs viewBox et preserveAspectRatio. S'il n'y a pas d'attribut viewBox, alors la valeur par défaut supposée de l'attribut viewBox prend une origine qui coïncide avec celle de la zone de visualisation et les mêmes largeur et hauteur que celle-ci.
Les propriétés dans l'élément 'marker' héritent des ancêtres de celui-ci ; les propriétés n'héritent pas de l'élément qui appelle l'élément 'marker'.
Les éléments 'marker' ne sont jamais rendus directement ; leur seul usage est d'être appelés en utilisant les propriétés 'marker', 'marker-start', 'marker-end' et 'marker-mid'. La propriété 'display' ne s'applique pas à l'élément 'marker' ; ainsi, les éléments 'marker' ne sont pas rendus directement, même si la propriété 'display' a une valeur autre que none, et sont disponibles au référencement, même si la propriété 'display' de l'élément 'marker' ou l'un de ses ancêtres a une valeur de none.
Les attributs d'événement et les guetteurs d'événement attachés au contenu d'un élément 'marker' ne sont pas traités ; seuls les aspects de rendu des éléments 'marker' sont traités.
La propriété 'marker-start' définit la flèche ou les marqueurs multiples qui seront dessinés au premier sommet de l'élément 'path' ou de la forme de base donnés. La propriété 'marker-end' définit la flèche ou les marqueurs multiples qui seront dessinés au dernier sommet. La propriété 'marker-mid' définit la flèche ou les marqueurs multiples qui seront dessinés à tous les autres sommets (i.e., tous les sommets sauf le premier et le dernier). Remarquer que pour un élément 'path' qui se termine par un sous-tracé fermé, le dernier sommet correspond au sommet initial du sous-tracé en question. Dans ce cas, si la valeur de la propriété 'marker-end' n'est pas none, alors il est possible que deux marqueurs soient rendus à ce sommet. Pour empêcher ceci, on peut spécifier une valeur none pour la propriété 'marker-end'. (Remarquer que les mêmes commentaires s'appliquent aux éléments 'polygon').
| Valeur : | none | inherit vf. | <uri> |
| Valeur initiale : | none |
| S'applique à : | ceux des éléments 'path', 'line', 'polyline' et 'polygon' |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
La propriété 'marker' spécifie le symbole de marqueur qui sera utilisé pour tous les points sur les jeux, la valeur pour tous les sommets de l'élément 'path' ou de la forme de base donnés. C'est un raccourci pour les trois propriétés de marqueur individuelles :
Les marqueurs sont dessinés après que l'objet donné est rempli et liseré.
Pour chaque marqueur dessiné, un nouveau système de coordonnées utilisateur temporaire est établi pour que le marqueur soit correctement positionné et dimensionné, comme suit :
L'effet de rendu d'un marqueur est comme si le contenu de l'élément 'marker' appelé était cloné en profondeur sur un arbre du DOM séparé non exposé, pour chaque instance du marqueur. L'arbre du DOM cloné n'étant pas exposé, le DOM SVG ne montre pas l'instance clonée du marqueur.
Pour les agents utilisateurs qui gèrent le style avec CSS, le clonage en profondeur conceptuel de l'élément 'marker' appelé, en un arbre du DOM non exposé, copie également toutes les valeurs de propriété issues de la cascade CSS [CSS2-CASCADE vf.] ainsi que l'héritage de propriété de l'élément appelé et son contenu. Les sélecteurs CSS2 peuvent s'appliquer aux éléments originaux (i.e., appelés), parce que ceux-ci font partie de la structure formelle du document. Les sélecteurs CSS2 ne peuvent pas s'appliquer (conceptuellement) à l'arbre du DOM cloné, parce que son contenu ne fait pas partie de la structure formelle du document.
Pour illustrer le propos, on répète l'exemple de marqueur montré précédemment :
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="4in" height="2in"
viewBox="0 0 4000 2000"
xmlns="http://www.w3.org/2000/svg">
<defs>
<marker id="Triangle"
viewBox="0 0 10 10" refX="0" refY="5"
markerUnits="strokeWidth"
markerWidth="4" markerHeight="3"
orient="auto">
<path d="M 0 0 L 10 5 L 0 10 z" />
</marker>
</defs>
<rect x="10" y="10" width="3980" height="1980"
fill="none" stroke="blue" stroke-width="10" />
<desc>Mettre une flèche à la fin d'un tracé.
</desc>
<path d="M 1000 750 L 2000 750 L 2500 1250"
fill="none" stroke="black" stroke-width="100"
marker-end="url(#Triangle)" />
</svg>
L'effet de rendu du fichier ci-dessus sera visuellement identique à celui qui suit :
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg width="4in" height="2in"
viewBox="0 0 4000 2000"
xmlns="http://www.w3.org/2000/svg">
<desc>Fichier qui produit le même effet
que pour le fichier exemple de marqueur, mais sans
utiliser de marqueur.
</desc>
<rect x="10" y="10" width="3980" height="1980"
fill="none" stroke="blue" stroke-width="10" />
<!-- Le tracé comme précédemment mais sans les propriétés de marqueur. -->
<path d="M 1000 750 L 2000 750 L 2500 1250"
fill="none" stroke="black" stroke-width="100" />
<!-- La logique suivante simule le dessin d'un marqueur
au sommet final du tracé. -->
<!-- Tout d'abord, bouger l'origine du système de coordonnées utilisateur
pour que celle-ci s'aligne maintenant sur le point final du tracé. -->
<g transform="translate(2500,1250)" >
<!-- Pivoter le système de coordonnées de 45 degrés
car le marqueur indiquait orient="auto" et car le segment final du tracé
va dans une direction de 45 degrés. -->
<g transform="rotate(45)" >
<!-- Changer l'échelle du système de coordonnées pour qu'il corresponde
avec celui indiqué par l'attribut 'markerUnits', qui ici a une valeur
de "strokeWidth". Ainsi, on adapte l'échelle du système de coordonnées
par la valeur courante de la propriété 'stroke-width', qui est 100. -->
<g transform="scale(100)" >
<!-- Effectuer une translation du système de coordonnées de
(-refX*viewBoxToMarkerUnitsScaleX, -refY*viewBoxToMarkerUnitsScaleY)
pour que le point (refX,refY) dans le marqueur s'aligne avec le sommet.
Dans ce cas, on utilise la valeur par défaut de l'attribut 'preserveAspectRatio'
('xMidYMid meet'), ce qui signifie trouver un facteur d'échelle uniforme
(i.e., viewBoxToMarkerUnitsScaleX=viewBoxToMarkerUnitsScaleY), de façon à
ce que la boîte loge entièrement dans la zone de visualisation ('meet')
et soit centrée ('xMidYMid'). Dans ce cas, le facteur d'échelle uniforme
est markerHeight/viewBoxHeight=3/10=.3. Ainsi la translation est de
(-refX*.3,-refY*.3)=(0*.3,-5*.3)=(0,-1.5). -->
<g transform="translate(0,-1.5)" >
<!-- Il y a un tracé de rognage implicite parce que la feuille de
style de l'agent utilisateur indique une valeur de "hidden" pour la
propriété 'overflow' sur les marqueurs. Pour ceci, créer
un tracé de rognage aux limites de la zone de visualisation.
Remarquer qu'ici, la zone de visualisation s'étend de 0.5 unités
à gauche et à droite de la boîte du fait d'un facteur
d'échelle uniforme, de ratios différents pour
markerWidth/viewBoxWidth et markerHeight/viewBoxHeight et de l'alignement
'xMidYMid' -->
<clipPath id="cp1" >
<rect x="-0.5" y="0" width="4" height="3" />
</clipPath>
<g clip-path="url(#cp1)" >
<!-- Adapter l'échelle du système de coordonnées
par le facteur d'échelle uniforme markerHeight/viewBoxHeight=3/10=.3
pour établir un systè de coordonnées en unités
de boîte. -->
<g transform="scale(.3)" >
<!-- Cet élément 'g' porte toutes les valeurs
de propriété issues de la cascade et de l'héritage de
propriété de l'élément 'marker' original.
Dans cet exemple, ni remplissage ni liseré ne sont spécifiés
sur l'élément 'marker' ou l'un de ses ancêtres, ainsi les
valeurs initiale "black" et "none" sont utilisées, respectivement. -->
<g fill="black" stroke="none" >
<!-- Expansion du contenu de l'élément 'marker'. -->
<path d="M 0 0 L 10 5 L 0 10 z" />
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>
Voir cet exemple en SVG (seulement avec navigateur gérant SVG)
L'agent utilisateur SVG effectue des interpolations et des compositions de couleur à diverses étapes du traitement du contenu SVG. Deux propriétés contrôlent l'espace de couleur utilisée pour des catégories particulières d'opérations graphiques : 'color-interpolation' et 'color-interpolation-filters'. Le tableau suivant montre quelle propriété s'applique à une opération graphique donnée :
| Opération graphique | Propriété correspondante |
|---|---|
| l'interpolation entre les valeurs limites d'un dégradé (voir la section Les dégradés) | 'color-interpolation' |
| l'interpolation de couleur lors d'une animation de couleur (voir l'élément 'animateColor') | 'color-interpolation' |
| la composition alpha des éléments graphiques avec l'arrière-plan courant | 'color-interpolation' |
| les effets de filtre | 'color-interpolation-filters' |
Les deux propriétés se répartissent en opérations de couleur qui surviennent dans l'espace de couleur sRGB ou dans un espace de couleur RGB linéarisé (linéaire dans les faibles énergies).
Les formules de conversion entre l'espace de couleur sRGB (i.e., non linéaire avec une courbe gamma 2.2) et l'espace de couleur RGB linéarisé (i.e., valeurs de couleur exprimées comme valeurs sRGB tri-stimulées sans courbe gamma) peuvent être trouvées dans [SRGB]. Pour illustrer le propos, la formule suivante montre la conversion de l'espace sRGB vers un espace RGB linéarisé :
R[sRGB] = R[sRGB-8bit] / 255 G[sRGB] = G[sRGB-8bit] / 255 B[sRGB] = B[sRGB-8bit] / 255 If R[sRGB], G[sRGB], B[sRGB] <= 0.04045 R[linearRGB] = R[sRGB] / 12.92 G[linearRGB] = G[sRGB] / 12.92 B[linearRGB] = B[sRGB] / 12.92 else if R[sRGB], G[sRGB], B[sRGB] > 0.04045 R[linearRGB] = ((R[sRGB] + 0.055) / 1.055) ^ 2.4 G[linearRGB] = ((G[sRGB] + 0.055) / 1.055) ^ 2.4 B[linearRGB] = ((B[sRGB] + 0.055) / 1.055) ^ 2.4 R[linearRGB-8bit] = R[linearRGB] * 255 G[linearRGB-8bit] = G[linearRGB] * 255 B[linearRGB-8bit] = B[linearRGB] * 255
Les valeurs de couleur hors-espace, si l'agent utilisateur le gère, sont également converties à l'aide de ces formules. (Voir Le rattachement de valeurs à une plage de valeurs restreinte).
| Valeur : | auto | sRGB | linearRGB | inherit vf. |
| Valeur initiale : | sRGB |
| S'applique à : | ceux des éléments conteneurs, des éléments graphiques et l'élément 'animateColor' |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
La propriété 'color-interpolation' spécifie l'espace de couleur pour les interpolations de dégradé, les animations de couleur et la composition alpha.
Quand un élément enfant est mélangé dans un arrière-plan, la valeur de la propriété 'color-interpolation' sur l'enfant détermine le type du mélange, et non celle de la propriété 'color-interpolation' sur le parent. Quant aux dégradés, qui utilisent l'attribut xlink:href pour référencer un autre dégradé, ils utilisent la valeur de la propriété 'color-interpolation' de l'élément dégradé qui est directement appelé par les propriétés 'fill' ou 'stroke'. Lors d'une animation de couleurs, l'interpolation de couleur s'effectue en fonction de la valeur de la propriété 'color-interpolation' sur l'élément qui est en cours d'animation.
| Valeur : | auto | sRGB | linearRGB | inherit vf. |
| Valeur initiale : | linearRGB |
| S'applique à : | primitives de filtre |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
La propriété 'color-interpolation-filters' spécifie l'espace de couleur pour les opérations d'imagerie effectuées via des effets de filtre.
Remarquer que la propriété 'color-interpolation-filters' a une valeur initiale qui diffère de celle de la propriété 'color-interpolation'. La propriété 'color-interpolation-filters' a pour valeur initiale linearRGB, alors que 'color-interpolation' a pour valeur initiale sRGB. Ainsi, par défaut, les opérations d'effets de filtre surviennent dans l'espace de couleur RGB linéarisé, alors que toutes les autres interpolations de couleur surviennent dans l'espace de couleur sRGB.
Le créateur de contenu SVG peut vouloir signifier à l'implémentation comment arriver à des compromis entre vitesse de rendu et qualité lors d'une interpolation de couleur et d'une composition. La propriété 'color-rendering' indique à l'agent utilisateur SVG comment optimiser ses opérations d'interpolation de couleur et de composition.
La propriété 'color-rendering' a préséance sur la propriété 'color-interpolation-filters'. Par exemple, supposons les spécifications 'color-rendering:optimizeSpeed' et 'color-interpolation-filters:linearRGB'. Dans ce cas, l'agent utilisateur SVG devrait effectuer les opérations de couleur en favorisant la performance, ce qui peut vouloir dire sacrifier la précision de l'interpolation de couleur telle que spécifiée par 'color-interpolation-filters:linearRGB'.
| Valeur : | auto | optimizeSpeed | optimizeQuality | inherit vf. |
| Valeur initiale : | auto |
| S'applique à : | ceux des éléments conteneurs, des éléments graphiques et l'élément 'animateColor' |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
Le créateur de contenu SVG peut vouloir signifier à l'implémentation les compromis à faire quand elle rend des éléments graphiques vectoriels, tels que les éléments 'path', et desformes de base, tels que les cercles et les rectangles. La propriété 'shape-rendering' offre cette possibilité.
| Valeur : | auto | optimizeSpeed | crispEdges | geometricPrecision | inherit vf. |
| Valeur initiale : | auto |
| S'applique à : | shapes |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
Le créateur de contenu SVG peut vouloir signifier à l'implémentation les compromis à faire pour le rendu du texte. La propriété 'text-rendering' offre cette possibilité.
| Valeur : | auto | optimizeSpeed | optimizeLegibility | geometricPrecision | inherit vf. |
| Valeur initiale : | auto |
| S'applique à : | ceux des éléments 'text' |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
Le créateur de contenu SVG peut vouloir signifier à l'implémentation de faire des compromis entre vitesse et qualité lors du traitement d'une image. La propriété 'image-rendering' donne à l'agent utilisateur SVG des indications pour l'optimisation du rendu d'une image.
| Valeur : | auto | optimizeSpeed | optimizeQuality | inherit vf. |
| Valeur initiale : | auto |
| S'applique à : | images |
| Héritée : | oui |
| Pourcentages : | sans objet |
| Médias : | visuel |
| Animable : | oui |
Dans tous les cas, le re-échantillonnage doit avoir lieu dans un espace de couleur en couleurs véritables (par exemple, 24-bit), même si les données originales et/ou l'appareil cible sont en couleurs indexées.
Les valeurs de toutes les propriétés de peintures décrites dans ce chapitre peuvent s'hériter du parent d'un objet donné. Cependant, une peinture intervient toujours individuellement sur chacun des éléments graphiques, jamais au niveau de l'