Feuilles de style en cascade

Les feuilles de style en cascade1, généralement appelées CSS de l’anglaisCascading Style Sheets, forment un langage informatique qui décrit 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.

Histoire du CSS, présent dès l’origine du web[modifier | modifier le code]

Le concept de feuille de style est présent dès l’origine du World Wide Web : le premier navigateur web WorldWideWeb permet de mettre en forme les documents à l’aide de ce qui serait aujourd’hui considéré comme une « feuille de style utilisateur »2. De même, les navigateurs Viola en 1992 et Harmony en 1993 recourent à un mécanisme similaire permettant de déterminer le rendu des polices de caractères, des couleurs ou de l’alignement du texte.

Il ne s’agit cependant pas de styles déterminés par l’auteur du document. HTML ne comportant pas non plus d’éléments de présentation dans ses premières années, une pression croissante s’exerce alors pour que les navigateurs permettent aux auteurs de déterminer eux-mêmes la présentation des pages web3, dans une démarche issue de la publication imprimée électronique. C’est dans ce contexte, en 19941995, que le tout nouveau Netscape Navigator introduit les premiers éléments HTML de présentation à l’initiative de Marc Andreessen, tandis qu’apparaissent concurremment les premières propositions de styles externesn. 1 : le « stylesheet proposal » de Pei Wei (créateur de Viola)4, les « Stylesheets for HTML » de Robert Raisch (O’Reilly)5, et enfin les «  Cascading HTML Style Sheets » (CHSS) d’Håkon Wium Lie6. L’apparition de CSS répond à une volonté de « proposer une alternative à l’évolution du HTML d’un langage de structuration vers un langage de présentation »7.

Une troisième voie de développement est également ouverte à la même époque : le langage de transformation DSSSL des documents SGML, élaboré par James Clark, suggère la possibilité d’un langage de styles qui ne soit pas seulement descriptif, et se rapproche d’un véritable langage de programmationn. 2. Cette voie est suivie par Netscape, qui propose en 1996 au W3C les « JavaScript-Based Style Sheets » (JSSS)8, implémentées par Netscape Navigator 4 en 1997.

Les origines des CSS sont donc liées à trois possibilités majeures :

  • HTML est-il un langage de structuration ou un langage mixte de mise en forme et de structuration ?
  • Les choix de présentation de l’auteur doivent-ils avoir la primauté sur ceux de l’utilisateur ?
  • La réponse aux besoins est-elle un langage de description de la mise en forme ou un langage de transformation ?

Les premiers développements[modifier | modifier le code]

La première proposition de Cascading HTML Style Sheets formulée par Håkon Wium Lie retient l’attention de Dave Raggett, qui est alors le principal éditeur du projet de spécification HTML 3.0. Partisan d’un HTML purement structurel, il encourage la publication d’un document de travail CHSS, afin que celui-ci puisse être présenté et discuté à la seconde conférence internationale sur le WWW (Mosaic and the Web, Chicago, 1994). Il modifie également avec Håkon Lie le navigateur Arenan. 3, afin de permettre de tester ce langage, et en fait la démonstration lors de la troisième conférence WWW en 1995.

Parallèlement, Bert Bos, qui travaillait alors sur le navigateur Argo9, et qui avait soumis au W3C son propre projet « Stream-based Style Sheet Proposal » (SSP), décide de joindre ses efforts à ceux d’Håkon Lie. SSP ayant été développé avec l’idée d’être applicable non seulement à HTML, mais aussi à d’autres langages de balisage, Bert Bos et Håkon Lie reprennent cet objectif, et en font une des caractéristiques clés de ce qui devient alors CSS proprement dit.

Un autre aspect de CSS s’avère alors déterminant face aux alternatives existantes : CSS est le premier langage à inclure l’idée de « cascade » (feuille de style en cascade), c’est-à-dire la possibilité pour le style d’un document d’être hérité à partir de plusieurs « feuilles de style ». Cela permet d’arbitrer entre plusieurs sources concurrentes de mise en forme d’un élément, et répond donc à la nécessité de composer entre les préférences stylistiques des auteurs et des utilisateurs.

