Support de cours
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.
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, ...)
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.
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.
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.
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.
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.
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
.
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
head
body
title
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
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
head
. C'est une balise vide dont toute l'information est définie dans ses attributs.Voici un exemple minimal complet de page avec les balises décrites ci-dessus. Ceci peut servir de squelette à n'importe quelle page 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.
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
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.<h1>De l'étude du balisage en terrain numérique</h1>
p
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.<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
<p>Tout d'abord, poser une première balise.<br/>Ensuite poser une deuxième balise.<br/>...<p/>
a
href
qui va contenir l'URL de la page à afficher si l'utilisateur clique sur le lien ainsi créé.<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
ol
(ordered list), et non numérotées avec ul
(unordered list). Chaque item de la liste est défini par une balise li
.<ul> <li>Repérer</li> <li>Baliser</li> <li>Afficher</li> </ul>
table
, th
, tr
, td
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.<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>
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.
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
<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
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.<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
<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
<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>
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
<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
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.<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
<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
<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
<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>
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
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.<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
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.<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
pre
par exemple. Le rendu visuel est en général du texte utilisant une police de caractères monospace↓.<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><code> ... </code></code></p>
sub
, sup
sub
ou en exposant avec sup
. Le texte à décaler est simplement à inscrire à l'intérieur de cette balise.<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
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
<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>
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
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, ...)<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
<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>
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 :
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.
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.
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.
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↓.
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 :
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
href
Deux autres attributs sont souvent présents :
media
title
<head> <title>Baliser en terrain numérique</title> <link rel="stylesheet" href="styles/main.css" media="screen" title="Affichage é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 !
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.
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.
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 :
html
est le seul à ne pas en avoir.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.
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 :
Chacune de ces valeurs est calculée en fonction de la précédente et toutes sont détaillées ci-dessous.
C'est une valeur elle même obtenue par l'évaluation des règles suivantes :
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.
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.
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 :
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.
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 :
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 ;id
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.
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.
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.
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.
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
h1 { color: #0C4E9C ; }
rgb(r,g,b)
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)
body { background-color: hsl(240,29%,61%) ; }
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)
div { background-color: rgba(255,255,255,0.86) ; color: rgb(255,250,245) ; }
transparent
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.
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).
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.
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.
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
).
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.
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
border
padding
width
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.
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
inline
block
inline-block
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.
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.
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
top
, right
, bottom
et left
, elles seront ignorées.relative
top
, right
, bottom
et left
.sup
:
sup { vertical-align: baseline ; position: relative ; bottom: 1.2ex ; right: 0.2ex ; }
Retenons du positionnement relatif qu'il modifie l'agencement des objets.
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
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).section div.toc { position: absolute ; top: 0 ; right: 0 ; } body nav { position: absolute ; left: 10% ; bottom: 0 ; }
fixed
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 !