Web Design

Support de cours

Xavier Serpaggi

Échanges sur l'Internet

Internet

Internet est un réseau mondial qui a permis, depuis son adoption par le grand public dans les années 90, de diffuser de l'information rapidement et facilement.

Du simple réseau d'échange destiné aux militaires, puis aux universitaires, il est devenu le lieu de toutes les transactions commerciales, des communautés virtuelles et source de savoir.

Les échanges qui se font au sein de ce réseau suivent (presque) toujours le même principe que nous abordons ci-dessous.

Principe client-serveur

Toute l'information qui est contenue dans l'Internet l'est en fait sur des ordinateurs particuliers que l'on nomme serveurs. Ces derniers peuvent être des ordinateurs très spécialisés ou de simples ordinateurs de bureau détournés de leur utilisation première. La puissance de calcul, dans ce cas, n'est pas le facteur le plus important (les contraintes sont plus en matière de disponibilité, de fiabilité, d'espace de stockage).

Ces ordinateurs serveurs ont par contre un point commun : ils disposent tous d'un logiciel particulier qui permet de diffuser leurs informations sur le Web. Ce logiciel est un serveur Web ou, plus exactement un serveur HTTP. Son rôle est de répondre aux requêtes provenant des clients de l'Internet (les navigateurs que l'on trouve sur nos ordinateurs) en leur envoyant les ressources demandées (documents texte, images, ...)

Des protocoles

Les échanges entre les clients et les serveurs se font forcément de manière particulière : ils respectent un protocole de communication connu sous le nom de protocole HTTP.

Les données échangées le sont majoritairement sous forme de texte (contenu des pages, mise en forme, scripts, ...), mais bien entendu des formats de fichiers plus spécialisés sont également très présents (images, fichiers audio, fichiers vidéo, ...)

Ce protocole de communication, bien qu'extrêmement important, ne sera pas étudié ici. Nous nous intéresserons plutôt à la façon dont les données échangées sont décrites. Si l'étude du protocole HTTP vous intéresse, nous vous invitons à vous reporter aux RFC le décrivant.

Des langages

Comme nous l'avons dit plus haut, la majorité des données échangées le sont sous forme textuelle. Bien entendu, les images, les sons, les vidéos sont échangés sous forme binaire, mais là encore, ce n'est pas l'objectif de ce cours.

Chaque page qui est envoyée par un serveur Web vers un client Web doit respecter une certaine syntaxe. En fait, les pages de l'Internet s'écrivent principalement à l'aide d'un langage de description nommé HTML et c'est ce langage que nous allons étudier ici.

Ce langage a beaucoup évolué depuis ses débuts en 1991. Il est né très simple avec peu de composantes, a mûri vers une version très lourde tentant de résoudre en une seule fois les problèmes du contenu, de la sémantique et de la forme, puis s'est rationalisé en sa version actuelle qui ne s'intéresse pratiquement qu'au contenu. C'est HTML dans sa version 5.

Mais effectivement, le contenu n'est pas tout et une belle présentation permet de mettre en valeur le message qui est passé. C'est pourquoi, bien que le HTML ait perdu ses capacités de gestion de mise en forme, les personnes au W3C ont imaginé un autre langage qui n'est dédié qu'à cela. Ce sont les CSS qui, suivant un autre formalisme, permettent de réaliser des bijoux de mise en forme. Nous aborderons les CSS dans le cadre de ce cours.

Tout ceci ne serait pas complet s'il n'y avait pas là dedans une touche d'interactivité. Bien entendu, certains contenus ne se prêtent pas exactement à une utilisation interactive. Lire un article scientifique ou une revue de presse demandera moins d'interactivité que de faire des achats en ligne en utilisant un comparateur de produits. Mais si le besoin se présente, la solution existe sous la forme d'un troisième langage (ici, un langage de programmation) qui est le Javascript. Nous aborderons, dans les grands axes, l'utilisation de Javascript dans le cadre de ce cours.

Pages Web, principes de composition

Les pages que l'on peut lire sur l'Internet ont toutes un point commun, c'est qu'elles sont, au final, un ensemble de balises contenant du texte. Que tout cela ait-été écrit par un humain, que ça ait été généré par un programme, ou même que ce soit une combinaison des deux, ce n'est vraiment que du texte inclus dans des balises. Le principe de composition d'une page web est donc celui-ci, écrire du texte respectant un formalisme particulier.

Toutes ces pages sont stockées dans un ou plusieurs fichiers sur un ou plusieurs serveurs. Éventuellement, ces pages peuvent être reliées entre elles à l'aide de liens hypertextes (abordés plus bas dans le texte).

Nous en avons parlé à la section précédente, il existe principalement trois langages permettant d'écrire des pages. Ce ne sont pas des langages au choix, ils sont plutôt complémentaires. Le premier est nécessaire, c'est lui qui va décrire la structure du document et surtout qui va permettre d'exposer le contenu : c'est le HTML et c'est celui que nous allons voir dans la section suivante. Ensuite il y a les CSS qui permettent de mettre en forme ce document. Il peut y avoir plusieurs choix de mise en forme pour un document donné. Enfin, pour avoir un peu d'interactivité ou faciliter le travail des développeurs web, il y a le Javascript, langage de programmation à part entière.

Bases du HTML

Depuis sa version 1.0 en 1991 jusqu'à sa version 5 actuelle, le langage de balisage HTML a beaucoup évolué. Cependant il est toujours possible, avec les navigateurs actuels, de visualiser les pages écrites en HTML 1.0 au siècle dernier. Et bien entendu, il est toujours envisageable d'en écrire. Ceci parce que les balises fondamentales n'ont pas changé. En réalité, les modifications successives du langage ont surtout eu pour but de simplifier et de rationaliser l'écriture.

Des premières versions de HTML où fond et forme étaient confondus, nous avons vu l'apparition de HTML 4.0 (puis 4.01) qui a permis d'initier une forte séparation avec d'un côté la structure et le fond (HTML) et d'un autre côté la forme (CSS). Un passage par le XHTML (HTML strict au sens de XML) a permis de structurer encore plus les choses et a établi les bases d'une utilisation plus raisonnée des balises (finies par exemple les mises en forme à l'aide de tableaux). Le HTML5 ne simplifie pas réellement tout cela, mais permet, toujours avec plus de rationalité, de donner aux documents un aspect plus actuel comme avec, par exemple, l'utilisation de vidéos ou d'extraits sonores directement dans les pages.

Un langage de description

Le HTML est un langage arborescent de description de documents dérivé du SGML. À l'aide de balises (tags en anglais) il va en décrire la structure classique (titre, sous-titre, chapitres, sections, ...) mais parfois aussi une structure qui sera support de la mise en forme.

Certaines descriptions permettront également d'apporter des informations sémantiques qui faciliteront et rendront plus précise l'analyse des documents par les "robots" de l'Internet.

Le contenu de notre page, qui sera majoritairement écrit sous forme textuelle, est intégralement encadré par ces balises.

Les règles d'écriture simples, définies dans une DTD, sont faciles à suivre. La fonction de la DTD est de permettre au navigateur de vérifier la conformité du code HTML à une norme donnée. Pour plus de détails sur les différentes DTD possibles, vous pouvez vous reporter au site du W3C.

...
<body lang="fr">
  <nav>
    <ul>
      <li><a href="index.html">Sommaire</a></li>
      <li><a href="end.html">Conclusion</a></li>
    </ul>
  </nav>
  <header>
      <h1>De l'&eacute;criture des pages</h1>
      <p class="sous-titre">ou comment publier sur l'Internet</p>
  </header>
  <section>
    <h2>Baliser sans crainte</h2>
    <p>Une balise est &eacute;crite entre chevrons.</p>
    <p>Une balise ouvrante attend une balise fermante qui reprend le nom de la premi&egrave;re, pr&eacute;c&eacute;d&eacute; du caract&egrave;re '/'.</p>
    <p>Le nom des balises peut &ecirc;tre indiff&eacute;remment en majuscule ou minuscule</p>
  </section>
</body>
...
Exemple de balisage.

Comme on peut le voir, les balises sont organisées selon une arborescence. C'est à dire qu'il y a une notion de hiérarchie. Nous reviendrons sur cela plus loin.

On peut également remarquer que les caractères accentués sont représentés sous une forme particulière. Ce sont des entités (entities) qui permettent de s'affranchir des soucis d'encodage de caractères que l'on rencontre constamment sur l'Internet.

Enfin, un point important est la présence, parfois, d'attributs dans les balises. Un attribut est un couple clé/valeur noté sous la forme d'une égalité (certains attributs cependant n'ont pas de valeur et seule leur présence est importante ; dans ce cas on reprendra le nom de l'attribut comme valeur). Dans l'exemple ci-dessus les balises body, a et la première balise h2 ont des attributs (respectivement lang, href et class). Un attribut ne s'écrit que dans la partie ouvrante de la balise. S'il y a plusieurs attributs pour une seule balise, on les écrit tous les uns à la suite des autres sans se soucier de leur ordre. Leur nom est toujours en minuscule, de plus, même si ce n'est pas obligatoire, il est préférable de donner la valeur de l'attribut entre guillemets.

Au sein d'un document il est tout à fait possible qu'un de ces couples clé/valeur apparaisse plusieurs fois. On peut par exemple retrouver à plusieurs endroit l'attribut lang avec la valeur fr ou même avec une autre valeur. Il y a un attribut cependant, dont la valeur ne peut apparaître qu'une seule fois dans un document. C'est l'attribut id. Par exemple, si j'ai mis dans ma page le code suivant :

<p id="synopsis">La publication de documents numériques est une action simple. Cependant pour assurer la pérennité de nos textes, il convient de respecter les règles édictées par les organismes tels que le W3C.</p>

Il ne pourra pas y avoir une autre balise, quelle qu'elle soit, avec l'id ayant pour valeur synopsis.

Balises obligatoires

Les balises du HTML sont assez nombreuses, mais il n'est pas nécessaire de toutes les connaître pour écrire un document. Il faudra se souvenir des principales et les autres seront mémorisées avec la pratique. En tant qu'informaticien fainéant on pourra se créer un modèle (template) de squelette de page.