Le World Wide Web Consortium (W3C) devient opérationnel en 1995, et la liste de discussion www-style est alors créée10. La même année se tient à Paris un « W3C style sheet workshop » décisif pour l’avenir des CSS11. Y est notamment affirmée la volonté de conserver les feuilles de style sous une forme simple, ce qui exclut l’hypothèse JSSS de Netscape. Par ailleurs, Thomas Reardon (Microsoft) y annonce le support à venir de CSS dans les futures versions d’Internet Explorer : dès lors, lorsque le W3C crée à la fin de l’année le « HTML Editorial Review Board » (HTML ERB) pour ratifier les futures spécifications HTML, DOM et CSS, Netscape, représenté par Lou Montulli, se rallie finalement au projet CSS mené par Bert Bos et Håkon Lie.

Vers une maturation difficile[modifier | modifier le code]

Contrairement aux logiciels, les spécifications CSS ne sont pas développées par versions successives, qui permettraient à un navigateur de se référer à une version en particulier. CSS est développé par « niveaux », ce qui contraint chaque nouveau niveau à intégrer le précédent, et chaque implémentation à être compatible avec la précédente : CSS1 est donc développé pour être un sous-ensemble de CSS2, qui est lui-même développé pour être un sous-ensemble de CSS3. Ceci explique en partie la lenteur de l’avancement normatif de CSS12.

CSS1, des implémentations difficiles pendant la guerre des navigateurs[modifier | modifier le code]

La spécification CSS1 finale est publiée le 17 décembre 1996, et définit une cinquantaine de propriétés. CSS1 se définit comme un « mécanisme de feuille de style simple, permettant aux auteurs et aux lecteurs d’attacher des styles (…) au document HTML »13. Cette simplicité se traduit par le choix d’un langage qui peut être aisément lu et écrit directement par ses utilisateurs humains, et d’une terminologie conforme aux usages courants dans la publication informatique. Le choix éventuel d’exprimer CSS dans une syntaxe XML ou SGML, régulièrement évoquée pour éviter l’implémentation d’un nouveau mode d’analyse syntaxique, est donc définitivement écartéen. 4.

CSS1 ne décrit pas uniquement sa propre grammaire : ce premier niveau décrit en effet une grammaire destinée à permettre aux niveaux ultérieurs d’ajouter de nouvelles fonctionnalités, tout en autorisant la lecture de ces futures feuilles de styles par les implémentations d’origine. Ces nouvelles fonctionnalités ne seront pas comprises par les implémentations d’origine, mais pourront être identifiées en tant que telles, et ignorées. CSS garantit ainsi sa compatibilité descendante.

CSS1 définit essentiellement les propriétés de rendu typographique du texte : fontes (polices), couleur, taille des caractères, graisse, espacements, bordures et gestion des marqueurs de liste. Il n’est donc pas encore question de « mise en page » : la propriété float, qui sera par la suite massivement utilisée pour la mise en page CSS globale des designs web, n’est alors conçue que comme un moyen de placer localement, côte à côte, une portion réduite du contenu, tel qu’une image, et le reste du texte14. Compte tenu des implémentations problématiques de CSS1, le détournement de l’élément HTML table pour gérer la mise en page globale reste dans l’immédiat la solution la plus couramment retenue par les auteurs de contenu web.

En 1996, Internet Explorer 3.0 est le premier navigateur commercial à implémenter partiellement CSS alors que celle-ci est encore en cours de formulation. Cette implémentation anticipée, menée par Chris Wilson15 ne correspond pas à la spécification finale. En 1997, Internet Explorer 4.0 voit la naissance d’un nouveau moteur de rendu, Trident, à l’origine du support croissant mais problématique de CSS dans les différentes versions de ce navigateur sous Windows, jusqu’à Internet Explorer 7 inclusn. 5.

Netscape Navigator 4.0 suit le mouvement en 1997, malgré ses réticences historiques vis-à-vis de CSSn. 6 : dans le contexte de la guerre des navigateurs, il s’agit alors principalement d’éviter que Microsoft ne puisse s’affirmer comme le navigateur le plus conforme. Cependant, cette implémentation précipitée, basée sur des méthodes JavaScript internes, se révèle finalement limitée et très peu fiable. Netscape Navigator 4.0 apporte également une implémentation JSSS, qui restera sans lendemainn. 7. Il faudra attendre le nouveau moteur de rendu Gecko du projet Mozilla pour parvenir à une véritable implémentation de CSS1.

