CSS Framework

15
CSS – Frameworks Verfasst von Daniel Hallmann, entwickelt unter der Leitung von Michael Zirlewagen im Rahmen der Vorlesung „Webprogrammierung“ der Fachhochschule Düsseldorf Stand 01.02.2011 Dieses Werk bzw. Inhalt steht unter einer Creative Commons Namensnennung- Nicht-kommerziell-Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

description

CSS Framework

Transcript of CSS Framework

Page 1: CSS Framework

CSS – Frameworks

Verfasst von Daniel Hallmann, entwickelt unter der Leitung von Michael Zirlewagen im Rahmen der Vorlesung

„Webprogrammierung“ der Fachhochschule Düsseldorf

Stand 01.02.2011

Dieses Werk bzw. Inhalt steht unter einer Creative Commons Namensnennung-

Nicht-kommerziell-Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Page 2: CSS Framework

1

Inhaltsverzeichnis

Seite

1. Einleitung 2

2. Klein, aber effektiv: CSS Reset 3

3. Grid Frameworks 3

3.1. Grid-Framework: Blueprint 4

3.2. Grid-Framework: 960 Grid System 6

3.3. Grid-Framework: YUI2 Grid CSS 7

3.4. Vergleich Grid-Frameworks 8

4. CSS Framework YAML 8

5. Serverseitiges CSS-Framework: Sass 10

6. Fazit 13

Links 14

Page 3: CSS Framework

2

1. Einleitung

Frameworks im Bereich HTML und CSS stellen meist eine Sammlung von Werkzeugen für immer

wieder kehrende Aufgaben bzw. Problemlösungen im Bereich der Webseitengestaltung zur

Verfügung. Kleinere Frameworks bieten Lösungen für einzelne Probleme wie z.B. Stylesheets für

die Druckansicht von Webseiten oder den Reset von Browser intern verwendeten Styles.

Umfangreichere Frameworks bieten eine Zusammenfassung all dieser Problemlösungen und in

den meisten Fällen auch ein speziell entwickeltes System für das Layout.

Es gibt bereits sehr viele Frameworks für HTML und CSS. In diesem Vergleich liegt die

Konzentration auf den populärsten Frameworks, um repräsentative Beispiele geben zu können.

Page 4: CSS Framework

3

2. Klein, aber effektiv: CSS Reset

In vielen CSS Frameworks werden direkt zu Beginn die Browser internen Stylesheets

zurückgesetzt. Dies macht Sinn, da jeder Browser intern seine eigenen Stylesheets besitzt und

diese automatisch auf unformatierte Elemente anwendet. Diese Stylesheets sind von Browser zu

Browser unterschiedlich und können zu Unterschieden in der Darstellung einer Webseite führen.

Um diese Unterschiede zu verhindern werden mit CSS Reset Tools wie z.B. Eric Meyers Reset

CSS1 oder YUI Reset CSS2 die Attribute der Browser internen Stylesheets meist auf 0 gesetzt, um

eine vom Browser unabhängige Darstellung zu gewährleisten. Dabei ist jedoch zu beachten, dass

in manchen Reset CSS Frameworks auch selbstverständliche Style-Eigenschaften wie z.B. fett bei

<strong> entfernt werden können.

Abbildung 1 – Unterschiede zwischen standardmäßigen Browser Stylesheets (links) und CSS Reset (rechts)

Im Browser geänderte Optionen für die Darstellung (z.B. Einstellungen für Barrierefreiheit in

Opera) sind nicht von diesen Resets betroffen, da die CSS-Resets wie normale Stylesheets

behandelt werden und je nach Einstellung im Browser dann nicht angezeigt werden.

3. Grid Frameworks

Grid-Frameworks sind eine Übertragung der aus dem Grafikdesign bekannten Gestaltungsraster,

welche besonders im Printbereich verwendet werden, auf Webdesign. Für den

Darstellungsbereich wird eine feste Breite festgelegt. Da die meisten Internet-User mit einer

Auflösung von mindestens 1024 x 768 Pixeln im Netz surfen, liegt die Breite bei den