Ces balises principales sont celles que l'on va appeler obligatoires. Sans elles, un document HTML ne sera pas bien formé et même si les navigateurs sauront le plus souvent s'en contenter, ça ne nous permettra pas d'aller bien loin dans le développement web.

Ces balises sont celles qui vont définir la structure d'une page et vont peu avoir à faire avec le contenu lui même.

html
C'est la balise racine de toutes les autres. Elle contient l'intégralité de la page et donc les autres balises.
head
L'en-tête du document. Il a surtout une fonction informative. Il ne sera pas affiché dans le document en tant que tel, mais permettra de définir de nombreuses informations dont le navigateur se servira pour afficher correctement votre page.
body
Le corps de votre document. Il est la racine de tout ce qui sera affiché dans la fenêtre du navigateur.
title
Le titre de la page. C'est une balise qui doit être définie à l'intérieur de la section head. Ce titre n'est pas affiché dans la fenêtre du navigateur, mais dans la barre de titre de cette fenêtre. À ce titre, il ne peut pas être l'objet de mise en forme.
meta
Les méta-données. Cette balise ne peut apparaître que dans la section head. Elle peut apparaître plusieurs fois et permet de définir des couples clé/valeurs utiles aux navigateurs et aux robots de l'Internet. Par exemple, c'est par ce moyen que l'on va définir l'auteur du document ou encore les mots-clés. Cette balise a une particularité, elle est vide et tout son contenu est défini par ses attributs. Elle est donc toujours écrite sous forme abrégée (voir l'exemple ci-dessous).
link
Les liens vers les documents annexes. Ces liens sont utiles à l'affichage ou au positionnement de notre document dans un groupe d'autres documents. Cette balise ne peut apparaître que dans la balise head. C'est une balise vide dont toute l'information est définie dans ses attributs.

Exemple

Voici un exemple minimal complet de page avec les balises décrites ci-dessus. Ceci peut servir de squelette à n'importe quelle page HTML.

<!DOCTYPE html>
<html>
  <head>
    <title>Titre de la page</title>
    <link rel="stylesheet" href="styles/main.css" />
    <meta charset="utf-8" />
    <meta name="author" content="Xavier Serpaggi" />
    <meta name="robots" content="noindex, nofollow" />
  </head>
  <body>
    Le contenu de la page
  </body>
</html>
Exemple minimal complet de code HTML.

Vous remarquerez dans cet exemple la présence d'une première ligne qui n'a pas été décrite jusqu'à présent. C'est la définition de type de document (DTD). Dans le cas de cet exemple, elle a la valeur demandée pour des documents écrits suivant les règles du HTML5.

Balises communes

Bien que les balises ci-dessus permettent de créer une page complète et conforme, elles ne sont pas suffisantes pour donner une réelle structuration à nos documents.

Nous allons présenter ici les quelques balises permettant de définir les titres, les paragraphes, ...

h1...h6
Définition d'un titre. Le titre de plus haut niveau a le numéro le plus faible. Il est rare d'utiliser des niveaux de titre au delà de h4. Les balises de titre doivent être ouvertes et fermées. Un titre apparaîtra seul sur sa ligne. Le navigateur, au moment de l'affichage rajoutera automatiquement un saut de ligne à la suite.
Exemple d'utilisation :
<h1>De l'étude du balisage en terrain numérique</h1>
p
C'est un paragraphe. Tout le texte que vous écrirez, s'il n'est pas dans un autre élément comme par exemple une table, sera sans doute entre les deux extrémités d'une balise p. Un paragraphe peut contenir une ou plusieurs phrases, c'est à la discrétion de l'auteur du document. Un paragraphe sera affiché par le navigateur comme un bloc suivi d'un saut de ligne. Il n'y a pas de césure automatique en HTML, les coupures pour éviter que le texte ne dépasse de la fenêtre du navigateur se feront donc à la frontière des mots.
Exemple d'utilisation :
<p>Pour bien baliser en terrain numérique, il convient d'être prudent, et de poser chaque repère l'un après l'autre.</p>
br
Un sauf de ligne. Parfois on désire sauter explicitement une ligne. Comme le HTML ne reconnaît pas les sauts de ligne dans le code (en fait, il n'en prendra en compte qu'un seul, même si plusieurs se suivent) on peut vouloir utiliser cette balise pour forcer cette mise en page. Cette balise n'a pas de contenu. Elle s'écrira donc toujours sous sa forme abrégée.
Exemple d'utilisation :
<p>Tout d'abord, poser une première balise.<br/>Ensuite poser une deuxième balise.<br/>...<p/>
a
Un lien hypertexte. C'est la balise qui a fait le succès de HTML. C'est grâce à elle qu'il est possible de faire référence, depuis le document actuel, à un autre document qu'il soit local ou à l'autre bout de l'Internet. L'utilisation de cette balise est un peu particulière en ce sens qu'elle a deux parties qui contiennent des informations importantes. Tout d'abord le texte lui même qui est le contenu de la balise. Ensuite, l'attribut href qui va contenir l'URL de la page à afficher si l'utilisateur clique sur le lien ainsi créé.
Exemple d'utilisation :
<p>Une fois toutes les balises correctement disposées, rendez-vous sur la <a href="slide2.html">page suivante</a> pour la prochaine étape.</p>
ul, ol, li
Les listes, numérotées avec ol (ordered list), et non numérotées avec ul (unordered list). Chaque item de la liste est défini par une balise li.
Exemple d'utilisation :
<ul>
  <li>Repérer</li>
  <li>Baliser</li>
  <li>Afficher</li>
</ul>
table, th, tr, td
Les tableaux, les tables de données. Les tables sont divisées en lignes par des balises tr. Chacune des lignes est divisée en cellules par des balises td. La ou les lignes d'en-tête utilisent des balises th en lieu et place des balises td. Il est possible de faire des tableaux bien plus compliqués qu'une simple grille. Vous pourrez vous former à cela en lisant la page consacrée aux tables sur le site du W3C.
Les tables ont longtemps été utilisées à tort pour faire de la mise en forme. Cette mauvaise pratique a disparu aujourd'hui, il conviendrait de ne pas la faire réapparaître.
Exemple d'utilisation :
<table>
  <tr>
    <th>Balise</th>
    <th>Attributs</th>
    <th>Toujours vide</th>
  </tr>
  <tr>
    <td>a</td>
    <td>href</td>
    <td>non</td>
  </tr>
  <tr>
    <td>br</td>
    <td>aucun</td>
    <td>oui</td>
  </tr>
</table>

Exemple

Voici un exemple complet qui reprend les balises vues ci-dessus. Vous pouvez le copier/coller dans un éditeur de texte et tester vous-même le résultat ou le voir ici.

<!DOCTYPE html>
<html>
  <head>
    <title>Baliser en terrain num&eacute;rique</title>
    <link rel="stylesheet" href="styles/main.css" />
    <meta charset="utf-8" />
    <meta name="author" content="Xavier Serpaggi" />
    <meta name="robots" content="noindex, nofollow" />
  </head>
  <body>
    <h1>De l'&eacute;tude du balisage en terrain num&eacute;rique</h1>

    <h2>Introduction</h2>
    
    <p>Baliser a toujours &eacute;t&eacute; une pr&eacute;occupation importante dans le champ du document num&eacute;rique.  Nous donnons dans ce court document quelques pistes pour baliser sans crainte.</p>
    
    <h2>M&eacute;thodologie</h2>
    
    <p>Nous allons &agrave; pr&eacute;sent aborder les points suivants&nbsp;:</p>
    
    <ol>
      <li>Bien baliser un terrain num&eacute;rique&nbsp;;</li>
      <li>Les &eacute;tapes successives&nbsp;;</li>
      <li>La finalisation.</li>
    </ol>
    
    <p>Pour bien baliser en terrain num&eacute;rique, il convient d'&ecirc;tre prudent, et de poser chaque rep&egrave;re l'un apr&egrave;s l'autre.</p>
    
    <p>Tout d'abord, poser une premi&egrave;re balise.<br/>Ne pas oublier de fermer la balise, c'est tr&egrave;s important.<br/>Poser ensuite une deuxi&egrave;me balise.<br/>Continuer ainsi jusqu'&agrave; la fin du document.<p/>

    <p>Une fois toutes les balises correctement dispos&eacute;es, vous pouvez <a href="http://validator.w3.org/">v&eacute;rifier</a> que votre HTML est conforme avant de le publier.</p> 

    <h2>R&eacute;capitulatif</h2>
    <table>
      <tr>
        <th>Balise</th>
        <th>Contenu</th>
        <th>Attributs sp&eacute;cifiques</th>
      </tr>
      <tr>
        <td>html</td>
        <td>tout le document</td>
        <td>N/A</td>
      </tr>
      <tr>
        <td>body</td>
        <td>tout ce qui est affich&eacute; du document</td>
        <td>N/A</td>
      </tr>
      <tr>
        <td>a</td>
        <td>le texte du lien sur lequel on clique</td>
        <td>href="URL"</td>
      </tr>
      <tr>
        <td>br</td>
        <td>N/A</td>
        <td>N/A</td>
      </tr>
    </table>
  </body>
</html>
Exemple complet de document HTML.

Balises complémentaires

Éléments de structuration

En plus des éléments tels que body, h1...h6, certaines autres balises sont intéressantes à connaître. Elles sont décrites ci-dessous.

header
Un en-tête dont l'objectif est de représenter une introduction. Cette balise se rapporte à son ancêtre le plus proche et peut donc être utilisée pour un document dans son ensemble comme pour l'une de ses sous-parties.
Exemple d'utilisation :
<header>
  <h1>Baliser sans crainte</h1>
  <p class="subtitle">ou comment publier sur l'Internet</p>
  <p class="author">Xavier Serpaggi</p>
  <p id="synopsis">La publication de documents numériques est une action simple. Cependant pour assurer la pérénité de nos textes, il convient de respecter les règles édictées par les organismes tels que le W3C.</p>
</header>
footer
C'est le pendant de la balise header mais pour un pied de page. Elle se rapporte à son ancêtre le plus proche et peut donc elle aussi être utilisée tout aussi bien pour un document que pour ses sous-parties.
Exemple d'utilisation :
<footer>
  <p>L'utilisation de ce site est à vos risques et périls. Pour plus d'informations veuillez consulter les <a href="legal.html">mentions légales</a>.</p>
  <a href="plan.html">Plan du site</a>
  <a href="contact.html">Nous contacter</a>
</footer>
nav
Une section contenant des liens de navigation (vers d'autres pages ou vers d'autres endroits dans la même page).
Exemple d'utilisation :
<nav>
  <ul>
    <li><a href="page2.html">Précédent</a></li>
    <li><a href="index.html">Sommaire</a></li>
    <li><a href="page4.html">Suivant</a></li>
  </ul>
</nav>
section
Une section d'un document ou d'une application. Cette balise est générique et ne suppose rien du niveau de la section qu'elle représente. Elle peut donc être vue comme une manière de grouper du contenu ayant une thématique identique.
Exemple d'utilisation :
<section>
  <h1>Balises génériques</h1>
  <p>Nous présentons ici les balises qui sont utilisées dans tous les documents.</p>
  <p>...</p>
</section>
<section>
  <h1>Balises sémantiques</h1>
  <p>Les balises présentées dans cette section permettent de donner du sens à votre balisage.</p>
  <section>
    <h1>Pour les navigateurs</h1>
    <p>...</p>
  </section>
  <section>
    <h1>Pour les robots</h1>
    <p>...</p>
  </section>
</section>

Éléments de regroupement

Nous avons déjà abordé les balises p, ul, ol et li. Ci-dessous sont présentées d'autres balises permettant de regrouper entre eux différents contenus.

pre
Du texte qui conservera la mise en forme que vous lui donnez dans votre éditeur. Vous avez sans doute remarqué que, quel que soit le nombre d'espaces que vous mettez entre deux mots, il n'y en a toujours qu'un d'affiché, que quel que soit le nombre de tabulations que vous mettez en début de phrase, elles sont ignorées. Cette balise permet d'avoir un passage qui ne va pas être soumis aux règles d'affichage habituelles.
Exemple d'utilisation :
<pre>
Ici je peux formater le texte comme je le veux.
Par exemple, je peux simuler un tableau.

Balise     Contenu      Attributs spécifiques
 a          le lien      href="URL"
 br         N/A          N/A
</pre>
dl, dt, dd
Des listes de définitions. Le fonctionnement est très similaire à celui des balises ul, ol et li. C'est la balise dl qui joue le rôle de marqueur de liste et les balises dt et dd permettent de donner le terme à définir et la définition associée, respectivement. Il y peut y avoir plusieurs termes par définitions et/ou plusieurs définitions par terme.
Exemple d'utilisation :
<h1>Glossaire</h1>
<dl>
  <dt>HTML</dt>
  <dd lang="en">HyperText Markup Language</dd>
  <dd>Langage de balisage permettant d'écrire des documents électroniques, directement exploitables sur l'Internet.</dd>
  <dt>Balise</dt>
  <dt lang="en">tag</dt>
  <dd>Élément de notation permettant de délimiter une zone de texte en vue de lui donner un sens et/ou de lui procurer un affichage spécifique.</dd>
  <dt>Attribut</dt>
  <dd>clé associée à une balise à laquelle on peut affecter une valeur.</dd>
</dl>
div
Balise sans signification particulière qui permet principalement de grouper différents contenus les uns avec les autres en vue, par exemple, d'une mise en forme ultérieure.
Exemple d'utilisation :
<div lang="fr">
  <h1>Baliser sans crainte</h1>
  <p>Baliser un texte consiste à l'encadrer avec des balises.</p>
</div>
<div lang="en">
  <h1>Focus on tagging</h1>
  <p>Tagging represents the act of enclosing text between tags.</p>
</div>
hr
Une séparation thématique entre deux paragraphes. Traditionnellement cette balise est rendue de manière visuelle dans le document en traçant une ligne horizontale là où elle apparaît. C'est une balise qui est vide et qui apparaîtra donc toujours sous sa forme abrégée.
Exemple d'utilisation :
<p>Le SGML est un langage de description de documents relativement ancien et difficile à appréhender. Cependant, ses capacités poussées font qu'il est toujours très utilisé aujourd'hui dans l'industrie pour l'écriture de documentations techniques complexes.</p>
<hr/>
<p>Le HTML est un langage qui sert uniquement à écrire des documents numériques destinés à être publiés sur l'Internet.</p>
blockquote
Permet de citer un texte provenant d'une source tierce.
Exemple d'utilisation :
<blockquote>
  <p>En essayant continuellement on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche.</p>
</blockquote>
<p>- devise Shadok</p>

Sémantique niveau texte

Nous n'avons vu pour l'instant que deux balises permettant de donner de la sémantique au texte. Elles sont pourtant très nombreuses et les principales sont décrites ci-dessous.

em
Mettre l'accent sur un mot, une phrase ou une partie de phrase. Cette balise sémantique a vu sa signification modifiée avec HTML5. Cependant, de nombreux navigateurs continuent de lui donner un rendu différent du texte qui l'entoure, par défaut. En pratique, le texte compris dans une balise em sera affiché en italique. Idéalement le rendu visuel devrait changer en fonction de la langue utilisée dans le texte ou définie par l'utilisateur du navigateur. Ce n'est pas toujours le cas.
Exemple d'utilisation :
<p>Le balisage d'un document numérique se fait en vue de <em>structurer</em>, <em>grouper</em> et donner des <em>informations de sémantique</em>.</p>
abbr
Expliciter une abréviation, un sigle. Cette balise fonctionne en utilisant un attribut obligatoire qui est title, dans lequel on donne la version longue de l'abréviation. Le contenu lui-même de la balise est le sigle abrégé. Le rendu visuel est tel que le sigle est souligné par des pointillés et le fait de passer le curseur de la souris dessus fait apparaître la valeur de l'attribut title dans une bulle d'aide.
Exemple d'utilisation :
<p>Ce document décrit brièvement les mots-clés et la syntaxe du langage <abbr title="HyperText Markup Language">HTML</abbr>.</p>
code
Un extrait de code source. Bien entendu celui là ne sera pas utilisé par tous les auteurs du Web, mais comme ce document s'adresse à un public de programmeurs ... L'affichage reste en ligne, c'est à dire que l'introduction d'une telle balise au milieu d'un paragraphe ne fait pas sauter automatiquement à la ligne, comme la balise pre par exemple. Le rendu visuel est en général du texte utilisant une police de caractères monospace.
Exemple d'utilisation :
<p>Le mot clé <code>char</code> existe pour le langage C, mais n'a pas du tout sa place en HTML. Nous trouverons plutôt dans ce dernier des mots clé comme <code>body</code> ou encore <code>code</code>. Tout ceci, à condition qu'ils soient écrits entre chevrons comme par exemple <code>&lt;code&gt; ... &lt;/code&gt;</code></p>
sub, sup
Mettre en indice avec sub ou en exposant avec sup. Le texte à décaler est simplement à inscrire à l'intérieur de cette balise.
Exemple d'utilisation :
<p>Pour chaque élément D<sub>i</sub> de l'ensemble des documents, il est possible de définir un modèle générique de page<sup><a href="#footnote1">1</a></sup>.</p>
i, b, u
Ces trois balises sont probablement les victimes les plus visibles de la sémantisation de HTML5 et la volonté de séparer la structure de la mise en forme. Auparavant, elles signifiaient que le texte devait être respectivement en italique, en gras ou souligné. À présent, elles signifient que le texte « est une version alternative » pour i, « doit être souligné sans qu'il soit pris pour une version alternative » pour b ou encore « est une annotation non textuelle non articulée » pour u. Cependant, la majorité des navigateurs continuent à afficher le texte contenu dans ces balises comme il l'était auparavant. De ce fait, leur utilisation doit être faite avec prudence et il faut toujours préférer une mise en forme à l'aide de feuilles de styles, même pour ces balises. De ce fait, il n'y aura pas d'exemple d'utilisation.
span
Balise ne signifiant rien en elle-même. Elle ne représente que son contenu et permet principalement d'affecter à un morceau de texte des attributs particuliers.
Exemple d'utilisation :
<p>L'Internet a été inventé par des <span lang="en">hippies</span> et financé par les militaires.</p>
<p>Le <span lang="en">World Wide Web</span> a lui été inventé par <span class="title">Sir</span> <span class="surname">Tim</span> <span class="name">Berners-Lee</span>.</p>

Autres

Il existe d'autres balises utilisées en HTML. Nous en citons encore quelques unes pour se rapprocher d'une présentation exhaustive. Cependant, seule la première (img) nous sera vraiment utile. Les autres seront plus utilisées dans le cadre de création d'un site dynamique où il y a des interactions fortes entre client et serveur, ce qui n'est pas l'objet de ce cours.

img
Permet d'insérer une image dans le flot du texte. Cette balise est toujours vide, son contenu réel étant donné par l'attribut src qui désigne l'URL de l'image en question. Il convient d'ajouter également un attribut alt qui donne un texte descriptif de l'image au cas où elle ne serait plus disponible et que le serveur Web ne pourrait plus la servir ou encore que la personne qui parcourt votre page utilise un navigateur incapable d'afficher des images (navigateur en mode texte, lecteur braille, ...)
Exemple d'utilisation :
<p>Sur l'image de la figure ci-dessous, nous pouvons voir la représentation de l'arborescence d'un document numérique.</p>
<figure>
<img src="/images/doc-tree.png" alt="vision arborescente d'un document numérique" />
</figure>
form, input, button, label, select, option, fieldset, legend
Balises permettant de définir des formulaires.
Exemple d'utilisation directement tiré du site du W3C :
<form method="post"
      enctype="application/x-www-form-urlencoded"
      action="https://pizza.example.com/order.cgi">
  <p><label>Customer name: <input name="custname"></label></p>
  <p><label>Telephone: <input type=tel name="custtel"></label></p>
  <p><label>E-mail address: <input type=email name="custemail"></label></p>
  <fieldset>
    <legend> Pizza Size </legend>
    <p><label> <input type=radio name=size value="small"> Small </label></p>
    <p><label> <input type=radio name=size value="medium"> Medium </label></p>
    <p><label> <input type=radio name=size value="large"> Large </label></p>
  </fieldset>
  <fieldset>
    <legend> Pizza Toppings </legend>
    <p><label> <input type=checkbox name="topping" value="bacon"> Bacon </label></p>
    <p><label> <input type=checkbox name="topping" value="cheese"> Extra Cheese </label></p>
    <p><label> <input type=checkbox name="topping" value="onion"> Onion </label></p>
    <p><label> <input type=checkbox name="topping" value="mushroom"> Mushroom </label></p>
  </fieldset>
  <p><label>Preferred delivery time: <input type=time min="11:00" max="21:00" step="900" name="delivery"></label></p>
  <p><label>Delivery instructions: <textarea name="comments"></textarea></label></p>
  <p><button>Submit order</button></p>
</form>	
		

Encore une chose...

Le HTML permet comme nous l'avons vu de créer des documents destinés à être affichés par des navigateurs. Cependant, ces documents peuvent être longs et complexes. Il peut alors s'avérer intéressant d'avoir un moyen qui aiderait l'éditeur à s'y retrouver. Ces documents peuvent également être produits par des programmes et alors il semble judicieux de pouvoir les annoter en vue de mieux les comprendre.

Il existe pour cela la notion de commentaires en HTML, comme dans un langage de programmation classique. La syntaxe emprunte à la notation traditionnelle des balises : un commentaire débute par la séquence <!-- et se termine par la séquence -->.

Attention, les commentaires ne peuvent pas être entrelacés ou même imbriqués.

Ci-dessous, un extrait de l'exemple que nous avions présenté plus haut, augmenté de quelques commentaires :

<!DOCTYPE html>
<!--
Author  : Xavier Serpaggi
Date    : 03/06/2013
Revision: $Id VERSION 1.2.29$
Licence : CC BY-SA
-->
<html>
  <head>
    <title>Baliser en terrain num&eacute;rique</title>
    <!-- Feuille de style ne tenant pas compte
    des spécificités de IE -->
    <link rel="stylesheet" href="styles/main.css" />
    <meta charset="utf-8" />
    <meta name="author" content="Xavier Serpaggi" />
    <meta name="robots" content="noindex, nofollow" />
  </head>
  <body>
    <h1>De l'&eacute;tude du balisage en terrain num&eacute;rique</h1>

    <!-- ... --> 

    <h2>R&eacute;capitulatif</h2>
    <table>
      <tr>
        <th>Balise</th>
        <th>Contenu</th>
        <th>Attributs sp&eacute;cifiques</th>
      </tr>
      <tr>
        <td>html</td>
        <td>tout le document</td>
        <td>N/A</td>
      </tr>
      <tr>
        <td>body</td>
        <td>tout ce qui est affich&eacute; du document</td>
        <td>N/A</td>
      </tr>
      <tr>
        <td>a</td>
        <td>le texte du lien sur lequel on clique</td>
        <td>href="URL"</td>
      </tr>
      <tr>
        <td>br</td>
        <td>N/A</td>
        <td>N/A</td>
      </tr>
      <!-- tr>
  <td>hr</td>
  <td>N/A</td>
  <td>N/A</td>
</tr -->
    </table>

    <!-- TODO: ajouter une conclusion -->

  </body>
</html>
Utilisation des commentaires en HTML.

Il est intéressant de remarquer que, du fait de la proximité de notation entre les balises et les commentaires, il est très facile de transformer une balise en commentaire en rajoutant simplement les caractères !-- sur la balise ouvrante et -- sur la balise fermante. C'est ce qui a été fait pour la dernière balise tr de l'exemple ci-dessus.

Un exemple

C'est le moment de découvrir l'outil de visualisation du code source de la page qui est inclus dans votre navigateur !

Cette partie sur la description du langage HTML est terminée. Les principaux concepts et les principales balises vous ont été présentées. Cependant gardez en tête que

Bonne écriture et une fois que vous êtes familiarisé avec l'écriture HTML vous pouvez vous pencher sur la mise en forme avec les feuilles de styles CSS présentées ci-dessous.

Bases du CSS

Dans ce chapitre nous allons aborder les bases du langage de mise en forme qui est utilisé de pair avec le HTML. Les CSS ont réellement commencé à exister avec HTML 4, alors que la volonté de séparer le fond de la forme s'est faite plus nette.

Les feuilles de style sont un moyen de sélectionner des balises ou un ensemble de balises pour leur affecter un style particulier. Au travers d'un ensemble de mots clé, chacune des propriétés de rendu visuel du texte peut être modifiée pour correspondre à ce que souhaite l'éditeur.

Un langage de sélection/description

Le principe d'écriture d'une feuille de style est donc d'être capable d'exprimer que l'on désire modifier le style de tel ou tel élément. Ceci se fait à l'aide de sélecteurs. Mais bien souvent, désigner un style par balise, même au sein d'un seul document, n'est pas suffisamment précis. Par exemple, un texte dans un paragraphe (balise p) ne sera pas forcément représenté de la même manière s'il apparaît en tant que sous-titre, ou bien dans une introduction ou encore simplement au milieu du texte. De plus, même si HTML5 propose un ensemble de balises à vocation sémantique, elles restent très générales et ne permettent pas de s'adapter à toutes les situations. Il est alors possible de les spécialiser via l'attribut class qui pourra être cible de règles de style.

Le fond est alors bien séparé de la forme en ce sens que tous les deux sont traités à part, cependant il faut concevoir la structure de son document en sachant a priori la façon dont on désire le mettre en forme.

Mais avant de voir cela plus en détail, il faut s'intéresser aux moyens de faire prendre connaissance de notre feuille de style au navigateur client.

Règles de mise en place dans la page Web

Une feuille de style peut (et ce sera souvent le cas) être partagée par plusieurs pages.

Comme le principe des CSS est la cascade, il peut également y avoir plusieurs feuilles de style pour une page, permettant de compléter la première, d'en modifier certaines définitions ou encore de prendre en charge différents types d'affichages (écran, imprimante, text to speech, ...) Tout ceci sera détaillé plus bas.

Les feuilles de style seront, par commodité, stockées dans des fichiers séparés de la page ou des pages qu'elles viennent mettre en forme. Il est bien entendu possible d'écrire du style directement dans le fichier HTML et ce sera fait pour des cas très particuliers et ponctuels. Cependant, la méthode recommandée par le W3C est bien d'utiliser des fichiers séparés. Il faut tout de même faire le lien entre le fichier HTML et le fichier CSS. C'est un des rôles de la balise link que l'on trouve dans l'en-tête du document.

L'exemple ci-dessous permettra de vous faire une idée de son utilisation :

<head>
  <title>Baliser en terrain num&eacute;rique</title>
  <link rel="stylesheet" href="styles/main.css" />
  <!-- ... -->
</head>
Utilisation de la balise link pour désigner une feuille de style.

Comme vous pouvez le remarquer, cette balise est vide et tout ce qu'elle représente est contenu dans ses attributs. Deux sont obligatoires :

rel
Le type de ce que désigne le lien. Dans le cas d'une feuille de style ce sera toujours stylesheet.
href
L'URL où trouver la feuille de style correspondante. Comme toute URL elle peut être locale (relative ou absolue dans l'arborescence du serveur Web) ou distante.

