Addaw, ir a inicio Donar

Técnica CSS WCAG 2.2

C29Usar un selector de estilos para proporcionar una versión alternativa conforme

En resumen

Explica cómo ofrecer, dentro de la propia página, controles que cambian la hoja de estilos o propiedades CSS (colores, tamaño de letra, contraste) para que la presentación resultante cumpla las WCAG sin duplicar contenidos. Beneficia a quien no puede ajustar su navegador o sistema y a quien necesita más contraste. Úsela cuando la presentación por defecto no cumpla algún criterio y quiera evitar mantener varias versiones de la misma información.

Aplicabilidad

CSS usado con scripts del lado del cliente o del lado del servidor.

Descripción

Cuando algún aspecto de la presentación por defecto de una página web no cumple un criterio de conformidad, es posible satisfacer ese requisito mediante la cláusula de «versión alternativa» de los requisitos de conformidad (requisito de conformidad 1). Para algunos requisitos, invocar un selector de estilos mediante un enlace o un control de la página, capaz de ajustar la presentación de modo que todos los aspectos de la página sean conformes en el nivel declarado, permite a los autores evitar tener que proporcionar varias versiones de la misma información.

El objetivo de esta técnica es mostrar cómo puede usarse CSS en combinación con scripts para proporcionar versiones alternativas conformes de una página web. En esta técnica, el autor ofrece vistas alternativas del contenido mediante controles que ajustan el CSS que se emplea para controlar la presentación visual del contenido. Los controles incluidos en la página web permiten a los usuarios seleccionar o modificar la presentación de una forma que cumple el criterio de conformidad en el nivel declarado. Esto hace posible que los usuarios seleccionen distintas presentaciones visuales en situaciones como las siguientes:

  • el usuario puede no ser capaz de ajustar la configuración del navegador o del sistema operativo, por falta de familiaridad o de permisos
  • el texto se proporciona de una manera que no responde a la configuración del navegador o del sistema operativo (por ejemplo, texto dentro de una imagen)
  • la presentación por defecto del contenido no incluye un contraste suficiente para algunos usuarios

Para que esta técnica se use con éxito, deben cumplirse tres condiciones.

  1. El enlace o control de la página original debe cumplir por sí mismo el criterio de conformidad que se pretende satisfacer mediante la presentación alternativa. Por ejemplo, si se usa un selector de estilos para ofrecer tamaños de letra mayores y el control se presenta con una letra pequeña, es posible que los usuarios no puedan activar el control ni ver la presentación alternativa.
  2. La nueva página debe contener toda la misma información y funcionalidad que la página original.
  3. La nueva página debe cumplir todos los criterios de conformidad del nivel de conformidad deseado. Por ejemplo, no puede usarse una hoja de estilos alternativa para cumplir un requisito si provoca que otro requisito distinto deje de cumplirse.

Al usar un selector de estilos, es importante tener en cuenta los siguientes retos y limitaciones:

  • El número y el tipo de cambios que un usuario puede realizar se limitan al alcance de los controles proporcionados por el autor de la página web. Deberían ofrecerse diversas presentaciones y preferencias para atender las necesidades de un público lo más amplio posible. No obstante, también es importante que los autores consideren las interacciones entre preferencias y la complejidad que puede suponer para los usuarios ofrecerles un gran número de opciones.
  • Mantener la preferencia del usuario de una página a la siguiente puede lograrse guardando una cookie en el equipo del usuario (consulte la sección de Recursos para más información), incluyendo sus preferencias en un perfil guardado en el servidor web mediante un parámetro de la cadena de consulta, o por otros medios.
  • El método técnico empleado para implementar un selector de estilos puede depender de la compatibilidad y disponibilidad de una o varias tecnologías en el equipo del usuario (por ejemplo, muchas soluciones del lado del cliente requieren compatibilidad tanto con JavaScript como con CSS). Salvo que se dependa de estas tecnologías para la conformidad, los autores deberían considerar el uso de tecnologías del lado del servidor cuando no pueda garantizarse la compatibilidad y disponibilidad de las tecnologías del lado del cliente. Como alternativa, el uso de técnicas que garanticen que el contenido se transforma correctamente cuando una o varias de las tecnologías empleadas no están disponibles puede ser una forma eficaz de mejorar las páginas cuando no se depende de la compatibilidad con esas tecnologías para la conformidad.

Ejemplos

Usar un control JavaScript para aplicar un fichero CSS externo distinto

