Wer moderne Webseiten pro­gram­mie­ren bzw. designen möchte, kommt an CSS nicht vorbei. Die Style­sheet-Sprache, die wie HTML zu den Kern­spra­chen des World Wide Webs zählt, er­mög­licht es, Web­sei­ten­in­hal­te und deren grafische Dar­stel­lung sauber von­ein­an­der zu trennen. Auf diese Weise lassen sich Größen wie Layout, Farben oder Ty­po­gra­fie jederzeit anpassen, ohne dass hierfür der gesamte Quellcode auf den Kopf gestellt werden muss. Je größer ein Web­pro­jekt wird, desto komplexer und un­über­sicht­li­cher werden al­ler­dings die Style­sheets, also die Dokumente, in denen die ge­stal­te­ri­schen In­for­ma­tio­nen auf Basis von CSS auf­ge­zeich­net sind – und damit auch die Arbeit mit der Web­spra­che. Abhilfe schafft der CSS-Prä­pro­zes­sor Less.

Was ist Less?

Less (Leaner Style Sheets) ist eine rück­wärts­kom­pa­ti­ble Sprach­er­wei­te­rung bzw. ein Prä­pro­zes­sor für die Style­sheet-Sprache CSS. Das bedeutet, dass jeder beliebige CSS-Code au­to­ma­tisch auch ein gültiger Less-Code ist (umgekehrt gilt dies jedoch nicht). Der Zweck von Less liegt darin, das Schreiben von CSS-Code ef­fi­zi­en­ter zu gestalten, weshalb die von SASS be­ein­fluss­te Sprache ver­schie­de­ne Er­wei­te­run­gen zu den normalen CSS-An­wei­sun­gen wie Variablen und Funk­tio­nen bietet, die u. a. ein ein­fa­che­res Ma­nage­ment der Style­sheets er­mög­li­chen und mühsames Code-Du­pli­zie­ren erübrigen.

Als Alexis Sellier den CSS-Prä­pro­zes­sor 2009 ver­öf­fent­lich­te, war der Compiler für die Um­wand­lung von Less in CSS noch in der ob­jekt­ori­en­tier­ten Pro­gram­mier­spra­che Ruby ge­schrie­ben. Mitt­ler­wei­le ist das Ja­va­Script-Tool Less.js die Basis für die Style­sheet-Sprache sowie den Kom­pi­lie­rungs­pro­zess, was den Vorteil hat, dass Less somit nicht nur ser­ver­sei­tig, sondern auch cli­ent­sei­tig (in Web­brow­sern) kom­pi­liert werden kann.

Less vs. CSS: Wo liegt der Un­ter­schied?

Sowohl CSS als auch Less werden den Style­sheet-Sprachen zu­ge­ord­net. In beiden Fällen handelt es sich also um formale Sprachen, die das Er­schei­nungs­bild von Be­nut­zer­ober­flä­chen bzw. Do­ku­men­ten prägen. Hierfür müssen die Style­sheet-Dateien mit den ge­wünsch­ten Ge­stal­tungs­an­wei­sun­gen lediglich den HTML-Elementen einer Website zu­ge­ord­net werden – die Aus­wer­tung übernimmt der Browser. Der ent­schei­den­de Un­ter­schied zwischen Less und CSS liegt dabei darin, dass CSS eine statische Sprache ist, während Less zu den dy­na­mi­schen Sprachen zählt und somit auch dy­na­mi­sche Features wie Variablen, Ope­ra­to­ren, Funk­tio­nen, Mixins, Ver­schach­te­lun­gen bietet, die in CSS fehlen.

Während An­wei­sun­gen in CSS also nach einem festen Schema erfolgen müssen, bietet Less Ent­wick­lern we­sent­lich fle­xi­ble­re Mög­lich­kei­ten: So lassen sich z. B. in­di­vi­du­el­le Regeln für eine be­lie­bi­gen Klasse von Elementen de­fi­nie­ren, die für das gesamte Style­sheet gelten – auf diese Weise spart man mühsame Code-Wie­der­ho­lun­gen. Folglich un­ter­schei­det sich auch die Syntax der beiden Sprachen. Grund­sätz­lich lässt sich die Less-Syntax als Me­ta­syn­tax von CSS einstufen, da gültiger CSS-Code immer auch valider Less-Code mit der gleichen Semantik ist.

