Me gustaría poder establecer el ancho del trazo en un elemento SVG para que sea "consciente de los píxeles", que siempre tenga 1 px de ancho independientemente de las transformaciones de escala actuales aplicadas. Soy consciente de que esto puede ser imposible, ya que el objetivo de SVG es ser independiente de los píxeles.
El contexto sigue:
Tengo un elemento SVG con sus atributos viewBox y preserveAspectRatio establecidos. Se parece a esto
<svg version="1.1" baseProfile="full"
viewBox="-100 -100 200 200" preserveAspectRatio="xMidYMid meet"
xmlns="http://www.w3.org/2000/svg" >
</svg>
Esto significa que cuando escalo ese elemento, las formas reales dentro de él escalan en consecuencia (hasta ahora todo bien).
Como puede ver, he configurado el viewBox para que el origen esté en el centro. Me gustaría dibujar un eje xy un eje y dentro de ese elemento, lo que hago así:
<line x1="-1000" x2="1000" y1="0" y2="0" />
Nuevamente, esto funciona bien. Idealmente, sin embargo, este eje siempre tendría solo 1 px de ancho. No tengo interés en que los ejes se vuelvan más gruesos cuando escalo el elemento svg principal.
Entonces, ¿estoy jodido?
fuente
vector-effect
propiedad. ¿Es posible lograr el mismo efecto quevector-effect: non-scaling-stroke
en IE11?fill
anone
y viceversa parastroke
), calcula y configura las transformaciones apropiadas (una para la parte de relleno y otra para la parte de trazo). Seguro que va a ser un poco complicado, pero ahí está: es posible que también desee pedirle a Microsoft que agregue soporte para él. En cualquier caso, creo que su pregunta merece ser una pregunta propia.