Arvutiteaduses kasutame sõna klamber arvu piiramiseks kahe teise arvu vahel. Kinnitatuna hoiab number kas oma väärtust, kui elab kahe muu väärtuse kehtestatud vahemikus, võtab madalama väärtuse, kui see on esialgu väiksem, või suurema, kui see on algselt suurem.
Kiire näitena enne edasiminekut:
$clamp: clamp(42, $min: 0, $max: 1337); // 42 $clamp: clamp(42, $min: 1337, $max: 9000); // 1337 $clamp: clamp(42, $min: 0, $max: 1); // 1
Tulles tagasi CSS-i juurde. On mitmeid viise, kus peate võib-olla numbrit kahe teise vahel piirama. Võtame näiteks opacity
atribuudi: see peab olema ujuk (vahemikus 0 kuni 1). See on tavaliselt selline väärtus, mida soovite kinnitada, et veenduda, et see pole negatiivne ega suurem kui 1.
Klamberfunktsiooni saab Sassis rakendada kahel viisil, mõlemad rangelt samaväärsed, kuid üks on teisest palju elegantsem. Alustame mitte nii suurest.
Räpane
See versioon tugineb pesastatud if
funktsioonikõnedele. Põhimõtteliselt ütleme: kui $number
on madalam kui $min
, siis hoia $min
, muidu kui $number
on kõrgem kui $max
, siis hoia $max
, muidu hoia $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)); )
Kui te ei ole pesastatud kõnedega eriti kindel, mõelge eelmisele avaldusele järgmiselt:
@if $number $max ( @return $max; ) @return $number;
Puhas
See versioon on palju elegantsem, kuna see kasutab nii Sassi mõlemaid min
kui ka max
funktsioone hästi.
/// 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); )
Sõna otseses mõttes tähendab miinimumini jäämist $max
ja maksimaalset vahemikku $number
ja $min
.
Näide
Nüüd loome demonstratsiooni huvides väikese läbipaistmatuse segu:
/// 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; )