Στην επιστήμη των υπολογιστών, χρησιμοποιούμε τη λέξη 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
ακίνητο για παράδειγμα: πρέπει να είναι float (μεταξύ 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 $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; )