suchen
HeimWeb-FrontendCSS-TutorialWie dieses SCSS-Projekt ausgehend von einer Karte organisiert bleibt

Als ich an der Dokumentation für mein Produkt LiveAPI arbeitete, begann ich mit der Verwendung von MkDocs, einem statischen Site-Generator, der saubere und professionelle Dokumentation erstellt.

Allerdings fand ich das Design etwas eintönig und beschloss, das Projekt zu erkunden, um einige Anpassungen vorzunehmen.

Diese Reise führte mich zu einem faszinierenden Teil seiner Architektur: Sass-Karten.

Was als beiläufige Modifikation begann, entwickelte sich zu einer tieferen Wertschätzung für das durchdachte Design hinter diesem Projekt.

In diesem Blog werde ich untersuchen, wie Sass-Maps im Material-Theme von MkDocs verwendet werden – insbesondere in seinen Mixins – und wie sie zur Flexibilität und Skalierbarkeit des Designsystems beitragen. Lasst uns eintauchen!


Was sind Sass-Maps?

Sass-Maps sind eine Schlüsselwert-Datenstruktur in Sass, ähnlich wie Wörterbücher in Python oder Objekte in JavaScript.

Sie ermöglichen es uns, zusammengehörige Daten kompakt zu speichern und Werte dynamisch abzurufen.

Im MkDocs Material-Theme werden Sass-Maps verwendet, um gerätespezifische Haltepunkte für responsives Design zu definieren. Zum Beispiel:

@use "sass:map";
@use "sass:list";
@use "sass:math";

$break-devices: (
  mobile: (
    portrait: 220px 479px,
    landscape: 480px 719px,
  ),
  tablet: (
    portrait: 720px 959px,
    landscape: 960px 1219px,
  ),
  screen: (
    small: 1220px 1599px,
    large: 1600px 1999px,
  ),
) !default;

How This SCSS Project Stays Organized Starting from a Map

Diese Karte organisiert Haltepunkte in Kategorien (Mobil, Tablet, Bildschirm) und Unterkategorien (Hochformat, Querformat, klein, mittel, groß).

Es ist nicht nur eine statische Definition – es ist das Rückgrat dafür, wie reaktionsfähiges Verhalten dynamisch generiert wird.


So funktionieren Sass-Maps in MkDocs-Mixins

Das Theme nutzt eine Reihe von Funktionen und Mixins, um Daten aus der $break-devices-Karte zu extrahieren und zu nutzen. Hier ist eine Aufschlüsselung:

1. Haltepunktwerte extrahieren

Die Break-Select-Device-Funktion durchsucht die Karte, um die relevante Gerätekategorie zu finden und ruft die zugehörigen Haltepunkte ab.

Wenn mehrere Ebenen angegeben werden (z. B. mobiles Porträt), greift es tiefer in die Hierarchie ein.

@function break-select-device($device) {
  $current: $break-devices;
  @for $n from 1 through length($device) {
    @if type-of($current) == map {
      $current: map.get($current, list.nth($device, $n));
    } @else {
      @error "Invalid device map: #{$devices}";
    }
  }
  @return $current;
}
  • @for-Schleife: Diese Schleife läuft vom ersten bis zum letzten Element in der $device-Liste und stellt sicher, dass jede Ebene in der Hierarchie überprüft wird.
  • @if-Bedingung: Dies prüft, ob der aktuelle Wert noch eine Karte ist, und setzt die Suche fort, wenn er wahr ist. Wenn nicht, wird der Vorgang mit einer Fehlermeldung abgebrochen.
  • map.get: Eine integrierte Sass-Funktion, die mithilfe eines Schlüssels einen Wert aus der Karte abruft.

2. Medienabfragen erstellen

In SCSS ist ein Mixin ein wiederverwendbarer Codeblock, den Sie einmal definieren und im gesamten Stylesheet verwenden können.