Deux autres attributs sont souvent présents :

media
Le média auquel est destinée cette feuille de style. Les valeurs couramment rencontrées sont screen, print ou encore braille.
title
Un titre que l'on donne à l'élément. Dans le cas présent d'une feuille de style ça permet à l'utilisateur de la sélectionner facilement via un menu de son navigateur.
<head>
  <title>Baliser en terrain num&eacute;rique</title>
  <link rel="stylesheet" href="styles/main.css" media="screen" title="Affichage &eacute;cran" />
  <link rel="stylesheet" href="styles/styles/print.css" media="print" title="Impression" />
  <!-- ... -->
</head>

À présent que nous savons comment intégrer nos feuilles de style il est grand temps d'apprendre à les écrire !

Règles d'écriture

Le langage permettant d'écrire des CSS n'est ni un langage de description comme le HTML ni un langage de programmation comme le C. C'est un langage de sélection/action. La logique de construction d'une feuille de style est d'écrire des règles qui sont composées d'un ou plusieurs sélecteurs servant à désigner un ensemble d'éléments et pour chacune de ces règles, d'appliquer un style en modifiant une ou plusieurs propriétés.

Commençons par un exemple que nous détaillerons ensuite.

/* Feuille de style pour affichage écran.
 * Redéfinition de certaines valeurs par défaut
 * et modification de la palette de couleurs.
 */