Este ejemplo es el de una página que ofrece enlaces para cambiar los colores del texto y del fondo de la página mediante JavaScript. Los enlaces solo deberían insertarse si el sistema del usuario es compatible con JavaScript y este está disponible. De lo contrario, seleccionar los enlaces no producirá los cambios deseados. Esto puede lograrse usando un script para insertar los propios enlaces (lo que significa que los enlaces solo estarían presentes cuando los scripts sean compatibles y estén disponibles).

El código siguiente muestra los enlaces de cambio de color dependientes de JavaScript y un fragmento de otro contenido de la página web, las reglas de la hoja de estilos asociadas y el JavaScript que cambia la hoja de estilos en uso cuando se selecciona un enlace de cambio de color.

El ejemplo se aplica únicamente a la vista actual de la página. En un entorno de producción, sería aconsejable guardar esta preferencia en una cookie o en un perfil de usuario del lado del servidor, de modo que los usuarios solo tuvieran que hacer la selección una vez por sitio.

Los componentes HTML

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <link href="main.css" rel="stylesheet">
    <link id="currentCSS" href="defaultColors.css" rel="stylesheet">
  </head>
  <body>
    <div id="colorswitch">
    <p>Change colors:</p>
    <ul class="inline">
      <li>
        <a href="#" onClick="javascript:changeColors('altColors1.css');return false;" 
	id="altColors1">dark blue on white</a>
      </li>
      <li>
        <a href="#" onClick="javascript:changeColors('altColors2.css');return false;" 
	id="altColors2">yellow on black</a>
      </li>
      <li>
        <a href="#" onClick="javascript:changeColors('altColors3.css');return false;" 
	id="altColors3">black on pale yellow</a>
      </li>
      <li>
        <a href="#" onClick="javascript:changeColors('altColors4.css');return false;" 
	id="altColors4">black on white</a>
      </li>
      <li>
        <a href="#" onClick="javascript:changeColors('defaultColors.css');return false;" 
	id="default">Reset to default</a>
      </li>
    </ul>
  </div>
  <div id="mainbody">
    <h1>Conference report</h1>
      <p>Last week's conference presented an impressive line-up of speakers...</p>
    </div>
  </body>
</html>

Los componentes CSS

En main.css
body{ font-family: Geneva, Arial, Helvetica, sans-serif; margin: 2em; }
#mainbody { 
  padding: 1em; 
}
#colorswitch {
  float: right; 
  width: 12em; 
  border: 1px #000066 solid; 
  padding:0 1em 1em 1em; margin:0;
}
#colorswitch p { 
  padding-top:.5em; 
  font-weight:bold;
}
En defaultColors.css
body, p { 
  color:#000000; 
  background-color:#FFFFFF; 
}
h1, h2, h3 {
  color:#990000; 
  background-color:#FFFFFF;
}
En altColors1.css
body, h1, h2, h3, p, a { 
  color:#000066; 
  background-color:#FFFFFF; 
}
En altColors2.css
body, h1, h2, h3, p, a { 
  color:#FFFF33; 
  background-color:#000000; 
}
En altColors3.css
body, h1, h2, h3, p, a { 
  color:#000000; 
  background-color:#FFFF99; 
}
En altColors4.css
body, h1, h2, h3, p, a { 
  color:#000000; 
  background-color:#FFFFFF; 
}

Los componentes JavaScript

function changeColors (newCSS){
  document.getElementById('currentCSS').href = newCSS; 
}

Está disponible un ejemplo funcional de este código: Usar un control JavaScript para aplicar un fichero CSS externo distinto.

Usar JavaScript del lado del cliente para cambiar una propiedad CSS

Este ejemplo puede usarse para cambios sencillos en una sección de contenido y puede resultar menos práctico en sitios o páginas complejos. El ejemplo usa JavaScript del lado del cliente para cambiar el nombre de clase y presentar visualmente el color seleccionado por el usuario (de entre un conjunto definido de opciones) como fondo para resaltar un contenido concreto.

El código siguiente incluye llamadas a JavaScript dentro del código HTML para facilitar la comprensión de la técnica. No obstante, se anima al autor a seguir las prácticas recomendadas actuales para incluir JavaScript (consulte los recursos para más información sobre JavaScript no intrusivo y mejora progresiva).

Los componentes HTML

<h1>Product comparison</h1>
<p>The products you selected to compare are listed below. 
  Any differences between the products are highlighted and italicized.</p>