bekanntesten Grid-Frameworks Blueprint und 960 Grid System bei 950 bzw. 960 Pixeln.

Der Darstellungsbereich wird dann durch die Festlegung einer Spaltenanzahl in Spalten mit fester

Größe und etwas Abstand unterteilt, die dann die ganze Weite ausfüllen. Grid-Frameworks

helfen gezielt bei der Erstellung eines Grundgeräts für Webseiten

Page 5: CSS Framework

4

Abbildung 2 - Gestaltungsraster am Beispiel von drupal.org

3.1 Grid-Framework: Blueprint3

Blueprint3 legt die Gesamtbreite des Darstellungsbereichs auf 950 Pixel fest. Der

Darstellungsbereich wird dann in 24 Spalten mit einer Breite von jeweils 30 Pixeln und einem

Abstand von 10 Pixeln auf der rechten Seite unterteilt.

Am Beispiel von Blueprint soll die Funktionsweise von einem Grid-Framework verdeutlicht

werden. Durch die Festlegung eines <div>-Elements mit der Klasse „container“ wird als erstes

der Darstellungsbereich festgelegt:

Page 6: CSS Framework

5

Weitere <div>‘s werden dann in diesen Container eingefügt. Die <div>‘s bekommen dann

eine Klasse, die angibt über wie viele Spalten sich das <div> erstrecken soll. Ein 24 Spalten

breiter Header-Bereich würde die CSS-Klasse „span-24“ bekommen. Weitere Elemente wie

z.B. ein Bereich für den Content mit 18 Spalten Breite und eine Sidebar mit den restlichen 6

Spalten Breite werden einfach mit zwei weiteren <div>‘s und den Klassen „span-18“ und

„span-6“ eingefügt. Das letzte <div> in jeder Zeile muss mit der zusätzlichen Klasse „last“

versehen werden, um den darauf folgenden Abstand zu unterdrücken. Fehlt dieses „last“

werden die Zeile zu breit und umgebrochen.

Nach dem Erstellen der Struktur lassen sich auch der Content-Bereich und auch die Sidebar

durch das Einfügen von weiteren <div>‘s weiter wie benötigt aufsplitten, ein Beispiel:

Page 7: CSS Framework

6

Mit dem Blueprint CSS Generator4 lässt sich Blueprint schnell anpassen. Es können die

Anzahl, Breite und der Abstand der Spalten ausgewählt werden und der Generator liefert

direkt die angepassten Stylesheets mit z.B. mehr als 24 Spalten und/oder einer geänderten

Spaltenbreite.

Bereits am Beispiel von Blueprint lässt sich einer der großen Kritikpunkte an Grid-

Frameworks zeigen: Die Klassennamen. Laut Definition im HTML 5 Draft5 soll das class-

Attribut für die Beschreibung des Inhaltes eines Elements genutzt werden und nicht um die

Präsentation des Elements zu beschreiben. So wäre z.B. der Name „header“ für den Header

besser geeignet als nur „span-24“. Als Entwickler ist man wahrscheinlich zudem auch sehr

eigen was die Namen von Klassen angeht und lässt sich nicht gerne Vorschriften machen.

Als einziges Grid-Framework bietet Blueprint im Download-Paket eine Lösung für die Vergabe

von eigenen Klassennamen: Das Ruby-Skript compress.rb. Nach Entfernen der überflüssigen

Klassen im Quellcode, lassen sich durch Anpassung der settings.yml und dem Ausführen von

compress.rb alle Blueprint CSS-Eigenschaften auf andere Klassen übertragen. Weitere

Informationen zu diesem Thema finden sich hier6.

3.2 Grid-Framework: 960 Grid System7

Das 960 Grid System7 arbeitet wie es der Name bereits sagt mit

einer Breite von 960 Pixeln. Diese können wahlweise in 12 oder

16 Spalten mit einem Abstand von 20 Pixeln unterteilt werden.

Die 10 Pixel mehr im Gegensatz zu Blueprint ergeben sich aus