En 1998, alors que s’achève la guerre des navigateurs opposant Netscape et Microsoft, Opera 3.5, dont Håkon Lie est entre-temps devenu le directeur technique, parvient à une implémentation plus complète de CSS1, facilitée par la publication de la première « Test suite for Cascading Style Sheets (CSS) Level 1 » créée principalement par Eric Meyer pour le W3C16. La présence de ces suites de test se révèle un atout majeur à la fois pour les implémentations dans les navigateurs et pour l’appropriation des techniques CSS par les auteurs (en fournissant des exemples détaillés des propriétés et de leurs valeurs).

Enfin, sous l’impulsion de Tantek Çelik, Internet Explorer 5.0 pour Macintosh lancé en mars 2000, basé sur Tasman, un moteur de rendu spécifique sans rapport avec Trident, est le premier navigateur à supporter complètement (à plus de 99 %) CSS1. Pour assurer la compatibilité avec les précédentes pratiques de codage propre à chaque implémentation (la « soupe de balises »), et permettre un affichage correct des documents web qu’ils soient respectueux ou non des standards CSS et HTML, il est également le premier à mettre en œuvre la technique du doctype switching. Adoptée par la suite par tous les navigateurs, celle-ci devient par la suite l’une des clés de l’implémentation progressive de CSS : elle permet en effet au navigateur de conserver d’anciennes implémentations propriétaires pour des raisons de compatibilité, tout en ayant la possibilité d’opter, en fonction de la syntaxe de la déclaration de type de document de la page, pour un mode de rendu conforme à de nouvelles implémentations standards17.

Durant cette période de la fin des années 1990, la conception web est avant tout dépendante de l’utilisation d’HTML en tant que format de présentation. La défaite de Netscape à l’issue de la guerre des navigateurs, le renouveau qui s’ensuit via le projet Mozilla, l’apparition d’IE5 Mac, et à un moindre titre l’évolution d’Internet Explorer Windows 5.x, amorcent cependant au début des années 2000 une nouvelle étape dans l’évolution des pratiques de conception des sites web par les auteurs : ces navigateurs permettent en effet de montrer que les pratiques historiques datant de l’époque de la guerre des navigateurs, mêlant structure et présentation, peuvent réellement être abandonnées au profit d’une démarche fondée sur les feuilles de styles et le respect plus général des standards du web (au sens d’HTML et CSS). Jeffrey Zeldman, cofondateur du Web Standards Project et fondateur d’A List Apart (en) en 1998, apparaît alors comme la figure emblématique de ce mouvement de promotion des standardsn. 8[source insuffisante]. Il est également l’inspirateur d’une démarche de conception « hybride », tirant profit des techniques CSS tout en demeurant temporairement dans le cadre d’une mise en forme des documents fondée sur les tableaux de présentation.

CSS2, des ambitions précipitées[modifier | modifier le code]

Pour répondre aux besoins que la première spécification CSS1 ne couvrait pas encore, CSS est attribué en 1997 à un nouveau groupe de travail au sein du W3C, présidé par Chris Lilley. En 2007, ce groupe comporte notamment des représentants d’AppleGoogleIBMMicrosoftAdobe, de la Fondation Mozilla et d’Opera.

Publié comme une recommandation en mai 1998, le second niveau de CSS étend considérablement les possibilités théoriques des feuilles de styles en cascade, avec en particulier environ 70 propriétés supplémentaires. À la mise en forme typographique du texte initiée avec CSS1 s’ajoutent en effet notamment :

  • la déclinaison en styles propres aux différents média dans lesquels une page web peut être restituée (impression, rendu par une synthèse vocale, par un dispositif braille, par un dispositif de projection, un mobile, etc.) ;
  • de nouvelles propriétés de positionnement à l’écran pour permettre la réalisation de mise en pages avancées, issues d’un document élaboré conjointement par Microsoft et Netscape18 ;
  • un jeu de propriétés autorisant le téléchargement de polices de caractères spécifiques ;
  • de nouvelles propriétés permettant de faire intervenir les préférences de l’utilisateur dans la mise en forme d’un site.

