Les CSS

le couple Propriété : Valeur

Une propriété CSS ne peut s'appliquer si on ne lui attribue pas de valeur, on parle donc du couple indissociable Propriété : Valeur. Le couple Propriété : Valeur se compose de trois éléments :

  1. Le nom de la propriété, toujours en minuscules, exemples : width ou margin
  2. Le séparateur deux points :
  3. La valeur de la propriété qui peut être :
    • Une valeur numérique, exemples : width : 80% ou margin : 20px
    • Une valeur nominale, exemples : text-align : justify ou display : inline

Si plusieurs couples Propriété : Valeur se suivent, ils doivent être séparés par des points-virgules.

Si vous n'avez qu'un seul couple Propriété : Valeur ou si celui-ci est situé en fin de ligne, le point-virgule n'est pas obligatoire. Il est cependant fortement recommandé au cas où vous ajouteriez ultérieurement d'autres couples Propriété : Valeur. Voir l'exemple ci-dessous :

width:80%; margin:20px; text-align:justify; display:inline;

Les espaces entre les noms, les valeurs et les signes de ponctuations n'ont aucune importance. Par contre ATTENTION, l'absence de l'un ou l'autre des signes de ponctuation inhibe le fonctionnement des propriétés qui sont écrites à l'aval de cette erreur dans le code CSS.

OÙ incorporer les propriétés CSS?

Il existe quatre possibilités d'incorporer les propriété CSS au sein d'une page HTML :

  1. La feuille de style exterieure et le style importé
  2. La feuille de style externe
  3. La feuille de style interne
  4. Le style En ligne

Je décrit ces modes d'incorporation des propriété CSS dans l'ordre du plus loin au plus proche de l'élément html, car c'est l'ordre dans lequel ils apparaissent dans le code.

Je vous rappelle qu'en vertu du principe C'est le dernier qui a parlé qui a raison, priorité est donnée aux propriétés de la dernière feuille de style incorporée dans le code. Dans cette logique, le style En ligne a priorité sur tous les modes d'incorporation qui le précèdent.

La feuille de style exterieure et le style importé

La feuille de style peut être extérieure au site et jointe par un lien hypertexte. Ainsi, si vous ouvrez le code de la page d'accueil de Yahoo, vous trouverez dans head la ligne ci-dessous qui ouvre le lien vers la feuille de style de cet opérateur :

<link rel="stylesheet" type="text/css" href="http://l.yimg.com/d/lib/eu/nw/200810131314/story.css"/>

Notons entre parenthèses, que vous pouvez entièrement reconstituer une page Yahoo en recopiant son code dans un fichier html vierge, car même les images sont accessibles par des adresses url non verrouillées.

Les recommandations du W3C offrent également la possibilité d'importer des feuilles de style externes au niveau de la déclaration du style de document, en insérant la commande @import url immédiatement après l'élément style. Le lien vers la feuille de style de Yahoo aurait ainsi pu s'écrire :