Client- oder ser­ver­sei­tig: Wie funk­tio­niert die Nutzung von Less?

Wenn Sie Less für Ihr Projekt verwenden möchten, haben Sie zwei Mög­lich­kei­ten: Sie nutzen entweder den Web­brow­ser Ihrer Wahl, um Ihre Less-Style­sheets mithilfe von Less.js cli­ent­sei­tig zu kom­pi­lie­ren, oder Sie in­stal­lie­ren die Ja­va­Script-Anwendung auf Ihrem Ent­wick­lungs­rech­ner und wandeln den Code dort mithilfe von Less.js und der Ja­va­Script-Lauf­zeit­um­ge­bung Node.js über die Kom­man­do­zei­le um.

Less CSS: Cli­ent­sei­ti­ge Ver­wen­dung

Die cli­ent­sei­ti­ge Nutzung von Less ist der ein­fachs­te und schnells­te Weg für die Arbeit mit der Style­sheet-Sprache. Für die spätere Live-Umgebung ist diese Variante al­ler­dings nicht zu empfehlen, da die zu­sätz­li­che Kom­pi­lie­rung von Less zu CSS mit klaren Per­for­mance-Einbußen für zu­grei­fen­de Nutzer verknüpft wäre. In Browsern mit de­ak­ti­vier­tem Ja­va­Script würden die Ge­stal­tungs­an­wei­sun­gen darüber hinaus gänzlich wegfallen.

Um Less im Browser zu kom­pi­lie­ren, geben Sie zunächst im je­wei­li­gen Dokument an, dass Sie Less-Style­sheets (also Style­sheets mit der Da­tei­endung .less) verwenden möchten. Hierfür binden Sie diese mithilfe des rel-Attributs „style­sheet/less“ ein:

<link rel="stylesheet/less" type="text/css" href="styles.less">

An­schlie­ßend laden Sie die aktuelle Version von Less.js herunter, die bei­spiels­wei­se im of­fi­zi­el­len GitHub-Ver­zeich­nis des CSS-Prä­pro­zes­sors zu finden ist. Das Ja­va­Script-Tool binden Sie dann im <head>-Bereich Ihres Projekts ein:

<script src="less.js" type="text/javascript"></script>
Hinweis

Es ist wichtig, dass Sie zunächst das Style­sheet und erst dann das Skript einbinden. An­dern­falls kann es zu Ver­ar­bei­tungs­pro­ble­men kommen!

Ser­ver­sei­ti­ge Ver­wen­dung von Less CSS

Auch auf dem Ent­wick­lungs­rech­ner ist Less schnell in­stal­liert und ebenso einfach aus­ge­führt. Dabei haben Sie hin­sicht­lich des Be­triebs­sys­tems freie Auswahl: Der CSS-Prä­pro­zes­sor läuft unter Windows, macOS und UNIX/Linux. Vor­aus­set­zung ist, dass die bereits erwähnte Ja­va­Script-Lauf­zeit­um­ge­bung Node.js in­stal­liert ist.

Laden Sie also zunächst die aktuelle Version für Ihr System auf der Node.js-Website herunter und in­stal­lie­ren Sie diese. Mit npm, dem Pa­ket­ma­na­ger der Ja­va­Script-Lauf­zeit­um­ge­bung, in­stal­lie­ren Sie im Anschluss die Style­sheet-Sprache über die Kom­man­do­zei­le:

npm install -g less

Erstellte Less-Style­sheets können Sie nun jederzeit – ebenfalls über die Kom­man­do­zei­le – kom­pi­lie­ren. Die Bei­spiel­da­tei example.less lässt sich bei­spiels­wei­se mit folgendem Kommando in eine CSS-Datei umwandeln:

lessc example.less example.css

