Функции за CSS променливи (част 1)

Ако първото предназначение на променливите в CSS е промяна на много стилове с малко код, то мащабът му се увеличава няколкократно, когато използваме и функции.

calc()

Една от най-често срещаните функции в CSS е calc(). На много места може да срещнете употребата ѝ за изчисляване на размер на елемент, който трябва да е на база едновременно релативни и абсолютни единици. Примерно: width: calc(100% - 50px).

Когато някоя от стойностите вътре в calc() обаче е custom property вече става по-интересно. Нека разгледаме следния пример:

Имаме клас .box на който задаваме широчина, зависеща от променлива --size, със стойност по подразбиране 100px. Височината задаваме с формула разделяща --size на променлива --aspect-ratio (със стойност по подразбиране 1).

За първия елемент не задаваме никакви стойности на променливите, защото използваме просто стойностите по подразбиране.

За втория и третия (с класове box-2 и box-3) съответно задаваме размер 150px и 250px, както и aspect ratio от 4:3 и 16:9.

Променливи на базата на други променливи

А за да избегнем повторението на стойност по подразбиране на --size както за width така и за height можем да направим следното:

Първо задаваме променлива с име --default-size и стойност var(--size, 100px). Така, ако --size е дефинирана – --default-size ще вземе нейната стойност. А ако не е – ще вземе стойността по подразбиране от 100px. И в двата случая обаче сме сигурни, че --default-size ще има някаква стойност и няма нужда на нея да ѝ задаваме такава по подразбиране.

От там вече и width можем да го зададем просто като var(--default-size) и отново да използваме тази променлива и за height.

В този пример --default-size се ползва само на 2 места и ползите не са чак толкова големи, но в един реален CSS подобна променлива може да се ползва десетки пъти и спестявянето на стойност по подразбиране всеки път не само, че пести нерви, но и при нужда от промяна на тази стойност ще стане само на 1 място. А това е и една от основните цели при употребата на собствени свойства в CSS.

min() и max()

Ако продължим с математическите функции е редно да отбележим и тези.

min() приема две или повече стойности, отделени със запетаи и връща най-малката от всички.

max() работи аналогично, като връща най-голямата.

В този пример задаваме клас landscape, който е предназначен по входни параметри X и Y на правоъгълник да го завърта винаги в пейзаж (широчината винаги да е по-голяма от височината).

С --x означаваме входна широчина, а с --y – входната височина.

Стойностите по подразбиране са такива, че елементът си е в пейзажно разположение така или иначе. Но за landscape-2 може да видите, че по входни данни е трябвало да е само 100px широк, а 300px висок. Стиловете обаче се грижат да използваме по-голямата и по-малката от двете стойности така, че да са присвоени съответно на широчината и височината на показания елемент.

inline стойности на променливите

В горния пример „входни“ звучи малко странно, тъй като в крайна сметка всичко е въведено в самия CSS. Собствени свойства обаче могат да се задават и с inline стилове и тогава получаваме нещо такова:

Вмъквайки style="" атрибут в HTML-а, можем да зададем стойност на CSS променлива за дадения елемент. И тогава вече „входни параметри“ звучи доста по-правдоподобно.

clamp()

Накрая остава да споменем и тази функция, която един вид обединява min() и max().

Ако примерно искаме да задаваме големина на шрифт с променлива, но все пак искаме да валидираме стойността ѝ, че няма да е по-малко от 10px или повече от 14px, защото в единия случай това ще е прекалено малко и нечетимо, а в другия се опасяваме, че ще е твърде голямо.

Единият вариант е да имате: font-size: max(10px, min(14px, var(--custom-font-size, 12px))). Ако го прочетете внимателно ще видите, че прави точно това, което съм описал горе.

clamp() позволява да сбием малко синтаксиса: font-size: clamp(10px, var(--custom-font-size, 12px), 14px).

Ето и пример, че работи:

Вашият коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

Този сайт използва Akismet за намаляване на спама. Научете как се обработват данните ви за коментари.