Les feuilles de style en cascade (CSS)

1. Introduction

Dès 1996 est apparu un nouveau langage, élaboré par le W3C, appelé CSS (Cascading Style Sheets), dont le but est de spécifier les styles en HTML : celui-ci fut adopté par les principaux navigateurs.

Fondamentalement, le CSS sépare réellement le contenu et la structure de la présentation d'un document HTML : il respecte donc la DTD (Document Type Definition : la DTD définit l'ensemble des éléments supportés avec leurs attributs et indique si un élément peut en contenir d'autres).

Le HTML est une application SGML (Standard Generalized Markup Language). Le principe du SGML (donc du HTML) est de séparer le contenu d'un document et sa présentation.

Cette séparation était impossible avant la venue du CSS, quand des balises étaient incorporées au code HTML, afin d'indiquer le style du contenu. Ces balises ne respectaient pas les principes de structuration des documents puisqu'elles mêlaient présentation et contenu !

Par exemple, l'élément <STRONG> dont le rôle fondamental est d'indiquer l'importance d'une partie du texte, peut être présenté en caractère gras, par une feuille de style :

STRONG {font-weight:bold}

De cette manière, peu importe le style de présentation utilisé pour le texte entouré des balises <STRONG>, celui-ci pouvant être changé à tout moment (script ou feuille de style), mais structurellement, cette partie de texte reste définie comme importante pour le document !

Quand était mêlé style et structure dans les codes HTML, il était difficile de les séparer ultérieurement, ce qui rendait fastidieux la gestion des documents HTML !

Un autre exemple est l'emploi des codes d'en-têtes (H1....H7). Beaucoup d'auteurs employaient ces balises comme simple moyen de mettre en "gros caractères" le texte inséré entre celles-ci et ainsi, un élément H1 pouvait être suivi d'un élément H3 (sans H2), ce qui n'a aucun sens au point de vue structurel ! (Imaginez un texte où apparaîtrait un titre "I.Introduction", suivi d'un autre "III. Application" où le titre "II. ....." n'existerait pas ?)
Les balises d'en-tête, dans ce cas, ne définissent pas une structure (DTD) mais servent uniquement comme outil de définition de style ! Idem pour les balises B ou I qui avaient été créées pour raison de facilité mais dont l'emploi ne respectent pas la DTD.

Ces pratiques ne sont pas sans conséquences, en effet, en premier lieu il y a une perte de la puissance réelle des outils (balises) mais également, en second lieu, une mauvaise accessibilité aux informations sous-jacentes (comme un texte écrit au "km", sans ponctuation correcte ! Celui-ci devient inintelligible...)

Enfin, le CSS est primordial pour l'élaboration des styles dynamiques (style qui peut être modifié par un script) dans les documents HTML.

2. Techniques

Il existe trois techniques différentes pour joindre des feuilles de style à un document HTML, respectivement plus complexes mais offrant également des possibilités plus vastes.

Les styles en ligne (le style est défini directement dans l'élément concerné), les feuilles de style globales (le style du document est élaboré et défini dès son début) et enfin, les feuilles de style liées (le style du ou des documents est défini dans un fichier séparé). Cette dernière technique est la plus puissante, car elle offre les plus grandes possibilités, notamment au point de vue de la gestion des pages Web, puisqu'un seul fichier peut gérer tous les styles de plusieurs pages voire, d'un site Web entier !

On parle de cascade (cascading) car un style unique (pour un élément ou un document entier) peut être élaboré par la combinaison de plusieurs feuilles de style...

a) Style en ligne (intra-ligne)

Le style en ligne est une sorte de feuille de style unique, élaborée pour l'élément concerné. Celui-ci est spécifié directement dans la balise du début de l'élément, par les attributs de STYLE, qui emploient d'ailleurs le même langage que celui des feuilles de style (globales ou liées).

Exemple : un paragraphe centré, avec une police agrandie de 30% et de couleur brune :



<P STYLE="font-size:130%;text-align:center;position:relative;width:100%;color:chocolate">
Voici un paragraphe centré, avec une police agrandie et de couleur brune.
<P>
Structure de la codification
Balise de début de l'élément <P...
Mot clé STYLE précise que le fichier lié est une feuille de style
signe "égal" "=" suit directement le mot clé STYLE
guillemets d'ouverture et de fermeture englobent les différents attributs de style
Attribut(s) séparés par un
";"
Chaque attribut est séparé par un point virgule
Balise de fin de l'élément ici (</P>) Signifie également la fin de la définition du style en ligne de cet élément !
<P STYLE="font-size:130%;text-align:justify;color:navy">....</P>

InformationVous pouvez changer le nom de la couleur (chocolate) par sa valeur RGB hexadécimale : #D2691E

