Sass | |
---|---|
![]() | |
Basisdaten | |
Erscheinungsjahr: | 2007 |
Designer: | Hampton Catlin |
Entwickler: | Natalie Weizenbaum, Chris Eppstein |
Aktuelle Version: | 1.52.3[1] (9. Juni 2022) |
Beeinflusst von: | CSS, YAML |
Beeinflusste: | Less, Stylus |
Betriebssystem: | Plattformunabhängig |
Lizenz: | MIT-Lizenz |
sass-lang.com |
Sass (Syntactically Awesome Stylesheets) ist eine Stylesheet-Sprache, die als CSS-Präprozessor mit Variablen, Schleifen und vielen anderen Funktionen, die Cascading Style Sheets (CSS) nicht beinhaltet, die Erstellung von CSS vereinfacht und die Pflege großer Stylesheets erleichtert. Sie wurde ursprünglich beeinflusst von der Auszeichnungssprache YAML, von Hampton Catlin entworfen und von Natalie Weizenbaum entwickelt.
Nach der Fertigstellung der initialen Version setzte Weizenbaum zusammen mit Chris Eppstein die Arbeit an Sass fort und implementierte mit SassScript eine einfache Scriptsprache zum Gebrauch innerhalb von Sass-Dateien. Neben der unter MIT-Lizenz für viele Plattformen verfügbaren kommandozeilenbasierten Compilersoftware haben sich weitere Verarbeitungsprogramme etabliert.
Neben der ursprünglichen an YAML angelehnten Sass-Syntax unterstützt Sass auch die neuere und heute weiter verbreitete SCSS-Syntax, die sich an der klassischen CSS-Schreibweise orientiert.
Eines der Schlüsselmerkmale sind verschachtelte Regeln (nested rules). Durch diese ist es einfach, komplizierte geschachtelte Selektoren zu lesen und zu schreiben.
#header
background: #FFFFFF
/* -or- :background #FFFFFF */
.error
color: #FF0000
a
text-decoration: none
&:hover
text-decoration: underline
Dies wird kompiliert zu:
#header {
background: #FFFFFF;
}
#header .error {
color: #FF0000;
}
#header a {
text-decoration: none
}
#header a:hover {
text-decoration: underline
}
Eine besondere Funktion stellt die Verschachtelung von Media Queries in Selektoren dar. So können im Quellcode Style-Deklarationen für ein und dasselbe Element am gleichen Ort verwaltet werden.
#header
color: red
@media (min-width: 400px)
color: blue
Dies wird kompiliert zu:
#header {
color: red;
}
@media (min-width: 400px){
#header {
color: blue;
}
}
Sass erlaubt die Nutzung von Variablen. Dies erleichtert es, bestimmte Werte in umfangreichen Stylesheets konsistent zu halten. Wartungsaufgaben werden durch die Definition der Variablen an zentraler Stelle erheblich vereinfacht.
$link_color: #00F
a
color: $link_color
Wird kompiliert zu
a {
color: #00F
}
Mixins erlauben die wiederholte Referenzierung ganzer Code-Abschnitte. In Anlehnung an die in klassischen Programmiersprachen vorhandenen Funktionen können Mixins auch Argumente übergeben werden. Mixins können, wie normale Anweisungen auch, weitere geschachtelte Selektoren enthalten. Im folgenden Beispiel wird die Variable $farbe
im Mixin dem Element als Hintergrundfarbe zugewiesen.
@mixin box($farbe)
padding: 1rem
border: 2px solid gray
background: $farbe
a
@include box(red)
Wird kompiliert zu
a {
padding: 1rem;
border: 2px solid gray;
background: red;
}
Neben der oben beschriebenen Sass-Syntax (indented syntax) verfügt Sass über die neuere und heute weiter verbreitete SCSS-Syntax (Sassy CSS). Hier sind für die Verschachtelung der Selektoren nicht die Einrückung des Quelltextes ausschlaggebend, sondern wie in der klassischen CSS-Schreibweise die geschweiften Klammern. Auch sind am Ende der Regeln Semikola erforderlich.
$meineFarbe: #3BBFCE
.navigation
border-color: $meineFarbe
color: darken($meineFarbe, 9%)
$meineFarbe: #3BBFCE;
.navigation {
border-color: $meineFarbe;
color: darken($meineFarbe, 9%);
}
Das kompilierte CSS ist in beiden Fällen identisch. Eine automatische Umwandlung zwischen den beiden Syntax-Varianten ist ohne Probleme möglich.
SassScript ist eine Skriptsprache, die innerhalb von Sass zur Anwendung kommt. SassScript erweitert Sass um Funktionen wie Grundrechenarten, Methoden zur Manipulation von Farbwerten, einfache Schleifenkonstrukte und Fallunterscheidungen.
Die Nutzung einer Metasprache für CSS erfordert die Übersetzung in CSS-Code durch einen Präprozessor und damit einen weiteren Schritt im Entwicklungsprozess. Kritisiert wird das damit einhergehende erschwerte Debugging sowie das Erweitern potenzieller Fehlerquellen. Auch könne der Kaskadierungsgedanke von CSS verloren gehen, der mit der Vergabe von Klassen gegeben ist.[2]