Professional Documents
Culture Documents
1. Théorie
Avant les CSS, le manque de contrôle graphique du HTML a conduit les graphistes à
détourner le langage, exemple: l'utilisation de tableaux et d'images transparents pour
servir de grille de mise en page.
En savoir plus :
http://developpeur.journaldunet.com/dossiers/standards-web.shtml
http://openweb.eu.org/articles/pourquoi_standards/
http://www.cybercodeur.net/weblog/presentations/dwws/index.html
1
Validation
On appelle " validation " le processus consistant à contrôler que le document obéit
aux règles du langage (HTML) qu'il utilise.
HTML et XHTML
le XHTML est une reformulation du HTML avec une syntaxe XML : Doctype, balises
fermées, attributs entre guillemets, minuscules...
Conçues pour gérer l'aspect visuel des documents internet (HTML et XHTML servent à
décrire la structure d'un document).
Le concept de feuille de styles vient de l'impression : définition de "styles"
typographiques réutilisables dans un but de cohérence et de productivité. Les feuilles
de styles internet ont en plus l'avantage de séparer l'aspect graphique de l'aspect
données dans une page HTML, ce qui a des répercussions en terme d'accessibilité,
d'exploitation et d'échange de données.
2
Appliquer des styles CSS à une page HTML
Styles En Ligne
Les styles sont écrits à l'intérieur des balises HTML à l'aide de l'attribut style.
En général cette méthode est à éviter car elle mélange les CSS au code HTML,
présentation et données. Cependant, dans le contexte K-Sup, où la mise en page des
page libres est paramétrable par l'utilisateur, elle se révèle indispensable. En effet, la
largeur des paragraphes, une caractéristique visuelle, n'est connue qu'au moment où
la page JSP est interprétée par le serveur.
3
Styles Internes
Cette méthode permet d'éviter la redondance des styles en-ligne, mais ne permet pas
de factoriser des styles pour plusieurs pages.
Elle peut-être pratique en phase de conception, pour éviter des aller-retours entre
fichiers CSS et HTML.
<style type="text/css">
p { color:red; }
</style>
</head>
<body>
<p>Ceci est un paragraphe</p>
</body>
</html>
4
Styles Externes
Les styles se trouvent dans un fichier texte externe avec l'extension .css. La page
HTML pointe vers ce fichier CSS dans la section <head>.
C'est la meilleure méthode, elle permet de factoriser les styles pour l'ensemble d'un
site.
exemple:
fichier CSS :
p { color:red; }
page HTML :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-15" />
<title>Exemple</title>
</head>
<body>
<p>Ceci est un paragraphe</p>
</body>
</html>
href="styles.css" le chemin vers le fichier CSS peut être indiqué de façon relative
(comme ici) ou de façon absolue ( href="/jsp/css/styles.css" ). Si ce chemin est
erroné, le navigateur n'appliquera pas les styles.
Note
Le serveur web installé avec K-Sup effectue une re-écriture d'URL pour des raisons de
référencement. Par conséquent, lors de découpes K-Sup, tous les chemins doivent
être absolu (la racine est le répertoire de l'application).
ex:
ou
Commentaires
A l'intérieur d'une feuille de style (dans un fichier .css ou entre des balises <style>)
un commentaire commence par /* et finit par */.
5
p { color:red; } /* ceci est un commentaire */
body {
color: navy;
font-size: 2em;
}
Chaque sélecteur (ex : body) est suivi d'une liste de propriétés (ex : color, font-size...
) entre accolades { ... }
Chaque propriété est suivie de ' : ', d'une valeur (ex : navy, 0.8em... ) et d'un ' ; '
Quand cette portion de CSS est ajoutée à une page, le text se trouvant dans le
<body> ( tout le contenu de la page) aura la taille 0.8 em et sera bleu marine.
Unités et Pourcentages
'em' (font-size: 2em) unité typographique relative (largeur d'un M majuscule pour
une taille de police donnée). Correspond approximativement à la hauteur d'un
caractère. En général la taille de police par défaut des navigateurs est 12px, donc
font-size:2em; nous donnera des caractères de 24 px de haut.
'px' (font-size: 12px) pixel. Unité réservé aux écrans (Attention dans IE
l'utilisation de cette unité pour les tailles de police empêche l'utilisateur de
zoomer son texte)
'pt' (font-size: 12pt) unité typographique fixe ... utile pour les feuilles de styles
d'impression (10pt est une taille courante)
'%' (font-size: 80%) pourcentage... dans le cas présent 80% de la taille de police
l'élément parent (qui contient l'élémént stylé)
Note
Les unités doivent suivrent les valeurs sans espace, quand une valeur est nulle il est
inutile de spécifier l'unité ( ex: border: 0; )
Couleurs
Les CSS permettent d'utiliser 16,777,216 couleurs différentes. Elles peuvent être
spécifiées de façon différente :
en utilisant un nom parmi les 16 pré-définies : aqua, black, blue, fuchsia, gray, green,
lime, maroon, navy, olive, purple, red, silver, teal, white, et yellow.
6
transparent est une valeur valide
p { color:red; }
en utilisant 3 composantes Rouge, Vert, Bleue dont les valeurs sont comprises entre 0
et 255
p { color:rgb(255,0,0); }
p { color:rgb(100%,0,0); }
p { color:#ff0000; }
p { color:#f00; }
Les couleurs sont appliquées par l'intermédiaire des propriétés color (pour le texte)
et background-color.
Attention c'est l'orthographe américaine 'color' et pas anglaise 'colour'.
h1 {
color: yellow;
background-color: blue;
}
On peut utiliser ces propriétés sur la plupart des éléments HTML, par exemple :
Texte
La taille et la forme du texte d'une page peuvent être modifiées par l'intermédiaire
des propriétés suivantes :
font-family
Cette propriété spécifie le nom de la police à utiliser. Cette police doit se trouver sur
la machine de l'utilisateur pour qu'elle puisse être utilisée.
Les polices les plus répandues sont Arial, Verdana, Helvetica en sans-serif, Times New
Roman en serif et Courrier en monospaced.
Il est possible de fournir une liste de polices alternatives sur lesquelles le navigateur
se rabattera en cas de besoin.
Il existe des noms de famille générique comme serif, sans-serif, monospaced qui
indique au navigateur dans quelle famille de police il doit choisir, si aucune des polices
spécifiées n'a été trouvée.
7
body { font-family: "lucida grande", arial, helvetica, sans-serif; }
utilise "lucida grande", sinon utilise arial, sinon utilise helvetica, sinon utilise une
police sans-serif
font-size
font-weight
p { font-weight: bold; }
font-style
p { font-style: italic; }
text-decoration
p { text-decoration: overline; }
text-transform
p{
letter-spacing: 0.5em;
word-spacing: 2em;
line-height: 1.5em;
text-align: center;
}
Marge et Espacement
Marge (margin) et Espacement (padding) sont les deux propriétés les plus utilisées
pour contrôler l'espacement des éléments HTML.
h2 {
font-size: 1.5em;
background-color: #ccc;
margin: 1em;
padding: 3em;
}
Le modèle de boite
mod-css.png ¨
Bordures
Exemple :
h2 {
border-style: dashed;
9
border-width: 3px;
border-left-width: 10px;
border-right-width: 10px;
border-color: red;
}
10
Classes et Sélecteurs d'ID
Vous pouvez aussi définir vo propres sélecteurs sous la forme de classes ou d'Ids.
Leur intérêt est de différencier des éléments HTML de nature identique -- par exemple
avoir deux paragraphes graphiquement différents.
En CSS, un sélecteur de classe est un nom précédé d'un point (.) et un sélecteur d'id
est un nom précédé d'un dièse (#).
Le nom doit commencer par une lettre et peut comprendre lettres, chiffres, tiret et
tiret-bas. Les majuscules et les minuscules sont autorisées ( puisqu'en XHTML tout est
en minuscule, j'utilise toujours des minuscules )
Exemple :
#top {
background-color: #ccc;
padding: 1em
}
.intro {
color: red;
font-weight: bold;
}
L'HTML se réfère aux CSS avec l'utilisation des attributs 'id' et 'class' :
<div id="top">
</div>
La différence entre un id et une classe, c'est qu'un id ne peut être utilisé pour
identifier qu'un seul élément, tandis qu'une classe peut être utilisée pour plusieurs
éléments.
Regroupement et Hiérarchie
11
Regroupement
On peut donner les mêmes propriétés à un groupe de sélecteurs sans avoir à les
répéter en séparant les sélecteurs par des virgules
Exemple, au lieu de :
h2 { color: red; }
on peut écrire :
Hiérarchie
Vous pouvez réduire le nombre de sélecteurs de classe ou d'id que vous utilisez. On
peut sélectionner un élément à partir de son (élément) parent :
#top {
background-color: #ccc;
padding: 1em
}
<div id="top">
<h1>Trop de Classes !</h1>
<p>On peut reduire le nombre de classes et d'Ids utilises</p>
<p>ce qui facilite la maintenance</p>
</div>
Pseudo Classes
a:link {
color: blue;
}
a:visited {
color: purple;
}
a:hover {
text-decoration: none;
color: blue;
background-color: yellow;
}
a:active {
color: red;
}
Notes
Il est important de respecter l'ordre des déclarations ci-dessus si on veut éviter des
conflits de classe.
Petit truc : LoVe / HAte pour Link - Visited - Hover - Active
S'il est possible de choisir de ne pas différencier l'état visité des liens hypertextes en
CSS, il faut savoir que c'est une bonne idée de le faire, c'est un plus ergonomique.
La norme CSS prévoit l'utilisation de la pseudo classe :hover sur d'autres éléments
que des liens. Malheureusement Internet Explorer ne supporte pas cette technique.
Pseudo Eléments
Comme les pseudo classes un pseudo élément est s'écrit attaché à l'élément auquel il
s'applique :
sélecteur:pseudo-élément { propriété: valeur; }
13
First letters et First line
The first-letter pseudo element applies to the first letter of an element and first-line to
the top line of an element. You could, for examples create drop caps and a bold first-
line for paragraphs like this:
p:first-letter {
font-size: 3em;
float: left;
}
p:first-line {
font-weight: bold;
}
Les pseudos éléments :before et :after sont utilisés en conjonction avec la propriété
content pour générer du contenu avant ou après un élément sans toucher au code
HTML.
blockquote:before {
content: open-quote;
}
blockquote:after {
content: close-quote;
}
li:before {
content: "-> "
}
p:before {
content: url(images/jam.jpg)
}
a:link:after, a:visited:after {
content: " (" attr(href) ") ";
}
Note
14
Cascade
Exemple:
p { color: red; }
p { color: green; }
p { color:blue; }
Spécificité
La cascade nous dit ce qu'il se passe lorsqu'on associe plusieurs styles à un sélecteur
identique, mais que se passe-t-il lorsque plusieurs sélecteurs ciblent des éléments
communs et définissent des propriétés communes? Quelle propriété est appliquée ?
Exemple:
p { color: red; }
body p { color:yellow; }
.blue { color:blue; }
p.green { color: green; }
#purple { color:purple; }
Pour résoudre l'éventail des différents scénarios,chaque grand type de sélecteur est
pondéré en fonction de sa spécificité :
Note
Attention, les problêmes de styles qui "n'apparaissent pas" dus à des conflits de
spécificité sont monnaie courante.
Ce n'est pas toujours évident.
Exemple:
.conteneur a { color:red; }
.vert { color:green; }
<div class="conteneur">
15
<a href="#" class="vert">de quelle couleur suis-je?</a>
</div>
Ecriture Condensée
Some CSS properties allow a string of values, replacing the need for a number of
properties. These are represented by values separated by spaces.
Certaines propriétés CSS permettent l'utilisation d'un groupe de valeurs séparées par
des espaces pour remplacer un groupe de propriétés :
Exemple :
p{
border-top-width: 1px;
border-right-width: 5px;
border-bottom-width: 10px;
border-left-width: 20px;
}
peut s'écrire :
Lorsqu'il existe une symétrie dans le groupe de valeurs, l'écriture peut encore être
condensée :
peut s'écrire :
p { margin: 1em 0; }
Les propriétés relatives à une police peuvent être rassemblées sous la propriété font :
p{
font-style: italic;
font-weight: bold;
font: italic bold 1em/1.5 courier;
font-size: 1em;
line-height: 1.5;
font-family: courier;
}
16
peut s'écrire :
p{
font: italic bold 1em/1.5 courier;
}
Images de Fond
Il y a plusieurs propriétés qui régissent les images de fond (des images de fond
d'élément HTML par opposition à l'élémént HTML <img>)
div.bgd {
background: white url(images/bg.gif) no-repeat top right;
}
Les images de fond sont très utiles pour les éléments décoratifs d'une charte (comme
les arrondis d'une boite) par opposition au contenu visuel du site (vignette d'un
article...). Utiliser des images de fond avec des CSS permet de simplifier le fichier
HTML.
Note
Attention ! Une image utilisée dans une feuille de styles externe, doit être référencée
par rapport à la feuille de styles) et non pas par rapport au fichier .html (ou .jsp dans
K-Sup)
Note
Propriété Display
Les 3 types principaux que nous allons voir sont : inline, block et none.
inline Les éléments avec display: inline sont formatés le long d'une ligne, si la
largeur n'est pas suffisante ils continuent sur la ligne suivante. Les éléménts <a>,
<strong>, <i> etc... sont par défaut de type inline.
block Les éléments avec display: block sont précédés et suivis d'un retour à la
ligne. Les éléments <h1>, <h2> ... <h6> et <p> sont par défaut de type block.
none Les éléments avec display: block ne sont pas représentés. Ca peut paraître
idiot mais il y a beaucoup de situations où c'est utile.
Exemple:
<h1>Titre</h1>
<p>Ceci est un chapeau qui se trouve sous le titre et présente brièvement l'article qui
suit</p>
h1 {
display: inline;
}
#header p {
display: inline;
padding-left: 2em;
}
La déclaration suivante pourrait être utilisée dans une feuille de styles d'impression
pour éviter d'imprimer la barre de navigation d'une page (dans l'idée de n'imprimer
que le contenu d'une page...)
#navigation {
display: none;
}
Note
La différence entre display: none et visibility: hidden est que un élément rendu
invisible avec visibility: hidden occupe la même place (vide dans ce cas) que lorsqu'il
est visible. Alors qu' un élément avec display: none disparait sans occuper d'espace
comme s'il était absent du code HTML.
ex -->
18
Tables
Note
Les tables HTML devrait idéalement être utilisée uniquement pour présenter des
donnés tabulaires.
list-item par défaut, c'est le type d'un élément <li>, en fait list-item s'apparente à
block mais il rajoute la notion de 'marker' (la puce d'un élément de liste).
19
Mise en Page CSS
Il faut commencer par identifier les blocs qui constituent le squelette de la page à
maquetter, le bandeau, le menu, les colonnes, le pied de page etc...
Il faut ensuite utiliser le bon mode de positionnement pour agencer ces différents
blocs.
Positionnement
La valeur par défaut est static. Les éléments ne sont pas positionné, leur position
dépend de l'ordre de leur apparition dans le code HTML.
relative est similaire à static, mais les éléments peuvent être déplacés relativement à
leur position d'origine à l'aide des propriétés top, right, bottom et left.
Ils laissent un trou là où ils auraient du être s'ils n'avaient pas été positionné.
ex -->
absolute sort un élément du flux HTML (ne prend pas de place et n'affecte pas les
éléments qui suivent) et le place dans un référentiel où il peut être positionné avec
les propriétés top, right, bottom et left. Par défault, ce référentiel a pour origine le
coin en haut à gauche de la page HTML
ex -->
tout élément (<div>, <p> etc...) dont la propriété position vaut absolute, fixed ou
relative, crée un nouveau référentiel pour les éléments positionné en absolu qu'il
contient.
ex -->
fixed est similaire à absolute, mais le référentiel est la fenêtre du navigateur et non
pas la page HTML, c'est a dire que l'élément reste théoriquement exactement où il se
trouve si on déplace la page avec un ascenceur (scrollbar). En théorie seulement car
si cette technique marche dans Mozilla ou Opéra, elle ne marche pas du tout dans IE.
<div id="menu">
<ul>
<li><a href="page1.html">option1</a></li>
<li><a href="page2.html">option2</a></li>
<li><a href="page3.html">option3</a></li>
</ul>
</div>
20
<div id="contenu">
<h1>Titre</h1>
<p>Lorem ipsum qualisque scribentur mea ne, quodsi aeterno vis an. Laudem
labitur an ius, eam no debet veniam eruditi. Delenit pericula splendide cum ei, an per
eros elaboraret, no vix partem senserit. Sea an eros possit</p>
<p>Sed an agam mazim oporteat, vim ex accusam mediocritatem. Ea nihil
sententiae mel, ad vel accusam offendit, sea at nobis mucius. Ei has malis luptatum
persecuti, ei dicta impedit tincidunt usu, enim voluptua ei quo. Ea sit utamur latine
imperdiet, mentitum repudiare quaerendum ius et.</p>
<p>Sed an agam mazim oporteat, vim ex accusam mediocritatem. Ea nihil
sententiae mel, ad vel accusam offendit, sea at nobis mucius. Ei has malis luptatum
persecuti, ei dicta impedit tincidunt usu, enim voluptua ei quo. Ea sit utamur latine
imperdiet, mentitum repudiare quaerendum ius et.</p>
</div>
#menu {
position: absolute;
top: 0;
left: 0;
width: 200px;
}
#contenu {
margin-left: 200px;
}
Le menu est positionné en absolu en haut à gauche de la page avec une largeur de
200 pixels.
La colonne de contenu principal a une marge gauche de 200 pixels, pour faire de la
place au menu. Si cette marge gauche a une valeur inférieure, on constate que le
menu chevauche le contenu principal sans interférence, ils ne sont pas au même
étage !
Simple non ? Un autre avantage est l'indépendance total de l'ordre des éléments dans
le code HTML avec le rendu graphique. C'est utile pour placer la zone de contenu en
premier dans le source pour les utilisateurs de lecteurs d'écrans.
ex -->
#menu {
position: absolute;
top: 0;
left: 0;
width: 200px;
}
21
#encadres {
position: absolute;
top: 0;
right: 0;
width: 200px;
}
#contenu {
margin: 0 200px; /* marges haut et basse à zéro, marges gauche et droite à
200px */
}
Si on veut utiliser des colonnes tout en gardant une certaine flexibilité, avec un pied
de page par exemple, il faut utiliser des flottants.
Flotter et Flottants
Flotter un élément le déporte sur la gauche ou la droite aussi loin que possible ( les
limites du bloc parent ou d'un autre flottant ) ; le contenu environnant lui fait de la
place.
Le type display d'un élément flotté devient block .
#menu {
float: left;
width: 200px;
}
#navigation2 {
float: right;
width: 200px;
}
#content {
margin: 0 200px;
}
22
On remarque que les flottants doivent précéder la colonne centrale dans le code HTML
pour que les colonnes soient alignées.
Pour forcer un élément à apparaitre en dessous d'un flottant il faut utiliser la propriéte
clear.
clear : left pour un flottant gauche, clear : right pour un flottant droit, clear both pour
les deux types de flottants.
donc si on ajoute:
#footer {
clear: both;
}
@import
Importer
@import permet d'importer des styles CSS dans une page HTML comme <link> :
@import permet aussi d'importer des styles dans un fichier CSS externe (dans ce cas
là, @import doit être placé au début du fichier)
L'intérêt de cette méthode est que les anciens navigateurs (et notamment le plus
utilisé d'entre eux Netscape 4.x) ne comprennent pas cette directive et ne chargeront
pas les styles. On peut ainsi fournir un contenu non stylé aux vieux navigateurs et les
styles graphiques aux navigateurs modernes sans détection javascript.
Types de média
Exemple:
@media print {
body {
font-size: 10pt;
font-family: times new roman, times, serif;
}
#navigation {
display: none;
23
}
}
Note
Note
24
2. Méthodologie
J'utilise Firefox lors de la phase de conception à cause du très bon support CSS des
navigateurs Mozilla et du nombre d'outils gratuits disponibles pour ce navigateur (les
extensions : https://addons.update.mozilla.org/).
Il existe une extension indispensable qui s'appelle "Web Developer", disponible ici :
http://www.chrispederick.com/work/firefox/webdeveloper/
parmi les fonctions les plus intéressantes :
- désactiver/activer les CSS
- indiquer quels images n 'ont pas d'attribut ALT
- afficher les IDs et les Classes
- affichage des blocs
- validation en ligne et locale du (X)HTML et des CSS
Une fois que la page est découpé, je teste sous IE6 (notre cible principale) et d'autres
navigateurs ( IE 5.0 et IE 5.5, IE Mac, Safari, Netscape )
25
2.2 Découpe
Les éléments (X)HTML ont des styles par défaut (exemple un paragraphe <p> a une
marge haute et basse).
Ces styles peuvent varier d'un navigateur à l'autre. Je commence toujours ma
découpe en réinitialisant les styles par défaut, ce qui facilite grandement la phase de
conception, notamment lorsqu'on travaille avec des formulaires HTML.
/* on utilise les listes pour structurer nos menus - on élimine donc la puce */
ul,ol { list-style:none }
2.4 Hacks
En CSS, on appelle "hack" le fait d'exploiter un bug d'un navigateur (en général dans
l'interprétation des sélecteurs) pour corriger un autre bug (de rendu graphique).
Seul IE (IE 5, IE 5.5, IE 6 et IE Mac) reconnait cet écriture, et il est donc le seul à
appliquer ce style.
* html p {
font-size: 75%; /* tous les IE voient ceci grace au sélecteur étoile hack*/
f\ont-size: 90%; /* IE 5.0 et Ie 5.5 ne voient pas cette ligne a cause de
l'antislash présent dans le nom de la propriete */
}
- Antislash hack:
27
2.5 Bugs d'Internet Explorer
Pour les anglophones, Il existe une référence extraordinaire qui documente les bugs
des navigateurs PC ( principalement IE )
Le site s'appelle "Position is everything" : http://www.positioniseverything.net
Texte inzoomable
28
3 Références et Ressources
3.1 En Français
Accessibilité:
http://www.acces-pour-tous.net/
http://www.accessiweb.org/
http://openweb.eu.org/
Ressources et Techniques:
http://pompage.net/
http://openweb.eu.org/
http://www.opquast.com/
Validation:
http://validator.w3.org/
http://jigsaw.w3.org/css-validator/validator-uri.html
3.2 En Anglais
Techniques et astuces:
http://www.alistapart.com
http://css-discuss.incutio.com/
Methodologie et tutoriels :
http://css.maxdesign.com.au/
29