SASS:s inbyggda moduler

SASS:s inbyggda moduler

Den här artikeln förklarar SASS:s inbyggda moduler.

Vi går igenom SASS:s inbyggda moduler steg för steg, från grunder till avancerad användning.

YouTube Video

SASS:s inbyggda moduler

SASS tillhandahåller en mängd inbyggda moduler, och att använda dem gör arbetet med stilmallar ännu effektivare.

Vad är SASS:s inbyggda moduler?

SASS:s inbyggda moduler är moduler som erbjuder återanvändbara funktioner och mixins. Att använda dem gör komplexa beräkningar och skapandet av anpassade stilar enklare.

De viktigaste inbyggda modulerna omfattar följande:.

  • sass:color
  • sass:string
  • sass:math
  • sass:list
  • sass:map
  • sass:selector
  • sass:meta

Varje modul innehåller funktioner som effektiviserar specifika uppgifter.

Detaljer och exempel för varje modul

Modulen sass:color

Modulen sass:color tillhandahåller funktioner som gör färgmanipulation enkel.

Huvudfunktioner
  • mix(): Blanda två färger
  • adjust(): Justera nyans, ljushet, mättnad och andra egenskaper tillsammans
Exempel på användning
 1@use "sass:color";
 2
 3$primary-color: #3498db;
 4$secondary-color: #e74c3c;
 5
 6// Mix two colors with equal weight
 7$blended-color: color.mix($primary-color, $secondary-color, 50%);
 8
 9// Adjust hue by 45 degrees using color.adjust()
10$adjusted-color: color.adjust($primary-color, $hue: 45deg);
11
12div {
13  background-color: $blended-color; // Result of mixing two colors
14  border-color: $adjusted-color;    // Hue adjusted by 45 degrees
15}
  • Den här koden genererar en ny färg genom att blanda två färger och en annan färg med justerad nyans. De genererade färgerna används på element som bakgrunds- och kantfärger. Det här exemplet hjälper dig att förstå grunderna i färgmanipulation.

Modulen sass:string

Modulen sass:string tillhandahåller funktioner som är användbara för stränghantering.

Huvudfunktioner
  • quote(), unquote(): Sätt citattecken kring eller ta bort citattecken från en sträng
  • length(): Hämta längden på en sträng
  • to-upper-case(), to-lower-case(): Konvertera en sträng till versaler eller gemener
Exempel på användning
 1@use "sass:string";
 2
 3// base values
 4$base-url: "https://example.com";
 5$path: "/assets/style.css";
 6
 7// 1) Combine strings using interpolation and then quote the result
 8$full-quoted: string.quote("#{$base-url}#{$path}");
 9// Example result: "\"https://example.com/assets/style.css\""
10
11// 2) Remove quotes from a quoted string
12$full-unquoted: string.unquote($full-quoted);
13// Example result: https://example.com/assets/style.css
14
15// 3) Get the length of the unquoted string
16$url-length: string.length($full-unquoted);
17// Example output: number of characters in the URL
18
19// 4) Convert strings to upper/lower case and quote for safe CSS output
20$block-name: "main-header";
21// "MAIN-HEADER"
22$upper-quoted: string.quote(string.to-upper-case($block-name));
23// "main-footer"
24$lower-quoted: string.quote(string.to-lower-case("MAIN-FOOTER"));
25
26a::after {
27  /* Use quoted strings for content to ensure valid CSS */
28  content: $full-quoted; /* "https://example.com/assets/style.css" */
29}
30
31:root {
32  /* Insert numeric values with interpolation when needed */
33  --url-length: #{ $url-length }; /* Example: --url-length: 31; */
34}
35
36.header::before {
37  /* Output uppercase version */
38  content: $upper-quoted; /* "MAIN-HEADER" */
39}
40
41.footer::after {
42  /* Output lowercase version */
43  content: $lower-quoted; /* "main-footer" */
44}
  • Med string.quote() och string.unquote() kan du exakt styra hur strängar representeras i den genererade CSS:en. string.length() är en funktion som hämtar längden på en sträng. string.to-upper-case() / string.to-lower-case() är praktiska för att generera klassnamn och formatera BEM-namn.

Modulen sass:math

Modulen sass:math tillhandahåller funktioner för matematiska beräkningar.

