Séparer forme et contenu
Tous les langages de balisage sont fondés sur le mêmes principes :
- 
      
L’auteur doit pouvoir se concentrer uniquement sur le contenu.
 - 
      
Les directives de mise en forme sont séparées du contenu.
 
Exemples de directives de mise en forme
- 
      
Codées en dur dans le logiciel (Scribe, HTML 1.0, …)
 - 
      
Définies dans les entêtes (LaTeX, HTML/CSS, …)
 - 
      
Définies dans un fichier séparé (LaTeX
.cls, HTML/CSS, …) - 
      
Définies à l’aide d’un langage externe (HTML/CSS, …)
 - 
      
Non définies dans le standard (XML, …)
 
Exemple : HTML
Les balises HTML renseignent sur la signification (la sémantique) des données, pas sur la façon de les présenter.
Exemple : la balise controversée <i> (à l’origine, italique)
<i>Some text</i>
  Some text
Cependant, la spécification HTML5 dit :
The i element now represents a span of text in an alternate voice or mood, or otherwise offset from the normal prose in a manner indicating a different quality of text, such as a taxonomic designation, a technical term, an idiomatic phrase from another language, a thought, or a ship name in Western texts.
Navigation web et affichage
Ne jamais faire d’assomptions sur l’affichage
Pensez à
- 
      
Browsers en mode texte ;
 - 
      
Différentes tailles d’écran (mobile, tablette, …) ;
 - 
      
Utilisateurs malvoyants ;
 - 
      
Utilisateurs qui lisent dans des langues étrangères (qui pourraient ne pas posséder un concept similaire à l’italique) ;
 - 
      
Site tiers qui pourraient réutiliser votre contenu.
 
Donc, qui décide de l’affichage ?
Les Feuilles de style.
CSS
Cascading Style Sheets
CSS est un langage pour l’expression de directives d’affichage.
Cascading veut dire que plusieurs feuilles de style peuvent s’appliquer à un document, le résultat est calculé d’après des règles de precedence en cascade.
p.lead {
  font-weight: bold;
  font-family: "Gill Sans MT", GillSans, sans-serif;
  padding: 2pt;
}
p.lead:first-letter {
  font-size: 200%;
}
p.lead em {
  font-variant: small-caps;
  font-style: normal;
}
  
  Lorem ispsum dolor sit amet
HTML et CSS
<html>
  <head>
    <!-- Ceci s'applique à tout le document -->
    <link rel='stylesheet' href='sheet.css' type='text/css' />
    <style>
      body {font-family: Arial;}
    </style>
  </head>
  <body>
    <div>
      <!-- Ceci s'applique seuelement dans ce div -->
      <style scoped>
        p {color:blue;}
      </style>
      <!-- Ceci s'applique seulement à ce paragraphe
           La syntaxe CSS y est limitée -->
      <p style="font-weight:bold">...</p>
    </div>
  </body>
</html>
Où va le CSS
L’attribut HTML style applique des directives CSS à une balise.
<p style="font-weight: bold; color: red">
  Ce texte en <em>gras et rouge</em>.
</p>
  La balise <style> insère un document CSS dans
l’entête. Démo.
<head>
  <style>
    p { color: red }
  </style>
</head>
<body>
  <p>Ce texte en <em>gras et rouge</em>.</p>
</body>
Autres formes
Balise <style scoped> dans le corps
<section>
  <p>Lorem ipsum ...</p>
  <p>
    <style scoped> p { color: red } </style>
	dolor sit amet ...
  </p>
</section>
  Inclure des fichiers .css externes
<head>
  <link rel='stylesheet' href='style1.css' />
  <link rel='stylesheet' href='style2.css' />
  ...
</head>
La syntaxe CSS
Règles CSS
selector {property: value; property:value; ...}
  Commentaires
/* Ceci est la seul façon de faire des commentaires en CSS
   (en effet, // n'introduit pas un commentaire)       */
  At-rules
@import "unautrestyle.css";  /* Importe dans la feuille
                                courante */
@media screen;               /* S'applique seulement à un
                                affichage sur écran (par ex.,
								pas à l'impression) */
  Référence actuelle: http://www.w3.org/TR/2011/REC-CSS2-20110607/
Le draft CSS3 est trop grand pour tenir en un seul module. Voir http://www.w3.org/Style/CSS/
Sélecteurs CSS
Sélecteurs simples (tag est toujours optionnel)
tag {...}                /* Toute balise <tag>            */
tag.class {...}          /* Tout <tag> de classe class    */
#id {...}                /* La balise identifiée par id   */
tag:pseudoclass {...}    /* Sélection de contenu spécial  */
tag[att=val] {...}       /* Tout <tag> ayant attribut att
                            égal à val                    */
  Combinateurs de sélecteurs
selector, selector {...} /* Chacun des selector                */
parent child {...}       /* child s'il est un fils de parent   */
parent > child {...}     /* child seulement s'il est un fils
                            direct de parent                   */
sister ~ brother {...}   /* brother seulement s'il suit sister */
sister + brother {...}   /* brother seulement s'il suit
                            immediatement sister               */
  Référence complète: http://www.w3.org/TR/CSS2/selector.html
Draft CSS3: http://www.w3.org/TR/2011/REC-css3-selectors-20110929
Un peu de pratique
Expérimenter avec une page unique : Mozilla Thimble.
Expérimenter avec CSS et HTML : JSFiddle.
Dans votre browser, les Outils du développeur permettent d’explorer les composants d’une page web et le box model.
Firefox: F12, Shift+Ctrl+C, .
Chrome: F12.