CSS (Cascading Style Sheets : feuilles de style en cascade) est un langage informatique qui sert à décrire la présentation des documents HTML et XML. Les standards définissant CSS sont publiés par le World Wide Web Consortium (W3C). Introduit au milieu des années 1990, CSS devient couramment utilisé dans la conception de sites web et bien pris en charge par les navigateurs web dans les années 2000.
L'un des objectifs majeurs de CSS est de permettre la mise en forme hors des documents. Il est par exemple possible de ne décrire que la structure d'un document en HTML, et de décrire toute la présentation dans une feuille de style CSS séparée. Les styles sont appliqués au dernier moment, dans le navigateur web des visiteurs qui consultent le document. Cette séparation fournit un certain nombre de bénéfices, permettant d'améliorer l'accessibilité, de changer plus facilement de présentation, et de réduire la complexité de l'architecture d'un document.
Ainsi, les avantages des feuilles de style sont multiples :
CSS permet de définir le rendu d'un document en fonction du média de restitution et de ses capacités (type de moniteur ou de dispositif vocal), de celles du navigateur (texte ou graphique), ainsi que des préférences de son utilisateur.
Les feuilles de styles peuvent être différenciées pour les médias suivants, selon CSS2.1 :
all
: quel que soit le médiascreen
: écrans d'ordinateur de bureauprint
: pour l'impression papierhandheld
: écrans de très petite taille et clients aux capacités limitéesprojection
: quand le document est projetétv
: quand le document est affiché sur un appareil de type télévisionspeech
: pour le rendu via une synthèse vocale (remplaçant aural
, initialement prévu par CSS2.0 puis déprécié par CSS2.1)D'autres types de media sont théoriquement prévus par la spécification CSS2.1, mais ne sont pas implémentés par les agents utilisateurs : braille
et embossed
pour les tablettes brailles et les embosseuses, ainsi que tty
pour les téléscripteurs.
Dans chaque média, les styles de présentation déterminés par l'auteur du document se combinent avec ceux par défaut de l'agent utilisateur et ceux issus des préférences de l'utilisateur et de sa configuration personnelle.
Les capacités du récepteur peuvent être prises en compte par les auteurs, à destination des agents utilisateurs implémentant le module CSS3 « media queries » : celui-ci permet de conditionner la prise en compte d'une feuille de style à des contraintes concernant notamment la résolution ou la capacité de restitution des couleurs.
La « cascade » est la combinaison de différentes sources de styles appliqués à un même document, selon leur degré respectif de priorité. Différents modes de cascade peuvent se combiner :
Le rendu d'un document stylé est déterminé par les concepts de boîte et de flux. Le moteur de rendu CSS établit une « structure de formatage » reflétant l'arbre logique du document. Chaque élément de cette structure génère une ou plusieurs zones dotées de propriétés d'affichage ou de rendu vocal paramétrables. L'affichage ou la lecture s'effectuent à partir du flux des boîtes successivement générées pour chaque élément tel qu'il apparaît dans l'ordre linéaire de la structure de formatage.
Selon les cas de figures, ces différents types de boîtes :
Les caractéristiques applicables aux boîtes CSS sont exprimées sous forme de couples propriété: valeur
.
Les propriétés sont libellées à l'aide de mots-outils anglais tels que « width » (largeur), « font-size » (taille de la police de caractères) ou « voice-volume » (volume sonore du rendu vocal).
Les valeurs peuvent être selon les cas exprimées à l'aide d'unités normalisées par ailleurs, ou de mots-clés propres à CSS. Par exemple, une couleur de fond ou de texte peut être exprimée à l'aide du modèle RGB ou des mots clés black, blue, fuchsia, etc.
Les propriétés CSS ont été établies selon un compromis entre deux contraintes opposées : faciliter la lecture des feuilles de styles par les agents utilisateurs en multipliant les propriétés individuelles, ou faciliter leur écriture par les auteurs en recourant à un nombre plus réduit de propriétés combinées. Par exemple, la position d'une image d'arrière-plan est déterminée par une propriété unique (background-position
), combinant les deux valeurs d'abscisse et d'ordonnée, et non par deux propriétés distinctes. De même, il existe des propriétés raccourcies permettant aux auteurs de simplifier l'écriture d'une série de propriétés : le raccourci font
permet, par exemple, de résumer en une seule règle l'ensemble des propriétés de police de caractères, de taille, de hauteur de ligne, de casse, de graisse et d'italique. Mais l'utilisation du caractère « / » rend beaucoup plus complexe l'analyse syntaxique des feuilles de styles par les agents utilisateurs.
Les propriétés sont regroupées par blocs de règles, délimités par les accolades {}. Chaque bloc est précédé d'un sélecteur désignant les éléments structurels auxquelles les propriétés concernées doivent être appliquées :
p { font-size: 110%; font-family: Helvetica, sans-serif; }
Bien que ce code CSS ne décrive pas la totalité de la présentation d'un document, il constitue à lui seul une feuille de style à part entière. Il fixe pour les éléments p
(paragraphe), le paramètre de taille à la valeur 110% et le paramètre de police à la valeur Helvetica, ou, si Helvetica est indisponible, une police générique sans serifs.
p
est un exemple de sélecteur simple. D'autres sélecteurs simples peuvent cibler plus spécifiquement un ou plusieurs éléments en recourant aux identifiants et aux classes attribués aux éléments structurels : les identificateurs (attribut id
) sont utilisés pour caractériser un élément unique (un menu, un mot...), tandis que les classes (attribut class
) sont utilisées pour caractériser un ensemble d'éléments (comme des menus organisés de manière similaire).
Des sélecteurs contextuels, formés par combinaisons de sélecteurs simples, permettent de viser des éléments selon leur position dans le document : a img
ne désignera par exemple que les images présentes dans des liens.
Pour permettre la cascade des styles, des règles de calcul de spécificité permettent au moteur de rendu CSS de déterminer le degré de priorité à appliquer à différents sélecteurs visant concurremment un même élément, et de trier ainsi les règles à lui appliquer. Ce calcul repose sur la somme des valeurs données aux différents sélecteurs simples formant le sélecteur contextuel :
id
.!important
ajoutée dans la règle donne une spécificité de 1,0,0,0.style
présent dans le document HTML a la priorité sur les autres sources de styles auteur, afin de permettre les surcharges locales des styles communs à une série de pages web. D'autre part, à priorités égales, un style utilisateur l'emporte sur un style auteur, qui l'emporte sur le style par défaut de l'agent utilisateur.Les feuilles de styles sont donc des documents textuels, dont la syntaxe se veut simple et intuitive, pour permettre leur lecture et leur écriture aussi bien directement par l'auteur qu'à l'aide d'un logiciel.