b) Feuilles de style globales

Ici, la définition de la feuille de style globale s'insère par la balise spécifique <STYLE>, généralement placée dans l'en-tête du document.

En quelque sorte, on regroupe les différents styles concernant les différents éléments, ce qui permet de définir globalement le style de tout le document HTML.

Cette technique permet, par le changement de quelques codes, de modifier toute la présentation de la page ou de lui adjoindre un ou des styles supplémentaires.

Exemple : une feuille de style globale qui définit un fond d'écran, la justification des paragraphes, une classe "info" (fond marron et couleur blanche) et enfin, les éléments <STRONG> en couleur rouge. (vous pouvez visionner la page ci-dessous)

<HEAD>
    < STYLE TYPE="text/css">
                BODY {background-image:URL(image.gif)}
                P {text-align:justify}
                .info {background:maroon;color:white}
                STRONG {color:red}
    </STYLE>
</HEAD

Structure de la codification
Balise spécifique <STYLE>
Attributs TYPE = "text/css" qui définit le langage employé dans la feuille de style globale. Si vous omettez le type du langage employé, ce sera le type "text/css" qui sera utilisé par défaut. Actuellement, seul "text/css" est reconnu, mais il est préférable de l'indiquer dans le code source, cela pour information et pour les évolutions futures..
 Accolades
(ouverture et fermeture)
englobent les différents attributs de style
 Sélecteur(s) sélecteur simple (qui permet d'associer le style à un élément particulier) ou sélecteur contextuel (qui associe une règle à un élément mais en fonction de sa situation : cela vous sera expliqué plus loin)

InformationSi vous avez choisi une feuille de style globale (ou liée) qui définit la justification de tous les paragraphes, il adviendra certainement que dans certains cas ce soit inopportun ! Dans ce cas, créez une classe spéciale (P.n {text-align:left}) qui alignera le paragraphe de cette classe à gauche.


c) Feuilles de style liées

Même syntaxe pour la définition des styles que celle des feuilles de style globales, mais cette définition se trouve dans un fichier distinct du ou des documents HTML.

Ce fichier, d'extension CSS (".css") permet de grouper les styles et les règles communes de plusieurs pages, voire d'un site Web entier.

Cette dernière technique apporte une amélioration des performances, car :

InformationVous pouvez également lier un fichier séparé qui comprend le ou les scripts nécessaires au document HTML. La syntaxe est la suivante :

<SCRIPT Language=JavaScript SRC="fichier.js"></SCRIPT>
Structure de la codification
Balise spécifique <LINK>
Attributs REL = "stylesheet" précise que le fichier lié est une feuille de style
TYPE ="text/css" définit le type de langage employé dans le fichier
HREF = "fichier.css" URL du fichier qui contient la feuille de style liée (externe)
<LINK REL="stylesheet" TYPE="text/css" HREF="tutor.css">

InformationLe fichier externe ne peut contenir aucun code HTML mais uniquement les règles contextuelles et les définitions de styles...

3. La pratique des feuilles de style...

Comme je vous l'ai dit précédemment, la syntaxe d'une feuille de style liée est la même que celle d'une feuille de style globale et les attributs de style sont identiques aux trois techniques.

Le langage CSS est formé de sélecteurs et de règles de présentation. Les éléments qui sont associés à une règle particulière sont définis par les sélecteurs et l'apparence choisie pour ces éléments est indiquée par les règles de présentation.

InformationIl est également possible de créer différentes feuilles de style globales dans un même document et faire en sorte (script) que suivant la résolution d'écran du visiteur, telle ou telle feuille de style globale soit employée. Malheureusement, cette technique avancée n'est pas reconnue actuellement par Netscape mais uniquement par Internet Explorer (4 et plus). Pour cette raison, je ne développerai pas ici cette possibilité mais bien dans la section réservée aux techniques acceptées ou comprises par IE. Si vous employez Internet Explorer (4 et +), je vous recommande de consulter cette section où cette technique particulière est traitée, y compris en assurant la compatibilité avec Netscape (pour que le document soit visionné correctement). 

a) Sélecteurs

Sélecteurs simples

Un sélecteur simple associe un élément (par son type ou son attribut) à une règle particulière et cela, quelle que soit la position qu'il occupe parmi les autres éléments.

On peut grouper plusieurs sélecteurs simples, à une même règle de présentation, en les séparant par des virgules (",").

H1,H2 {color:navy}
H3, H4, H5 {color:red}
H6,H7 {color:green}

Dans cet exemple, les en-têtes

H1 et H2 sont affichés en bleu,
H3,H4 et H5 sont affichés en rouge,
H6 et H7 sont affichés en vert.

Sélecteurs contextuels

