Generador de barra de desplazamiento CSS
Las barras de desplazamiento personalizadas solían ser una pesadilla de pseudoelementos con prefijos de proveedor. Hoy, scrollbar-color y scrollbar-width cubren los casos habituales en todos los navegadores modernos: ancho estrecho o normal y un tema de dos colores (control y guía). Para un control a nivel de píxel (relleno de la guía, radio del control, estados al pasar el cursor), los antiguos pseudoelementos ::-webkit-scrollbar siguen funcionando en Chrome y Safari. Este generador produce ambas versiones y las combina correctamente en cascada.
Cómo dar estilo a una barra de desplazamiento
-
1
Elige el ancho
Auto (ancho predeterminado de la plataforma), estrecho (más fino) o un valor concreto en píxeles mediante las reglas de webkit.
-
2
Define los colores del control y la guía
El moderno `scrollbar-color` acepta dos colores. Las reglas de webkit permiten color, radio y estados al pasar el cursor por separado.
-
3
Añade un efecto al pasar el cursor (opcional)
El control se aclara al pasar el cursor. Funciona mediante `::-webkit-scrollbar-thumb:hover`.
-
4
Decide el ámbito
Aplícalo a `html` / `body` (toda la página) o solo a un contenedor con desplazamiento concreto.
-
5
Copia el CSS
Reglas modernas y de webkit combinadas: funciona en cualquier navegador moderno con una degradación elegante.
Propiedades estándar modernas (2023 en adelante)
/* Applies to the element that scrolls */
html {
scrollbar-width: thin; /* auto | thin | none */
scrollbar-color: #4f46e5 #e5e7eb; /* thumb track */
}
Compatibilidad de navegadores (2024):
scrollbar-width: Chrome 121+, Safari 18.2+, Firefox 64+.scrollbar-color: Chrome 121+, Safari 18.2+, Firefox 64+.scrollbar-gutter: stable: Chrome 94+, Safari 14+, Firefox 97+. Reserva el espacio de la barra de desplazamiento incluso cuando no se necesita, evitando saltos en el diseño.
Pseudoelementos de webkit (Chrome, Safari, Edge antiguo)
::-webkit-scrollbar {
width: 10px;
height: 10px;
}
::-webkit-scrollbar-track {
background: #e5e7eb;
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
background: #4f46e5;
border-radius: 10px;
}
::-webkit-scrollbar-thumb:hover {
background: #3730a3;
}
Un control más detallado. width fija el ancho de la barra de desplazamiento vertical; height fija la altura de la horizontal. Añade ambas para contenedores que pueden desplazarse en cualquier dirección.
Combina los dos enfoques en cascada
Especifica primero las reglas modernas y luego webkit como mejora para los navegadores que interpretan ambas:
.scroll-area {
scrollbar-width: thin;
scrollbar-color: #4f46e5 #e5e7eb;
}
.scroll-area::-webkit-scrollbar { width: 8px; }
.scroll-area::-webkit-scrollbar-track { background: #e5e7eb; }
.scroll-area::-webkit-scrollbar-thumb {
background: #4f46e5;
border-radius: 4px;
border: 2px solid #e5e7eb;
}
Firefox solo respeta las reglas modernas scrollbar-*. Chrome y Safari respetan las reglas de webkit (que anulan las modernas, de modo que el comportamiento es coherente).
scrollbar-gutter evita el desplazamiento del contenido
Sin un espacio reservado, el contenido se reajusta cuando aparece una barra de desplazamiento (habitual en listas dinámicas). Solución:
html { scrollbar-gutter: stable; }
/* or */
html { scrollbar-gutter: stable both-edges; }
El hueco de la barra de desplazamiento se reserva tanto si el contenido se desplaza como si no. both-edges añade un hueco equivalente en el lado opuesto para mantener el contenido visualmente centrado.
Ocultar las barras de desplazamiento por completo
.no-scrollbar {
scrollbar-width: none; /* Firefox */
}
.no-scrollbar::-webkit-scrollbar { display: none; } /* Chrome, Safari */
Ten cuidado: ocultar la barra de desplazamiento impide que los usuarios vean que el contenido se puede desplazar. Úsalo solo con un indicador claro (flechas, puntos de página) o cuando el comportamiento de desplazamiento sea evidente por el contexto (carruseles horizontales, historiales de chat).
Consideraciones en móviles
En iOS y Android, las barras de desplazamiento solo aparecen un instante durante el desplazamiento. Tu CSS de barra personalizada se sigue aplicando, pero es posible que los usuarios no la vean más de un segundo. Diseña en consecuencia: no inviertas demasiado en detalles visuales que apenas se ven.
Accesibilidad
- Contraste: el control frente a la guía debe cumplir un 3:1 para el contraste no textual (WCAG 1.4.11).
- Ancho: las barras de desplazamiento finas pueden ser difíciles de agarrar con el ratón, sobre todo para usuarios con dificultades motoras. El ancho normal es un valor predeterminado más seguro.
- Nunca elimines la barra de desplazamiento en regiones desplazables sin ofrecer otro medio de desplazamiento. Los usuarios que dependen de la barra quedarán bloqueados.
Preguntas frecuentes
Sí, con las propiedades modernas scrollbar-width y scrollbar-color. Firefox no admite los pseudoelementos de webkit, así que, para lograr una apariencia coherente entre navegadores, usa primero las propiedades modernas y añade las reglas de webkit como mejora.
Porque las barras de desplazamiento predeterminadas se superponen al contenido y no reservan espacio hasta que hacen falta. Define scrollbar-gutter: stable en el elemento desplazable para reservar siempre el hueco y evitar el reajuste cuando la barra aparece o desaparece.
Normalmente sí, porque la barra de desplazamiento desentona y compite con el contenido. Añade puntos de paginación o controles de flecha visibles para que los usuarios sigan sabiendo que el contenido se desplaza. Respeta prefers-reduced-motion si usas ajuste de desplazamiento (scroll-snapping).
Puede hacerlo. Las barras muy finas o de bajo contraste son difíciles de usar para personas con dificultades motoras y baja visión. Mantén la barra con al menos 8–10 px de ancho para un agarre cómodo y conserva un contraste de 3:1 entre el control y la guía.
Herramientas relacionadas
Referencia de la tabla ASCII
Tabla ASCII completa del 0 al 127 con decimal, hex, octal, binario y referencia numérica HTML para cada carácter, incluidos los códigos de control como NUL, LF y DEL.
Referencia de caracteres HTML
Lista buscable de entidades HTML, sus códigos nombrados y numéricos, y una copia con un clic para caracteres y símbolos especiales.
Generador de letras aleatorias
Genera letras aleatorias A-Z. Elige la cantidad, usa mayúsculas, minúsculas o mezcla de ambas, y aplica el resultado en juegos, consignas o clase.
Referencia de atajos de teclado
Busca los atajos predeterminados documentados de VS Code, Chrome y Bash con GNU Readline en macOS, Windows y Linux.
Formateador de JSON
Pega JSON para verlo con sangría de 2 o 4 espacios, minificarlo en una salida compacta o comprobar rápidamente la sintaxis antes de copiar el resultado.
Generador de Paletas de Color
Genera paletas monocromáticas, análogas, complementarias, triádicas o tetrádicas desde un color base HEX y exporta variables CSS listas para copiar.