Cambiando el diseño de las barras de scroll con CSS

9 de enero de 2019

Una de las recomendaciones fundamentales para una buena usabilidad es no modificar en exceso el diseño de los elementos que forman parte de la interfaz de usuario del sistema operativo, tales como botones, elementos <select>, las barras de scroll, etc. Hacerlo complica el uso de tu sitio o aplicación web porque el usuario tiene que aprender a reconocerlos.

No obstante, como toda norma tiene sus excepciones, a veces puede ser necesario modificar estos elementos en algunos diseños muy especiales. Firefox 64, publicado en diciembre de 2018, añade entre sus nuevas funcionalidades la posibilidad de cambiar el diseño de las barras de scroll.

En concreto, lo hace a través del estándar CSS Scrollbars Module Level 1, que todavía se encuentra en fase de borrador y no es un estándar oficial. Los tres escenarios para los que se ha pensado este estándar son:

  • Cambiar el color de las barras de scroll para adaptarlas al diseño de la aplicación o sitio web.
  • Mostrar barras de scroll más finas de lo normal cuando un elemento lo requiera.
  • Diseñar barras de scroll totalmente personalizadas si el diseño así lo requiere.

Para ello se han definido dos nuevas propiedades CSS (scrollbar-color y scrollbar-width) que se pueden aplicar a la página entera y también a cualquier elemento que soporte la propiedad overflow de CSS:

Posibles valores de la propiedad scrollbar-color

Valor Descripción
auto usa el color por defecto del sistema operativo
dark usa una variante más oscura del color por defecto (escogida automáticamente por el navegador o sistema operativo)
light usa una variante más clara del color por defecto (escogida automáticamente por el navegador o sistema operativo)
<color> un par de colores CSS siendo el primero el color de fondo del tirador (scrollbar thumb) y siendo el segundo el color de fondo de la barra entera (scrollbar track)

Posibles valores de la propiedad scrollbar-width

Valor Descripción
auto usa la anchura por defecto del sistema operativo
thin usa una variante más delgada de la anchura por defecto (escogida automáticamente por el navegador o sistema operativo)
none oculta la barra de scroll completamente (aunque se puede seguir haciendo scroll en el elemento)
<medida> una unidad de medida CSS válida indicando la anchura de la barra de scroll (no se pueden definir diferentes anchuras para el tirador y la barra)

El siguiente ejemplo muestra estas dos propiedades en la práctica:

.selector {
    /* definir una altura pequeña para forzar el scroll */
    height: 100px;
    overflow-y: scroll;
    width: 300px;

    /* cambiar el estilo por defecto de la barra de scroll */
    scrollbar-color: yellow #800080;
    scrollbar-width: 10px;
}

Así es como se ve este ejemplo en tu navegador:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Y así es como debería verse si tu navegador tiene soporte para estas nuevas propiedades:

Barra de scroll personalizada con CSS

Si necesitas cambiar el estilo de la barra de scroll en otros navegadores, puedes utilizar estas otras propiedades CSS, aunque no es seguro hacerlo porque no son estándar y en el futuro desaparecerán en favor de scrollbar-color y scrollbar-width.