16. Unterrichtsblock
Inhaltsverzeichnis
Sass & SCSS
Sass ist ein CSS-Präprozessor. Sass reduziert Wiederholungen von CSS und spart somit Zeit.
Sass-Dateien haben die Dateieendung „.sass“ oder „.scss“
Die Funktionen von SCSS und Sass sind genau dieselben, jedoch ist die Syntax anders. Bei Sass werden keine Klammern und Semikolons geschrieben, bei SCSS hingegen schon. SCSS ähnelt deshalb eher dem normalen CSS.
Im Gegensatz zu LESS (JavaScript basiert) basiert Sass auf Ruby.
Was ist Sass?
- Sass steht für Syntactically Awesome Style Sheet
- Sass ist eine CSS-Erweiterung
- Sass ist ein CSS-Präprozessor
- Sass ist vollständig kompatibel mit allen CSS-Versionen
- Sass reduziert Wiederholungen von CSS und spart somit Zeit beim Schreiben und Ausführen
- Sass wurde von Hampton Catlin entworfen und 2006 von Natalie Weizenbaum entwickelt
- Sass kann kostenlos heruntergeladen und verwendet werden
Vorteile von Präprozessoren allgemein
Präprozessoren erleichtern das Schreiben von Code, indem sie eine vereinfachte oder bessere Syntax bereitstellen als die Programmiersprache selbst, Aufgaben automatisieren und neue Funktionen bieten. Neben CSS-Präprozessoren wie Sass, existieren auch Präprozessoren für HTML (z. B. HAML) oder für JavaScript (z. B. CoffeeScript).
CSS-Präprozessoren bieten in diesem Zusammenhang u. a. folgende Vorteile:
- Sie vereinfachen die Syntax, damit man Stylesheets schneller schreiben kann.
- Sie helfen dabei, ein Projekt zu organisieren und in verständliche Sinnabschnitte zu unterteilen.
- Sie erlauben Variablen, übernehmen die Berechnung von Layout-Abmessungen, generierten Farbsets usw.
- Sie reduzieren die Anzahl von HTTP-Requests, da Stylesheets kombiniert werden können.
- Sie automatisieren Arbeitsabläufe wie die Kompression von Dateien oder Stylesheets.
Warum sollte man Sass verwenden?
Mit Sass kann man Funktionen verwenden, die in CSS nicht vorhanden sind, wie Variablen, verschachtelte Regeln, Schleifen, Importe, Vererbung, integrierte Funktionen und andere Dinge.
/* Definieren von Standardvariablen für die Webseite */
$hintergrundfarbe: lightgreen;
$textfarbe: white;
$schriftgroesse: 18px;
/* Verwendung von Variablen */
body {
background-color: $hintergrundfarbe;
color: $textfarbe;
font-size: $schriftgroesse;
}
Für das Testen und Ausprobieren von Beispielen, öffne die Seite: https://www.sassmeister.com/
Ein einfaches Beispiel, warum Sass nützlich ist
Nehmen wir an, wir haben eine Website mit drei Hauptfarben:
#a2b9bc
#b2ad7f
#878f99
/*
Wie oft muss man diese HEX-Werte im gesamten Webprojekt eingeben? Ziemlich Oft. Und was ist mit Variationen derselben Farben?
Anstatt die obigen Werte oft einzugeben, ist es möglich Sass zu verwenden und Folgendes zu schreiben:
*/
/* Definieren von Variablen für die Hauptfarben */
$hauptfarbe_1: #a2b9bc;
$hauptfarbe_2: #b2ad7f;
$hauptfarbe_3: #878f99;
/* use the variables */
.main-header {
background-color: $hauptfarbe_1;
}
.menu-links {
background-color: $hauptfarbe_2;
}
.menu-rechts {
background-color: $hauptfarbe_3;
}
// Wenn man also Sass verwendet und sich die Primärfarbe ändert, muss man diese nur an einer Stelle ändern.
Wie funktioniert Sass?
Ein Browser versteht keinen Sass-Code. Daher benötigt man einen Sass-Präprozessor, um Sass-Code in Standard-CSS umzuwandeln.
Dieser Vorgang wird als „Transpilieren“ bezeichnet. Man muss also einem Transpiler (ein Programm) Sass-Code geben, um anschließend CSS-Code zurückbekommen.
INFO: Transpilieren ist ein Begriff dafür, einen in einer Sprache geschriebenen Quellcode in eine andere Sprache zu transformieren/übersetzen.
Kommentare
Sass verwendet dieselben Kommentarfunktionen wie CSS
Aufgabe
Baue ein Grid-Raster mit 8 Spalten und 8 Zeilen und teste o.g. Codes.
Installation von Sass
- Betriebssystem: Sass ist plattformunabhängig
- Browserunterstützung: Sass funktioniert in Edge/IE (ab IE 8), Firefox, Chrome, Safari, Opera
- Programmiersprache: Sass basiert auf Ruby
- Offizielle Seite: https://sass-lang.com/
Es gibt mehrere Möglichkeiten, Sass zu installieren. Es gibt einige Anwendungen, wie Sass für Mac, Windows und Linux zum Laufen gebracht werden kann. Einige davon sind kostenlos, andere sind kostenpflichtige Apps.
Es gibt auch die Möglichkeit Sass über die Kommandozeile zu installieren. Eine Anleitung existiert hier: https://kulturbanause.de/blog/sass-ueber-die-kommandozeile-installieren/
Aufgabe
Installiere Sass über die Kommandozeile auf dem PC
Sass-Variablen
Variablen sind eine Möglichkeit, Informationen zu speichern, die man später wiederverwenden möchte. Mit Sass ist es möglich Informationen in Variablen speichern, wie zum Beispiel:
- Strings
- Zahlen
- Farben
- Boolesche Werte
- Listen
- NULL
Sass verwendet das $-Symbol, gefolgt von einem Namen, um Variablen zu deklarieren:
$variablename: value;
Das folgende Beispiel deklariert 4 Variablen namens myFont, myColor, myFontSize und myWidth. Nachdem die Variablen deklariert sind, können Sie die Variablen verwenden, wo immer Sie wollen:
$schrift: Arial, sans-serif;
$schriftGroesse: 18px;
$weite: 1200px;
$farbe: lightgreen;
body {
font-family: $schrift;
font-size: $schriftGroesse;
color: $farbe;
}
#container {
width: $weite;
}
Wenn also die Sass-Datei transpiliert wird, nimmt sie die Variablen (farbe
, schrift
usw.) und gibt normales CSS mit den im CSS platzierten Variablenwerten wie folgt aus:
body {
font-family: Arial, sans-serif;
font-size: 18px;
color: lightgreen;
}
#container {
width: 1200px;
}
Sass-Variablenbereich
Sass-Variablen sind nur auf der Verschachtelungsebene verfügbar, auf der sie definiert sind.
$farbe: pink;
h1 {
$farbe: lightgreen;
color: $farbe;
}
// Welche Farbe hat die Schrift im <h1>-Tag?
p {
color: $farbe;
}
// Welche Farbe hat die Schrift im <p>-Tag?
Aufgabe
Führe o.g. Beispiel im Sass-Editor aus
Sass !global
Das Standardverhalten für den Variablenbereich kann mithilfe der !global
-Anweisung überschrieben werden.
!global
gibt an, dass eine Variable global ist, was bedeutet, dass sie auf allen Ebenen zugänglich ist.
$farbe: pink;
h1 {
$farbe: lightgreen !global;
color: $farbe;
}
// Welche Farbe hat die Schrift im <h1>-Tag?
p {
color: $farbe;
}
// Welche Farbe hat die Schrift im <p>-Tag?
Aufgabe
Führe o.g. Beispiel im Sass-Editor aus
Tipp: Globale Variablen sollten außerhalb jeglicher Regeln definiert werden. Es könnte sinnvoll sein, alle globalen Variablen in einer eigenen Datei mit dem Namen „_globals.scss“ zu definieren und die Datei mit dem @include- Schlüsselwort einzubinden.
Sass Verschachtelung
Mit Sass kann man CSS-Selektoren auf die gleiche Weise wie HTML verschachteln.
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
}
li {
display: inline-block;
}
a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
Zu beachten ist, dass in Sass die Selektoren ul
, li
, und a
innerhalb des nav
-Selektors verschachtelt sind.
nav ul {
margin: 0;
padding: 0;
list-style: none;
}
nav li {
display: inline-block;
}
nav a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
Da man Eigenschaften in Sass verschachteln kann, ist es sauberer und einfacher zu lesen als Standard-CSS.
Sass verschachtelte Eigenschaften
Viele CSS-Eigenschaften haben dasselbe Präfix, wie beispielsweise font-family
, font-size
und font-weight
oder text-align
, text-transform
und text-overflow
.
Mit Sass kann man verschachtelte Eigenschaften schreiben:
font: {
family: Helvetica, sans-serif;
size: 18px;
weight: bold;
}
text: {
align: center;
transform: lowercase;
overflow: hidden;
}
Der Sass-Transpiler konvertiert das Obige in normales CSS:
font-family: Helvetica, sans-serif;
font-size: 18px;
font-weight: bold;
text-align: center;
text-transform: lowercase;
text-overflow: hidden;
Aufgabe
Führe o.g. Beispiel im Sass-Editor aus
Sass @import und Partielle
Sass hält den CSS-Code DRY (Don’t Repeat Yourself). Eine Möglichkeit, DRY-Code zu schreiben, besteht darin, zugehörigen Code in separaten Dateien aufzubewahren.
Man kann kleine Dateien mit CSS-Schnipseln erstellen, um sie in andere Sass-Dateien einzufügen. Beispiele für solche Dateien können sein: Reset-Datei, Variablen, Farben, Schriftarten, Schriftgrößen usw.
Sass Importieren von Dateien
Genau wie CSS unterstützt auch Sass die @import
Direktive.
Mit der @import
Direktive kann man den Inhalt einer Datei in eine andere einfügen.
Die CSS- @import
Direktive hat aufgrund von Leistungsproblemen einen großen Nachteil; es erstellt bei jedem Aufruf eine zusätzliche HTTP-Anfrage. Die Sass @import
-Direktive schließt die Datei jedoch in das CSS ein; daher ist während der Nutzung kein zusätzlicher HTTP-Aufruf erforderlich!
// SYNTAX
@import dateiname;
HINWEIS: Man muss keine Dateierweiterung angeben, Sass geht automatisch davon aus, dass eine .sass- oder .scss-Datei gemeint ist. Man kann auch CSS-Dateien importieren. Die
@import
Direktive importiert die Datei und alle in der importierten Datei definierten Variablen oder Mixins können dann in der Hauptdatei verwendet werden.
Man kann beliebig viele Dateien in die Hauptdatei importieren:
@import "variablen";
@import "farben";
@import "reset";
Schauen wir uns ein Beispiel an: Nehmen wir an, wir haben eine Reset-Datei namens „reset.scss“, die so aussieht:
html,
body,
ul,
ol {
margin: 0;
padding: 0;
}
Und jetzt soll die Datei „reset.scss“ in eine andere Datei namens „standard.scss“ importiert werden.
So funktioniert es:
- Die
@import
Direktive wird am Anfang einer Datei hinzugefügt - Auf diese Weise wird der Inhalt eine globale Reichweite haben
// SCSS-Syntax (standard.scss):
@import "reset";
body {
font-family: Arial, sans-serif;
font-size: 18px;
color: lightgreen;
}
Wenn also die Datei „standard.css“ transpiliert wird, sieht das CSS so aus:
// CSS-Ausgabe:
html, body, ul, ol {
margin: 0;
padding: 0;
}
body {
font-family: Helvetica, sans-serif;
font-size: 18px;
color: red;
}
Sass Partielle
Standardmäßig transpiliert Sass alle .scss-Dateien direkt. Wenn man jedoch eine Datei importieren möchte, muss man die Datei nicht direkt transpilieren.
Sass hat dafür einen Mechanismus: Wenn man den Dateinamen mit einem Unterstrich beginnt, transpiliert Sass diesen nicht. Auf diese Weise benannte Dateien werden in Sass Partielle genannt.
Eine partielle Sass-Datei wird also mit einem führenden Unterstrich benannt:
// Partieller Sass-Syntax:
_dateiname;
Das folgende Beispiel zeigt eine partielle Sass-Datei namens „_farben.scss“. (Diese Datei wird nicht direkt in „farben.css“ transpiliert):
„_farben.scss“:
// Inhalt der Datei
$meinPink: #EE82EE;
$meinBlau: #4169E1;
$meinGruen: #8FBC8F;
Wenn man nun die Partielle Datei importiert, lässt man den Unterstrich weg. Sass versteht, dass es die Datei „_farben.scss“ importieren soll:
@import "farben";
body {
font-family: Arial, sans-serif;
font-size: 18px;
color: $meinBlau;
}
Sass Mixins
Mit der @mixin
Direktive kann man CSS-Code erstellen, der auf der gesamten Website wiederverwendet werden soll. Die @include
Direktive wird erstellt, damit man @mixin
verwenden (einschließen) kann.
Mixin definieren
Ein Mixin wird mit der Direktive @mixin
definiert
// SYNTAX
@mixin name {
eigenschaft: wert;
eigenschaft: wert;
...
}
Das folgende Beispiel erstellt ein Mixin namens „wichtiger-text“:
@mixin wichtiger-text {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
}
Tipp: Ein Tipp zu Bindestrichen und Unterstrichen in Sass: Bindestriche und Unterstriche gelten als gleich. Das bedeutet, dass
@mixin wichtiger-text { }
und@mixin wichtiger_text { }
als dasselbe Mixin betrachtet werden!
Verwendung von Mixins
Die @include
Direktive wird verwendet, um ein Mixin einzubinden.
selektor {
@include mixin-name;
}
Um also das oben erstellte Mixin für wichtigen Text einzuschließen:
.hinweis {
@include wichtiger-text;
background-color: green;
}
Der Sass-Transpiler konvertiert das Beispiel in normales CSS:
// CSS-Ausgabe:
.hinweis {
color: red;
font-size: 25px;
font-weight: bold;
border: 1px solid blue;
background-color: green;
}
Ein Mixin kann auch andere Mixins enthalten:
// SCSS-Syntax:
@mixin spezieller-text {
@include wichtiger-text;
@include link;
@include farben;
}
Übergeben von Variablen an ein Mixin
Mixins akzeptieren Argumente. Auf diese Weise kann man Variablen an ein Mixin übergeben.
/* Definieren eines Mixins mit zwei Argumenten */
@mixin umrandet($farbe, $weite) {
border: $weite solid $farbe;
}
.meinArtikel {
@include umrandet(blue, 1px); // Aufruf eines Mixins mit zwei Werten
}
.meineNotizen {
@include umrandet(red, 2px); // Aufruf eines Mixins mit zwei Werten
}
Hinweis: Zu beachten ist, dass die Argumente als Variablen festgelegt und dann als Werte (Farbe und Breite) der Eigenschaft border verwendet werden.
Nach der Kompilierung sieht das CSS so aus:
// CSS-Ausgabe:
.meinArtikel {
border: 1px solid blue;
}
.meineNotizen {
border: 2px solid red;
}
Aufgabe
Führe o.g. Beispiele im Sass-Editor aus. Baue auch andere Darstellungen und mische weitere CSS-Eigenschaften und Werte mit Mixins ein.
Die Sass @extend Direktive
Mit der @extend
-Direktive kann man eine Reihe von CSS-Eigenschaften von einem Selektor für einen anderen freigeben. Die @extend
-Direktive ist nützlich, wenn man fast identisch gestaltete Elemente hat, die sich nur in einigen kleinen Details unterscheiden.
Das folgende Sass-Beispiel erstellt zunächst einen grundlegenden Stil für Schaltflächen (dieser Stil wird für die meisten Schaltflächen verwendet). Dann erstellen wir einen Stil für eine „Melden“-Schaltfläche und einen Stil für eine „Senden“-Schaltfläche. Sowohl die „Bericht“- als auch die „Senden“-Schaltfläche erben alle CSS-Eigenschaften von der .button-basic-Klasse über die @extend
Direktive. Darüber hinaus haben sie ihre eigenen Farben definiert:
.button-basic {
border: none;
padding: 15px 30px;
text-align: center;
font-size: 16px;
cursor: pointer;
}
.button-melden {
@extend .button-basic;
background-color: red;
}
.button-senden {
@extend .button-basic;
background-color: green;
color: white;
}
Nach der Kompilierung sieht das CSS so aus:
.button-basic, .button-melden, .button-senden {
border: none;
padding: 15px 30px;
text-align: center;
font-size: 16px;
cursor: pointer;
}
.button-melden {
background-color: red;
}
.button-senden {
background-color: green;
color: white;
}
Durch die Verwendung der @extend
-Direktive muss man nicht mehrere Klassen für ein Element im HTML-Code angeben, wie hier:
<button class="button-basic button-melden">Melden</button>
Man muss nur .button-report angeben, um beide Arten von Stilen zu erhalten. Die @extend
-Direktive hilft dabei, den Sass-Code sehr DRY zu halten.
Aufgaben
Aufgabe 1
Baue die Seite aus Unterrichtsblock 13 im Grid-Layout und definiere die Layout-Eigenschaften so weit, wie möglich über Sass. Die Seite soll responsiv sein und die Elemente auf Mobilgeräten untereinander anzeigen.
- Verwende dabei auch Mixins mit Argumenten und Variablen
- Verwende dabei auch die @extend-Direktive, um Wiederholungen zu vermeiden = arbeite nach DRY
Zusammenhängede Aufgaben
Gegebenes HTML
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sass Übungsseite</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header>
<h1>Willkommen zu Sass</h1>
<nav>
<ul>
<li><a href="#">Startseite</a></li>
<li><a href="#">Über Uns</a></li>
<li><a href="#">Kontakt</a></li>
</ul>
</nav>
</header>
<main>
<section>
<h2>Unsere Dienstleistungen</h2>
<p>Wir bieten eine Vielzahl von Dienstleistungen an, die Ihren Bedürfnissen entsprechen.</p>
</section>
<section>
<h2>Galerie</h2>
<p>Schauen Sie sich einige unserer Projekte an.</p>
<div class="gallery">
<div class="gallery-item">Bild 1</div>
<div class="gallery-item">Bild 2</div>
<div class="gallery-item">Bild 3</div>
</div>
</section>
</main>
<footer>
<p>© 2024 Sass Übungsseite</p>
</footer>
</body>
</html>
Aufgabe 1: Grundlegende Sass-Struktur
Erstelle eine neue Datei styles.scss
und richte die grundlegende Struktur für Sass ein.
Schritte:
- Erstelle die Datei
styles.scss
. - Kompiliere die Datei in eine
styles.css
Datei. - Importiere die
styles.css
Datei in das HTML-Dokument.
// Grundlegende Sass-Struktur
$primary-color: #3498db;
$secondary-color: #2ecc71;
body {
font-family: Arial, sans-serif;
color: $primary-color;
}
Aufgabe 2: Variablen und Verschachtelung
Verwende Sass-Variablen, um Farben und Schriftarten zu definieren, und verschachtle CSS-Regeln für die Navigation.
Schritte:
- Definiere Variablen für Primär- und Sekundärfarben sowie die Schriftart.
- Verschachtle die CSS-Regeln für die Navigation (
nav
undul
,li
,a
).
// Variablen und Verschachtelung
$primary-color: #3498db;
$secondary-color: #2ecc71;
$font-family: 'Arial, sans-serif';
body {
font-family: $font-family;
color: $primary-color;
}
nav {
ul {
list-style: none;
padding: 0;
li {
display: inline;
margin-right: 10px;
a {
text-decoration: none;
color: $secondary-color;
&:hover {
color: darken($secondary-color, 10%);
}
}
}
}
}
Aufgabe 3: Mixins
Erstelle ein Mixin für abgerundete Ecken und wende es auf die Galerie-Elemente an.
Schritte:
- Erstelle ein Mixin namens
border-radius
. - Wende das Mixin auf die Galerie-Elemente (
.gallery-item
) an.
// Mixins
@mixin border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
border-radius: $radius;
}
.gallery {
.gallery-item {
background-color: lighten($primary-color, 40%);
padding: 10px;
margin: 10px;
@include border-radius(10px);
}
}
Aufgabe 4: Nesting und Selektoren
Verschachtle die CSS-Regeln für das Header-Element und seine Kinder.
Schritte:
- Verschachtle die CSS-Regeln für das Header-Element (
header
,h1
,nav
). - Wende spezifische Stile für
h1
undnav
an.
// Nesting und Selektoren
header {
background-color: $primary-color;
padding: 20px;
color: white;
h1 {
margin: 0;
font-size: 2em;
}
nav {
ul {
list-style: none;
padding: 0;
li {
display: inline;
margin-right: 10px;
a {
text-decoration: none;
color: white;
&:hover {
color: darken(white, 10%);
}
}
}
}
}
}
Aufgabe 5: Erbselektion und Operatoren
Verwende Erbselektion und Sass-Operatoren, um Stile für das Footer-Element zu erstellen.
Schritte:
- Verwende Erbselektion, um die Textgröße des Footers zu ändern.
- Verwende den Sass-Divisionsoperator, um Padding-Werte festzulegen.
// Erbselektion und Operatoren
footer {
background-color: $secondary-color;
padding: $primary-color / 10;
text-align: center;
color: white;
p {
margin: 0;
font-size: 0.9em;
}
}