Es hilft, Ihren Code trocken zu halten (Don't Repeat Yourself), indem es Ihnen ermöglicht, Stile oder Logik mehrmals einzubinden, ohne den Code zu wiederholen.

Wenn Sie beispielsweise eine Reihe von Stilen wiederholt anwenden müssen, können Sie ein Mixin erstellen und es bei Bedarf wiederverwenden:

Die Break-from-Device- und Break-to-Device-Mixins nutzen diese Funktion, um Medienabfragen dynamisch zu generieren. Zum Beispiel:

@use "sass:map";
@use "sass:list";
@use "sass:math";

$break-devices: (
  mobile: (
    portrait: 220px 479px,
    landscape: 480px 719px,
  ),
  tablet: (
    portrait: 720px 959px,
    landscape: 960px 1219px,
  ),
  screen: (
    small: 1220px 1599px,
    large: 1600px 1999px,
  ),
) !default;

Dieses Mixin wendet Stile für eine in der Karte angegebene Mindestbreite an. Ein ähnlicher Ansatz wird für den Break-to-Device-Mixin verwendet, der auf eine maximale Breite abzielt.


Anwenden der Mixins

Um die Leistungsfähigkeit der Break-from-Device- und Break-to-Device-Mixins zu sehen, schauen wir uns praktische Beispiele an, wie man sie zur dynamischen Implementierung responsiver Stile verwendet.

Beispiel 1: Anwenden von Standardstilen für mobile Geräte

Standardmäßig wenden wir Stile für mobile Bildschirme mit einem Rasterlayout an, das gut auf kleinen Bildschirmen funktioniert, ohne dass ein Mixin erforderlich ist. Zum Beispiel:

@function break-select-device($device) {
  $current: $break-devices;
  @for $n from 1 through length($device) {
    @if type-of($current) == map {
      $current: map.get($current, list.nth($device, $n));
    } @else {
      @error "Invalid device map: #{$devices}";
    }
  }
  @return $current;
}

In diesem Fall ist das Layout bereits für mobile Geräte optimiert. Die Basisstile richten sich standardmäßig an mobile Benutzer.

How This SCSS Project Stays Organized Starting from a Map

Um die Reaktionsfähigkeit für größere Bildschirme zu verbessern, können Sie den Break-from-Device-Mixin verwenden, um bestimmte Haltepunkte anzusprechen.


Beispiel 2: Targeting auf die Tablet-Landschaft

Auf kleineren Bildschirmen, wie z. B. Tablets bis zum Querformat-Haltepunkt, passen bestimmte Elemente wie die Seitenleiste aufgrund des begrenzten Platzes auf dem Bildschirm möglicherweise nicht gut.

In solchen Fällen können wir die Seitenleiste ausblenden und als Popover von links anzeigen, um den Hauptinhalt zu priorisieren. Zum Beispiel:

@mixin break-from-device($device) {
  @if type-of($device) == string {
    $device: $device;
  }
  @if type-of($device) == list {
    $breakpoint: break-select-device($device);
    $min: list.nth($breakpoint, 1);

    @media screen and (min-width: $min) {
      @content;
    }
  } @else {
    @error "Invalid device: #{$device}";
  }
}

@mixin break-to-device($device) {
  @if type-of($device) == string {
    $device: $device;
  }
  @if type-of($device) == list {
    $breakpoint: break-select-device($device);
    $max: list.nth($breakpoint, 2);

    @media screen and (max-width: $max) {
      @content;
    }
  } @else {
    @error "Invalid device: #{$device}";
  }
}
  • Tablet-Querformat: Bezieht sich auf die Tablet-Kategorie und ihre Unterkategorie „Querformat“ in der $break-devices-Karte.
  • Die generierte Medienabfrage lautet:
.grid {
  display: grid;
  gap: 16px;
  grid-template-columns: repeat(1, 1fr); /* 1 column for small screens */
}

Für Geräte, die größer als der Tablet-Querformat-Haltepunkt sind und auf denen mehr Platz auf dem Bildschirm zur Verfügung steht, können wir ein zweispaltiges Layout für eine verbesserte Inhaltsverteilung einführen. Dies kann mit dem Break-from-Device-Mixin erreicht werden:

@include break-to-device(tablet landscape) {
  .sidebar {
    display: none;
  }
}
  • Die generierte Medienabfrage lautet:
  @media screen and (max-width: 1219px) {
    .sidebar {
      display: none;
    }
  }

How This SCSS Project Stays Organized Starting from a Map


Beispiel 3: Targeting von Desktops

Mit zunehmender Bildschirmgröße steht mehr Platz für die Präsentation von Inhalten zur Verfügung.

Für Desktops können wir das Rasterlayout anpassen, um je nach Bildschirmgröße drei oder vier Spalten zu erstellen, indem wir den Break-from-Device-Mixin verwenden.

Für kleine Desktops:

Wenn die Bildschirmgröße groß genug ist, um drei Spalten unterzubringen, gelten die folgenden Stile:

@use "sass:map";
@use "sass:list";
@use "sass:math";

$break-devices: (
  mobile: (
    portrait: 220px 479px,
    landscape: 480px 719px,
  ),
  tablet: (
    portrait: 720px 959px,
    landscape: 960px 1219px,
  ),
  screen: (
    small: 1220px 1599px,
    large: 1600px 1999px,
  ),
) !default;
  • Desktop klein: Bezieht sich auf die Desktop-Kategorie und ihre kleine Unterkategorie in der $break-devices-Karte.
  • Die generierte Medienabfrage lautet:
@function break-select-device($device) {
  $current: $break-devices;
  @for $n from 1 through length($device) {
    @if type-of($current) == map {
      $current: map.get($current, list.nth($device, $n));
    } @else {
      @error "Invalid device map: #{$devices}";
    }
  }
  @return $current;
}
Für große Desktops:

Für noch größere Bildschirme können wir vier Spalten erstellen, um die Bildschirmfläche optimal zu nutzen:

@mixin break-from-device($device) {
  @if type-of($device) == string {
    $device: $device;
  }
  @if type-of($device) == list {
    $breakpoint: break-select-device($device);
    $min: list.nth($breakpoint, 1);

    @media screen and (min-width: $min) {
      @content;
    }
  } @else {
    @error "Invalid device: #{$device}";
  }
}

@mixin break-to-device($device) {
  @if type-of($device) == string {
    $device: $device;
  }
  @if type-of($device) == list {
    $breakpoint: break-select-device($device);
    $max: list.nth($breakpoint, 2);

    @media screen and (max-width: $max) {
      @content;
    }
  } @else {
    @error "Invalid device: #{$device}";
  }
}
  • Desktop groß: Bezieht sich auf die Desktop-Kategorie und ihre große Unterkategorie in der $break-devices-Karte.
  • Die generierte Medienabfrage lautet:
.grid {
  display: grid;
  gap: 16px;
  grid-template-columns: repeat(1, 1fr); /* 1 column for small screens */
}

How This SCSS Project Stays Organized Starting from a Map


Architektonische Eleganz

Dieses Design zeigt die Absicht des Autors, Skalierbarkeit und Wartbarkeit in den Vordergrund zu stellen.

Durch die Abstraktion von Haltepunkten in einer einzigen Wahrheitsquelle und die Verwendung von Mixins für Medienabfragen haben sie ein System geschaffen, das:

  • Ist einfach zu warten: Das Aktualisieren von Haltepunkten oder das Hinzufügen neuer Haltepunkte erfordert kein Durchsuchen der Codebasis.
  • Verbessert die Lesbarkeit: Medienabfragen werden in logische, wiederverwendbare Komponenten abstrahiert.
  • Fördert die Skalierbarkeit:Neue Geräte oder Kategorien können zur Karte hinzugefügt werden, ohne die bestehende Funktionalität zu beeinträchtigen.

Letzte Gedanken

Das Erkunden von MkDocs-Material hat meine Wertschätzung für durchdachtes Design in der Front-End-Architektur vertieft.

Die Verwendung von Sass-Karten, Mixins und hierarchischen Datenstrukturen ist eine Meisterklasse für wartbare und skalierbare Designsysteme.

Wenn Sie Ihre eigenen responsiven Stile erstellen oder verbessern möchten, sollten Sie die Einführung ähnlicher Techniken in Betracht ziehen.

Sind Sie in Ihren Projekten auf Sass-Karten gestoßen oder haben Sie diese verwendet? Ich würde gerne Ihre Erfahrungen und Erkenntnisse hören!

Möchten Sie tiefer in die Designwelt eintauchen? Schauen Sie sich unsere anderen Blogbeiträge an:

  • Grundregeln des Designs für Nicht-Designer
  • Leistungsstarke UI-Design- und Implementierungsprinzipien
  • Tolle Widgets erstellen

Abonnieren Sie sich für eine wöchentliche Dosis Einblicke in Entwicklung, IT, Betrieb, Design, Führung und mehr.

Das obige ist der detaillierte Inhalt vonWie dieses SCSS-Projekt ausgehend von einer Karte organisiert bleibt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Dies soll nicht passieren: Fehlerbehebung beim UnmöglichenDies soll nicht passieren: Fehlerbehebung beim UnmöglichenMay 15, 2025 am 10:32 AM

Wie es aussieht, eines dieser unmöglichen Probleme zu beheben, die sich als etwas ganz anderes herausstellen, an das Sie nie gedacht haben.

@Keyframes vs CSS Übergänge: Was ist der Unterschied?@Keyframes vs CSS Übergänge: Was ist der Unterschied?May 14, 2025 am 12:01 AM

@KeyFramesandcsStransitionSdifferinComplexity:@keyFramesAllowsfordetailedanimationsequenzen, whilecsStransitionShandleSmplestatechanges.USecsStransitionsForHovereffectSlikeButtonColorchanges sowie@keyframesforintricateanimationslikerotierungen.

Verwenden von Seiten CMS für statische Site Content ManagementVerwenden von Seiten CMS für statische Site Content ManagementMay 13, 2025 am 09:24 AM

Ich weiß, ich weiß: Es gibt eine Menge von Content -Management -Systemoptionen, und während ich mehrere getestet habe, war keiner wirklich derjenige, den Sie wirklich wissen? Seltsame Preismodelle, schwierige Anpassungen, einige werden sogar ein Ganzes &

Die ultimative Anleitung zum Verknüpfen von CSS -Dateien in HTMLDie ultimative Anleitung zum Verknüpfen von CSS -Dateien in HTMLMay 13, 2025 am 12:02 AM

Das Verknüpfen von CSS -Dateien mit HTML kann durch die Verwendung von Elementen in einem HTML erreicht werden. 1) Verwenden Sie Tags, um lokale CSS -Dateien zu verknüpfen. 2) Mehrere CSS -Dateien können durch Hinzufügen mehrerer Tags implementiert werden. 3) Externe CSS -Dateien verwenden absolute URL -Links wie z. 4) Stellen Sie die korrekte Verwendung von Dateipfaden und CSS -Dateiladeauftrag sicher und optimieren Sie die Leistung können mit CSS -Präprozessor zusammengeführt werden, um Dateien zu verschmelzen.