<style type="text/css">
@import url(http://l.yimg.com/d/lib/eu/nw/200810131314/story.css);
</style >

La feuille de style Externe

La feuille de style externe est idéale lorsque les styles que vous avez définis doivent s’appliquer à plusieurs pages de votre site, voire à son ensemble. Avec une feuille de style externe, vous pouvez changer le style de l'intégralité votre site uniquement en changeant le code d’un fichier (celui de la feuille de style).

Chaque page de votre site doit alors faire référence à la feuille de style. Cela se fait en utilisant la balise <link> à insérer dans l’entête de votre page, c'est à dire entre les balises <head> et </head>.

L'adresse de la feuille de style que l'on souhaite joindre, doit être placé comme valeur de l'attribut href de <link>

Ainsi pour cette page, les liens vers les feuilles de style externes du site sont les suivants  :

<link rel="stylesheet" media="all" href="../../../TutosNP_Tous.css" type="text/css">
<link rel="stylesheet" media="all" href="../Initiation.css" type="text/css">
<link rel="stylesheet" media="screen" href="../../../TutosNP_Ecran.css" type="text/css">
<link rel="stylesheet" media="print" href="../../../TutosNP_Impr.css" type="text/css">

Dans cet exemple, vous pouvez remarquer deux choses :

  1. L'introduction de l'attribut media
    • media="all" : la feuille de style s'applique à tous les supports.
    • media="screen" : la feuille de style s'applique uniquement au support Écran.
    • media="print" : la feuille de style s'applique uniquement au support Feuille Imprimée.
  2. Deux feuilles de style externes media="all" s'appliquent à cette page.
    Si deux propriétés de même identifiant figurent dans ces deux feuilles ce sont celles de la feuille qui est placée en dernier dans le code qui ont priorité, toujours en vertu du principe C'est le dernier qui a parlé qui a raison.

La feuille de style Interne ou méthode imbriquée

<head>
<style type="text/css">
body {
background-image: url("images/back40.gif")
}
h1{
color:#9D8;
}
p {
font-family: helvetica;
}
</style>
</head>

Une feuille de style interne peut être utilisée quand un seul document doit adopter un style unique.

Dans le cas de la méthode imbriquée, les styles sont définis dans l’en-tête du document HTML : il suffit d’en faire la déclaration dans l'élément <head>   de la page en utilisant la balise <style> et son attribut type="text/css", voir ci-contre.

Si deux propriétés de même identifiant figurent à la fois dans la feuille de style externe et dans la feuille de style interne ce sont les propriétés de cette dernière qui ont priorité sur la précédente, car bien sûr selon le principe ...., elle est placée en dernier dans le code.

Le style En ligne

Le style En ligne consiste à incorporer les couples propriété : valeur dans l'attribut style des éléments html du corps de la page (entre <body> et </body>) . Cette dernière option mélange style et contenu, et on perd de ce fait les avantages d’une feuille de style CSS, elle est donc déconseillée dans tous les bons manuels. Elle est pourtant bien pratique dans deux cas :

  1. Quand vous mettez en forme une nouvelle page, il est bien plus facile de tester le code CSS directement sur les balises plutôt que de faire des allers et retours entre votre page de travail et une feuille de style externe. Une fois que cette mise en forme est terminée, vous pouvez, pour respecter l'orthodoxie, exporter votre code CSS en interne ou en externe, comme bon vous semble.
  2. Quand vous avez besoin d'adapter aux particularités d'une feuille une règle de style générale.
    Ainsi cette option est utilisée dans le paragraphe précédant, pour adapter à la taille de la colonne d'exemple, la largeur et la hauteur de l'élément <p>dont par ailleurs les autres propriétés sont définies par le sélecteur .PseudoTADr dans la feuille de style externe du site.

<p class="PseudoTADr" style="width:44%; margin-top:-25px">

Le style En ligne est le dernier qui s'applique dans un élément, donc il a toujours priorité sur toutes les feuilles de style qui peuvent être placées en amont dans le code.

Les blocs de règles

Si dans le style en ligne les couples Propriété : Valeur sont attachés directement à l'élément HTML par l'attribut style, dans les feuilles de style internes ou externes, les propriétés sont regroupées par blocs de règles, délimités par les accolades { }.

Chaque bloc est identifié par un Sélecteur qui permet de le lier aux éléments structurels de la page HTML auxquels les propriétés concernées doivent être appliquées. La syntaxe d'écriture des blocs de règles peut donc se schématiser comme suit :

Sélecteur{ propriété : valeur ; propriété : valeur ; propriété : valeur ; }

p { width:300px; height:50px; padding:10px; color:#000; }

Comme dans la syntaxe du HTML, le respect des signes de ponctuation est impératif :

Possibilités d'écriture abrégée

Ces possibilités sont adaptées aux propriétés padding, margin, border, background ou font .

Pour padding et margin, les valeurs des propriétés des différents côtés de l'élément, peuvent être regroupées en une seule ligne, dans l'ordre top, right, bottom, left.

En outre si les valeurs des margin verticales sont identiques ainsi que celles des margin horizontales, elles peuvent regroupées dans l'ordre margin : verticales horizontales. Ce mode de regroupement condensé peut s'appliquer également aux padding. Voyez les deux exemples ci-dessous :

#Cadre{
padding-top:10px;
padding-right:20px;
padding-bottom:10px;
padding-left:20px;
}

peut être abrégé en :

#Cadre{
padding:10px 20px;
}

.Bandeau{
margin-top:10px;
margin-right:20px;
margin-bottom:30px;
margin-left:50px;
}

peut être abrégé en :

.Bandeau {
margin:10px 20px 30px 50px;
}

Les couples Propriété : Valeur, margin : 10px ou padding : 20px signifient que les valeurs attribuées ici à margin ou à padding s'appliquent aux quatre côtés de l'élément.

.Exemple{
border-width:3px;
border-style:solid;
border-color:#fCf8e9;
}

