Advertisement
  1. Web Design
  2. Sass

Strukturierung von Sass: Abschied von der Ambiguität des Atomdesigns

Scroll to top
Read Time: 5 min

() translation by (you can also view the original English article)

Atomic Design ist eine Methode, die eine sinnvolle Codestruktur für Stylesheets beschreibt. Es hat eine große Anhängerschaft, aber ich finde, dass seine Namenskonventionen manchmal mehrdeutig sein können. Was ist ein Molekül? Was ist ein Organismus? Woher wissen wir, wo wir die Grenze zwischen den beiden ziehen sollen? Diese besonderen Fragen scheinen der größte Stolperstein für die Interpretation einer atomaren Architektur zu sein.

Atoms Molecules Organisms Templates and Pages
Atome, Moleküle, Organismen, Vorlagen und Seiten

Heute werden wir diskutieren, was ich verwende, welche Facetten der Konventionen von Atomic Design, mit denen ich zu kämpfen habe, was ich getan habe, um meine Probleme zu lösen, und wie ich Sass derzeit beispielsweise anhand des 7-1-Musters organisiere.

Atomare Struktur

"Wir entwerfen keine Seiten, wir entwerfen Systeme von Komponenten." - Stephen Heu

Ich liebe atomares Design und seine Ideologien, aber ich habe festgestellt, dass sie zusammenbrechen können, wenn sie mit Teammitgliedern zusammenarbeiten, die nicht genau wissen, wie das alles funktioniert. In der Vergangenheit habe ich folgende Ordnerstruktur verwendet:

Ordnerorganisation: root/css/src/

1
 - vars
2
 - functions
3
 - mixins
4
 - base
5
 - plugins
6
 - typography
7
 - atoms
8
 - molecules
9
 - organisms
10
 - templates
11
 - pages
12
 - states
13
 - utility
14
 style.scss

Innerhalb von style.scss werden Sass-Partials mit gulp-sass-glob-import importiert:

Sass-Importindexdatei: root/css/src/style.scss

1
// Config
2
@import "vars/*";
3
@import "functions/*";
4
@import "mixins/*";
5
6
// Bower Components
7
@import "../bower_components/normalize-scss/_normalize";
8
9
// General DOM selector styles
10
@import "base/*";
11
12
// Fonts & General Type Styling
13
@import "typography/*";
14
15
// 3rd Party Addons
16
@import "plugins/*";
17
18
// Atomic Design
19
@import "atoms/**/*";
20
@import "molecules/**/*";
21
@import "organisms/**/*";
22
@import "templates/**/*";
23
@import "pages/**/*";
24
25
// Variations thru Events
26
@import "states/*";
27
28
// General UI Helpers
29
@import "utility/*";

Die Reihenfolge mit diesem Setup ist ziemlich wichtig. Wenn ein "atom", ein "molecule" oder ein "organism" angepasst werden muss, überschreiben Deklarationen in Vorlagen oder Seiten die oben genannten Teile sowie alle anderen vorhergehenden Teile.

Die Reihenfolge ermöglicht zusätzlich das Überschreiben des Stils eines Plugins, falls dies erforderlich sein sollte (und dies ist meiner Erfahrung nach normalerweise der Fall).

Verzeichnisinhalt

Ein Großteil des Inhalts für jedes Atomverzeichnis (Atome, Moleküle, Organismen, Vorlagen, Seiten) enthält Teilbereiche, die theoretisch leicht zu finden und bei Bedarf leicht zu verwalten sind.

1
 - atoms
2
   - _buttons.scss
3
   - _links.scss
4
   - _inputs.scss
5
 - molecules
6
   - _navigation.scss
7
   - _search-form.scss
8
   - _contact-form.scss
9
 - organisms
10
   - _header.scss
11
   - _footer.scss
12
   - _content.scss
13
 - templates
14
   - _sticky-footer.scss
15
   - _grid-2column.scss
16
   - _grid-3column.scss
17
 - pages
18
   - _home.scss
19
   - _about.scss
20
   - _contact.scss

