Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Patrones de diseño inclusivos

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

Patrones de diseño inclusivos

Charla impartida en la DrupalCamp 2017 sobre cómo abordar la accesibilidad desde el inicio de un proyecto, a través del uso de patrones de diseño inclusivos.

Avatar for Delirium Coder

Delirium Coder

May 06, 2017
Tweet

More Decks by Delirium Coder

Other Decks in Programming

Transcript

  1. Guión • Accesibilidad • Sacar partido a los estándares •

    Progressive enhancement • Partiendo desde cero • Mejorar la legibilidad • Páginas
  2. Accesibilidad • ¿Qué definimos como normal? • Todos somos dependientes

    en algún momento de nuestra vida • No podemos abordar la accesibilidad como un parche • Patrones de diseño inclusivos
  3. El diseño inclusivo se basa en la forma en la

    que las personas usan las interfaces, no únicamente en solucionar errores técnicos
  4. Sacar partido a los estándares • HTML5: semántica y más

    semántica • WAI-ARIA: para ayudarnos donde no llega la semántica
  5. Sacar partido a los estándares <!-- No uses esto--> <div

    class="button button--fav" data- action="fav"></div> <!-- Esto es un parche --> <div class="button button--fav" data-action="fav" aria-label=“Añadir a mis favoritos" tabindex="0"></div>
  6. Sacar partido a los estándares <!-- Usa esto --> <button

    data-action="fav" aria-label=“Añadir a mis favoritos"> <svg> <use xlink:href="#fav"></use> </svg> </button> <!-- O esto --> <button data-action="fav"> <span class=“visually-hidden">Añadir a mis favoritos</span> <svg> <use xlink:href="#fav"></use> </svg> </button>
  7. Partiendo desde cero • <!DOCTYPE html> • Atributo lang •

    Responsive design • <title> • <main> • Skip links
  8. Atributo lang <html lang="es"> • Establece el idioma de la

    página • Ayuda a los navegadores a elegir fuentes con el conjunto apropiado de caracteres • En lectores de pantalla determina el sintetizador de voz adecuado. Partiendo desde cero
  9. Responsive design • Layout fluido • Norma general: ningún elemento

    con ancho o alto en píxeles • Permitir zoom Partiendo desde cero
  10. Responsive design <!-- No uses esto--> <meta name="viewport" content="width=device-width, initial-scale=1.0,

    minimum-scale=1.0, maximum- scale=1.0, user-scalable=no"> <!-- Usa esto mejor--> <meta name="viewport" content="width=device-width, initial-scale=1.0"> Partiendo desde cero
  11. <title> • Nombre accesible del documento • Patrón: descripción_de_la_página |

    nombre_del_sitio • Ejemplo: “Patrones de diseño inclusivos | DrupalCamp 2017” Partiendo desde cero
  12. <main> • Identifica el contenido principal del sitio • Sólo

    un elemento por página Partiendo desde cero <!-- Esto es válido, pero mejor usar main como etiqueta directamente --> <div role="main"> ... </div> <!-- Esto es redundante --> <main role="main"> ... </main> <!-- Usa esto, no hace falta nada más --> <main> ... </main>
  13. <main> • Podemos hacer la vida más fácil a aquellos

    que imprimen las páginas Partiendo desde cero @media print { body > *:not(main) { display: none; } }
  14. Skip links • Enlaces situados por encima de todo el

    contenido de la página que apuntan a la región principal de contenido • Normalmente ocultos, sí son visibles cuando reciben el foco Partiendo desde cero
  15. Skip links <body> <!-- Nuestro skip link --> <a href="#main">Ir

    al contenido principal</a> <main id="main"> <!-- Contenido principal de la página --> </main> </body> Partiendo desde cero
  16. Mejorar la legibilidad • Elegir una tipografía adecuada • Tamaño

    de fuente • Longitud de línea • Justificación del texto • Line-height • Contraste • Enlaces
  17. Elegir una tipografía adecuada • ¿La tipografía soporta todos los

    caracteres y estilos que necesitamos? • ¿Se diferencian bien sus caracteres o hay algunos que pueden confundirse? • ¿Su forma facilita la lectura? • ¿Sus métricas son consistentes en todos los caracteres que la componen? Mejorar la legibilidad
  18. Tamaño de fuente • Un tamaño de fuente generoso no

    ofende a nadie • Siempre en unidades relativas Mejorar la legibilidad /* No uses esto */ html { font-size: 16px; } /* Usa esto */ html { font-size: 100%; }
  19. Longitud de línea • Líneas muy largas dificultan la lectura

    • Entre 45 y 75 caracteres por línea se considera una buena medida Mejorar la legibilidad html { font-size: 100%; } main { max-width: 60rem; }
  20. Justificación /* No uses esto nunca */ main { text-align:

    justify; } /* Este es el valor por defecto */ main { text-align: left; } Mejorar la legibilidad
  21. Line-height • El interlineado debe ser generoso (space-and-a- half). Mejorar

    la legibilidad /* space and a half */ p { line-height: 1.5; }
  22. Contraste • Se deben evitar combinaciones de bajo contraste entre

    el color del texto y el color de fondo • Combinaciones de muy alto contraste también pueden resultar problemáticas • Existen multitud de validadores: extensión de Chrome, extensión de Firefox Mejorar la legibilidad
  23. Enlaces • En los enlaces en línea, respetar la convención

    del subrayado • Crafting link underlines • Indicar visualmente cuando el enlace tiene el foco Mejorar la legibilidad
  24. Enlaces /* No uses esto */ p a:focus { outline:

    none; } /* Si no te gusta el estilo por defecto puedes usar el tuyo propio. Este es de GOV.UK */ p a:focus { outline: 3px solid #ffbf47; background-color: #ffbf47; } Mejorar la legibilidad
  25. Enlaces • Por cortesía, avisaremos al usuario cuando se trate

    de un enlace externo Mejorar la legibilidad [href^="http"]:not([href*="drupalcamp.es"])::after { background-image: url('images/external-link.svg'); background-repeat: no-repeat; background-position: center; background-size: 75% auto; display: inline-block; height: 1em; width: 1em; /* Añadimos un texto alternativo como pseudo contenido */ content: '(enlace externo)'; overflow: hidden; text-indent: 1em; /* Mismo ancho del icono */ white-space: nowrap; }
  26. Elemento <h1> • Encabezado de mayor nivel del documento •

    Lo lógico es que sea único y que describa adecuadamente el título de la página • Al igual que el elemento <main> también provee de un atajo a los usuarios de dispositivos de apoyo Páginas
  27. Secciones y subsecciones • Los encabezados <h1> … <h6> definen

    la jerarquía del documento • Elementos como <article> o <section> no aportan ningún valor en este sentido. Páginas
  28. Secciones y subsecciones <!-- No hagas esto, falta el segundo

    nivel --> <h1>Patrones de diseño inclusivos</h1> <h3>Secciones y subsecciones</h3> <!-- Respeta la jerarquía de títulos --> <h1>Patrones de diseño inclusivos</h1> <h2>Páginas</h2> <h3>Secciones y subsecciones</h3> Páginas
  29. Subtítulos <!-- No uses esto --> <h1>Patrones de diseño inclusivos</h1>

    <!-- Esto no es un subítulo, crea una subsección --> <h2>Cómo abordar la accesibilidad en el desarrollo de temas personalizados en Drupal 8</h2> <!-- Usa esto --> <h1>Patrones de diseño inclusivos</h1> <p><span class="visually-hidden">Subtítulo:</span> Cómo abordar la accesibilidad en el desarrollo de temas personalizados en Drupal 8</p> Páginas
  30. Navegación • <nav> • Posicionamiento • Enlace activo • De

    un enlace redundante a un skip link • Eliminar duplicidades • Asignar labels a los elementos de navegación • Botón de menú
  31. <nav> • Al igual que con el elemento <main>, las

    regiones de navegación también son reconocidas por los dispositivos de apoyo (consultar WAI-ARIA Landmark roles). • Pueden existir múltiples elementos <nav> en una página. Navegación
  32. <nav> <!-- Esto es válido, pero mejor usar nav como

    etiqueta directamente --> <div role="navigation"> ... </div> <!-- Esto es redundante --> <nav role="navigation"> ... </nav> <!-- Usa esto, no hace falta nada más --> <nav> ... </nav> Navegación
  33. <nav> <!-- Esto es un elemento de navegación semántico -->

    <nav> <ul> <li><a href="/">Inicio</a></li> <li><a href="/quienes-somos">Quienes somos</a></li> <li><a href="/servicios">Servicios</a></li> <li><a href="/trabajos">Trabajos</a></li> <li><a href="/Contacto">Contacto</a></li> </ul> </nav> Navegación
  34. Posicionamiento • Al comienzo de la página • Facilita la

    interacción a usuarios de teclado Navegación
  35. Enlace activo • Sitúa a los usuarios “Estás aquí” •

    Evitar diferenciar sólo visualmente Navegación
  36. Enlace activo <nav> <ul> <li><a href="/">Inicio</a></li> <li><a href="/quienes-somos" aria- describedby="current">Quienes

    somos</a></li> <li><a href="/servicios">Servicios</a></li> <li><a href="/trabajos">Trabajos</a></li> <li><a href="/Contacto">Contacto</a></li> </ul> <div hidden id="current">Página actual</div> </nav> Navegación
  37. De un enlace redundante a un skip link <nav> <ul>

    <li><a href="/">Inicio</a></li> <li><a href="#main">Quienes somos</a></li> <li><a href="/servicios">Servicios</a></li> <li><a href="/trabajos">Trabajos</a></li> <li><a href="/Contacto">Contacto</a></li> </ul> </nav> Navegación
  38. Eliminar duplicidades <nav> <ul> <li> <a href="/"> <img src="images/logo.svg" alt="Página

    de inicio" /> </a> </li> <li><a href="#main">Quienes somos</a></li> <li><a href="/servicios">Servicios</a></li> <li><a href="/trabajos">Trabajos</a></li> <li><a href="/Contacto">Contacto</a></li> </ul> </nav> Navegación
  39. Asignar labels a los elementos de navegación • Pueden existir

    múltiples regiones de navegación • Necesitamos que los usuarios de dispositivos de apoyo puedan distinguirlas Navegación
  40. Asignar labels a los elementos de navegación <nav aria-labelledby="social-media"> <h2

    id="social-media">Redes Sociales</h2> <ul> <li><a href=“https://twitter-profile- link.com">Twitter</a></li> <li><a href=“https://facebook-profile- link.com">Facebook</a></li> <li><a href=“https://instagram-profile- link.com">Instagram</a></li> <li><a href=“https://google-plus-profile- link.com">Google Plus</a></li> </ul> </nav> Navegación
  41. Botón de menú • Regla general: si el menú tiene

    menos de 5 elementos, es mejor dejarlo siempre visible. • Si vas a utilizar el típico hamburguer acompáñalo siempre del texto “Menú”. • Para la imagen usa el formato svg • Debe tener un tamaño adecuado para la interacción en dispositivos móviles. • El código javascript que da soporte a la interacción debe considerarse como crítico. Navegación
  42. Botón de menú <nav aria-label="Menú principal del sitio"> <button aria-expanded="false">

    <svg> <use xlink:href=“#hamburguer-icon"></use> </svg> Menu </button> <ul hidden> <li><a href="/">Inicio</a></li> <li><a href="/quienes-somos">Quienes somos</a></li> <li><a href="/servicios">Servicios</a></li> <li><a href="/trabajos">Trabajos</a></li> <li><a href="/contacto">Contacto</a></li> </ul> </nav> Navegación
  43. Libros • Inclusive design patterns • A web for everyone

    • Adaptive web design • WCAG 2.0 de forma sencilla Recursos
  44. Blogs • Paciello Group’s blog • tink.uk • GOV.UK accesibility

    blog • Accesibility wins • Marco’s accesibility blog • Usable y accesible Recursos