Organizowanie niestandardowego CSS za pomocą warstw
Używać @layer base, @layer components i @layer utilities do kontrolowania specyficzności oraz zapewnienia prawidłowej integracji niestandardowych stylów z wynikiem Tailwind.
Organizowanie niestandardowego CSS za pomocą warstw to bezpłatna lekcja Tailwind CSS Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Tailwind CSS Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Tailwind CSS Academy zawiera 4 lekcji w sumie.
Wyzwanie związane z kaskadą CSS
Podczas łączenia klas narzędziowych Tailwind z niestandardowym CSS mogą pojawić się konflikty specyficzności. Reguła niestandardowego CSS, taka jak .btn { color: red; }, może nadpisać narzędzie Tailwind text-blue-500 ze względu na kolejność w źródle, nawet jeśli zamierzali Państwo, aby pierwszeństwo miało narzędzie. Dyrektywa @layer Tailwind rozwiązuje ten problem, zapewniając jawną kontrolę nad miejscem w kaskadzie CSS, w którym wstawiane są niestandardowe style.
Trzy warstwy Tailwind
Tailwind organizuje cały wygenerowany CSS w trzy uporządkowane warstwy: base znajduje się na początku i zawiera resety oraz wartości domyślne na poziomie elementów. components zajmuje drugie miejsce i służy do tworzenia abstrakcji klas złożonych z wielu narzędzi. utilities znajduje się na końcu i zawiera wszystkie klasy narzędziowe o pojedynczym przeznaczeniu. Taka kolejność gwarantuje, że narzędzia zawsze mają pierwszeństwo przed stylami komponentów, a style komponentów przed stylami bazowymi — tworząc przewidywalną i zamierzoną hierarchię.
/* Order in final CSS output: */
/* 1. @layer base (element defaults) */
/* 2. @layer components (component classes) */
/* 3. @layer utilities (utility classes) */
/* Your main CSS entry file */
@tailwind base; /* injects base layer */
@tailwind components; /* injects components layer */
@tailwind utilities; /* injects utilities layer */Używanie @layer base
Warstwa bazowa jest właściwym miejscem na resety na poziomie elementów, domyślne style elementów HTML oraz style globalne stosowane bezwarunkowo. Typowe zastosowania obejmują ustawienie domyślnej czcionki elementu body, zdefiniowanie reguł box-sizing, wyzerowanie marginesów nagłówków i określenie stylów linków. Style w warstwie bazowej mogą zostać nadpisane przez dowolne style z warstwy components lub utilities.
@layer base {
*,
*::before,
*::after {
box-sizing: border-box;
}
body {
@apply font-sans antialiased text-gray-900 bg-white;
}
h1 { @apply text-3xl font-bold tracking-tight; }
h2 { @apply text-2xl font-semibold tracking-tight; }
h3 { @apply text-xl font-semibold; }
a {
@apply text-blue-600 hover:underline;
}
img {
max-width: 100%;
height: auto;
}
}Używanie @layer components
Warstwa components służy do wyodrębniania powtarzających się kombinacji narzędzi do nazwanych klas za pomocą @apply. Zdefiniowane tutaj klasy komponentów mogą zostać nadpisane przez klasy narzędziowe zastosowane w kodzie HTML, ponieważ narzędzia znajdują się w późniejszej warstwie utilities. Dzięki temu klasy komponentów są elastyczne — ustawiają rozsądne wartości domyślne, które zawsze można dostosować dla konkretnej instancji za pomocą narzędzi.
@layer components {
.card {
@apply bg-white rounded-xl shadow-sm border border-gray-200 overflow-hidden;
}
.btn {
@apply inline-flex items-center px-4 py-2 rounded-lg font-medium text-sm
transition-colors duration-150 focus:outline-none focus:ring-2;
}
.input {
@apply w-full border border-gray-300 rounded-lg px-4 py-2 text-sm
focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent;
}
}Używanie @layer utilities
Warstwa utilities służy do tworzenia niestandardowych klas narzędziowych o pojedynczym przeznaczeniu, których Tailwind nie udostępnia od razu. Mogą to być narzędzia dla właściwości CSS, których nie ma jeszcze w jądrze Tailwind, właściwości z prefiksami specyficznymi dla przeglądarek lub złożonych wartości zbyt szczegółowych dla domyślnej skali. Narzędzia w tej warstwie mają najwyższy priorytet i nadpisują zarówno style bazowe, jak i style komponentów.
@layer utilities {
/* CSS text-wrap utilities (not in Tailwind core) */
.text-balance { text-wrap: balance; }
.text-pretty { text-wrap: pretty; }
/* Content visibility for performance */
.content-auto {
content-visibility: auto;
contain-intrinsic-size: auto 500px;
}
/* Custom scrollbar hiding */
.scrollbar-hide {
-ms-overflow-style: none;
scrollbar-width: none;
}
.scrollbar-hide::-webkit-scrollbar {
display: none;
}
}Dlaczego umiejscowienie w warstwie ma znaczenie dla specyficzności
Specyficzność CSS zwykle zależy od wagi selektora. Jednak specyfikacja CSS Cascade Layers (wykorzystywana przez Tailwind) zmienia działanie specyficzności: reguła w późniejszej warstwie zawsze wygrywa z regułą we wcześniejszej warstwie, niezależnie od złożoności selektora. Oznacza to, że klasa .p-4 z warstwy .utilities (pojedyncza klasa) automatycznie wygrywa z klasą .card.padded.extra z warstwy .components (trzy klasy).
@layer components {
/* Even with 3 classes, this loses to any utility */
.card.padded.extra {
padding: 100px; /* will be overridden by p-4 utility */
}
}
@layer utilities {
/* One class in utilities layer always wins */
.p-4 { padding: 1rem; } /* wins! */
}
<!-- In HTML: p-4 correctly applies because utilities layer > components layer -->
<div class="card padded extra p-4">Correct padding: 1rem</div>Niestandardowe warstwy wykraczające poza trzy warstwy Tailwind
Nie są Państwo ograniczeni do trzech domyślnych warstw Tailwind. Za pomocą CSS @layer można definiować całkowicie niestandardowe warstwy nazwane i kontrolować ich położenie w kaskadzie, deklarując je w odpowiedniej kolejności na początku pliku CSS. Jest to przydatne podczas integrowania bibliotek CSS innych firm w określonych miejscach kaskady lub tworzenia warstwowej architektury we własnym CSS.
/* Declare layer order at the top of your CSS */
@layer reset, base, vendors, components, utilities, overrides;
/* Then fill in each layer */
@layer reset {
* { box-sizing: border-box; margin: 0; }
}
@layer vendors {
/* Third-party library styles here */
}
@layer overrides {
/* Emergency overrides — highest specificity */
.force-hidden { display: none !important; }
}Style poza dowolną warstwą
CSS zapisany poza dowolnym blokiem @layer ma większą specyficzność niż każdy styl należący do warstwy. Oznacza to, że niestandardowy CSS zapisany bez opakowania w @layer zawsze nadpisze warstwowe narzędzia Tailwind, co może prowadzić do nieoczekiwanych problemów z układem. Aby uniknąć walki z kaskadą Tailwind, należy zawsze umieszczać niestandardowe style w odpowiedniej warstwie lub jawnie utworzyć warstwę nadpisań.
/* CAUTION: This is outside any layer and overrides ALL layered styles */
.btn {
color: red; /* This will override dark:text-white and hover:text-blue-600! */
}
/* BETTER: Inside the appropriate layer */
@layer components {
.btn {
color: red; /* Can be overridden by utilities like text-white */
}
}Łączenie @layer z @apply
Dyrektywy @layer i @apply współpracują ze sobą. Należy zdefiniować warstwę, umieścić w niej klasy komponentów lub narzędziowe, a następnie użyć @apply w tych klasach, aby złożyć je z narzędzi Tailwind. Takie połączenie zapewnia korzyści organizacyjne warstw (przewidywalną kaskadę) oraz wygodę @apply (komponowanie z istniejących narzędzi) w ramach jednego wzorca.
@layer base {
/* Element defaults using @apply */
body { @apply font-sans antialiased text-base leading-relaxed; }
}
@layer components {
/* Component classes using @apply */
.alert { @apply flex items-start gap-3 p-4 rounded-lg border text-sm; }
.alert-error { @apply alert bg-red-50 border-red-200 text-red-800; }
}
@layer utilities {
/* Custom utilities using plain CSS */
.touch-action-none { touch-action: none; }
.will-change-transform { will-change: transform; }
}Strukturyzowanie plików CSS za pomocą warstw
W miarę rozwoju projektu należy podzielić CSS na wiele plików uporządkowanych według przeznaczenia warstw. Wszystko należy zaimportować do jednego pliku wejściowego. Style bazowe powinny być minimalne — obejmować tylko to, co rzeczywiście ma zastosowanie globalne. Pliki komponentów należy organizować według typu komponentu. Pliki narzędzi powinny zawierać wyłącznie narzędzia, których rzeczywiście brakuje. Taka struktura ułatwia wdrażanie nowych programistów i zapobiega przekształceniu CSS w trudny w utrzymaniu balast.
/* src/styles/main.css — entry point */
@tailwind base;
@tailwind components;
@tailwind utilities;
/* Base layer additions */
@layer base {
@import './base/typography.css';
@import './base/reset.css';
}
/* Component layer */
@layer components {
@import './components/buttons.css';
@import './components/cards.css';
@import './components/forms.css';
}
/* Utility layer additions */
@layer utilities {
@import './utilities/layout.css';
@import './utilities/animations.css';
}Debugowanie problemów z warstwami
Gdy styl nie jest stosowany zgodnie z oczekiwaniami, należy otworzyć Chrome DevTools i przejść do panelu Styles. Przekreślone deklaracje wskazują style, które zostały nadpisane. Jeśli klasa narzędziowa jest przekreślana przez własny CSS komponentu, prawdopodobnie umieszczono ją poza warstwą (co nadaje jej wyższy priorytet w kaskadzie) albo w niewłaściwej warstwie. Przeniesienie jej do @layer components powinno przywrócić prawidłowe działanie, w którym narzędzia mają pierwszeństwo.
Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat organizowania niestandardowego CSS za pomocą dyrektywy @layer w Tailwind.
Podsumowanie lekcji
W tej lekcji nauczyłeś się: trzy warstwy Tailwind — base, components, utilities — tworzą hierarchię kaskady, w której każda późniejsza warstwa nadpisuje wcześniejsze; @layer base służy do definiowania wartości domyślnych elementów, @layer components do wyodrębnionych klas komponentów, a @layer utilities do niestandardowych klas narzędziowych. W następnej części omówimy pułapki związane z @apply oraz sytuacje, w których lepiej zastosować wyodrębnianie komponentów.
Ucz się HTML dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Organizowanie niestandardowego CSS za pomocą warstw” jest bezpłatna?
Tak — pełny tekst „Organizowanie niestandardowego CSS za pomocą warstw” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Tailwind CSS Academy, przejdź na CoddyKit PRO. Kurs Tailwind CSS Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Organizowanie niestandardowego CSS za pomocą warstw”?
Używać @layer base, @layer components i @layer utilities do kontrolowania specyficzności oraz zapewnienia prawidłowej integracji niestandardowych stylów z wynikiem Tailwind. Ćwiczysz Tailwind CSS Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Tailwind CSS Academy?
Nie wymagamy żadnego doświadczenia. Tailwind CSS Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Organizowanie niestandardowego CSS za pomocą warstw”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Tailwind CSS Academy?
Tak. Każda lekcja Tailwind CSS Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Działanie @apply i zastosowania
- Tworzenie wielokrotnego użytku klas komponentów
- Organizowanie niestandardowego CSS za pomocą warstw
- Pułapki @apply i alternatywy