einem zusätzlichen Rand am Ende der Zeile. Da es sich dabei

aber um keinen nutzbaren Bereich handelt, ist es im Gegensatz

zu Blueprint verschwendeter Platz.

Der generelle Aufbau besteht wie bei Blueprint aus einem Container in dessen Klassenname

die Spaltenanzahl nach einem Unterstrich angegeben wird, also für die beiden

standardmäßigen Anzahl von Spalten „container_12“ oder „container_16“. Im Container

werden dann weitere Elemente mit den Klassen „grid_1“ bis „grid_16“ eingefügt. Durch den

rechten Außenrand muss in den außenliegenden Elementen jedoch keine „last“-Klasse wie

bei Blueprint explizit am Ende jeder Zeile angegeben werden. Dies gilt jedoch nur für

Elemente, die sich hierarchisch direkt unter dem Container befinden. Eine Stufe in der

Hierarchie tiefer, also bei Elementen wie z.B. einer Gruppe von Beiträgen in einem Weblog,

Page 8: CSS Framework

7

die sich meist im Bereich namens „content“ oder Ähnlichem befinden, muss im 960 Grid

System immer das erste Element mit „alpha“ und das letzte Element mit „omega“ in jeder

innen liegenden Zeile gekennzeichnet werden. Beispiel:

Direkt auf der 960 Grid Website finden sich ein HTML Generator und ein CSS Generator für

die Anpassungen des Frameworks an individuelle Wünsche. Durch die vielen mitgelieferten

Templates und eine Sketch Sheet zusätzlich für Bleistift-Fans kann die Zusammenarbeit und

Kommunikation zwischen Web- bzw. Grafikdesigner und Webprogrammierer vereinfacht und

verbessert werden. Der Designer erarbeitet mit einem der Templates seinen Entwurf und der

der Entwickler kann diesen mit weniger Aufwand als Seite umzusetzen.

3.3 Grid-Framework: YUI2 Grid CSS8

YUI8 wird auf allen Seiten eingesetzt, die zum Netzwerk von Yahoo! gehören und ist somit

praxiserprobt. Alle Standard-Layouts basieren auf festen Größen mit 750, 950, 974 Pixeln

oder 100% Fensterbreite. YUI verwendet für die Größenangaben die Einheit „em“. Das wirkt

sich zwar positiv auf die Darstellung aus, wenn der Besucher Zoom im Browser verwendet.

Yahoo! stellt den YUI Grids Builder9 frei zur Verfügung.

Dort lassen sich wie in Generatoren für Blueprint und

960 Grid die Grundstruktur für eine Webseite erzeugen

und an die eigenen Wünsche anpassen.

Im Source-Code findet sich jedoch ein großes Problem

von YUI. Die verwendeten CSS-Klassen für das Layout

besitzen Namen wie „yui-u“ oder „yui-g“ und ohne

weitere Einarbeitung in YUI lässt sich die Bedeutung

nicht erkennen.

Page 9: CSS Framework

8

3.4 Vergleich Grid-Frameworks

Anfänglicher Skepsis entgegen dass Grid-Frameworks gestalterische Freiheiten durch die

Vorgaben bei den Seitendimensionen einschränken, lassen sich diese jedoch sehr gut durch

Generatoren online so generieren, dass sie den gewünschten Vorstellungen entsprechen.

Die Verwendung eines Grid-Frameworks ist immer mit der Voraussetzung verbunden, dass

das Layout auch in einem Gestaltungsraster erarbeitet worden ist. Das grenzt das

Einsatzgebiet ein. Steht das Design bzw. Layout der Seite im Fokus eines Webprojekts sollte

es nicht in ein Grid-Framework gezwängt werden. Die persönliche Note z.B. bei

künstlerischen Seiten (z.B. von Künstlern oder Fotografen-Portfolios) würde durch die

Gestaltungsraster in vielen Fällen unterdrückt.

Wurde das Layout bereits auf Basis eines Gestaltungsraster entwickelt bzw. ist die Webseite

