Matematyka CSS
CSS ma specjalną funkcję, dzięki której możemy wykonywać podstawowe operacje matematyczne. Funkcję tę zapisujemy jako calc() i umieszczamy jako wartość właściwości.
div {
/* Szerokość tagu <div> będzie równa 70px */
width: calc(20px + 50px);
/* calc() możemy używamy używać również w skróconych zapisach */
margin: 10px calc(50% + 10px);
}
Funkcji calc()
możemy używać jedynie z wartościami numerycznymi, które używają jednostek poznanych w poprzedniej lekcji, czyli np. px
, %
, vw
itp. Dozwolone jest również stosowanie mnożnika, jak i pojedynczej wartości.
div {
/* Szerokość tagu będzie równa 15px */
width: calc(3 * 5px);
/* Wysokość tagu będzie równa 100px */
height: calc(100px);
}
Mieszanie jednostek
Jedną z najciekawszych możliwości funkcji calc()
jest możliwość mieszania jednostek. Możemy więc przykładowo dodawać do siebie piksele i procenty:
div {
/* Szerokość tagu o 20px mniejsza niż cała możliwa szerokość */
width: calc(100% - 20px);
/* Wysokość tagu będzie o 100px większa, niż obecna wysokość okna przeglądarki */
height: calc(100vh + 100px);
}
Zapisywanie wartości niektórych właściwości za pomocą wyrażeń matematycznych znacząco zwiększy czytelność naszego kodu. Załóżmy, że posiadamy trzy znaczniki typu inline-block
i chcemy, aby razem zapełniły całą szerokość strony i miały ten sam wymiar. Każdy ze znaczników musi posiadać szerokość równą 33,33333%, co nie jest zbyt eleganckim zapisem i nie do końca sugeruje, czemu akurat takiej wartości tutaj użyliśmy. Zamiast tego pokażmy wyliczenia, które stoją za tą liczbą:
.znacznik {
/* Jasny zapis - dzielimy całą szerokość na trzy równe części */
width: calc(100% / 3);
/* Mniej czytelny zapis z którego nie wynika czemu używamy tej wartości. */
width: 33.33333%;
}
Operatory matematyczne
W funkcji calc()
możemy skorzystać z czterech podstawowych operatorów:
- dodawanie
+
– tylko wartości z jednostkami, - odejmowanie
-
– tylko wartości z jednostkami, - mnożenie
*
– jedna z mnożonych wartości musi być bez jednostki - dzielenie
/
– dzielnik nie może mieć jednostki i nie może być równy zero.
Co więcej, między znakami dodawania oraz odejmowania musi wystąpić spacja:
div {
width: calc(20px + 10px); /* ✅ */
width: calc(20px + 10); /* ⛔ */
width: calc(20px+10px); /* ⛔ */
width: calc(20px - 10px); /* ✅ */
width: calc(20px - 10); /* ⛔ */
width: calc(20px-10px); /* ⛔ */
width: calc(10px * 3); /* ✅ */
width: calc(10px * 3); /* ✅ */
width: calc(10px * 3px); /* ⛔ */
width: calc(10px / 2); /* ✅ */
width: calc(10px / 2); /* ✅ */
width: calc(10px / 2px); /* ⛔ */
width: calc(10px / 0); /* ⛔ "Pamiętaj cholero, nie dziel przez zero" 👵 */
}