Gradiente Lineal
Para definir gradientes lineales se utiliza la etiqueta <linearGradient>. Definiremos la etiqueta <linearGradient> de la siguiente forma:
<linearGradient id="identificativo" gradientUnits="userSpaceOnUse|objectBoundingBox" gradientTransform="lista_de_transformacion" x1="coordenada" y1="coordenada" x2="coordenada" y2="coordenada" spreadMethod = "pad|reflect|repeat" xlink:href="uri">
Como
es una definición grande, veamos los atributos más detenidamente:
- id = "identificativo", nos permite identificar el gradiente para así poderlo utilizar sobre elementos básicos.
- xlink:href = "uri", nos permite hacer referencia a otros atributos definidos para un gradiente lineal y que estén definidos dentro de un documento svg. Dichos atributos serán heredados.
Sistema de Coordenadas
- gradientUnits = "userSpaceOnUse | objectBoundingBox", puede tomar uno de los dos valores. En el caso de que sea userSpaceOnUse, las coordenadas que se definirán a posteriori tomarán como punto de partida, todo el sistema definido por el usuario. Así, x1,y1 será la coordenada más a la izquierda de todos el lienzo de objetos que tengamos definidos. Si el valor es objectBoundingBox, el sistema de coordenadas es definido en relación con el interior del objeto creado. Así, las coordenadas x1,y1 marcarán el lado izquierdo del elemento sobre el que definimos el gradiente. Por defecto es objectBoundingBox.
- gradientTransform = "lista_de_transformación", contiene una lista de transformación para poder transformar el sistema de coordenadas establecido por el usuario.
- x1 = "coordenada", la coordenada de inicio en el eje X. En el caso de no ser especificado toma un valor de 0.
- y1 = "coordenada", la coordenada de inicio en el eje Y. En el caso de no ser especificado toma un valor de 0.
- x2 = "coordenada", la coordenada final en el eje X. En el caso de no ser especificado toma un valor de 0.
- y2 = "coordenada", la coordenada final en el eje Y. En el caso de no ser especificado toma un valor de 0.
Métodos de relleno
- spreadMethod = "pad | reflect | repeat",
nos permite indicar que sucede si el vector del gradiente empieza y termina
dentro de la figura sobre la que se le aplica.
- pad, rellena la figura con el color del final.
- reflect, vuelve a empezar la serie de transformación de fin a inicio. Hace el efecto de un espejo. De ahí lo de reflect ¿no?
- repeat, vuelve a empezar la serie de transformación de inicio a fin.

Direcciones del gradiente
Jugando con los valores de las coordenadas podemos conseguir diferentes efectos a la hora de rellenar las figuras con un gradiente.
- Horizontal, las coordenadas y1 e y2 deben de ser iguales, mientras que las coordenadas x1 y x2 deben de ser diferentes.
- Vertical, las coordenadas x1 y x2 deben de ser iguales, mientras que las coordenadas y1 e y2 deben de ser diferentes.
- Angular, tanto las coordenadas x1 y x2 como y1 e y2 deben de ser diferentes entre sí.
Ejemplo de gradiente lineal
Veamos como sería un ejemplo de gradiente:
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
<linearGradient id="rojo_naranja" x1="0%" y1="0%"
x2="50%" y2="0%" spreadMethod="reflect">
<stop offset="20%" stop-color="#f00"/>
<stop offset="80%" stop-color="#ff0"/>
</linearGradient>
</defs>
<circle cx="600" cy="200" r="100" style="fill:url(#rojo_naranja)"
stroke="#000" stroke-width="2"/>
</svg>