Je voudrais pouvoir définir la largeur de trait d'un élément SVG pour qu'elle soit "consciente des pixels", c'est-à-dire toujours 1px de large quelles que soient les transformations de mise à l'échelle actuelles appliquées. Je suis conscient que cela peut être impossible, car le but de SVG est d'être indépendant des pixels.
Le contexte suit:
J'ai un élément SVG avec son jeu d'attributs viewBox et preserveAspectRatio. Ça ressemble à quelque chose comme ça
<svg version="1.1" baseProfile="full"
viewBox="-100 -100 200 200" preserveAspectRatio="xMidYMid meet"
xmlns="http://www.w3.org/2000/svg" >
</svg>
Cela signifie que lorsque je redimensionne cet élément, les formes réelles à l'intérieur sont mises à l'échelle en conséquence (jusqu'ici tout va bien).
Comme vous pouvez le voir, j'ai configuré la viewBox pour que l'origine soit au centre. Je voudrais dessiner un axe x et un axe y dans cet élément, ce que je fais ainsi:
<line x1="-1000" x2="1000" y1="0" y2="0" />
Encore une fois, cela fonctionne très bien. Dans l'idéal, cependant, cet axe n'aurait toujours qu'une largeur de 1 px. Je n'ai aucun intérêt à ce que les axes deviennent plus gros lorsque je redimensionne l'élément svg parent.
Alors suis-je foutu?
vector-effect
propriété. Est-il possible d'obtenir le même effet quevector-effect: non-scaling-stroke
dans IE11?fill
surnone
et vice versa pour lestroke
), calculez et définissez les transformations appropriées (une pour la partie de remplissage et une pour la partie de trait). Cela va être un peu compliqué à coup sûr, mais ça y est - vous voudrez peut-être aussi demander à Microsoft d'ajouter une prise en charge. En tout cas, je pense que votre question mérite d’être une question à part entière.