Zmienne CSS w czystym CSS – pierwsze kroki w 5 minut lub mniej

Opublikowany: 2019-07-15

Zmienne CSS (lub oficjalnie: właściwości niestandardowe ) w czystym CSS to ogromna oszczędność czasu dla każdego, kto chce zainwestować pięć minut w naukę ich używania. Istnieją od CSS3, a 92% wszystkich użytkowników ma przeglądarki, które je obsługują. Korzystanie ze zmiennych CSS nie wymaga żadnych znaczących zmian w istniejących arkuszach stylów ani nowych narzędzi i można je łatwo zastosować w starych projektach. Zamiast mieć kod koloru szesnastkowego zapisany w setkach miejsc w pliku, możesz go zdefiniować tylko w jednym miejscu – za pomocą zmiennej CSS. Ogromna oszczędność czasu i pomoc w tworzeniu bardziej spójnych arkuszy stylów.

Zmienne CSS w czystym CSS:

  • nie są potrzebne żadne dodatkowe narzędzia, oprogramowanie ani „specjalne” zmiany w istniejących arkuszach stylów
  • 92% wszystkich użytkowników ma przeglądarki w pełni obsługujące zmienne CSS
  • stare projekty można łatwo zmodernizować, aby z nich korzystać
  • Zmienne CSS zapewniają spójność, porządek i szybkość w arkuszach stylów wszystkich rozmiarów
  • jeśli znasz CSS, opanujesz je w ciągu kilku minut

Zaczekaj, więc to jest Saas or Less, prawda?

Nie, mówimy tutaj o czystym CSS, a nie CSS połączonym z preprocesorem takim jak Saas, Less czy SCSS. Korzystanie ze zmiennych CSS nie wymaga żadnych dodatkowych narzędzi, edytorów ani zmian w przepływie pracy ani niczego innego, z czego korzystasz. Dlatego istniejące pliki CSS bez zmiennych nie wymagają żadnych „specjalnych” zmian i można je mieszać i dopasowywać – używaj zmiennych tylko dla części pliku lub tylko w niektórych plikach jest twój projekt.

Preprocesory CSS, takie jak Saas lub Less, również obsługują zmienne. Ponadto mają o wiele więcej funkcji i opcji, z których możesz skorzystać. Jednak, jak sama nazwa wskazuje, wymagają preprocesora – narzędzia, które zamienia CSS napisany w Saas na czysty CSS. Jeśli potrzebujesz tylko zmiennych – czysty CSS ma wszystko, czego potrzebujesz.

Zmienne CSS są funkcją natywną i dlatego są świetne. Przy minimalnym wysiłku Twoje arkusze stylów są znacznie bardziej czytelne i spójne. Co więcej, wszelkie zmiany, które musisz wykonać później, są znacznie łatwiejsze do wykonania – na pewno szybsze niż wyszukiwanie i zastępowanie, gdy musisz zmienić kod koloru w setkach miejsc .

Kto wiedział, że nie potrzebujesz preprocesora, takiego jak Saas lub Less, aby używać zmiennych #CSS. Są natywną funkcją CSS, prostą w użyciu i oszczędzają godziny podczas kodowania.

KLIKNIJ, ABY TWEETOWAĆ

Stwórzmy kilka zmiennych

Jak w każdym języku programowania, są dwa kroki do używania zmiennych : nadanie im wartości (zdefiniowanie) i użycie ich (umieszczenie ich we wszystkich miejscach, w których potrzebujesz tej wartości). Zrobimy to samo;

:root {
  --my-red: #ff0080;
  --my-shadow: 3px 3px 10px green;
  --my-border: 1px solid #222222;
}

.custom-box {
  box-shadow: var(--my-shadow);
}

.custom-text {
  color: var(--my-red);
  border: var(--my-border);
}

Jeśli chcesz używać zmiennej globalnie (w dowolnym miejscu) w pliku CSS, musisz zdefiniować ją w pseudoklasie :root . Lokalizacja w pliku nie ma znaczenia. Może znajdować się na początku lub na końcu pliku. Ale musisz umieścić zmienną w :root . Nazwa musi zaczynać się od podwójnego myślnika -- nie może zawierać spacji. Zmienne CSS mogą przechowywać dowolną wartość, którą zwykle przypisujesz do właściwości CSS; od prostych wartości, takich jak kolory, po złożone wyrażenia dla skróconych właściwości, takich jak tło lub cień.

Aby użyć zmiennej (aby uzyskać jej wartość), umieść ją w funkcji var() . Nie zapominaj, że wszystkie nazwy zmiennych zaczynają się od -- . To wszystko, co musisz wiedzieć, aby zacząć.