html {
  padding: 0 ;
  background-color: #fafaf4 ;
}

html,
body {
  margin: 0 ;
}

body {
  background-color: rgb(255,255,255) ;
  color: #333333 ;
  border: 1px solid rgb(217,217,217) ;
}

header * {
  text-shadow: 0 0 5px #c0c0c0 ;
}

header h1 {
  font-family: Georgia, serif ;
  color: rgb(43, 44, 109) ;
  text-align: center ;
}

pre.code {
  background-color: rgb(245, 253, 247) ;
  color: #000000 ;
  font-family: monospace ;
  white-space: pre-wrap ;
}
Exemple de feuille de style.

La première règle ne concerne que la balise html. Elle est seule désignée avant le bloc d'accolades. Pour cette règle, deux propriétés sont modifiées : padding et background-color.

On remarque la syntaxe pour modifier une propriété. Il faut préciser son nom, toujours en lettres minuscules, suivi du caractère : puis de la nouvelle valeur de la propriété et enfin, terminer avec le caractère ;. Toute définition de propriété doit être terminée par le caractère ; sauf éventuellement la dernière d'une règle. Cependant, pour des raisons de cohérence d'écriture et de facilité de maintenance, il convient de terminer toutes les définitions par un ; y compris la dernière.

Nous pouvons noter sur cette règle la façon de décrire une couleur, tout à fait classique dans le monde de l'informatique. Cette notion sera détaillée ultérieurement, mais pour fixer les idées dès à présent, ce sont les valeurs hexadécimales correspondant aux trois couleurs primaires rouge, vert et bleu. Les valeurs sont données entre 00 et ff (soit entre 0 et 255 en décimal). 00 correspond à pas du tout de la composante et ff correspond au maximum de la composante. Il est possible d'écrire ces valeurs en majuscule ou en minuscule indifféremment.

La deuxième règle concerne la balise html (encore) et body. On peut savoir que les deux balises sont concernées par cette règle du fait qu'elles apparaissent devant le bloc d'accolades et qu'elles sont séparées par une virgule.

