I datalogi bruger vi ordet klemme som en måde at begrænse et tal mellem to andre tal. Når det er fastspændt, vil et tal enten beholde sin egen værdi, hvis det lever i det område, der er pålagt af de to andre værdier, tager den lavere værdi, hvis den oprindeligt er lavere end den, eller den højere, hvis den oprindeligt er højere end den.
Som et hurtigt eksempel før du går videre:
$clamp: clamp(42, $min: 0, $max: 1337); // 42 $clamp: clamp(42, $min: 1337, $max: 9000); // 1337 $clamp: clamp(42, $min: 0, $max: 1); // 1
Kommer tilbage til CSS. Der er et par måder, hvor du muligvis har brug for et nummer, der skal begrænses mellem to andre. Tag opacity
ejendommen for eksempel: den skal være en float (mellem 0 og 1). Dette er typisk den slags værdi, du gerne vil klemme for at sikre, at den hverken er negativ eller højere end 1.
Implementering af en klemfunktion i Sass kan gøres på to måder, begge strengt ækvivalente, men den ene er meget mere elegant end den anden. Lad os starte med den ikke så store.
Den beskidte
Denne version er afhængig af indlejrede if
funktionsopkald. Grundlæggende siger vi: hvis $number
er lavere end $min
, så hold $min
, ellers hvis $number
er højere end $max
, så hold $max
, ellers beholder $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)); )
Hvis du ikke er særlig fortrolig med indlejrede hvis opkald, så tænk på den foregående erklæring som:
@if $number $max ( @return $max; ) @return $number;
Den rene
Denne version er meget mere elegant, da den gør en god brug af både min
og max
funktioner fra 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); )
Bogstaveligt betyder betyder at holde minimumet mellem $max
og det maksimale mellem $number
og $min
.
Eksempel
Lad os nu oprette en lille opacitet mixin bare for demonstrationens skyld:
/// 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; )