die Umsetzung eines Printmediums sind Grid-Frameworks eine sehr gute Möglichkeit schnell

Browserkompatibilitätsproblemen zu umschiffen und auch nach Release der Website eine

gute und komfortable Möglichkeit zu besitzen Änderungen vorzunehmen.

Innerhalb der Grid-Frameworks ist Blueprint klarer Favorit, da es möglich ist die Attribute der

Blueprint-Klassen mit dem kleinen Ruby-Skript compress.rb, das auch im Downloadpaket

enthalten ist, auf eigene Klassennamen zu übertragen. Dadurch wird im Gegensatz zu 960

Grid und YUI eine semantische Korrektheit der Klassen gewährleistet.

Der Vorteil von 960 Grid sind die dafür entwickelten Online-Generatoren in denen sich in

wenigen Minuten ein Grundgerüst zusammen zustellen lässt. YUI wirkt auf Grund des auf den

ersten Blick nicht durchschaubaren Source-Codes eher kompliziert.

Die Dokumentation bei 960 Grid fällt eher schwach aus. YUI bietet ein paar Seiten mit

Tutorials und Beispiele als Dokumentation an, Blueprint ist mit einem kleinen Wiki, einem in

mehrsprachigen Tutorials und Demos noch am besten aufgestellt.

4. CSS Framework YAML

Während Grid-Frameworks sich am Anwender orientieren, sind CSS-Frameworks

entwicklerorientiert. Das eigentliche Layout wird somit nicht im HTML-Teil der Webseite,

sondern wirklich in CSS entwickelt. Während in Grid-Frameworks nur vorgefertigte CSS Klassen in

HTML auf <div>-Elemente zu gewiesen werden, werden bei einem CSS-Framework primär die

CSS-Klassen editiert. Es herrscht also eine klare Trennung vom Inhalt (HTML) und vom Layout

(CSS) der Seite. Das Layout ist flexibel und bietet größere Freiheit bei der Gestaltung, kann aber

wenn gewünscht auf Grids basieren.

Die Einarbeitung bei CSS-Frameworks liegt deutlich höher als bei Grid-Systemen, da man neben

CSS auch noch die Idee hinter dem Framework verstehen sollte.

Page 10: CSS Framework

9

Unter dem Namen YAML (Yet Another MultiColumn Layout)10 veröffentlicht Dirk Jesse seit

Oktober 2005 ein CSS-Framework. Das etwa 140kb Framework ist etwas größer als die vorher

besprochenen Grid-Frameworks, verfügt jedoch auch über eine größere Ausstattung.

Im ursprünglichen Zustand verfügt das Layout über drei Spalten, lässt sich jedoch auch auf ein

zweispaltiges Layout minimieren. YAML besteht aus mehreren Teilen: dem Reset der Browser-

CSS-Eigenschaften (Eigenentwicklung), den eigentlichen Bausteinen des Layouts und einer

separaten Datei für das Debugging des Internet Explorer 6.

Zur schnelleren Entwicklung kann der YAML Builder11 eingesetzt werden. Mit diesem Tool ist es

möglich auch mit nur wenigen Kenntnissen schnell ein Layout zu erstellen und sich den

Quellcode direkt ausgeben zu lassen, welcher dann sogar im Internet Explorer 5.x funktioniert.

Im Community-Bereich12 der YAML-Website finden sich viele Lösungen wie z.B.

Templates/Themes für viele Content Management System zur Verfügung, diese lassen sich für

die Nutzung auf der eigenen Seite weiter anpassen. Auch ein ausführliche Online-Tutorials

stehen für den Einstieg bereit.

Für den Einsatz im kommerziellen Bereich ist zu beachten, dass YAML unter der Creative

Commons Attribution 2.0 Lizenz (CC-A 2.0)13 veröffentlicht wird und somit eine Namensnennung

des Autors und die Rückverlinkung zur YAML-Projekthomepage laut Lizenz erforderlich sind. Da

diese meist bei Kunden unerwünscht sind, muss dann eine von zwei zur Verfügung stehenden

