Partials & Imports in SCSS
Was sind Partials in SCSS?
Partials sind SCSS-Dateien, die nur einen Teil des Stylesheets enthalten und in andere SCSS-Dateien importiert werden können. Sie helfen dabei, den Code in kleinere, überschaubare Teile zu gliedern.
Konventionen für Partials
SCSS-Partials beginnen mit einem Unterstrich (_), um dem Compiler mitzuteilen, dass diese Datei nicht direkt in eine CSS-Datei kompiliert werden soll.
_variables.scss
heißen.
Imports in SCSS
Mit der @import
-Direktive können Sie Partials in andere SCSS-Dateien einbinden. Im Gegensatz zu CSS-Imports werden SCSS-Imports während der Kompilierung zusammengeführt, was die Anzahl der HTTP-Anfragen reduziert.
Grundlegende Syntax
// Importieren einer Partial-Datei (ohne Unterstrich und Erweiterung)
@import "variables";
@import "mixins";
@import "reset";
// Mehrere Imports in einer Zeile
@import "variables", "mixins", "reset";
_filename.scss
.
Vorteile von Partials und Imports
- Modularität: Code in logische Einheiten aufteilen
- Wiederverwendbarkeit: Gemeinsame Stile in verschiedenen Projekten nutzen
- Wartbarkeit: Leichteres Finden und Aktualisieren von Code
- Zusammenarbeit: Mehrere Entwickler können gleichzeitig an verschiedenen Dateien arbeiten
- Organisation: Klare Struktur für große Projekte
- Performance: Alle Imports werden zu einer CSS-Datei kompiliert, was die Ladezeit verbessert
Organisieren von SCSS-Dateien
Eine gängige Methode zur Organisation von SCSS-Dateien ist die 7-1-Architektur (7 Ordner, 1 Hauptdatei):
scss/
|
|– abstracts/ (oder utilities/)
| |– _variables.scss // Variablen
| |– _functions.scss // Funktionen
| |– _mixins.scss // Mixins
| |– _placeholders.scss // Platzhalter
|
|– base/
| |– _reset.scss // Reset/Normalize
| |– _typography.scss // Typografie-Regeln
| |– _animations.scss // Animationen
|
|– components/
| |– _buttons.scss // Buttons
| |– _carousel.scss // Carousel
| |– _dropdown.scss // Dropdown
|
|– layout/
| |– _navigation.scss // Navigation
| |– _grid.scss // Grid-System
| |– _header.scss // Header
| |– _footer.scss // Footer
| |– _sidebar.scss // Sidebar
| |– _forms.scss // Formulare
|
|– pages/
| |– _home.scss // Startseite
| |– _about.scss // Über uns
| |– _contact.scss // Kontakt
|
|– themes/
| |– _default.scss // Standard-Theme
| |– _dark.scss // Dunkles Theme
| |– _admin.scss // Admin-Theme
|
|– vendors/
| |– _bootstrap.scss // Bootstrap
| |– _jquery-ui.scss // jQuery UI
|
`– main.scss // Hauptdatei, die alle Partials importiert
Die Hauptdatei (main.scss)
// Abstracts
@import "abstracts/variables";
@import "abstracts/functions";
@import "abstracts/mixins";
@import "abstracts/placeholders";
// Vendors
@import "vendors/bootstrap";
@import "vendors/jquery-ui";
// Base
@import "base/reset";
@import "base/typography";
@import "base/animations";
// Layout
@import "layout/navigation";
@import "layout/grid";
@import "layout/header";
@import "layout/footer";
@import "layout/sidebar";
@import "layout/forms";
// Components
@import "components/buttons";
@import "components/carousel";
@import "components/dropdown";
// Pages
@import "pages/home";
@import "pages/about";
@import "pages/contact";
// Themes
@import "themes/default";
@import "themes/dark";
Globale vs. Lokale Imports
Globale Imports
In der Hauptdatei importierte Partials sind global verfügbar:
// main.scss
@import "abstracts/variables";
@import "abstracts/mixins";
// Weitere Imports...
Lokale Imports
Sie können auch Partials nur dort importieren, wo sie benötigt werden:
// components/_special-component.scss
@import "../abstracts/variables";
@import "../abstracts/mixins";
.special-component {
// Komponenten-spezifische Stile
}
Der Unterschied zwischen @import und @use (Sass-Modul-System)
In neueren Sass-Versionen (ab Sass 3.3) wurde die @use
-Regel eingeführt, die @import
langfristig ersetzen soll:
@import (traditionell)
// Alles wird in den globalen Namespace importiert
@import "variables";
@import "mixins";
.element {
color: $primary-color; // Direkt verfügbar
@include box-shadow(); // Direkt verfügbar
}
@use (modular)
// Namespaced Imports
@use "variables" as vars;
@use "mixins";
.element {
color: vars.$primary-color; // Mit Namespace
@include mixins.box-shadow(); // Mit Namespace
}
Vorteile von @use
- Namespaces: Verhindert Namenskonflikte
- Einmalige Imports: Jedes Modul wird nur einmal importiert, unabhängig davon, wie oft es mit
@use
referenziert wird - Privater Code: Mit
_
oder-
beginnende Mitglieder sind privat - Konfiguration: Module können mit
with
konfiguriert werden
@use
ist in neueren Sass-Versionen verfügbar. Für ältere Projekte oder Kompatibilität mit älteren Sass-Versionen wird @import
weiterhin unterstützt.
Praktisches Beispiel: Theming mit Partials
Struktur
scss/
|
|– abstracts/
| |– _variables.scss // Basis-Variablen
|
|– themes/
| |– _light.scss // Helles Theme
| |– _dark.scss // Dunkles Theme
|
|– components/
| |– _button.scss // Button-Komponente
|
`– main.scss // Hauptdatei
Dateien
_variables.scss
// Basis-Variablen
$font-family-base: 'Roboto', sans-serif;
$font-size-base: 16px;
$border-radius: 4px;
$transition-base: all 0.3s ease;
// Theme-Variablen (Standardwerte)
$primary-color: #3498db !default;
$secondary-color: #2ecc71 !default;
$background-color: #ffffff !default;
$text-color: #333333 !default;
$border-color: #dddddd !default;
_light.scss
// Helles Theme
$primary-color: #3498db;
$secondary-color: #2ecc71;
$background-color: #ffffff;
$text-color: #333333;
$border-color: #dddddd;
_dark.scss
// Dunkles Theme
$primary-color: #3498db;
$secondary-color: #2ecc71;
$background-color: #222222;
$text-color: #f5f5f5;
$border-color: #444444;
_button.scss
// Button-Komponente
.btn {
display: inline-block;
padding: 10px 15px;
background-color: $primary-color;
color: white;
border: none;
border-radius: $border-radius;
transition: $transition-base;
&:hover {
background-color: darken($primary-color, 10%);
}
&.btn-secondary {
background-color: $secondary-color;
&:hover {
background-color: darken($secondary-color, 10%);
}
}
}
main.scss (für helles Theme)
// Importiere Basis-Variablen
@import "abstracts/variables";
// Importiere helles Theme (überschreibt Standardwerte)
@import "themes/light";
// Importiere Komponenten
@import "components/button";
// Basis-Stile
body {
font-family: $font-family-base;
font-size: $font-size-base;
background-color: $background-color;
color: $text-color;
}
dark-theme.scss (für dunkles Theme)
// Importiere Basis-Variablen
@import "abstracts/variables";
// Importiere dunkles Theme (überschreibt Standardwerte)
@import "themes/dark";
// Importiere Komponenten
@import "components/button";
// Basis-Stile
body {
font-family: $font-family-base;
font-size: $font-size-base;
background-color: $background-color;
color: $text-color;
}