Vincent De Oliveira · @iamvdo
Pourquoi SVG ?
Scalable Vector Graphics
HD ready
XML = facile à modifier, accessible
Objectif Comprendre (et modifier) ce qui sort de Illustrator, de Sketch ou autre
viewBox
absurdes, matrices de transformations, etc.Dans tous les cas Utiliser un outil d’optimisation : SVGOMG (SVGO), workflow, etc.
viewBox
viewBox
viewBox
preserveAspectRatio
)Indispensable !
Et notamment pour IE
C’est plus facile si le viewBox
est carré.
Et si le viewport l’est aussi !
width
et height
width
et height
Beaucoup déconseille, moi je conseille. #avisContraire
viewBox
, SVG responsive sans CSSwidth
et height
Fonctionne ainsi grâce à la cascade SVG
Les attributs de présentation sont toujours surclassés par CSS
width
, height
, fill
, stroke
, etc.)<?xml-stylesheet type="text/css" href="styles.css"?>
<style type="text/css">…</style>
<style type="text/css">…</style>
style="…"
Cache | Req. HTTP | CSS embed | CSS anim | CSS interaction | JS embed | |
---|---|---|---|---|---|---|
<img> |
✓ | ✓ | ✓ | ✓ | X | X |
background-image |
✓ | ✓ | ✓ | ✓ | X | X |
inline (HTML) | X | X | ✓ | ✓ | ✓ | ✓ |
<use> interne |
X | X | ✓ | ~ | ~ | ~ |
<use> externe |
✓ | ✓ | ~ | ~ | ~ | ~ |
<object> , <embed> , <iframe> |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Ça dépend™
z-index
background
= fill
, border
= stroke
, etc.Pas plein de trucs cools en fait !
Mais c’est pas grave
Éditeur graphique : dessinez !
Sinon : transform
, x
/y
, viewBox
<svg viewBox="0 0 100 100">
<rect width="50" height="50" x="50%" y="50%" transform="translate(-25 -25)" />
</svg>
<!-- SVG imbriqués -->
<svg viewBox="0 0 100 100">
<svg viewBox="-25 -25 100 100">
<rect width="50" height="50" />
</svg>
</svg>
<!-- identique mais avec symbol+use -->
<svg viewBox="0 0 100 100">
<symbol id="symbol" viewBox="-25 -25 100 100">
<rect width="50" height="50" />
</symbol>
<use xlink:href="#symbol" />
</svg>
<text>
transform-origin: 50% 50%
(de l’élément)transform-origin: 0 0
(du canvas)transform-box: border-box | fill-box | view-box
transform-box: border-box | fill-box | view-box
Pas de support du tout dans IE/Edge
#merciIE
Utilisez les transformations SVG (mais pas de pourcentage en SVG)
ou
Utilisez JavaScript (GSAP, SnapSVG, etc.)
Good ol’ days
Créez une image SVG
background-image
background-position
icons.svg
Fonctionne partout IE9+ !
C’est du SVG, mais c’est flou ‽
Bordure floue Non multiple de 2, etc. |
Décaler d’½ pixel votre forme
|
mais pas de support IE/Edge |
|||
Bordure x2 + mais crée bordure interne |
Bordure x2 + mais crée bordure externe mais pas de support IE/Edge |
stroke-alignment
prévu pour SVG2
(pas de support actuellement)
=viewBox |
=viewport |
Avec vector-effect: non-scaling-stroke
(mais pas de support IE/Edge)
Rien à faire, normalement
Mais quand même !
background-image: 100%
, cover
/contain
ou fixes<img>
: width: 100%
<object>
/<embed>
: width: 100%
<iframe>
: Padding Hackwidth
et height
width: xx
, height: 0
padding
en % = ratio hauteur/largeur du SVGposition: relative
<iframe>
)
position: absolute
top: 0
, left: 0
, width: 100%
, height: 100%
Vincent De Oliveira · @iamvdo