Heim > Web-Frontend > js-Tutorial > Stellen Sie sicher, dass die Symbollinks barrierefrei sind

Stellen Sie sicher, dass die Symbollinks barrierefrei sind

王林
Freigeben: 2024-07-26 12:54:33
Original
659 Leute haben es durchsucht

Ensure Accessibility on Icon Links

...automatisch mit einem kleinen clientseitigen Skript

Ich verabschiede mich in diesem Blog nach und nach von Icon-Schriftarten und nutze SVG-Dateien, die ich lieber per Hintergrundbild einbinde, um flexibel zu bleiben.

Bei der Änderung ist mir aufgefallen, dass ich zwar teilweise nur Icon-Links mit einem Titel versehen habe, diese aber hinsichtlich der Barrierefreiheit keine Rolle spielen. Menschen, die auf einen Screenreader angewiesen sind, konnten diese Links bisher noch nicht erkennen.

Wo gab es zwei Möglichkeiten, dies zu ändern: Aria-Label oder Text hinzufügen und ihn unsichtbar machen. Ersteres ist im Grunde nur eine Krücke, die nicht einmal von allen Browsern vollständig unterstützt wird und so blieb nur der unsichtbare Text übrig. Eine passende und sehr gut funktionierende Lösung habe ich auf Stack Overflow von GrahamTheDev gefunden:

<a class="my-icon-link" title="My Link">
  <span class="visually-hidden">My Link</span>
</a>
Nach dem Login kopieren
.my-icon-link {
  background-image: url(/images/icons/my-icon.svg);
}

.visually-hidden { 
  border: 0;
  padding: 0;
  margin: 0;
  position: absolute !important;
  height: 1px; 
  width: 1px;
  overflow: hidden;
  clip: rect(1px 1px 1px 1px); /* IE6, IE7 - a 0 height clip, off to the bottom right of the visible 1px box */
  clip: rect(1px, 1px, 1px, 1px); /*maybe deprecated but we need to support legacy browsers */
  clip-path: inset(50%); /*modern browsers, clip-path works inwards from each corner*/
  white-space: nowrap; /* added line to stop words getting smushed together (as they go onto seperate lines and some screen readers do not understand line feeds as a space */
}
Nach dem Login kopieren

Meine Aufgabe bestand nun darin, alle textlosen Icon-Links im Code mit dem SPAN zu erweitern ... bzw. einen Automatismus dafür zu finden, da alle diese Links bereits einen Titel haben und dieser genau das ist, was benötigt wird in den Linktext übernommen werden. Da die Barrierefreiheit nicht beeinträchtigt wird, wenn Text über JavaScript eingefügt wird, habe ich die folgende clientseitige Lösung gefunden, die per Skript in den Footer jeder Seite eingebettet wird:

function ensureIconLinkText() {
  let linksWithoutText = document.querySelectorAll("a[href^='http']:empty");
  linksWithoutText.forEach(e => {
    if (window.getComputedStyle(e).display !== "none") {
      if (e.title) {
        let eText = document.createElement("span");
        eText.innerText = e.title;
        eText.classList.add("visually-hidden");
        e.append(eText);
      } else {
        console.error("Link without Text and Title: " + e.outerHTML);
      }
    }
  });
}

ensureIconLinkText();
Nach dem Login kopieren

Der Code in Textform:
Suchen Sie alle A-Tags ohne Text, durchlaufen Sie sie und wenn das Element nicht absichtlich ausgeblendet wurde und wenn ein Titel definiert ist, erstellen Sie ein neues SPAN-Tag mit seinem Textwert und fügen Sie dieses in den Link ein, andernfalls wird ein Fehler ausgegeben Konsole

Mit dieser Vorgehensweise kann ich die Links so belassen, wie sie sind und kann in der Konsole sehen, ob ich irgendwo einen Titel vergessen habe.

Das obige ist der detaillierte Inhalt vonStellen Sie sicher, dass die Symbollinks barrierefrei sind. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage