Ce billet fait partie dâune sĂ©rie dâune dizaine billets : #atelier-web.
Voici un complĂ©ment pour le billet đŸ Atelier-Web â„ : Jouons avec un peu plus de CSS
Le but de ce billet est de prĂ©ciser le formalisme CSS, sans pour autant ĂȘtre exhaustif, on cherche principalement Ă introduire la notion de sĂ©lecteur CSS.
Forme gĂ©nĂ©rale dâune rĂšgle CSS
Une rÚgle CSS à la forme suivante :
SELECTEUR {
PROPRIETE: VALEUR;
PROPRIETE: VALEUR;
...
}
Le SELECTEUR permet de « choisir » les éléments HTML qui seront concerné par la rÚgle.
La liste (PROPRIETE, VALEUR) définissant les rÚgles proprement dites.
Le résultat sera que chacun des éléments sélectionnés se verra appliqué les valeurs des propriétés CSS définies.
Notion de sélecteur HTML/CSS
Je vous propose une version simplifiĂ©e du code HTML et dans le quelque on utilise lâattribut id
au lieu de class
pour lâune des balises.
<!DOCTYPE html>
<html lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>atelier-web-06 â CSS ComplĂ©ments</title>
<style>
/* ICI le code CSS */
</style>
</head>
<body>
<div id="essai"><!-- Attention, ID au lieu de CLASS -->
<div class="ligne"><span class="blanc">.</span><span class="blanc">.</span></div>
<div class="ligne"><span class="gris" >G</span><span class="blanc">.</span></div>
<div class="ligne"><span class="rouge">R</span><span class="blanc">.</span></div>
</div>
</body>
</html>
Vous noterez quâil est possible de voir la structure du code comme un « chemin » :
Cette vue de la page HTML permet de décrire un « chemin » pour chaque élément du code HTML.
Un élément HTML est également identifiable par le nom de sa balise, par le nom de ces classes (class="class1 class2 class3"
) et par son identificateur (id="identificateur
). Notez que dans ce dernier cas, lâidentificateur Ă©tant unique (et devant lâĂȘtre), il nây a pas dâambiguĂŻtĂ©.
Un Ă©lĂ©ment HTML peut ĂȘtre retrouvĂ© Ă lâaide dâune ou plusieurs de ces caractĂ©ristiques, mais Ă©galement Ă lâaide de tout ou partie de son chemin.
Supposons que lâon recherche toutes les cases de notre dessin, cela correspond Ă lâĂ©lĂ©ment âșspan
â». Si on rĂ©cupĂšre tous les Ă©lĂ©ments âșspan
â» en premiĂšre approche cela est correct, mais cela interdit de rĂ©utiliser un âșspan
â» ailleurs dans la page.
Pour retrouver nos cases, on peut utiliser le fait que lâĂ©lĂ©ment âșspan
â» de notre dessin se trouve Ă lâintĂ©rieur dâun âșdiv
⻠de classe « ligne ».
Voir mĂȘme, ĂȘtre encore plus prĂ©cis en indiquant que tout cela se trouve dans un âșdiv
⻠de classe « essais ».
Construction dâun sĂ©lecteur CSS
Le nom de base dâun sĂ©lecteur est construit Ă partir :
- du nom de la balise
balise { ⊠}
, lorsque lâon souhaite appliquer la rĂšgle Ă toutes les balises de la page, - dâun point suivi du nom de classe,
.nom_balise { ⊠}
, la rĂšgle sera appliquĂ©e Ă toutes les Ă©lĂ©ments dĂ©finissant au moins cette classe. - dâun diĂšse suivi dâun identificateur,
#identificateur { ⊠}
, la rĂšgle sera appliquĂ©e Ă lâunique Ă©lĂ©ment ayant cet identificateur.
Il est possible dâavoir des sĂ©lecteurs composĂ©s :
SĂ©lecteur CSS | Signification |
---|---|
* | Sélectionne tous les éléments |
E, F | Sélectionne tous les éléments de type E et de type F |
E F | SĂ©lectionne tous les Ă©lĂ©ments F Ă lâintĂ©rieur des Ă©lĂ©ments E |
E > F | Sélectionne les éléments F enfants directs des éléments E |
E + F | Sélectionne tout élément F placé directement aprÚs un élément E |
E~F | Sélectionne tout élément F placé aprÚs un élément E dans la page |
Par exemple, si on considĂšre les balises âșp
â» et âșa
â», et les syntaxes :
SĂ©lecteur CSS | RĂ©sultat |
---|---|
p a { /* âŠÂ */ } | SĂ©lectionne tous les Ă©lĂ©ments âșa â» dans les Ă©lĂ©ments âșp â» (comprend « dans » au sens de « à lâintĂ©rieur de »). |
p > a { /* âŠÂ */ } | SĂ©lectionne que les Ă©lĂ©ments âșa â» enfants directs de âșp â» (un « enfant » direct Ă©tant un Ă©lĂ©ment Ă lâintĂ©rieur de lâĂ©lĂ©ment « parent » sans Ă©lĂ©ment intermĂ©diaire. |
Ceci est bien évidement généralisable pour des classes (#myclass
) ou des identificateurs (#myid
).
Quelques exemples
Voici quelques exemples sâappuyant sur le code HTML donnĂ© plus haut. Je vous invite Ă tester ces diffĂ©rentes solutions.
Tous les Ă©lĂ©ments âșspan
â»
span {
border-width: 1px;
border-style: solid;
border-color: black;
}
đ VĂ©rifiez quâil y a un bord noir, sur tous les Ă©lĂ©ments de type âșspan
⻠présent dans la page.
Tous les Ă©lĂ©ments âșspan
⻠présent dans les « lignes » :
On a deux solutions, qui permettent de sélectionner cela.
Voici la plus précise :
div.ligne span {
border-width: 1px;
border-style: solid;
border-color: red;
}
đ VĂ©rifiez que cela applique un bord sous forme de ligne rouge.
La seconde est cependant suffisante :
.ligne span {
border-width: 1px;
border-style: dotted;
border-color: red;
}
đ VĂ©rifiez que cela applique un bord en pointillĂ© rouge.
Tous les Ă©lĂ©ments âșspan
⻠présent dans les « lignes » présentes dans « essai » :
div#essai div.ligne span {
color: #edd400; /* Jaune */
}
đ VĂ©rifiez la couleur du texte.
div#essai .ligne span {
color: #53a8ca; /* Bleu */
}
đ VĂ©rifiez la couleur du texte.
div#essai div.ligne span {
color: #dd0b0b; /* Rouge */
}
đ VĂ©rifiez la couleur du texte.
#essai .ligne span {
color: #8ae234; /* Vert */
}
đ VĂ©rifiez la couleur du texte.
Explication des solutions proposées
Le code CSS a Ă©tĂ© adaptĂ© pour le code HTML proposĂ© en dĂ©but de ce billet. Le changement est quâau lieu dâutiliser la classe « essais », le code HTML dĂ©fini un ID « essai ».
PremiĂšre version du code CSSÂ :
#essai { font-family: monospace; }
.blanc {
background-color: white;
width: 20px;
height: 20px;
display: inline-block;
}
.gris {
background-color: grey;
width: 20px;
height: 20px;
display: inline-block;
}
.rouge {
background-color: red;
width: 20px;
height: 20px;
display: inline-block;
}
Seconde version du code CSS, plus courte et utilise la sĂ©lection des Ă©lĂ©ments sur lequel doit sâappliquer une rĂšgle basĂ©e sur le « chemin ». Ici on sĂ©lectionne tous les Ă©lĂ©ments span
Ă©tant immĂ©diatement Ă lâintĂ©rieur dâun Ă©lĂ©ment de classe ligne : cela se note '.ligne span'.
On note que lâavantage de cette solution est que la taille du carrĂ© nâest dĂ©fini quâune seule fois, rendant, par exemple, plus simple la modification de ces valeurs.
Il s'agit simplement d'une mise en facteur.
#essai { font-family: monospace; }
.ligne span {
width: 20px;
height: 20px;
display: inline-block;
}
.blanc { background-color: white; }
.gris { background-color: grey; }
.rouge { background-color: red; }
Références
- HTML Styles â CSS
- SĂ©lectionner un Ă©lĂ©ment selon quâil possĂšde un attribut
- Les pseudo-éléments CSS
- SĂ©lecteurs CSS simples et combinateurs
Lâatelier complet
- Liste des billets de l'atelier Web,
- Le billet lié.
኿