CSS Flexbox vs Grid: Eine umfassende ÜberprüfungCSS Flexbox vs Grid: Eine umfassende ÜberprüfungMay 12, 2025 am 12:01 AM

Die Auswahl von Flexbox oder Grid hängt von den Layoutanforderungen ab: 1) Flexbox ist für eindimensionale Layouts wie die Navigationsleiste geeignet. 2) Das Gitter eignet sich für zweidimensionale Layouts wie Zeitschriftenlayouts. Die beiden können im Projekt verwendet werden, um den Layout -Effekt zu verbessern.

So füge CSS -Dateien ein: Methoden und Best PracticesSo füge CSS -Dateien ein: Methoden und Best PracticesMay 11, 2025 am 12:02 AM

Der beste Weg, um CSS -Dateien einzubeziehen, besteht darin, Tags zu verwenden, um externe CSS -Dateien in den HTML -Teil einzuführen. 1. Verwenden Sie Tags, um externe CSS -Dateien einzuführen, wie z. 2. Für kleine Anpassungen können Inline -CSS verwendet werden, sollten jedoch mit Vorsicht verwendet werden. 3. Große Projekte können CSS -Präprozessoren wie SASS oder weniger verwenden, um andere CSS -Dateien über @import zu importieren. 4. Für die Leistung sollten CSS -Dateien zusammengeführt und CDN verwendet und mit Tools wie CSSNano komprimiert werden.

Flexbox vs Grid: Soll ich sie beide lernen?Flexbox vs Grid: Soll ich sie beide lernen?May 10, 2025 am 12:01 AM

Ja, youShouldlearnbothflexBoxandgrid.1) FlexBoxiSidealfore-dimensional, flexibelayoutslikenAvigationMenus.2) GridexcelStwo-dimensional, komplexDesignsuchasmagazinelayouts.3) Kombininierungs-Botenhances-Flexible-und-und -Anteilungskraft, und -forsfossivität,

Orbitalmechanik (oder wie ich eine CSS -Keyframes -Animation optimiert habe)Orbitalmechanik (oder wie ich eine CSS -Keyframes -Animation optimiert habe)May 09, 2025 am 09:57 AM

Wie sieht es aus, Ihren eigenen Code neu zu gestalten? John Rhea nimmt eine alte CSS -Animation auseinander, die er geschrieben hat, und geht durch den Denkprozess der Optimierung.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Nordhold: Fusionssystem, erklärt
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)