Vor Jahren waren HTML-Tabellen der Standard für das Layout von Webseiten. CSS und semantisches Denken haben das geändert, und heute machen CSS-Frameworks das Entwerfen relativ einfach.

Sie können aber auch eine überraschende Anzahl überflüssiger Elemente erzeugen.

Das 960 Grid System fördert die Zugabe von

Elemente und class Attribute, besonders auf komplizierten Seiten. Ist das wirklich eine Verbesserung gegenüber verschachtelten Tabellen?

Saubereren Code zu erstellen bedeutet, über das Framework hinauszugehen und darüber nachzudenken, was es wirklich darstellt.

CSS-Frameworks bieten eine Workflow-Lösung, nämlich eine schnelle Bereitstellung von Grid-basierten Web-Layouts. Eines der beliebtesten Frameworks ist heute das 960 Grid System ( 960.gs ), benannt nach seiner Standardbreite. Mit der Praxis kann 960.gs ein großartiges Werkzeug für jeden Webdesigner sein. Aber es gibt auch ein paar alte Probleme wieder.

Bevor CSS weit verbreitet war, lieferten Tabellen das gesamte Layout, das ein Webdesigner benötigte. Kompliziertere Designs hatten Tabellen, die in Tabellen verschachtelt waren, aber im Übermaß nutzten sie ein Wirrwarr von HTML. CSS-basierte Layouts lockten Designer mit dem Versprechen weniger HTML; Sie sprachen auch Semantik-Enthusiasten an. Einfach gesagt, CSS ermutigte die Verwendung von HTML, das beschreibt, um was es bei Inhalten ging, und nicht, wie es aussehen sollte.

Als Entwickler CSS lernten, ersetzten div-Elemente Tabellen. Aber divs können - und sind oft - verschachtelt werden, genau wie Tabellen.

Die Verbreitung von Class-itis und Div-itis

Klarer, schlanker Code bietet viele Vorteile. Es ist einfach zu reparieren, schnell herunterzuladen und verursacht weniger Probleme bei verschiedenen Arten von Browsern. Relevante Tags helfen Screenreadern, Suchmaschinen und mobilen Geräten, neben dem Layout auch die Bedeutung zu interpretieren.

Anders als die Semantik, der große Vorteil der Verwendung

Über
ist, dass wir am Ende weniger Code haben, um den gleichen Job zu machen. Aber jetzt stehen Designer vor einer Flut von Klassen und Divs.

Erstellen CSS-Frameworks wie 960.gs das zugrunde liegende Problem mit Tabellen neu? Wenn ihr Ziel effizientes HTML ist, können Designer und Entwickler 960.gs verwenden, ohne "class-itis" (dh übermäßigen Gebrauch von Klassen) und "div-itis" (dh so viele divs, dass Tabellen wieder gut aussehen) zu verbreiten? Ja, sie können.

Um zu verstehen, wie, müssen wir den Rahmen selbst betrachten.

Ein Rundown von 960.gs

960.gs stellt eine Reihe von Spalten zur Verfügung, die in CSS geschrieben sind und das Layout von Webseiten erleichtern. Laden Sie die Dateien herunter, fügen Sie sie zu Ihrer Website hinzu und schon kann es losgehen. Es sind keine speziellen Plug-Ins oder neue Technologien erforderlich, und Sie können sie in Verbindung mit anderen CSS-Dateien verwenden.

Spalten sind in Blöcken enthalten, die (natürlich) "Container" genannt werden. Die Standardwerte sind container_12 und container_16 , die sich in 12 bzw. 16 Spalten aufteilen. Benutzerdefinierte Größen sind verfügbar.

Diagramm von 960-Pixel-weiten Containern

Das obige Diagramm zeigt die beiden Standardcontainer mit 12 und 16 Spalten. Das Grau ist natürlich auf Ihrer endgültigen Website nicht sichtbar. Die Spalten zeigen nur, wo Blöcke, sogenannte "Grids", angeordnet werden können.

Ein Raster ist ein Inhaltsblock, der mehr als eine Spalte in einem Container durchqueren kann. Gitter schweben durch das Festhalten nach links .container_x Dadurch sind sie ideal für modulare Layouts. Die Breite eines jeden Blocks hängt davon ab, welches Raster Sie anwenden: grid_1 ist eine Spalte breit, grid_5 ist fünf Spalten breit usw.

Diagramm verschiedener Gitter innerhalb eines Containers

