Přístupné uživatelské rozhraní:Přestaňte vytvářet klikací DIV

Dříve jsem si myslel, že přístupnost je v nejlepším případě vylepšením UX a v nejhorším „práce s dodržováním předpisů“. Ale jak pandemie proměnila Boxed.com na nezbytnou službu pro mnoho našich zákazníků, přečetl jsem si spoustu srdcervoucích lístků zákaznického servisu, které odhalily mé předsudky a nezamýšlené vyloučení způsobené mým kódem. Nyní jsem přesvědčen, že zpřístupnění webu je správná věc

Přístupnost je široké téma a podmnožina vznešenějších inkluzivních principů designu, na které nebudu předstírat, že jsem odborník. Právě sdílím jednu z mnoha lekcí, které jsem se jako vývojář naučil.

Pojďme tedy k hlavnímu tématu.

Milujeme naše div značky. Ale jednoduše z hlediska vývojářské zkušenosti, aniž bychom diskutovali o výhodách sémantického HTML (které si zaslouží svůj vlastní článek), a button je dostupnější s menším množstvím kódu ve srovnání s kliknutím div . Pro ilustraci pojďme do toho a vytvořte klikací prvek div.

<div>Click me</div>

<script>
  function doSomething() {
    console.log('do something'); 
  }

  document.querySelector('div').onclick = doSomething;
</script>

Není to dost dobré, musíme vizuálně pomocí typu kurzoru naznačit, že na div lze kliknout (což je zřejmě také diskutabilní). Přidejme nějaké CSS.

<style>
  .someDiv {
    cursor: pointer;
  }
</style>

<div class='someDiv'>Click me</div>

Není to dost dobré, musíme prostřednictvím čtečky obrazovky slovně naznačit, že div je tlačítko, na které lze kliknout, a musí být přístupné z klávesnice přes navigaci Tabbing. Pojďme přidat atributy role a tabindex.

<div class='someDiv' tabindex='0' role='button'>Click me</div>

Ne dost dobrý, div také musí být klávesnice přístupná pomocí kláves Enter a mezerníku. Pojďme přidat další JavaScript (který nemusí být ani 100% kompatibilní s různými prohlížeči).

<script>
  function doSomething() {
    console.log('do something'); 
  }

  function handleKeydown(e) {
    if (e.key === 'Enter' || e.key === ' ') {
      doSomething();
    }
  }

  document.querySelector('div').onclick = doSomething;
  document.querySelector('div').onkeydown = handleKeydown;
</script>

Tak to nakonec skončíme.

<style>
  .someDiv {
    cursor: pointer;
  }
</style>

<div class='someDiv' tabindex='0' role='button'>Click me</div>

<script>
  function doSomething() {
    console.log('do something'); 
  }

  handleKeydown(e) {
    if (e.key === 'Enter' || e.key === 'Space Bar') {
      doSomething();
    }
  }

  document.querySelector('div').onclick = doSomething;
  document.querySelector('div').onkeydown = handleKeydown;
</script>

Zatímco button verze, která je stejně přístupná vypadá takto.

<button>Click here</button>

<script>
  function doSomething() {
    console.log('do something'); 
  }

  document.querySelector('button').onclick = doSomething;
</script>

Jaký je váš přístup k vytváření klikacích komponent uživatelského rozhraní? Dejte mi vědět v komentářích.

Poznámka:Rozhodl jsem se nediskutovat o atributech árie, protože si myslím, že si zaslouží svůj vlastní článek.

📫 Zavolejte mi LinkedIn nebo Twitter !