Ici ce sont les marges de ces deux balises qui sont affectées. Nous détaillerons le modèle de boîtes plus tard.

La troisième règle concerne à nouveau la balise body. Vous pouvez remarquer que les couleurs peuvent également s'écrire sous la forme d'un triplet RGB décimal en utilisant la notation rgb(<valeur pour le rouge>, <valeur pour le vert>, <valeur pour le bleu>).

La règle suivante, la quatrième, est plus compliquée au niveau du sélecteur. En effet, elle désigne tous les élément qui sont à l'intérieur d'une balise header. C'est le sens de header *. Ce n'est pas la balise header qui est concernée, mais la balise * qui est à l'intérieur de la balise header (c'est à dire toutes les balises dans le sous-arbre dont la racine est header). La différence avec la règle n°2 est subtile, cependant, il n'y a pas de virgule entre les deux noms de balise et de fait ce ne sont pas les deux qui sont concernées.

Il en va de même pour la cinquième règle où la balise dont on modifie effectivement le style sera la balise h1, mais uniquement si elle se trouve dans une balise header.

Enfin, la sixième et dernière règle ne va sélectionner que les balises pre dont l'attribut class a la valeur code. On commence à entrer ici dans les spécificités des CSS en pouvant désigner une balise particulière grâce à une classe.

Comme vous pouvez le remarquer sur ces exemples, le jeu consiste à écrire les bons sélecteurs pour désigner les bonnes balises. La modification des propriétés n'est pas en elle même une difficulté et c'est plus le côté artistique de chacun qui s'exprimera alors. La juste sélection des balises demande une approche plus rigoureuse et une structuration préalable de son code HTML.

La section suivante donne un aperçu des sélecteurs les plus employés.

Sélecteurs basiques

Nous avons déjà abordé le sujet dans les sections précédentes, le rôle des sélecteurs est de désigner un élément ou un ensemble d'éléments.

Pour ceci, il y a quelques éléments de vocabulaire importants sur l'organisation du document HTML à noter :

élément (element)
Une balise, où qu'elle soit située dans l'arborescence du document.
descendant (descendant)
Tout élément qui se trouve dans un sous-arbre d'un élément donné. C'est le sens généalogique et donc, il n'y a pas de limite de profondeur au sous-arbre.
enfant (child)
Un descendant direct d'un élément donné. C'est également au sens généalogique et donc un enfant doit se trouver directement sous l'élément concerné. Un élément donné peut avoir plusieurs enfants.
parent (parent)
L'ascendant direct d'un élément. Un élément donné a un et un seul ascendant. En réalité, l'élément html est le seul à ne pas en avoir.
frère (sibling)
Tout élément qui partage le même parent que l'élément considéré. Un élément peut donc avoir 0 ou plusieurs frères.

Ci-dessous une table qui regroupe les sélecteurs usuels. Une description complète des sélecteurs niveau 3 est disponible au W3C. Le sens est donné ici pour une utilisation sur des balises HTML.

