Wbudowane moduły SASS

Wbudowane moduły SASS

Ten artykuł wyjaśnia wbudowane moduły SASS.

Omówimy wbudowane moduły SASS krok po kroku, od podstaw po zaawansowane zastosowania.

YouTube Video

Wbudowane moduły SASS

SASS dostarcza różnorodne wbudowane moduły, a ich użycie sprawia, że tworzenie arkuszy stylów jest jeszcze bardziej efektywne.

Czym są wbudowane moduły SASS?

Wbudowane moduły SASS to moduły udostępniające funkcje i miksiny wielokrotnego użytku. Korzystanie z nich ułatwia złożone obliczenia i tworzenie niestandardowych stylów.

Do głównych wbudowanych modułów należą:.

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

Każdy moduł zawiera funkcje usprawniające określone zadania.

Szczegóły i przykłady każdego modułu

Moduł sass:color

Moduł sass:color udostępnia funkcje ułatwiające manipulację kolorami.

Główne funkcje
  • mix(): mieszanie dwóch kolorów
  • adjust(): Dostosuj jednocześnie odcień, jasność, nasycenie i inne właściwości
Przykład użycia
 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}
  • Ten kod generuje nowy kolor poprzez zmieszanie dwóch kolorów oraz inny kolor z dostosowanym odcieniem. Wygenerowane kolory są stosowane do elementów jako kolory tła i obramowania. Ten przykład pomaga zrozumieć podstawy manipulacji kolorami.

Moduł sass:string

Moduł sass:string udostępnia funkcje przydatne do manipulacji ciągami znaków.

Główne funkcje
  • quote(), unquote(): opatrzenie cudzysłowem lub jego usunięcie
  • length(): pobranie długości ciągu
  • to-upper-case(), to-lower-case(): konwersja ciągu na wielkie lub małe litery
Przykład użycia
 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}
  • Użycie string.quote() i string.unquote() pozwala precyzyjnie kontrolować reprezentację ciągów w wynikowym CSS. string.length() to funkcja pobierająca długość ciągu. string.to-upper-case() / string.to-lower-case() są przydatne do generowania nazw klas i formatowania nazw w konwencji BEM.

Moduł sass:math

Moduł sass:math udostępnia funkcje do obliczeń matematycznych.

Główne funkcje
  • pow(): potęgowanie
  • sqrt(): pierwiastek kwadratowy
  • abs(): wartość bezwzględna
  • round(), ceil(), floor(): zaokrąglenie, zaokrąglenie w górę, zaokrąglenie w dół
Przykład użycia
 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() i math.sqrt() przydają się do obliczeń rozmiarów, natomiast math.abs() i funkcje zaokrąglania pomagają w korektach. Łącząc te funkcje, łatwo obliczysz spójne skale interfejsu.

Moduł sass:list

Moduł sass:list udostępnia funkcje wyspecjalizowane do operacji na listach.

Główne funkcje
  • append(): Dodaj elementy
  • join(): łączenie list
  • nth(): pobranie elementu na danej pozycji
  • length(): pobranie długości listy
Przykład użycia
 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}
  • Możesz dodać elementy na końcu listy za pomocą append(), a funkcji join() użyć do elastycznego łączenia wielu list. Jeśli chcesz dodać element na początku, możesz to zrobić, łącząc jednoelementową listę z przodu przy użyciu join(). Łącząc funkcje length() i nth(), łatwiej generować style UI wymagające dynamicznego przetwarzania list.

Moduł sass:map

Moduł sass:map udostępnia funkcje do pracy z mapami (tablicami asocjacyjnymi).

Główne funkcje
  • get(): pobranie wartości dla klucza
  • set(): dodanie lub aktualizacja pary klucz-wartość
  • keys(): pobranie wszystkich kluczy
Przykład użycia
 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}
  • Użycie map.set() pozwala dynamicznie aktualizować mapy, a w połączeniu z map.get() można budować elastyczne struktury motywów. Dzięki map.keys() możesz wypisać pozycje konfiguracyjne, co pomaga w projektowaniu rozszerzalnych stylów.

Moduł sass:selector

Moduł sass:selector udostępnia funkcje pomocne przy manipulowaniu selektorami.

Główne funkcje
  • nest(): zagnieżdżanie selektorów
  • is-superselector(): sprawdzenie zawierania selektorów
  • replace(): zastępowanie selektorów
Przykład użycia
 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}
  • Użyj selector.nest() do elastycznego komponowania selektorów oraz selector.is-superselector() do weryfikacji ich relacji. Połącz z selector.replace(), aby zwięźle obsłużyć zaawansowaną logikę generowania selektorów.

Moduł sass:meta

Moduł sass:meta udostępnia funkcje przydatne do metaprogramowania w SASS.

Główne funkcje
  • variable-exists(): sprawdzenie, czy istnieje zmienna
  • global-variable-exists(): sprawdzenie, czy istnieje zmienna globalna
  • inspect(): wyświetlenie wartości do debugowania
Przykład użycia
 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() i meta.global-variable-exists() pozwalają bezpiecznie określać stan zmiennych w poszczególnych zakresach. meta.inspect() jest bardzo przydatne przy debugowaniu i potrafi wyświetlać wartości jako ciągi znaków.

Przykład praktyczny

Łączenie wielu wbudowanych modułów dodatkowo zwiększa możliwości SASS. Poniżej znajduje się przykład, który łącznie wykorzystuje moduły color, math i list do automatyzacji przetwarzania kolorów oraz operacji na listach.

 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}
  • W tym kodzie przetworzone kolory są kolejno dołączane za pomocą list.append(), a color.adjust() z $lightness: -10% służy do przyciemniania kolorów o 10%. Na końcu @for jest połączone z list.nth() w celu zastosowania różnych kolorów tła do każdego elementu <div>.

Podsumowanie

Wbudowane moduły SASS w dużym stopniu zwiększają elastyczność CSS. Rozumiejąc każdy moduł i używając ich właściwie, możesz tworzyć wydajniejsze i łatwiejsze w utrzymaniu arkusze stylów.

Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.

YouTube Video