Artikel lesen
Transcription
Artikel lesen
WORKSHOP: CSS-ENTWICKLUNG MIT SASS UND COMPASS CSS-STYLE: EASY; Änderungen am Layout bestehender Web-Projekte sind aufwändig und meist mit Eingriffen in viele einzelne CSS-Dateien verbunden. Hinzu kommen zahlreiche Dopplungen und möglicherweise noch andere Projekt-Mitarbeiter, die wiederum eigene Stile pflegen. Die CSS-Präprozessoren Sass und Compass wollen diesen Aufwand begrenzen und erlauben eine einfache CSS-Programmierung. Wir zeigen, wie das funktioniert. TEXT EMRULLAH DEMIR Sobald eine Webseite umfangreich und deren Inhalt komplex wird, wird das CSS umständlich, unübersichtlich und der nötige Arbeitsaufwand steigt enorm. Die Formatierungen wiederholen sich häufig, sodass Erweiterungen und Änderungen der CSS Dateien aufwändig werden und viel Zeit erfordern. Kurz gesagt, man überlegt sich, wie man CSS strukturieren, übersichtlich gestalten, in Module unterteilen und auch wiederverwendbar machen kann. Ein möglicher Lösungsansatz sind so genannte Präprozessoren. Diese haben eine CSS-ähnliche Syntax und erleichtern Entwicklern das Arbeiten mit CSS-Dateien. Allerdings kann der Browser diese alternative Syntax nicht interpretieren. Es ist deshalb ein Compiler nötig, der die Dateien während oder nach der Entwicklung in „normales“, optimiertes und fehlerfreies CSS umwandelt. SASS Sass lässt sich auch direkt im Browser ausprobieren. Einfach Sass- und/oder CSS-Code eingeben und übersetzen lassen. Sass (Syntactically Awesome Stylesheet) ist einer dieser Präprozessoren und eine MetaSprache, mit der CSS-Code strukturiert und flexibel geschrieben, ja fast schon programmiert werden kann. So gibt es beispielsweise Variablen, Schleifen, dynamische Berechnungen von Werten und sogar Funktionen [1]. Mit Sass werden SCSS-Dateien erstellt. Die SCSS-Syntax baut auf CSS auf. Das bedeutet, jedes valide CSS kann direkt ohne Anpassungen in eine SCSSDatei übernommen werden; diese hat die Endung .scss. Insich nun zahlreiche Sprach-Konder Präprozessor in valides CSS nerhalb dieser Dateien lassen strukte anwenden, die dann umwandelt. Entwickler können grundsätzliche Vorgaben, wie zum Beispiel Farben, Pixelwerte oder auch Schriftarten, an zentraler Stelle in 1 Variablen definieren und dann im weiteren Code verwenden. Somit lässt sich etwa ein Standard-Padding-Wert definieren, der in weiterer Folge einerseits schlicht verwendet, andererseits aber auch für Berechnungen herangezogen werden kann. VARIABLEN $darkGrey: #A0A0A0; $boxPadding: 10px; $font: Helvetica, Arial, sans-serif; body { color: $darkGrey; font-family: $font; } .box { padding: $boxPadding; } Listing 1 BERECHNUNGEN .container { width: $pageWidth - $boxPadding * 2; } Listing 2 Sass erlaubt darüber hinaus das Verschachteln von CSS-Regeln. Dies verbessert die Übersicht im Stylesheet, da sich zusammengehörige Styles innerhalb eines Blocks darstellen lassen. CSS VERSCHACHTELN .header { width: 100%; .logo { width: 150px; background-color: red; } } Listing 3 © yeebase media 2012. Veröffentlichung und Vervielfältigung nur mit Genehmigung der yeebase media GmbH. http://t3n.de Eine der mächtigsten Fähigkeiten von Sass sind so genannte Mixins. Damit können Webentwickler CSS-Code quasi programmieren: Man deklariert einen Mixin (vergleichbar mit einer Funktion), welcher sich optional auch mit Argumenten versehen lässt und ruft diesen dann per @include in der Style-Zuweisung eines anderen Elements auf. Dieses Element erhält dann zusätzlich die im Mixin angegebenen Styles; die Mixin-Styles werden also sozusagen „hineingemischt“ – daher die Bezeichnung. jetzt sehr einfach abschließen: „gem install sass“ installiert zunächst Sass, „gem install compass“ im Anschluss daran Compass. Mac Ruby ist auf dem Mac bereits installiert, sodass Sass und Compass direkt installiert werden können. Im Terminal erledigen das die Befehle „sudo gem install sass“ und „sudo gem install sass“. MIXIN-DEKLARATION UND -AUFRUF @mixin addBorder($width, $color) { border: $width $color solid; } .footer { @include addBorder(2px, $darkGrey); // andere Style-Zuweisungen... } Listing 4 Schließlich lassen sich, im Sinne einer besseren Übersichtlichkeit oder einfach nur der Modularität und Wiederverwendbarkeit wegen, einzelne SCSS-Dateien auslagern und nur bei Bedarf importieren. Wichtig ist dabei im Grunde nur, dass zwar die Dateinamen mit einem Unterstrich beginnen, der Name in der Import-Anweisung den Unterstrich aber nicht mitführt. Der Unterstrich dient lediglich dazu, den Sass-Compiler anzuweisen, diese Datei zu ignorieren und nicht automatisch in eine CSS-Datei umzuwandeln. IMPORT DER DATEI MODULES/_TEXTSTYLES.SCSS @import "modules/textstyles"; Listing 5 COMPASS Compass ist ein CSS3-Framework, welches auf Sass aufsetzt und eine Menge Werkzeuge, Bibliotheken und nützliche Kleinigkeiten an Bord hat. Darunter befinden sich etwa Grid-Systeme, Typographie-Helfer, Browser-übergreifende CSS3-Funktionen, Reset-Styles, automatische Generierung von CSS-Sprites oder sogar UIElemente wie etwa Tabs [2]. ENTWICKLUNG MIT SCSS UND COMPASS Im Folgenden soll nun auf Basis von Sass und Compass eine Demoseite [3] mit zwölfspaltigem Layoutraster, Kopfbereich mit Logo, Inhalt mit linker Spalte und Hauptinhalt sowie einem Footer mit drei nebeneinander platzierten Boxen entstehen. Doch bevor es an die Entwicklung der Site geht, gilt es zunächst, die Arbeitsumgebung vorzubereiten. Windows Unter Windows muss zunächst Ruby [4] installiert werden; wichtig dabei ist, dass die Option „Add Ruby executables to your PATH“ aktiviert ist, damit andere Installationen Ruby später finden können. Nach der Installation lässt sich das auf der Kommandozeile (cmd) sehr einfach mit dem Befehl „gem -v“ überprüfen. Wird als Antwort darauf keine Versionsnummer gezeigt, so ist der Pfad falsch gesetzt und es muss manuell nachjustiert werden. Das passiert unter Computer > Eigenschaften > Erweiterte Einstellungen > Umgebungsvariablen > Systemvariablen. Der Pfad zum bin/-Verzeichnis im Ruby-Installationsordner muss hier hinzugefügt werden. Mit funktionierendem Ruby lässt sich die Arbeitsumgebung Die finale Demoseite unseres Workshops. 960 Grid System Das 960 Grid System [5] ist eine einfache CSS-Bibliothek, die Spalten-Layouts unterstützt und die Entwicklung wesentlich vereinfacht. 960gs hat sich mittlerweile aufgrund seiner einfachen und kompakten Handhabung als Quasi-Standard für Layoutraster etabliert – im Folgenden wird es deshalb ebenfalls als Grundlage genutzt. Die Installation ist auch hier denkbar einfach. Auf der Kommandozeile beziehungsweise im Terminal reicht dafür schlicht der Befehl „gem install compass-960-plugin“. Projekt anlegen und überwachen lassen Im nächsten Schritt wird mit Compass die Projektstruktur erstellt und Compass angewiesen, diese zu überwachen. Das bedeutet, dass SCSS-Dateien automatisch zu CSS-Dateien kompiliert werden, quasi „on the fly“. Die Befehle werden erneut auf der Kommandozeile ausgeführt und inkludieren auch die Anweisung, 960gs zu verwenden. Compass erstellt dann das Verzeichnis „my_project“ und überwacht dieses. PROJEKT ANLEGEN UND ÜBERWACHEN compass create -r ninesixty path/to/my_project --using 960 compass watch path/to/my_project Listing 6 Kurz erwähnt sei an dieser Stelle die Konfigurationsdatei config.rb. Sie enthält den Projektpfad und einige andere Konfigurationsoptionen. So lässt sich dort beispielsweise festgelegen, dass CSS-Code in minimierter Form erstellt werden soll. Das mit Compass frisch erstellte ProDie automatisch erstellten Dajektverzeichnis des Demoprojekts. teien text.scss und text.css benötigen wir für das Demoprojekt nicht und löschen sie deshalb. Stattdessen legen wir eine Datei im sass/-Verzeichnis mit dem Namen „_base.scss“ für unsere grundlegenden Style-Deklarationen an. Zur Erinnerung: Der Unterstrich am Anfang des Dateinamens weist Sass an, hier nicht aktiv zu werden und die Datei entsprechend nicht in CSS umzuwandeln. © yeebase media 2012. Veröffentlichung und Vervielfältigung nur mit Genehmigung der yeebase media GmbH. http://t3n.de 2 AUSZUG AUS _BASE.SCSS $baseLineHeight: 20px; $textColor: #444444; $baseFontFamily: Arial, Helvetica, sans-serif; body { font-family: $baseFontFamily; line-height: $baseLineHeight; color: $textColor; } Listing 7 Die Datei grid.scss enthält unsere Hauptarbeit. Im Folgenden einige beispielhafte Auszüge, welche demonstrieren, wie einfach sich Spalten-basierte Layouts unter Einsatz des Compass-960-GridSystems realisieren lassen. TEILE AUS GRID.SCSS /* Import der benötigten Compass-Module und der _base.scss */ @import "960/grid"; @import "compass/css3"; @import "compass/utilities"; @import "base"; /* Header mit Logo und Navigation */ .header { // Wendet das Grid System auf das Element an: @include grid-container; .logo { // Weist dem .logo-Element im Header eine 2-spaltige Breite zu: @include grid(2); } FAZIT Sass und Compass nehmen dem Entwickler zwar nicht die komplette Arbeit ab, sind jedoch durchaus eine große Hilfe im Bereich der Frontend-Entwicklung. Neben der Zeitersparnis können Webentwickler so den Code ihrer Websites übersichtlich gestalten und auf ständig weiterentwickelte Bibliotheken zurückgreifen. Aufgrund der Tatsache, dass valides CSS direkt in SCSS-Dateien übernommen werden kann, lohnt sich entsprechend der Umstieg bereits bestehender Projekte. Und auch für den Einsatz in kleineren oder statischen Websites ist der Einsatz bereits lohnenswert, zumal es schon eine Erleichterung sein kann, einen Farbcode nur einmal und nicht zweimal zu ändern. ↔ LINKS [1] [2] [3] [4] [5] ↗ Artikel diskutieren und alle Links auf t3n.de/3263 Sass: http://sass-lang.com/ Compass: http://compass-style.org/ Projektdatei zur Demo-Seite: http://t3n.me/demo-sass Ruby-Installer für Windows: http://rubyinstaller.org/ 960 Grid System: http://960.gs/ EMRULLAH DEMIR realisiert seit vielen Jahren als Webentwickler bei der S2 INTERMEDIA GmbH zahlreiche Internetprojekte. In diesem Umfeld beschäftigt er sich umfassend mit dem Thema der Frontend-Entwicklung und verfolgt aufmerksam Neuerungen auf dem Markt. .navigation { // Das Element soll sich über zehn Spalten erstrecken: @include grid(10); ul { // Horizontales Listen-Layout: @include horizontal-list-container; li { @include horizontal-list-item; } } } } /* Haupt-Inhaltsbereich */ .container { // Wendet das Grid System auf das Element an: @include grid-container; .sidebar { // Das Element soll sich über vier Spalten erstrecken: @include grid(4); } .content { // Das Element soll sich über acht Spalten erstrecken: @include grid(8); } } /* Footer */ .footer { // Wendet das Grid System auf das Element an: @include grid-container; .box { // Das Element soll sich über vier Spalten erstrecken: @include grid(4); } } Listing 8 3 © yeebase media 2012. Veröffentlichung und Vervielfältigung nur mit Genehmigung der yeebase media GmbH. http://t3n.de