peut être abrégé en :

.Exemple{
border:3px solid #fCf8e9;
}

Pour border, on peut regrouper les propriétés épaisseur, style et couleur en une seule commande en respectant l'ordre dans lequel ces propriétés sont ici décrites.

Dans l'exemple ci-contre, les propriétés de border s'appliquent aux quatre côtés de l'élément. Cependant comme pour margin et padding ces propriétés peuvent être détaillés pour chaque côté, par exemple :

  • border-top: 3px solid #fCf8e9;
  • border-bottom: 3px solid #525256;

p{
font-family:"Comic Sans MS";
font-style:italic;
font-weight:bold;
font-size:14px;
line-height:16px
}

peut être abrégé en :

p{font: italic bold 14px/16px "Comic Sans MS"}
}

Pour font, les propriétés peuvent être regroupées en respectant l'ordre style de police, taille et éventuellement interligne enfin, famille de police.

Les commentaires

Dans une feuille de style qui peut être longue, il est judicieux d'ajouter des éléments d'information, de division ou de repérage.
Comme dans le code HTML, ces éléments doivent insérés entre des balises de commentaires, celles-ci sont pour l'ouverture : /* et pour la fermeture : */. Voici un exemple de division de la feuille de style de ce site:

/*-----Style14092011-----*/

Notons que comme dans le code html, les balises de commentaires peuvent également être utilisées pour désactiver momentanément des lignes du code CSS durant les essais de mise en page.

Les SÉlecteurs

Un sélecteur est une sorte d'étiquette qui identifie un bloc de règle dans une feuille de style et permet de lier ce bloc de règle à un élément de la page HTML. Un sélecteur peut consister en un sélecteur simple ou en une succession d'un, ou plusieurs, sélecteurs simples, séparés par des combinateurs.

Ces combinateurs sont : les caractères blancs et les caractères">" et "+". Des caractères blancs peuvent être insérés entre un combinateur et ses sélecteurs simples.

Un sélecteur simple peut être :

Nous nous limiterons ici à la description des caractéristiques et du fonctionnement des sélecteurs simples. Pour des informations plus pointues sur les sélecteurs consultez le site très complet de YoyoDesign .

Description des sélecteurs

Le Sélecteur universel

Le sélecteur universel, noté * , est vérifié pour n'importe quel type d'élément. Il agit sur chacun des éléments de l'arbre du document.

Le Sélecteur de type

h1{
margin-top:140px;
margin-bottom:30px;
border-bottom-style:dotted;
text-align:left;
font-size:170%;
text-transform:uppercase;
}

Un sélecteur de type ou de balise est tout simplement un sélecteur désigné par la balise de la page HTML à laquelle sont attachés des éléments de style. Toute balise peut ainsi servir de sélecteur.

Voici ci-contre, le propriétés du sélecteur h1 (titre principal) de ce site.

Le Sélecteur de classe

Écriture du sélecteur de Class .texte dans le code CSS :

.texte {
color:#fff;
font-weight: bold;
}

Attribution du sélecteur de Class .texte à l'élément <p> :

<p class="texte">

Le sélecteur de classe ou (class) permet de définir un style qui pourra être appliqué à n'importe quel élément HTML du site.

Dans la feuille de style, le bloc de règles est identifié par un nom quelconque précédé d'un point.

Dans le code HTML le nom du sélecteur SANS LE POINT est placé comme valeur de l'attribut class de l'élément, voir ci-contre :

Un sélecteur de classe peut être appliqué à n'importe quel élément, tous les éléments ayant le même sélecteur de class auront donc le même style. Ainsi la classe .PseudoTADr de l'exemple précédent pourrait, outre à p,aussi bien être appliqué à div, à span ou à em.

Un même élément peut également se voir doter de propriétés différentes selon le sélecteur qu'on lui attrivbue. Un élément p peut par exemple avoir un texte de couleur blanche si on lui attribue le sélecteur class="texteBlanc" (color:#fff). Mais nous pourrions tout aussi bien lui attribuer un nouveau sélecteur class="texteJaune" qui lui confèrerait un texte de couleur jaune (color:#0f0).

Par contre, attention! On ne peut en principe utiliser qu'un seul attribut class dans un élément HTML.

Si par mégarde on place deux attributs class dans la balise ouvrante d'un élément, cela n'empêche pas l'affichage, mais ce sont les propriétés du premier sélecteur qui s'appliquent.

Le Sélecteur d'identifiant

