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

Patrones de diseño inclusivos

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.

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