Les feuilles de style en cascade (CSS) vous permettent de transformer l'apparence de vos pages Web. Des polices et des couleurs à l'espacement et à la mise en page générale, toutes sortes d'outils de conception sont à portée de main. Bien que CSS soit un langage compliqué dans son intégralité, il n'y a que deux concepts de base que vous devez comprendre pour commencer.
Tout commence par l'identification exacte de la partie d'une page que vous souhaitez styliser.
Un fichier CSS contient une série de règles décrivant comment un fichier HTML doit être formaté. Chaque règle se compose de deux parties :quoi styliser et comment le styliser. La première partie est contrôlée à l'aide d'une série de termes appelés "sélecteurs".
Les exemples de cet article incluent des déclarations de style, mais ils ne sont pas au centre de l'attention :les sélecteurs eux-mêmes le sont.
Historiquement, il y avait trois niveaux de sélecteur CSS (ou versions) avec différents degrés de prise en charge du navigateur. En 2020, selon Can I Use, ils sont tous disponibles pour plus de 99 % des utilisateurs dans le monde.
Le niveau 1 a introduit les quatre types fondamentaux de sélecteurs qui couvrent un grand nombre de cas, même aujourd'hui.
E
tous les éléments E .c
tous les éléments avec class="c"#myid
l'élément avec id="myid"E F
un élément F à l'intérieur d'un élément EPseudo-classes E:lien
un lien hypertexte vers une page qui n'a pas encore été visitéeE:visited
un lien hypertexte vers une page déjà visitéeE:active
un lien hypertexte actuellement sélectionnéPseudo-éléments E::first-line
la première ligne formatée d'un élément EE::first-letter
la première lettre formatée d'un élément E Le sélecteur le plus simple est le "sélecteur de type". Il cible toutes les instances d'un élément, comme un paragraphe ou du texte en gras :
p { margin-bottom :0 ; }
b { font-family:sans-serif; }
L'attribut class permet d'ajouter une sémantique supplémentaire à un élément HTML, tel qu'un type de paragraphe spécifique. Ces éléments peuvent être sélectionnés dans CSS comme suit :
.intro { font-weight :gras ; }
Ce sélecteur correspondrait :
…
Mais notez que cela correspondrait également :
…
Si vous souhaitez qu'il ne s'applique qu'aux paragraphes d'introduction, vous pouvez combiner le sélecteur de type et le sélecteur de classe :
p.intro { font-weight :gras ; }
L'attribut HTML id doit être unique dans un document, par ex. si vous avez :
…
Cela devrait être le seul élément avec un identifiant "contenu". Un sélecteur d'ID vous permet de cibler cet élément spécifique dans un document :
#contents { color :#333 ; }
Strictement, un "combinateur", car ce sélecteur concerne l'espace entre deux autres. HTML est hiérarchique, comme expliqué dans notre aperçu du DOM. Un sélecteur descendant permet d'identifier un élément par son contexte à l'intérieur d'un autre élément :
table b { font-weight :normal ; }
Les pseudo sélecteurs ciblent des classes ou des éléments qui n'existent pas explicitement mais qui sont quand même disponibles. Considérez-les comme des bonus de contenu spéciaux :
p::first-line { text-transform :majuscule ; }
Utilisez une virgule pour combiner les sélecteurs dans une liste si vous souhaitez appliquer le même ensemble de règles à chacun. Au lieu de :
th { padding :1em ; }
td { rembourrage :1em ; }
Vous pouvez écrire :
th, td { padding :1em ; }
Une feuille de style est une série de règles qui utilisent un sélecteur pour faire correspondre un élément, mais que se passe-t-il lorsque plusieurs règles correspondent à un élément donné ? Le comportement résultant est régi par la "spécificité" qui définit quelle règle est utilisée dans un cas tel que :
p.intro { couleur :noir ; }
p { couleur :gris; }
Dans ce cas, la règle prioritaire est définie par sa spécificité, comme suit :
Lors du calcul de la spécificité, chaque niveau n'est pris en compte que si deux sélecteurs ont le même score au niveau supérieur, donc "#contents" est plus spécifique que "article.news p.author.special" car le premier "gagne" sur les sélecteurs d'ID.
La prochaine révision des sélecteurs CSS a introduit des sélecteurs d'attributs, développé des pseudo-classes et des pseudo-éléments, et ajouté deux nouveaux combinateurs.
*
n'importe quel élémentE> F
un élément F enfant d'un élément EE + F
un élément F immédiatement précédé d'un élément ESélecteur d'attributs E[foo]
un élément E avec un attribut "foo"E[foo="bar"]
un élément E dont l'attribut "foo" est exactement "bar"E[foo~="bar"]
un élément E dont l'attribut "foo" est une liste de valeurs séparées par des espaces, dont l'une est "bar"E[foo|="en"]
un élément E dont l'attribut "foo" a une liste de valeurs séparées par des tirets commençant par "en"Pseudo-classes E:premier-enfant
un élément E, premier enfant de son parentE:lang(fr)
un élément de type E en langage "fr"Pseudo-éléments E::before
contenu généré avant le contenu d'un élément EE::after
contenu généré après le contenu d'un élément E Le "*" correspond à n'importe quel élément. Ce n'est pas souvent très utile, mais si vous souhaitez réinitialiser des marges par défaut, par exemple, vous pouvez le faire :
* { marge :0 ; }
Les sélecteurs d'attributs permettent de cibler très précisément les styles, filtrés par l'attribut d'un élément :
a[title] { text-decoration :underline pointed ; }
Semblable au combinateur descendant, mais celui-ci ne correspond qu'aux enfants immédiats, pas aux descendants plus bas dans l'arbre. Par exemple, "ul> li" correspondra uniquement au texte "Section 1" ici, et non à "Section 1.1":
-
Section 1
- Section 1.1
- Section 1.2
-
h1 + p { font-weight :gras ; }
Souvent utile pour contrôler les marges, ou un paragraphe d'introduction sans classe spécifique, ce sélecteur correspond à un élément uniquement s'il en suit immédiatement un autre. Dans l'exemple, seul le premier paragraphe ici sera mis en correspondance, pas le second :
Contenu
un peu de texte supplémentaire
Paragraphe d'introduction
Paragraphe suivant
Notez que ce sélecteur ne prend en compte que les éléments, et non le texte, pour décider quel est le frère suivant.
Certaines propriétés CSS héritent leur valeur d'un élément ancêtre. En pratique, cela signifie, par exemple, que la définition de la police de l'élément "body" signifie que chaque paragraphe, tableau, etc. utilise également cette même police.
Bien sûr, c'est exactement ce à quoi vous vous attendez, mais considérez une propriété qui n'hérite pas :"marge", par exemple. Vous ne voudriez pas que chaque paragraphe individuel ou morceau de texte en gras ait la même marge que l'ensemble du document.
Une bonne règle empirique consiste à cibler les éléments de manière aussi générale que possible. Ne ciblez pas chaque élément individuellement lorsqu'un simple sélecteur de "corps" suffit.
De nombreuses autres pseudo-classes ont été ajoutées à ce niveau, ainsi que des sélecteurs d'attributs et un nouveau combinateur.
E ~ F
un élément F précédé d'un élément ESélecteur d'attributs E[foo^="bar"]
un élément E dont l'attribut "foo" commence par la chaîne "bar"E[foo$="bar"]
un élément E dont l'attribut "foo" se termine par la chaîne "bar"E[foo*="bar"]
un élément E dont l'attribut "foo" contient la sous-chaîne "bar"Pseudo-classes E:root
un élément E, racine du documentE:nth-child(n)
un élément E, le n-ième enfant de son parentE:nth-last-child(n)
un élément E, le n-ième enfant de son parent, à partir du dernierE:nth-of-type(n)
un élément E, le n-ième frère de son typeE:nth-last-of-type(n)
un élément E, le n-ième frère de son type, à partir du dernierE:last-child
un élément E, dernier enfant de son parentE:first-of-type
un élément E, premier frère de son typeE:last-of-type
un élément E, dernier frère de son typeE:only-child
un élément E, seul enfant de son parentE:only-of-type
un élément E, seul frère de son typeE:empty
un élément E qui n'a pas d'enfants (y compris les nœuds de texte)E:target
un élément E étant la cible de l'URI référentE:enabled
un élément d'interface utilisateur E qui est activéE:disabled
un élément d'interface utilisateur E qui est désactivéE:checked
un élément d'interface utilisateur E qui est cochéE:not(s)
un élément E qui ne correspond pas au sélecteur simple s
Vous pouvez sélectionner des éléments avec un attribut commençant par une valeur donnée :a[href^="https:"]
, se termine par une valeur donnée :img[src$=".gif"]
, ou contient une valeur :a[*="value"]
.
Les pseudo-classes supplémentaires incluent ":last-child", ":empty" (pour faire correspondre un élément sans contenu) et ":checked" qui correspond à un élément comme une entrée de case à cocher, mais uniquement lorsqu'il est coché.
Semblable au combinateur de frères et sœurs adjacents du niveau 2, cela correspond à n'importe quel frère qui vient après l'autre, pas seulement au suivant :
h1 ~ p { taille de police :110 % ; }
Vous savez maintenant à peu près tout ce qu'il y a à savoir sur la façon de sélectionner une partie d'une page Web à l'aide de CSS. Vous êtes maintenant prêt à styliser vos pages avec la grande variété de propriétés CSS qui couvrent tout, des couleurs à la mise en page.
Crédit image :Pankaj Patel/Unsplash