Cependant, cette richesse fonctionnelle ne rencontre qu’un écho limité dans ses implémentations :

  • La déclinaison par média est en partie un échec : les styles de rendus vocaux restent théoriques faute de prise en compte par les navigateurs vocaux et lecteurs d’écran. Ils s’avèrent par ailleurs incompatibles avec le standard d’interaction vocale SSML. Il en est de même de l’affichage et de l’impression braille. Les styles d’impression ne sont que très partiellement adoptés par les navigateurs graphiques, tandis qu’une partie des navigateurs pour mobiles ignorent encore au début des années 2000 le type de média CSS qui leur est dédié ;
  • Seules quelques propriétés avancées de positionnement sont reconnues par l’ensemble des navigateurs graphiques, consolidant ainsi les pratiques de mise en page qui reposent sur des détournements de fonctionnalités CSS (système des blocs flottants ou positionnés) et HTML (tableaux de mises en page) ;
  • Le téléchargement de polices de caractères suscite des implémentations non conformes et divergentes entre Netscape et Internet Explorer, et rencontre l’opposition des éditeurs de fontes, soucieux de préserver leurs intérêts commerciauxn. 9.

Plusieurs causes sont évoquées pour expliquer ces difficultés et la lenteur des implémentations CSS2 :

  • la « sous-spécification ou quasi-inimplémentabilité de certaines sections »19. Håkon Lie souligne lui-même dans sa thèse sur les feuilles de style en cascade, en 2005, les risques de non implémentation ou de perte d’interopérabilité liés à des « fonctionnalités excessives », telles que les marqueurs de liste, les repères de coupe pour l’impression ou le téléchargement de polices de caractères. De même, la complexité des sélecteurs avancés est difficilement conciliable avec la gestion de la cascade ;
  • l’absence d’intérêt de la part des fabricants de navigateurs pour des fonctionnalités qui ne répondaient pas nécessairement à leurs objectifs stratégiques ou commerciaux ;
  • l’interruption du développement d’Internet Explorer, navigateur dominant du marché, de 2001 à 2006. Håkon Lie écrivait en effet en 2005 : « 2001 est un tournant pour CSS. C’est l’année où Microsoft produit Internet Explorer 6.0 qui offre une prise en charge fonctionnelle, bien qu’incomplète et buggée, de CSS […] Aucun autre navigateur n’a été capable de concurrencer WinIE en ce qui concerne le nombre d’utilisateurs. WinIE a, de ce fait, déterminé le sous-ensemble de CSS utilisable par les auteurs. La prise en charge limitée de CSS par WinIE, combinée à un monopole de fait en matière de navigateur web, est actuellement le plus grave problème du déploiement de CSS. »20

CSS 2.1, retour aux implémentations[modifier | modifier le code]

Les retours d’implémentation de CSS2 conduisent le groupe de travail CSS du W3C à rédiger à partir de 2001 une version révisée CSS 2.1 (« CSS Level 2, Revision 1 »), sur la base de ce qui était effectivement adopté par les différents navigateurs. Les objectifs de cette révision sont21 :

  • de maintenir la compatibilité avec les parties de CSS2 qui sont largement acceptées et mises en application ;
  • d’incorporer dans la norme tous les errata CSS2 déjà publiés ;
  • Lorsque les implémentations diffèrent profondément de la spécification CSS2, de modifier la spécification pour qu’elle soit en accord avec les pratiques généralement admises ;
  • de supprimer les dispositifs CSS2 qui ont été refusés par la communauté CSS, vu leur manque d’implémentation. CSS 2.1 vise à refléter les mécanismes CSS qui ont été raisonnablement et largement implémentés pour les langages HTML et XML en général (plutôt que pour un langage XML en particulier, ou pour HTML seul) ;
  • de supprimer les mécanismes CSS2 qui seront rendus obsolètes par CSS3, et encourager ainsi l’adoption de mécanismes CSS3 à leur place ;
  • d’ajouter un (très) petit nombre de nouvelles valeurs de propriétés, lorsque l’expérience d’implémentation a montré qu’elles répondaient à un besoin pour la mise en application de CSS2.