Comme leur nom l'indique, les sélecteurs contextuels associent une règle particulière à un élément, mais en fonction de sa situation.

Par exemple, tous les éléments <STRONG> de classe ex (CLASS="ex") situés dans des paragraphes (P) sont affichés en jaune. Si un élément <STRONG> n'est pas inséré dans un élément P (SPAN, DIV...) ou un élément P de classe différente, la règle ne lui sera pas appliquée. On sépare par des espaces    les sélecteurs contextuels que l'on veut grouper.

P  STRONG.ex {color:yellow}

Codes HTML et visualisation
<P>
Voici un élément <STRONG CLASS="ex">strong</STRONG> situé dans un élément P de classe <EM>ex</EM>.
</P>

Voici un élément strong situé dans un élément P de classe ex.

Chaque sélecteur peut faire référence à une CLASSE, un ID ou un TYPE d'élément.

DIV.rem   P    STRONG {font-style:italic;color:green;font-size:150%}

Codes HTML et visualisation
<DIV CLASS="rem">
<P>Élément <STRONG>strong</STRONG> situé dans un élément DIV (CLASS="rem")</P>
</DIV>

Élément strong situé dans un élément DIV (CLASS="rem")

Ici, sont affichés les éléments <STRONG>, inclus dans un élément P s'il est situé dans un élément DIV de classe rem (CLASS="rem") en caractères italiques, de couleur verte, dans une police agrandie de 50%.

UL  EM.info {font-size:30px;color:yellow;background:navy}

Autre exemple : les éléments EM de classe info (CLASS="info") qui sont contenus dans une liste (UL) sont affichés dans une police de 30px, en couleur jaune sur fond bleu si celui-ci est lui-même contenu dans un élément UL.

Codes HTML et visualisation
<UL>
<LI>Première ligne de la liste, avec un élément <SPAN CLASS="info">SPAN de classe info</SPAN>
<LI>Deuxième ligne avec élément <SPAN CLASS="info">SPAN de <EM CLASS="info">classe</EM> info</SPAN>
</UL>
  • Première ligne de la liste, avec un élément SPAN de classe info (sans EM)
  • Deuxième ligne avec élément SPAN de classe info (avec EM)

InformationLa casse n'a pas d'importance : .rem ou .Rem ou .rEM sont identiques, mais pour des raisons pratiques, je vous conseille l'uniformité.

On parle de classe lorsque vous attribuez une règle de présentation à un ensemble d'éléments.

Par exemple, la classe "choix" des éléments P dont la syntaxe est  P.choix{font-size:25px}.

Vous pouvez également définir une classe par l'identification des objets ! Si un objet est identifié (ID="obj"), la syntaxe pour la classe est #obj.choix{font-size:25px}.

Vous pouvez bien sûr associer les deux : (.choix) et (#obj) mais dans cette association, il peut y avoir une différence de reconnaissance entre les deux grands navigateurs !



Codes HTML et visualisation de cette association Objet-Classe.
<STYLE TYPE="text/css">
<!--
P.choix {color:chocolate;font-size:25px}
.choix {color:chocolate;font-size:25px}
#obj.choix {color:chocolate;font-size:25px}
#obj {color:green;text-decoration:italic;font-size:20px}
#obj.autre {color:purple;font-weight:bold;font-size:15px}
-->
</STYLE>

Élément de classe "choix"

Objet "obj" et classe "autre" : Netscape ne reconnaît pas actuellement l'association...

Objet "obj" seul

Objet "obj" de classe "choix" : non reconnu également par Netscape.


b) Pseudo-classes

Un ensemble d'éléments qui répondent à un même critère de contexte forme ce que l'on appelle une pseudo-classe.
Ils sont spécifiés dans les feuilles de style, par l'ajout de deux points (":")

A:link {font-size:14px;color:royalblue}
A:visited {font-size:16px;font-style:italic;color:maroon}
A:active {color:red}

Parce que seules les ancres (Anchor) peuvent appartenir à active, link ou visited, on peut aussi les définir sans ajouter le A (qui spécifie les ancres) et donc, on peut écrire l'exemple précédent par :

:link {font-size:14px;color:royalblue}
:visited {font-size:16px;font-style:italic;color:maroon}
:active {color:red}

Actuellement, seules les pseudo-classes des ancres sont reconnues ! Dans la feuille de style liée (tutor.css) de ce tutoriel, on emploie les pseudo-classes présentées ci-dessus. Ainsi, lorsque vous avez cliqué sur un lien, celui-ci se met en caractères italiques...

InformationDe manière identique, CSS1 définit aussi des pseudo-éléments (pour la première ligne et pour le premier caractère) : visitez le site du W3C pour de plus amples renseignements (section pseudo-éléments).

