×

Über mich

Werkzeuge

Filme

Spiele

Bibliothek

EVE Online

Inhalt

SCSS


Sassy Cascading Style Sheets

Einführung

Wer sich bereits gut mit CSS auskennt, der ist bereit für SCSS. SCSS stellt einige nützliche Funktionen bereit, um einfacher CSS-Code zu schreiben. Zudem lässt sich damit der Code auch viel einfacher verwalten. Auch ich benutze für meine Webseiten SCSS und stelle hier meine Notizen zur Verfügung.

Struktur

Ich verwende als Basis die 7-1-Struktur. Es gibt eine Datei, die alle Dateien zusammenführt, die in 7 verschiedenen Ordner liegen. In Worten von J.R.R. Tolkien ist das Konzept ganz einfach: Eine Datei sie zu knechten, sie alle zu finden, in ein Stylesheet zu treiben und ewig zu binden. Selbstverständlich ist ein solche Sturktur immer auf das eigene Projekt anzupassen. Um Ordnung zu behalten, hilft es dann ab und zu, sich wieder an die Grundregeln zu erinnern. Beginnen wir zuerst mit den einzelnen Ordner.

1. Ordner "abstracts"

Darin liegen alle Dateien, die nicht wirklich CSS-Code schreiben, sondern helfen, SCSS selbst anzuwenden. Also ein Ordner voller kleiner Helfer und Einstellungen. Folgende Liste führt einige typische Vertreter auf. Ich selbst benötige aktuell nur die Mixins und Variabeln.

  • _variables.scss
  • _functions.scss
  • _mixins.scss
  • _placeholders.scss
  • ...

2. Ordner "base"

Teilweise auch "core" genannt, beinhaltet dieser Ordner ganz grundsätzliche CSS-Codes. In der Regel wird in der Reset-Datei ein gewisser Standard erzwungen. Das ist notwendig, weil viele Browser gewisse Dinge bereits selbst gestalten. Zudem habe ich hier eine Colors-Datei hinzugefügt, in der diverse Farb-Klassen erstellt werden wie bspw. text-info und bg-info.

  • _reset.scss
  • _typography.scss
  • _colors.scss
  • ...

3. Ordner "components"

Bisher haben wir nur den Grundstein gelegt. In diesem Ordner werden nun die tatsächlichen Bauteile erstellt. Die Namensgebung ist hier ganz an das Projekt anzupassen und der gewünschten Struktur. Man kann bspw. eine Buttons-Datei haben, die alle Schaltflächen definiert vom Menü bis hin zum "Passwort vergessen"-Knopf.

Ich verwende aktuell für jede Form eines Inhaltes eine eigene Schicht. Als dieser Text hier, ist in einem div.strz-text wo Titel und Absatz definiert sind. Eine Liste wäre hier drin nicht definiert. Dafür verwende ich einen div.strz-list. Falls dein Browser ein Untersuchungswerkzeug hat (Chrome: F12), kannst du dies gerne untersuchen. Somit befinden sich in meinem Komponenten-Ordner diese Schichten.

  • _divider.scss
  • _hero.scss
  • _image.scss
  • _list.scss
  • _table.scss
  • _text.scss
  • _tweet.scss
  • _video.scss
  • ...

4. Ordner "layout"

Während die Komponenten dafür zuständig sind, einzelne Elemente darzustellen, so sind die Dateien in diesem Ordner hier für die korrekte Platzierung zuständig. Auf dieser Webseite wäre das die Navigation links, die Sidebase rechts, der Footer unten und der Header oben sowie der Inhalt in der Mitte. Auch sowas wie ein eigenes Grid würden hier definiert werden. Ich habe folgende Dateien:

  • _content.scss
  • _footer.scss
  • _header.scss
  • _navigation.scss
  • _sidebar.scss
  • _toggle.scss
  • ...

5. Ordner "pages"

Hier werden Dateien abgelegt, die für einzelne Seiten ganz spezielles CSS zur Verfügung stellen. Oder Landingpages, die in der Regel viel mehr CSS benötigen als eine normale Seite. Aktuell habe ich hier keine Dateien.

  • _home.scss
  • ...

6. Ordner "themes"

Dateien, die ein ganzes Thema definieren, werden hier verwaltet. Dies könnte beispielsweise ein Thema für den Admin-Bereich sein, welches sich optisch vom normalen öffentlich zugänglichen Bereich unterscheidet. Ich habe beispielsweise für die Seiten im Bereich "EVE Online" eine Datei, die Farben aus dem Spiel zur Verfügung stellt.

  • _eve.scss
  • ...

7. Ordner "vendors"

Dateien von Framesworks werden hier abgelegt.

  • _bootstrap.scss
  • _jquery-ui.scss
  • ...

main.scss

Und dann gibt es die Eine Datei, die alle Dateien in sich verbindet. Mehr macht sie nicht. So sieht meine aus:

@import 'abstracts/variables';
@import 'abstracts/mixins';

@import 'base/reset';
@import 'base/typography';
@import 'base/colors';

@import 'layout/header';
@import 'layout/footer';
@import 'layout/navigation';
@import 'layout/sidebar';
@import 'layout/content';
@import 'layout/toggle';

@import 'components/list';
@import 'components/hero';
@import 'components/text';
@import 'components/table';
@import 'components/video';
@import 'components/divider';
@import 'components/image';
@import 'components/tweet';

@import 'themes/EVE';

Und wie kriegt man nun eine CSS-Datei kompiliert? Für diese Webseite habe ich nun die drei Grundfarben definiert und dann die Main-Datei eingebunden. Dann kompiliere ich die folgende site.scss Datei und erhalte den ganzen CSS-Code zur Verwendung.

$strz-dark: #000000;
$strz-light: #EEEEEE;
$strz-extra: #990F0F;

@import "main";

Zusammenfassung

Wenn man diese Struktur anhand eines Hauses erklären möchte, dann folgendermassen: Betonmischer, Bauarbeiter und einen Kran sind "abstracts". Das Fundament ist "base", "layout" die Wände und das Dach und "components" die Inneneinrichtung. Ein Raum wäre in "pages" und ein Stockwerk in "themes" definiert. Der Hersteller wäre "vendors" und "main.scss" die Bauanleitung. Als begabter Künstlersohn würde das so aussehen:

Mixins

Mixins sind eine sowas wie Funktionen, die man wie normales CSS verwenden kann. Man kann Argumente übergeben, auch Optionale.

@mixin font-size($size, $lineHeight: $size){
   font-size: $size;
   line-height: $lineHeight;
}

Und so verwendet man ihn:

@include font-size(0.9em);

Und, was vor allem für Media Queries sehr praktisch ist: man kann auch ganz normalen CSS-Inhalt mitgeben.

@mixin from-sd {
   @media (min-width: 700px) {
       @content;
   }
}

Der so verwendet werden kann:

h1 {
   @include from-hd {
      padding-left: 25%;
      padding-right: 25%;
   }
}