<p class="inlinePara">Change hightlight color: </p>
<ul class="inline">
  <li>
    <a href="#" onClick="changeColor('hghltLightYellow');return false;" 
     class="hghltLightYellow">light yellow</a>
  </li>
  <li>
    <a href="#" onClick="changeColor('hghltBrightYellow');return false;" 
     class="hghltBrightYellow">bright yellow</a>
  </li>
  <li>
    <a href="#" onClick="changeColor('hghltLightBlue');return false;" 
     class="hghltLightBlue">light blue</a></li>
	<li>
    <a href="#" onClick="changeColor('hghltBrightBlue');return false;" 
     class="hghltBrightBlue">bright blue</a>
  </li>
  <li>
    <a href="#" onClick="changeColor('hghltLightRed');return false;" 
     class="hghltLightRed">light red</a>
  </li>
  <li>
    <a href="#" onClick="changeColor('hghltDrkRed');return false;" 
     class="hghltDrkRed">dark red</a>
  </li>
</ul>
<table>
  <tr>
    <td> </td>
    <th scope="col">Product 1</th>
    <th scope="col">Product 2</th>
  </tr>
  <tr>
    <th scope="row">Aspect 1</th>
    <td>Yes</td>
    <td>Yes</td>
  </tr>
  <tr>
    <th scope="row">Aspect 2</th>
    <td class="hghltLightYellow">Yes</td>
    <td class="hghltLightYellow">No</td>
  </tr>
  <tr>
    <th scope="row">Aspect 3</th>
    <td>Yes</td>
    <td>Yes</td>
  </tr>
</table>

Los componentes CSS