Huvudfunktioner
  • pow(): Exponentiering
  • sqrt(): Kvadratrot
  • abs(): Absolutbelopp
  • round(), ceil(), floor(): Avrunda, avrunda uppåt, avrunda nedåt
Exempel på användning
 1@use "sass:math";
 2
 3// Using pow() to calculate exponential values
 4$base-size: math.pow(2, 3) * 10px; // 80px
 5
 6// Using sqrt() to compute a square root
 7$root-size: math.sqrt(144) * 1px; // 12px
 8
 9// Using abs() to ensure a positive value
10$offset: math.abs(-15px); // 15px
11
12// Using round(), ceil(), and floor() for different rounding methods
13$rounded: math.round(12.6px); // 13px
14$ceiled: math.ceil(12.1px); // 13px
15$floored: math.floor(12.9px); // 12px
16
17.container {
18  width: $base-size; // 80px
19  height: $root-size; // 12px
20  margin-left: $offset; // 15px
21}
22
23.values {
24  /* Demonstrating different rounding operations */
25  padding: $rounded;  // 13px
26  border-width: $ceiled; // 13px
27  margin-top: $floored; // 12px
28}
  • math.pow() och math.sqrt() är användbara för storleksberäkningar, medan math.abs() och avrundningsfunktionerna hjälper till med justeringar. Genom att kombinera dem blir det enkelt att beräkna konsekventa UI-skalor.

Modulen sass:list

Modulen sass:list tillhandahåller funktioner specialiserade för listoperationer.

Huvudfunktioner
  • append(): Lägg till element
  • join(): Slå samman listor
  • nth(): Hämta elementet på en given position
  • length(): Hämta längden på en lista
Exempel på användning
 1@use "sass:list";
 2
 3// Base list
 4$colors: ("red", "blue", "green");
 5
 6// Add an element to the end of the list
 7$colors-appended: list.append($colors, "yellow");
 8// ("red", "blue", "green", "yellow")
 9
10// Add an element to the beginning of the list using join()
11$colors-prepended: list.join(("black",), $colors);
12// ("black", "red", "blue", "green", "yellow")
13
14// Join two lists together
15$extra-colors: ("pink", "cyan");
16$merged-colors: list.join($colors-prepended, $extra-colors);
17// ("black", "red", "blue", "green", "yellow", "pink", "cyan")
18
19// Get list length
20$total-length: list.length($merged-colors);
21
22// Example usage in a loop: assign each color to a list item
23ul {
24  @for $i from 1 through $total-length {
25    li:nth-child(#{$i}) {
26      /* Get the color at index $i */
27      color: list.nth($merged-colors, $i);
28    }
29  }
30}
  • Du kan lägga till element i slutet av en lista med append() och använda join() för att flexibelt kombinera flera listor. Om du vill lägga till ett element i början kan du göra det genom att ansluta en lista med ett enda element längst fram med hjälp av join(). Genom att kombinera length() och nth() blir det enklare att skapa UI-stilar som kräver dynamisk listebearbetning.

Modulen sass:map

Modulen sass:map tillhandahåller funktioner för att arbeta med mappar (associativa arrayer).

Huvudfunktioner
  • get(): Hämta värdet för en nyckel
  • set(): Lägg till eller uppdatera ett nyckel-värde-par
  • keys(): Hämta alla nycklar
Exempel på användning
 1@use "sass:map";
 2
 3// Base theme map
 4$theme-colors: (
 5  "primary": #3498db,
 6  "secondary": #e74c3c
 7);
 8
 9// Update or add a value using set()