Écriture du sélecteur Identifiant #Conteneur dans le code CSS :

#Conteneur{
background-color:#fff;
margin-left:auto;
width:900px;
}

Attribution du sélecteur Identifiant #Conteneur à l'élément <div> :

<div id="conteneur">

Le sélecteur d'identifiant comme le sélecteur de classe permet de définir un style qui pourra être appliqué à n'importe quel élément HTML du site.

Dans la feuille de style, le bloc de règles est identifié par un nom quelconque précédé du symbole dièse #.

Dans le code HTML le nom du sélecteur sans le symbole dièse # est placé comme valeur de l'attribut id de l'élément.

Voyez ci-contre l'exemple de l'identifiant #Conteneur :

Il y a néanmoins une différence fondamentale avec le sélecteur de classe : un attribut id sert à identifier un élément unique. L'attribut id ne peut donc être utilisé qu’une seule fois dans une page. On peut bien sûr définir autant d'id que l'on veut dans la feuille de style, mais il faut que ceux-ci soient uniques dans la page html.

L'id doit être utilisé systématiquement pour les éléments uniques et structurants de la page, pour faciliter la lecture du code. Par exemple, il faut attribuer un sélecteur d'id au Conteneur, au bloc d'EnTete, , au bloc Menu, ou aux blocs Gauche ou Droit s'il y en a, ainsi qu'au Pied de Page.

<div id="Pied">
<a href="#Haut" class="Bouton">Haut de Page</a>
</div>

L'id peut servir d'ancre nommée, car il remplace name.
Ainsi dans cette page, l'id #Haut permet le retour en haut de page :

Par contre pour le stylage des éléments répétitifs tels les paragraphes ou les listes de menu l'usage des sélecteurs de class est indispensable puisqu'il existe plusieurs objets identiques dans la même page.

Aveux d'un ancien néophyte : Lorsque je faisait mes premiers pas en CSS et que je n'avais pas encore très bien compris la distinction entre id et class, j'ai allègrement utilisé dans de nombreuses pages des sélecteurs id à de multiples reprises dans la même page comme des sélecteurs class.

Ces pages qui ont été publiées s'affichaient sans problème. Or tous les bons manuels et tutos martèlent qu'il ne faut utiliser les id qu'une seule fois dans la même page sans préciser vraiment pourquoi.

À la lumière de cette expérience j'ai compris que la principale distinction entre ces deux sélecteurs réside dans la possibilité d'établir des liens vers un sélecteur d'id.

Les Pseudo-classes

Les pseudo-classes constituent des classes prédéfinies en CSS. Elles s’appliquent à certains éléments dont l’état peut changer. Les plus connues et plus populaires concernent les liens hypertextes qui possèdent plusieurs états : visité, actif et non visité. Pour leur capacités d'nimamtion d'une page, on les appelle également pseudo-classes dynamiques.

Aussi, chaque état possède-t-il une pseudo-classe correspondante, soit, :visited, :active et :link. Il existe également la pseudo-classe : hover qui indique que le lien est survolé.