Korzystanie z wartości zastępczych

W przypadku, gdy zmienna nie jest zdefiniowana, do funkcji var() można podać wartość zastępczą jako drugi parametr.

:root {
  --my-red: #ff0080;
  --my-blue: #0020ff;
  --my-shadow: 3px 3px 10px green;
}

.custom-box {
  box-shadow: var(--my-shadow, 2px 2px 5px blue);
}

.custom-text {
  color: var(--my-red, var(--my-blue, red));
}

Nie martw się, jeśli wartość nieruchomości jest złożona. Parametr fallback dopuszcza przecinki (patrz przykład box-shadow ). Pozwala również na łączenie wielu funkcji var() , jak pokazano dla koloru w .custom-text . Jeśli --my-red i --my-blue są niezdefiniowane, jako kolor zostanie użyty czerwony.

Połączenie var() i calc() również działa, bez żadnych niespodzianek w składni. Oto przykład, który zawiera zmienną lokalną, która jest dostępna tylko w klasie, w której została zdefiniowana.

.box {
  --padding: 10px;
  
  height: calc(var(--padding) + 100px);
  padding: var(--padding);
}

Używaj calc() oszczędnie. Nie jest to zła rzecz, ale gdy jest nadużywany, staje się dość problematyczny w debugowaniu i utrzymaniu.

Pobieranie i ustawianie zmiennych CSS przez JavaScript

Używając zwykłego JavaScript, możesz ustawić nowe zmienne CSS i uzyskać dostęp do ich wartości. Nie używam tej metody. Zamiast tego wolę zmienić klasę elementu. Jednak nie ma nic złego, jeśli chcesz uzyskać dostęp do zmiennych CSS za pomocą JavaScript. Z pewnością przydaje się w niektórych sytuacjach. Ci, którzy trzymają się jQuery, mogą przekonwertować kod na wtyczkę jQuery.

Aby utworzyć nową zmienną lub zmienić wartość istniejącej, użyj:

// set var value
document.documentElement.style.setProperty('--my-var', 'blue');

Dostęp do zmiennej jest nieco bardziej złożony. Jeśli zmienna jest zdefiniowana przez JS, użyj:

// get var value if defined via JS
document.documentElement.style.getPropertyValue('--my-var');

Jeśli jednak jest to zdefiniowane za pomocą CSS (i zwykle tak będzie), użyj tego kodu:

// get var value if defined via CSS
getComputedStyle(document.documentElement,null).getPropertyValue('--my-var');

Problemy i rzeczy, na które należy zwrócić uwagę

Teraz, gdy wiesz, jak używać zmiennych, nie przesadzaj z nimi i twórz zmienną dla każdej wartości właściwości w arkuszu stylów. Na przykład byłoby to przesadą i nadużyciem całej koncepcji;

:root {
  --spacing-10: 10px;
}

.custom-box {
  padding: var(--spacing-10);
}

Nic nie osiągnąłeś. Właśnie dostałem --spacing-10 zamiast 10px . Wkrótce utworzysz jeszcze dwadzieścia zmiennych dla każdej wartości piksela wypełnienia od 5 do 100 pikseli. Jeśli zależy Ci na spójności, skorzystaj z koncepcji --small-padding, --medium-padding, --large-padding i przypisz odpowiednie wartości liczbowe.

Chociaż nie jest to wymagane przez standard CSS, z całego serca sugeruję zdefiniowanie wszystkich zmiennych w jednym miejscu i na początku pliku CSS . W ten sposób zawsze będziesz wiedział, gdzie się znajdują i możesz szybko zmieniać wartości. Jeśli rozrzucisz definicje po całym pliku, będziesz miał trudności ze śledzeniem rzeczy i może skończyć się definiowaniem tej samej zmiennej w wielu miejscach. Debugowanie to nie będzie zabawne zadanie.

Nie ma powodu, aby nie używać zmiennych CSS

W Internecie sprawy szybko się rozwijają (np. zastępowanie plików cookie przez pamięć lokalną). W przypadku dużych projektów i dużych zespołów przejście na preprocesory CSS, takie jak Saas, jest właściwą drogą. Jednak w przypadku mniejszych projektów lub istniejących projektów, które wymagają konserwacji, właściwym rozwiązaniem są zmienne CSS w czystym CSS . Nie wymagają absolutnie żadnych zmian, aktualizacji oprogramowania lub narzędzi ani niczego. Definiujesz zmienną i zaczynasz jej używać.

Czy nie jest lepiej, szybciej i rozsądniej zdefiniować kod koloru raz, a następnie użyć zmiennej w całym pliku, zamiast umieszczać ten sam heksadecymalny w stu miejscach?