CSS Pulsuz, qeydiyyatsız

CSS specificity kalkulyatoru

Hər sətirə bir CSS seçici yazın — kalkulyator onu hissələrə ayırır, (a,b,c) ağırlığını hesablayır və hansı qaydanın qalib gələcəyini göstərir.

Nəticə
Hazır CSS kodu
/* #nav .item a  →  (1,1,1) */
/* .nav .item a:hover  →  (0,3,1) */
/* nav ul li a  →  (0,0,4) */
/* winner: #nav .item a  →  (1,1,1) */

Necə istifadə etmək olar

  1. Hər sətirə bir seçici yazın (10 sətirə qədər) və ya hazır nümunə seçin.
  2. Rəngli təhlilə baxın: qırmızı hissələr a (ID), mavi hissələr b (sinif, atribut, pseudo-sinif), yaşıl hissələr c (teq, pseudo-element) deməkdir.
  3. (a,b,c) nişanlarını müqayisə edin: əvvəl a, bərabərlik olduqda b, sonra c baxılır. Reytinqdə birinci olan seçici qalib gəlir.
  4. Tam bərabərlik olarsa, CSS-də sonra yazılan qayda qalib gəlir. !important, inline stillər və @layer ayrıca nəzərə alınır.

Bu necə işləyir

Üç ədəd: (a,b,c)