CSS 2.1 corrige CSS2 sur de nombreux points de détail, en supprime certaines sections en tout ou partie (les styles vocaux définis sous le type de media « aural », les styles d’impression, les polices téléchargeables, dont les définitions plus probantes sont repoussées à la future CSS3), et l’explicite à partir des constats mis à jour lors des implémentations (la gestion avancée des blocs flottants via les « contextes de formatage »22).

Après avoir connu 8 versions successives, CSS 2.1 est en juillet 2007 une recommandation candidate, c’est-à-dire le standard que doivent suivre les implémentations23.

En 2007, aucun navigateur n’a en effet achevé l’intégration de CSS 2.1 : celle-ci serait implémentée à 56 % par Internet Explorer 7, 91 % par Firefox 2 et 94 % par Opera 924. Par ailleurs, seule une partie des navigateurs graphiques ont passé avec succès ou retenu comme objectif le test Acid2, lancé en 2005 par le Web Standards Project, à l’initiative d’Håkon Lie, pour favoriser notamment l’implémentation d’un choix de fonctionnalités CSS 2.1 considérées comme les principales avancées nécessaires : positionnement d’éléments lors de l’affichage, généralisation du modèle de rendu en tableau à tous les éléments, contenu généré via CSS. L’utilisation professionnelle de CSS reste donc limitée à un sous-ensemble arbitraire de celle-ci, déterminé par les implémentations communes.

CSS3[modifier | modifier le code]

Avancée de la spécification CSS3.

Le développement du troisième niveau des feuilles de styles en cascade commence dès 1999, parallèlement à celui de CSS 2.1.

CSS3 devient « modulaire », afin de faciliter ses mises à jour, mais aussi son implémentation par des agents utilisateurs aux capacités et aux besoins de plus en plus variés (navigateurs graphiques, navigateurs pour mobiles, navigateurs vocaux). Les navigateurs peuvent ainsi implémenter des sous-ensembles de CSS325.

Dès lors, le degré d’avancement de CSS3 varie selon les modules et le degré de priorité qui leur a été donné par le groupe de travail CSS26. En 2007, les modules les plus avancés (recommandations candidates) concernent la mise en forme des annotations ruby, la négociation de style entre serveurs et agents utilisateurs (« Media Queries »), le rendu web TV, la gestion des couleurs ou encore la prise en compte de la configuration de l’interface utilisateur. Dans d’autres cas, des modules peuvent atteindre le stade de recommandation candidate, mais être par la suite ramené au stade de document de travail en raison des difficultés mises à jour à la suite de l’appel à implémentation. C’est par exemple le cas du module de typographie « CSS Text ».

De même, les implémentations varient selon les stratégies et les besoins des différents navigateurs. Opera implémente par exemple les « Media Queries », qui répondent à ses besoins spécifiques de navigateur multiplate-forme embarqué sur des clients ayant des capacités d’affichage très variées. Firefox, davantage orienté vers le navigateur exploité en tant que plateforme, privilégie en revanche des modules appropriés à cet usage comme le module sélecteurs avancés.

Un programmeur néerlandais, Jori Koolstra, propose en 2002 la notion de feuilles de style dynamiques en cascade.

Certains membres du groupe de travail CSS, ainsi que des développeurs web, ont soulevé le problème de la lenteur de l’avancement de CSS3 :

  • Pour Ian Hickson, « le groupe de travail CSS est aujourd’hui atteint de dysfonctionnements chroniques » : son caractère trop fermé le prive des contributeurs nécessaires pour l’édition des spécifications, leur relecture ou encore la rédaction des suites de test27 ;
  • Pour Daniel Glazman, cette lenteur s’explique par 3 erreurs originelles : le choix de développer CSS par niveau et non pas par versions successives, la priorité accordée à la révision CSS 2.1 au détriment de CSS3, le nombre excessif de modules CSS3 et la complexité des propriétés qui y sont développées28.

En 2008, aucun module n’est considéré comme terminé par le W3C, et l’implémentation dans les navigateurs est donc marginale, souvent à titre de test, comme les fonctions -moz-xxx du moteur Gecko, dont le préfixe limite l’utilisation aux seuls navigateurs basés sur Gecko.

CSS4[modifier | modifier le code]

L’écriture du quatrième niveau des feuilles de styles en cascade débute dès 201029, parallèlement aux modules CSS 3.