kostenpflichtigen Lizenzen erworben werden.

Die Vorteile von YAML sind die gute deutsch- und englischsprachige Dokumentation, welche sehr

umfangreich und informativ ist. Der Aufbau der Klassen und auch die Dateistruktur sind

intelligent aufgebaut und bieten eine gute Basis für barrierearme Webentwicklung, da bereits

Inhalt und Layout getrennt vorliegen. Zudem arbeitet YAML mit einer Fallbacklösung. Die

Hauptdateien mit den CSS-Klassen bleiben unangerührt und werden nur durch neue vom

Anwender erstellte CSS-Dateien und den darin befindlichen Klassen überschrieben. Somit kann

bei Fehlern schnell durch Entfernen der eigenen Klassen wieder der Ursprungszustand wieder

hergestellt werden. Das erhöht zwar das Volumen der zu ladenden Daten, sollte aber bei den

heutigen Verbindungsgeschwindigkeiten (auch im Bereich von mobilen Endgeräten) keine

deutliche Erhöhung der Ladezeit bewirken.

Page 11: CSS Framework

10

5. Serverseitiges CSS-Framework: Sass

CSS ist eine einfache und mit Absicht simpel gehaltene Formatierungssprache. Leider stößt man

dadurch jedoch auch schnell an die Grenzen des Machbaren. Wird eine Farbe an mehreren

Stellen in einer Website genutzt, muss sie für jedes Element einzeln zu gewiesen werden. Ändert

sich die Farbe im Nachhinein müssen die Attribute für jedes betroffene Element erneut

angepasst werden. Eine Variable für die Farbe würde diese Umstände schnell beheben. Würde

die Farbe einmal gesetzt, könnte sie auch für alle Elemente gesetzt werden und bei Änderungen

der Farbe wäre es nur noch notwendig die Variable ein einziges Mal zu ändern.

Sass14 erweitert CSS mit der Syntax SCSS (Sassy CSS) und so mit der Möglichkeit Variablen

einzusetzen und mit diesen auch mathematische Operationen durchführen zu können:

