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:colorsass:stringsass:mathsass:listsass:mapsass:selectorsass: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ówadjust(): 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ęcielength(): pobranie długości ciąguto-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()istring.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ęgowaniesqrt(): pierwiastek kwadratowyabs(): wartość bezwzględnaround(),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()imath.sqrt()przydają się do obliczeń rozmiarów, natomiastmath.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 elementyjoin(): łączenie listnth(): pobranie elementu na danej pozycjilength(): 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 funkcjijoin()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życiujoin(). Łącząc funkcjelength()inth(), ł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 kluczaset(): 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 zmap.get()można budować elastyczne struktury motywów. Dziękimap.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ówis-superselector(): sprawdzenie zawierania selektorówreplace(): 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 orazselector.is-superselector()do weryfikacji ich relacji. Połącz zselector.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 zmiennaglobal-variable-exists(): sprawdzenie, czy istnieje zmienna globalnainspect(): 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()imeta.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(), acolor.adjust()z$lightness: -10%służy do przyciemniania kolorów o 10%. Na końcu@forjest połączone zlist.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.