Fiche CSS : Les feuilles de styleObjet de la ficheÉtat de la fichePlan 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. Si on considère que le contenu d'une balise constitue un 'objet' de type texte et/ou image, et/ou formulaire, et/ou tableau etc., les feuilles de style vont s'appliquer sur ces 'objets" par l'intermédiaire de propriété et d'attributs pour en personnaliser l'apparence : style des textes, bordures, couleurs, tailles et dimensions. Par exemple si on applique une feuille sur le contenu de la balise body (balise constituant le corps du document, donc pour l'ensemble des informations visibles de la page HTML), les personnalisations définies dans la feuille de style s'appliqueront de base à l'ensemble du document, jusqu'à ce qu'une autre feuille ou règle de style appliquée à un autre 'objet' de la page HTML ne vienne se substituer aux spécification de base. 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. Il est très important de comprendre le mécanisme d'utilisation des feuilles de style car c'est l'architecture des fichiers Internet de demain, alors autant bien maîtriser le sujet et surtout prendre les bonnes habitudes dés le départ. 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 :
La bonne méthode est tout d'abord de définir des règles de style
pour l'ensemble du site (1). Par exemple on pourra définir
les caractères de base en police 'arial' de couleur noire et de
taille de 12 pixels , les liens hypertexte présents de couleur bleue
avec soulignement lorsqu'ils sont survolés et tous les tableaux
en bordures apparentes de couleur grise. Ces règles communes à
l'ensemble du site sont rassemblées dans un fichier externe implanté
au niveau de chaque page. Ainsi si on désire changer la taille des
caractères, une seule modification et tout le site disposera de la
nouvelle taille de caractère.
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 ligneExemplePour 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.
Déclaration d'URL dans une feuille de style externeSoit l'exemple suivant : votre page html se trouve dans le répertoire (1). Cette page HTML inclut une feuille de style externe localisée dans le répertoire (2), et certains éléments de cette feuille de style font appel à des images (par exemple d'arrière plan) se trouvant dans le répertoire (3). Insertion de la feuille de style externe dans la page HTML : <link rel="stylesheet" type="text/css" href="(2)/MonFichier.css"> Exemple de contenu de la feuille de style externe : p { font-family: Times New Roman; font-style: italic; color: red; } body{background-image:url('(3)/MonImageArrièrePlan')} On remarque que la déclaration de l'image (3)/MonImageArrièrePlan est faite par rapport à l'emplacement de la feuille de style elle même et non pas par rapport à l'emplacement de la page HTML qui contient la feuille de style externe. Types de MédiaLes feuilles de style permettent de pouvoir spécifier comment représenter un document pour différents médias : écran, impression, synthétiseur de parole, appareil braille, etc. Syntaxes@import url(impression.css) print; <link rel="stylesheet" type="text/css" href="MonFichier.css" média="screen">
<style type="text/css" media="braille"> Média
ExempleCliquez 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. Comment relier les propriétés de style internes ou externes à l'élément HTML sur lequel on désire qu'elles s'appliquent ?Par une règle de styleUne 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 :
Par le sélecteur CLASSIl 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 : Par des classes directement liées aux balises.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">
et dans le corps du document
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 :
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>
Le paragraphe 1 va utilisé le style défini par p.style1 de la feuille de style
Des classes dites universelles :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">
et dans le corps du document <p class="MonStyle">.....Paragraphe 1.....</p>
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) . Par le sélecteur idLe 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">
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. Par des combinaisons classes / sélecteurs / balisesCe 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
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 {....}. Regroupement de classes ou d'informations de style, cascade de classesRegroupement de classes ou d'informations de styleImaginons 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. Cascade de classes sur un élémentCette 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" Sélecteurs contextuelsOn 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> qui donne le résultat suivant Sélecteur descendantCette 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; } 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. Sélecteur adjacent +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).
Sélecteur d'enfant >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.
Si la règle de style devient
Sélecteurs d'attributLes 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.
Exemples
Priorités des règlesValeur ! important ou ! importantp { 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. Priorités et conflitsLes 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.
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.
Pour simplifierLa dernière règle lue est prioritaire sachant que :
Les pseudo-classesLes 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.
Les pseudo-classes dynamiquesLes 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:
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 pseudo-classes de lienLes pseudos-classes de lien sont des
pseudo-classes spécifiques à la balise <a> :
Les pseudo-classes de texteLes 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>).
Attention à la syntaxe (pour toutes les pseudo-classes)Exemples pseudo-classesApplication de la notion de pseudo-classe dynamique hover , active et first-letter Les pseudo élémentsGénéralitésLes 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. Prendre les bonnes habitudesJe construis un site homogène. Pour cela :
Application au projet de site web
Correction
<div id="titreSite">
<div id="BoiteChoix">
<div id="BoiteCatalogue">
#BoiteCatalogue th:first-letter { font-size: 200%; color: green; }
<html>
<html> Attention aux emplacements relatifs
Voici le résultat et le code |