W3docs

Propiedad CSS stroke-dashoffset

Cómo usar la propiedad CSS stroke-dashoffset para especificar dónde debe comenzar el trazo discontinuo. Valores, ejemplos y casos de uso.

La propiedad stroke-dashoffset define la distancia a lo largo de una ruta SVG en la que comienza el patrón de guiones del trazo. Funciona en conjunto con stroke-dasharray, que establece las longitudes de los guiones y los espacios. stroke-dasharray determina cómo es el patrón; stroke-dashoffset determina en qué punto de la ruta comienza ese patrón.

Esta página explica cómo el desplazamiento mueve el patrón de guiones, por qué animarlo produce el popular efecto de "línea que se dibuja sola" y los valores que acepta.

stroke-dashoffset se puede establecer de dos formas: como atributo de presentación en el elemento SVG (stroke-dashoffset="5") o como propiedad CSS (stroke-dashoffset: 5;). Cuando ambas están presentes, la regla CSS tiene prioridad sobre el atributo de presentación, y una declaración style en línea tiene prioridad sobre ambas.

Cómo funciona el desplazamiento

Imagina el patrón de guiones como una regla colocada a lo largo de la ruta. stroke-dashoffset desliza esa regla hacia adelante o hacia atrás antes de pintar la ruta:

  • Un valor positivo desplaza el patrón hacia atrás a lo largo de la ruta (el guión que estaba justo antes del inicio entra en el campo de visión).
  • Un valor negativo desplaza el patrón hacia adelante.
  • El desplazamiento se ajusta al total de la longitud de un ciclo guión-espacio, por lo que un desplazamiento igual a la longitud del ciclo tiene el mismo aspecto que 0.

Como el valor es simplemente una distancia, las unidades (px, em) son opcionales en el espacio de usuario SVG — un número sin unidad se interpreta en unidades de usuario.

Información

La propiedad stroke-dashoffset puede usarse tanto como propiedad CSS como atributo de presentación. Se puede aplicar a cualquier elemento, pero solo tiene efecto en los siguientes: <altGlyph>, <circle>, <ellipse>, <path>, <line>, <polygon>, <polyline>, <rect>, <text>, <textPath>, <tref> y <tspan>.

Información

Las unidades "px" o "em" no son obligatorias.

Valor inicial0
Se aplica aFormas y elementos de contenido de texto.
HeredableSí.
AnimableSí.
VersiónEspecificación SVG 1.1
Sintaxis DOMObject.strokeDashoffset = 5;

Sintaxis

Sintaxis CSS de stroke-dashoffset

stroke-dashoffset: length | percentage | initial | inherit;

Ejemplo de la propiedad stroke-dashoffset:

El valor de stroke-dashoffset desplaza el punto de inicio del patrón de guiones a lo largo de la ruta.

Ejemplo de código CSS stroke-dashoffset

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <h2>Stroke-dashoffset property example</h2>
    <svg viewBox="-3 0 33 10" >
      <line x1="0" y1="1" x2="30" y2="1" stroke="#1c87c9" />
      <line x1="0" y1="3" x2="30" y2="3" stroke="#ccc"
        stroke-dasharray="4 1" />
      <line x1="0" y1="5" x2="30" y2="5" stroke="#8ebf42"
        stroke-dasharray="3 1"
        stroke-dashoffset="3" />
      <line x1="0" y1="7" x2="30" y2="7" stroke="#FF0000"
        stroke-dasharray="3 1"
        stroke-dashoffset="-3" />
      <line x1="0" y1="9" x2="30" y2="9" stroke="#666"
        stroke-dasharray="3 1"
        stroke-dashoffset="1" />
      <path d="M0,5 h-3 M0,7 h3 M0,9 h-1" stroke="#000"/>
    </svg>
  </body>
</html>

Resultado

Lista de valores CSS de stroke-dashoffset

Cada línea anterior utiliza el mismo stroke-dasharray pero un desplazamiento diferente, por lo que los guiones se alinean en distintos puntos de inicio. El <path> de pequeñas marcas de verificación muestra exactamente dónde comienza cada patrón.

La animación de "línea que se dibuja sola"

La razón más común para usar stroke-dashoffset es animar un SVG para que parezca dibujarse a sí mismo. El truco consiste en establecer tanto el array de guiones como el desplazamiento en la longitud total de la ruta: esto convierte todo el trazo en un espacio gigante (invisible). Animar el desplazamiento de vuelta a 0 desliza el único guión a la vista, dibujando la línea de principio a fin.

<!DOCTYPE html>
<html>
  <head>
    <style>
      .draw {
        fill: none;
        stroke: #1c87c9;
        stroke-width: 4;
        /* One dash and one gap, each as long as the path */
        stroke-dasharray: 300;
        stroke-dashoffset: 300;
        animation: draw 2s ease forwards;
      }
      @keyframes draw {
        to {
          stroke-dashoffset: 0;
        }
      }
    </style>
  </head>
  <body>
    <h2>Self-drawing line</h2>
    <svg viewBox="0 0 110 110" width="160">
      <path class="draw" d="M5,55 C5,5 105,5 105,55 S5,105 5,55" />
    </svg>
  </body>
</html>

Para lograr este efecto con precisión en cualquier forma, lee la longitud de la ruta en JavaScript con path.getTotalLength() y úsala tanto para stroke-dasharray como para el stroke-dashoffset inicial.

Problemas comunes

  • El patrón no se mueve en absoluto. stroke-dashoffset solo funciona cuando también se establece un stroke-dasharray. Sin guiones no hay nada que desplazar.
  • No hay trazo visible. El elemento necesita un color de stroke y un stroke-width distinto de cero; el desplazamiento no tiene efecto en un trazo que no se puede ver.
  • La animación de dibujo solo se "dibuja a medias". Asegúrate de que tanto stroke-dasharray como el stroke-dashoffset inicial sean al menos tan largos como getTotalLength(); si son más cortos, el espacio es demasiado pequeño para ocultar toda la ruta.

Valores

ValorDescripción
lengthEstablece la longitud de la propiedad. Las unidades "px" o "em" no son obligatorias.
percentageLa propiedad se especifica mediante un porcentaje.
initialHace que la propiedad use su valor predeterminado.
inheritHereda la propiedad de su elemento padre.

Práctica

Práctica
¿Cuál es el propósito de la propiedad CSS stroke-dashoffset y cómo se usa?
¿Cuál es el propósito de la propiedad CSS stroke-dashoffset y cómo se usa?
Was this page helpful?