body { color:#000000; background-color:#FFFFFF; }
.hghltLightYellow { color: #000000; background-color: #FFFF99; font-style:oblique; }
.hghltBrightYellow { color: #000000; background-color: #FFFF00; font-style:oblique; }
.hghltLightBlue { color: #000000; background-color: #33FFFF; font-style:oblique; }
.hghltBrightBlue { color: #FFFFFF; background-color: #0000FF; font-style:oblique; }
.hghltLightRed { color: #000000; background-color: #FF6266; font-style:oblique; }
.hghltDrkRed { color: #FFFFFF; background-color: #993300; font-style:oblique; }
.inlinePara { display:inline; }
.inline { display: inline; margin-left:0px; padding-left:0px; line-height:3em; }
.inline li { display:inline; }
.inline li a { padding: 0.5em 1em; border: 2px solid #000000; }

Los componentes JavaScript

function changeColor(hghltColor) {
  // collects table data cells into an array 
  var els = document.getElementsByTagName('td');
  // for each item in the array, look for a class name starting with "hghlt"
  // if found, change the class value to the current selection
  // note that this script assumes the  'td' class attribute is only used for highlighting
  for (var i=0; i<els.length; i++) {
    if (els[i].className.indexOf("hghlt") == 0) { els[i].className = hghltColor; }
  }
}

Está disponible un ejemplo funcional de este código: Usar JavaScript del lado del cliente para cambiar una propiedad CSS.

Usar $_GET de PHP para aplicar un fichero CSS externo distinto

Este sencillo ejemplo usa $_GET de PHP para asignar una de las dos hojas de estilos externas disponibles. Podría lograrse una funcionalidad similar con diversas características de PHP. El ejemplo se aplica únicamente a la vista actual de la página. En un entorno de producción, sería aconsejable guardar esta preferencia en una cookie o en un perfil de usuario del lado del servidor, de modo que los usuarios solo tuvieran que hacer la selección una vez por sitio.

El código siguiente es PHP, pero un enfoque similar funcionaría con diversas tecnologías del lado del servidor.

Los componentes PHP y HTML

Al principio de la página PHP
<?php
  $thestyle = $_GET['set'];
  if ($thestyle == "style1") {
    $thestyle = "style2";
  }
  else {
    $thestyle = "style1";
  }
?>
En la sección <head>
<link rel="stylesheet" media="screen" href="<?php echo($thestyle);?>.css">
En la sección <body>
<?php
  if ($thestyle == "style1") {
    echo "<a href=\"index.php?set=style1\">Switch to Style Sheet Two</a>";
  }
  else {
    echo "<a href=\"index.php?set=style2\">Switch to Style Sheet One</a>";
  }
?>
<div id="mainbody">
  <h1>Conference report</h1>
  <p>Last week's conference presented an impressive line-up of speakers...</p>
</div>

Los componentes CSS

En style1.css
body, p { color:#000000; background-color:#FFFFFF; }
h1, h2, h3 {color:#990000; background-color:#FFFFFF; }
En style2.css
body, h1, h2, h3, p, a { color:#FFFF00; background-color:#000000; }

Está disponible un ejemplo funcional de este código: Usar $_GET de PHP para aplicar un fichero CSS externo distinto.

Pruebas

Procedimiento

  1. Comprobar que la página web contiene controles que permiten a los usuarios seleccionar presentaciones alternativas.
  2. Comprobar que el control cambia la presentación modificando propiedades de estilo CSS individuales o activando una hoja de estilos alternativa.
  3. Verificar que la página resultante es una versión alternativa conforme de la página original.

Resultados esperados

  • Todas las comprobaciones anteriores son verdaderas.

Recursos

Uso de cookies

La selección de un usuario puede hacerse persistente entre páginas, y de una visita a otra, almacenando información en el equipo del usuario mediante una cookie. Esta funcionalidad requiere que el equipo del usuario sea compatible con las cookies y las permita. Las cookies pueden crearse, leerse, modificarse y borrarse mediante scripts del lado del cliente, como JavaScript, o mediante scripts del lado del servidor, como los scripts CGI. Depender de tecnologías del lado del cliente exigirá la compatibilidad y disponibilidad de esa tecnología en el equipo del usuario, además de la compatibilidad con las cookies y su autorización.

En la web puede encontrarse información sobre la creación y el uso de cookies. Estas son algunas sugerencias:

Se recomienda que los autores comprueben la compatibilidad con las cookies y ofrezcan un control adicional si no son compatibles. Este control adicional debería incluir información sobre la persistencia de la selección, como «Aplicar la selección a todas las páginas». El mensaje o la página que se presenta al usuario en respuesta a la selección de ese control adicional proporciona información sobre el requisito de las cookies y sus opciones para resolverlo. En caso de que el usuario no pueda activar la compatibilidad con las cookies, incluya una indicación de lo que esto supondrá para él si decide seguir navegando por el sitio y proporcione información sobre cómo puede ajustar su agente de usuario para obtener resultados similares.

Por ejemplo: «Su navegador no está configurado para aceptar cookies. En este sitio, las cookies son necesarias para aplicar los cambios que ha seleccionado en todas las páginas del sitio. Para saber cómo activar las cookies en su equipo, visite activar o desactivar las cookies. Tenga en cuenta que esto puede requerir permisos de administrador en el equipo que está usando. Sin compatibilidad con las cookies, su configuración no se mantendrá en las demás páginas de este sitio. Estamos trabajando para ofrecer esta funcionalidad sin depender de las capacidades de su equipo. Mientras tanto, podrá seleccionar el cambio en cada página que visite».

Mejora progresiva y JavaScript no intrusivo

La práctica recomendada actual para implementar JavaScript en una página HTML es usarlo de una manera que separe el comportamiento del contenido de su estructura y presentación. Los términos «mejora progresiva» y «JavaScript no intrusivo» se usan a menudo para describir scripts que mejoran o amplían la funcionalidad de una página pero se transforman correctamente, de modo que el contenido sigue funcionando incluso cuando JavaScript no es compatible.

Estos son algunos puntos de partida sugeridos para obtener más información:

Cómo lo comprobamos en ADDAW

En las auditorías de accesibilidad de ADDAW revisamos cada criterio de conformidad siguiendo este catálogo de técnicas: comprobamos si la web aplica una técnica suficiente y documentamos cada fallo común con capturas y el código afectado, para que el equipo de desarrollo sepa exactamente qué corregir. Los informes siguen la metodología del Observatorio de Accesibilidad y la norma UNE-EN 301 549.

Solicitar una auditoría

Fuente y licencia

Traducción al español, no oficial, realizada por ADDAW a partir de la técnica C29 del documento «Techniques for WCAG 2.2» del W3C (versión del repositorio público del W3C a 22/10/2026). Copyright © W3C® (MIT, ERCIM, Keio, Beihang). Se publica conforme a la licencia de documentos del W3C. El texto normativo de referencia es el original en inglés; si detecta un error en la traducción, escríbanos.

Financiado por la unión europea Gobierno de españa red.es Plan de recuperación transformación y resilencia kit digital