W informatyce używamy klamry słów jako sposobu na ograniczenie liczby między dwiema innymi liczbami. Po zaciśnięciu liczba albo zachowa swoją własną wartość, jeśli będzie mieszkać w zakresie narzuconym przez dwie inne wartości, przyjmie niższą wartość, jeśli początkowo jest niższa od niej, lub wyższą, jeśli początkowo będzie wyższa od niej.
Jako szybki przykład, zanim przejdziesz dalej:
$clamp: clamp(42, $min: 0, $max: 1337); // 42 $clamp: clamp(42, $min: 1337, $max: 9000); // 1337 $clamp: clamp(42, $min: 0, $max: 1); // 1
Wracając do CSS. Istnieje kilka sposobów ograniczenia liczby numerów między dwoma innymi. Weźmy opacity
na przykład właściwość: musi to być liczba zmiennoprzecinkowa (między 0 a 1). Zwykle jest to wartość, którą chciałbyś ograniczyć, aby upewnić się, że nie jest ani ujemna, ani wyższa niż 1.
Zaimplementowanie funkcji zacisku w Sassie można wykonać na dwa sposoby, oba są ściśle równoważne, ale jeden jest znacznie bardziej elegancki niż drugi. Zacznijmy od niezbyt wielkiego.
Brudny
Ta wersja opiera się na zagnieżdżonych if
wywołaniach funkcji. Zasadniczo mówimy: jeśli $number
jest niższe niż $min
, to zachowaj $min
, w przeciwnym razie jeśli $number
jest wyższe niż $max
, to zachowaj $max
, w przeciwnym razie zachowaj $number
.
/// Clamp `$number` between `$min` and `$max` /// @param (Number) $number - Number to clamp /// @param (Number) $min - Minimum value /// @param (Number) $max - Maximum value /// @return (Number) @function clamp($number, $min, $max) ( @return if($number $max, $max, $number)); )
Jeśli nie masz pewności co do zagnieżdżonych wywołań if, pomyśl o poprzedniej instrukcji jako:
@if $number $max ( @return $max; ) @return $number;
Czysty
Ta wersja jest znacznie bardziej elegancka, ponieważ dobrze wykorzystuje zarówno funkcje, jak min
i max
funkcje Sass.
/// Clamp `$number` between `$min` and `$max` /// @param (Number) $number - Number to clamp /// @param (Number) $min - Minimum value /// @param (Number) $max - Maximum value /// @return (Number) @function clamp($number, $min, $max) ( @return min(max($number, $min), $max); )
Dosłownie oznacza utrzymanie minimum pomiędzy $max
a maksimum pomiędzy $number
a $min
.
Przykład
Teraz stwórzmy małą mieszankę krycia tylko dla celów demonstracyjnych:
/// Opacity mixin /// @param (Float) $value - Opacity value /// @output `opacity` @mixin opacity($value) ( $clamped-value: clamp($value, 0, 1); @if $value != $clamped-value ( @warn "Mixin `opacity` needs a float; #($value) given, clamped to #($clamped-value)."; ) opacity: $clamped-value; )