10$updated-theme: map.set($theme-colors, "warning", #f1c40f);
11// Map now has "warning": #f1c40f added
12
13// Get a value from the map
14$primary-color: map.get($updated-theme, "primary");
15
16// Get all keys from the map
17$all-keys: map.keys($updated-theme);
18// Example: ("primary", "secondary", "warning")
19
20button {
21  /* Apply color retrieved from the theme map */
22  background-color: $primary-color;
23}
24
25.debug {
26  /* Print keys as content for demonstration */
27  content: "#{$all-keys}";
28}
  • Med map.set() kan du uppdatera mappar dynamiskt, och i kombination med map.get() kan du bygga flexibla temastrukturer. Med map.keys() kan du lista konfigurationsposter, vilket underlättar när du utformar utbyggbara stilar.

Modulen sass:selector

Modulen sass:selector tillhandahåller funktioner som är hjälpsamma för selektorhantering.

Huvudfunktioner
  • nest(): Nästla selektorer
  • is-superselector(): Kontrollera selektorers inneslutning
  • replace(): Ersätt selektorer
Exempel på användning
 1@use "sass:selector";
 2
 3// Nest selectors (combine parent and child)
 4$nested-selector: selector.nest(".parent", ".child");
 5// Result: ".parent .child"
 6
 7// Check if one selector is a superselector of another
 8$is-super: selector.is-superselector(".parent", $nested-selector);
 9// true because ".parent" matches all elements that
10// ".parent .child" can match as an ancestor
11
12// Replace part of a selector with another selector
13$replaced-selector: selector.replace(".parent .child", ".child", ".item");
14// Result: ".parent .item"
15
16// Use generated selectors in actual CSS output
17#{$nested-selector} {
18  /* Applies to .parent .child */
19  color: red;
20}
21
22@if $is-super {
23  .info::after {
24    /* Demonstrate boolean result */
25    content: "parent is a superselector";
26  }
27}
28
29#{$replaced-selector} {
30  /* Applies to .parent .item */
31  background: blue;
32}
  • Använd selector.nest() för att flexibelt komponera selektorer och selector.is-superselector() för att verifiera deras relationer. Kombinera med selector.replace() för att hantera avancerad logik för selektorgenerering på ett koncist sätt.

Modulen sass:meta

Modulen sass:meta tillhandahåller funktioner som är användbara för metaprogrammering i SASS.

Huvudfunktioner
  • variable-exists(): Kontrollera om en variabel finns
  • global-variable-exists(): Kontrollera om en global variabel finns
  • inspect(): Visa ett värde för felsökning
Exempel på användning
 1@use "sass:meta";
 2
 3// Define a global variable
 4$color: #3498db;
 5
 6// Check if a variable exists in the current scope
 7@if meta.variable-exists("color") {
 8  body {
 9    /* Apply style only if $color exists */
10    background-color: $color;
11  }
12}
13
14// Create a local variable inside a block
15.container {
16  $local-size: 20px;
17
18  @if meta.variable-exists("local-size") {
19    /* Demonstrates detection of local variable */
20    width: $local-size;
21  }
22}
23
24// Check if a global variable exists
25$result: meta.global-variable-exists("color"); // true
26
27.debug {
28  /* Use inspect() to output the inspected value as a string */
29  content: meta.inspect($result); // "true"
30}
  • meta.variable-exists() och meta.global-variable-exists() låter dig på ett säkert sätt avgöra variablers tillstånd per omfång. meta.inspect() är mycket användbart för felsökning och kan visa värden som strängar.

Praktiskt exempel

Att kombinera flera inbyggda moduler ökar SASS:s uttryckskraft ytterligare. Nedan finns ett exempel som använder modulerna color, math och list tillsammans för att automatisera färgbehandling och listoperationer.

 1@use "sass:color";
 2@use "sass:math";
 3@use "sass:list";
 4
 5// Base color list
 6$base-colors: (#3498db, #e74c3c, #2ecc71);
 7$darkened-colors: (); // Empty list for processed colors
 8
 9// Loop through each base color and darken it by 10%
10@each $color in $base-colors {
11  $darkened-colors: list.append(
12    $darkened-colors,
13    // Darken color by decreasing lightness by 10%
14    color.adjust($color, $lightness: -10%)
15  );
16}
17
18div {
19  // Apply each processed color to a corresponding <div>
20  @for $i from 1 through list.length($darkened-colors) {
21    &:nth-child(#{$i}) {
22      // Set color by index
23      background-color: list.nth($darkened-colors, $i);
24    }
25  }
26}
  • I den här koden läggs bearbetade färger till sekventiellt med list.append(), och color.adjust() med $lightness: -10% används för att göra färgerna 10% mörkare. Slutligen kombineras @for med list.nth() för att tilldela olika bakgrundsfärger till varje <div>.

Sammanfattning

SASS:s inbyggda moduler ökar CSS:ens flexibilitet avsevärt. Genom att förstå varje modul och använda dem på rätt sätt kan du skapa effektivare och mer lättunderhållna stilmallar.

Du kan följa med i artikeln ovan med hjälp av Visual Studio Code på vår YouTube-kanal. Vänligen kolla även in YouTube-kanalen.

YouTube Video