Certains modules étant figés ou en phase de l’être, des brouillons sont lancés pour continuer d’étendre les possibilités de ces derniers. Le travail se fait donc en complément de la couche précédente, voire en reprenant la couche inférieure pour les sélecteurs30.

Enjeux et principes[modifier | modifier le code]

Enjeux[modifier | modifier le code]

Séparation entre la structure et la présentation[modifier | modifier le code]

L’un des objectifs majeurs des 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 :

  • La structure du document et la présentation peuvent être gérées dans des fichiers séparés ;
  • La conception d’un document se fait dans un premier temps sans se soucier de la présentation, ce qui permet d’être plus efficace ;
  • Dans le cas d’un site web, la présentation est uniformisée : les documents (pages HTML) font référence aux mêmes feuilles de styles. Cette caractéristique permet de plus une remise en forme rapide de l’aspect visuel ;
  • Un même document peut donner le choix entre plusieurs feuilles de style, par exemple une pour l’impression et une pour la lecture à l’écran. Certains navigateurs web permettent au visiteur de choisir un style parmi plusieurs ;
  • Le code HTML est considérablement réduit en taille et en complexité, puisqu’il ne contient plus de balises ni d’attributs de présentation.

Présentation selon le média[modifier | modifier le code]

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.131 :

  • all : quel que soit le média ;
  • screen : écrans d’ordinateur de bureau ;
  • print : pour l’impression papier ;
  • handheld : écrans de très petite taille et clients aux capacités limitées ;
  • projection : quand le document est projeté ;
  • tv : quand le document est affiché sur un appareil de type télévision ;
  • speech : 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 »32 : 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.

Cascade des styles[modifier | modifier le code]

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 :

  • par origine des styles, issus de l’agent utilisateur, de l’auteur et de l’utilisateur. La priorité supérieure accordée aux styles de l’utilisateur est un des facteurs principaux de l’accessibilité des documents présentés à l’aide de CSS ;
  • par média : une feuille de style générique peut s’appliquer à plusieurs média de restitution (affichage à l’écran, impression, projection) et être combinée avec des feuilles propres à chaque média ;
  • selon l’architecture d’un ensemble de documents web : une feuille de style générique peut s’appliquer à la totalité des pages d’un site web, être combinée avec des feuilles propres à chaque rubrique de celui-ci, ainsi qu’avec des styles propres à telle ou telle page spécifique ;
  • selon l’architecture des feuilles elles-mêmes : une feuille de style externe au document peut être combinée à une feuille de style interne et à des styles appliqués directement à chaque élément qui le compose (styles « en ligne »). Une feuille de style peut également importer une ou plusieurs autres feuilles externes.

Principes techniques et syntaxe de CSS[modifier | modifier le code]

Concepts fondamentaux : boîtes et flux CSS[modifier | modifier le code]

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 :

  • peuvent avoir des propriétés de marges, de bordure, d’arrière-plan, de largeur ou de hauteur, etc. Dans un rendu vocal, des propriétés équivalentes permettent de déterminer des pauses dans la lecture avant ou après le contenu, de choisir une voix, de régler son débit ou son niveau sonore ;
  • peuvent être déplacées par rapport à leur position par défaut dans le flux, ou avoir un comportement particulier dans celui-ci (permettre un rendu en colonnes adjacentes, se superposer aux boîtes voisines, ou être masquées par exemple).

Propriétés et valeurs[modifier | modifier le code]

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 utilisateurs33.

Sélecteurs et blocs de règles[modifier | modifier le code]

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 :

 1 /*Je suis un commentaire qui commente le code et qui ne fait rien*/
 2 body
 3 {
 4     /*Couleur de fond : */
 5     background-color: green;
 6 }
 7 p
 8 {
 9     /*Couleur du texte : */
10     color: red;
11     /*Taille du texte en px (pixel) : */
12     font-size: 20px;
13 }
14 button
15 {
16     /*Contour : */
17     outline: none;
18     /*Bordure*/
19     border: none;
20     /*Couleur de fond : */
21     background-color: black;
22     /*Couleur de texte : */
23     color: white;
24 }
25 /*Hover veut dire au survol d'un bouton*/
26 button:hover
27 {
28     /*Couleur de fond : */
29     background-color: green;
30 }
31 /*Selection veut dire à la selection du texte*/
32 *::selection
33 {
34     /*Couleur de fond : */
35     background-color: black;
36     /*Couleur du texte : */
37     color: white;
38 }

