Informatikoje mes naudojame žodį „clamp“ kaip būdą apriboti skaičių tarp dviejų kitų skaičių. Užfiksuotas skaičius arba išlaikys savo vertę, jei gyvena dviejų kitų verčių nustatytame diapazone, ims mažesnę vertę, jei ji iš pradžių mažesnė, arba didesnę, jei iš pradžių didesnė už ją.
Trumpas pavyzdys prieš einant toliau:
$clamp: clamp(42, $min: 0, $max: 1337); // 42 $clamp: clamp(42, $min: 1337, $max: 9000); // 1337 $clamp: clamp(42, $min: 0, $max: 1); // 1
Grįžtame prie CSS. Yra keli būdai, kai jums gali reikėti apriboti skaičių tarp dviejų kitų. Paimkime opacity
, pavyzdžiui, nuosavybę: ji turi būti plūdė (tarp 0 ir 1). Paprastai tai yra tokia vertė, kurią norėtumėte užfiksuoti, kad įsitikintumėte, jog ji nėra nei neigiama, nei didesnė nei 1.
„Sass“ spaustuko funkciją galima įgyvendinti dviem būdais, abu griežtai lygiaverčiai, tačiau vienas yra daug elegantiškesnis nei kitas. Pradėkime nuo ne tokio puikaus.
Purvinas
Ši versija remiasi įdėtais if
funkcijų iškvietimais. Iš esmės mes sakome: jei $number
yra mažesnis nei $min
, tada laikyk $min
, dar jei $number
yra didesnis $max
, tada laikyk $max
, dar laikyk $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)); )
Jei nesate labai tikras dėl įterptųjų skambučių, galvokite apie ankstesnį teiginį:
@if $number $max ( @return $max; ) @return $number;
Švarus
Ši versija yra kur kas elegantiškesnė, nes ji gerai naudoja abi „ Sass“ funkcijas min
ir max
funkcijas.
/// 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); )
Pažodžiui reiškia išlaikyti minimalų tarp $max
ir maksimalų tarp $number
ir $min
.
Pavyzdys
Dabar, sukurkime šiek tiek nepermatomumo mišinį, kad būtų galima parodyti:
/// 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; )