Die Organisation erscheint sinnvoll, wenn Sie mit Atomic Design vertraut sind, aber für jemanden, der mit dem Ansatz und der Nomenklatur nicht vertraut ist, zu kurz kommt. Ein Entwickler, der Atomic Design nicht kennt, hat keinen Sinn für die Tatsache, dass sich ein Suchformular im molecules verzeichnis befindet, und kann die Suche in anderen Bereichen starten, um Änderungen vorzunehmen, oder einfach frustriert sein un eine neue Datei erstellen. Ich habe es gesehen.

Eine Komponentenstruktur

Zum Zeitpunkt dieses Schreibens verfolge ich einen Ansatz, bei dem Elemente vollständig als Komponenten wie Legoblöcke betrachtet werden, wodurch eine Benutzerfreundlichkeit für alle an der Codebasis Beteiligten geschaffen wird. Schauen Sie sich die folgende Verzeichnisstruktur an:

1
 - vars
2
 - functions
3
 - mixins
4
 - base
5
 - typography
6
 - plugins
7
 - toolbox
8
 - components
9
 - layout
10
 - pages
11
 - states
12
 - utility
13
 style.scss

Hoffentlich können Sie an diesem Beispiel erkennen, dass es ziemlich intuitiv ist, den Zweck jedes Ordners zu erfassen (mit Ausnahme der toolbox). In "Toolbox" können Helfer gespeichert werden, die nichts mit Dienstprogrammen zu tun haben, z. B. benutzerdefinierte Klassen für Layout- und Objektmuster, benutzerdefinierte Keyframe-Animationen usw. Diese Werkzeugbox-Elemente werden für mich normalerweise als Teile angezeigt, die ich möglicherweise überschreibe oder in Zukunft verwenden möchte, und warum sie vor dem Komponentenverzeichnis importiert werden.

Zu diesem Zeitpunkt werden Partials wie folgt in den Styles-Index geladen:

1
// Config
2
@import "vars/**/**";
3
@import "functions/*";
4
@import "mixins/*";
5
6
// UI
7
@import "../bower_components/normalize-scss/_normalize";
8
@import "base/*"; // general styling using DOM element selectors
9
@import "typography/*";
10
@import "plugins/**/*"; // 3rd party add-ons
11
@import "toolbox/**/*"; // Non-Utility Helpers
12
@import "components/**/*"; // lego blocks
13
@import "layout/**/*";
14
@import "pages/**/*";
15
@import "states/**/*";
16
@import "utility/**/*";

"Components" enthalten Teile der Benutzeroberfläche wie Schaltflächen, Eingaben, Logos, Avatare, Kopf- und Fußzeilen, Formulare und sogar Module wie Navigation. Komponenten können alles sein, solange sie eine Sache und nur eine Sache tun, wiederverwendbar, projektübergreifend wiederverwendet und vor allem unabhängig; Keine schlechte Definition, um allgemein verstanden zu werden, wenn Sie mich fragen. Dieser spezielle Ansatz implementiert auch verschiedene Ideen aus SMACSS (Status) und Atomic Design (Vorlagen - in diesem Beispiel Layout genannt - und Seiten).

In Bezug auf die Suche ist es viel einfacher, das Komponentenverzeichnis zu finden und den entsprechenden Schnittstellenteil zu finden, den ein Entwickler möglicherweise aufspürt. beispielsweise:

1
 - components
2
   - _buttons.scss
3
   - _navigation.scss
4
   - _masthead.scss
5
   - _footer.scss
6
   - _logo.scss
7
   - _avatar.scss
8
   - _contact-form.scss
9
   - _sales-calculator.scss

Komponenten sind im Wesentlichen ein One-Stop-Shop. Atomic Design funktioniert möglicherweise perfekt für ein Team von einem oder sogar für ein Team, das sehr vertraut ist, aber in einem größeren Team ist die Frustration zu spüren.

Abschluss

Atomic Design kann absolut verwendet werden, um das Design der Elemente auf ein Minimum zu beschränken und aussagekräftige und wiederverwendbare Schnittstellenkomponenten zu erstellen. Aber Sie können bestimmte Aspekte verwirrend finden. Entscheiden Sie selbst, was für Sie am besten funktioniert, und ziehen Sie daraus Schlussfolgerungen. Wie bei allem ist dies nur meine Erfahrung und andere mögen eine andere Haltung einnehmen.

Ich würde gerne hören, wie Sie sich diesem Szenario selbst nähern. Lassen Sie es mich in den Kommentaren wissen. Viel Spaß beim Codieren!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.