Less-Tutorial: Die wich­tigs­ten Less-Features anhand von Bei­spie­len erklärt

Sich mit Less aus­ein­an­der­zu­set­zen, lohnt sich für jeden, der re­gel­mä­ßig mit CSS zu tun hat. Durch die Ver­wen­dung von Less hat man nicht nur den Vorteil, dy­na­mi­sches Verhalten in seine Style­sheet-Codes einbauen zu können, sondern auch die Mög­lich­keit, eine Menge Zeit und Aufwand zu sparen. Natürlich gilt es hierfür zunächst, sich in die Ei­gen­hei­ten der CSS-Er­wei­te­rung ein­zu­ar­bei­ten, denn um Style­sheets in Less schreiben zu können, müssen auch die er­for­der­li­chen syn­tak­ti­schen Grund­la­gen bekannt sein. Im Rahmen dieses kleinen Less-Tutorials stellen wir Ihnen anhand prak­ti­scher Less-CSS-Beispiele die wich­tigs­ten Features inklusive der je­wei­li­gen Notation vor.

Variablen

Eine der größten Stärken von Less ist die Mög­lich­keit, wie in anderen Pro­gram­mier­spra­chen Variablen zu erstellen. Diese können jegliche Art von Werten speichern, wobei vor allem solche Werte relevant sind, die Sie besonders häufig in Ihrem Style­sheet verwenden: So werden Variablen z. B. häufig dazu genutzt, um Farben, Fonts, Di­men­sio­nen (Größe, Höhe, Breite), Se­lek­to­ren oder URLs sowie deren Ab­wand­lun­gen (z. B. heller/dunkler etc.) zentral zu de­fi­nie­ren. Die fest­ge­leg­ten Werte lassen sich dann an be­lie­bi­ger Stelle im Style­sheet verwenden, sodass bei globalen Än­de­run­gen nur noch eine einzige Codezeile geändert werden muss.

Im folgenden Code­aus­schnitt sind bei­spiel­haft zwei Variablen definiert – eine für die Hin­ter­grund­far­be (@back­ground-color), eine für die Textfarbe (@text-color). Beide enthalten He­xa­de­zi­mal-Codes:

// Less
@background-color: #ffffff;
@text-color: #000000;
p{
background-color: @background-color;
color: @text-color;
padding: 15px;
}
ul{
background-color: @background-color;
}
li{
color: @text-color;
}

Die Hin­ter­grund­far­be – in diesem Fall Weiß – wird sowohl ge­wöhn­li­chen Text­blö­cken (p) als auch un­ge­ord­ne­ten Auf­lis­tun­gen (ul) zu­ge­ord­net. Als Textfarbe ist Schwarz definiert, wobei diese für die Texte in den Text­blö­cken und auch für die Lis­ten­ele­men­te (li) in den Auf­lis­tun­gen gelten soll. Möchte man an diesen Farb­de­fi­ni­tio­nen nun Än­de­run­gen vornehmen und bei­spiels­wei­se weißen Text auf schwarzem Hin­ter­grund für die Listen und Textab­sät­ze vorgeben, brauchen Sie lediglich die Werte der beiden Variablen aus­tau­schen. In einem ge­wöhn­li­chen CSS-Sheet müssten die Werte für alle Elemente einzeln ersetzt werden. Nach der Kom­pi­lie­rung in CSS sieht der Code im Übrigen fol­gen­der­ma­ßen aus:

/* CSS */
p{
background-color: #ffffff;
color: #000000;
padding: 15px;
}
ul{
background-color: #ffffff;
}
li{
color: #1A237E;
}

Mixins

Das Prinzip von Mixins ähnelt dem von Variablen. Al­ler­dings werden in diesem Fall nicht einzelne Werte, sondern ganze Klassen inklusive der darin de­kla­rier­ten Werte zentral definiert, um diese im Anschluss jederzeit an andere Klassen im Less-Style­sheet zu vererben. Darüber hinaus können sich Mixins auch wie Funk­tio­nen verhalten und Parameter ak­zep­tie­ren (auch mit Default-Werten). Ein Beispiel liefert folgendes Mixin für ab­ge­run­de­te Ecken (.rounded-corners), das sowohl der Kopf- (#header) als auch der Fußzeile (#footer) zu­ge­wie­sen wird. Während für den Header der Vor­ga­be­wert über­nom­men wird, übergibt #footer dem Mixin einen eigenen Wert (10px):

// Less
.rounded-corners (@radius: 5px) {
border-radius: @radius;
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
}
#header {
.rounded-corners;
}
#footer {
.rounded-corners(10px);
}