CSSOO[modifier | modifier le code]

Le CSS orienté-objet (en anglais OOCSS), est une méthode créée en 200934 sur le modèle de la programmation orientée objet, permettant de réutiliser ses styles dans plusieurs contextes35.

BEM[modifier | modifier le code]

Le BEM (Block, element, modifier) est une technique d’écriture du CSS inventée en 201036, consistant à déclarer les styles sous forme d’arborescence pour en améliorer la performance. Exemple :

 1 .product 
 2 {
 3 
 4     &-productLabel 
 5     {
 6         ...
 7     }
 8 
 9     &-productPicture 
10     {
11         ...
12     }
13 }

NB : l’esperluette (&) représente l’objet parent en Sass et en LESS.

Exemple avec du HTML et CSS[modifier | modifier le code]

Contenu du fichier index.html :

<!doctype html>
<html>
    <head>
        <meta charset="utf-8"/>
        <link rel="stylesheet" href="style.css"/>
        <title>Exemple html et css</title>
    </head>
    <body>
        <button class="btn" id="btn1">Premier bouton</button><br/><br/>
        <button class="btn" id="btn2">Deuxième bouton</button><br/><br/>
        <button class="btn" id="btn3">Troisième bouton</button>
    </body>
</html>

Contenu du fichier style.css :

.btn
{
    height: 50px;
    color: white;
    font-size: 20px;
    cursor: pointer;
    transition: background-color 2s;
    outline: none;
    border: none;
}
*::selection
{
    background-color: lightgreen;
    color: darkblue;
}
.btn:hover
{
    transition: background-color 2s;
}
#btn1
{
    background-color: lightgreen;
}
#btn1:hover
{
    background-color: darkgreen;
}
#btn2
{
    background-color: lightblue;
}
#btn2:hover
{
    background-color: darkblue;
}
#btn3
{
    background-color: red;
}
#btn3:hover
{
    background-color: orange;
}

L’ouverture du fichier HTML dans un navigateur montre les styles configurés avec le fichier cSS.

Limites de CSS[modifier | modifier le code]

Indépendance entre présentation et structure[modifier | modifier le code]

CSS ambitionnait initialement l’indépendance entre structure et présentation d’un document.

Ainsi, le site du CSS Zen Garden, créé en 2003 par Dave Shea (en), se veut la démonstration de la possibilité de modifier librement le rendu affiché d’une même page web, uniquement grâce à CSS et sans aucune modification de son code HTML37 : il présente, en décembre 2006, 986 designs différents de sa page d’accueil38. Cependant, la plupart de ces designs reposent en tout ou partie sur le remplacement du contenu textuel de la page par des images CSS qui le reproduisent en enrichissant son aspect39 : la liberté graphique repose toujours partiellement sur la transformation du texte en image. D’autre part, le CSS Zen Garden reste un exercice de style limité à un document unique, à la structure doublée d’éléments et attributs sémantiquement neutres, qui ne servent qu’à donner appui à des sélecteurs CSSn. 10.

S’il existe de nombreux exemples de documents HTML pour lesquels plusieurs feuilles de style ont été développées, il n’existe que peu d’exemples de feuilles de style génériques, indépendantes de la structure du document. Les styles par défaut des agents utilisateurs en sont un exemple, mais limité à des effets typographiques simples, sans définition de mise en pagen. 11. En général, les feuilles de style dépendent étroitement de la structure du document à styler et sont difficilement réutilisables sur des documents différemment structurés. C’est davantage à travers la création de patrons HTML CSS que s’exploite cette indépendance potentielle des styles envers la structure spécifique des documents.

