Elemento o etiqueta SVG

La etiqueta principal de un archivo vectorial SVG


Un archivo SVG es una imagen vectorial que en su interior contiene código SVG. Un tipo de código muy similar a HTML o XML, orientado a formas vectoriales. Su elemento principal es la etiqueta <svg>.

Elemento SVG

La etiqueta <svg> es el elemento padre de cualquier imagen vectorial SVG que estemos creando, ya que todos los elementos deben estar en su interior. Es el equivalente a la etiqueta <html> respecto al lenguaje HTML.

En algunos casos, es posible que tengamos algunas etiquetas declaradas antes de <svg>, pero sería solo en casos muy especiales como el de <?xml>, una etiqueta para declarar la versión y codificación del archivo XML ya que, al fin y al cabo, tanto un documento HTML como un documento SVG son tipos derivados de un fichero .xml:

<?xml version="1.0" encoding="utf-8" ?>
<svg xmlns="http://www.w3.org/2000/svg">
  <path d="M0,0 V50 L50,0 Z" fill="indigo" />
</svg>

Sin embargo, esa línea no es obligatoria, y generalmente, un archivo .svg no necesita declararla. Caso contrario es el del elemento <svg> que si es necesario para nuestro documento, como vemos en el ejemplo anterior. Este elemento permite declarar ciertos detalles principales de nuestro gráfico .svg.

Veamos cuales son sus atributos más importantes:

AtributoDescripción
xmlnsSignifica XML Namespace. Indica la URL con la versión específica de SVG que se va a usar.
widthIndica el tamaño de ancho en o del gráfico SVG. Se puede indicar en CSS.
heightIndica el tamaño de alto en o del gráfico SVG. Se puede indicar en CSS.
viewBoxLa región visible de la imagen vectorial SVG. La sintaxis es

Namespace (atributo xmlns)

El atributo xmlns procede de xml namespace y permite indicar una URL donde se encuentra información sobre la especificación que se va a utilizar de SVG. Lo más habitual, suele ser indicar la URL http://www.w3.org/2000/svg:

<svg xmlns="http://www.w3.org/2000/svg">
  <path d="M0,0 V50 L50,0 Z" fill="indigo" />
</svg>

No obstante, en algunos casos se puede omitir y depende del navegador o de la herramienta que lee el fichero .svg que lo lea correctamente o que de un error al no saber interpretarlo.

Crop (atributo viewBox)

El atributo viewBox se utiliza para determinar las dimensiones del lienzo de la imagen SVG. Observa el ejemplo anterior, donde he añadido el atributo style para darle estilos CSS de color de fondo al elemento <svg> y determinar visualmente cuál es el espacio que está ocupando por defecto:

<svg xmlns="http://www.w3.org/2000/svg" style="background: #ccc">
  <path d="M0,0 V50 L50,0 Z" fill="indigo" />
</svg>

Esto también se puede hacer de la forma tradicional, aplicando CSS a través del elemento <style> al documento SVG en este caso. Si lo comprobamos, el elemento tiene por defecto unas dimensiones de 300x150 píxels. Sin embargo, podemos cambiar estas dimensiones predefinidas, simplemente dándole un tamaño a través de las propiedades width y height en el elemento <svg> de la imagen:

<svg xmlns="http://www.w3.org/2000/svg">
  <style>
    svg {
      background: #aaa;
      width: 500px;
    }
    path {
      fill: #002;
    }
  </style>
  <path d="M0,0 V50 L50,0 Z" fill="indigo" />
</svg>

Observa que el tamaño de ancho ha cambiado de 300 a 500, sin embargo, la ilustración de su interior sigue manteniendo la misma proporción. Cambiamos el tamaño del lienzo, pero no la ilustración interna.

Veamos ahora los siguientes cambios sobre la imagen, donde aplicaremos un width y height sobre el elemento <svg> principal, y luego un viewBox para definir el tamaño del lienzo:

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 150 75">
  <style>
    svg {
      background: #aaa;
      width: 300px;
      height: 150px;
    }
    path {
      fill: indigo;
    }
  </style>
  <path d="M0,0 V50 L50,0 Z" />
</svg>

Ten en cuenta que le hemos asignado un tamaño de 300x150 (su tamaño inicial) a través de las propiedades width y height, y luego, al margen, hemos aplicado los valores 0 0 150 75 (la mitad) al viewBox. Con esto, hemos reducido las proporciones indicadas del lienzo, y por lo tanto, la ilustración interna aparece más grande, como si tuviera aplicado un zoom.

Dimensiones (width / height)

Aunque no lo hayamos hecho en los ejemplos anteriores, los atributos width y height que usamos en el CSS, podemos establecerlos como atributos de la etiqueta <svg>, aplicando y funcionando de la misma forma.

Ten en cuenta que mientras el atributo viewBox lo utilizamos para darle unas dimensiones de un lienzo, los atributos width y height nos permiten ampliar o reducir este lienzo sin cambiar sus proporciones.

Otros atributos

Veamos algunos de los otros atributos que suelen usarse para casos particulares, aunque no suelen ser los prioritarios a la hora de crear el dibujo SVG.

AtributoDescripción
preserveAspectRatioIndica como debe mostrarse la proporción de aspecto de la imagen.
xLa posición en el eje X del gráfico vectorial SVG. No suele tener efecto en la mayoría de los casos.
yLa posición en el eje Y del gráfico vectorial SVG. No suele tener efecto en la mayoría de los casos.

El atributo preserveAspectRatio

El atributo preserveAspectRatio es un atributo de SVG que se puede indicar para determinar como se mantendrá la proporción de aspecto de un lienzo de SVG con un viewBox definido. Para utilizar este atributo, hay que indicar un valor para el tipo de alineación y, de forma opcional, un segundo parámetro que determina el tipo de recorte:

FormatoDescripción
preserveAspectRatio: align-type [meet | slice]Establece como se mantendrá el ratio de aspecto.

Así pues, para el valor de tipo de alineación habría que escoger un valor siguiendo este patrón: x___Y___. Ahora, para cada "hueco", habría que escoger una de los siguientes valores: Min, Mid o Max. De esta forma, xMinYMax alinea al mínimo el eje X y al máximo el eje Y, y xMidYMin alinea a la mitad el eje X y al mínimo el eje Y. En el caso de no querer forzar a realizar ningun escalado, utilizaríamos none, el valor por defecto.

Luego, el segundo parámetro opcional, sería uno de los siguientes (de no usarlo, se utilizará el valor por defecto: meet):

ValorDescripción
meetEl viewBox es completamente visible dentro del viewport. Se escala hasta hacerlo más grande.
sliceEl viewport es completamente cubierto por el viewBox. Se escala hasta hacerlo más pequeño.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev