
·E692
Revision 692: javascript:void(0), mit Manuel Matuzović
Episode Transcript
Was macht etwas zu einem Hyperlink?
Also ab wann ist ein Hyperlink ein Hyperlink?
Also technisch oder philosophisch?
Das heißt, wir brauchen das A-Element.
Das ist mal dieser erste Zutat.
Das Gute am A-Element ist, dass ich dadurch, dass ich ein semantisches Element habe, eine Möglichkeit habe in CSS, die alle zu stylen.
Das heißt, ich kann den A-Selector verwenden zum stylen.
Und die zweite coole Sache daran ist, dass es mit einer impliziten Link-Rolle kommt.
Das heißt, mit einer ARIA-Rolle Link.
Und die wird auf dem Screen wieder angekündigt.
Aber eine so ein bisschen grundlegende Herangehensweise, die uns ein bisschen fehlt, ist, dass man sich die Frage stellt, was mir die einzelnen Elemente in HTML überhaupt bringen.
Diese Revision von Working Draft wird euch präsentiert von Mitwald, Next Level Hosting für eure Projekte.
Jetzt fragt ihr euch bestimmt, wie kann sowas langweiliges wie Hosting Next Level sein?
Ganz einfach.
Mitwalds hochperformantes Managed Hosting ist perfekt abgestimmt auf die Anforderungen von Freelancern und Agenturen.
Es gibt zum Beispiel ein smartes Rollensystem für die Zusammenarbeit mit euren Projektpartnern.
Und Midwald hat mit dem M-Studio auch eine sehr schöne moderne Verwaltungsoberfläche gebaut, mit der das Arbeiten Spaß macht.
Aber jetzt mal ehrlich, unter uns Nerds, Sachen anklicken in einem User-Interface?
Muss das sein?
Nein, muss es nicht.
Denn bei Midwald gibt's auch die M-Studio CLI.
Mit der könnt ihr euer Hosting komplett über die Kommandozeile verwalten und natürlich auch entsprechend automatisieren.
Von Nerds für Nerds bringt euch Midwald die optimale Developer-Experience, wenn es ums Hosting geht.
Und deshalb jetzt auf zu mitwald.de slash workingdraft.
Das war nochmal mittwald.de slash workingdraft.
Wir danken Mitwald für die Unterstützung von dieser Revision von Working Draft.
Halli, hallo, hallöle und herzlich willkommen zu Working Draft Revisionen 692.
Heute sind aus dem Team dabei der Shep.
Hallo.
Meine Wenigkeit der Peter und wir haben auch einen Gast an Bord, nämlich den Manuel.
Hallo Manuel.
Hallo.
Manuel, wie geht es Gritty McGridface?
Gritty McGridface geht es nicht so gut, weil jemand anderes...
Ah, das ist passiert.
Ja, jemand anderer hat seine Position eingenommen als neue Eigenschaft oder als neuer Wert einer Eigenschaft in CSS.
Genau, du hattest Gritty McGrifface vorgeschlagen für, was war das, Masonry?
Masonry, genau.
Also es gab so eine Umfrage, wie denn Masonry heißen soll in Zukunft oder wie der Wert heißen soll dann in CSS.
Und ich habe ein paar ernsthafte Angaben gemacht und dann auch noch vorgeschlagen, dass man es Gritty McGrifface nennen könnte.
Aber ja, wurde leider nicht genommen.
Und wie immer hat keiner auf dich gehört?
Ja, leider.
Es ist ein Jammer, es ist ein Jammer.
Weil ich meine, im Prinzip weißt du ja, wie man es richtig macht.
Aber trotzdem scheint das ja so zu sein, dass die meisten, die da draußen irgendwie Web-Content fabrizieren, nicht so immer den Best Practices folgen.
Was so eine Überleitung so ein bisschen darstellt in das Thema, das wir heute haben.
Du hattest irgendwie was auf Social Media, glaube ich, geschrieben.
Und dazu drunter geschrieben, ich könnte darüber drei Stunden mich aufregen.
Und mein Gedanke war, ich könnte mich darüber fünf Minuten noch weiter aufregen.
Wahrscheinlich auf eine ganz andere Weise.
Lass doch mal eine Sendung draus machen.
Das war ja die Idee.
Wie wollen wir es genau beschreiben?
Also man kann ja verlinken mit so einem A-Element auf ein anderes Dokument, wenn man es richtig macht.
Oder vielleicht auf eine Sprungmarke, wenn man es irgendwie besonders fancy machen möchte.
Oder man kann auch JavaScript verlinken.
Kann man auch, genau.
Okay, aber ich höre da jetzt aus dieser Verzögerung raus, du bist nicht der größte Fan von dem Vorgehen.
Ich bin nicht der größte Fan von dem Vorgehen.
Wir sollten mal vielleicht auch dazu sagen, welches Pattern speziell ich da gesehen habe, das mir nicht gefallen hat.
Und zwar, wie du richtig sagst, man kann das A-Element verwenden, um irgendwo hinzulinken, zu einer Seite oder wo auch immer.
Darüber kann man dann auch noch sprechen, was denn das A-Element macht und was man damit machen kann.
Oder man kann auch in dem Wert des href-Attributs keine Seite angeben oder eine Sprungmarke oder ähnliches, sondern einfach JavaScript Void.
Also JavaScript Doppelpunkt Void unter den Klammern 0 oder auch nicht.
Das wirst du mir dann vielleicht erklären, was das macht oder was es nicht macht.
Und das ist etwas, das ich sehr oft sehe.
Aber es ist gar nicht so das Problem, dass dieses JavaScript Void, also für mich persönlich jetzt aus der Accessibility-Tester-Sicht, sondern viel eher das, wofür es steht.
Nämlich, dass das Element einfach falsch verwendet wird und dass eigentlich ein anderes Element verwendet werden sollte.
Und ich glaube, dass du vielleicht eine andere Sicht darauf hast, wie du es sagst, eine andere Meinung zu dem Ding.
Aber ich würde das eben gerne aus einer Accessibility-Sicht betrachten und das Thema auch ein bisschen größer machen, ein bisschen aufmachen und jetzt nicht konkret über dieses JavaScript-Void sprechen.
Magst du mir vielleicht mal nur ganz kurz erklären, was JavaScript-Void ist?
Weil ich weiß es tatsächlich gar nicht.
Ich weiß nur, dass es halt einfach da ist, damit dieser Link immer noch ein Link ist, aber nichts macht oder nicht das Default-Verhalten ausführt.
Aber was macht JavaScript Void an sich?
Nix?
Also es ist buchstäblich nix.
Das Ding ist das folgende.
Also erstmal, JavaScript-URL ist quasi, du machst da ein Eval rein.
Also nimm diesen String und füllen als JavaScript aus.
Was natürlich aus der Sicherheitsperspektive Chefs Kiss natürlich ist.
Schon mal ganz grundsätzlich.
Und dann gibt es da drin den Void-Operator.
Was der macht, ist, den wendst du halt auf einen Wert an, der da auf der rechten Seite steht.
Das wäre jetzt hier in dem Fall 0.
Und dann nimmt er diesen Wert auf der rechten Seite, macht damit nix und gibt und define zurück.
Äh, das ist ja eine richtig coole JavaScript-Funktion.
Ja.
Wofür?
Ähm, hey, äh, Luke ist ja der Experte, was dieses Pattern angeht.
Ich denke nur, okay, die schreiben da halt eben eine ganze Menge an Tokens rein, damit nichts passiert.
Jetzt verstehe ich das so richtig, weil ich frage mich halt eben bei der Motivation auch so, okay, das ist jetzt wirklich irgendwie so der längstmögliche JavaScript-Code, den ich mir zusammenreimen kann, der wirklich nichts macht und nicht offensichtliche Obfuskation ist.
Aber die hat ja keine Existenzberechtigung.
Ich meine, man könnte die noch kürzer machen, weil Void ist keine Funktion.
Shep, du hast das gerade Funktion genannt.
Es sieht, wenn du so schreibst, Void, Runde, Klammer auf, Null, Runde, Klammer zu, aus wie ein Function Call.
Ist aber keiner, weil es ein Operator.
Das ist wie Plus.
Das wendst du halt einfach auf den Wert an, da brauchst du keine Klammern für.
Aber du kannst die Klammern dahin machen, dann passiert halt nichts.
Ist halt wie, wenn du einen mathematischen Ausdruck klammerst, um die Ausführungsreihenfolge hinzumachen.
Das heißt, du könntest es sogar noch kürzer haben, indem du einfach Void-Leerschlag-Null machst, sparst du dir ein Zeichen.
Also es ist nicht nur irgendwie ein sehr seltsames Pattern, um ein Ziel zu erreichen, das fragwürdig ist, sondern ich hätte sogar an dem Pattern selber, wenn man es als akzeptabel hinnehmen würde, noch Verbesserungsvorschläge anzubringen.
Okay, man kann die Bad Practice optimieren, finde ich gut.
So sieht es mal aus.
Dann versuche mal deine Frage zu beantworten, warum es das überhaupt gibt, warum es überhaupt verwendet wird.
Und wie gesagt, ich würde da jetzt eher ein bisschen weiter ausholen.
Und gehen wir es mal Stück für Stück durch.
Ich frage jetzt euch beide, was macht etwas zu einem Hyperlink?
Also ab wann ist ein Hyperlink ein Hyperlink?
Also technisch oder philosophisch?
Ich wollte gerade sagen, soll ich jetzt irgendwie die Xanadu-Dokumentation konsultieren oder das gelebte Web?
Sehen wir es mal aus HTML-Sicht.
Welche Bestandteile muss es geben, damit etwas ein valider und barrierefreier Link ist?
So im Markup.
Also dann brauchst du halt das passende Element dafür und dann brauchst du halt eine Referenz auf das entsprechende Ziel, dass da halt eben dann sowas sein kann, wie eine Sprungmarke im Dokument oder ein anderes Dokument plus minus Sprungmarke.
Okay, wir haben ein bisschen konkreter.
Welches Element?
Also, hast das A-Element, hast das Link-Element, ist ja, glaube ich, auch sozusagen, also der Name ja schon sagt, ein solcher Link.
Und dann hast du wahrscheinlich noch irgendwo andere Grenzfälle, die man auch als sowas missverstehen kann, aber Punkt.
Das war, glaube ich, was ich sagen wollte.
Dann lassen wir mal Link aus, weil Link macht ja doch ein bisschen was anderes.
Also, wie ein Hyperlink, ein klassischer Hyperlink, den man klicken kann, so wie es Tim Berners-Lee damals sich vorgestellt hat und umgesetzt hat.
Das heißt, wir brauchen das A-Element, das ist mal dieser erste Zutat.
Dann sagst du, man braucht eine Referenz, aber diese Referenz könnte ich ja theoretisch auch erstellen, wenn ich das A-Element habe und OnClick drauflege.
Oder?
Weil ich könnte sagen A und dann OnClick und dort könnte ich dann sagen, bei OnClick bitte Location, Ahrefs, wo auch immer hin.
Aber da du das Ganze vorhin ja oft auf den Wirkungsbereich von HTML-Constraint hast, würde ich OnClick mal als JavaScript-Feature außen vor lassen wollen.
Okay, gut.
Genau, aber du willst wahrscheinlich darauf hinaus, dass der Link sozusagen Funktionalität, also seine ureigene Link-Funktionalität gar nicht in den Tag legen kann, wenn nicht das HREF-Attribut vorhanden ist.
Absolut, genau.
Das heißt, wir haben das A-Element, wir haben das HREF-Attribut, wo ich eben diese Referenz angehe.
Und was ist die dritte Sache, die ich brauche, damit das Ding auch barrierefrei ist?
Da muss Text drin stehen, damit du ja weißt, worauf du folgen kannst.
Genau, Text.
Der Text, der, also ganz kurz, vielleicht zur Erklärung, warum ich da jetzt so aushol.
Also habe ich vergessen zu sagen nämlich, diese Sachen, diesem JavaScript Void und auch ähnliche Kollegen und Kolleginnen von JavaScript Void, die sehe ich in fast jedem Audit, das ich mache.
Also Teil von meinem Job ist es, dass ich Webseiten auf Barrierefreiheit überprüfe.
Und das ist einfach sehr, sehr häufig.
Es ist ein sehr, sehr, ein sehr häufiger Fehler, der da gemacht wird.
Deswegen, glaube ich, kann es nicht schaden, ein bisschen Grundlagen sich anzuschauen, weil ich weiß, dass die HörerInnen von diesem Podcast grundsätzlich sehr ausgecheckt sind, aber es ist einfach so, es kommt so häufig vor, dass es, glaube ich, nicht so schlecht ist, wenn wir ein bisschen drüber reden.
Also, reden wir mal über die erste Sache.
Das A-Element, das Gute am A-Element ist, dass ich dadurch, dass ich ein semantisches Element habe, eine Möglichkeit habe in CSS, die alle zu stylen.
Das heißt, ich kann den A-Selektor verwenden zum stylen Und die zweite coole Sache daran ist, dass es mit einer impliziten Link-Rolle kommt, das heißt mit einer ARIA-Rolle Link und die wird auf dem Screen wieder angekündigt.
Das ist eine gute Sache.
Oder vielleicht auch eine schlechte Sache, wenn man es nicht richtig verwendet.
Das ist mal die erste Sache, warum wir das A-Element brauchen.
Das zweite ist dieses href-Attribut.
Du Schlepperts schon gesagt oder angedeutet, das macht einen Link erst zum richtigen Link.
Weil mit diesem href-Attribut bekomme ich den Link-State, den Visited, Active, Focus, Focus-Visible und Hover-State.
Zumindest die mal, mit denen ich dann auch in CSS arbeiten kann.
Das hat bestimmt damit zu tun, dass das ja, früher hat man die auch als Anker-Ziel benutzt.
Also indem man, glaube ich, ein A-Element mit Name irgendwo reingesteckt hat.
Also deswegen macht der Browser das wahrscheinlich, upgradet er das erst dann zu einem Role-Type-Link, wenn das HF-Attribut da ist, weil ansonsten ist es ja nur die Sprungmarke.
Würde ich jetzt denken, aber ich weiß es nicht.
Genau, dieses HREF-Adribut macht es in Wahrheit zu einem interaktiven Element, weil wenn ich jetzt ein A-Element habe ohne dem HREF, dann ist es auch nicht fokussierbar, weil es dann kein interaktives Element ist, weil es traditionell, hast du recht, so eine Sprungmarke ist, beziehungsweise ich glaube, wenn man jetzt in die Spezifikation reinschauen würde, dann würde dort stehen, dass es ein Platzhalter ist.
Also wenn ein A-Element kein HREF hat, dann ist es einfach ein Platzhalter für etwas, wo ein Link sein könnte.
Also ein Beispiel dafür wäre, ich bin auf einer Webseite Da gibt es einen Mitgliederbereich und da gibt es einen Link, der heißt Profil.
Du klickst drauf und du bist nicht eingeloggt und dann ist dieses Profil nicht verlinkt, sondern einfach nur ein A-Element ohne href, weil du nicht eingeloggt bist.
Und erst wenn du eingeloggt bist, dann ist das href-Attribut drauf und dann kannst du draufklicken.
Also das wäre sozusagen auch so eine Idee.
das Ding ist, dass manche Screenwider das Ding trotzdem als clickable ankündigen, obwohl da kein hardware der Boot ist und obwohl sonst auch kein JavaScript Event drauf ist.
Also ich würde das grundsätzlich eher vermeiden, das das Platzhalter zu verwenden.
Aber okay, dieses hardf macht es dann interaktiv zu einem richtigen Link.
Und die dritte Sache, accessible name, also sozusagen der Text, den kann man auf unterschiedliche Arten und Weisen angeben.
Man kann entweder Text einfügen, man kann Text einfügen und mit CSS verschwinden lassen oder man kann auch ARIA Label verwenden oder ARIA Label bei.
Grundsätzlich bin ich ein großer Fan davon, Sachen zu zeigen und Text einfach wirklich auszuschreiben und auch für ARIA User bedienen zu machen.
Das ist sozusagen die beste Variante.
Okay, gut.
Jetzt wissen wir mal sozusagen die Anatomie von so einem Link, was wir brauchen, dass wir einen richtigen Hyperlink erstellen.
Und dann ist die Frage, was macht ein Link?
Ihr habt es schon gesagt, zu Sprungmarken.
Ich kann ihn zu einer anderen Seite verlinken.
Was noch?
Ich meine, der macht ja den Hypertext eigentlich erst zum Hypertext.
Ich meine, wenn du nicht den ganzen Verbindungskram hast, ist das ganze Jahr nur ein spicy PDF quasi.
Ja, genau.
Also zusammenfassend kann man sagen, den Link verwende ich dann, wenn ich irgendwo hinlenken möchte, zu einer anderen Stelle.
Zu einer anderen Stelle innerhalb der Seite, innerhalb der Website oder innerhalb des Betriebssystems, kann man auch sagen.
Weil er kann zu einer Sprungmarke linken, er kann zu einem Dokument linken, zu einer externen Seite oder auch die Mail-Applikation aufmachen.
Oder auch, ich glaube, innerhalb des Browsers geht das auch, wenn ich keine Mail-App habe, dass er dann irgendwie automatisch Gmail öffnet.
Ich denke schon, dass es geht.
Register-Protokoll-Händler, wenn du da dein eigenes Protokoll dran registrieren willst, dass Klick auf irgendwas Doppelpunkt dich auf eine bestimmte Web-App führt.
Das ist sozusagen der Gmail-Mechanismus als Webstandard generalisiert.
Genau.
Dann zum Beispiel die Phone-App, also die Telefon-App in meinem Smartphone, wenn ich Tel verwende, das heißt, wenn ich da draufklicke, bringt er mich auch irgendwo hin.
Das heißt, den Link verwende ich immer dann, wenn er mich irgendwo anders hinführt.
So merkt man sich am einfachsten, wenn man einen Link verwendet.
Ja.
Gut, jetzt wissen wir, was der Link macht.
Und die nächste Sache ist, wie interagiert man mit so einem Link?
Oder was bringt mir der Link alles im Sinne von der User Experience oder in der Interaktion?
Ich kann ihn klicken, dann bringt er mich dort eben hin.
Ich kann rechts klicken, da kann ich ein paar Sachen machen, wie zum Beispiel einen neuen Tab öffnen oder den Link kopieren.
Ich glaube, Mittelklick gibt es auch.
Ich verwende seit 15 Jahren keine Maus mehr, Aber wisst ihr das?
Ich glaube, Mittelklick macht auch irgendwas Cooles.
Ich glaube.
Mittelklick ist das Gleiche, meine ich.
Ich habe auch keine Maus, aber ich unterliebe mich letztens auf dem.
Und der meinte das.
Ich musste gerade tatsächlich überlegen und ausprobieren, was es macht.
Aber macht jetzt bei mir zumindest in meiner Konfiguration neuen Tab auf, statt im gleichen Fenster öffnen.
Ah ja, okay, cool.
Einen Link kann ich fokussieren, das ist sehr angenehm.
Also darauf, wenn er so ein HDF-Attribut eben hat, kann ich ihn fokussieren.
Mit dem virtuellen Cursor im Screenreader kann ich ihn auch erreichen und er sagt mir dann Link und liest auch den Text vor.
Das heißt, da wird diese Rolle vorgelesen, der Text wird vorgelesen.
Wenn ich mit dem Keyboard arbeite, kann ich ihn aktivieren bei Enter, also wenn ich Enter drücke, aber nicht, wenn ich Space drücke, oder wenn ich Space drücke, dann scrollt die Seite.
Wenn ich mit einem Screenreader arbeite, gibt es auch Shortcuts, also ich kann gewisse Shortcuts in meinem Screenreader drücken, um dann von Link zu Link zu springen beispielsweise, oder ich kann mir auch Links auflisten lassen, also ich kann in Voice-Over gibt es im Roadtour zum Beispiel, da kann ich sagen, bitte liste mir alle Links auf und dann springe ich direkt zu einem Link.
In Mobilienscreen-Midern gibt es Gesten, da kann ich zum Beispiel sagen, bei Swipe Up und Down soll er von Link zu Link navigieren, das ist auch etwas, was ich machen kann, oder es gibt auch Kommandos über Sprachsteuerung, wo ich sagen kann, bitte markiere alle Links oder klicke Links so und so.
Okay, jetzt fragt ihr euch, was soll jetzt diese Lehrstunde, warum erzählst du uns das alles, wir wissen das ja eh oder zum großen Teil, weil JavaScript Void oder diese Nutzung von diesem JavaScript Void oder von diesem Void-Operator, wie ich jetzt heute gelernt habe, macht irgendwas kaputt oder macht was kaputt.
Der Link hat immer noch einen Accessible Name, das heißt, es bedient halt die Erwartungshaltung nicht, die du möglicherweise hast.
Inwiefern?
Was sind so Dinge, die dir einfallen würden?
Oder warum reden wir überhaupt?
Warum bin ich überhaupt da?
Was macht mich so fertig daran?
Ja, also ich meine, du hast natürlich schon auch deine Accessibility-Perspektive auf die Dinge.
Also ich sage mal, Sehende können ja durch entsprechende Gestaltung dieses Elements auch davon überzeugt werden, dass das möglicherweise gar kein Link sein soll.
Weil das eben nicht einfach ein Text ist, der unterstrichen ist und dann noch blau oder was, sondern das ist halt so eine eckige Box und sieht damit einen Button ähnlich und dann merken wir das möglicherweise nicht.
Wir merken es vielleicht in dem Moment, wo wir Rechtsklick in neuen Fenster öffnen wollen oder so Sachen machen.
Ich hatte das zum Beispiel hier bei GitLab, bei der vorherigen Version.
Jetzt haben die ja wieder eine neue Version rausgebracht.
Da geht es wieder, aber da kann man dann keine Tickets aus dem Übersichtsbord in einen neuen Tab öffnen.
Da fällt es dann auf.
Aber wenn du natürlich aus der assistiven Technologiesicht drauf schaust, dann wird dir eben ein Link versprochen.
Dann gehst du drauf, drückst Enter und nichts passiert.
Oder es passiert irgendwas, aber wahrscheinlich nimmst du es auch nicht mal als wahr, weil auch da wahrscheinlich das Ganze nicht so ausgezeichnet ist, dass du es als assistiver Technologie-Benutzer oder Benutzerin mitbekommst.
Naja, und bei den Sehenden doch aus.
Ich habe es dazu noch nie ausprobiert, aber wenn ich jetzt mit Mitteltaste, ich brauche jetzt mal irgendeine Art von Formular irgendwo, warte mal, Google-Suche, weil wenn ich jetzt einen Link habe und ich drücke da mit meiner mittleren Maustaste drauf, wie ich ja gerade gelernt habe, mache ich ja das Ding in einem neuen Tab auf.
Das ist ja wahrscheinlich bei einem normalen zum Beispiel Formularsubmit nicht der Fall.
Oder?
Submit dich dann das Formular in einem neuen Fenster?
Keine Ahnung.
Das musst du natürlich ausprobieren.
Das muss ich jetzt gleich ausprobieren.
Ich war gerade dabei, was anderes auszuprobieren, aber das probiere ich gleich auch noch aus.
Ich höre euch auch zu.
Aber der Punkt ist tatsächlich der, dass da ja tatsächlich doch in diesem Aktivierungsverhalten von ich drücke da jetzt drauf auf die ein oder andere Weise, sehend oder nicht, mit der Maus oder ohne, da ist ja ein Verhalten dran.
Und da gibt es ja sicherlich zwischen dem Standard-Link-Verhalten und dem Standard irgendeine Art anderes Widget-Verhalten auch irgendwelche Unterschiede, die im Zweifelsfall ja wahrnehmbar sind.
So wie zum Beispiel, ich kann plötzlich ein Formular in einem neuen Fenster-Submitten, was ich vielleicht vorher nicht konnte.
Wäre jetzt meine Theorie, ich probiere es eben aus, aber das war jetzt nur so mein Statement, dass nur weil es halt irgendwie in den offensichtlichen Use-Cases für die Sehenden untereinander anzugleichen ist, dass trotzdem nicht notwendigerweise das exakt gleiche Verhalten ist und das kann dann schon irgendwie so ein bisschen einen Realitätsriss machen.
Voll.
Also ihr habt beide recht, finde ich, weil einerseits ist es so, dass ich als sehender Touch-User oder Click-User, merke ich es nicht so oft.
Also ich klicke drauf und es macht halt JavaScript und da merke ich nicht so den riesen Unterschied, ob es jetzt ein Button ist oder ein falsch verwendeter Link.
Das merke ich nicht so oft.
Wann ich es merken würde, wäre zum Beispiel, wenn ich das, wenn ich einen Rechtsklick mache und das Kontextmenü öffnet sich.
Weil in Chrome beispielsweise sagt dann immer noch, dass der den Link in einem neuen Tab öffnen kann, obwohl es eigentlich kein Link ist, weil meistens wird das Ding ja als Button verwendet.
Und das macht dann keinen Sinn.
Und ich glaube, der macht einfach gar nichts oder macht dann so ein Blank-Fenster auf.
Also ein leeres Tab.
Bei Firefox ist es so, dass bei Rechtsklick zeigt er mir ein anderes Kontextmenü an.
Also er sagt zwar nicht, dass ich das in einem neuen Tab öffnen kann, was gut ist, würde ich sagen, weil es ja eigentlich kein richtiger Link ist.
Aber er sagt zum Beispiel, ich kann den Link kopieren oder das Bookmark kopieren oder den Bookmarken, den Link.
Und in Safari kann ich auch den Link kopieren.
Das heißt, da haben wir schon mal, wie du gesagt hast, es gibt so einen Bruch mit den Erwartungen der UserInnen.
Und wirklich evident ist es dann, wenn ich streamere.
Ja, Mitteltastentheorie habe ich gerade verifiziert.
Mitteltastentheorie stimmt tatsächlich auch.
Also da wird auch ein Link in einem neuen Fenster aufgehen und ein normaler Button wird es nicht machen, weil macht ja keinen Sinn.
Genau.
Und wirklich offensichtlich wird es dann, wenn ich eben mit dem Screenreader arbeite oder mit dem Keyboard.
Weil dem Screenreader-User kündigt das Screenreader an, das ist ein Link.
Und die Erwartung ist, okay, der Link bringt mich jetzt irgendwo hin.
Tatsächlich tut er das aber nicht.
Das heißt, ich komme da jetzt hin und normalerweise wird eben JavaScript ausgeführt.
Das heißt, es passiert irgendwas, ich erwarte, ich werde irgendwo hingeführt, ist aber nicht passiert.
Dann ist es außerdem so, wie ich vorher schon gesagt habe, Links werden aufgelistet oder können aufgelistet werden, wie zum Beispiel in diesem Rotor in VoiceOver und so ein Link würde auch aufgelistet werden, das heißt, der ist da drinnen, ich kann mir diese Links anzeigen lassen und direkt zu dem Link springen und habe dann wieder die Erwartung, ich kann dann irgendwas mit dem Link machen, der führt mich irgendwo hin, tatsächlich ist es aber kein Link, sondern ein Button oder sonst irgendwas, nur ich sehe es halt normalerweise nicht, so die meisten Streamler nutzen sie mir.
Und das gleiche gilt auch für Shortcuts und für Gestennavigation.
Das heißt, mit dieser Gestennavigation, wenn ich von Link zu Link springe, wische ich rauf und runter und komme dann aber zu diesen komischen Fake-Buttons, Netfish, Netflash, Links, Buttons, Dingern, Hybrids, was auch immer.
Dann wird dies auch eben auch zur Sprachsteuerung aus, weil es kann auch sein, dass ich bei Sprachsteuerung, da gibt es ja unterschiedliche Varianten, wie ich navigieren kann, aber eine ist auch, dass ich sage, ja, bitte klick den Button oder markiere alle Buttons und dann würde der nicht markiert werden, weil so dein Link ist.
Und für Keyword-UserInnen ist es dann so, dass sie den Button fokussieren.
Es sieht aus wie ein Button, aber funktioniert nicht 100% so, weil bei einem Link kann ich mit Enter den Link aktivieren, mit Space nicht.
Bei einem Button kann ich mit Enter und Space aktivieren.
Also da haben wir auch wieder so einen Bruch mit den Erwartungen.
Und deswegen stört mich das, wenn man das verwendet, weil es wird meistens verwendet statt einem Button.
Also es sollte eigentlich das Button-Element verwendet werden, Weil das Button-Element, das führt mich normalerweise nicht irgendwo hin, sondern der Button macht eigentlich zwei Dinge.
Ein Formular absenden oder irgendein JavaScript ausführen.
Das mich vielleicht auch streng genommen wohin bringt, zum Beispiel in den Dialog, aber halt wieder anders.
Ja, also zumindest kein Full-Page-Sprung oder sowas, sondern irgendwie partiell neue Inhalte, die dir gezeigt werden.
Ja, also ich erzähle mal kurz aus dem Projekt, in dem ich gerade bin, da haben wir natürlich auch Komponenten und wir haben eine, so eine Komponente, die ist so ein, sozusagen, die wird bei uns immer genutzt, unabhängig davon, ob es ein Link oder ein Button ist.
Und die nimmt eben die Form eines Buttons an in dem Moment, wo kein href-Attribut übergeben wird und ansonsten wird es eben ein Link.
Das kann man eigentlich super in eine Komponente kapseln, das Ganze.
Und ich könnte mir vorstellen, dass das, was du da siehst mit dem JavaScript Void Null, dass das vielleicht auch Unzulänglichkeiten des Cont-Management-Systems oder der Komponenten-Bibliothek ist.
Sowas wie, hier kann man nur eine Liste mit Links quasi ausgeben und dann so, ja kacke, aber da bräuchten wir jetzt irgendwie, weil das der Login-Knopf ist, einen Button, was machen wir jetzt?
Und dann fängt man eben an so rumzufuschen und rumzustimpern und sich zu behelfen, letztendlich anstatt die Lösung irgendwie, die richtige Lösung zu wählen, weil das einfach einen Umbau erfordert.
Bevor ich noch was zu dieser Hybrid-Komponente sagte, die ihr habt, möchte ich kurz da noch was dazu sagen.
Das ist ein Grund, das kann ein Grund sein, also das haben wir ja ganz oft, wenn wir sozusagen irgendwelche, wie heißt das, Constraints haben, die vorgegeben werden durch Technologie, durch ein CMS oder durch irgendein System oder was auch immer, dass ich da einfach kreativ werden muss, um dann eine Lösung zu bekommen.
Aber was glaubt ihr, was ist denn noch ein Grund, warum Leute das machen?
Warum sie einen Link hernehmen und JavaScript Void reinschreiben?
Sie machen React und müssen alles aus Diffs bauen?
Und könnte nicht in der Lage ein HTML-Element nennen.
Pass auf, was ist denn?
Diff bauen heißt ja nicht, dass du wirklich das Diff verwenden musst, weil natürlich können die Leute mehr HTML-Elemente verwenden, aber es ist so, das hatte ich bei was ganz anderem gestern, glaube ich, mal gesagt, es gibt Werkzeuge, die sich ja speziell dazu eignen, dass man aus Elementen Dinge macht, für die sie eigentlich nicht gedacht waren, weil diese Tools aus einer Zeit kommen, wo das mehr nötig war.
Das ist halt so das klassische Legacy-Frontend-Framework-Reaktor-Konsorten.
Und wenn man solche Dinger benutzt und sozusagen die Perspektive auf die Realität ist, diese blöden Browser können nichts, weil ich keine Ahnung habe.
Und ich muss denen alles irgendwie händisch beibiegen.
Und ich bin sowieso da drin, alles in JavaScript zu machen.
Und ich habe noch Zeitdruck und meine Ausbildung war vielleicht nicht die beste.
Dann mache ich das vielleicht auch einfach aus Unwissenheit.
Oder weil ich mich halt in einem Sektor der Realität bewege, wo das halt nicht so absurd ist, wie es uns dreien jetzt erscheint.
Also meine These wäre wahrscheinlich, also oder früher war es ja so, dass das richtige Element in dem Fall wäre ja der Button und dass der einfach schwieriger zu gestalten war, zumindest früher.
Ich weiß nicht, bei Safari musste man ja auch die Appearance, glaube ich, umschalten.
Ansonsten hat er da so sein eigenes Ding gemacht.
Ich weiß nicht, ob das noch der Fall ist.
Ich glaube wahrscheinlich schon lange nicht mehr.
Genau, ich habe da auch kein Problem mit.
und vielleicht, manche Leute wissen auch gar nicht, dass es einen Button gibt.
Und dann, was hat man früher benutzt?
Input-Type-Button.
Das ist das, was die Leute noch im Kopf hatten.
Und dann haben die wahrscheinlich gesagt, das kann ich jetzt da ja nicht, das ist ja kein Input.
Dann nehme ich halt ein A.
Aber so, dass es Button gibt, also seit 20 Jahren oder so, das ist denen irgendwie noch nicht in den Sinn gekommen.
Oder sie haben halt sozusagen eine deiner Komponente, wie du sie beschrieben hast, ist aber in schlecht.
Weißt du, das Ding heißt dann irgendwie so Button, Komponente und das folgt irgendwie so dem internen Styleguide, aber es ist halt eben implementiert auf die bescheuerstmögliche Weise aus irgendwelchen Gründen, weil bla, wir haben halt Wichtigeres zu tun.
Ja, ich glaube, das kann so auch sein.
Ich glaube auch, gebe ich dir auch recht, Shep, dass es ein Wissensproblem ist und auch so ein bisschen eine falsche Vorstellung, was Barrierefreiheit oder Semantik bedeutet.
Also, dass sozusagen so ein bisschen die Denke ist, ja, Button ist ein Formular abschicken da und wenn ich was barrierefrei machen will, dann muss ich einen Link verwenden, weil sonst ist es halt nicht barrierefrei oder sowas.
Das sehe ich auch.
Und ich sehe auch dieses Button-Styling-Problem.
Weil, wenn wir ganz ehrlich sagen, es war eine Zeit lang wirklich schwierig, Buttons browserübergreifend zu resetten oder das Styling zu resetten.
Weil du hast eh schon angesprochen, man brauchte Appearance bei Safari, man brauchte in Firefox hatte man dann diese...
Diese Focus-Geschichte, ja.
Genau, wo es einen äußeren, einen inneren Ring gab und es war einfach schwierig, dieses Zeug zu stylen.
Das ist jetzt heutzutage überhaupt nicht mehr so.
Es geht super easy, man selektiert das Button-Element, nimmt die All-Eigenschaft und setzt sie auf unset.
Dadurch werden einfach alle Eigenschaften, alle, die es so gibt, werden entweder auf den initialen Wert, so wie er in der Spezifikation definiert ist, gesetzt oder erben dann von einem älteren Element.
Man könnte auch Initial nehmen, aber in meiner Erfahrung ist unset die bessere Variante, weil dann solche Sachen wie Farbe und Schriftart auch übernommen werden.
Und das Einzige, was man dann noch machen muss, ist dann wieder die Fokus-Ziele wieder zurückbringen, weil die werden natürlich auch resettet.
Aber an sich mit dem All kommt man sehr weit.
Und dann, wenn einem was fehlt, dann kann man immer noch hergehen und sagen, was weiß ich was, Color Inherit oder Font Inherit, was auch immer ich dann doch vielleicht irgendwie erben möchte.
Das funktioniert super und funktioniert auch browserübergreifend.
Und ich glaube, dass das der Grund ist, warum es diese JavaScript-Boards-Geschichten gibt oder ähnliche Lösungen.
Und vielleicht noch zu dieser Hybrid-Komponente, die ihr verwendet.
Ich habe die schon öfter gesehen, also ihr seid da nicht die Einzigen.
Ich glaube, das kommt entweder von irgendwelchen Component-Libraries oder es ist etwas, eine Idee, die viele Leute schon hatten.
Und ich finde das grundsätzlich okay, aber wenn ich lustig bin, kann ich immer noch ein leeres Hash oder JavaScript Void oder was auch immer übergeben und dann habe ich erst wieder einen Link.
Und eine Sache, die mir ganz häufig unterkommt, ist, dass diese Komponenten.
Versuchen, viel gescheit zu machen, aber dann halt irgendwie ein bisschen zu viel tun.
Also oft ist es dann so, dass diese Links oder Buttons, die da ausgespuckt werden, dann Attribute haben, die sie eigentlich gar nicht brauchen.
Also auf einem Button ist dann plötzlich irgendwie ein Tab-Index 0 oben und nochmal ein extra Roll-Button und ein ARIA-Disabled-Falls und so weiter, weil der einfach sehr gern vergessen wird, Zeug einfach nicht auszugeben, wenn es nicht notwendig ist.
Das ist jetzt per se nicht unbedingt ein Problem, aber es macht einfach den Code schwerer lesbar und fehleranfälliger, wenn der Zeug ist, das man eigentlich gar nicht braucht, das implizit schon da ist.
Aber grundsätzlich an sich, finde ich, habe ich nie irgendwas gegen so eine Komponente.
Also wenn sie funktioniert, wenn sie richtig gemacht ist, dann passt das schon.
Aber es ist natürlich komplex, weil Links und Buttons sind jetzt nicht die einfachsten Elemente, würde ich sagen.
Also da kurz jetzt Werbung, ich habe ein Buch geschrieben, das Web Accessibility Cookbook, kauft es alle.
Da habe ich zwei Kapitel nur über diese Elemente.
Ich habe ein ganzes Kapitel nur über Links und ein ganzes Kapitel nur über Buttons.
Ich bin eh immer noch komplett fertig, dass sie das durchgehen haben lassen.
Aber es gab einfach so viel zu erzählen über diese beiden Elemente alleine.
Weil sie eben so komplex sind und so versettbar sind.
Du warst ja auch mal bei uns zu dem Thema mit deinem Buch.
Wollte ich nur noch mal anmerken und verlinken wir auf jeden Fall in den Shownotes noch.
Vielen Dank.
Genau, also du hast recht.
Also genau, was man ja auch machen kann, ist, dass man im Prinzip nur so eine Art quasi Proxy-Hybrid- Komponente hat, die dann am Ende basierend darauf, ob du halt ein href als Attribut übergibst, dann hintenrum umschaltet und quasi dann die Button-Komponente reinzieht oder eine Link-Komponente und dann kann man sich sozusagen in den jeweiligen Unterkomponenten, also dann kann man da jeweils die Logik, die zu dem Element passt, ganz gut kapseln.
Also, ja.
Mhm.
Voll.
Und Peter, wie wir darüber gesprochen haben, wie wir beschlossen haben, diese Sendung zu machen, hast du ja gesagt, du könntest sehr viel auch über dieses Void erzählen.
Bist du schon fertig oder hast du da noch Dinge, die du darüber erzählen kannst?
Kommt das sonst noch irgendwo vor?
oder was ist?
Ich habe jetzt recht eindeutig ausgeführt, was mein Problem ist damit.
Ja, naja, es ist halt Cargo-Kult.
Es ist halt Cargo-Kult ist es.
Also die Idee von Cargo-Kult ist, also die Gestehungsgeschichte ist, wo das Wort herkommt, ist, früher war Zweiter Weltkrieg und dann hast du irgendwie im Pazifik als Amerikaner deine ganzen Airbases gebaut, damit du Japan in Schutt und Asche legen kannst und dann wohnten da halt schon Leute und die haben halt eben gesehen, wie da.
Sachen durchgeführt wurden.
Leute sitzen in irgendwelchen Control Towers und winken Flugzeuge ein und plötzlich kommen die und werfen irgendwelche Kisten ab und dann ist da tolles Zeug drin.
Und nach dem Abzug des Militärs, so geht die Erzählung, haben die Leute dann sozusagen diese Handlungen des Militärs da als Ritual verstanden, womit man dann vereinfacht gesagt heraufbeschwören kann, dass dann wieder irgendwelche Kisten abgeliefert werden.
Und dann ist das halt der Cargo-Kult.
Also eine Religion, auf das das Frachtflugzeug wieder vorbeikommen möge.
Inwiefern das alles stimmt, weiß ich nicht, aber da kommt halt so dieses, da kommt das Wort her.
Und was man damit halt eben so umschreibt, sind einfach so Patterns, wo man irgendwie, man sieht was und das funktioniert, für gewisse Werte von funktionieren.
Man versteht nicht, was es macht, aber man fängt halt eben an, das zu reproduzieren.
Und das ist halt, glaube ich, einfach so ein ganz großes Problem in moderner Web-Entwicklung.
Ich meine, du hast ja auch, ihr beide habt ja gerade sehr viel davon erzählt, ja, früher haben wir das mal gebraucht und früher war das mal notwendig.
Aber wenn man dann einfach nur zur Kenntnis genommen hat, dass man das früher so gemacht hat, dann hat man das nicht notwendigerweise verstanden und denkt dann vielleicht einfach, man bräuchte das immer noch und setzt das halt sofort mit eben der Appearance und ähnlichen Kisten.
Und genauso ist es mit diesem JavaScript-Fort.
Leute, es gibt tausend Möglichkeiten, den gleichen Effekt zu erzielen.
Nämlich, wenn dieser Link aktiviert wird, mach halt nix.
Also ich habe vorhin mal so ein bisschen Code-Golf gespielt.
Das Einfachste, was man wirklich machen könnte, statt JavaScript-Doppelpunkt-Void in runden Klammern 0, ist einfach JavaScript-Doppelpunkt 0.
So, weil wenn man halt eben den Spezifikationstext liest und sich anschaut, was das macht, guckt halt nur so, okay, da kommt ein JavaScript-Ausdruck raus, kann ich den irgendwie als True falsch verstehen?
Die Zahl 0 reicht schon, um da ein False draus zu machen.
Da passiert halt einfach nix.
Das ist halt einfach so, also so wie dir das Messer in der Hose aufgegangen ist, aus Accessibility-Sicht geht mir halt das Messer in der Hose aus so der Großperspektive heraus, weil das halt eben genau das Ding ist.
Das macht was.
Ich kann verstehen, warum man das früher haben wollte und ich kann verstehen, warum man in einem gewissen, so in einer gewissen Position im Koordinatensystem aus ich weiß, was, ich befinde mich auf dem Zeitstrahl, ich habe diese Constraints, muss mit diesen Komponenten arbeiten, Black X, warum man so ein Verhalten immer noch würde reproduzieren wollen.
Auch wenn es Blödsinn ist, aber vielleicht will man das, aber dann ist das immer noch nicht der richtige Gewicht, das zu reproduzieren.
Und das lebt einfach nur durch dieses Cargo-Kult-Copy-und-Paste-Behaviour weiter, wo ich halt wirklich, wenn ich das sehe, wirklich weiß, du hast halt gar nichts verstanden.
Aus den Gründen, die du genannt hast, aber auch aus den sozusagen, aus der Implementierung selber, erkenne ich halt eben, du weißt gar nicht, was dir vor sich geht, oder?
Das ist das Ding.
Mhm.
Und das bringt mich auch zum wichtigen Punkt, der hier nicht fehlen darf, und zwar, was ist die Lösung oder wie kommt man dazu, dass man vielleicht dann doch irgendwie das richtige Element verwendet.
Man kann sich natürlich diesen wundervollen Podcast anhören oder auch mein Buch kaufen oder sonst irgendwie auf MDN schauen oder in der Spezifikation oder was weiß ich nicht.
Aber eine so ein bisschen grundlegende Herangehensweise, die uns ein bisschen fehlt, ist, dass man sich die Frage stellt, was wir die einzelnen Elemente in HTML überhaupt bringen.
Also ich höre oft mit Kunden-Terminen, soll man da jetzt einen Link verwenden oder einen Button?
Oder soll man da jetzt ein Artikel-Element verwenden oder Section?
Oder soll man hier eine Liste verwenden oder ist die Liste vielleicht blöd?
Und was ich ganz ungern mache, ist dann zu sagen, okay, hier Artikel, hier Liste, hier Link und hier Button.
Weil das bringt nichts.
Die Leute setzen dann in dieser einen spezifischen Frage dann das genauso um, wie es gehört.
Aber tatsächlich wissen tun sie nichts, warum es so ist.
Und eine Frage, die ich mir dann immer stelle oder die ich den Leuten dann sozusagen auch mitgebe, ist die Frage, was bringt mir das Element?
Also was gibt mir...
Ein Link.
Und deswegen habe ich das heute auch so ausgeführt, ein bisschen ausschweifend, weil einfach ganz viele Leute nicht wissen, was macht der Link überhaupt?
Was macht der alles und welche Konsequenzen hat das, wenn ich einen Link verwende oder nicht verwende?
Oder wie ist es bei dem Button?
Und genauso auch diese Frage mit Artikel und Sektion, weil ich habe selber auch ganz lange nicht gewusst, wann fände ich das eine, wann fände ich das andere?
Aber wenn man den Research betreibt und einfach nur herausfindet, okay, das sind die Features von diesem Element, das sind die Features von diesem hier, das sind die Pros und Cons, dann kann man diese Entscheidung viel einfacher treffen.
Und ich glaube, wenn man dann dieses Bewusstsein hat, weil oft fällt auch das Bewusstsein, was eher das größere Problem ist, aber wenn man dieses Bewusstsein hat für die Elemente, die man da verwendet, dann kann man sich diese Frage stellen und dann tut man sich auch ein bisschen einfacher, dann die richtige Antwort zu finden.
Ja, aber es wird einem halt auch schwer gemacht durch diese Tools, die einen halt wieder davon abhalten.
Weil wenn du halt grundsätzlich alles durch Membranen von Abstraktionen wahrnimmst, klar, ist es dir immer noch möglich, das im Kopf zu behalten, so mit welchem Element habe ich hier am Ende zu hantieren oder sowas.
Du kannst natürlich einfach am Ende in den Output gucken, aber wenn du halt jetzt wirklich irgendwie, keine Ahnung, den Standard-Worst-Case-React-Fall hast, wo du halt.
Klar, ein normales HTML-Element irgendwo reinpflanzen kannst, aber wenn du wirklich irgendwie Features klopst und Pages klopst, dann machst du das ja nicht, sondern du kombinierst ja einfach so den Page-Header und den Content-Banner und irgendwie so die Card-Komponente und sowas und hast ja im täglichen Arbeiten wesentlich weniger direkten Durchgriff darauf.
Und ja, du kannst dann immer das machen und du kannst immer gucken, was passiert da gerade, aber du musst halt eben aktiv daran arbeiten.
Und diese Tools halten dich ein bisschen davon ab, diese Perspektive einzunehmen oder machen es dir zumindest schwerer, dass du halt da viel leichter einen Drift hinkriegst zwischen dem, was jetzt richtig wäre.
Und wenn du jetzt jemanden grillen würdest und hinsetzen würdest, ey, was für ein Element soll das sein, würden die eventuell die richtige Antwort geben.
Aber dieser ganze Abstraktionsberg macht halt gerade so viel Reibungsverlust da rein, dass man sich denkt, ach komm, passt schon, ich habe Wichtigeres zu tun.
Ich glaube, das ist auch ein wichtiges Problem.
Absolut.
Oder ich stelle mir die Frage erst gar nicht vor, ich verwende halt die Komponente.
Weil das ist jetzt irgendwie Thema für einen eigenen Podcast, würde ich sagen.
Sozusagen dieses ganze Pattern-Library- und Framework-Thema.
Soll ich sowas einfach verwenden oder macht es vielleicht doch Sinn, selber was zu schreiben?
Ich glaube, dazu hast du auch Mehrungen.
In der Realität ist es so, dass ganz viele Leute, und vermutlich jetzt nicht ein Großteil der Menschen, die hier zuhören, aber sozusagen für ganz viele Leute bedeutet ja Web-Development, wir entscheiden uns für Library XY.
Klopfen die auf gewisse Features ab und dann verwenden wir die halt und fertig.
Also da wird oft gar nicht hinterfragt, was dahinter steckt oder ob das denn so passt.
Man muss dann halt auch einfach darauf vertrauen, dass es so ist.
Und das ist ein bisschen die Schwierigkeit, die ich mit Pattern-Libraries.
Also ich sage jetzt überhaupt gar nichts dagegen, das ist ganz normal.
Eine ganz normale Vorgehensweise eine aus Effizienz und aus ökonomischer Sicht nachvollziehbare.
Aber es ist einfach die Realität und.
Das ist auch ein bisschen ein Problem.
Ja, ich glaube auch bei uns, also ich glaube, das macht ja einen Unterschied, ob du, also ich sage ja immer, es gibt einen Unterschied, ob du bei einer Agentur arbeitest oder ob du eben Produktentwicklung machst.
Ich glaube, bei einer Agentur, da zählt eben wirklich auch schnell, effizient und irgendwie auf den Punkt abliefern.
Und ich kann mir vorstellen, dass man in so einem Kontext einfach durch den Projektrahmen dazu gezwungen ist, dann eben diese Kompromisse einzugehen und die Leute das vielleicht sogar auch wissen.
Aber ja, was machst du dann?
Also du hast irgendwie eine Library, die macht im Grunde größtenteils, was du brauchst.
Alle finden es geil.
Du siehst, aber so Markup ist nicht so richtig, so wie du es gerne hättest.
Was machst du dann?
Also patchen wirst du das sicherlich nicht.
Einen Pull-Request-Submitten, hast du auch die Zeit nicht für und es dauert, bis es drin ist und dann beißt du eben diesen sauren Apfel und hoffst einfach, dass das nächste Projekt dann eben nicht diese Library braucht oder wie auch immer.
Versuch mal sowas zu argumentieren nach oben hin.
Also da ist etwas, es funktioniert, aber es passt halt nicht für ein paar Leute oder es könnte eigentlich besser sein.
Also das ist auch ganz schwer, das haben ja ganz viele Leute auch das Problem, dass sie das einfach nicht, sozusagen die Kosten und um die Zeit, die dafür aufgewendet werden muss, argumentieren können nach oben hin.
Ja, absolut.
Und man muss auch dazu sagen, dass es halt einfach, je öfter ich bei Firmen bin und je mit mehr Firmen ich zusammenarbeite, desto mehr erkenne ich, dass es einfach sehr unterschiedliche Betrachtungsweisen gibt, was Web-Development überhaupt ist oder wie das funktioniert und was es bedeutet.
Weil wir drei und vermutlich auch der Groß...
Tatsächlich behaupten, das, was die meisten Leute heutzutage als Web-Development bezeichnen, keins ist, sondern tatsächlich ein Gegenentwurf, der technisch auf Web-Development basiert, aber eigentlich so von der Sicht auf die Realität ein Gegenentwurf ist.
Inwiefern Gegenentwurf?
Du kannst ein React und ein Angular benutzen?
Ja, du kannst ein React und ein Angular nehmen und das basiert auf Web-Technologie.
Da kommen am Ende auch Diffs raus.
Aber es ist halt einfach eine ganz andere Art des Arbeitens, des Denkens, generell so der der, wie strukturierst du überhaupt irgendwas?
Allein schon irgendwie so das Datenmodell von wegen, was machst du jetzt mit dem User-Interface?
Gehst du da jetzt so jQuery-Style hin und hackst da so lange auf dem DOM drauf rum, bis das aussieht, wie du willst?
Oder machst du so den großen Entwurf mit, alles fließt halt irgendwie aus einer zentralen Datenquelle runter und das UI ist bloß sozusagen eine Nebenwirkung von irgendwie, bist du eingeloggt oder nicht?
Und das ist tatsächlich ja was, weil das ist, was ich vorhin schon meinte mit so meinen Abstraktionsschichten, die dir das wahrnehmen, der darunterliegenden Schichten halt schwieriger machen.
Du könntest halt Vanille-Rieger drauf sein und dann hast du einen besseren Durchgriff darauf, aber hast halt andere Trade-Offs, nämlich du musst das Ding so nehmen, wie es ist.
Oder du nimmst halt tatsächlich irgendwie so eins von diesen Legacy-Frontend-Frameworks und die machen dir auf eine gewisse Weise das Leben leichter, weil die natürlich auf grüner Wiese entworfen sind und deswegen per se erstmal mit weniger Legacy-Laster herkommen.
Da ist keine bescheuerte Idee aus Netscape-Zeiten noch drin oder so.
Alles schön und ordentlich und TypeScript und hast du nicht gesehen.
Aber eigentlich ist es halt ein Gegenentwurf, weil in dem Moment, wo du sagst, ich mache jetzt alles mit React, sagst du halt eben auch, okay, Benutzung von der Webplattform selber ist halt mit dann kostenverbunden.
Du kannst nicht einfach so ein Dialog-Element ohne weiteres in React reinwerfen, weil einfach das imperative Auslösen von einem Modaldialog schon was ist, was einfach in der Welt dieses Frameworks nicht vorkommt.
Und das ist, was ich mit Gegenentwurf meine.
Okay, das basiert darauf, aber es geht halt davon aus, dass wir die Welt auf eine ganz andere Art und Weise konfigurieren und dann ausgehend davon uns ein leichteres Leben machen.
Aber das geht halt wirklich nur, wenn du die Realität auf, wie gesagt, komplett umkonfigurierst.
Deswegen Web-Development.
Ja, voll.
Wir reden hier vom Gleichen.
Das ist genau das Gleiche, was ich gemeint habe.
Und die Konsequenz davon ist, oder eine Konsequenz ist, dass die Leute nicht nur irgendwas, den Vanilla-Weg machen können, weil es die Technologie nicht zulässt, sondern weil sie auch nicht wissen, wie.
Also eine Sache, die ich ganz oft jetzt sehe in Workshops, ist, dass ich die Leute gar nicht bei der Barrierefreiheit verliere, sondern bei nativem HTML, CSS und JavaScript, weil sie das einfach nicht schreiben.
Also sie schreiben das einfach ganz wenig und ganz selten.
Und auch wenn ich einfach nur so simple Sachen, über so simple Sachen spreche wie Event-Lessener hinzufügen, also die Dinge, die ich als selbstverständlich verstehe, da haut es einige Leute auch schon auf und ich verurteile da auch niemanden.
Es ist so, wie du gesagt hast, einfach ein Gegenentwurf, eine andere Art und Weise zu arbeiten, Und eine, bei der man dann einfach sich auch schwer tut, dann die Dinge halt irgendwie anders zu machen, weil man sie nicht kann.
Also nicht nur wegen der Technologie, sondern auch einfach wegen dem Know-how.
Dafür ist natürlich das Know-how dann in anderen Bereichen halt viel besser, eben in der Nutzung von der bestimmten Library oder dem Framework.
Nein, nein, nein, ich habe nichts gegen React Schreibende, ich habe nur was gegen React.
Ganz wichtiger Unterschied.
Ja, ja, das ist aber eh klar.
Ich habe dann noch eine Sache, eine Notiz habe ich mir noch hier in meinem Dokument, in meiner Vorbereitung, und zwar Verwandte von JavaScript Void.
Und ein Verwandter ist ein A-Element mit einem H-Def-Attribut, mit einem Accessible Name, aber im Value ist einfach nur ein Hash.
Sowas ähnliches, macht aber halt ein bisschen mehr.
Also es macht insofern mehr, als dass dann der Hashtown irgendwie in der URL ist und vielleicht springt dann die Seite auch, aber im Endeffekt hat man die gleichen Probleme, weil man hat auch wieder ein Element, das eigentlich ein Button sein sollte.
Wir haben ähnliche Dinge mit dem neuen Tab öffnen.
Es passieren dann andere Dinge, aber die Probleme sind ähnlich.
Und das ist auch einfach sehr, sehr häufig und ich glaube eben, da ist auch wieder der Hauptgrund einfach das Button Styling.
So ein traditionelles Ding und man hat es immer schon so gemacht, weil es macht uns auch weiter.
Ein anderer Verwandter ist der Link ohne href mit einem Klick-Event.
Und da ist das Problem, da hat man ähnliche Probleme, aber auch andere Probleme.
Das erste ist, dass das Element nicht fokussierbar ist und man muss die Key-Events ergänzen.
Also die Key-Events bekomme ich nur gratis dazu, wenn ich ein Klick-Event auf einen Link, also auf ein A-Element oder auf ein Button-Element lege.
Bei einem A-Element ohne href ist das halt nicht der Fall.
Und das gilt genauso auch für alle anderen Geschichten.
Also Image, Strong, TD, TR, Diff, also da sieht man auch sehr gerne irgendwelche Click-Events oben.
Da habe ich dann auch die gleichen Probleme.
Besonders findige Leute sagen dann, na gut, ich nehme meinen A-Element ohne HDF, füge aber ein Tab-Index hinzu, Tab-Index 0, dann ist es fokussierbar und dann mache ich noch eine Roll-Button drauf.
Weil dann habe ich ein Element, dass das Button angekündigt wird, es ist fokussierbar und ich könnte dann vielleicht auch noch die Key-Events, Key-Down, Key-Up ergänzen und dann funktioniert es wie ein Button.
Dann muss ich vielleicht noch im CSS ein bisschen was machen, damit auch aussieht wie ein Button und der Cursor richtig ist und so weiter, aber grundsätzlich kann man das tun.
Da stellt sich nur die Frage, wozu?
Ich könnte auch gleich einen Button verwenden.
Das ist der Punkt.
Ja.
Ich meine, diese Liste von so, also den Patterns, die wir jetzt alle besprochen haben, ist halt super, weil es ist halt eigentlich immer ein, es ist immer ein Codesmell.
Deutet immer darauf hin, irgendwas ist nicht, wie es sein müsste.
Gründe können vielfältig sein, aber einfach mal so in der Codebase einen Grab auf diese Dinger machen, gucken, was man findet und gucken, ob man was verbessern kann, ist eigentlich nie eine schlechte Idee, weil irgendwas stinkt da immer.
Absolut.
Aber ich würde sagen, das riecht auch so nach progressive degradation sozusagen im Sinne von, man hat angefangen, einen Link reinzusetzen, dann kam irgendwer an und meinte, ja, hier, das ist aber ein Button, also das kann man ja nicht fokussieren mit dem Keyboard.
Ah, Tabindex, alles klar, super.
Und anstatt sozusagen das falsche Element auszutauschen, klebt man eben immer mehr Pflaster über das von Anfang an falsch ausgewählte für diesen Zweck.
Genau, ich glaube, ich komme das auch.
Ja, ich meine, eine Sache, die man machen kann, ist, man könnte auch CSS verwenden zum Debuggen.
Also, die gibt es ja ein Projekt, das heißt LX, da schreibt man A11y.css, mit LX ausgesprochen.
Und die verwenden einfach CSS-Selektoren für Debugging.
Und in einer kleineren Form kann man das auch ins eigene Projekt mit reinnehmen und sagen, okay, wenn, also sozusagen mit einem Attributselektor, wenn href den Wert JavaScript void hat, oder wenn es beginnt mit JavaScript-Doppelpunkt, dann markiere ich das Element rot mit einem roten Rahmen beispielsweise oder wenn der Wert von Ahrefs ein Hash ist, dann könnte ich auch das Element markieren.
Oder auch eine andere Sache, wenn ich mir HTML anschaue und ich schaue mir sehr viel HTML an, das andere Menschen geschrieben haben und ich sehe da einen Link und auf dem Link ist eine klasse Button, dann ist das auch häufig ein Indikator dafür, dass es ein Button sein sollte.
Also manchmal ist es ein Link, der auch aussehen soll wie ein Button Das ist auch wieder ein eigenes Thema.
Aber oft ist es...
Ich wollte gerade sagen, das alleine ist ja 5 Grad würdig.
Ja, ja, genau, genau, genau.
Oder ja, eh.
Aber oft ist es dann einfach so, dass du denkst, okay, gut, dann warum ist das kein Button?
Oder noch viel eindeutiger ist es, wenn es auf einem Tiff oben ist oder auf einem Span oder sowas.
Was auch sehr oft vorkommt.
Mhm.
Hier, zu dem CSS, das die schlechten Patterns debuggt, das sollte tatsächlich am besten wirklich matchen, einfach nur Ahrefs, das mit JavaScript-Doppelpunkt beginnt, weil ich habe ja vorhin schon JavaScript-Void 0 runtergegolft auf JavaScript 0.
Ich habe es jetzt noch weiter runtergegolft.
Ich habe die Spezifikationen gerade gelesen und tatsächlich ist es so, eine JavaScript-URL, da wird dann halt eben dieser href-Content genommen und dann wird da vorne JavaScript-Doppelpunkt abgeschnitten und der Rest von dem String wird dann einfach als Script evaluiert.
Jetzt kannst du das Script aber auch leer haben.
Sprich, den Effekt von JavaScript-Void 0 kannst du auch erzielen, indem du 0 schreibst JavaScript-Doppelpunkt.
Brauchst gar nichts dahinter stehen zu haben.
Naja.
Ja, super.
Dann haben wir eine optimierte Variante, die jetzt in Zukunft weiterhin falsch erwähnt werden kann.
Naja, einerseits das, andererseits ist es halt wirklich für so, nach was grappe ich, wenn ich wirklich diese Codesmails suche.
Man sollte nicht zu spezifisch werden, weil da gibt es dann zumindest einigen Spielraum.
Wenn also irgendwer diese seltsame Kombination aus, ich verwende dieses Pattern, aber ich versuche ja wirklich jedes Byte rauszuschmeißen, das wirklich zu Ende gedacht hat, könnte man mit dem Pattern tatsächlich auch ankommen.
Wobei, das sieht halt wirklich wild aus.
Das sieht aus, als wäre der Code kaputt.
Aber er funktioniert.
Also er ist kaputt.
Aber wie intendiert kaputt?
Ja, super.
Aber gut, es ist doch eh immer schon CodeSmell, wenn du dieses JavaScript-Doppelpunkt in einem Haare fährst, oder?
Also egal, was du dann machst, völlig wurscht.
Das geht überhaupt nicht.
Also, ja.
Ja, also ...
Also ich glaube, das ist keine Ausnahme zu dieser Regel.
Es geht einfach nie.
Don't do it.
Ja, also hast du schon recht.
Also ich habe halt folgendes, folgende News Case.
Jetzt nicht für jetzt Elemente.
Pass auf, pass auf, pass auf.
Ich habe hier meine eigene Slide Software gebaut und weil die halt eben auch so seit zehn Jahren immer so dran tacker, immer abwärtskompatibles Mistding ist, sind da halt so Sachen drin, wie ich will an so eine Sliden-Activation-Behaviour dran haben.
Also wenn sichtbar, feuere dieses Skript ab.
Ist ja, glaube ich, sinnvoll.
Aber das Problem ist, dass im Zuge dieses Prozesses, was dieses Ding halt eben macht mit Legacy-Code und das nicht gesehen, teilweise diese Slide-Elemente wie wild durch die Gegend geklont werden.
Und da kannst du ja nicht einfach dann ein Skript da dran haben, weil das ja, wenn das in ein anderes Dokument transportiert wird, dann ja möglicherweise wegen irgendwelchen Security-Kisten dann nicht mehr ausgeführt werden kann.
Dann ist es irgendwie tainted oder blödsinn.
Und da hat es sich tatsächlich als relativ sinnvoll erwiesen, so einfach so Inline-Event-Händler da dran zu bauen.
Also so mit On und auch einem JavaScript-String da drin.
Das ist halt jetzt auch nicht irgendwie so die feine englische Art und so und das sieht irgendwie relativ schön aus.
Aber es ist ja immer noch was anderes, ne?
Also es ist auch nicht schön, aber es ist halt nicht das gleiche wie href gleich JavaScript-Doppelpunkt.
Richtig, genau.
Also die Einwände von Manuel spielen da keine Rolle, aber meine sämtlichen Einwände von wegen Sicherheit, Blödsinn, was machst du da eigentlich, wo befindest du dich eigentlich da jetzt gerade mental?
Und das ist halt eben genauso der Punkt, wo ich mich halt so an dieser Schnittstelle befinde aus ich muss halt diesen ganzen Legacy-Fuhr supporten oder ich will das und ich muss jetzt dieses Zeug fertig kriegen und das muss alles irgendwie funktionieren in dieser relativ einmaligen Kombination aus Constraints, dann greift man halt wirklich in die Mottenkiste und holt sich da raus, weißt du was, einfach einen JavaScript-String ins HTML reinschreiben, damit er durch Eval gejagt wird, egal wie langsam und unsicher das ist, ist zu diesem einen Zeitpunkt jetzt gerade mal genau das Richtige.
Das ist auch nicht so schlimm wie von du kennst die Regeln und games das System absichtlich.
Das ist ja dann immer so, das ist ja die Kür, also dass man das Regelwerk kennt und beherrscht, aber eben dann sich bewusst entscheidet, damit zu brechen, ist ja was anderes als eben.
Sie zu brechen, ohne dass man sich dessen bewusst ist.
Jetzt komme ich mir irgendwie vor wie so ein Formel-1-Star, der irgendwie auch sagt, wenn man nicht versucht, die Regeln zu verbiegen, dann probiert man es nicht wirklich.
Dann ist das irgendwie ein Mangel an Einsatz.
Dann versucht man gar nicht zu gewinnen.
Aber so ein bisschen ist es.
Vielleicht.
Aber das ist ja, was du beschreibst, ist ja okay, solange der Nutzerin dient.
Also in deinem Fall ist, ja, doch, solange es der Nutzerin dient und nicht irgendwas an der Usability oder Accessibility oder wie auch immer kaputt macht.
Also das geht eher um deine Punkte und weniger um meine Punkte.
Ja, ich meine, theoretisch könnte ich einfach meine Software in richtig schreiben.
Statt einfach zu sagen, das Ding, was ich vor zehn Jahren gebastelt habe, muss immer noch weiter funktionieren.
Weil könnte ja sein, dass irgendwer nochmal dieses alte Ding erklärt haben will.
Also ich könnte es auch richtiger machen.
Ja, okay.
Will eigentlich.
Ja.
Ich habe etwas gefunden hier.
Ah ja, Shep, bitte, du zuerst.
Genau, also wir fallen uns manchmal ins Wort, weil wir so ein bisschen Delay haben.
Dafür schon mal auf jeden Fall sorry an alle Hörenden.
Du hattest ja vorhin kurz eben das Button-Unsetting beschrieben, wie du das machst.
Und was ich ganz spannend finde, ist, dass der Button selber gar keinen so einen Finger-Cursor hat, so per Default.
Und das ja auch immer so ein Ding ist, was man so drauf macht.
Aber eigentlich soll man das nicht.
Also da würde mich interessieren, wie ihr das so seht, also was so euer Default ist.
Da gibt es auch so einen Blogpost von Hilde De Vries, so ein bisschen älter, glaube ich schon, aber das kann ich ja mal verlinken.
Genau, und dann hat der Peter ja auch nochmal so extra Beef mit Target Blank, aber ich weiß nicht, ob wir das aufmachen wollen noch, dieses Kapitel, aber es hat ja auch was mit Accessibility zu tun, so ein bisschen, ne?
Ich finde das irgendwie ein bisschen ein mühsames Thema.
Es ist mir voll wurscht.
Und ich glaube auch, dass es den Usern voll wurscht ist, ob da jetzt irgendwie der Default-Cursor ist oder der Pointer-Cursor.
Ich weiß nicht.
Ich habe da die Debatte mitbekommen damals und ich glaube, vor kurzem wurde es auch nochmal aufgewärmt.
Ich glaube, der Andy Bell hat gesagt, dass er immer den Cursor ändert, weil es einfach zeigt, dass es sozusagen kein...
Weil es einfach zeigt, dass es ein interaktives Element ist und es erläutern, das mir verdeutlicht.
Ich mache es ehrlich gesagt auch.
Ich nehme auch den Cursor-Pointer.
Ich würde das auch so machen.
Ich finde nur, die Debatte finde ich einfach komplett unerregt.
Es bringt, ich weiß nichts.
Weil da geht es, glaube ich, eher um Prinzipien und weniger um das, was sozusagen die User dann damit oder wie es die User betrifft, kommt mir vor.
Absolut.
Absolut, weil ich meine, wenn dein Backen nicht ohnehin als so, mit dem Ding schickst du das Formular ab, wenn das nicht ersichtlich ist, dann ist das mit dem Cursor wirklich das letzte Detail, dass da noch irgendwas dran ändert, dann hast du ein größeres Problem.
Ich mache es halt auch aber aus Prinzip.
Ja.
Aber ich dachte, vielleicht weißt du ja zu berichten, dass es vielleicht in der Tat auch irgendwie Nutzergruppen gibt, für die das möglicherweise irritierend sein könnte.
Ich bin da eher beim Beta.
Also wenn die Komponente so sehr nicht eindeutig ist, dass das jetzt ein Button ist, dann liegt es in den meisten Fällen nicht am Cursor, sondern viel eher an dem Design von dem Button, der halt nicht aussieht wie ein Button, sondern vielleicht wie Text oder sonst irgendwas.
Ja, also es ist eh bei ganz vielen von diesen Debatten bin ich einfach raus, über die Zeit habe ich so einen ganz massiven Pragmatismus entwickelt, wo ich einfach nur denke, okay, bringt es den Leuten was oder bringt es ihnen nicht, schadet es was oder schadet es nicht so, treffe ich meine Entscheidung fertig, ist egal, was jetzt irgendwie allgemeiner Konsens ist oder sonst irgendwie.
Genau, aber schadet eben jemandem.
Nicht, dass ich wüsste.
Ich habe es noch nicht erlebt, dass jemand gesagt hat, hey Leute, da habt ihr einen falschen Cursor, das ist schon ein Org, ich verstehe nicht, wie ich diesen Button verwende, weil jetzt da sich der Cursor ändert.
Das habe ich noch nicht erlebt.
Es gibt natürlich Beispiele, wenn du den jetzt änderst zu diesem Verbotenzeichen, ich weiß jetzt den Fachausdruck nicht, solche Dinge oder Resize oder ähnliches, wenn Pfeile in die falschen Richtungen zeigen, das ist natürlich schon so etwas, aber konkret jetzt bei dem Buttonbeispiel hätte ich noch nie davon gehört.
Was es wirklich auch User-negativ betrifft.
Das ist mir vor allem auch noch nie aufgefallen.
Also ich könnte jetzt nicht sagen, bei irgendwie gegebener Webseite X, auch wenn ich die jeden Tag benutze, ob die das machen oder nicht.
Na, vor allem jetzt 2025, also bei den meisten Webseiten, ich weiß nicht alle, aber bei den meisten kommen 75% der Leute über das Smartphone.
Ja.
Ja.
Auch ein sehr guter Grund, diesen Kram zu ignorieren, irgendwie so zu rubrizieren unter, das ist Tabs vs.
Spaces 2.0.
Ja, genau, voll.
Für Leute, denen fad ist.
Gut.
Ich habe auch noch einen.
Ich habe mich ja vorhin bei der Frage, was zählt hier eigentlich als Hyperlink?
So ein bisschen zum Obst gemacht, als ich Link rausgekramt habe.
Weil in meinem Kopf halt drin war, warte mal, du hast, aber da ist noch ein anderes Ding, das Hyperlinks macht.
Was ist es?
Sag Link.
Ist aber gar nicht Link gewesen.
Wir haben Area völlig vergessen.
Das stimmt.
Ja, aber ich tue mir so schwer, weil auch wenn ich jetzt nicht mehr über HTML spreche, wie oft sieht man ARIA heutzutage noch?
Also ich habe noch Websites gebaut mit Image Maps, aber wie oft sieht man es noch?
Kommt es noch so oft vor?
Aber das stimmt schon, ja, es linkt auch quasi wohin.
Ja, also ich glaube, wenn du auf Wikipedia bist und irgendwie du hast so eine Karte irgendwie, Staat hast du nicht gesehen, mit so irgendwie den Gliedstaaten da drin, irgendwie so Bundesstaaten oder ähnliches, und du klickst da drauf, ich glaube, das sind noch Image-Maps.
Aber auch das ist fragwürdig, weil sowas sollte ja heutzutage eine Vektorgrafik sein.
Da sind die Links dann direkt drin.
Aber keine Ahnung, wenn du so irgendwie einen hochqualitativen Scan von irgendeiner mittelalterlichen Karte hast, irgendwie so, was du halt nicht vektorisieren kannst.
Und da willst du halt genau wissen, wenn du da drauf drückst, landest du halt eben auf diesem Fantasiebild des Löwen, statt irgendwie im Ozean hier wie Dragons.
So, Use Cases, Use Cases, ich sehe es halt nie, aber ich könnte mir welche vorstellen.
Nein, nein, ich bin mir sicher, dass es welche gibt, aber üblicherweise sind es, wie du sagst, SVGs und die sind meistens dann nicht barrierefrei, weil dann einfach nur Click-Events ist auf den einzelnen Pfaden oder auf den einzelnen Elementen im SVG, die nicht benannt sind und auch nicht fokussierbar sind normalerweise.
Das würde wieder für die Image-Maps sprechen.
Tatsächlich habe ich die aber nie getestet.
Also mir kommt es einfach nicht mehr unter.
Es kommt einfach nicht mehr vor.
Deswegen weiß ich da jetzt nicht, ob es da irgendwelche Probleme gibt.
Ich weiß sogar nicht, wie man es am besten benennt, ob man dann, weiß ich nicht, ARIA-Label verwendet oder keine Ahnung.
Es ist das letzte Mal, dass ich so eine Image-Map gesehen habe, war, wie ich es verwendet habe, wie ich eine Website gebaut habe.
Und das war 2008.
Also schon ein bisschen eine Weile her.
Aber die war Bombe-Design.
Das war komplett ein Table-Design, nur mit Bildern.
Da war kein einziger Text drinnen.
Durchgesliced in, wie hieß das, Fireworks und verlinkt mit Image-Maps.
Das Einzige, was noch gefehlt hat, war Framesets.
Dreamweaver konnte schon mal das super machen.
Ja, genau.
Ah ja, okay.
Also ich wollte nur sagen, was so das Verhalten angeht von so Ahrefs-Attribut und aktiviere und navigieren, das ist tatsächlich das Gleiche.
Das habe ich jetzt hier so den Spezifikationen entnommen.
Das verweist sozusagen alles auf den gleichen Algorithmus, was dann so Barrierefreiheit und tatsächlich User Experience und so angeht.
Kein Plan, weil ich habe wahrscheinlich auch 2008 oder so zuletzt so ein Ding gesehen.
Also du hast recht, streng genommen müsste man eigentlich sagen, dass ich die beiden Elemente zum Flinken kommentieren kann, stimmt's.
Genau, aber die Frage kann man ja auch andere...
Einfach einmal und sagt dann hinterher immer nur noch Hyperlink und meint dann einfach die Area mit, dann passt das schon.
Genau, und wir können unsere HörerInnen ja mal fragen, habt ihr noch irgendwas im Einsatz, das Image Maps benutzt?
Dann bitte gebt uns den Link.
Wir würden uns ja echt interessieren.
Genau, wer weiß.
Genau, dann machen wir eine Revision hier, wir roasten eure Image Maps, wie wär's?
Na, die wird nicht sehr lang, glaube ich.
Ja, und bevorzugt halt von modernen Websites, weil irgendeine alte kann ich sicher auch noch ausgraben.
Also es gibt das ein oder andere Gasthaus in Wien beispielsweise, die auch noch Framesets verwenden und Tables.
Aber spannend wäre es auf einer aktuellen Seite.
Einigermaßen aktuell.
So was in den letzten, was ist das, zehn Jahren oder so.
Das wäre cool.
Oder vielleicht gibt es auch Leute, die das irgendwie missbrauchen, um was Cooles zu hacken damit.
Kann ja auch sein.
Ja.
Ja, das finde ich auch immer interessant, auch wenn es vielleicht irgendwie dann andere Probleme hat.
Aber so spannend ist es zu sehen.
Auf jeden.
Ja, wunderbar.
Das war doch cool.
Hat Spaß gemacht.
Ich habe das ja nicht so ganz genau verfolgt, wie ihr da irgendwie übereinander gestolpert seid auf Mastodon und das hier festgezohrt habt, unser Treffen.
Ich kann dir das sagen, wie das war.
Das war 1%.
Ah, der Manuel hat was geschrieben.
Da könnte ich mich auch drüber aufregen.
Lass Sendung draus machen.
Und die anderen 99% waren Terminfindung.
Ja, das stimmt.
Das war ein bisschen, ja.
Aber hat super funktioniert.
Und ich muss dir noch kurz Props geben, nicht, dass ich sie vergesse für die Überleitung.
Die war wirklich fabelhaft.
Die war sehr gut.
Zum Abschluss mache ich hier einen shameless Plug für dich, Manuel, denn der diesjährige HTML-Adventskalender ist am Start mit ganz, ganz vielen wieder spannenden Beiträgen.
Also der Link ist in Show Notes und genau, da solltet ihr unbedingt jeden Tag vorbeischauen und nachlesen, was es an neuen Artikeln gibt.
Ja, vielen Dank.
Wenn du es nicht gemacht hättest, hätt es ich gemacht, weil wir dieses Jahr jetzt zum vierten Mal in Folge, glaube ich, oder zum dritten Mal in Folge, wieder 24 plus Artikel haben von 24 plus verschiedenen AutorInnen, die exklusiv über HTML schreiben oder fast exklusiv über HTML.
Also jeder Artikel, da geht es irgendwie um Barrierefreiheit oder Performance, User Experience, manchmal auch über Geschichte oder über Spezifikation oder Probleme mit gewissen Entscheidungen und so weiter.
Das ist sehr spannend und ich habe die meisten auch schon gelesen und gereviewt.
Und das wird wieder super werden.
Und ja, checkt es aus.
Jawohl.
Machen wir.
Dann vielen Dank, dass du da warst.
Mal wieder.
Vielen Dank für die Einladung.
Auf bald.
Das wird bestimmt nicht das letzte Mal gewesen sein.
Und genau.
Danke, Peter.
Dann hören wir uns nächste Woche wieder.
Das Thema wissen wir noch nicht.
Aber wird sich schon was ergeben.
Ganz bestimmt sogar.
Dann bis dann.
Tschüss.
Danke fürs Zuhören.
Dankeschön.
Tschüssi.
Baba.