В компютърните науки използваме думата clamp като начин за ограничаване на числото между две други числа. Когато е закрепен, числото или ще запази собствената си стойност, ако живее в диапазона, наложен от другите две стойности, ще вземе по-ниската стойност, ако първоначално е по-ниска от нея, или по-високата, ако първоначално е по-висока от нея.
Като бърз пример, преди да продължите по-нататък:
$clamp: clamp(42, $min: 0, $max: 1337); // 42 $clamp: clamp(42, $min: 1337, $max: 9000); // 1337 $clamp: clamp(42, $min: 0, $max: 1); // 1
Връщайки се към CSS. Има няколко начина, при които може да се наложи номер да бъде ограничен между двама други. Вземете например opacity
свойството: то трябва да е с поплавък (между 0 и 1). Това обикновено е видът стойност, който бихте искали да затегнете, за да сте сигурни, че не е нито отрицателен, нито по-висок от 1.
Внедряването на затягаща функция в Sass може да се направи по два начина, и двата строго еквивалентни, но единият е много по-елегантен от другия. Да започнем с не толкова страхотния.
Мръсната
Тази версия разчита на if
извиквания на вложени функции. По принцип казваме: ако $number
е по-ниско от $min
, тогава пази $min
, иначе ако $number
е по-високо от $max
, тогава пази $max
, иначе пази $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)); )
Ако не сте много уверени с вложени повиквания if, помислете за предишното изявление като:
@if $number $max ( @return $max; ) @return $number;
Чистият
Тази версия е много по-елегантна, тъй като използва добре min
и двете, и max
функциите на 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); )
Буквално означава да запазите минимума между $max
и максимума между $number
и $min
.
Пример
Сега, нека създадем малко смесване на непрозрачност само за демонстрация:
/// 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; )