c) L'assistant de création / modification des feuilles de style de WebExpert 2000

WebExpert vous donne la possibilité de créer vos feuilles de style très facilement, par l'intermédiaire d'un assistant très sophistiqué dans la version 2000. Un onglet spécifique y est consacré. Pour créer vos feuilles de style, choisissez l'onglet "CSS" et cliquez sur le ou les boutons qui vous intéressent :

L'onglet des feuilles de style...

Vous pouvez éditer votre document et insérer une feuille de style globale par le premier bouton , créer un lien (incorporé ensuite par WebExpert) vers une feuilles de style externe , créer une feuille de style intraligne   et enfin, créer ou éditer un fichier de feuille de style externe

1. Ajouter une feuille de style globale à votre document

Vous désirez que les liens (ancres internes/externes) ne comportent pas de soulignement, voyons comment procéder avec le nouvel onglet "CSS".

Vous avez remarqué sans doute la très grande facilité avec laquelle vous avez pu créer votre feuille de style globale. La seule difficulté qui pourrait s'avérer est celle de ne pas connaître tous les choix qui vous sont proposés, et nous vons conseillons donc de tester ceux-ci pour les découvrir...
Vous pouvez visualiser les différentes étape nécessaires en cliquant sur les boutons ci-dessous :

Code inséré par l'assistant 

<STYLE TYPE="text/css">
<!--
A {text-decoration: none}

/* Fin de la section de style généré par WebExpert le 4/04/00 16:11:04 */
-->
</STYLE>

2. Lien vers une feuille de style externe existante

Cette feuille de style peut être créée par l'assistant, en cliquant sur le bouton ,qui vous sera expliqué ci-dessous.

Vous pouvez également visualiser les trois étapes nécessaires en cliquant sur les boutons ci-dessous :

Code inséré par le second assistant

<link REL="StyleSheet" TYPE="text/css" HREF="tutor.css">

3. Création d'un style "intra ligne" par l'assistant

Une feuille de style intra-ligne est souvent employé par la balise "<SPAN>" mais il est possible de le faire pour de nombreux éléments du document. Internet Explorer l'accepte pour quasiment tous les éléments du document, tandis que Netscape ne l'accepte que pour certaines balises comme <SPAN> - <DIV> - <A>. C'est la raison pour laquelle il faut très souvent créer un "pseudo-ancre" ( "pseudo-lien") comme expliqué plus avant dans ce tutoriel.

Visualisez les différentes étapes ci-dessous :

Code inséré par le troisième assistant

<SPAN STYLE="color: #FF0000; font-size: 30pt">essai</SPAN>

4. Création et/ou modification d'une feuille de style externe, par l'assistant

Nous allons prendre pour exemple la création d'une feuille de style externe. La procédure est sensiblement la même pour la modification d'une feuille de style existante.

Visualisez les différentes étapes de la création/modification de la feuille de style externe :

Code de la feuille de style externe "tutor2.css" créée par l'assistant pour cet exemple

/* Rend invisible le paragraphe... */
P {visibility: hidden}

/* Fin de la section de style généré par WebExpert le 4/04/00 17:09:48 */


Feuille de style externe

Voici en exemple quelques règles de présentation :
BODY {background-image:URL(fp-w.jpg); background-color:#FFFFFF; color:#000080}
STRONG {font-weight:bold; font-size:16px;color:#000040}
EM {font-family:Arial;font-size:12px;text-decoration:italic;font-weight:bold;color:#000040}
P {text-align:justify}
H1 {font-weight:bold;font-size:30px;color:maroon}
H2 {font-style:italic;font-weight:bold; font-size:25px;color:mediumblue}
H3 {font-weight:bold; font-size:20px;color:mediumblue}
.bal {color:maroon;font-size:17px}
.sign {color:red;font-weight:bold;font-size:17px}
.guil {color:mediumblue;font-weight:bold;font-size:18px}
.attr {color:#000040}
.elem {color:green;font-size:20px;font-weight:bold;}
.invis {text-align:center;font-family:Arial;font-size:11px;position:absolute;visibility:hidden}
.vis {text-align:center;font-family:Arial;font-size:11px;position:absolute;visibility:visible}
#layer4 {border-width:4px;border-color:royalblue;border-style:ridge;width:620;}
.logo2 {text-align:center;font-size:30px;position:relative;top:500px;left:0px;z-index:-2;}
P STRONG.ex {color:yellow}
DIV.rem P STRONG {font-style:italic;color:green;font-size:150%}
UL EM.info {font-size:30px;color:yellow;background:navy}


Positionnement dynamique - DHTML - Effets de transition (IE) - Annexe
[Table des matières - Avant-propos- Accueil Page-Web]
Pour imprimer cette page