Deel 9: The cascade

Web Design

Overerving / inheritance

The cascade

Overerving / inheritance

<div class="my-parent">
  <div class="my-child"></div>
</div>
.my-parent {
  color: red;
}

/* Dit element zal de kleur overerven */
.my-child {
  color: inherit;
} 

Dit doen browsers automatisch!

Overerving / inheritance

<div class="my-parent">
  <div class="my-child"></div>
</div>
.my-parent {
  color: red;
}

/* Dit element zal de kleur overerven */
.my-child {} 
<ul style="color: red;">
  <li>ja</li>
  <li>
    <ul>
      <li>ja</li>
      <li>ja</li>
    </ul>
  </li>
  <li>ja</li>
  <li>
    <ul>
      <li>ja</li>
      <li>ja</li>
      <li>
      	<ul>
          <li>ja</li>
          <li>ja</li>
          <li>ja</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

ja

 

 

ja

ja

 

 

ja

 

 

ja

ja

 

 

ja

ja

ja

<ul style="color: red;">
  <li>ja</li>
  <li>
    <ul style="color: blue;">
      <li>ja</li>
      <li>ja</li>
    </ul>
  </li>
  <li>ja</li>
  <li>
    <ul>
      <li>ja</li>
      <li>ja</li>
      <li>
      	<ul>
          <li>ja</li>
          <li>ja</li>
          <li>ja</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

ja

 

 

ja

ja

 

 

ja

 

 

ja

ja

 

 

ja

ja

ja

<ul style="color: red;">
  <li>ja</li>
  <li>
    <ul style="color: blue;">
      <li>ja</li>
      <li>ja</li>
    </ul>
  </li>
  <li>ja</li>
  <li>
    <ul>
      <li>ja</li>
      <li>ja</li>
      <li>
      	<ul style="color: black;">
          <li>ja</li>
          <li>ja</li>
          <li>ja</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

ja

 

 

ja

ja

 

 

ja

 

 

ja

ja

 

 

ja

ja

ja

<ul style="color: pink;">
  <li>ja</li>
  <li>
    <ul style="color: blue;">
      <li>ja</li>
      <li>ja</li>
    </ul>
  </li>
  <li>ja</li>
  <li>
    <ul>
      <li>ja</li>
      <li>ja</li>
      <li>
      	<ul style="color: black;">
          <li>ja</li>
          <li>ja</li>
          <li>ja</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

ja

 

 

ja

ja

 

 

ja

 

 

ja

ja

 

 

ja

ja

ja

<ul style="color: pink;">
  <li>ja</li>
  <li>
    <ul style="color: blue;">
      <li style="color: red;">ja</li>
      <li>ja</li>
    </ul>
  </li>
  <li>ja</li>
  <li>
    <ul>
      <li>ja</li>
      <li>ja</li>
      <li>
      	<ul style="color: black;">
          <li>ja</li>
          <li>ja</li>
          <li>ja</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

ja

 

 

ja

ja

 

 

ja

 

 

ja

ja

 

 

ja

ja

ja

Overerving / inheritance

body {
  color: red;
}

div {
  color: red;
}

p {
  color: red;
}

span {
  color: red;
}

👎

body {
  color: red;
}

👍

Overerving / inheritence

Deze properties doen aan overerving

color, font-family, font-size, font-style, font-variant, font-weight, font, letter-spacing, line-height, text-shadow, word break

Overerving / inheritence

Deze properties doen NIET aan overerving:

Al de andere properties

Bijvoorbeeld als je een border toevoegt op <body>, dan zal niet ieder element binnen de body een border krijgen.

Volgorde van properties

The cascade

Volgorde van properties

Indien 2 CSS declaraties dezelfde property aanpassen, dan wint de laatst gedefinieerde.

p {
  color: red;
  color: blue;
  color: green;
}

De paragraaf zal groen zijn

Volgorde van properties

p {
  color: red;
  color: blue;
  color: green;
}

...

p {
  color: blue;
  color: orange;
}

De paragraaf zal oranje zijn

Volgorde van properties

p {
  color: red;
}

De paragraaf zal groen zijn

style-first.css

p {
  color: green;
}

style-second.css