a:link { color: #00f }
a:visited { color: #0f0 }
a:hover {color: #f00}
a:active { color: #ff0 }

À titre d’exemple, définissons ci-contre les couleurs des liens selon chaque état.

Ici, le lien normal sera bleu (:link), quand on le survolera (:hover) il deviendra rouge, quand on clique dessus(:active) et qu’on maintient le clic, il est orange et une fois le lien cliqué (:visited) il devient vert.

Il est important de respecter l’ordre d’écriture pour que le tout fonctionne.

la pseudo-classe :hover doit suivre :link et :visited pour fonctionner, de même :active doit suivre :hover.

Par rapport aux autres pseudo-classes dynamiques, l'intérêt de :hover qui réagit au survol d'un élément par le curseur, réside dans le potentiel de mise en forme dynamique qu'elle offre.
La fonction initiale de :hover est de mettre en valeur des liens. Son utilisation pour animer des menus est donc tout à fait légitime.

Mais, au prix d'un petit détournement sémantique et fonctionnel, :hover peut aussi être utilisée pour animer des images survolées, sans aucun lien. Ce qui ouvre des perspectives intéressantes de réalisation, avec un minimum de code, de pages interactives simples.

Enfin, citons pour mémoire la pseudo-classe :lang et les pseudo-éléments :first lign et :first letter. Vous pouvez vous documenter sur ces sélecteurs dans le site de YoyoDesign cité plus haut.

Possibilités de regroupement des sélecteurs

h1, h2, h3, h4, h5, h6{
color:#C03;
text-align:left;
font-weight:bold;
}

Au lieu de répéter la même règle pour plusieurs sélecteurs, on peut regrouper ces sélecteurs en les séparant par des virgules.

Ainsi comme le montre l'exemple ci-dessus, dans la feuille de style attachée à cette page, les sélecteurs de type h1 à h6 ayant les même propriétés de couleur de texte, d'alignement et de graisse de police sont regroupés.

Les sélecteurs imbriqués

La hiérarchie des éléments de la page peut être utlisée pour créer des sélecteurs imbriqués ce qui évite de surcharger le code html de sélecteurs de class redondants.

Ainsi par exemple :
On comprend aisément que les éléments <p> contenus dans la <div id="Voyage"> peuvent être distincts des autres éléments <p> de la page.
On peut donc leur attribuer des propriétés par le biais d'un sélecteur #Voyage p créé dans la feuille de style sans qu'il soit nécessaire de rappeler le nom de ce sélecteur dans le code html.
De même, si dans l'élément <div id="Epices"> nous insérons un autre élément <div id="Poivre">, puis dans celui-ci deux éléments <p>, nous pouvons attribuer à ceux-ci des propriétés par le biais d'un sélecteur #Poivre p créé dans la feuille de style.
Enfin si dans l'élément <div id="Pacifique">, nous insérons un élément <div> sans identifiant, puis dans celui-ci deux éléments <p>, on comprend que l'élément <div> peut être identifié dans la feuille de style par le sélecteur imbriqué #Pacifique div tandis que les éléments <p> qu'il contient peuvent l'être par le sélecteur imbriqué #Pacifique div p.
#Conteneur
#enTete
#CorpsNavig
#Voyage

#Voyage p

#Voyage p

#Voyage p

#Epices
#Poivre

#Poivre p

#Poivre p

#Pacifique
#Pacifique div

#Pacifique div p

#Pacifique div p

#PiedNavig

#Voyage, #Epices, #Pacifique{
margin:10px 0;
padding:10px;
color:#f00;
border:2px solid #0f0;
color:#0f0;
}

#Voyage p{
border:2px solid #f0f;
padding:3px;
color:#f0f;
}

#Poivre{
border:2px solid #777;
color:#777;
padding:5px;
margin:10px 0;
}

#Poivre p{
border:2px solid #fa0;
padding:5px;
color:#fa0;
}

#Pacifique div {
border:2px solid #e80;
padding:5px;
margin:10px 0;
color:#e80;
}

#Pacifique div p{
border:2px solid #0bb;
padding:5px;
color:#0bb;
}

Quelques propriétés indispensables

Il existe une dizaine de propriétés dont la connaissance suffit pour réaliser 80% des feuilles de style. Il est donc indispensable que vous les mémorisiez.

Et bien sûr, le TP de la Semaine 40 portera sur les propriétés du premier groupe de ce tableau.

Propriétés En français Valeurs Possibles
width Largeur de l'élément px, %, em
height Hauteur de l'élément px, %, em
margin -top Largeur de la marge extérieure
(haute, droite, basse, gauche)
En px, %, em
-right
-bottom
-left
padding -top Largeur de la marge intérieure
(haute, droite, basse, gauche)
px, %, em
-right
-bottom
-left
font -size Taille de police px, %, em
-style Style de police inherit, italic, normal
-weight Graisse bold, bolder, inherit, lighter, normal
-family Famille de police arial, verdana, helvetica, times new roman, etc...
color Couleur du texte Code couleur
text -align Alignement du texte center, inherit, justify, left, right
text -transform Casse de police capitalize, inherit, lowercase, none, uppercase
Propriétés qui seront vues lors d'un prochain atelier
border -width Épaisseur de bordure thin, medium, thick ou épaisseur en px, %, em
-style Style de bordure none, solid, dotted, dashed, double, groove, ridge, inset, outset
-color Couleur de bordure Code couleur
Comme margin et padding, border peut se décliner en border-top, border-right, border-bottom, border-left
background -image Image d'arrière-plan url de l'image
-repeat Répétition de l'image repeat, repeat-x, repeat-y, no-repeat
-position Position de l'image top, right, bottom, left ou abcisse et ordonnée de l'image en px, %, em
-color Couleur d'arrière-plan Code Couleur

Pour mettre en pratique ce tuto, consultez le TP Semaine 40.

Haut de Page