Specificity üç sütundan ibarətdir. a — ID seçicilərinin (#id) sayı, b — sinif (.class), atribut ([type]) və pseudo-sinif (:hover) sayı, c — teq seçicilərinin (div) və pseudo-elementlərin (::before) sayıdır. Müqayisə soldan sağa aparılır: bir ID istənilən sayda sinifdən güclüdür, on bir teq isə bir sinfi heç vaxt üstələmir — sütunlar bir-birinə keçmir.

#nav .item a        →  (1,1,1)
.nav .item a:hover  →  (0,3,1)
nav ul li a         →  (0,0,4)

Nə sayılır, nə yox

Universal seçici *, kombinatorlar (boşluq, >, +, ~) və :where() ağırlığa 0 əlavə edir. [id="x"] kimi atribut seçicisi ID yox, atributdur, ona görə b sütununa düşür. Tək iki nöqtə ilə yazılan köhnə :before, :after, :first-line və :first-letter pseudo-element sayılır və c-yə əlavə olunur.

:is(), :not(), :has() və :where()

:is(), :not() və :has() özləri heç nə əlavə etmir, lakin siyahıdakı ən güclü arqumentin ağırlığını götürür: :is(#a, .b) — (1,0,0)-dır. :where() isə həmişə sıfırdır, buna görə də asanlıqla üstələnməli olan reset və baza stilləri üçün əlverişlidir. :nth-child(2n+1 of .x) pseudo-sinif (b) üstəgəl .x seçicisinin ağırlığıdır.

Specificity bütün kaskad deyil

Kaskad əvvəlcə stilin mənşəyinə və !important-a, sonra elementə bağlı (inline) stillərə, daha sonra @layer qatlarına baxır və yalnız bundan sonra specificity-ni müqayisə edir; sonda yazılış sırası həll edir. Buna görə style="..." və !important seçicinin ağırlığından asılı olmayaraq adi qaydanı üstələyir, sonrakı qatdakı qayda isə əvvəlki qatdakı daha güclü seçicini üstələyir. !important üçün qatların sırası tərsinə çevrilir.

@layer base, components;
@layer base { #page p { color: red; } }
@layer components { p { color: blue; } }
/* components qalib gəlir: qat sonradır */

Tez-tez verilən suallar

Niyə qaydam CSS-də sonra yazılsa da tətbiq olunmur?

Yazılış sırası yalnız specificity bərabər olduqda həll edir. Çox güman ki, başqa qaydanın seçicisi daha güclüdür. Hər iki seçicini kalkulyatora yazıb müqayisə edin, sonra !important, inline stilləri və @layer-i yoxlayın.

!important specificity-ni dəyişirmi?

Xeyr. !important kaskadın ayrıca mərhələsidir: vacib bəyannamə adi bəyannamədən güclüdür, bir neçə vacib bəyannamə arasında isə yenə specificity və sıra həll edir. !important yazmaqdansa seçicini sadələşdirmək və ya stilləri @layer-ə çıxarmaq daha yaxşıdır.

Çoxlu sinif bir ID-ni üstələyə bilərmi?

Xeyr. a sütunu b-dən əvvəl müqayisə olunur, ona görə yüz sinif belə bir ID-ni keçmir: (1,0,0) istənilən (0,N,M)-dən güclüdür. Amma (0,2,0) (0,1,5)-i üstələyir.

Miras alınan dəyər müqayisədə iştirak edirmi?

Xeyr. Elementə birbaşa düşən istənilən qayda — hətta * seçicisi və sıfır specificity ilə belə — valideyndən miras alınan dəyəri üstələyir.

HTML və CSS kursunda bu mövzu

Digər CSS alətləri

CSS gradient generatoru Linear, radial və conic gradient: rəngləri, bucağı və nöqtələri seçin, hazır kodu kopyalayın. Flexbox generatoru və playground Konteyner və elementlərin flex xassələrini sınayın: istiqamət, düzləmə, boşluq və hazır CSS. CSS Grid generatoru Sütun və sətir ölçülərini seçin, boşluğu və düzləməni tənzimləyin, hazır grid kodunu kopyalayın. CSS box-shadow generatoru Kölgənin yerini, bulanıqlığını, rəngini və laylarını seçin, hazır box-shadow kodunu kopyalayın. Cubic-bezier generatoru Easing əyrisinin nöqtələrini sürüşdürün və hazır CSS transition kodunu kopyalayın. SVG animasiya generatoru Forma və effekt seçin — səhifəyə yapışdırmaq üçün hazır SVG və CSS keyframes alın. CSS box model vizualizatoru Content, padding, border və margin-i DevTools tipli sxemdə görün və hazır CSS kodunu alın. CSS transform generatoru Elementi sürüşdürün, fırladın, böyüdün və əyin: ilkin mövqe önizləmədə görünür, kod hazırdır. CSS clamp() kalkulyatoru Min və maks şrift ölçüsünü və ekran enini yazın — axıcı tipoqrafika üçün hazır clamp() alın. Rəng kontrastı yoxlayıcısı (WCAG) Mətn və fon rənginin kontrastını WCAG AA və AAA üzrə yoxlayın, uyğun gəlməyən cütü düzəldin. CSS clip-path generatoru Poliqon, dairə, ellips və kəsilmiş künclər: nöqtələri sürüşdürün və hazır CSS kodunu kopyalayın. CSS Glassmorphism generatoru Mat şüşə effekti: backdrop-filter blur, şəffaflıq, kənar işığı və hazır CSS kodu. CSS border-radius (Blob) generatoru Üzvi formalar və 8 dəyərli border-radius: radiusları sürüşdürün, canlı blob animasiyasını yoxlayın. CSS Stacking Context və z-index vizualizatoru z-index: 9999 niyə işləmir? 3D laylar görünüşü ilə CSS Stacking Context mexanizmini və səbəblərini vizual öyrənin. CSS aspect-ratio və object-fit generatoru Şəkillərin deformasiyasına və CLS sıçrayışlarına son: aspect-ratio proporsiyaları və object-fit fokus nöqtəsi canlı. CSS Filtr Studiyası və generatoru Qrafik redaktorsuz foto effektləri: blur, contrast, hue-rotate, sepia və Instagram üslublu hazır presətlər. OKLCH rəng generatoru və palitrası Göz üçün bərabər parlaqlıq və Display P3 canlı rənglər: OKLCH konvertasiyası, qradasiya və harmonik palitralar. CSS Scroll-driven Animations generatoru JavaScript olmadan skroll animasiyaları: animation-timeline scroll() və view() ilə oxuma lenti və kartların açılması. CSS Container Queries (@container) generatoru Media sorğularına son: komponent ekran ölçüsünə deyil, öz konteynerinin eninə uyğunlaşır. Canlı ölçü dəyişmə və @container qaydaları.
WhatsApp