Das kom­pi­lier­te CSS zu diesen Less-Code­zei­len sieht wie folgt aus:

/* CSS */
#header {
	border-radius: 5px;
	-webkit-border-radius: 5px;
	-moz-border-radius: 5px;
}
#footer {
	border-radius: 10px;
	-webkit-border-radius: 10px;
	-moz-border-radius: 10px;
}

Ver­schach­te­lun­gen

Um Ver­er­bun­gen zu erzeugen, müssen Sie in CSS auf­wen­di­ge, lange Se­lek­to­ren schreiben. In Less können Sie beliebig viele Se­lek­to­ren in­ein­an­der ver­schach­teln, was ei­ner­seits weniger Aufwand bedeutet und an­de­rer­seits für eine klarere, über­sicht­li­che­re Struktur des Style­sheets sorgt. Auch diese Mög­lich­keit des CSS-Prä­pro­zes­sors soll anhand eines Beispiels ver­deut­licht werden:

***CODE***
// Less
#header {
    h1 {
        font-size: 26px;
        font-weight: bold;
    }
    p { 
        font-size: 12px;
        a { 
            text-decoration: none;
            &:hover { 
            border-width: 1px 
            }
        }
    }
}

Die Se­lek­to­ren p, a und :hover wurden in diesem Fall also im Less-Style­sheet gebündelt, was eine deutliche Ver­ein­fa­chung zur Aus­zeich­nung in einem CSS-Style­sheet darstellt. Das wird deutlich, wenn man sich das ge­ne­rier­te CSS zu diesem Code-Beispiel anschaut:

/* CSS */
#header h1 {
font-size: 26px;
font-weight: bold;
}
#header p {
font-size: 12px;
}
#header p a {
text-decoration: none;
}
#header p a:hover {
border-width: 1px;
}

Ope­ra­to­ren

Auch die arith­me­ti­schen Ope­ra­tio­nen Addition (+), Sub­trak­ti­on (-), Mul­ti­pli­ka­ti­on (*) und Division (/) lassen sich in Less-Style­sheets verwenden, indem der jeweilige Operator auf einen be­lie­bi­gen Zahlen- oder Farbwert angewandt wird. Mit wenig Aufwand können Sie so komplexe Zu­sam­men­hän­ge zwischen den Werten ver­schie­de­ner Elemente aufbauen, die auch bestehen bleiben, wenn sich die Grund­wer­te verändern. Sollte die Um­wand­lung durch einen Operator unmöglich bzw. nicht sinnvoll sein, wird dieser au­to­ma­tisch ignoriert – bei­spiels­wei­se, wenn eine Zen­ti­me­ter- mit einer Pi­xel­an­ga­be addiert werden soll. Folgendes Beispiel zeigt die Mög­lich­kei­ten von Ope­ra­tio­nen in Less:

// Less
@the-border: 1px;
@base-color: #111;
#header {
	color: (@base-color * 3);
	border-left: @the-border;
	border-right: (@the-border * 2);
}
#footer {
	color: (@base-color + #003300);
}

