CSS-specifikusság


Tartalomjegyzék

    Tartalomjegyzék megjelenítése


Mi a Specificitás?

Ha két vagy több CSS-szabály van, amely ugyanarra mutat elemet, akkor a legmagasabb specifitás értékű szelektor "nyer", és annak stílusdeklarációt alkalmazunk az adott HTML-elemre.

Tekintsd a specifikusságot úgy, mint egy pontszámot/rangsort, amely meghatározza, hogy melyik stílus deklarációja végül egy elemre vonatkozik.

Tekintse meg a következő példákat:

1. példa

Ebben a példában a "p" elemet használtuk választóként, és piros színt adtunk meg ehhez az elemhez. A szöveg piros lesz:

 <html>
<head>
  <style>
    p {color: red;} 
  
  </style>
</head>
<body>
<p>Hello World!</p>
  
</body>
  </html>

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<head>
<style>
p {color: red;} 
</style>
</head>
<body>

<p>Hello World!</p>

</body>
</html>


Most nézze meg a 2. példát:

2. példa

Ebben a példában hozzáadtunk egy osztályválasztót ("teszt" néven), és zöldet adott meg szín ehhez az osztályhoz. A szöveg most zöld lesz (annak ellenére, hogy megadtuk egy piros színe az elemválasztóhoz "p"). Ez azért van, mert az osztályválasztó adott magasabb prioritású:

 <html>
<head>
  <style>
    .test {color: green;}
  
    p {color: red;} 
  </style>
</head>
<body>
  
<p class="test">Hello World!</p>
</body>
</html>

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<head>
<style>
.test {color: green;} 
p {color: red;} 
</style>
</head>
<body>

<p class="test">Hello World!</p>

</body>
</html>


Most nézze meg a 3. példát:

3. példa

Ebben a példában hozzáadtuk az azonosító választót ("demo" néven). A szöveg most az lesz kék, mert az azonosító választó magasabb prioritást kap:

 <html>
<head>
  <style>
    #demo {color: blue;}
    
  .test {color: green;} 
    p {color: red;} 
  
  </style>
</head>
<body>
<p id="demo" class="test">Hello 
  World!</p>
</body>
</html>

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<head>
<style>
#demo {color: blue;}
.test {color: green;} 
p {color: red;} 
</style>
</head>
<body>

<p id="demo" class="test">Hello World!</p>

</body>
</html>


Most nézzük meg a 4. példát:

4. példa

Ebben a példában egy soron belüli stílust adtunk hozzá a "p" elemhez. A A szöveg most rózsaszín lesz, mert a szövegközi stílus kap a legnagyobb prioritást:

 <html>
<head>
  <style>
    #demo {color: blue;}
    
  .test {color: green;} 
    p {color: red;} 
  
  </style>
</head>
<body>
<p id="demo" class="test" 
  style="color: pink;">Hello World!</p>
</body>
</html>

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<head>
<style>
#demo {color: blue;}
.test {color: green;} 
p {color: red;} 
</style>
</head>
<body>

<p id="demo" class="test" style="color: pink;">Hello World!</p>

</body>
</html>



Specificitási hierarchia

Minden CSS-választónak megvan a maga helye a specifikussági hierarchiában.

Négy kategória határozza meg a szelektor specifikussági szintjét:

1. Beépített stílusok - Példa:

<h1 style="color: pink;">

2. azonosítók - Példa:

#navbar

3. Osztályok, pszeudoosztályok, attribútumválasztók - Példa:

.test, :hover, [href]

4. Elemek és pszeudoelemek - Példa:

h1, ::before

Hogyan számítsuk ki a fajlagosságot?

Jegyezze meg, hogyan kell kiszámítani a fajlagosságot!

Kezdje 0-val, adjon hozzá 100-at minden azonosító értékhez, és adjon hozzá 10-et mindegyikhez osztályérték (vagy pszeudoosztály vagy attribútumválasztó), adjunk hozzá 1-et minden elemválasztóhoz vagy pszeudoelemhez.

Megjegyzés: A soron belüli stílus 1000-es specifikációs értéket kap, és így van mindig a legmagasabb prioritást kapjuk!

2. megjegyzés: Van egy kivétel ez alól a szabály alól: ha a !important kódot használja szabály, még a beépített stílusokat is felülírja!

Az alábbi táblázat néhány példát mutat be a specifitásértékek kiszámítására:

Selector Specificity Value Calculation
p 1 1
p.test 11 1 + 10
p#demo 101 1 + 100
<p style="color: pink;"> 1000 1000
#demo 100 100
.test 10 10
p.test1.test2 21 1 + 10 + 10
#navbar p#demo 201 100 + 1 + 100
* 0 0 (the universal selector is ignored)

A legmagasabb specifitási értékkel rendelkező választó nyer és lép életbe!

Tekintsük ezt a három kódrészletet:

Példa

A: h1
B: h1#content
C: <h1 id="content" style="color: 
  pink;">Heading</h1>

A specificitása 1 (egy elem választó)
B specificitása az 101 (egy azonosító hivatkozás + egy elem választó)
A C specifikációja 1000 (beépített stílus)

Mivel a harmadik szabály (C) rendelkezik a legmagasabb specificitási értékkel (1000), ez a stílus nyilatkozat kerül alkalmazásra.



További specifikussági szabályok példák

Egyenlő konkrétság: a legújabb szabály nyer - Ha ugyanaz a szabály kétszer van beírva a külső stíluslapba, akkor a legújabb szabály nyer:

Példa

h1 {background-color: yellow;}
h1 {background-color: red;}

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<head>
<style>
h1 {background-color: yellow;}
h1 {background-color: red;}
</style>
</head>
<body>

<h1>This is heading 1</h1>

</body>
</html>



Az azonosítóválasztók pontosabbak, mint az attribútumválasztók - Nézze meg a következő három kódsort:

Példa

div#a {background-color: green;}
#a {background-color: yellow;}
div[id=a] {background-color: blue;}

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<head>
<style>
div#a {background-color: green;}
#a {background-color: yellow;}
div[id=a] {background-color: blue;}
</style>
</head>
<body>

<div id="a">This is a div</div>

</body>
</html>


az első szabály konkrétabb, mint a másik kettő, ezért alkalmazni kell.


A kontextus választói specifikusabbak, mint egyetlen elem választó - A beágyazott stíluslap közelebb van a stílusozandó elemhez. Tehát a következő helyzetet

Példa

From external CSS file:
#content h1 {background-color: red;}

In HTML file:
<style>
#content h1 {background-color: 
yellow;}
</style>

az utóbbi szabályt kell alkalmazni.


Az osztályválasztó tetszőleges számú elemválasztót legyőz - az osztályválasztó, például az .intro, legyőzi a h1, p, div stb.

Példa

 .intro {background-color: yellow;}
h1 {background-color: 
  red;}

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<head>
<style>
.intro {background-color: yellow;}
h1 {background-color: red;}
</style>
</head>
<body>

<h1 class="intro">This is a heading</h1>

</body>
</html>



Az univerzális választó (*) és az örökölt értékek specifitása 0 - Az univerzális választó (*) és az öröklött értékek figyelmen kívül maradnak!