Fiche CSS : Les feuilles de styleObjet de la ficheÉtat de la fiche
Plan de la fiche
Avant proposGénéralitésCSS pour Cascading StyleSheets Une feuille de style est un ensemble de règles pour personnaliser l'apparence des éléments d'une page Internet.
Trois séries de styles CSS d'origines différentes sont susceptibles d'être concurrentes ou combinées pour un même élément (X)HTML. Les feuilles de style ont trois origines différentes :
Les champs d'action de ces trois feuilles de style vont se
recouper, leur interaction dépendant des règles de la cascade.
Contenu de la section CSSAvantagesLe but principal est de séparer autant que possible
le contenu lui même de sa mise en forme mais aussi de préparer le
site à l'évolution actuelle (XHTML certification W3C) qui tend à
supprimer les balises de style du corps du document.
Principe général des feuilles de style gérées par l'auteur des documents HTMLLa déclaration des feuilles de style gérée par les auteurs de page HTML peut se faire à partir de 3 niveaux :
Du point de vue de l'ordre d'application des règles une bonne habitude est à retenir : c'est la dernière règle lue qui est prioritaire et s'applique. On trouvera des précisions sur ce point dans le chapitre Priorités des règles. Feuilles de style internes (entre les balises <head> et </head>)Syntaxe de définition des règles de style internes :![]() Attributs
ExemplePour illustrer le propos nous allons prendre un exemple avec le
sélecteur <p> qui est une balise de
paragraphe et nous allons lui appliquer une couleur et une police de texte. Le but de
l'exemple est simplement de montrer le mécanisme de gestion séparée
entre la structure du document et la présentation.
Point importantHormis la syntaxe du sélecteur (p dans l'exemple), le mode de déclaration des autres éléments suivra toujours le même principe. Veillez à bien respecter la syntaxe pour les feuilles de style:
Feuilles de style en ligneLes règles de style s'appliquent directement au niveau de chaque élément en utilisant l'attribut style. Syntaxe de définition des règles de style en ligne![]() ExemplePour illustrer le propos nous allons prendre 2 paragraphes. Le premier classique utilisant les styles par défaut du navigateur et un second avec le même contenu mais sur lequel nous allons appliquer un style spécifique : caractères bleu, de grande taille, en italique gras et souligné. Feuilles de styles centralisées sur fichiers externesGénéralitésDans des pages HTML importantes les règles de style et les classes peuvent être très longues. De plus pour avoir une homogénéité du site il est fortement souhaitable que ces règles et classes soient reconduites sur les autres pages. Il y a la possibilité de les recopier sur chacune des pages du site mais si on veut modifier un élément il faudra le modifier sur toutes les autres pages : pas très pratique. Une autre méthode consiste à placer les règles et les classes dans un fichier séparé qui porte l'extension .css
. Ce fichier peut être construit et édité à l'aide du même éditeur Bloc Notes qui nous a servi jusqu'à maintenant pour construire la page HTML de projet.
Contenu du fichierLe fichier externe est un fichier texte contenant des règles de style définies de la même manière que pour les règles internes. Une seule différence : on ne doit pas définir les balises d'encadrement <style type="text/css"> et </style>. Exemple Fichier externe MonFichier.css dont le contenu est le suivant :
L'intégration dans la page HTML prendra la forme suivante Nota : les 2 modes (style externe et style interne) peuvent cohabiter comme on peut le voir ci dessous. On peut ranger les règles et classes communes à plusieurs pages dans un fichier externe et conserver dans la page elle même des règles et classes spécifiques à cette page. Intégrer les feuilles de style externesLa règle @importÀ l'intérieur de la balise <style> - ou d'une
feuille de style CSS externe -, on peut employer la règle @import
un peu comme on se sert de la balise <link>. Cette directive
permet encore là d'inclure une feuille de style CSS externe au
document. Les règles @import doivent précéder toutes autres règles
dans la feuille de style @import url(feuille2.css) media : média est optionnel et égal à all par défaut.
Plusieurs directives @import peuvent être utilisées pour charger et combiner
plusieurs feuilles de style. Cela peut être utile pour séparer les
règles CSS concernant la typographie, les couleurs, la mise en page,
etc.
La directive linkGénéralitésL'écran et l'imprimante par exemple sont des modes de sortie très différents pour des données structurées agréablement. Ces deux modes de sortie ont leurs propres règles. Pendant qu'à l'écran des écritures claires auront belle allure sur des fonds sombres, ce n'est pas une bonne solution pour la sortie à l'imprimante. Pour la sortie à l'imprimante, des retraits de paragraphes d'au moins 2cm auront meilleur aspect, alors que par les mentions correspondantes le précieux espace d'affichage à l'écran sera peut être gaspillé. C'est pourquoi, vous pouvez incorporer différents fichiers de feuilles de style pour les différents modes de sortie, qui peuvent contenir des définitions de formats différentes. Le logiciel doit décider lors de la présentation des pages quel fichier CSS incorporé est déterminant. Si le navigateur Web par exemple affiche les pages à l'écran, il doit utiliser le fichier CSS qui fixe expressément l'"écran" comme mode de sortie, et si l'utilisateur imprime une page, le navigateur doit employer à la place le fichier CSS que vous mentionnez pour le mode "imprimante". <link rel="stylesheet" media="screen" href="screen.css"> Fonctionnement détaillée de la directive <link><link rel="stylesheet" type="text/css" href="feuille1.css" media="all" /> Le but premier de cet élément HTML est de lier tout document externe au document (X)HTML
contenant la balise <link>. CSS utilise cet élément pour lier une feuille de style externe à un document XHTML.
type : indique le type de données à charger, toujours text/css.
|
Mentions | Significations |
---|---|
media="all" | Le fichier CSS s'applique à tous les types de médias. |
media="aural" | Le fichier CSS s'applique à des systèmes de restitution vocale assistée par ordinateur. |
media="braille" | Le fichier CSS s'applique à des périphériques de sortie avec ce qu'on appelle une "ligne Braille". Le texte y est porté sur la structure modifiable en surface du matériel de la ligne Braille et lue au toucher avec le doigt. Cette forme de média de sortie est conçue pour les aveugles. |
media="embossed" | Le fichier CSS s'applique à des imprimantes en Braille. Comme braille, embossed est conçu pour les aveugles. |
media="handheld" | Le fichier CSS s'applique à l'affichage sur des ordinateurs de poche très petits comme des agendas électroniques. |
media="print" | Le fichier CSS s'applique à l'impression sur papier. Les navigateurs Web doivent utiliser ces définitions de format quand l'utilisateur désire imprimer la page Web. |
media="projection" | Le fichier CSS s'applique à la projection de données avec des rétroprojecteurs ou appareils similaires. |
media="screen" | Le fichier CSS s'applique à l'affichage à l'écran. |
media="tty" | Le fichier CSS s'applique à des médias de sortie non graphiques avec une largeur de signes invariable comme par exemple des télex. |
media="tv" | Le fichier CSS s'applique à des médias de sortie semblables à la télévision avec défaut de soutien pour le défilement de l'image. |
Cliquez sur le bouton "le résultat" ci dessous, vous obtenez une page web (popup) présentant du texte de couleur verte. Faite Fichier puis Aperçu avant impression comme indiqué ci contre et vous constaterez que le texte à imprimer est en italique et de couleur rouge. Lors de l'affichage de la page sur l'écran le navigateur utilise la feuille de style avec le media="screen", et utilise la feuille de style avec le media
print lorsque la commande vient d'une demande d'impression. Ainsi les feuilles de style offrent elles la possibilité d'incorporer différents fichiers de feuilles de style pour les différents modes de sortie, ces fichiers contenant habituellement des définitions de formats différentes, et le navigateur décide lors de la présentation des pages quel fichier CSS incorporé est déterminant.
Une règle de style comporte une même feuille de style pour toutes les sélecteurs de même nom.
Pour relier une balise à une feuille de style il suffit de déclarer dans la
feuille de style pour le nom de la balise considérée (<p> dans l'exemple) les propriétés que l'on
veut définir pour cette balise sous la forme :
p { propriété1: valeur; propriété2:
valeur ;}. Les propriétés de style appliquées seront
valides pour toutes les balises p du document.
Il peut s'avérer intéressant d'affecter des styles différents à des sélecteurs de même nom. Pour cela les spécifications CSS ont introduit le concept de classe.
On distingue 2 types de classe :
La définition des classes est identique à celles des styles, seule la syntaxe de définition du sélecteur (balise) est différente. Elle consiste à préciser la balise sélectionnée (comme pour une déclaration de style), puis de lui ajouter un point (.) et le nom que l'on souhaite donner à la classe. Le nom de la classe peut-être composé de lettres (accentuées ou non), de chiffres et de tirets.
<style type="text/css">
/*Commentaires Blabla .... */
p.Style1 { propriété 1: valeur; propriété 2: valeur}
p.Style2 { propriété 1: valeur; propriété 2: valeur}
</style>
et dans le corps du document
<p class="Style1">.....Paragraphe 1.....</p>
<p class="Style2">.....Paragraphe 2.....</p>
Application de la notion de classe à une même balise
Remarques sur le code
3 règles de style sont définies dans cet exemple :
1. Une règle de style générale applicable à toutes les balises p du document :
p {font-style: normal; color: green; font-family: Arial;}
2. Une classe de style style1 uniquement disponible pour les balises p disposant de la classe style1 :
p.style1{ font-style: italic; color:blue ;font-family: Times New Roman;}
3. Une classe de style style2 uniquement disponible pour les balises p disposant de la classe style2 :
p.style2{ color:red ;font-family: Courrier;}
Pour appliquer une classe dans le code HTML, il suffit de rajouter un attribut class à la balise :
<p class="style1">paragraphe 1 avec la classe style1</p>
<p class="style2">paragraphe 2 avec la classe style2</p>
<p>paragraphe 3 avec la classe générale des balises p</p>
Le paragraphe 1 va utilisé le style défini par p.style1 de la feuille de style
Le paragraphe 2 va utilisé le style défini par p.style2 de la feuille de style
Le paragraphe 3 ne possédant aucune classe va utiliser automatiquement la règle de style générale applicable à toutes les balise p du document.
Il est possible de ne pas préciser de nom de balise. Dans ce cas la classe pourra être utilisée dans n'importe quelle balise pour laquelle le style sélectionné a un sens ! On parle alors de classe universelle (parfois classe indépendante). La définition d'une telle classe se fait en précédant tout simplement le nom de la classe d'un point sans préciser de balise quelconque.
<style type="text/css">
/*Commentaires Blabla .... */
.MonStyle { propriété 1: valeur; propriété 2: valeur}
</style>
et dans le corps du document
<p class="MonStyle">.....Paragraphe 1.....</p>
<h2 class="MonStyle">.....Titre.....</h2>
Application de la notion de classe dite universelle
Remarques sur le code
Dans la déclaration de style ce n'est plus un nom de balise qui apparaît mais un nom de classe précédé d'un point. Attention dans le corps du document class="MonStyle" il n'y a pas de point avant MonStyle.
Dans le corps du document on remarque que class (des balises p et h2) fait appel au même nom de style (.MonStyle) .
Le principe général est strictement identique en terme de contenu des styles au principe exposé dans le paragraphe précédent 'sélecteur CLASS' , sauf que le style ne va plus être relié par l'attribut class mais par l'attribut id. Cet attribut est permis sur tout élément et sa valeur doit absolument être unique au sein d'un document.
Syntaxe coté corps du document
<p id="MonIdentificateur">.........</p>
et coté feuille de style
<style type="text/css">
#MonIdentificateur{ propriété 1: valeur; propriété 2: valeur}
</style>
On notera le # utilisé pour les liaisons aux attributs id (à la
place de . pour les liaisons aux attributs class).
Pas de doublons de valeurs permis. Faites bien attention si vous
utilisez l'attribut id.
Ce mode de syntaxe en cascade permet d'atteindre finement l'élément ou le groupe d'éléments auquel on veut affecter un style.
Exemple
<style style="text/css" media="screen">
#MonIdentificateur td {color:green;} #MonIdentificateur td.MaClasse1 {font-size:3em;font-style:italic} #MonIdentificateur td a {color:red;text-decoration:underline;font-size:2em;font-style:italic} </style> |
![]() |
<body> <table id="MonIdentificateur"> <tr> <td class="MaClasse1">Hello</td> <td>Bonjour</td> </tr> <tr> <td colspan="2"><a title="test" href="#" > Voici Mon lien</a></td> </tr> </table> <a title="test" href="#" > et mon autre lien</a> </body> |
Commentaires
De base toutes les cellules (td) de l'élément identifié par id="MonIdentificateur" (table) contiendront du texte de couleur verte en gras (#MonIdentificateur td {...} ).
Pour affecter spécifiquement un style à une ou des cellules (td) de la table identifiée par id="MonIdentificateur" on peut rajouter une classe spéciale : #MonIdentificateur td.MaClasse1 {...}. De la même façon pour attribuer des styles particuliers à des éléments (a) et cela uniquement pour les cellules de cette table, la syntaxe du sélecteur sera #MonIdentificateur td a {....}.
Imaginons la feuille de style suivante définissant trois classes universelles, .Monstyle1 , .Monstyle2 et .Monstyle3 qui ne diffèrent l'une de l'autre que par quelques propriétés (color dans cet exemple).
Il est possible de regrouper ces informations de la manière suivante.
Cela est intéressant dans le cas ou vous avez des classes avec beaucoup de propriétés mais très proches entres elles.
Cette construction reduit la complexité d'écriture.
Imaginons le cas d'un cube dont chaques faces ont les mêmes caractéristiques principales mais diffèrent par leurs couleurs. On va faire la déclaration de style suivante.
et la déclaration html suivante
La classe "cotes" suivie de la classe "cX" sont aplliquées aux éléments <div> à l'aide de la syntaxe class="cotes cX"
On peut appliquer un style à un attribut dans un contexte donné, c'est-à-dire en fonction des éléments qui l'entourent grâce à des sélecteurs contextuels.
Soit la construction HTML suivante qui va nous servir de base:
<p><i> Nota : </i>Cette section est <b>très
importante</b> et son assimilation <b><i>nécessaire</i></b> pour la
suite du programme.</p>
<b> Soyez très attentif </b>
qui donne le résultat suivant
Cette syntaxe permet de créer une règle ne s'appliquant que lorsque un élément est imbriqué dans un autre élément, pouvant lui même être imbriqué.
La règle de style suivante met en gras et en rouge les contenus encadrés par une balise b, elle même inclue dans une balise p
p b { font-weight: bold; color: red; }
Ce qui donne le résultat
ci contre
Nota :Soyez très attentif n'est pas concerné car bien qu'encadré par une balise
b, cette dernière n'est pas encadré par une balise p
Une syntaxe de règle de style type table td p a appliquera la règle uniquement au contenu de tous les éléments a faisant partie d'un paragraphe p, à l'intérieur de la cellule d'une table.
Cette syntaxe permet de créer une règle ne s'appliquant que lorsque un élément
suit immédiatement un autre élément (consécutif).
La règle suivante ne sélectionne que les mots « très importante »
premier contenu encadré par la balise b, suivant
immédiatement un contenu encadré par une balise i.
i + b { font-weight: bold; color: red; }
Cette
syntaxe permet de créer une règle ne
s'appliquant que lorsque un élément Y est fils direct d'un élément
X.
La règle suivante ne sélectionne que le mot «nécessaire» qui est
le seul entouré de balises i, directement imbriquées dans une balise b).
b > i { font-weight: bold; color: red; }
Si la règle de style devient
p > i { font-weight: bold; color: red; }
Alors uniquement le texte Nota sera concerné : contenu encadré par la balise i suivante immédiate d'une balise p
Les sélecteurs d'attribut ciblent les éléments en fonction de la présence d'attributs ou de leurs valeurs. Il existe quatre types de correspondance possibles :
[att] : Correspond à tout élément ayant un attribut att, quelle que soit sa valeur.
[att=val] : Correspond à tout élément dont l'attribut att contient exactement la valeur val.
[att~=val] : Correspond à tout élément dont l'attribut att contient une liste de valeurs séparées par des espaces et dont l'une d'elles est val. val ne peut alors contenir d'espaces.
[att|=val] : Correspond à tout élément dont l'attribut att contient une liste de
valeurs séparées par des tirets débutant par val. L'usage principal concerne les codes de langue spécifiés par l'attribut lang (xml:lang
en XHTML), par exemple "en", "en-us", "en-gb", etc.
Exemples
p { color: red ! important ; }
Quand figure des déclarations avec " ! important ", elles surclassent les déclarations normales. Cette valeur apparaît en fin de déclaration du style du sélecteur.
Les styles auteur, utilisateur et navigateurs ont des poids différents, qui dépendent de l'utilisation éventuelle de la propriété !important. Du plus faible au plus fort on trouve :
Si des conflits de style ne peuvent être résolus, le résultat final du tri est dicté par l’ordre
linéaire que le navigateur donne aux règles de style.
Généralement, quand 2 règles ou davantage sont équivalentes, celle lue en dernier gagne.
Mais qu’en est-il des styles importés ? Comment un navigateur
détermine dans quel ordre les appliquer ? Et bien les styles
@importés sont toujours appelées depuis une feuille de style externe
ou interne, donc les styles @importés sont toujours traités comme
partie intégrale de la feuille qui l’appelle.
D’après la spécification : La règle '@import' permet aux
utilisateurs l'importation de règles de style à partir d'une autre
feuille de style. Les règles @import doivent précéder toutes autres
règles dans la feuille de style.
<style type="text/css">
@import url(extra.css);
body {color: blue; }
p {color: green; }
</style>Pour les feuilles de style auteur, l’ordre de lecture est le
suivant :
les fichiers externes sont lus en premier (dans l’ordre dans lequel
ils sont appelés, en commençant par les styles @importés),
ensuite les styles internes si on considère qu’ils sont déclarés
après les styles externes (en commençant par les styles @importés
s’il y en a),
enfin les styles en-ligne sont lus en dernier.
Cela signifie que les styles en-ligne prennent le dessus sur tous les autre styles sauf sur ceux qui ont le mot-clef !important.
Si une feuille de style externe est appelée après une feuille de
style interne, alors les règles de la feuille de style externe
prennent le dessus sur celles de la feuille interne. Ce qui compte
réellement est l’ordre d’apparition des différentes feuilles de
style auteur dans le code source (X)HTML.
La feuille de style par défaut du navigateur arrive toujours avant
toutes les autres feuilles de style.
Quand le navigateur a lu toutes les feuilles de style et que 2
règles ou plus sont en conflit, celle lue en dernier par le
navigateur gagne, en considérant que les poids sont égaux.
La dernière règle lue est prioritaire
sachant que :
Les pseudo-classes permettent
d'affiner le style appliqué à un certain nombre de balises en
définissant une réaction à un événement ou bien à la position
relative de la balise au sein des autres balises. Nous ne
retiendrons ici que les pseudo-classes les plus usuelles et
intéressantes pour nous.
Contrairement aux classes, le nom des pseudo-classes est prédéfini,
il n'est donc pas possible de créer ses propres pseudo-classes.
Les pseudo-classes dynamiques
permettent de modifier le style d'une balise en fonction d'un
événement (mouvement de la souris, clic, ou bien appui sur une
touche du clavier). Il en existe trois:
1.
La pseudo-classe :hover permet d'affecter un style à la balise sélectionnée lors d'un survol par le curseur de la souris.
2.La pseudo-classe :focus permet de définir un style à la
balise sélectionnée lorsque le focus lui est donné (par exemple lors
d'un clic dans un élément de formulaire).
3.La pseudo-classe :active permet de définir un style à la
balise sélectionnée lorsque l'utilisateur clique sur l'élément
(entre le moment où l'utilisateur clique sur le bouton de la souris
et celui où il le relâche).
Nota : Les pseudo-classes dynamiques ne sont pas reconnues de la même façon par tous les navigateurs, donc attention aux surprises. Les déclarations peuvent être de type Règles de style (même style pour toutes les balises <a> du document ou de type sélecteur class (style personnalisé par balise <a>) (voir le paragraphe précédent "Comment relier les propriétés de style à l'élément HTML sur lequel on désire qu'elles s'appliquent."
Les pseudos-classes de lien sont des
pseudo-classes spécifiques à la balise <a> :
1.La pseudo-classe :link permet de définir le style des liens
hypertextes n'ayant pas encore été consultés par le client.
2.La pseudo-classe :visited permet de définir le style des liens
hypertextes que le client a déjà visités
Il est possible que certains navigateurs considèrent un lien comme
n'ayant pas été visité s'il n'est pas consulté pendant une longue
période de temps.
Les pseudo-classes de texte
permettent d'appliquer un style à une partie du texte délimité par
les balises auxquelles elles s'appliquent. Ainsi les pseudo-classes de
texte s'utilisent généralement conjointement avec la balise de paragraphe (<P>).
Il existe deux pseudo-classes de texte :
:first-line : permet d'appliquer un style à la première ligne d'un
paragraphe. P:first-line { text-transform: uppercase }
:first-letter : permet d'appliquer un style à la première lettre
d'un paragraphe afin de produire un effet typographique. L'exemple
suivant par exemple double la taille et met en gras la première
lettre d'un paragraphe : P:first-letter { font-size: 200%; font-weight:
bold; }
Application de la notion de pseudo-classe dynamique hover , active et first-letter
Les pseudo éléments permettent d'insérer du texte, des images (auxquels ont peut appliquer des styles CSS), avant (avec before) et / ou après (avec after) le contenu d'un élément grâce à l'utilisation de la propriété content et de ses paramètres. Ceci est très utile lorsqu'une information doit être répétée un grand nombre de fois: au lieu de l'insérer un grand nombre de fois et d'augmenter la taille de la page HTML (ce qui a un impact sur le temps de chargement), il est ainsi possible de l'écrire une seule fois dans une feuille de style CSS. Autre chose intéressante est la réalisation d'indexation à l'aide de compteurs disponibles avec la propriété countent. Un bémol avec la propriété content qui n'est pas encore disponible avec Internet Explorer. Le fonctionnement plus détaillé de ce mécanisme est présenté dans la fiche structuration automatique des pages.
Si votre navigateur le permet vous pouvez observer l'indexation des titres et sous titres sur cette page.
Je construis un site homogène. Pour cela :
<div id="titreSite">
Bienvenue sur <b>La Boutique du Fleuriste</b>
<img src="../Images/Site/fleur_bouquet.png" width="78" height="89" alt="" />
</div>
<div id="BoiteChoix">
<p>Choisissez et commandez</p>
<dl title="Votre choix">
<dt>Par type</dt>
<dd>........</dd>
<dd>........</dd>
</dl>
</div>
<div id="BoiteCatalogue">
<table summary="Le catalogue">
<caption>Notre catalogue</caption>
<tbody>
<tr>
<th abbr="Colonne Fleurs" scope="col">Fleurs</th>
..............
</tbody>
</table>
</div>
#BoiteCatalogue th:first-letter { font-size: 200%; color: green; }
<html>
<head>
<title>La Boutique du Fleuriste</title>
<link rel="stylesheet" type="text/css" media="screen" href="CSS/CSSExterneScreen.css" />
</head>
<body>
-----
<html>
<head>
<title>La Boutique du Fleuriste</title>
<link rel="stylesheet" type="text/css" media="screen" href="../CSS/CSSExterneScreen.css" />
</head>
<body>
-----
Voici le résultat et le code