Über, .container_12 hält drei Gitter. Jedes Raster würde wiederum verschiedene Elemente des Seiteninhalts enthalten.

Diagramm verschiedener Gitter innerhalb eines Containers

Über, .container_16 hält zwei Blöcke von 12 bzw. 4 Spalten. Mögen .container_12 Dieses 16-Spalten-weite Layout misst 960 Pixel Breite - aber seine Spalten sind schmaler.

Die Größe der Grids, in die die Elemente des Inhalts passen, ist einfach: Ändern Sie die grid_x in jedem div.

Die offizielle Webseite von 960.gs stellt Websites vor, die auf dem Framework erstellt wurden, und bietet außerdem Seitenvorlagen, Links zu einem benutzerdefinierten Grid-Generator und das Framework selbst. Detaillierte Anweisungen sind ebenfalls enthalten, weil es noch mehr zu lernen gibt. Gitterränder und die Möglichkeit, in Rinnen zwischen Gittern zu treten, machen das System noch flexibler.

Trotz dieser Vorteile, Einbettung

im
ermutigt Programmierer, viele Klassenattribute (class-itis) und divs (div-itis) zu verwenden.

Lösungen

Das Argumentieren gegen Tabellen für das Layout ist einfach genug. Aber die Verwendung von drei oder mehr Ebenen verschachtelter divs löst das Problem nicht - es ersetzt nur einen Satz von Tags durch einen anderen. Frameworks helfen, lösen aber nicht immer das Dilemma. Mit ein wenig Voraussicht können viele dieser Probleme vermieden werden.

Verwenden Sie nur Klassen, die Sie tatsächlich benötigen

Die einfachste Lösung für übermäßigen CSS-Code ist das Ausschneiden, was nicht notwendig ist. 960.gs wurde als drahtgestütztes Werkzeug konzipiert, das ersetzt werden soll, wenn die Website online geht. Es enthält mehr als 180 Klassendefinitionen.

Wenn Ihr Design strukturiert ist, sagen wir, .container_12 und verwendet nie mehr als .grid_5 und .grid_7 , dann entferne die anderen aus dem CSS.

Wenden Sie class = "grid_x" auf die entsprechenden Elemente an: Überschriften, Bilder, Links, Absätze

Das .container_x und .grid_x Klassen sind nicht auf div-Elemente beschränkt. Das Klassenattribut Kann auf jedes beliebige Element angewendet werden html , head , meta , param , script , title und style Also praktisch alles in der body . Wenn ein Paar div-Tags nur ein Element enthält, sind sie möglicherweise nicht erforderlich.

Anwenden von Grid-Code auf Nicht-Divs

Verwenden von divs Semantischen Code verwenden




photo

photo




















#"> .........

#" class=grid_3> …


#" class="grid_3">…



#" class="grid_3">…



#" class="grid_3">…



#" class="grid_3">…




Gewähren Sie bestimmten Elementen Grid-Eigenschaften

Einfaches CSS sein, .grid_x hat Eigenschaften, die mit jedem anderen Klassennamen funktionieren würden - oder mit irgendeinem anderen Element. Durch das Kopieren der Eigenschaften in bestimmte Elemente werden zusätzliche Klassen überflüssig.

.examples li { (properties of .grid_4) }


Wenn Sie das Raster auf Listenelemente anwenden, werden im Folgenden gleichmäßige Spalten mit minimalen Änderungen am HTML erstellt.

drei Listenelemente, die in Spalten umgewandelt wurden

CSS verwandelt die obige Liste in eine mehrspaltige Gruppe. Wenn Sie eine normale Liste mit Aufzählungszeichen benötigen, verwerfen Sie einfach die class="examples" Attribut. Ist das semantisch? Natürlich - solange der Inhalt eine Liste verdient. Das CSS ändert lediglich, wie jeder Aufzählungspunkt dargestellt wird.

Ein anderes Beispiel:

.photos p { (properties of .grid_10) }.photos img { (properties of .grid_6) }
photo

First caption

photo

Another caption

Dadurch werden Beschriftungen, die in Absatzmarken eingeschlossen sind, automatisch an Fotos angefügt.

Foto und Beschriftung in einem Raster mit minimalem HTML

Wenn Tabellen nicht geeignet sind, ist der tabellarische Effekt einfach mit nicht tabellarischem HTML zu erstellen.