<!DOCTYPE html>
<html lang="en">
    <head>
        ...
        <link rel="stylesheet" href="css/style-first.css">
        <link rel="stylesheet" href="css/style-second.css">
    </head>
...
<div class="my-parent">
  <p class="my-child"></p>
</div>
.my-parent {
  color: red;
}

.my-child {} 

Welke kleur heeft de paragraaf?

<div class="my-parent">
  <p class="my-child"></p>
</div>
.my-parent {
  color: red;
}

.my-child {
  color: blue;
} 

Welke kleur heeft de paragraaf?

Welke kleur heeft de paragraaf?

<div class="my-parent">
  <p class="my-child"></p>
</div>
.my-parent {
  color: red;
}

.my-child {
  color: blue;
  color: purple;
} 

Welke kleur heeft de paragraaf?

<div class="my-parent">
  <p class="my-child"></p>
</div>
.my-child {
  color: blue;
  color: purple;
} 

.my-parent {
  color: red;
}
<div class="my-parent">
  <p class="my-child"></p>
</div>
.my-child {
  color: blue;
  color: purple;
}

Volgorde

overerving

Volgorde van properties

Specificiteit

The cascade

Specificiteit

De soort selector die gebruikt wordt binnen CSS, bepaald mee het gewicht van de properties.

Specificiteit

De soorten selectors:

  • Universele selector  
  • Type selectors
  • Class selectors
  • Attribute selectors
  • ID-selectors

0 - 0 - 0

0 - 0 - 1

0 - 1 - 0

0 - 1 - 0

1 - 0 - 0

Specificiteit

Specificiteit

Universele selector

0 - 0 - 0

* {
  color: blue;
}

Specificiteit

Type selector

0 - 0 - 1

p {
  color: blue;
}

Specificiteit

Class selector

0 - 1 - 0

.my-text {
  color: blue;
}

Attribute selector

0 - 1 - 0

a[target="_blank"] {
  color: blue;
}

Specificiteit

ID selector

1 - 0 - 0

#my-text {
  color: blue;
}

Specificiteit

De selector die gebruikt wordt binnen CSS bepaald mee het gewicht van de properties.

<div class="my-div">
  <p class="my-text">tekst</p>
</div>
* {
  color: blue;
}

p {
  color: green;
}

0 - 0 - 0

0 - 0 - 1

Specificiteit

De selector die gebruikt wordt binnen CSS bepaald mee het gewicht van de properties.

<div class="my-div">
  <p class="my-text">tekst</p>
</div>
* {
  color: blue;
}

p {
  color: green;
}

.my-text {
  color: red;
}

0 - 0 - 0

0 - 0 - 1

0 - 1 - 0

Specificiteit

<div class="my-div">
  <p class="my-text">tekst</p>
</div>
.my-text {
  color: red;
}

p.my-text {
  color: blue;
}

.my-div .mytext {
  color: green;
}

0 - 1 - 0

0 - 1 - 1

0 - 2 - 0

Specificiteit

<div class="my-div" id="my-div">
  <p class="my-text" id="my-text">tekst</p>
</div>
.my-div .my-text {
  color: green;
}

div.my-div p.my-text {
  color: blue;
}

#my-text {
  color: red;
}

0 - 2 - 0

0 - 2 - 2

1 - 0 - 0

Wat is de specificiteit?

* {
  color: green;
}

p#my-text {
  color: blue;
}

p#my-text.my-text {
  color: red;
}

0 - 0 - 0

1 - 0 - 1

1 - 1 - 1

Wat is de specificiteit?

#my-id .my-class #another-id {
  color: green;
}

body ul li a#my-id {
  color: blue;
}

h1, h2 {
  color: red;
}

2 - 1 - 0

1 - 0 - 4

0 - 0 - 1

Wat weegt het meest?

The cascade

Wat weegt het meest

Specificity > volgorde > overerving

Eerst kijkt een browser naar de specificity

Als de specificity hetzelfde is, wordt gekeken naar de volgorde.

Als de volgorde niet te bepalen valt (geen properties), dan wordt gekeken naar overerving. 

 

<section> 
  <div class="my-div" id="my-div">
    <p class="my-text" id="my-text">tekst</p>
  </div>