Format Signification
* Sélectionne tout élément
e Sélectionne tout élément e (c'est à dire un élément de type e).
e f Sélectionne tout élément f qui est un descendant d'un élément e.
e > f Sélectionne tout élément f qui est fils de l'élément e.
e:first-child Sélectionne tout élément e qui est le premier fils de son parent.
e:link
e:visited
Sélectionne l'élément e si e est la source d'une ancre ou d'un hyperlien dont la cible n'a pas encore été visitée (:link) ou a déjà été visitée (:visited).
e:active
e:hover
Sélectionne l'élément e si e est la source d'une ancre ou d'un hyperlien et que l'utilisateur est en train de cliquer dessus (:active) ou qu'il a simplement son pointeur qui passe dessus (:hover).
e:focus Sélectionne e pendant certaines interactions utilisateur (l'élément a le focus).
e:lang(c) Sélectionne un élément de type e s'il est en langage (humain) c.
e + f Sélectionne tout élément f qui est immédiatement précédé par un élément e de même niveau.
e[foo] Sélectionne tout élément e qui a un attribut nommé foo (quelle que soit sa valeur).
e[foo="warning"] Sélectionne tout élément e dont l'attribut foo a exactement la valeur warning.
e[foo~="warning"] Sélectionne tout élément e dont l'attribut foo est une liste de valeurs séparées par des espaces et dont l'une est exactement warning.
e[lang|="en"] Sélectionne tout élément e dont l'attribut lang a une liste de valeurs, séparées par des traits-d'union, dont la première en partant de la gauche est en.
div.warning Sélectionne tout élément div dont l'attribut class contient la valeur warning (équivalent à div[class~="warning"]).
e#myid Sélectionne tout élément e dont l'attribut id est égal à myid.

Ces sélecteurs sont au cœur des CSS. La compréhension de leur mode de fonctionnement est donc une étape importante.

Les sélecteurs présentés ici sont ceux qui sont issus des spécifications CSS2.1. Ce sont les plus courants et ceux avec lesquels on peut facilement commencer à travailler. Cependant, la publication Web est un domaine où on a souvent toujours envie d'en faire plus. Il est alors recommandé de se plonger dans la recommandation des sélecteurs niveau 3.

Dans tous les cas et quel que soit le niveau auquel vous abordez l'écriture de CSS il faudra comprendre comment les règles s'appliquent et comment elles se cascadent. Nous allons aborder ce point dans la section suivante.

Assignation des propriétés et cascade

Comprendre comment peuvent s'appliquer les règles est primordial pour ne pas faire face à des comportements a priori incompréhensibles.

La style que va avoir un élément au final, dépend de quatre facteurs :

  1. la valeur spécifiée (specified value) ;
  2. la valeur calculée, résultant de l'héritage (computed value) ;
  3. la valeur absolue (used value) ;
  4. et la valeur finale, dépendante de l'environnement (actual value).

Chacune de ces valeurs est calculée en fonction de la précédente et toutes sont détaillées ci-dessous.

Valeur spécifiée

C'est une valeur elle même obtenue par l'évaluation des règles suivantes :

  1. si un résultat existe par cascade, c'est celui que l'on utilise ;
  2. sinon, si la propriété est héritée, on utilise la valeur de l'élément parent ;
  3. sinon, c'est la valeur initiale de la propriété, telle que spécifiée dans la définition de cette dernière, qui sera utilisée.

Valeurs calculées

Les valeurs calculées sont des valeurs absolues en ce sens qu'elles sont directement liées au média de visualisation utilisé à un instant donné. Les distances (par exemple) ne seront plus relatives les unes avec les autres, mais exprimées en unités du dispositif de visualisation (des pixels par exemple, pour un écran).

Elles sont en général très proches des valeurs finales utilisées, mais comme nous l'avons vu au départ, elles n'interviennent que dans la seconde série des quatre règles initiales. Elles peuvent encore être modifiées.

Héritage

L'héritage est la faculté qu'a une propriété de prendre la valeur de la même propriété dans l'élément parent. Une propriété sait si elle est capable d'hériter de la valeur d'une des propriétés de son parent, c'est dans sa définition et c'est mis en œuvre au sein des navigateurs.

Il est important de noter que, si héritage il y a, c'est la valeur calculée qui est utilisée. Cette nouvelle valeur ne pourra donc plus être évaluée au sens de l'adaptation au dispositif de visualisation, par exemple.

Cette valeur héritée, devient à la fois la valeur spécifiée et calculée de la propriété concernée.

Et bien entendu, l'héritage s'entend au sens de l'arborescence du document. Il n'est pas possible qu'un élément hérite de la valeur d'un de ses frères ou d'un de ses descendants.

Cascade

Les règles de calcul des propriétés évoquées ci-dessus sont valables dans le cadre d'une feuille de style unique, définie soit dans le document directement, soit dans un fichier annexe. Cependant, ce n'est pas souvent le cas et les feuilles de style peuvent avoir plusieurs origines :

  1. l'auteur du document auquel elle est rattachée ;
  2. l'utilisateur du navigateur Web qui peut définir une feuille de style par défaut ;
  3. le navigateur Web qui a une feuille de style interne pour avoir un affichage par défaut d'un document.

Il faut alors procéder à un arbitrage et, par défaut, l'auteur passe avant l'utilisateur qui lui même passe avant le navigateur.

Tout ceci reste valable, sauf si une propriété est suivie du qualificatif !important qui inverse la précédence entre les règles définies par l'auteur et celles définies par l'utilisateur, pour la propriété concernée.

La qualificatif !important est également utile au sein d'une même feuille de style dans le cas où un élément serait la cible de plusieurs règles, comme exposé dans le bout de CSS ci-dessous.

p {
  border: 1px dotted rgb(255,100,100) !important ;
}
p {
  border-bottom: 1px solid rgb(0,0,0) ;
}
Utilisation du qualificatif !important dans une définition de propriété. Bien que la seconde règle soit écrite après la première (dixit M. de Lapalisse) c'est cette dernière, donc la première, qui prendra le pas du fait de la présence du qualificatif !important.

Spécificité

Dans le cadre de mise en forme complexe ou d'utilisation de nombreuses feuilles de style, un même élément peut être la cible de plusieurs règles. Il faut donc déterminer laquelle va s'appliquer. Ceci est fait à l'aide d'une notion particulière aux CSS que l'on nomme spécificité. Le principe en est décrit ci-dessous.

Chaque sélecteur, une fois toutes les feuilles de style chargées, se voit attribuer une spécificité sous la forme d'un quadruplet (a,b,c,d) selon les règles suivantes :

  • a = 1 si la déclaration émane d'un attribut style plutôt que d'un sélecteur (c'est à dire que la propriété est déclarée directement dans la balise au sein de la page), 0 sinon ;
  • b = le nombre d'id dans le sélecteur ;
  • c = le nombre d'autres attributs et pseudo-classes dans le sélecteur ;
  • d = le nombre de noms d'éléments et de pseudo-éléments dans le sélecteur.

Le style de l'élément sera celui désigné par le sélecteur ayant la plus forte spécificité, c'est à dire dont le nombre formé par a × 1000 + b × 100 + c × 10 + d a la valeur la plus élevée.

Ne seront (re)définies que les règles étant décrites pour ce sélecteur, mais dans ce cas c'est l'intégralité de la règle qui s'applique, on ne fait pas de distinction sur les propriétés.

Dans l'exemple suivant, sont mise en commentaire les spécificités d'un ensemble de sélecteurs.

* { }             /* a=0, b=0, c=0, d=0 */
p { }             /* a=0, b=0, c=0, d=1 */
p:first-child { } /* a=0, b=0, c=0, d=2 */
ul li { }         /* a=0, b=0, c=0, d=2 */
ul > li { }       /* a=0, b=0, c=0, d=2 */
dl > dt[lang] { } /* a=0, b=0, c=1, d=2 */
pre.code.wrap { } /* a=0, b=0, c=2, d=1 */
#toc { }          /* a=0, b=1, c=0, d=0 */
[id="toc"] { }    /* a=0, b=0, c=1, d=0 Attention ici, id est considéré comme un attribut classique et non comme un réel ID */
style=""          /* a=1, b=0, c=0, d=0 */
Calcul des spécificités des sélecteurs.

La logique est donc relativement claire : au plus on donne de précisions sur l'élément destination (au plus on est spécifique), au plus il obtient une valeur de spécificité élevée.

Cette valeur est assez fastidieuse à calculer à la main et en pratique, il est tout de même assez rare qu'il faille le faire. Par contre, il est très intéressant de savoir comment tout cela est pensé pour comprendre pourquoi certains comportements qui semblent étranges sont en fait normaux. La pratique permet de trouver rapidement une solution sans avoir à calculer les valeurs de spécificité.

Voici donc terminée la partie théorique concernant l'écriture des CSS. C'est à peu près tout ce qu'il y a à savoir. À présent nous allons nous intéresser à ce qu'il est possible de modifier (quelles sont donc ces fameuses propriétés) et nous allons commencer par un point relativement simple : les couleurs.

Modèle de couleurs

Avant de voir la façon dont on modifie les couleurs d'un élément visuel, il faut comprendre comment elles sont représentées.

Modèles de représentation

Nous l'avions abordé plus haut, le modèle de couleur habituellement utilisé pour les CSS n'invente rien et reprend les grands standards de l'informatique graphique : l'utilisation des couleurs primaires rouge, vert et bleu (modèle RGB). Chacune de ces teintes de base peut se composer avec les autres pour donner les différentes couleurs. Les valeurs de chaque composante varient toutes entre 0 et 255. Il est donc possible de créer 256 × 256 × 256 = 16777216 couleurs.

Une autre représentation des couleurs existe depuis la spécification du module de couleurs de CSS3. Ce modèle, HSL, est préféré des graphistes qui y voient une représentation plus naturelle et plus proche d'une palette de peintre. Enfin, le modèle HSL n'est vraiment qu'une représentation différente des couleurs et il n'est pas possible de représenter des couleurs différentes de celles du modèle RGB.

Expression des valeurs

Selon le modèle employé les valeurs ne sont pas représentées de la même manière. Commençons avec le modèle RGB. L'objectif est de donner un triplet de valeurs toutes comprises entre 0 et 255. CSS nous propose les solutions suivantes :

#RRGGBB
RR, GG et BB sont des valeurs héxadécimales comprises entre 00 et FF.
h1 {
  color: #0C4E9C ;
}
rgb(r,g,b)
r g et b sont soit les valeurs comprises entre 0 et 255, soit des pourcentages où 0% représente 0 et 100% représente 255.
div {
  background-color: rgb(192,132,0) ;
  color: rgb(97%,91%,78%) ;
}

Pour le modèle HSV, il faut également spécifier un triplet, mais chaque élément est donné dans des unités différentes.

hsl(h,s,l)
h représente un angle en degrés (donc entre 0 et 359), s et l représentent un pourcentage.
body {
  background-color: hsl(240,29%,61%) ;
}

Transparence

Il est possible de rendre des couleurs plus ou moins transparentes. Sur les modèles précédents, seules des déclinaisons de rgb(r,g,b) et de hsl(h,s,l) peuvent profiter de cet effet en rajoutant une quatrième composante qui est une valeur alpha comprise entre 0 et 1.

Il est également possible de rendre une couleur complètement transparente en utilisant le mot-clé transparent.

En résumé et en exemple nous avons donc :

rgba(r,g,b,a)
hsla(h,s,l,a)
Permet de rendre la couleur partiellement transparente. La valeur de a varie entre 0 pour complètement transparente, à 1 pour complètement opaque. Le calcul de la valeur finale se fait en faisant la moyenne des couleurs mises en jeu pondérées par a pour la couleur "vue en transparence" et 1 - a pour la couleur transparente.
div {
  background-color: rgba(255,255,255,0.86) ;
  color: rgb(255,250,245) ;
}
transparent
Rend la couleur entièrement transparente. C'est un raccourci pour rgba(0,0,0,0).
header {
  background-color: transparent ;
}

Il reste à connaître les propriétés desquelles il est possible de changer la couleur. Elles sont relativement peu nombreuses et les principales sont color, background-color, border-color. La première permet de modifier la couleur du texte d'un élément, la deuxième la couleur de fond et la dernière la couleur du bord s'il est présent ou s'il est activé.

Ces propriétés sont applicables à tout élément qui aura un rendu visuel. Cela représente une grande majorité des éléments.

Expression des dimensions

Au fil de vos utilisations des CSS vous voudrez certainement modifier la taille des objets qui constituent vos pages. Cela peut être la taille d'une police de caractères ou la taille d'une bordure, d'une marge, de l'espace entre les mots, ... À chaque fois ce sont des dimensions que l'on devra donner.

Ces dimensions peuvent s'exprimer de manière absolue, comme par exemple en précisant le nombre de pixels nécessaires pour l'espace entre deux paragraphes ou encore le nombre de points qu'il doit y avoir entre le bord de la page et le texte. L'avantage des dimensions absolues c'est qu'en général, elles correspondent à quelque chose auquel le créateur peut rapidement donner un sens physique. Ceci a cependant l'inconvénient de figer la mise en forme et ne permet pas de s'adapter automatiquement à la variété croissante des dispositifs de visualisation (écran d'ordinateur, tablette, smartphone, téléviseur, ...)

Les dimensions absolues sont : le pouce (in), le centimètre (cm), le millimètre (mm), le point (pt), le pica (pc) et le pixel (px).

nav {
  border: 1px solid rgb(150,150,150) ;
  border-bottom-width: 3px ;
  word-spacing: 0.9pc ;
}
Exemples d'expressions de dimensions absolues.

Pour réduire le problème de la rigidité induite par les unités absolues, des unités relatives ont été imaginées. Elles sont utilisées comme les unités absolues, mais sont définies par rapport à la dimension affectée à une autre propriété. Ceci permet d'imaginer des mises en pages beaucoup plus fluides qui sont capables de s'adapter, dans une certaine mesure, à la taille du média de visualisation et donc d'une certaine manière, à son type. Il sera alors possible de dire que la marge de tel paragraphe doit être un multiple de la hauteur moyenne des caractères de la police utilisée ou que la largeur de la zone de texte affichable doit être un multiple de la taille de la police de caractères.

Les dimensions relatives sont : la taille calculée de la police de caractères courante (em) et la hauteur calculée de la lettre x dans la police de caractères courante (ex).

Comme ces dimensions sont définies par rapport à la taille de la police courante, elles ont une signification particulière quand elles servent à définir la taille de la police elle-même. Dans ce cas, elles deviennent relatives à la taille calculée de la police de l'élément parent.

body {
  margin: 0 ;
  padding: 1ex 1em ;
}
Exemples d'expressions de dimensions relatives.

Enfin, il est possible d'exprimer des dimensions sans unité, mais comme étant égales à un pourcentage de la valeur d'une autre propriété héritée. Il est également possible de laisser le moteur de rendu déterminer automatiquement la dimension d'un élément ou d'une des tailles d'un élément.

table {
  width: 90% ;
  margin-left: auto ;
  margin-right: auto ;
}
Exemples d'expressions de dimensions sans unité.

Mais quelles sont les propriétés auxquelles il est possible d'affecter une taille ? Il y en a en fait un nombre relativement limité et les principales sont données ci-dessous.

La largeur d'un élément (width), les marges autour d'un élément (margin, margin-top, margin-right, margin-bottom, margin-left), l'espacement entre le bord d'un élément et son contenu (padding, padding-top, padding-right, padding-bottom, padding-left), la largeur minimale d'un élément (min-width) et sa largeur maximale (max-width). Ces notions seront abordées dans la section suivante sur le modèle de boîtes.

Il y a également la taille des bordures (border-width, border-top-width, border-right-width, border-bottom-width, border-left-width), la taille des polices de caractères (font-size), la hauteur des lignes (line-height), l'espacement entre les mots (word-spacing) et l'espacement entre les lettres d'un mot (letter-spacing).

Modèle de boîtes

En HTML, chaque élément définit une boîte. Cette dernière dispose de propriétés particulières qui régissent son comportement : ses dimensions et son mode d'affichage.

Dimensions des boîtes

Une boîte au sens HTML/CSS comporte quatre dimensions qui peuvent être précisées de manière plus ou moins indépendantes.

margin
Les marges sont les espaces entre le bord de la boîte et les autres boîtes. Il est possible de donner une valeur différente aux quatre marges d'une boîte (haut, droite, bas et gauche).
border
La bordure est la frontière entre l'intérieur et l'extérieur de la boîte. Le bord existe toujours mais peut ou pas être visible. Dans le cas où il est visible, il est possible d'en modifier sa largeur et ce, indépendamment pour les quatre côtés de la boîte.
padding
Le bourrage est l'espace intérieur entre le bord de la boîte et son contenu. Il est possible de donner des valeurs différentes à chacun des quatre espaces (haut, droite, bas et gauche).
width
La largeur totale de la boîte qui est calculée selon deux modalités différentes. La modalité content-box avec laquelle width représente la largeur du contenu de la boîte. La largeur totale de la boîte se calcule en ajoutant les bordures, marges et bourrages. La modalité border-box pour laquelle la propriété width représente la largeur totale de la boîte. La largeur du contenu lui même se déduit donc en soustrayant toutes les bordures, marges et bourrages.

La figure ci-dessous propose un résumé graphique de ces propriétés.

margin-top border-top padding-top padding-right border-right margin-right margin-bottom border-bottom padding-bottom padding-left border-left margin-left contenu
Représentation du modèle de boîtes.

Mode d'affichage des boîtes

En plus de leurs dimensions, les boîtes ont un modèle d'affichage qui dépend de leur nature. Par exemple, une boîte générée par une balise p induira un passage à la ligne avant et après. C'est le mode block. Par contre, une boîte générée par une balise span sera dite inline (en ligne) puisqu'elle s'affichera dans le flot des éléments dans lequel elle apparaît.

Il est cependant possible de modifier, pour chacune des boîte, le mode d'affichage par défaut. C'est la propriété display qui est responsable de ça. Elle peut prendre plusieurs valeurs, dont nous présentons les principales ici.

none
La boîte n'est pas affichée et n'est même pas prise en compte dans les calculs d'agencement du document. C'est comme si elle n'existait pas pour le moteur de rendu.
inline
La boîte est affichée dans le flot des éléments dans lequel elle apparaît. Aucun passage à la ligne n'est opéré automatiquement.
block
La boîte est un bloc séparé du flot des éléments. Un passage à la ligne automatique est effectué avant et après elle.
inline-block
La boîte va être intégrée au flot des éléments dans lequel elle apparaît, cependant, l'intérieur de cette boîte sera considéré comme un bloc.

En plus de ces possibilités d'affichage, il est également possible de déterminer si la boîte est visible ou pas à l'aide de la propriété visibility qui peut prendre les valeurs visible ou hidden. Là, contrairement à une boîte définie comme display: none, une boîte à qui on affecte la propriété visibility: hidden sera prise en compte dans les algorithmes de mise en forme de la page. Il y aura simplement un rectangle vide à la place de cette boîte.

En plus de simplement pouvoir modifier la façon dont est affichée une boîte, il est possible de modifier plus précisément son placement dans la page. C'est ce qui est abordé dans la section suivante.

Positionnement

Les objets formant un document numérique sont positionnés les uns par rapport aux autres de manière automatique par le dispositif de rendu et de visualisation (par exemple un navigateur). Cependant, pour des raisons de facilité de lecture, de choix de mise en page ou autre, il est possible de modifier la façon dont ces objets vont se positionner. Nous allons distinguer trois grands modes de positionnement qui seront mutuellement exclusifs. Le premier est le positionnement dans le flot. Ensuite, nous verrons qu'il est possible de positionner un élément de manière absolue. Enfin, nous aborderons le positionnement hors du contexte de formatage avec les objets flottants.

Nous allons détailler les différents modèles de positionnement et nous allons expliquer comment les appliquer. Pour cela nous allons utiliser des propriétés CSS particulières (position, float). Cependant certaines propriétés sont communes à tous ces modèles et permettent d'agir différemment selon le contexte. Ce sont les propriétés top, right, bottom et left. Elles auront pour valeur un entier relatif et désigneront un décalage ou une position dans le repère formé par le dispositif de visualisation dont l'origine est en haut à gauche.

Nous discuterons enfin de la notion d'empilement des objets dans les documents, en nous intéressant à la position relative de ces objets sur un axe qui serait perpendiculaire à notre surface de visualisation.

Positionnement dans le flot

On dit qu'un objet est positionné dans le flot (sous-entendu, dans le flot des objets à agencer) quand sa présence va modifier le positionnement des objets alentours. C'est le cas par exemple d'un titre que l'on va insérer entre deux paragraphes. Il va falloir recalculer les marges hautes et basses, ajuster les bordures, les bourrages, les alignements, ...

Il existe deux façons de positionner un objet dans un flot. Ce sont deux des valeurs que peut prendre la propriété position et elles sont détaillées ci-dessous.

static
C'est le comportement normal, quand rien n'est précisé. La boîte est mise en forme de manière classique. Cette valeur sera surtout utilisée pour revenir en arrière dans le cadre d'une cascade CSS et quelles que soient les valeurs de top, right, bottom et left, elles seront ignorées.
relative
La boîte générée par l'élément est positionnée dans le flot normal, mais elle peut-être décalée relativement à son parent à l'aide des propriétés top, right, bottom et left.
Exemple de positionnement relatif sur la balise sup :
sup {
  vertical-align: baseline ;
  position: relative ;
  bottom: 1.2ex ;
  right: 0.2ex ;
}

Retenons du positionnement relatif qu'il modifie l'agencement des objets.

Positionnement absolu

Contrairement au positionnement relatif, ici nous allons positionner nos objets par rapport à une référence absolue. Ainsi positionnés ils n'affecteront plus la répartition des boîtes alentours.

Ce qui va changer dans les deux méthodes de positionnement absolu, c'est la référence :

absolute
La position de la boîte est déterminée par un décalage vis à vis de la boîte englobante la plus proche dont le positionnement n'est pas static. La boîte ainsi positionnée restera fixe par rapport à cette boîte référence, mais défilera avec le reste du contenu (si défilement il y a).
Exemples de positionnements absolus :
section div.toc {
  position: absolute ;
  top: 0 ;
  right: 0 ;
}
body nav {
  position: absolute ;
  left: 10% ;
  bottom: 0 ;
}
fixed
La position de la boîte est calculée en fonction d'un décalage par rapport à l'origine du dispositif d'affichage. Les boîtes ainsi positionnées resteront toujours au même endroit, quel que soit l'état de défilement du document.
Exemple de positionnement fixe :
body header {
  position: fixed ;
  top: 0 ;
  left: 0 ;
  right: 0 ;
  width: 100% ;
}

Retenons du positionnement absolu qu'il sort les objets concernés du flot de formatage standard.

Objets flottants

Il reste à présent à aborder la notion d'objets flottants. Ces derniers vont influer sur l'agencement dans le flot, mais vont pouvoir se positionner automatiquement de manière plus souple. L'exemple le plus parlant d'objet flottant sera l'image insérée dans un texte. Elle va être déplacée d'un côté ou de l'autre du texte et va influer sur sa répartition en le faisant la contourner.

Dans le cas des objets flottants, le terme de positionnement est sans doute un peu usurpé, comme l'est sa position dans cette section. Cependant, c'est une méthode pour changer l'agencement des objets, c'est pourquoi nous avons choisi d'en parler ici.

Contrairement aux autres méthodes de positionnement, nous utiliserons la propriété float pour les définir en tant que tels.

La question sera alors de savoir si l'on veut que ça flotte à gauche, à droite ou pas du tout. C'est pour cette raison que cette propriété pourra prendre trois valeurs left, right et none. En réalité, il est possible qu'elle prenne une quatrième valeur qui est inherit.

Comme un objet flottant modifie l'agencement du texte dans lequel il est plongé, il est nécessaire d'avoir un moyen permettant d'empêcher cela. C'est le rôle de la propriété clear qui peut prendre les valeurs left, right ou both. Cette propriété ne s'applique pas à un objet flottant, mais à un objet dont on ne veut pas qu'il soit impacté par la présence d'un objet flottant. Les trois valeurs différentes permettent de désigner lequel des côtés de cet objet ne doit pas se trouver accolé à un objet flottant.

Ci-dessous un exemple illustrant ces propriétés avec le code CSS puis le code HTML.

aside {
  white-space: normal ;
  float: right ;
  margin: 1ex 0 1ex 1ex ;
  padding: 0.5ex ;
  width: 30% ;
}
.clear-float {
  clear: both ;
}
<!-- ... -->
  <h2>M&eacute;thodologie</h2>
<!-- ... -->
  <p>Pour bien baliser en terrain num&eacute;rique, il convient d'&ecirc;tre prudent, et de poser chaque rep&egrave;re l'un apr&egrave;s l'autre.</p>
  
  <p>Tout d'abord, poser une premi&egrave;re balise.<br/>Ne pas oublier de fermer la balise, c'est tr&egrave;s important.<br/>Poser ensuite une deuxi&egrave;me balise.<br/>Continuer ainsi jusqu'&agrave; la fin du document.<p/>

<aside>
<p>Il n'est pas n&eacute;cessaire que les balises soient clignotantes. Cependant, cela peut rajouter un air festif &agrave; votre mise en page.</p>
</aside>
  <p class="clear-float">Une fois toutes les balises correctement dispos&eacute;es, vous pouvez <a href="http://validator.w3.org/">v&eacute;rifier</a> que votre HTML est conforme avant de le publier.</p>
<!-- ... -->
Utilisation d'un objet flottant et de la propriété clear. Le premier code est la feuille de style qui serait appliquée à l'exemple HTML qui suit.

Empilement vertical

Les éléments qui se recouvrent ne sont pas tous positionnés au même niveau, à l'image de feuilles de papier sur une table. De ce fait, certaines parties d'un objet sont visibles alors que d'autres peuvent être masquées par d'autres éléments. En général, tout se passe relativement bien et l'agencement par défaut permet de voir tout ce que l'on s'attend à voir. En fait, cet agencement reprend la structure arborescente du document en plaçant la balise html au niveau le plus bas et en empilant par dessus. Parfois cependant, un chevauchement disgracieux peut apparaître. C'est le cas quand on modifie le positionnement des objets manuellement par exemple. Il est alors possible de préciser, via la propriété z-index, dans quel niveau les éléments affectés par la règle en question doivent être placés.

Cette propriété prend comme valeur un entier dont la valeur commence à 0 (ce qui correspond au niveau le plus éloigné de l'utilisateur) et augmente sans vraiment de limite.

Les graphistes parmi vous pourront se référer à l'image des calques que l'on empile.

Ci-dessous, un exemple de positionnement vertical forcé pour un élément de navigation qui doit rester au dessus des autres.

body {
  z-index: 0 ;
  margin-top: 50px ;
  width: 90% ;
  margin-left: auto ;
  margin-right: auto ;
}
nav {
  width: 100% ;
  margin: 0 ;
  border-bottom: 2px solid blue ;
  min-height: 50px ;
  z-index: 10 ;
}
Exemple de positionnement vertical.

Encore une chose ...

Là encore, il est possible d'ajouter des commentaires à nos feuilles de style. Ils sont très utiles pour expliciter des choix (à destination d'autres personnes ou de nous même) ou pour désactiver temporairement des styles en période de mise au point.

La syntaxe est celle du langage C, c'est à dire qu'un commentaire commence par les deux caractère /* et se termine par les deux même caractères dans l'ordre inverse */. Il n'est pas possible d'imbriquer ou d'entrelacer les commentaires.

Ci-dessous, un exemple de feuille de style commentée.

/* demo.css : cas d'utilisation des commentaires
 *            dans les feuilles de style CSS.
 * Auteur   : Xavier Serpaggi
 * Date     : 03/06/2013
 */


/* Les éléments de structure */
* {
  font-family: serif ;
}

/* Mise en forme spécifique */
a[lang="en"]:before {
  content: url("/images/en.png") ;
}

/* Adaptation au media */
@media (max-width: 650px) {
  body {
    margin: 0 ;
    border: none ;
    width: 100% ;
    /* padding: 0 ; */
  }
}
Utilisation des commentaires dans une feuille de style.

Un exemple

Vous avez découvert au moment de HTML la possibilité qu'a votre navigateur d'afficher le code source d'une page Web. Vous pouvez également afficher le code source des feuilles de style. Ceci se fait simplement, dans la vue du code source HTML, en cliquant sur le lien de l'URL du fichier CSS dans la balise link concernée.

Ceci est possible avec tous les documents que vous pouvez lire en ligne. Cependant, pour des raisons valables (efficacité par exemple, sachant qu'un saut à la ligne c'est un caractère) ou moins valables (masquage ou cryptage du code), il est parfois difficile de les lire. Heureusement de nombreux logiciels ou add-ons aux navigateurs permettent de bien s'en sortir.

Javascript

L'Internet, comme tout domaine naissant, n'a demandé qu'à se développer et a pris un chemin qui n'a sans doute pas été imaginé par ses concepteurs. De pages statiques dont l'unique but était d'informer et de documenter, nous sommes passés à des sites dynamiques remplaçant parfois des applications desktop. Ceci a été rendu possible par l'adoption d'un langage de programmation dérivé de la norme ECMAScript : Javascript. Les outils en ligne tels que ceux proposés par Google en sont un très bon exemple.

L'apprentissage du langage Javascript va au delà des objectifs de ce cours. Cependant, vous trouverez d'excellentes ressources en ligne. L'une d'elles est le Mozilla Developer Network où vous aurez également des informations sur HTML et CSS. Les habitués de la programmation retrouveront facilement leurs marques avec Javascript et auront la possibilité d'ajouter rapidement des possibilités d'interaction à leurs pages.

Quand vous aurez compris les grands principes de Javascript, vous pourrez vous tourner vers des bibliothèques plus complètes et permettant de créer très simplement des actions complexes. La plus connue est sans aucun doute JQuery.

Dans tous les cas, le code écrit en Javascript sera interprété côté client. Il n'y a pas de compilation et tout le travail se fait sur la machine qui affiche la page. L'interprète est inclus dans le navigateur Internet, il n'est pas dépendant du système. De fait, si par exemple vous utilisez régulièrement Firefox et Google Chrome, vous pouvez obtenir des comportements différents pour un code donné. De plus, chaque interprète aura son ensemble de commandes prisent en charge, d'extensions, ... qu'il ne partagera pas avec la concurrence. C'est pour cela qu'il est important de tester votre code sur le plus de navigateurs possibles et d'écrire un code qui soit le moins spécifique possible.

Enfin, quand on commence à utiliser Javascript pour améliorer ses pages Web, la tentation est grande de fabriquer un site que ne fonctionne qu'avec Javascript. Une approche plus raisonnable à garder à l'esprit est l'amélioration continue. C'est à dire qu'il faut construire un site qui soit fonctionnel sans Javascript, et l'améliorer en ajoutant quelques lignes de code.

Javascript pour quoi faire ?

Nous donnons ici quelques exemples de ce qu'il est possible de faire avec Javascript. Ce sont des méta actions qui se déclineront à l'envie du développeur.

Validation de champs
Pour vérifier qu'un utilisateur a correctement renseigner un formulaire avant de l'envoyer.
Manipulation du DOM
Ajouter, supprimer, modifier, déplacer des élèments de la page.
Réagir aux événements
Réagir à des actions utilisateurs (clic souris, valeur entrée dans un champ, ...), à des actions sur le réseau (chargement de la page en cours, terminé ...), sur le navigateur (changement de la taille de la fenâtre, de la police, ...)
Faire des actions à intervalle régulier
Faire des horloges, des redirections, des rechargements de page, ...
Accès au navigateur
Utilisation du stockage local (au sein des bases de données du navigateur)
Récupération de données
C'est AJAX, qui permet de récupérer des données pour les afficher dans une page, sans avoir à la recharger.

Utiliser Javascript

Tout comme pour les CSS, il est possible d'inclure le Javascript directement dans vos pages, ou de faire des fichiers séparés. Il est même possible de faire référence à des scripts qui sont sur des sites annexes au travers d'une URL. C'est très souvent ce qui est fait par les personnes utilisant JQuery.

Que ce soit directement dans la page ou via un fichier externe, l'utilisation se fait au travers de la balise script. Elle peut se trouver n'importe où dans votre page, que ce soit dans l'en-tête (head) ou dans le corps (body). Ce qui va changer ce sont les attributs de la balise.

Dans l'exemple ci-dessous vous avez deux scripts stockés dans des fichiers et un script inclus dans la page.

<!DOCTYPE html>
<head>
  <title></title>
  ...
  
<script src="scripts/base.js"></script>
<script> var st = document.getElementById('status') ; document.onreadystatechange = function() { if ( document.readyState == 'interactive' ) { st.innerHTML = 'Chargement...' ; } else if ( document.readyState == 'complete' ) { st.innerHTML = 'Page prête&nbsp;!' ; } } </script>
... </head> <body lang="fr"> <nav> <ul> <li><a href="index.html">Sommaire</a></li> <li><a href="end.html">Conclusion</a></li> </ul> </nav> <header> <h1>De l'&eacute;criture des pages</h1> <p class="sous-titre">ou comment publier sur l'Internet</p> </header> <section> <h2>Baliser sans crainte</h2> <p>Une balise est &eacute;crite entre chevrons.</p> <p>Une balise ouvrante attend une balise fermante qui reprend le nom de la premi&egrave;re, pr&eacute;c&eacute;d&eacute; du caract&egrave;re '/'.</p> <p>Le nom des balises peut &ecirc;tre indiff&eacute;remment en majuscule ou minuscule</p> </section>
<script src="scripts/foottips.js"></script>
</body> ...
Exemples d'utilisation de Javascript dans du code HTML.

Ce chapitre n'est qu'une ébauche, il est là pour donner le point de départ de votre apprentissage de Javascript et de son utilisation pour créer de l'interactivité dans vos pages.

Le langage est simple, mais son utilisation peut révéler des surprises et le debugage au sein d'un navigateur est fastidieux. N'hésitez pas à utiliser des outils annexes pour vous faciliter la vie.

Pour finir

Nous avons vu ici les bases de la création de documents numériques. Vous pouvez faire beaucoup avec ce que vous avez lu ici et vous ferez sans doute encore plus en pratiquant les sujets des travaux pratiques.

Pour progresser encore plus, soyez curieux, lisez, inspirez-vous des idées des autres. Mais ne plagiez pas le travail d'autrui, ou en tout cas, vérifiez s'il est possible de le faire ou pas. Pour cela, il faut vérifier que le contenu a été mis en ligne sous une licence permettant le partage ou simplement une licence libre.

Bonnes créations !


  1. [↑] HyperText Transfer Protocol RFC 2616.
  2. [↑] HyperText Markup Language HTML5 W3C Candidate Recommendation.
  3. [↑] Javascript est un langage de programmation opérationnel dérivé de la recommandation EcmaScript du W3C. Il n'y a aucun lien avec le langage de programmation Java.
  4. [↑] les robots sont des programmes qui parcourent automatiquement l'Internet en vue de l'indexer. Tous les moteurs de recherche (Google, Microsoft, Yahoo, ...) ont de tels robots. Mais ce ne sont pas les seuls. Il y a nombre de robots de sociétés privés ou d'organismes de recherche qui parcourent nos pages, les réseaux sociaux, ... Ajouter des informations sémantiques permet de guider ces robots.
  5. [↑] voir http://www.w3.org/TR/html4/sgml/entities.html.
  6. [↑] bien formé au sens de XML, c'est à dire, dans les grandes lignes, que toute balise ouvrante doit avoir une balise fermante et que chaque balise doit se trouver à l'intérieur d'une balise dans laquelle elle a le droit de se trouver.
  7. [↑] une police de caractères est dite à chasse fixe (monospace en anglais) quand tous les caractères s'affichent avec la même largeur (les caractères i et m par exemple, auront la même occupation horizontale en terme de pixels). Ce qui n'est pas le cas dans une police de caractères n'étant pas à chasse fixe. Une telle police est particulièrement adaptée à l'affichage de données informatiques (code source, sortie de programmes, terminal, ...)
  8. [↑] c'est bien le navigateur qui va avoir pour tâche de faire la mise en forme. Tout se fait du côté du client (c'est l'objectif de ce cours que de parler de ce qui se passe côté client). C'est lui qui va 1) charger la page HTML ; 2) l'analyser à la recherche de liens vers des CSS et des scripts ; 3) charger ces fichiers CSS et/ou scripts ; 4) afficher la page en appliquant les styles et en exécutant les scripts.
  9. [↑] pixel (px) signifie picture element. C'est le plus petit constituant d'une image et c'est l'unité d'affichage de tout dispositif informatique. Un pixel est considéré égal à 0,75 pt (voir note suivante).
  10. [↑] le point (pt) est une unité de mesure typographique qui est définie comme étant égale à 1/72eme de pouce (inch), soit environ 0,35 mm.
  11. [↑] le pica (pc) est une unité de mesure typographique définie comme étant égale à 12 pt, soit environ 4,23 mm.
  12. [↑] dans les premières versions de CSS, il n'existait qu'une seule modalité pour définir la largeur d'une boîte, c'était ce qui est appelé aujourd'hui le content-box. L'autre modalité est apparue suite à une mauvaise interprétation de la spécification CSS par les concepteurs d'Internet Explorer 6.
  13. [↑] il est cependant intéressant de se poser des questions sur les répercussions de l'utilisation de ressources externes dans un site web et sur les risques liés à a confidentialité de vos visiteurs.