Twitters Div-Suppe und hässlich gemachtes CSS, erklärt

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Als ich in die Webentwicklung einstieg (2005-2010 waren prägende Jahre für mich), war eine der ersten Lektionen, die ich lernte, eine saubere HTML-Grundlage zu haben. „Wie schöner HTML-Code aussieht“ ist tatsächlich einer der beliebtesten Beiträge auf dieser Seite. Das Bild in diesem Beitrag schaffte es ab und zu auf beliebte Seiten auf Subreddits.

Nun, während ich standardmäßig immer noch HTML wie diesen schreibe, wenn ich an Seiten wie dieser arbeite, arbeite ich auch an Projekten, die gar keinen solchen HTML-Output haben. Ich arbeite nicht für Twitter, aber hier ist, was Sie sehen könnten, wenn Sie die DevTools öffnen und den DOM dort inspizieren.

DevTools looking at the DOM on twitter.com: tons of divs with obfuscated class names.

Niemand würde das als „sauberes“ HTML bezeichnen. Tatsächlich ist es nicht schwer, Kritik daran zu vermuten. Warum all die divs! Divitis!! Ist das wirklich ein <div role="button">, komm schon. Das sind furchtbare Klassennamen! Robotergekotze!

Was wahrscheinlich näher an der Wahrheit liegt, ist, dass es eigentlich nicht so wichtig ist. Es ist nicht so, dass Semantik keine Rolle spielt. Es ist nicht so, dass Barrierefreiheit keine Rolle spielt. Es ist nicht so, dass Performance keine Rolle spielt. Es ist, dass dieser Output tatsächlich diese Dinge recht gut macht, oder zumindest so gut, wie sie es beabsichtigen.

Giuseppe Gurgone geht ins Detail.

React Native for Web bietet plattformübergreifende Primitiven, die Inkonsistenzen normalisieren und den Aufbau von Webanwendungen ermöglichen, die unter anderem Touch-freundlich sind.

Für jemanden, der mit dem Framework nicht vertraut ist, mag das von React Native for Web erzeugte HTML völlig hässlich und voller schlechter Praktiken aussehen.

Dieser DOM erzeugt tatsächlich einen erwarteten und nutzbaren Barrierefreiheitsbaum. Die <div>s mit Rollen dienen dazu, bestimmte plattformübergreifende Styling-Einschränkungen zu überwinden. Diese Klassen stammen aus einem Styling-Framework, das beim Scoping von CSS hilft. Es sieht verrückt aus, aber alles hat einen Grund.

Das soll nicht heißen, dass all dies außerhalb jeder Kritik steht. Man könnte argumentieren, dass roboterhafte Klassennamen keine benutzerdefinierten Stylesheets zulassen, die bei der Barrierefreiheit helfen könnten. Man könnte argumentieren, dass die überflüssigen divs einen unnötig schweren DOM ausmachen. Man könnte argumentieren, dass das Ausliefern von Robotergekotze das Web weniger erlernbar macht, insbesondere ohne Source Maps.

Es gibt Dinge zu besprechen, aber nur eine Menge von divs mit seltsamen Klassennamen zu sehen bedeutet nicht, dass es schlechter Code ist. Und es ist auch nicht auf React Native beschränkt, viele Frameworks haben ihre eigenen besonderen Eigenheiten in dem, was sie tatsächlich an Browser ausliefern, und das dient fast immer dazu, die Website auf irgendeine Weise besser funktionieren zu lassen, nicht um beim Lehren oder der Lesbarkeit zu helfen.

Direkter Link →