Abbildung 3 - Sass Variablen (Quelle: http://sass-lang.com, Stand 19.01.10)

Sass basiert auf Ruby, kann aber durch eine eigene sehr an CSS orientierte Syntax auch ohne

Kenntnisse von Ruby eingesetzt werden. Der entwickelte Code kann über Sass manuell durch

Konsolenaufruf in eine Standard CSS-Datei gewandelt werden und ist dann für jeden CSS fähigen

Browser interpretierbar.

Weiter ist auch möglich Sass serverseitig so zu konfigurieren, dass bei einem Update des Sass-File

(Dateiendung *.scss) automatisch der in Abhängigkeit stehende CSS-File neu generiert wird. Der

Besucher der Webseite bekommt von diesem Vorgang nichts mit und hat nur Zugang auf die

eigentliche CSS-Datei, die dann sein Browser interpretiert.

Page 12: CSS Framework

11

Doch Sass bietet nicht nur Variablen sondern auch die Möglichkeit Selektoren und Attribute zu

verschachteln:

Abbildung 4 - Sass Verschachtelung (Quelle: http://sass-lang.com, Stand 19.01.10)

Die Übersichtlichkeit im Source-Code steigert sich enorm und in Abhängigkeit stehende

Selektoren, Klassen und Attribute lassen sich gruppieren.

Eine weitere Erweiterung sind „Mixins“. Mixins sind eine einfach, aber sehr effektiv, denn mit

ihnen lässt sich ein ganzer Satz von CSS-Attributen einfach auf einen anderen Selektor

anwenden. Zusätzlich ist es auch möglich Parameter an Mixins zu übergeben:

Abbildung 5- Sass Mixins (Quelle: http://sass-lang.com, Stand 19.01.10)

In diesem Code-Beispiel erkennt man gut die Möglichkeiten von Mixins. In Sass werden in der

Klasse „#data“ die beiden Mixins „left“ und „table-base“ includet. In der generierten CSS werden

dann alle Attribute entsprechend der CSS-Syntax verteilt. Die Parameterübergabe lässt sich bei

Page 13: CSS Framework

12

„left“ erkennen, in „#date“ wird dem Mixin „left“ als Parameter „10px“ übergeben. Diese 10px

finden sich dann auf der CSS Seite im „margin-left“-Attribut von „#data“ wieder.

Die letzte Erweiterung ist die Vererbung von Selektoren. Durch die Vererbung lässt sich eine sehr

gut überschaubare Hierarchie der Selektoren schaffen und die Entwicklung ist viel effektiver:

Abbildung 6- Sass Selektoren Vererbung (Quelle: http://sass-lang.com, Stand 19.01.10)

Mit „@extend“ erweitert die Klasse „.badError“ die Klasse „Error“. Angenommen man würde die

Klasse „.badError“ nachträglich im CSS-Teil einpflegen, müsste man dies an drei Stellen tun, um

alle gewünschten Style-Attribute eingebunden zu haben. In SCSS reicht das Einfügen von

„.badError“ unter Angabe welchen anderen Selektor die Klasse erweitern soll.

Als Alternative zu Sass gibt es auch noch LESS15. Die Grundidee hinter Sass und LESS ist gleich,

lediglich die Syntax weist Unterschiede auf. Für beide Frameworks gibt es als Erweiterung diverse

Parser

Page 14: CSS Framework

13

6. Fazit

CSS Frameworks sind sehr gute Tools, die Webentwickler in vielen Bereichen entlasten können.

Sie ersparen Arbeit und vereinfachen die Entwicklung von Webseiten, wenn sie richtig eingesetzt

werden. Kenntnisse in CSS sollten auf jeden Fall vor dem Einsatz vorhanden sein.

Die erste Frage, wenn es um CSS Frameworks geht, sollte immer sein: Macht es überhaupt Sinn

ein Framework einzusetzen? Die Einarbeitung in ein komplexeres CSS Framework wie z.B. YAML

lohnt sich nur wohl nur wenn man mehrere neue Webseiten im Monat erstellt. Dann benötigt es

natürlich noch der Überlegung ob bei kommerzieller Nutzung der Kauf einer Lizenz von YAML

notwendig sein könnte.

Grid-Frameworks lassen sich wegen der Vorgabe bei der Seitengröße nicht immer anwenden.

Zwar lassen sich Blueprint und 960 Grid sehr gut mit Online Generatoren an die persönlichen

Wünsche anpassen, die Basis des Gestaltungsrasters bleibt aber bestehen. Gestaltungsraster

lassen sich einfach nicht auf jede beliebige Seite anwenden, denn das Design einer Website sollte

immer im Vordergrund stehen. Ein Layout direkt für ein Framework zu entwerfen ist wohl nur in

wenigen Fällen (Zeitdruck, Umsetzung eines Printmediums) wirklich sinnvoll.

Eine wirkliche Erleichterung kann der Einsatz von serverseitigen CSS-Frameworks wie z.B. Sass

sein. Die Variablen, Mixins und die Vererbung von CSS-Attributen sind eine starke Erweiterung zu

CSS und können sehr viel Arbeit ersparen, wenn man etwa an die CSS-Dateien von

Unternehmen-Websites denkt, die meist mehr als 10000 Zeilen besitzen.

Page 15: CSS Framework

14

Links

1. http://meyerweb.com/eric/tools/css/reset/

2. http://developer.yahoo.com/yui/reset/

3. http://www.blueprintcss.org/

4. http://bgg.kematzy.com/

5. http://www.w3.org/TR/html5/elements.html#classes

6. http://jdclayton.com/blueprints_compress_a_walkthrough.html

7. http://960.gs/

8. http://developer.yahoo.com/yui/grids/

9. http://developer.yahoo.com/yui/grids/builder/

10. http://www.yaml.de/

11. http://builder.yaml.de/

12. http://www.yaml.de/de/community.html

13. http://creativecommons.org/licenses/by/2.0/de/

14. http://sass-lang.com/

15. http://lesscss.org/