Plus généralement :

  • les difficultés et le manque d’implémentation d’une partie des propriétés CSS limitent la liberté de mise en page, et conduisent à l’utilisation de propriétés contraignantes quant à la structure HTML (par exemple, la propriété float impose un ordre précis du contenu ainsi mis en colonne ; de nombreux effets de rendu reposent d’autre part sur une surcharge de balisage sémantiquement neutre, tel que div et span) ;
  • la réutilisation d’une structure unique sur des média ou des matériels différents grâce à des feuilles de styles est limitée par les contraintes liées aux contenus eux-mêmes et à la capacité des agents utilisateurs à restituer ceux-ci, et par la nécessité d’une négociation de présentation entre client et serveur. Des procédés d’adaptation spécifiques du contenu, de la structure et du rendu côté agent utilisateur se sont avérés nécessaires, tels, que, par exemple, la technologie ERA (Extensible Rendering Architecture) développée par Opera. Internet Explorer suit une voie similaire avec sa version 7 qui remodèle le rendu imprimé d’une page web afin de l’optimiser.

Accessibilité[modifier | modifier le code]

CSS favorise l’accessibilité d’une page web en donnant en dernier ressort à l’utilisateur le contrôle du rendu d’un document dans son navigateur : il est ainsi possible de l’adapter à des contraintes ou à des préférences concernant par exemple la taille d’affichage des caractères ou les couleurs. En séparant structure et présentation, CSS favorise également l’écriture de documents structurés de manière sémantique, potentiellement plus exploitables par les aides techniques : la liberté de présentation des éléments de titrage permet par exemple de respecter strictement l’ordre hiérarchique formel de ceux-ci, ce qui permet en retour aux aides techniques d’en établir une table des matières navigable. Enfin, en donnant aux auteurs les moyens d’enrichir la mise en forme du texte, CSS permet de limiter le recours aux textes mis en imagesn. 12.

Cependant, certaines utilisations de CSS peuvent également compromettre l’accessibilité du contenu :

  • en substituant à celui-ci des pseudo-contenus qui ne sont accessibles qu’aux utilisateurs qui peuvent percevoir le rendu CSS visuel : c’est le cas par exemple des informations qui seraient véhiculées par des images d’arrière-plan ;
  • en bouleversant la cohérence nécessaire entre l’ordre linéaire de l’information dans le contenu structuré et l’ordre visuel du rendu CSS affiché. Les aides techniques telles que les lecteurs d’écran n’ont en effet accès qu’à cet ordre linéaire : une information qui ne prendrait son sens qu’en fonction de son positionnement CSS n’est pas compréhensible pour leurs utilisateurs ;
  • dans une démarche d’accessibilité fondée sur la pertinence de la structure HTML, l’éventail des possibilités de mise en forme de contenu avec CSS peut faire perdre de vue la nécessité de baliser le contenu à l’aide d’éléments signifiants. Il est par exemple possible de délimiter visuellement une citation en la mettant en italique ou en l’encadrant de guillemets, mais l’information sur l’origine de ce texte ne sera perceptible, au sens des normes d’accessibilité, que via l’utilisation des éléments q ou blockquote, qui sont les seuls permettant de définir une citation HTML et d’en indiquer la source via l’attribut approprié (cite).

Les méthodes d’application des directives d’accessibilité des contenus web (RGAAUWEM par exemple) définissent donc des règles d’usages des styles CSS40.

Simplicité[modifier | modifier le code]

CSS répond à une volonté de disposer d’un format de présentation simple, tant dans ses fonctionnalités que dans sa syntaxe, afin d’en favoriser la manipulation directe par les auteurs et les utilisateurs. Cependant, cette simplicité est remise en cause par plusieurs facteurs :

  • la difficulté à déterminer et à contrôler le résultat de la cascade lorsque les sources de styles se multiplient. Le rendu final d’un contenu précis dépend de la combinaison de plusieurs feuilles et peut alors devenir malaisé à faire évoluer. L’interdépendance des feuilles de styles peut rendre difficilement anticipable le résultat d’une modification apportée à l’une d’elles. Les auteurs sont alors placés devant un choix entre cette interdépendance qui optimise la quantité de code et la redondance de styles qui facilite sa maintenance41 ;
  • La difficulté à écrire des styles utilisateurs sans disposer de compétences avancées. Les utilisateurs sont en théorie les premiers bénéficiaires des CSS, qui leur donnent la possibilité d’adapter la présentation des pages web. Cependant, le mécanisme des styles se prête difficilement au développement d’environnements graphiques qui faciliteraient la manipulation des propriétés CSS42. Dans la pratique, le recours aux styles utilisateur reste dès lors marginal.