Die Grund­de­fi­ni­tio­nen für Um­ran­dun­gen (1px) und die Ba­sis­far­be (#111), die einem Schwarz­ton ent­spricht, werden also auf die Kopf- und die Fußzeile angewandt, wobei drei Ope­ra­to­ren die Ba­sis­wer­te ma­ni­pu­lie­ren:

  1. Die Ba­sis­far­be wird im Header mit 3 mul­ti­pli­ziert. Ergebnis ist der Hex-Wert #333, hinter dem sich ein dunkler Grauton verbirgt.
  2. Der rechte Rahmen im Header erhält den Mul­ti­pli­ka­ti­ons­ope­ra­tor * 2 und ist damit doppelt so breit wie der Stan­dard­rah­men (2px).
  3. Auch die Ba­sis­far­be der Fußzeile wird durch einen Operator ma­ni­pu­liert. Hier wird der Hex-Wert #003300 zum Grundwert #111 addiert, wodurch die Fußzeile einen dunklen Grünton erhält (#114411).

Im kom­pi­lier­ten CSS-Code sind die Er­geb­nis­se der Ope­ra­tio­nen ebenfalls zu bestaunen:

/* CSS */
#header {
	color: #333;
	border-left: 1px;
	border-right: 2px;
}
#footer {
	color: #114411;
}

Funk­tio­nen

Less erweitert CSS außerdem um Funk­tio­nen, wobei das gesamte Spektrum an Mög­lich­kei­ten verfügbar ist: So können Sie in einem Less-Style­sheet ei­ner­seits komplexe logische Zu­sam­men­hän­ge mit der if- oder Boole­schen Funktion abbilden oder nicht weniger komplexe Funk­tio­nen für ma­the­ma­ti­sche Be­rech­nun­gen wie Cosinus, Sinus oder Tangens nutzen. An­de­rer­seits sind auch einfache Funk­tio­nen zur schnellen Farb­de­fi­ni­ti­on (rgb, rgba, hsv etc.) oder Funk­tio­nen mit Farb­ope­ra­to­ren wie Kontrast (contrast), Sättigung (saturate bzw. desature) oder Hel­lig­keit (lighten bzw. darken) möglich. Um bei­spiels­wei­se die Sättigung eines Elements zu erhöhen bzw. zu ver­rin­gern, benötigen Sie lediglich eine Farb­an­ga­be und die Funktion saturate. Per Pro­zent­an­ga­be (0–100%) geben Sie zudem an, wie stark die Sättigung verändert werden soll:

// Less
@red: #842210;
#header {
color: saturate(@red, 20%); ->#931801
}
#footer { 
color: desaturate(@red, 10%); ->##7d2717
}

In diesem Beispiel ist der dunkle Rot-Ton mit dem He­xa­de­zi­mal­code #842210 im Less-Style­sheet definiert und als Farbe für Kopf- und Fußzeile ein­ge­tra­gen. Für die Kopfzeile soll al­ler­dings eine Stei­ge­rung von 20 Prozent angewandt werden, während der Less-Code die Sättigung in der Fußzeile um 10 Prozent ver­rin­gert. Im CSS-Style­sheet sind die Funk­tio­nen sowie die Farb­va­ria­ble (@red) um­ge­wan­delt und daher nur die Hex-Codes mit der je­wei­li­gen Sät­ti­gungs­stu­fe zu sehen:

/* CSS */
#header {
color: #931801
}
#footer { 
color: #7d2717
}

Less CSS: Weniger Arbeit, mehr Mög­lich­kei­ten

Das kleine Ein­stei­ger-Tutorial in Less hat nur einen Bruchteil der Mög­lich­kei­ten auf­ge­zeigt, die den CSS-Prä­pro­zes­sor so wertvoll machen. Haben Sie Variablen, Mixins und Co. erst einmal definiert, können Sie diese jederzeit auf neue Elemente in Ihrem Style­sheet anwenden, ohne komplett bei null zu beginnen, wie es bei CSS-Code häufig der Fall ist. Verändern sich Werte wie der Ba­sis­farb­ton, haben Sie dies in einem funk­tio­nie­ren­den Less-Dokument außerdem mühelos mit wenigen Aktionen angepasst, was den CSS-Prä­pro­zes­sor auch bei der lang­fris­ti­gen Ge­stal­tung des eigenen Web­pro­jekts zu einem wert­vol­len Begleiter macht.

Tipp

De­tail­lier­te In­for­ma­tio­nen zu den einzelnen Less-Features finden Sie im In-Depth Guide auf lesscss.org.

Zum Hauptmenü