<section>
div {
  color: red
}

Welke kleur heeft p?

Wat weegt het meest

<section> 
  <div class="my-div" id="my-div">
    <p class="my-text" id="my-text">tekst</p>
  </div>
<section>
div {
  border: 1px solid blue;
}

Heeft p een border?

Wat weegt het meest

<section> 
  <div class="my-div" id="my-div">
    <p class="my-text" id="my-text">tekst</p>
  </div>
<section>
p {
  color: blue;
}

div {
  color: red;
}


Welke kleur heeft p?

Wat weegt het meest

<section> 
  <div class="my-div" id="my-div">
    <p class="my-text" id="my-text">tekst</p>
  </div>
<section>
p {
  color: blue;
}

div.my-div {
  color: red;
}


Welke kleur heeft p?

Wat weegt het meest

<section> 
  <div class="my-div" id="my-div">
    <p class="my-text" id="my-text">tekst</p>
  </div>
<section>
p {
  color: blue;
}

div#my-div {
  color: red;
}


Welke kleur heeft p?

Wat weegt het meest

<section> 
  <div class="my-div" id="my-div">
    <p class="my-text" id="my-text">tekst</p>
  </div>
<section>
p {
  color: blue;
}

.my-text {
  color: red;
}


Welke kleur heeft p?

Wat weegt het meest

<section> 
  <div class="my-div" id="my-div">
    <p class="my-text" id="my-text">tekst</p>
  </div>
<section>
p.my-text {
  color: blue;
}

div .my-text {
  color: red;
}


Welke kleur heeft p?

Wat weegt het meest

<section> 
  <div class="my-div" id="my-div">
    <p class="my-text" id="my-text">tekst</p>
  </div>
<section>
p#my-text {
  color: blue;
}

div .my-text {
  color: red;
}


Welke kleur heeft p?

Wat weegt het meest

Simplifying complexity

The cascade

Simplifying complexity

Specificiteit kan complex zijn, zeker in combinatie met overerving om hier helder een overzicht in te houden in CSS.

 

Om dit een pak meer simpel te maken zijn hier enkele gebruikelijke good practices. 

Simplifying complexity

Gebruik enkel de volgende selectors in CSS:

  • Universele selector  
  • Type selectors
  • Class selectors
  • Attribute selectors

0 - 0 - 0

0 - 0 - 1

0 - 1 - 0

0 - 1 - 0

Simplifying complexity

Gebruik dus geen ID selectors in CSS. Want die kan je onmogelijk overschrijven met classes.

Simplifying complexity

Gebruik een logische volgorde van hoe je de selectors na elkaar schrijft in CSS:

div {...}

body {...}

* {...}

p {...}

html {...}
* {...}

html {...}

body {...}

div {...}

p {...}

👎

👍

Simplifying complexity

Zo hoef je niet langer een onderscheid te maken tussen overerving en volgorde!

* {...}

html {...}

body {...}

div {...}

p {...}

👍

De volgorde is nu hetzelfde

als de logische overerving

Simplifying complexity

Definieer eerst type selectors, en daarna de class en attribute selectors

a[target="_blank"] {...}

a {...}

section.my-class {...}

section {...}
a {...}

a[target="_blank"] {...}

section {...}

section.my-class {...}

👎

👍

Simplifying complexity

Definieer eerst type selectors, en daarna de class en attribute selectors

a[target="_blank"] {...}

section.my-class {...}

* {...}
html {...}
body {...}
div {...}
p {...}
a {...}
a[target="_blank"] {...}
* {...}
html {...}
body {...}
div {...}
p {...}
a {...}
a[target="_blank"] {...}

.my-class {...}

.my-other-class {...}

👎

👍

Simplifying complexity

Definieer eerst type selectors, en daarna de class en attribute selectors

* {...}
html {...}
body {...}
div {...}
p {...}
a {...}
a[target="_blank"] {...}

.my-class {...}

.my-other-class {...}

👍

De volgorde is nu hetzelfde

als de specificiteit.

Web Design Deel 9: The Cascade

By Evelien Rutsaert

Web Design Deel 9: The Cascade

Element overerving, volgorde van declaraties, selector specificiteit.

  • 235