.datelist { (properties of .container_12) }.datelist h3 { (properties of .grid_3) }.datelist p { (properties of .grid_7) }.datelist strong { (properties of .grid_1) }

subhead

3 p.m.Jan 1, 2010

subhead

3 p.m.Jan 1, 2010


Tablular-Daten, die mit Nicht-Tabellen-Tags markiert sind

Das obige Beispiel ist ein Zeitplan von Ereignissen, bei dem jede "Zelle" in der Tabelle ein anderes Tag aufweist, um ihren eindeutigen Inhalt widerzuspiegeln, anstatt die Catch-All-Eigenschaft zu haben Etikett. (Ideal? Vielleicht nicht. Der HTML-Code unterscheidet nicht zwischen Inhaltsgruppen.)

Bewirbt sich .grid_x Eigenschaften zu anderen Elementen erfordern etwas Planung, aber es führt zu weniger überladenem HTML und stört 960.gs selbst nicht.

Verwenden Sie Klassen in übergeordneten Elementen und nicht untergeordneten Elementen

Div-itis und class-itis sind nicht auf CSS-Frameworks beschränkt.

Alle Beispiele im letzten Abschnitt haben eine interessante Eigenschaft: nur jeweils eine Klassendeklaration. Überall dort, wo das gleiche Klassenattribut mehrmals hintereinander in HTML verwendet wird, ändern Sie das übergeordnete Element anstelle der untergeordneten Elemente.

Nicht notwendig:

.item { (various properties) }


Oben haben alle sechs Elemente eine Klasse. Sie sind überflüssig, weil die Klassen identisch sind. Hier ist ein besserer Weg:

.group-of-items li { (various properties) }


Die Abhilfe für class-itis besteht darin, dem Elternelement eine einzige Klasse zuzuordnen. CSS-Selektoren erledigen den Job und wenden das Styling auf jeden an

  • innerhalb der .group-of-items Klasse. Diese Methode kann für jede Gruppe von Elementen mit einem gemeinsamen übergeordneten Element verwendet werden. Beispielsweise:

    .title { (various properties) }.subhead { (various properties) }.publication-date { (various properties) }.body-text { (various properties) }


    Die meisten der obigen Absätze sind nur einfache Absätze und haben dennoch unnötige Klassenattribute. Wir haben auch zwei Überschriften, die sich nur durch ihre Klassen unterscheiden - und doch aneinandergrenzen

    Elemente sorgen nicht für eine gute Inhaltsstruktur. Hier ist eine bessere Lösung:

    .article h1 { (various properties) }.article h2 { (various properties) }.article .publication-date { (various properties) }.article p { (various properties) }


    Jetzt bleiben nur noch zwei Klassen übrig. Wir haben das behalten .publication-date Klasse, um sie von den normalen Absätzen darunter zu unterscheiden. Da HTML kein "date" -Tag hat, ist diese Klasse erforderlich, um anzuzeigen, was der Absatz enthält. Das neue .article class ermöglicht es Ihnen, das div und die darin enthaltenen Elemente im CSS mit minimalem Aufschlag zu gestalten. Das CSS in beiden Beispielen hat jeweils vier Definitionen, und dennoch haben wir im zweiten Fall einen saubereren Code.

    Im Allgemeinen benötigen identische Elemente mit einem gemeinsamen Elternelement keine zusätzlichen Attribute. Klassen helfen nur, wenn es einen Unterschied zwischen ihnen gibt. Eine Faustregel: Verwenden Sie Klassen nur, wenn Sie zwischen ansonsten identischen Inhaltstypen unterscheiden müssen.

    Vereinfachen

    Der Zweck des 960 Grid Systems und der CSS-Frameworks im Allgemeinen ist es, den Aufwand für das Layout von Webseiten zu reduzieren. Der Vorteil von CSS ist, dass es die HTML-Menge reduziert, die zum Anzeigen einer Seite erforderlich ist. Aber als Layout-Sprache, CSS ist nicht perfekt . Frameworks sind lediglich Werkzeuge, die Menschen helfen, Lösungen zu erreichen, nicht die Lösungen selbst. Designer und Entwickler müssen Class-itis und Div-itis bekämpfen.


    Geschrieben exklusiv für Webdesigner Depot von Ben Gremillion . Ben ist ein freiberuflicher Webdesigner, der Kommunikationsprobleme mit besserem Design löst.

    Wie sagt man mehr mit weniger? Teilen Sie, wie Sie Code und Ihren Workflow in den Kommentaren straffen ...