Version en ligne

Tutoriel : Apprenez à créer votre site web avec HTML5 et CSS3

Table des matières

Apprenez à créer votre site web avec HTML5 et CSS3
Comment fait-on pour créer des sites web ?
Le fonctionnement des sites web
HTML et CSS : deux langages pour créer un site web
L'éditeur de texte
Les navigateurs
Votre première page web en HTML
Créer une page web avec l'éditeur
Les balises et leurs attributs
Structure de base d'une page HTML5
Les commentaires
Organiser son texte
Les paragraphes
Les titres
La mise en valeur
Les listes
Créer des liens
Un lien vers un autre site
Un lien vers une autre page de son site
Un lien vers une ancre
Cas pratiques d'utilisation des liens
Les images
Les différents formats d'images
Insérer une image
Les figures
Mettre en place le CSS
La petite histoire du CSS
Où écrit-on le CSS ?
Appliquer un style : sélectionner une balise
Appliquer un style : class et id
Appliquer un style : les sélecteurs avancés
Formatage du texte
La taille
La police
Italique, gras, souligné…
L'alignement
Les flottants
La couleur et le fond
Couleur du texte
Couleur de fond
Images de fond
La transparence
Les bordures et les ombres
Bordures standard
Bordures arrondies
Les ombres
Création d'apparences dynamiques
Au survol
Au clic et lors de la sélection
Lorsque le lien a déjà été consulté
Structurer sa page
Les balises structurantes de HTML5
Exemple concret d'utilisation des balises
Assurer la compatibilité avec IE
Le modèle des boîtes
Les balises de type block et inline
Les dimensions
Les marges
Quand ça dépasse…
Le positionnement en CSS
Le positionnement flottant
Transformez vos éléments avec display
Le positionnement inline-block
Les positionnements absolu, fixe et relatif
TP : création d'un site pas à pas
Maquettage du design
Organiser le contenu en HTML
Mettre en forme en CSS
Assurer la compatibilité avec IE
Vérifier la validité
Le code final
Les tableaux
Un tableau simple
Un tableau structuré
Les formulaires
Créer un formulaire
Les zones de saisie basiques
Les zones de saisie enrichies
Les éléments d'options
Finaliser et envoyer le formulaire
La vidéo et l'audio
Les formats audio et vidéo
Insertion d'un élément audio
Insertion d'une vidéo
Mise en page adaptative avec les Media Queries
Mise en place des media queries
Les règles disponibles
Mise en pratique des media queries sur le design
Media queries et navigateurs mobiles
Aller plus loin
Du site web à l'application web (JavaScript, AJAX…)
Technologies liées à HTML5 (Canvas, SVG, Web Sockets…)
Les sites web dynamiques (PHP, JEE, ASP .NET…)
Envoyez votre site sur le Web
Le nom de domaine
L'hébergeur
Utiliser un client FTP
Mémento des balises HTML
Mémento
Mémento des propriétés CSS
Mémento
Gérer la compatibilité entre les navigateurs
Les commentaires conditionnels
Les hacks CSS
Les outils de débogage

Apprenez à créer votre site web avec HTML5 et CSS3

Vous rêvez d'apprendre à créer des sites web ?

(mais vous avez peur que ce soit compliqué car vous débutez ?)

Image utilisateur

Vous êtes au bon endroit ! Ce cours est destiné aux débutants qui ne connaissent rien à la création de sites web et qui n'attendent qu'une chose : qu'on leur explique pas à pas comment tout cela fonctionne avec des mots simples et des exemples concrets !

Nous découvrirons dans ce cours les célèbres langages HTML5 et CSS3 que l'on utilise aujourd'hui pour concevoir des sites web. Même si ces "langages" ne signifient pas encore grand chose pour vous, rassurez-vous : tout ce que vous avez besoin de savoir sera expliqué dans ce cours ! Vous découvrirez notamment comment :

Vous n'avez qu'une chose à faire : lisez les chapitres dans l'ordre et découvrez le monde fascinant de la création de sites web avec HTML5 et CSS3 !

Image utilisateurImage utilisateurImage utilisateurAperçu de sites web créés à l'aide des langages HTML5 et CSS3 que nous allons découvrir

Image utilisateurLes 10 premiers exercices gratuits en bêta !

Image utilisateurCe cours vous plaît ?

Si vous avez aimé ce cours, vous pouvez retrouver le livre "Réalisez votre site web avec HTML5 et CSS3" du même auteur, en vente sur le Site du Zéro, en librairie et dans les boutiques en ligne. Vous y trouverez ce cours adapté au format papier avec une série de chapitres inédits.

Vous pouvez également obtenir cet ouvrage au format eBook sur Amazon ou sur iTunes.

Plus d'informations

Comment fait-on pour créer des sites web ?

Le fonctionnement des sites web

Bonjour et bienvenue à toutes et à tous !

Voici donc le premier chapitre de ce livre pour débutants, qui va vous apprendre à créer votre site web !

Nous allons passer un certain temps ensemble, tout dépendra de la vitesse à laquelle vous apprendrez. Si vous lisez ce livre régulièrement et à une bonne vitesse, vous l'aurez terminé en une à deux semaines. Mais si vous avez besoin d'un peu plus de temps, ne vous inquiétez pas : le principal est que vous y alliez à votre rythme, de préférence en prenant du bon temps.

Je vous propose de commencer par la question la plus simple mais aussi la plus importante : comment fonctionnent les sites web ?

Le fonctionnement des sites web

Comment fait-on pour créer des sites web ? HTML et CSS : deux langages pour créer un site web

Comment fonctionnent les sites web ?

Non, n'ayez pas peur de poser des questions même si vous pensez qu'elles sont « bêtes ». Il est très important que nous en parlions un peu avant de nous lancer à fond dans la création de sites !

Je suis certain que vous consultez des sites web tous les jours. Pour cela, vous lancez un programme appelé le navigateur web en cliquant sur l'une des icônes représentées à la figure suivante.

Les icônes des navigateurs web les plus répandus
Les icônes des navigateurs web les plus répandus

Avec le navigateur, vous pouvez consulter n'importe quel site web. Voici par exemple un navigateur affichant le célèbre site web Wikipédia (figure suivante).

Le site web Wikipédia
Le site web Wikipédia

Je suis sûr que vous avez l'habitude d'utiliser un navigateur web ! Aujourd'hui, tout le monde sait aller sur le Web… mais qui sait vraiment comment le Web fonctionne ? Comment créer des sites web comme celui-ci ?

J'ai entendu parler de HTML, de CSS, est-ce que cela a un rapport avec le fonctionnement des sites web ?

Tout à fait !

Il s'agit de langages informatiques qui permettent de créer des sites web. Tous les sites web sont basés sur ces langages, ils sont incontournables et universels aujourd'hui. Ils sont à la base même du Web. Le langage HTML a été inventé par un certain Tim Berners-Lee en 1991…

Tim Berners-Lee suit encore aujourd'hui avec attention l'évolution du Web. Il a créé le World Wide Web Consortium (W3C) qui définit les nouvelles versions des langages liés au Web. Il a par ailleurs créé plus récemment la World Wide Web Foundation qui analyse et suit l'évolution du Web.

Les langages HTML et CSS sont à la base du fonctionnement de tous les sites web. Quand vous consultez un site avec votre navigateur, il faut savoir que, en coulisses, des rouages s'activent pour permettre au site web de s'afficher. L'ordinateur se base sur ce qu'on lui a expliqué en HTML et CSS pour savoir ce qu'il doit afficher, comme le montre la figure suivante.

Du HTML à l'écran
Du HTML à l'écran

HTML et CSS sont deux « langues » qu'il faut savoir parler pour créer des sites web. C'est le navigateur web qui fera la traduction entre ces langages informatiques et ce que vous verrez s'afficher à l'écran.

Vous vous demandez sûrement pourquoi il faut connaître deux langages pour créer des sites web ? Je vous réponds sans plus tarder !

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Comment fait-on pour créer des sites web ? HTML et CSS : deux langages pour créer un site web

HTML et CSS : deux langages pour créer un site web

Le fonctionnement des sites web L'éditeur de texte

Pour créer un site web, on doit donner des instructions à l'ordinateur. Il ne suffit pas simplement de taper le texte qui devra figurer dans le site (comme on le ferait dans un traitement de texte Word, par exemple), il faut aussi indiquer où placer ce texte, insérer des images, faire des liens entre les pages, etc.

Les rôles de HTML et CSS

Pour expliquer à l'ordinateur ce que vous voulez faire, il va falloir utiliser un langage qu'il comprend. Et c'est là que les choses se corsent, parce qu'il va falloir apprendre deux langages !

Pourquoi avoir créé deux langages ? Un seul aurait suffi, non ?

Vous devez vous dire que manipuler deux langages va être deux fois plus complexe et deux fois plus long à apprendre… mais ce n'est pas le cas ! Je vous rassure, s'il y a deux langages c'est, au contraire, pour faciliter les choses. Nous allons avoir affaire à deux langages qui se complètent car ils ont des rôles différents :

Vous pouvez très bien créer un site web uniquement en HTML, mais celui-ci ne sera pas très beau : l'information apparaîtra « brute ». C'est pour cela que le langage CSS vient toujours le compléter.

Pour vous donner une idée, la figure suivante montre ce que donne la même page sans CSS puis avec le CSS.

Avec et sans CSS
Avec et sans CSS

Le HTML définit le contenu (comme vous pouvez le voir, c'est brut de décoffrage !). Le CSS permet, lui, d'arranger le contenu et de définir la présentation : couleurs, image de fond, marges, taille du texte…

Comme vous vous en doutez, le CSS a besoin d'une page HTML pour fonctionner. C'est pour cela que nous allons d'abord apprendre les bases du HTML avant de nous occuper de la décoration en CSS.

Vos premières pages ne seront donc pas les plus esthétiques, mais qu'importe ! Cela ne durera pas longtemps.

Les différentes versions de HTML et CSS

Au fil du temps, les langages HTML et CSS ont beaucoup évolué. Dans la toute première version de HTML (HTML 1.0) il n'était même pas possible d'afficher des images !

Voici un très bref historique de ces langages pour votre culture générale.

Les versions de HTML

Les versions de CSS

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Le fonctionnement des sites web L'éditeur de texte

L'éditeur de texte

HTML et CSS : deux langages pour créer un site web Les navigateurs

De quel logiciel vais-je avoir besoin pour créer mon site web ?

Vais-je devoir casser ma tirelire pour acheter un logiciel très complexe que je vais mettre des mois à comprendre ?

Il existe effectivement de nombreux logiciels dédiés à la création de sites web. Mais, je vous rassure, vous n'aurez pas à débourser un seul centime. Pourquoi aller chercher un logiciel payant et compliqué, alors que vous avez déjà tout ce qu'il faut chez vous ?

Eh oui, accrochez-vous bien parce qu'il suffit de… Bloc-Notes (figure suivante) !

Le logiciel Bloc-notes de Windows
Le logiciel Bloc-notes de Windows

Incroyable mais vrai : on peut tout à fait créer un site web uniquement avec Bloc-Notes, le logiciel d'édition de texte intégré par défaut à Windows. D'ailleurs, j'avoue, c'est comme cela que j'ai commencé moi-même il y a quelques années.

Il y a cependant des logiciels plus puissants aujourd'hui et personne n'utilise vraiment Bloc-Notes. On peut classer ces logiciels de création de site web en deux catégories :

Vous l'aurez compris, je vais vous inviter à utiliser un éditeur de texte dans ce cours. Voici quelques conseils, selon que vous êtes sous Windows, Mac OS X ou Linux.

Sous Windows

Il existe une grande quantité d'éditeurs de texte, je ne pourrai pas vous les présenter tous. Néanmoins, je vous invite à vous pencher sur Notepad++, l'un des plus utilisés parmi ceux disponibles pour Windows. Ce logiciel est simple, en français et gratuit.

Site web de Notepad++

Voici à quoi ressemble Notepad++ lorsque vous le lancez (figure suivante).

Notepad++
Notepad++

Je vous conseille de faire la manipulation suivante : allez dans le menu Langage > H > HTML. Cela permettra au logiciel de savoir que l'on va taper du HTML.

Lorsque vous utiliserez le logiciel, il colorera votre code (figure suivante), ce qui vous permettra de vous repérer plus facilement.

Coloration sous Notepad++
Coloration sous Notepad++

Il existe d'autres éditeurs disponibles sous Windows. Si Notepad++ ne vous convient pas, vous pouvez essayer :

Sous Mac OS X

Vous pouvez essayer l'un des logiciels suivants :

Sous Linux

Les éditeurs de texte sont légion sous Linux. Certains d'entre eux sont installés par défaut, d'autres peuvent être téléchargés facilement via le centre de téléchargement (sous Ubuntu notamment) ou au moyen de commandes comme apt-get et aptitude. Voici quelques logiciels que vous pouvez tester :

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

HTML et CSS : deux langages pour créer un site web Les navigateurs

Les navigateurs

L'éditeur de texte Votre première page web en HTML

Pourquoi le navigateur est important

Le navigateur est le programme qui nous permet de voir les sites web. Comme je vous l'ai expliqué plus tôt, le travail du navigateur est de lire le code HTML et CSS pour afficher un résultat visuel à l'écran. Si votre code CSS dit « Les titres sont en rouge », alors le navigateur affichera les titres en rouge. Le rôle du navigateur est donc essentiel !

On ne dirait pas, mais un navigateur est un programme extrêmement complexe. En effet, comprendre le code HTML et CSS n'est pas une mince affaire. Le principal problème, vous vous en rendrez vite compte, c'est que les différents navigateurs n'affichent pas le même site exactement de la même façon ! Il faudra vous y faire et prendre l'habitude de vérifier régulièrement que votre site fonctionne correctement sur la plupart des navigateurs.

Les navigateurs sur ordinateur

Télécharger les navigateurs

Il existe de nombreux navigateurs différents. Voici les principaux à connaître :

Navigateur

OS

Téléchargement

Commentaires

Google Chrome

Google Chrome
Google Chrome

Windows

Mac

Linux

Téléchargement

Le navigateur de Google, simple d'emploi et très rapide.
C'est le navigateur que j'utilise au quotidien.

Mozilla Firefox

Logo Firefox
Logo Firefox

Windows

Mac

Linux

Téléchargement

Le navigateur de la fondation Mozilla, célèbre et réputé.

Je l'utilise fréquemment pour tester mes sites web.

Internet Explorer

IE9
IE9

Windows

Téléchargement

(Déjà installé sur Windows)

Le navigateur de Microsoft, qui équipe tous les PC Windows.

Je l'utilise fréquemment pour tester mes sites web.

Safari

Logo Safari
Logo Safari

Windows

Mac

Téléchargement

(Déjà installé sur Mac OS X)

Le navigateur d'Apple, qui équipe tous les Mac.

Opera

Logo Opera
Logo Opera

Windows

Mac

Linux

Téléchargement

L'éternel outsider.

Il est moins utilisé mais propose de nombreuses fonctionnalités.

La figure suivante vous montre un aperçu du résultat produit par quelques-uns de ces principaux navigateurs sur la page d'accueil de Google.

Aperçu de quelques navigateurs
Aperçu de quelques navigateurs

Comprendre les différences entre navigateurs

Comme je vous le disais plus tôt, les navigateurs n'affichent pas toujours un même site web exactement de la même façon. Pourquoi ? Cela est dû au fait que les navigateurs ne connaissent pas toujours les dernières fonctionnalités de HTML et CSS. Par exemple, Internet Explorer a longtemps été en retard sur certaines fonctionnalités CSS (et paradoxalement, il a aussi été en avance sur quelques autres).

Pour compliquer les choses, plusieurs versions des navigateurs co-existent :

Chaque version prend en charge de nouvelles fonctionnalités mais, si les utilisateurs ne mettent pas à jour leur(s) navigateur(s), cela devient un problème pour les webmasters comme vous qui créent des sites web.

Chrome a résolu en grande partie le problème en mettant en place des mises à jour automatiques, sans intervention de l'utilisateur. Les utilisateurs de Firefox ne pensent pas toujours à mettre à niveau leur navigateur ; quant à Internet Explorer, les utilisateurs sont d'autant moins incités à mettre à jour leur navigateur que les dernières versions nécessitent aussi de passer à une version récente de Windows (Internet Explorer 9 n'est pas disponible pour Windows XP, par exemple).

Des sites comme normansblog.de et caniuse.com tiennent notamment à jour une liste des fonctionnalités CSS prises en charge par les différentes versions de chaque navigateur (figure suivante).

Les fonctionnalités gérées par les différents navigateursLes fonctionnalités gérées par les différents navigateurs

Comme vous le voyez, c'est… compliqué.

L'essentiel des soucis viendra le plus souvent des anciennes versions d'Internet Explorer (IE6, IE7, IE8). Il faudra vérifier comment le site s'affiche sous ces anciennes versions… Attendez-vous à des surprises ! Vérifiez surtout que votre site s'affiche sans erreur, sans chercher à obtenir exactement le même rendu sur les vieilles versions de ces navigateurs.

Les navigateurs sur mobile

En plus des navigateurs que je vous ai présentés, il faut savoir qu'il existe des variantes de ces navigateurs conçues pour les téléphones portables, en particulier pour les smartphones.

De plus en plus de personnes consultent aujourd'hui des sites web sur leur portable, il faut donc connaître un minimum le fonctionnement des navigateurs des téléphones.

En fait, vous n'allez pas être dépaysés : la plupart des navigateurs sur smartphones sont les mêmes que sur ordinateur, dans une version plus légère adaptée aux mobiles. Tout dépend du type de téléphone.

Les navigateurs pour mobiles prennent en charge la plupart des dernières fonctionnalités de HTML et CSS. De plus, le système de mise à jour automatisé des mobiles nous garantit que les utilisateurs auront le plus souvent les dernières versions.

Sachez néanmoins que des différences existent entre ces différents navigateurs mobiles et qu'il est conseillé de tester son site sur ces appareils aussi ! En particulier, l'écran étant beaucoup moins large, il faudra vérifier que votre site s'affiche correctement.

En résumé

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

L'éditeur de texte Votre première page web en HTML

Votre première page web en HTML

Les navigateurs Créer une page web avec l'éditeur

Ça y est, vous avez installé tous les logiciels ? Vous devriez maintenant avoir un éditeur de texte pour créer votre site (comme Notepad++) et plusieurs navigateurs pour le tester (Mozilla Firefox, Google Chrome, Internet Explorer…).

Dans ce chapitre, nous allons commencer à pratiquer ! Nous allons découvrir les bases du langage HTML et enregistrer notre toute première page web !

Alors oui, bien sûr, ne vous attendez pas encore à réaliser une page web exceptionnelle dès ce second chapitre, mais patience… cela viendra !

Créer une page web avec l'éditeur

Votre première page web en HTML Les balises et leurs attributs

Allez, mettons-nous en situation ! Comme je vous l'ai dit, nous allons créer notre site dans un éditeur de texte. Vous avez dû en installer un suite à mes conseils dans le premier chapitre : qu'il s'appelle Notepad++, PSpad, jEdit, vim, TextWrangler… peu importe. Ces logiciels ont un but très simple : vous permettre d'écrire du texte !

Dans la suite de ce cours, je travaillerai avec Notepad++. Je vais donc l'ouvrir (figure suivante).

Ouverture de Notepad++
Ouverture de Notepad++

Bon, qu'est-ce qu'on fait maintenant ? Qu'est-ce qu'on écrit sur cette feuille blanche ?

On va faire un petit essai. Je vous invite à écrire ce qui vous passe par la tête, comme moi à la figure suivante.

Du texte dans Notepad++
Du texte dans Notepad++

Vous pouvez écrire les mêmes phrases que moi ou ce que vous voulez ; le but est d'écrire quelque chose.

Maintenant, enregistrons ce fichier. Pour cela, c'est très simple : comme dans tous les programmes, vous avez un menu Fichier > Enregistrer. Une boîte de dialogue vous demande où enregistrer le fichier et sous quel nom. Enregistrez-le où vous voulez. Donnez au fichier le nom que vous voulez, en terminant par .html, par exemple test.html, comme indiqué à la figure suivante.

Enregistrement d'un fichier sous Notepad++
Enregistrement d'un fichier sous Notepad++

Ouvrez maintenant l'explorateur de fichiers dans le dossier où vous avez enregistré votre page. Vous y verrez le fichier que vous venez de créer (figure suivante).

Le fichier dans l'explorateur
Le fichier dans l'explorateur

L'icône qui représente le fichier dépend de votre navigateur web par défaut. Ici, l'icône est celle de Google Chrome, mon navigateur par défaut, mais le fichier a peut-être une autre icône chez vous. Voici par exemple les icônes qui apparaissent lorsque votre navigateur principal est Firefox ou Internet Explorer (figure suivante).

Icône fichier Firefox
Icône fichier Firefox
Icône fichier Internet Explorer
Icône fichier Internet Explorer

Faites simplement un double-clic sur ce fichier et… votre navigateur s'ouvre et, comme à la figure suivante, affiche le texte que vous avez écrit.

La page web affichée
La page web affichée

Cela ne marche pas bien, on dirait ! Tout le texte s'affiche sur la même ligne alors qu'on avait écrit deux lignes de texte différentes !?

En effet, bien vu !

Le texte s'affiche sur la même ligne alors qu'on avait demandé à l'écrire sur deux lignes différentes. Que se passe-t-il ?

En fait, pour créer une page web il ne suffit pas de taper simplement du texte comme on vient de le faire. En plus de ce texte, il faut aussi écrire ce qu'on appelle des balises, qui vont donner des instructions à l'ordinateur comme « aller à la ligne », « afficher une image », etc.

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Votre première page web en HTML Les balises et leurs attributs

Les balises et leurs attributs

Créer une page web avec l'éditeur Structure de base d'une page HTML5

Bon, tout cela était trop facile. Évidemment, il a fallu que ces satanés informaticiens s'en mêlent et compliquent les choses. Il ne suffit pas d'écrire « simplement » du texte dans l'éditeur, il faut aussi donner des instructions à l'ordinateur. En HTML, on utilise pour cela des balises.

Les balises

Les pages HTML sont remplies de ce qu'on appelle des balises. Celles-ci sont invisibles à l'écran pour vos visiteurs, mais elles permettent à l'ordinateur de comprendre ce qu'il doit afficher.

Les balises se repèrent facilement. Elles sont entourées de « chevrons », c'est-à-dire des symboles < et >, comme ceci : <balise>

À quoi est-ce qu'elles servent ? Elles indiquent la nature du texte qu'elles encadrent. Elles veulent dire par exemple : « Ceci est le titre de la page », « Ceci est une image », « Ceci est un paragraphe de texte », etc.

On distingue deux types de balises : les balises en paires et les balises orphelines.

Les balises en paires

Elles s'ouvrent, contiennent du texte, et se ferment plus loin. Voici à quoi elles ressemblent :

<titre>Ceci est un titre</titre>

On distingue une balise ouvrante (<titre>) et une balise fermante (</titre>) qui indique que le titre se termine. Cela signifie pour l'ordinateur que tout ce qui n'est pas entre ces deux balises… n'est pas un titre.

Ceci n'est pas un titre <titre>Ceci est un titre</titre> Ceci n'est pas un titre

Les balises orphelines

Ce sont des balises qui servent le plus souvent à insérer un élément à un endroit précis (par exemple une image). Il n'est pas nécessaire de délimiter le début et la fin de l'image, on veut juste dire à l'ordinateur « Insère une image ici ».

Une balise orpheline s'écrit comme ceci :

<image />

Les attributs

Les attributs sont un peu les options des balises. Ils viennent les compléter pour donner des informations supplémentaires. L'attribut se place après le nom de la balise ouvrante et a le plus souvent une valeur, comme ceci :

<balise attribut="valeur">

À quoi cela sert-il ? Prenons la balise <image /> que nous venons de voir. Seule, elle ne sert pas à grand chose. On pourrait rajouter un attribut qui indique le nom de l'image à afficher :

<image nom="photo.jpg" />

L'ordinateur comprend alors qu'il doit afficher l'image contenue dans le fichier photo.jpg.

Dans le cas d'une balise fonctionnant « par paire », on ne met les attributs que dans la balise ouvrante et pas dans la balise fermante. Par exemple, ce code indique que la citation est de Neil Armstrong et qu'elle date du 21 Juillet 1969 :

<citation auteur="Neil Armstrong" date="21/07/1969">
C'est un petit pas pour l'homme, mais un bond de géant pour l'humanité.
</citation>
Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Créer une page web avec l'éditeur Structure de base d'une page HTML5

Structure de base d'une page HTML5

Les balises et leurs attributs Les commentaires

Reprenons notre éditeur de texte (dans mon cas Notepad++). Je vous invite à écrire ou à copier-coller le code source ci-dessous dans Notepad++. Ce code correspond à la base d'une page web en HTML5 :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Titre</title>
    </head>

    <body>
    
    </body>
</html>

Copié dans Notepad++, cela donne la figure suivante.

Code HTML5 minimal dans Notepad++
Code HTML5 minimal dans Notepad++

Vous noterez que les balises s'ouvrent et se ferment dans un ordre précis. Par exemple, la balise <html> est la première que l'on ouvre et c'est aussi la dernière que l'on ferme (tout à la fin du code, avec </html>). Les balises doivent être fermées dans le sens inverse de leur ouverture. Un exemple :

Euh, on pourrait avoir des explications sur toutes les balises que l'on vient de copier dans l'éditeur, m'sieur ?

Bien sûr, c'est demandé si gentiment.

Ne prenez pas peur en voyant toutes ces balises d'un coup, je vais vous expliquer leur rôle !

Le doctype

<!DOCTYPE html>

La toute première ligne s'appelle le doctype. Elle est indispensable car c'est elle qui indique qu'il s'agit bien d'une page web HTML.

Ce n'est pas vraiment une balise comme les autres (elle commence par un point d'exclamation), vous pouvez considérer que c'est un peu l'exception qui confirme la règle.

La balise </html>

<html>

</html>

C'est la balise principale du code. Elle englobe tout le contenu de votre page. Comme vous pouvez le voir, la balise fermante </html> se trouve tout à la fin du code !

L'en-tête <head> et le corps <body>

Une page web est constituée de deux parties :

Pour le moment, le corps est vide (nous y reviendrons plus loin). Intéressons-nous par contre aux deux balises contenues dans l'en-tête…

L'encodage (charset)

<meta charset="utf-8" />

Cette balise indique l'encodage utilisé dans votre fichier .html.

Sans rentrer dans les détails, car cela pourrait vite devenir compliqué, l'encodage indique la façon dont le fichier est enregistré. C'est lui qui détermine comment les caractères spéciaux vont s'afficher (accents, idéogrammes chinois et japonais, caractères arabes, etc.).

Il y a plusieurs techniques d'encodage portant des noms bizarres et utilisées en fonction des langues : ISO-8859-1, OEM 775, Windows-1253… Une seule cependant devrait être utilisée aujourd'hui autant que possible : UTF-8. Cette méthode d'encodage permet d'afficher sans aucun problème pratiquement tous les symboles de toutes les langues de notre planète ! C'est pour cela que j'ai indiqué utf-8 dans cette balise.

Il faut aussi que votre fichier soit bien enregistré en UTF-8. C'est le cas le plus souvent sous Linux par défaut mais, sous Windows, il faut généralement le dire au logiciel.

Le titre principal de la page

<title>

C'est le titre de votre page, probablement l'élément le plus important ! Toute page doit avoir un titre qui décrit ce qu'elle contient.

Il est conseillé de garder le titre assez court (moins de 100 caractères en général).

Le titre ne s'affiche pas dans votre page mais en haut de celle-ci (souvent dans l'onglet du navigateur). Enregistrez votre page web et ouvrez-la dans votre navigateur. Vous verrez que le titre s'affiche dans l'onglet, comme sur la figure suivante.

Le titre de la page apparaît en haut du navigateur
Le titre de la page apparaît en haut du navigateur

Il faut savoir que le titre apparaît aussi dans les résultats de recherche, comme sur Google (figure suivante).

Le titre de la page apparaît dans les recherches Google
Le titre de la page apparaît dans les recherches Google

Autant vous dire que bien choisir son titre est important !

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Les balises et leurs attributs Les commentaires

Les commentaires

Structure de base d'une page HTML5 Organiser son texte

Nous avons appris à créer notre première vraie page HTML dans ce chapitre. Avant de terminer, j'aimerais vous présenter le principe des commentaires.

Un commentaire en HTML est un texte qui sert simplement de mémo. Il n'est pas affiché, il n'est pas lu par l'ordinateur, cela ne change rien à l'affichage de la page.

Bref, cela ne sert à rien ?

Eh bien si !

Cela sert à vous et aux personnes qui liront le code source de votre page. Vous pouvez utiliser les commentaires pour laisser des indications sur le fonctionnement de votre page.

Quel intérêt ? Cela vous permettra de vous rappeler comment fonctionne votre page si vous revenez sur votre code source après un long moment d'absence. Ne rigolez pas, cela arrive à tous les webmasters.

Insérer un commentaire

Un commentaire est une balise HTML avec une forme bien spéciale :

<!-- Ceci est un commentaire -->

Vous pouvez le mettre où vous voulez au sein de votre code source : il n'a aucun impact sur votre page, mais vous pouvez vous en servir pour vous aider à vous repérer dans votre code source (surtout s'il est long).

<!DOCTYPE html>
<html>
    <head>
        <!-- En-tête de la page -->
        <meta charset="utf-8" />
        <title>Titre</title>
    </head>

    <body>
        <!-- Corps de la page -->
    </body>
</html>

Tout le monde peut voir vos commentaires… et tout votre code HTML !

Terminons par une remarque importante : tout le monde peut voir le code HTML de votre page une fois celle-ci mise en ligne sur le Web. Il suffit de faire un clic droit sur la page et de sélectionner « Afficher le code source de la page » (l'intitulé peut changer selon votre navigateur), comme le montre la figure suivante.

Menu afficher le code source
Menu afficher le code source

Le code source s'affiche alors (figure suivante).

Affichage du code source
Affichage du code source

Vous pouvez tester cette manipulation sur n'importe quel site web, cela marche ! Garanti à 100%. Cela s'explique assez facilement : le navigateur doit obtenir le code HTML pour savoir ce qu'il faut afficher. Le code HTML de tous les sites est donc public.

La morale de l'histoire ? Tout le monde pourra voir votre code HTML et vous ne pouvez pas l'empêcher. Par conséquent, ne mettez pas d'informations sensibles comme des mots de passe dans les commentaires… et soignez votre code source, car je pourrai venir vérifier si vous avez bien suivi mon cours à la lettre !

En résumé

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Structure de base d'une page HTML5 Organiser son texte

Organiser son texte

Les commentaires Les paragraphes

Bon, la page blanche c'est bien joli, mais votre site web risque d'avoir un succès mitigé si vous le laissez comme cela.

Nous allons découvrir de nombreuses balises HTML dans ce chapitre. Certaines existent depuis la toute première version de HTML, d'autres ont été introduites plus récemment dans HTML5.

Nous allons voir successivement dans ce chapitre :

Motivés ? Allez, vous allez voir, ce n'est pas compliqué.

Les paragraphes

Organiser son texte Les titres

La plupart du temps, lorsqu'on écrit du texte dans une page web, on le fait à l'intérieur de paragraphes. Le langage HTML propose justement la balise <p> pour délimiter les paragraphes.

<p>Bonjour et bienvenue sur mon site !</p>

Comme je vous l'ai dit au chapitre précédent, on écrit le contenu du site web entre les balises <body></body>. Il nous suffit donc de mettre notre paragraphe entre ces deux balises et nous aurons enfin notre première vraie page web avec du texte !

Je reprends donc exactement le même code qu'au chapitre précédent et j'y ajoute mon paragraphe :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Paragraphes</title>
    </head>

    <body>
        <p>Bonjour et bienvenue sur mon site !</p>
    </body>
</html>

Essayez, vous allez voir le résultat !

Bon, ok, ce n'est pas encore le nirvana mais c'est un bon début.

Mais ne nous arrêtons pas en si bon chemin. Nous allons voir maintenant quelque chose d'un peu particulier en HTML : le saut de ligne. Cela paraît simple et pourtant, cela ne fonctionne pas vraiment comme dans un traitement de texte habituel…

Sauter une ligne

En HTML, si vous appuyez sur la touche Entrée, cela ne crée pas une nouvelle ligne comme vous en avez l'habitude. Essayez donc ce code :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Essais de sauts de ligne</title>
    </head>

    <body>
        <p>Bonjour et bienvenue sur mon site !
            Ceci est mon premier test alors soyez indulgents s'il vous plaît, j'apprends petit à petit comment cela marche.
            Pour l'instant c'est un peu vide, mais revenez dans 2-3 jours quand j'aurai appris un peu plus de choses, je vous assure que vous allez être surpris !</p>
    </body>
</html>

Tout le texte s'affiche sur la même ligne alors qu'on est bien allé à la ligne dans le code ! Taper frénétiquement sur la touche Entrée dans l'éditeur de texte ne sert donc strictement à rien.

Comme vous devez vous en douter, il y a pourtant bien un moyen de faire des sauts de ligne en HTML.

En fait, si vous voulez écrire un deuxième paragraphe, il vous suffit d'utiliser une deuxième balise <p>.

Votre code HTML devrait donc être au final rempli de balises de paragraphe !

Un exemple :

<html>
    <head>
        <meta charset="utf-8" />
        <title>Paragraphes</title>
    </head>

    <body>
        <p>Bonjour et bienvenue sur mon site !
        Ceci est mon premier test alors soyez indulgents s'il vous plaît, j'apprends petit à petit comment cela marche.</p>
       
        <p>Pour l'instant c'est un peu vide, mais revenez dans 2-3 jours quand j'aurai appris un peu plus de choses, je vous assure que vous allez être surpris !</p>
    </body>
</html>

Le résultat se trouve à la figure suivante.

Deux paragraphes avec 2 balises <p>
Deux paragraphes avec 2 balises

Oui, mais si je veux juste aller à la ligne dans un paragraphe et non pas sauter une ligne ?

Eh bien devinez quoi : il existe une balise « Aller à la ligne » !

C'est une balise orpheline qui sert juste à indiquer qu'on doit aller à la ligne : <br />. Vous devez obligatoirement la mettre à l'intérieur d'un paragraphe.

Voici comment l'utiliser dans un code :

<html>
    <head>
        <meta charset="utf-8" />
        <title>Sauts de ligne</title>
    </head>

    <body>
        <p>Bonjour et bienvenue sur mon site !<br />
        Ceci est mon premier test alors soyez indulgents s'il vous plaît, j'apprends petit à petit comment cela marche.</p>

        <p>Pour l'instant c'est un peu vide, mais revenez dans 2-3 jours quand j'aurai appris un peu plus de choses, je vous assure que vous allez être surpris !</p>
    </body>
</html>

Donc c'est compris ?

Maintenant qu'on sait écrire des paragraphes, voyons voir comment on crée des titres.

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Organiser son texte Les titres

Les titres

Les paragraphes La mise en valeur

Lorsque le contenu de votre page va s'étoffer avec de nombreux paragraphes, il va devenir difficile pour vos visiteurs de se repérer. C'est là que les titres deviennent utiles.

En HTML, on est verni, on a le droit d'utiliser six niveaux de titres différents. Je veux dire par là qu'on peut dire « Ceci est un titre très important », « Ceci est un titre un peu moins important », « Ceci est un titre encore moins important », etc. On a donc six balises de titres différentes :

Ne vous laissez pas impressionner par toutes ces balises. En fait, six niveaux de titres, c'est beaucoup. Dans la pratique, personnellement, je n'utilise que les balises <h1>, <h2> et <h3>, et très rarement les autres (je n'ai pas souvent besoin de six niveaux de titres différents). Votre navigateur affiche le titre très important en très gros, le titre un peu moins important en un peu moins gros, etc.

Essayez de créer une page web avec des titres pour voir ce que cela donne :

<html>
    <head>
        <meta charset="utf-8" />
        <title>Niveaux de titres</title>
    </head>

    <body>
        <h1>Titre super important</h1>
        <h2>Titre important</h2>
        <h3>Titre un peu moins important (sous-titre)</h3>

        <h4>Titre pas trop important</h4>
        <h5>Titre pas important</h5>
        <h6>Titre vraiment pas important du tout</h6>
    </body>
</html>

Allez, je vous donne un exemple d'utilisation des titres dans une page web (vous allez voir que je ne me sers pas de toutes les balises) :

<html>
<head>
    <meta charset="utf-8" />
    <title>Présentation du Site du Zéro</title>
</head>

<body>
    <h1>Bienvenue sur le Site du Zéro !</h1>

    <p>Bonjour et bienvenue sur mon site : le Site du Zéro.<br />
       Le Site du Zéro, qu'est-ce que c'est ?</p>

    <h2>Des cours pour débutants</h2>
    
    <p>Le Site du Zéro vous propose des cours (tutoriels) destinés aux débutants : aucune connaissance n'est requise pour lire ces cours !</p>
    
    <p>Vous pourrez ainsi apprendre, sans rien y connaître auparavant, à créer un site web, à programmer, à construire des mondes en 3D !</p>

    <h2>Une communauté active</h2>
    
    <p>Vous avez un problème, un élément du cours que vous ne comprenez pas ? Vous avez besoin d'aide pour créer votre site ?<br />
    Rendez-vous sur les forums ! Vous y découvrirez que vous n'êtes pas le seul dans ce cas et vous trouverez très certainement quelqu'un qui vous aidera aimablement à résoudre votre problème.</p>
</body>
</html>

Voilà une page web qui prend forme !

Oui, mais moi je veux centrer mon titre, l'écrire en rouge et le souligner !

Nous ferons tout cela lorsque nous apprendrons le CSS (dès la deuxième partie du cours). Il faut savoir que <h1> ne signifie pas « Times New Roman, taille 16 pt », mais « Titre important ».

Grâce au langage CSS, vous pourrez dire « Je veux que mes titres importants soient centrés, rouges et soulignés ». Pour le moment, en HTML, nous ne faisons que structurer notre page. Nous rédigeons le contenu avant de nous amuser à le mettre en forme.

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Les paragraphes La mise en valeur

La mise en valeur

Les titres Les listes

Au sein de vos paragraphes, certains mots sont parfois plus importants que d'autres et vous aimeriez les faire ressortir. HTML vous propose différents moyens de mettre en valeur le texte de votre page.

Mettre un peu en valeur

Pour mettre un peu en valeur votre texte, vous devez utiliser la balise <em> </em>.

Son utilisation est très simple : encadrez les mots à mettre en valeur avec ces balises et c'est bon ! Je reprends un peu l'exemple de tout à l'heure et j'y mets quelques mots en évidence :

<html>
<head>
    <meta charset="utf-8" />
    <title>Emphase</title>
</head>

<body>
    <p>Bonjour et bienvenue sur mon site !<br />
    Ceci est mon premier test alors <em>soyez indulgents</em> s'il vous plaît, j'apprends petit à petit comment cela marche.</p>
</body>
</html>

Comme vous pouvez le voir, utiliser la balise <em> a pour conséquence de mettre le texte en italique. En fait, c'est le navigateur qui choisit comment afficher les mots. On lui dit que les mots sont assez importants et, pour faire ressortir cette information, il change l'apparence du texte en utilisant l'italique.

Mettre bien en valeur

Pour mettre un texte bien en valeur, on utilise la balise <strong> qui signifie « fort », ou « important » si vous préférez. Elle s'utilise exactement de la même manière que <em> :

<html>
<head>
    <meta charset="utf-8" />
    <title>Forte emphase</title>
</head>

<body>
    <p>Bonjour et bienvenue sur mon site !<br />
    Ceci est mon premier test alors <strong>soyez indulgents</strong> s'il vous plaît, j'apprends petit à petit comment cela marche.</p>
</body>
</html>

Vous voyez sûrement le texte s'afficher en gras. Là encore, le gras n'est qu'une conséquence. Le navigateur a choisi d'afficher en gras les mots importants pour les faire ressortir davantage.

La balise <strong> ne signifie pas « mettre en gras » mais « important ». On pourra décider plus tard, en CSS, d'afficher les mots « importants » d'une autre façon que le gras si on le souhaite.

Marquer le texte

La balise <mark> permet de faire ressortir visuellement une portion de texte. L'extrait n'est pas forcément considéré comme important mais on veut qu'il se distingue bien du reste du texte. Cela peut être utile pour faire ressortir un texte pertinent après une recherche sur votre site par exemple.

<html>
<head>
    <meta charset="utf-8" />
    <title>Marquage du texte</title>
</head>

<body>
    <p>Bonjour et bienvenue sur mon site !<br />
    Ceci est mon premier test alors <mark>soyez indulgents</mark> s'il vous plaît, j'apprends petit à petit comment cela marche.</p>
</body>
</html>

Par défaut, <mark> a pour effet de surligner le texte. On pourra changer l'affichage en CSS (décider de surligner dans une autre couleur, d'encadrer le texte, etc.). C'est le même principe que ce que je vous disais pour les balises précédentes : elles indiquent le sens des mots et non pas comment ceux-ci doivent s'afficher.

N'oubliez pas : HTML pour le fond, CSS pour la forme

Je vais peut-être vous sembler un peu lourd mais il est très important qu'on se comprenne bien car les débutants font souvent la même grosse erreur à ce stade. Ils ont vu les balises <em>, <strong>, <mark>… et ils se disent : « Chouette, j'ai découvert comment mettre en italique, en gras et comment surligner du texte en HTML ! ».

Et pourtant… ce n'est pas à cela que servent ces balises ! Je sais, je sais, vous allez me dire « Oui mais quand j'utilise <strong> le texte apparaît en gras, donc c'est pour mettre en gras. » et pourtant, c'est une erreur de croire que cette balise sert à cela.

Le rôle des balises est d'indiquer le sens du texte. Ainsi, <strong> indique à l'ordinateur « Ce texte est important ». C'est tout.

Et pour montrer que le texte est important, l'ordinateur décide de le mettre en gras (mais il pourrait aussi bien l'écrire en rouge !). La plupart des navigateurs affichent les textes importants en gras, mais rien ne les y oblige.

Je ne comprends pas. À quoi cela sert-il que l'ordinateur sache qu'un texte est important ?

Il n'est pas assez intelligent pour comprendre !

Détrompez-vous ! De nombreux programmes analysent le code source des pages web, à commencer par les robots de moteurs de recherche. Ces robots parcourent le Web en lisant le code HTML de tous les sites. C'est le cas des robots de Google et de Bing, par exemple. Les mots-clés « importants » ont tendance à avoir plus de valeur à leurs yeux, donc si quelqu'un fait une recherche sur ces mots, il a plus de chances de tomber sur votre site.

Bien entendu, c'est une explication grossière et il ne faut pas croire qu'utiliser la balise <strong> à tout-va améliorera votre référencement. Il faut simplement faire confiance aux ordinateurs : ils comprennent ce qu'un texte « important » veut dire et peuvent se servir de cette information.

Mais alors, comment fait-on pour mettre spécifiquement en gras, pour écrire en rouge, et tout et tout ?

Tout cela se fait en CSS. Souvenez-vous :

Nous verrons le CSS plus loin, pour l'instant nous nous concentrons sur le HTML et ses balises, qui ont chacune un sens particulier.

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Les titres Les listes

Les listes

La mise en valeur Créer des liens

Les listes nous permettent souvent de mieux structurer notre texte et d'ordonner nos informations.

Nous allons découvrir ici deux types de listes :

Liste non ordonnée

Une liste non ordonnée ressemble à ceci :

C'est un système qui nous permet de créer une liste d'éléments sans notion d'ordre (il n'y a pas de « premier » ni de « dernier »). Créer une liste non ordonnée est très simple. Il suffit d'utiliser la balise <ul> que l'on referme un peu plus loin avec </ul>.

Commencez donc à taper ceci :

<ul></ul>

Et maintenant, voilà ce qu'on va faire : on va écrire chacun des éléments de la liste entre deux balises <li></li>. Chacune de ces balises doit se trouver entre <ul> et </ul>. Vous allez comprendre de suite avec cet exemple :

<ul>
    <li>Fraises</li>
    <li>Framboises</li>
    <li>Cerises</li>
</ul>

Le résultat se trouve à la figure suivante.

Une liste non ordonnée
Une liste non ordonnée

Notez que la liste doit être placée à l'intérieur de <body></body>. À partir de maintenant, je ne mets pas tout le code de la page pour rester lisible.

Retenez donc ces deux balises :

Vous pouvez mettre autant d'éléments que vous voulez dans la liste à puces, vous n'êtes pas limités à trois éléments.

Et voilà, vous savez créer une liste à puces ! Pas si dur une fois qu'on a compris comment imbriquer les balises.

Liste ordonnée

Une liste ordonnée fonctionne de la même façon, seule une balise change : il faut remplacer <ul></ul> par <ol></ol>.

À l'intérieur de la liste, on ne change rien : on utilise toujours des balises <li></li> pour délimiter les éléments.

Comme c'est particulièrement intuitif, je vous laisse admirer la simplicité de cet exemple (résultat à la figure suivante) :

<h1>Ma journée</h1>

<ol>
    <li>Je me lève.</li>
    <li>Je mange et je bois.</li>
    <li>Je retourne me coucher.</li>
</ol>
Une liste ordonnée
Une liste ordonnée

Par rapport à l'exemple précédent, tout ce qu'on a eu à changer est donc la balise <ol>.

En résumé

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

La mise en valeur Créer des liens

Créer des liens

Les listes Un lien vers un autre site

Au chapitre précédent, vous avez appris à créer une page HTML toute simple. D'accord, elle n'était pas franchement magnifique, mais c'était une vraie page HTML quand même.

Comme vous le savez, un site web est composé de plusieurs pages. Comment faire pour aller d'une page vers une autre ? À l'aide de liens pardi ! Dans ce chapitre, nous allons justement apprendre à créer des liens entre nos pages.

Je suppose que chacun d'entre vous sait ce qu'est un lien : il s'agit d'un texte sur lequel on peut cliquer pour se rendre sur une autre page.

On peut faire un lien d'une page a.html vers une page b.html, mais on peut aussi faire un lien vers un autre site (par exemple, http://www.siteduzero.com). Dans les deux cas, nous allons voir que le fonctionnement est le même.

Un lien vers un autre site

Créer des liens Un lien vers une autre page de son site

Il est facile de reconnaître les liens sur une page : ils sont écrits d'une façon différente (par défaut, en bleu et soulignés) et un curseur en forme de main apparaît lorsqu'on pointe dessus.

Je vous propose d'essayer de coder le lien qui amène vers le Site du Zéro, comme à la figure suivante.

Lien vers le Site du Zéro
Lien vers le Site du Zéro

Pour faire un lien, la balise que nous allons utiliser est très simple à retenir : <a>. Il faut cependant lui ajouter un attribut, href, pour indiquer vers quelle page le lien doit conduire.

Par exemple, le code ci-dessous est un lien qui amène vers le Site du Zéro, situé à l'adresse http://www.siteduzero.com :

<a href="http://www.siteduzero.com">Site du Zéro</a>

Nous allons placer ce lien au sein d'un paragraphe. Voici donc comment reproduire l'exemple de la figure précédente :

<p>Bonjour. Souhaitez-vous visiter le <a href="http://www.siteduzero.com">Site du Zéro</a> ?<br />
C'est un bon site ! ;-)</p>

Si vous voulez faire un lien vers un autre site, il suffit donc de copier son adresse (on parle d'URL) en http://. Notez que certains liens commencent parfois par https:// (sites sécurisés) ou d'autres préfixes (ftp://,…).

Les liens que nous venons de voir sont appelés liens absolus car on indique l'adresse complète. Nous allons maintenant voir que l'on peut écrire les liens d'une façon un peu différente, ce qui va nous être utile pour faire des liens entre les pages de notre site.

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Créer des liens Un lien vers une autre page de son site

Un lien vers une autre page de son site

Un lien vers un autre site Un lien vers une ancre

Nous venons d'apprendre à créer des liens vers des sites existants. Mais je suis sûr que vous aimeriez faire des liens entre les différentes pages de votre site, non ?

Oui, justement, comment je fais pour faire un lien vers une autre page de mon site ? Je ne connais pas son adresse en http://…, je commence à peine à créer mon site là ! Je n'ai pas d'adresse.

En effet, pour le moment, vous êtes en train de créer votre site sur votre ordinateur. Vous êtes le seul à pouvoir le voir et il n'a pas encore « d'adresse web » qui commence en http:// comme la plupart des sites. Heureusement, cela ne va pas nous empêcher de travailler.

Deux pages situées dans un même dossier

Pour commencer, nous allons créer deux fichiers correspondant à deux pages HTML différentes. Comme je suis très inspiré, je vous propose de les appeler page1.html et page2.html. Nous aurons donc ces deux fichiers sur notre disque dans le même dossier (figure suivante).

Plusieurs fichiers HTML dans un même dossier
Plusieurs fichiers HTML dans un même dossier

Comment faire un lien de la page 1 vers la page 2, sans avoir d'adresse en http:// ? En fait, c'est facile : si les deux fichiers sont situés dans le même dossier, il suffit d'écrire comme cible du lien le nom du fichier vers lequel on veut amener. Par exemple : <a href="page2.html">. On dit que c'est un lien relatif.

Voici le code que nous allons utiliser dans nos fichiers page1.html et page2.html.

page1.html

<p>Bonjour. Souhaitez-vous consulter <a href="page2.html">la page 2</a> ?</p>

page2.html

La page 2 (page d'arrivée) affichera simplement un message pour indiquer que l'on est bien arrivé sur la page 2 :

<h1>Bienvenue sur la page 2 !</h1>

Deux pages situées dans des dossiers différents

Les choses se corsent un petit peu si les pages sont situées dans des dossiers différents. Idéalement, elles ne devraient pas être trop loin l'une de l'autre (dans un sous-dossier par exemple).

Imaginons que page2.html se trouve dans un sous-dossier appelé contenu, comme à la figure suivante.

Le fichier page2.html se trouve à l'intérieur du dossier contenu
Le fichier page2.html se trouve à l'intérieur du dossier contenu

Dans ce cas de figure, le lien doit être rédigé comme ceci :

<a href="contenu/page2.html">

S'il y avait plusieurs sous-dossiers, on écrirait ceci :

<a href="contenu/autredossier/page2.html">

Et si le fichier ne se trouve pas dans un sous-dossier mais dans un dossier « parent », on fait comment ?

Si votre fichier cible est placé dans un dossier qui se trouve « plus haut » dans l'arborescence, il faut écrire deux points comme ceci :

<a href="../page2.html">

Résumé en images

Les liens relatifs ne sont pas bien compliqués à utiliser une fois qu'on a compris le principe. Il suffit de regarder dans quel « niveau de dossier » se trouve votre fichier cible pour savoir comment écrire votre lien. La figure suivante fait la synthèse des différents liens relatifs possibles.

Les différents liens relatifs
Les différents liens relatifs
Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Un lien vers un autre site Un lien vers une ancre

Un lien vers une ancre

Un lien vers une autre page de son site Cas pratiques d'utilisation des liens

Une ancre est une sorte de point de repère que vous pouvez mettre dans vos pages HTML lorsqu'elles sont très longues.

En effet, il peut alors être utile de faire un lien amenant plus bas dans la même page pour que le visiteur puisse sauter directement à la partie qui l'intéresse.

Pour créer une ancre, il suffit de rajouter l'attribut id à une balise qui va alors servir de repère. Ce peut être n'importe quelle balise, un titre par exemple.

Utilisez l'attribut id pour donner un nom à l'ancre. Cela nous servira ensuite pour faire un lien vers cette ancre. Par exemple :

<h2 id="mon_ancre">Titre</h2>

Ensuite, il suffit de créer un lien comme d'habitude, mais cette fois l'attribut href contiendra un dièse (#) suivi du nom de l'ancre. Exemple :

<a href="#mon_ancre">Aller vers l'ancre</a>

Normalement, si vous cliquez sur le lien, cela vous amènera plus bas dans la même page (à condition que la page comporte suffisamment de texte pour que les barres de défilement se déplacent automatiquement).

Voici un exemple de page comportant beaucoup de texte et utilisant les ancres (j'ai mis n'importe quoi dans le texte pour remplir ) :

<h1>Ma grande page</h1>

<p>
    Aller directement à la partie traitant de :<br />
    <a href="#cuisine">La cuisine</a><br />
    <a href="#rollers">Les rollers</a><br />
    <a href="#arc">Le tir à l'arc</a><br />
</p>
<h2 id="cuisine">La cuisine</h2>

<p>... (beaucoup de texte) ...</p>

<h2 id="rollers">Les rollers</h2>

<p>... (beaucoup de texte) ...</p>

<h2 id="arc">Le tir à l'arc</h2>

<p>... (beaucoup de texte) ...</p>

S'il ne se passe rien quand vous cliquez sur les liens, c'est qu'il n'y a pas assez de texte. Dans ce cas, vous pouvez soit rajouter du blabla dans la page pour qu'il y ait (encore) plus de texte, soit réduire la taille de la fenêtre de votre navigateur pour faire apparaître les barres de défilement sur le côté.

Lien vers une ancre située dans une autre page

Alors là je vous préviens, on va faire le Mégamix !

L'idée, c'est de faire un lien qui ouvre une autre page ET qui amène directement à une ancre située plus bas sur cette page.

En pratique c'est assez simple à faire : il suffit de taper le nom de la page, suivi d'un dièse (#), suivi du nom de l'ancre.

Par exemple : <a href="ancres.html#rollers">

… vous amènera sur la page ancres.html, directement au niveau de l'ancre appelée rollers.

Voici une page qui contient trois liens, chacun amenant vers une des ancres de la page de l'exemple précédent :

<h1>Le Mégamix</h1>
<p>
    Rendez-vous quelque part sur une autre page :<br />
    <a href="ancres.html#cuisine">La cuisine</a><br />
    <a href="ancres.html#rollers">Les rollers</a><br />
    <a href="ancres.html#arc">Le tir à l'arc</a><br />
</p>
Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Un lien vers une autre page de son site Cas pratiques d'utilisation des liens

Cas pratiques d'utilisation des liens

Un lien vers une ancre Les images

Je vais essayer de vous montrer ici quelques cas pratiques d'utilisation des liens. Par exemple, saviez-vous qu'il est très facile de faire des liens qui lancent un téléchargement ? Qui créent un nouvel e-mail ? Qui ouvrent une nouvelle fenêtre ?

Non ? Eh bien nous allons voir tout cela ici.

Un lien qui affiche une infobulle au survol

Vous pouvez utiliser l'attribut title qui affiche une bulle d'aide lorsqu'on pointe sur le lien. Cet attribut est facultatif.

Vous aurez un résultat ressemblant à la figure suivante.

Une infobulle
Une infobulle

La bulle d'aide peut être utile pour informer le visiteur avant même qu'il n'ait cliqué sur le lien.

Voici comment reproduire ce résultat :

<p>Bonjour. Souhaitez-vous visiter le <a href="http://www.siteduzero.com" title="Réservé aux débutants">Site du Zéro</a> ?</p>

Un lien qui ouvre une nouvelle fenêtre

Il est possible de « forcer » l'ouverture d'un lien dans une nouvelle fenêtre. Pour cela, on rajoutera target="_blank" à la balise <a> :

<p>Bonjour. Souhaitez-vous visiter le <a href="http://www.siteduzero.com" target="_blank">Site du Zéro</a> ?<br />
Le site s'affichera dans une autre fenêtre.</p>

Un lien pour envoyer un e-mail

Si vous voulez que vos visiteurs puissent vous envoyer un e-mail, vous pouvez utiliser des liens de type mailto. Rien ne change au niveau de la balise, vous devez simplement modifier la valeur de l'attribut href comme ceci :

<p><a href="mailto:[email protected]">Envoyez-moi un e-mail !</a></p>

Il suffit donc de faire commencer le lien par mailto: et d'écrire l'adresse e-mail où on peut vous contacter. Si vous cliquez sur le lien, un nouveau message vide s'ouvre, prêt à être envoyé à votre adresse e-mail.

Un lien pour télécharger un fichier

Beaucoup d'entre vous se demandent comment cela se passe pour le téléchargement d'un fichier… En fait, il faut procéder exactement comme si vous faisiez un lien vers une page web, mais en indiquant cette fois le nom du fichier à télécharger.

Par exemple, supposez que vous vouliez faire télécharger monfichier.zip. Placez simplement ce fichier dans le même dossier que votre page web (ou dans un sous-dossier) et faites un lien vers ce fichier :

<p><a href="monfichier.zip">Télécharger le fichier</a></p>

C'est tout ! Le navigateur, voyant qu'il ne s'agit pas d'une page web à afficher, va lancer la procédure de téléchargement lorsqu'on cliquera sur le lien.

En résumé

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Un lien vers une ancre Les images

Les images

Cas pratiques d'utilisation des liens Les différents formats d'images

Insérer une image dans une page web ? Vous allez voir, c'est d'une facilité déconcertante… Enfin presque. Il existe différents formats d'image que l'on peut utiliser sur des sites web, et on ne doit pas les choisir au hasard. En effet, les images sont parfois volumineuses à télécharger, ce qui ralentit le temps de chargement de la page (beaucoup plus que le texte !).

Pour faire en sorte que vos pages restent lisibles et rapides à télécharger, suivez donc activement mes conseils !

Les différents formats d'images

Les images Insérer une image

Savez-vous ce qu'est un format d'image ?

Quand vous avez une image « entre les mains », vous avez la possibilité de l'enregistrer dans plusieurs « formats » différents. Le poids (en Ko, voire en Mo) de l'image sera plus ou moins élevé selon le format choisi et la qualité de l'image va changer.

Par exemple, le logiciel de dessin Paint (même si c'est loin d'être le meilleur) vous propose de choisir entre plusieurs formats lorsque vous enregistrez une image (figure suivante).

Différents formats d'image proposés par Paint
Différents formats d'image proposés par Paint

Certains formats sont plus adaptés que d'autres selon l'image (photo, dessin, image animée…). Notre but ici est de faire le tour des différents formats utilisés sur le Web pour que vous les connaissiez et sachiez choisir celui qui convient le mieux à votre image. Rassurez-vous, il n'y a pas beaucoup de formats différents, cela ne sera donc pas bien long.

Toutes les images diffusées sur Internet ont un point commun : elles sont compressées. Cela veut dire que l'ordinateur fait des calculs pour qu'elles soient moins lourdes et donc plus rapides à charger.

Le JPEG

Les images au format JPEG (Joint Photographic Expert Group) sont très répandues sur le Web. Ce format est conçu pour réduire le poids des photos (c'est-à-dire la taille du fichier associé), qui peuvent comporter plus de 16 millions de couleurs différentes. La figure suivante est une photo enregistrée au format JPEG.

Une photo de montagne en JPEG
Une photo de montagne en JPEG

Les images JPEG sont enregistrées avec l'extension .jpg ou .jpeg.

Notez que le JPEG détériore un peu la qualité de l'image, d'une façon généralement imperceptible. C'est ce qui le rend si efficace pour réduire le poids des photos.

Quand il s'agit d'une photo, on ne peut généralement pas détecter la perte de qualité. Par contre, si ce n'est pas une photo, vous risquez de voir l'image un peu « baver ». Dans ce cas, il vaut mieux utiliser le format PNG.

Le PNG

Le format PNG (Portable Network Graphics) est le plus récent de tous. Ce format est adapté à la plupart des graphiques (je serais tenté de dire « à tout ce qui n'est pas une photo »). Le PNG a deux gros avantages : il peut être rendu transparent et il n'altère pas la qualité de l'image.

Le PNG a été inventé pour concurrencer un autre format, le GIF, à l'époque où il fallait payer des royalties pour pouvoir utiliser des GIF. Depuis, le PNG a bien évolué et c'est devenu le format le plus puissant pour enregistrer la plupart des images.

Le PNG existe en deux versions, en fonction du nombre de couleurs que doit comporter l'image :

La figure suivante est une image PNG en 24 bits, représentant la célèbre mascotte Zozor du Site du Zéro.

Zozor en PNG
Zozor en PNG

Au fait, si le PNG 24 bits peut afficher autant de couleurs qu'une image JPEG, et qu'en plus il peut être rendu transparent sans modifier la qualité de l'image… quel est l'intérêt du JPEG ?

La compression du JPEG est plus puissante sur les photos. Une photo enregistrée en JPEG se chargera toujours beaucoup plus vite que si elle était enregistrée en PNG. Je vous conseille donc toujours de réserver le format JPEG aux photos.

Le GIF

C'est un format assez vieux, qui a été néanmoins très utilisé (et qui reste très utilisé par habitude). Aujourd'hui, le PNG est globalement bien meilleur que le GIF : les images sont généralement plus légères et la transparence est de meilleure qualité. Je vous recommande donc d'utiliser le PNG autant que possible.

Le format GIF est limité à 256 couleurs (alors que le PNG peut aller jusqu'à plusieurs millions de couleurs).

Néanmoins, le GIF conserve un certain avantage que le PNG n'a pas : il peut être animé.

Un GIF animé
Un GIF animé

Il existe un format adapté à chaque image

Si on résume, voici quel format adopter en fonction de l'image que vous avez :

Les erreurs à éviter

Bannissez les autres formats

Les autres formats non cités ici, comme le format BITMAP (*.bmp) sont à bannir car bien souvent ils ne sont pas compressés, donc trop gros. Ils ne sont pas du tout adaptés au Web. On peut en mettre sur son site mais le chargement sera vraiment extrêmement long !

Choisissez bien le nom de votre image

Si vous voulez éviter des problèmes, prenez l'habitude d'enregistrer vos fichiers avec des noms en minuscules, sans espace ni accent, par exemple : mon_image.png.

Vous pouvez remplacer les espaces par le caractère underscore (« _ ») comme je l'ai fait ici.

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Les images Insérer une image

Insérer une image

Les différents formats d'images Les figures

Revenons maintenant au code HTML pour découvrir comment placer des images dans nos pages web !

Insertion d'une image

Quelle est la fameuse balise qui va nous permettre d'insérer une image ? Il s'agit de… <img /> !

C'est une balise de type orpheline (comme <br />). Cela veut dire qu'on n'a pas besoin de l'écrire en deux exemplaires comme la plupart des autres balises que nous avons vues jusqu'ici. En effet, nous n'avons pas besoin de délimiter une portion de texte, nous voulons juste insérer une image à un endroit précis.

La balise doit être accompagnée de deux attributs obligatoires :

Les images doivent se trouver obligatoirement à l'intérieur d'un paragraphe (<p></p>). Voici un exemple d'insertion d'image :

<p>
    Voici une photo que j'ai prise lors de mes dernières vacances à la montagne :<br />
    <img src="images/montagne.jpg" alt="Photo de montagne" />
</p>

Bref, l'insertion d'image est quelque chose de très facile pour peu qu'on sache indiquer où se trouve l'image, comme on avait appris à le faire avec les liens.

La plus grosse « difficulté » (si on peut appeler cela une difficulté) consiste à choisir le bon format d'image. Ici, c'est une photo donc c'est évidemment le format JPEG qu'on utilise.

Ajouter une infobulle

L'attribut permettant d'afficher une bulle d'aide est le même que pour les liens : il s'agit de title. Cet attribut est facultatif (contrairement à alt).

Voici ce que cela peut donner :

<p>
    Voici une photo que j'ai prise lors de mes dernières vacances à la montagne :<br />
    <img src="images/montagne.jpg" alt="Photo de montagne" title="C'est beau les Alpes quand même !" />
</p>

Survolez la photo avec la souris pour voir l'infobulle apparaître.

Miniature cliquable

Si votre image est très grosse, il est conseillé d'en afficher la miniature sur votre site. Ajoutez ensuite un lien sur cette miniature pour que vos visiteurs puissent afficher l'image en taille originale.

Il existe des millions de logiciels permettant de créer des miniatures d'images. J'utilise personnellement Easy Thumbnails. Je vais ainsi disposer de deux versions de ma photo, comme à la figure suivante) : la miniature et l'image d'origine.

La miniature et son image d'origine
La miniature et son image d'origine

Je les place toutes les deux dans un dossier appelé par exemple img. J'affiche la version montagne_mini.jpg sur ma page et je fais un lien vers montagne.jpg pour que l'image agrandie s'affiche lorsqu'on clique sur la miniature.

Voici le code HTML que je vais utiliser pour cela :

<p>
    Vous souhaitez voir l'image dans sa taille d'origine ? Cliquez dessus !<br />
    <a href="img/montagne.jpg"><img src="img/montagne_mini.jpg" alt="Photo de montagne" title="Cliquez pour agrandir" /></a>
</p>
Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Les différents formats d'images Les figures

Les figures

Insérer une image Mettre en place le CSS

Au cours de la lecture de ce livre, vous avez déjà rencontré plusieurs fois des figures. Ce sont des éléments qui viennent enrichir le texte pour compléter les informations de la page.

Les figures peuvent être de différents types :

Bref, tout ce qui vient illustrer le texte est une figure. Nous allons ici nous intéresser aux images mais, contrairement à ce qu'on pourrait croire, les figures ne sont pas forcément des images : un code source aussi illustre le texte.

Création d'une figure

Reprenons par exemple cette capture d'écran du premier chapitre, représentée à la figure suivante.

Le logiciel Bloc-Notes
Le logiciel Bloc-Notes

En HTML5, on dispose de la balise <figure>. Voici comment on pourrait l'utiliser :

<figure>
    <img src="images/blocnotes.png" alt="Bloc-Notes" />
</figure>

Une figure est le plus souvent accompagnée d'une légende. Pour ajouter une légende, utilisez la balise <figcaption> à l'intérieur de la balise <figure>, comme ceci :

<figure>
    <img src="images/blocnotes.png" alt="Bloc-Notes" />
    <figcaption>Le logiciel Bloc-Notes</figcaption>
</figure>

Bien comprendre le rôle des figures

Un peu plus tôt dans ce chapitre, je vous ai dit que les images devaient être situées dans des paragraphes (placées à l'intérieur d'une balise <p></p>). Ce n'est pas tout à fait vrai.

Si vous faites de votre image une figure, l'image peut être située en-dehors d'un paragraphe.

<p>Connaissez-vous le logiciel Bloc-Notes ? On peut faire des sites web avec !</p>

<figure>
    <img src="images/blocnotes.png" alt="Bloc-Notes" />
    <figcaption>Le logiciel Bloc-Notes</figcaption>
</figure>

Je ne vois pas vraiment de changement. Quand dois-je placer mon image dans un paragraphe et quand dois-je la placer dans une figure ?

Bonne question ! Tout dépend de ce que votre image apporte au texte :

La balise <figure> a un rôle avant tout sémantique. Cela veut dire qu'elle indique à l'ordinateur que l'image a du sens et qu'elle est importante pour la bonne compréhension du texte. Cela peut permettre à un programme de récupérer toutes les figures du texte et de les référencer dans une table des figures, par exemple.

Enfin, sachez qu'une figure peut très bien comporter plusieurs images. Voici un cas où cela se justifie :

<figure>
    <img src="images/internetexplorer.png" alt="Logo Internet Explorer" />
    <img src="images/firefox.png" alt="Logo Mozilla Firefox" />
    <img src="images/chrome.png" alt="Logo Google Chrome" />
    <figcaption>Logos des différents navigateurs</figcaption>
</figure>

En résumé

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Insérer une image Mettre en place le CSS

Mettre en place le CSS

Les figures La petite histoire du CSS

Après avoir passé toute une première partie du cours à ne travailler que sur le HTML, nous allons maintenant découvrir le CSS que j'avais volontairement mis à l'écart. Le CSS n'est pas plus compliqué que le HTML. Il vient le compléter pour vous aider à mettre en forme votre page web.

Dans ce premier chapitre sur le CSS, nous allons voir la théorie sur le CSS : qu'est-ce que c'est ? À quoi cela ressemble-t-il ? Où est-ce qu'on écrit du code CSS ? Ces aspects théoriques ne sont pas bien compliqués mais vous devez obligatoirement les connaître car c'est la base du CSS. C'est d'ailleurs la seule chose que je vous demanderai de retenir par cœur en CSS, vous pourrez retrouver le reste dans le mémo en annexe.

Allez, ne traînons pas, je vois que vous brûlez d'impatience !

La petite histoire du CSS

Mettre en place le CSS Où écrit-on le CSS ?

Je vous avais avertis dès le début de ce cours : nous allons apprendre deux langages. Nous avons déjà bien entamé notre découverte du HTML, même s'il reste encore de nombreuses choses à apprendre (nous y reviendrons dans quelques chapitres). En revanche, il est temps maintenant de nous intéresser au CSS.

CSS (Cascading Style Sheets), c'est cet autre langage qui vient compléter le HTML.

Vous vous souvenez de son rôle ? Gérer la mise en forme de votre site.

Petit rappel : à quoi sert CSS ?

CSS ? C'est lui qui vous permet de choisir la couleur de votre texte.

Lui qui vous permet de sélectionner la police utilisée sur votre site.

Lui encore qui permet de définir la taille du texte, les bordures, le fond…

Et aussi, c'est lui qui permet de faire la mise en page de votre site. Vous pourrez dire : je veux que mon menu soit à gauche et occupe telle largeur, que l'en-tête de mon site soit calé en haut et qu'il soit toujours visible, etc.

Souvenez-vous de ce petit comparatif que nous avions vu dès le premier chapitre (figure suivante).

La même page HTML, sans et avec CSS (www.csszengarden.com)
La même page HTML, sans et avec CSS (www.csszengarden.com)

Grâce au HTML, nous avons pu rédiger le contenu de notre site mais il est brut de décoffrage. Le CSS vient compléter ce code pour mettre en forme tout cela et donner au contenu l'apparence que l'on souhaite.

CSS : des débuts difficiles

Il faut savoir qu'aux débuts du Web, CSS n'existait pas. En fait, il n'y avait initialement que le langage HTML.

Le HTML est né en 1991 et CSS en 1996. Alors, vous vous dites sûrement : comment faisait-on la mise en forme de 1991 à 1996 ? Eh bien, uniquement en HTML ! Il y avait en effet des balises HTML dédiées à la mise en forme. <font color="#aab1c3">, par exemple, permettait de définir la couleur du texte.

Cependant, les pages HTML commençaient à devenir assez complexes. Il y avait de plus en plus de balises et c'était un joyeux mélange entre le fond et la forme, qui rendait la mise à jour des pages web de plus en plus complexe. C'est pour cela que l'on a créé le langage CSS.

Cependant, le CSS n'a pas été adopté immédiatement par les webmasters, loin de là. Il fallait se défaire de certaines mauvaises habitudes et cela a pris du temps. Encore aujourd'hui, on peut trouver des sites web avec des balises HTML de mise en forme, anciennes et obsolètes, comme <font> !

CSS : la prise en charge des navigateurs

Tout comme le HTML, le CSS a évolué. Je vous avais indiqué qu'il y avait quatre versions importantes de CSS :

Ce sont les navigateurs web qui font le travail le plus complexe : ils doivent lire le code CSS et comprendre comment afficher la page.

Au début des années 2000, Internet Explorer était le navigateur le plus répandu mais sa gestion du CSS est longtemps restée assez médiocre (pour ne pas dire carrément mauvaise). C'était la grande époque de la version 6 (IE6), hélas encore utilisée aujourd'hui par une petite partie des internautes (heureusement, cette proportion tend à diminuer).

Depuis, de nombreux navigateurs sont arrivés et ont chahuté Internet Explorer : Mozilla Firefox bien sûr, mais aussi Google Chrome. Et je ne vous parle pas du succès des Mac et iPhone avec leur navigateur Safari. Cela a incité Microsoft à réagir et publier (après une longue période d'inactivité) IE 7, puis IE 8 et IE 9. On parle déjà de IE 10.

Bon, ton cours d'histoire, c'est bien joli mais en quoi cela me concerne-t-il aujourd'hui ?

Que faut-il retenir de tout cela ? Que les navigateurs ne connaissent pas toutes les propriétés CSS qui existent. Plus le navigateur est vieux, moins il connaît de fonctionnalités CSS.

Je vais vous présenter dans ce cours un certain nombre de fonctionnalités de CSS qui ne marchent pas forcément sur les navigateurs les plus vieux. Je ne peux pas l'éviter, c'est comme cela : aucun navigateur ne connaît parfaitement toutes les fonctionnalités CSS de toute façon ! Au pire, si le navigateur ne connaît pas une propriété CSS, il l'ignore et ne met pas en forme, mais cela ne fait pas planter votre page : celle-ci sera donc toujours lisible.

Je vous recommande fortement de mettre dans vos favoris les sites www.caniuse.com et normansblog.de qui proposent des tables de compatibilité des fonctionnalités de HTML et CSS sur différents navigateurs (et sur leurs différentes versions). Regardez en particulier les tables de compatibilité pour CSS de www.caniuse.com (figure suivante).

Table de compatibilité CSSTable de compatibilité CSS

Table de compatibilité CSS de caniuse.com

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Mettre en place le CSS Où écrit-on le CSS ?

Où écrit-on le CSS ?

La petite histoire du CSS Appliquer un style : sélectionner une balise

Vous avez le choix car on peut écrire du code en langage CSS à trois endroits différents :

Je vais vous présenter ces trois méthodes mais sachez d'ores et déjà que la première… est la meilleure.

Dans un fichier .css (recommandé)

Comme je viens de vous le dire, on écrit le plus souvent le code CSS dans un fichier spécial ayant l'extension .css (contrairement aux fichiers HTML qui ont l'extension .html). C'est la méthode la plus pratique et la plus souple. Cela nous évite de tout mélanger dans un même fichier. J'utiliserai cette technique dans toute la suite de ce cours.

Commençons à pratiquer dès maintenant ! Nous allons partir du fichier HTML suivant :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Premiers tests du CSS</title>
    </head>

    <body>
        <h1>Mon super site</h1>
        
        <p>Bonjour et bienvenue sur mon site !</p>
        <p>Pour le moment, mon site est un peu <em>vide</em>. Patientez encore un peu !</p>
    </body>
</html>

Vous noterez le contenu de la ligne 5, <link rel="stylesheet" href="style.css" /> : c'est elle qui indique que ce fichier HTML est associé à un fichier appelé style.css et chargé de la mise en forme.

Enregistrez ce fichier sous le nom que vous voulez (par exemple page.html). Pour le moment, rien d'extraordinaire à part la nouvelle balise que nous avons ajoutée.

Maintenant, créez un nouveau fichier vide dans votre éditeur de texte (par exemple Notepad++) et copiez-y ce bout de code CSS (rassurez-vous, je vous expliquerai tout à l'heure ce qu'il veut dire) :

p
{
    color: blue;
}

Enregistrez le fichier en lui donnant un nom qui se termine par .css, comme style.css. Placez ce fichier .css dans le même dossier que votre fichier .html.

Dans Notepad++, vous devriez observer quelque chose de similaire à la figure suivante.

Fichiers HTML et CSS dans Notepad++
Fichiers HTML et CSS dans Notepad++

Dans votre explorateur de fichiers, vous devriez les voir apparaître côte à côte. D'un côté le .html, de l'autre le .css, comme à la figure suivante.

Fichiers HTML et CSS dans l'explorateur de fichiers
Fichiers HTML et CSS dans l'explorateur de fichiers

Ouvrez maintenant votre fichier page.html dans votre navigateur pour le tester, comme vous le faites d'habitude. Regardez, c'est magique : vos paragraphes sont écrits en bleu, comme dans la figure suivante !

Le texte est écrit en bleu
Le texte est écrit en bleu

Dans l'en-tête <head> du fichier HTML

Il existe une autre méthode pour utiliser du CSS dans ses fichiers HTML : cela consiste à insérer le code CSS directement dans une balise <style> à l'intérieur de l'en-tête <head>.

Voici comment on peut obtenir exactement le même résultat avec un seul fichier .html qui contient le code CSS (lignes 5 à 10) :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <style>
            p
            {
                color: blue;
            }
        </style>
        <title>Premiers tests du CSS</title>
    </head>

    <body>
        <h1>Mon super site</h1>
        
        <p>Bonjour et bienvenue sur mon site !</p>
        <p>Pour le moment, mon site est un peu <em>vide</em>. Patientez encore un peu !</p>
    </body>
</html>

Testez, vous verrez que le résultat est le même.

Directement dans les balises (non recommandé)

Dernière méthode, à manipuler avec précaution : vous pouvez ajouter un attribut style à n'importe quelle balise. Vous insérerez votre code CSS directement dans cet attribut :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Premiers tests du CSS</title>
    </head>

    <body>
        <h1>Mon super site</h1>
        
        <p style="color: blue;">Bonjour et bienvenue sur mon site !</p>
        <p>Pour le moment, mon site est un peu <em>vide</em>. Patientez encore un peu !</p>
    </body>
</html>

Cette fois, seul le texte du premier paragraphe (ligne 11), dont la balise contient le code CSS, sera coloré en bleu (figure suivante).

Le premier paragraphe est écrit en bleu
Le premier paragraphe est écrit en bleu

Quelle méthode choisir ?

Je trouve que la première méthode que tu recommandes est plus compliquée que les deux autres ! Pourquoi nous conseilles-tu de créer deux fichiers, j'étais bien, moi, avec juste un fichier .html !

Je vous recommande fortement de prendre l'habitude de travailler avec la première méthode parce que c'est celle utilisée par la majorité des webmasters… Pourquoi ?

Pour le moment, vous faites vos tests sur un seul fichier HTML. Cependant, votre site sera plus tard constitué de plusieurs pages HTML, on est d'accord ?

Imaginez : si vous placez le code CSS directement dans le fichier HTML, il faudra copier ce code dans tous les fichiers HTML de votre site ! Et si demain vous changez d'avis, par exemple si vous voulez que vos paragraphes soient écrits en rouge et non en bleu, il faudra modifier chaque fichier HTML un à un, comme le montre la figure suivante.

Le code CSS est répété dans chaque fichier HTML
Le code CSS est répété dans chaque fichier HTML

Si vous travaillez avec un fichier CSS externe, vous n'aurez besoin d'écrire cette instruction qu'une seule fois pour tout votre site, comme le montre la figure suivante.

Le code CSS est donné une fois pour toutes dans un fichier CSS
Le code CSS est donné une fois pour toutes dans un fichier CSS
Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

La petite histoire du CSS Appliquer un style : sélectionner une balise

Appliquer un style : sélectionner une balise

Où écrit-on le CSS ? Appliquer un style : class et id

Maintenant que nous savons où placer le code CSS, intéressons-nous de plus près à ce code. Je vous ai donné, sans vous l'expliquer, un premier bout de code CSS :

p
{
    color: blue;
}

Dans un code CSS comme celui-ci, on trouve trois éléments différents :

Schématiquement, une feuille de style CSS ressemble donc à cela :

balise1
{
    propriete1: valeur1;
    propriete2: valeur2;
    propriete3: valeur3;
}

balise2
{
    propriete1: valeur1;
    propriete2: valeur2;
    propriete3: valeur3;
    propriete4: valeur4;
}

balise3
{
    propriete1: valeur1;
}

Vous repérez dans cet extrait de code les balises, propriétés et valeurs dont je viens de vous parler.

Comme vous le voyez, on écrit le nom de la balise (par exemple h1) et on ouvre des accolades pour, à l'intérieur, mettre les propriétés et valeurs que l'on souhaite. On peut mettre autant de propriétés que l'on veut à l'intérieur des accolades. Chaque propriété est suivie du symbole « deux-points » ( : ) puis de la valeur correspondante. Enfin, chaque ligne se termine par un point-virgule ( ; ).

Je vous apprendrai de nombreuses propriétés dans les chapitres suivants. Pour le moment, dans les exemples, on va juste changer la couleur pour s'entraîner.

Le code CSS que nous avons utilisé jusqu'ici :

p
{
    color: blue;
}

… signifie donc en français : « Je veux que tous mes paragraphes soient écrits en bleu. ». Le résultat est visible à la figure suivante.

Paragraphes écrits en bleu
Paragraphes écrits en bleu

Essayez de changer le nom de la balise affectée par le code CSS. Par exemple, si j'écris h1, c'est le titre qui sera écrit en bleu. Modifiez votre fichier style.css comme ceci :

h1
{
    color: blue;
}

Maintenant, ouvrez à nouveau votre page HTML (souvenez-vous, c'est la page HTML qu'on ouvre dans le navigateur, pas le fichier CSS !) : vous devriez voir son titre s'afficher en bleu (figure suivante) !

Titre écrit en bleu
Titre écrit en bleu

Appliquer un style à plusieurs balises

Prenons le code CSS suivant :

h1
{
    color: blue;
}

em
{
    color: blue;
}

Il signifie que nos titres <h1> et nos textes importants <em> doivent s'afficher en bleu. Par contre, c'est un peu répétitif, vous ne trouvez pas ?

Heureusement, il existe un moyen en CSS d'aller plus vite si les deux balises doivent avoir la même présentation. Il suffit de combiner la déclaration en séparant les noms des balises par une virgule, comme ceci :

h1, em
{
    color: blue;
}

Le résultat se trouve à la figure suivante.

Titre et texte important écrits en bleu
Titre et texte important écrits en bleu

Cela signifie : « Je veux que le texte de mes <h1> et <em> soit écrit en bleu ».

Vous pouvez indiquer autant de balises à la suite que vous le désirez.

Des commentaires dans du CSS

Comme en HTML, il est possible de mettre des commentaires. Les commentaires ne seront pas affichés, ils servent simplement à indiquer des informations pour vous, par exemple pour vous y retrouver dans un looong fichier CSS.

D'ailleurs, vous allez vous en rendre compte, en général le fichier HTML est assez court et la feuille CSS assez longue (si elle contient tous les éléments de style de votre site, c'est un peu normal). Notez qu'il est possible de créer plusieurs fichiers CSS pour votre site si vous ressentez le besoin de séparer un peu votre code CSS (en fonction des différentes sections de votre site, par exemple).

… De quoi on parlait déjà ? Ah oui, les commentaires en CSS.

Donc, pour faire un commentaire, c'est facile ! Tapez /*, suivi de votre commentaire, puis */ pour terminer votre commentaire.

Vos commentaires peuvent être écrits sur une ou plusieurs lignes. Par exemple :

/*
style.css
---------
 
Par Mathieu Nebra
*/
 
p
{
    color: blue; /* Les paragraphes seront en bleu */
}

Il est possible que j'utilise les commentaires dans la suite du cours, pour vous donner des explications à l'intérieur même des fichiers .css.

Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Où écrit-on le CSS ? Appliquer un style : class et id

Appliquer un style : class et id

Appliquer un style : sélectionner une balise Appliquer un style : les sélecteurs avancés

Ce que je vous ai montré jusqu'ici a quand même un défaut : cela implique par exemple que TOUS les paragraphes possèdent la même présentation (ici, ils seront donc tous écrits en bleu).

Comment faire pour que certains paragraphes seulement soient écrits d'une manière différente ? On pourrait placer le code CSS dans un attribut style sur la balise que l'on vise (c'est la technique que je vous ai présentée un peu plus tôt) mais, comme je vous l'ai dit, ce n'est pas recommandé (il vaut mieux utiliser un fichier CSS externe).

Pour résoudre le problème, on peut utiliser ces attributs spéciaux qui fonctionnent sur toutes les balises :

Que les choses soient claires dès le début : les attributs class et id sont quasiment identiques. Il y a seulement une petite différence que je vous dévoilerai plus bas.

Pour le moment, et pour faire simple, on ne va s'intéresser qu'à l'attribut class.

Comme je viens de vous le dire, c'est un attribut que l'on peut mettre sur n'importe quelle balise, aussi bien titre que paragraphe, image, etc.

<h1 class=""> </h1>
<p class=""> </p>
<img class="" />

Oui mais que met-on comme valeur à l'attribut class ?

En fait, vous devez écrire un nom qui sert à identifier la balise. Ce que vous voulez, du moment que le nom commence par une lettre.

Par exemple, je vais associer la classe introduction à mon premier paragraphe (ligne 12) :

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <link rel="stylesheet" href="style.css" />
        <title>Premiers tests du CSS</title>
    </head>

    <body>
        <h1>Mon super site</h1>
        
        <p class="introduction">Bonjour et bienvenue sur mon site !</p>
        <p>Pour le moment, mon site est un peu <em>vide</em>. Patientez encore un peu !</p>
    </body>
</html>

Maintenant que c'est fait, votre paragraphe est identifié. Il a un nom : introduction. Vous allez pouvoir réutiliser ce nom dans le fichier CSS pour dire : « Je veux que seules les balises qui ont comme nom 'introduction' soient affichées en bleu ».

Pour faire cela en CSS, indiquez le nom de votre classe en commençant par un point, comme ci-dessous :

.introduction
{
    color: blue;
}

Testez le résultat : seul votre paragraphe appelé introduction va s'afficher en bleu (figure suivante) !

Seul le premier paragraphe s'affiche en bleu
Seul le premier paragraphe s'affiche en bleu

Et l'attribut id alors ?

Lui, il fonctionne exactement de la même manière que class, à un détail près : il ne peut être utilisé qu'une fois dans le code.

Quel intérêt ? Il y en a assez peu pour tout vous dire, cela vous sera utile si vous faites du JavaScript plus tard pour reconnaître certaines balises. D'ailleurs, nous avons déjà vu l'attribut id dans le chapitre sur les liens (pour réaliser des ancres). En pratique, nous ne mettrons des id que sur des éléments qui sont uniques dans la page, comme par exemple le logo :

<img src="images/logo.png" alt="Logo du site" id="logo" />

Si vous utilisez des id, lorsque vous définirez leurs propriétés dans le fichier CSS, il faudra faire précéder le nom de l'id par un dièse (#) :

#logo
{
    /* Indiquez les propriétés CSS ici */
}

Je ne vous propose pas de le tester, cela fonctionne exactement comme class.

Les balises universelles

Il arrivera parfois que vous ayez besoin d'appliquer une class (ou un id) à certains mots qui, à l'origine, ne sont pas entourés par des balises.

En effet, le problème de class, c'est qu'il s'agit d'un attribut. Vous ne pouvez donc en mettre que sur une balise. Si, par exemple, je veux modifier uniquement « bienvenue » dans le paragraphe suivant :

<p>Bonjour et bienvenue sur mon site !</p>

Cela serait facile à faire s'il y avait une balise autour de « bienvenue » mais, malheureusement il n'y en a pas. Par chance, on a inventé… la balise-qui-ne-sert-à-rien.

En fait, on a inventé deux balises dites universelles, qui n'ont aucune signification particulière (elles n'indiquent pas que le mot est important, par exemple). Il y a une différence minime (mais significative !) entre ces deux balises :

Pour le moment donc, nous allons utiliser plutôt la balise <span>. On la met autour de « bienvenue », on lui ajoute une classe (du nom qu'on veut), on crée le CSS et c'est gagné !

<p>Bonjour et <span class="salutations">bienvenue</span> sur mon site !</p>
.salutations
{
    color: blue;
}

Vous pouvez voir le résultat à la figure suivante.

Le mot « bienvenue » est écrit en bleu
Le mot « bienvenue » est écrit en bleu
Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

Appliquer un style : sélectionner une balise Appliquer un style : les sélecteurs avancés

Appliquer un style : les sélecteurs avancés

Appliquer un style : class et id Formatage du texte

En CSS, le plus difficile est de savoir cibler le texte dont on veut changer la forme. Pour cibler (on dit « sélectionner ») les éléments de la page à modifier, on utilise ce qu'on appelle des sélecteurs. Vous en avez déjà utilisé quelques-uns un peu plus tôt dans ce chapitre, résumons-les pour commencer.

Les sélecteurs que vous connaissez déjà

Ces sélecteurs, que nous avons vus précédemment, sont de loin les plus couramment utilisés. Il faut les connaître par cœur. Commençons par la base de la base :

p
{

}

… signifie « Je veux toucher tous les paragraphes ». Après, c'est à vous de dire ce que vous faites à ces paragraphes (vous les écrivez en bleu, par exemple).

Nous avons aussi vu :

h1, em
{

}

… qui signifie « Tous les titres et tous les textes importants ». Nous avons sélectionné deux balises d'un coup.

Et enfin, nous avons vu comment sélectionner des balises précises à qui nous avons donné un nom grâce aux attributs class et id :

.class
{

}

#id
{

}

Vous savez quoi ? Il existe des dizaines d'autres façons de cibler des balises en CSS ! Nous n'allons pas toutes les voir car il y en a beaucoup et certaines sont complexes, mais voici déjà de quoi vous permettre d'être plus efficaces en CSS !

Les sélecteurs avancés

* : sélecteur universel

*
{

}

Sélectionne toutes les balises sans exception. On l'appelle le sélecteur universel.

A B : une balise contenue dans une autre

h3 em
{

}

Sélectionne toutes les balises <em> situées à l'intérieur d'une balise <h3>. Notez qu'il n'y a pas de virgule entre les deux noms de balises.

Exemple de code HTML correspondant :

<h3>Titre avec <em>texte important</em></h3>

A + B : une balise qui en suit une autre

h3 + p
{

}

Sélectionne la première balise <p> située après un titre <h3>.

Exemple :

<h3>Titre</h3>

<p>Paragraphe</p>

A[attribut] : une balise qui possède un attribut

a[title]
{

}

Sélectionne tous les liens <a> qui possèdent un attribut title.

Exemple :

<a href="http://site.com" title="Infobulle">

A[attribut="Valeur"] : une balise, un attribut et une valeur exacte

a[title="Cliquez ici"]
{

}

Idem, mais l'attribut doit en plus avoir exactement pour valeur « Cliquez ici ».

Exemple :

<a href="http://site.com" title="Cliquez ici">

A[attribut*="Valeur"] : une balise, un attribut et une valeur

a[title*="ici"]
{

}

Idem, l'attribut doit cette fois contenir dans sa valeur le mot « ici » (peu importe sa position).

Exemple :

<a href="http://site.com" title="Quelque part par ici">

D'autres sélecteurs existent !

Je ne vous ai présenté ici qu'une partie des sélecteurs CSS mais sachez qu'il en existe beaucoup d'autres. Si vous voulez une liste complète, vous pouvez vous renseigner directement à la source : sur le site du W3C ! C'est très complet.

Sachez que nous découvrirons certains de ces autres sélecteurs dans la suite de ce cours !

En résumé

balise1
{
    propriete1: valeur1;
    propriete2: valeur2;
}
  • Il existe de nombreuses façons de sélectionner la portion de la page que l'on veut mettre en forme. Par exemple, on peut viser :

  • Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Appliquer un style : class et id Formatage du texte

    Formatage du texte

    Appliquer un style : les sélecteurs avancés La taille

    Nous arrivons maintenant à un chapitre qui devrait beaucoup vous intéresser.

    Non, le « formatage du texte » n'a rien à voir avec la destruction de toutes les données présentes sur votre disque dur ! Cela signifie simplement que l'on va modifier l'apparence du texte (on dit qu'on le « met en forme »).

    Pas de surprise particulière : nous sommes toujours dans le CSS et nous allons réutiliser ce que nous venons d'apprendre dans le chapitre précédent. Nous allons donc travailler directement au sein du fichier .css que nous avons créé.

    Ce chapitre va être l'occasion de découvrir de nombreuses propriétés CSS : nous allons voir comment modifier la taille du texte, changer la police, aligner le texte…

    La taille

    Formatage du texte La police

    Pour modifier la taille du texte, on utilise la propriété CSS font-size. Mais comment indiquer la taille du texte ? C'est là que les choses se corsent car plusieurs techniques vous sont proposées :

    Une taille absolue

    Pour indiquer une taille absolue, on utilise généralement les pixels. Pour avoir un texte de 16 pixels de hauteur, vous devez donc écrire :

    font-size: 16px;

    Les lettres auront une taille de 16 pixels, comme le montre la figure suivante.

    Une lettre de 16 pixels de hauteur
    Une lettre de 16 pixels de hauteur

    Voici un exemple d'utilisation (placez ce code dans votre fichier .css) :

    p
    {
        font-size: 14px; /* Paragraphes de 14 pixels */
    }
    h1
    {
        font-size: 40px; /* Titres de 40 pixels */
    }

    Et le résultat est visible à la figure suivante.

    Différentes tailles de texte
    Différentes tailles de texte

    Une valeur relative

    C'est la méthode recommandée car le texte s'adapte alors plus facilement aux préférences de tous les visiteurs.

    Il y a plusieurs moyens d'indiquer une valeur relative. Vous pouvez par exemple écrire la taille avec des mots en anglais comme ceux-ci :

    Vous pouvez tester l'utilisation de ces valeurs dans votre code CSS :

    p
    {
        font-size: small;
    }
    h1
    {
        font-size: large;
    }

    Bon, cette technique a un défaut : il n'y a que sept tailles disponibles (car il n'y a que sept noms). Heureusement, il existe d'autres moyens. Ma technique préférée consiste à indiquer la taille en « em ».

    Exemple :

    p
    {
        font-size: 0.8em;
    }
    h1
    {
        font-size: 1.3em;
    }

    D'autres unités sont disponibles. Vous pouvez essayer le « ex » (qui fonctionne sur le même principe que le em mais qui est plus petit de base) et le pourcentage (80%, 130%…).

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Formatage du texte La police

    La police

    La taille Italique, gras, souligné…

    Ah… La police… On touche un point sensible.

    En effet, il se pose un problème : pour qu'une police s'affiche correctement, il faut que tous les internautes l'aient. Si un internaute n'a pas la même police que vous, son navigateur prendra une police par défaut (une police standard) qui n'aura peut-être rien à voir avec ce à quoi vous vous attendiez.

    La bonne nouvelle, c'est que depuis CSS 3, il est possible de faire télécharger automatiquement une police au navigateur. Je vous expliquerai dans un second temps comment faire cela.

    Modifier la police utilisée

    La propriété CSS qui permet d'indiquer la police à utiliser est font-family. Vous devez écrire le nom de la police comme ceci :

    balise
    {
        font-family: police;
    }

    Seulement, pour éviter les problèmes si l'internaute n'a pas la même police que vous, on précise en général plusieurs noms de police, séparés par des virgules :

    balise
    {
        font-family: police1, police2, police3, police4;
    }

    Le navigateur essaiera d'abord d'utiliser la police1. S'il ne l'a pas, il essaiera la police2. S'il ne l'a pas, il passera à la police3, et ainsi de suite.

    En général, on indique en tout dernier serif, ce qui correspond à une police par défaut (qui ne s'applique que si aucune autre police n'a été trouvée).

    Oui, mais quelles sont les polices les plus courantes qu'on a le « droit » d'utiliser, me direz-vous ?

    Voici une liste de polices qui fonctionnent bien sur la plupart des navigateurs :

    La figure suivante vous montre à quoi ressemblent ces polices.

    Différentes polices
    Différentes polices

    Ainsi, si j'écris :

    p
    {
        font-family: Impact, "Arial Black", Arial, Verdana, sans-serif;
    }

    … cela signifie : « Mets la police Impact ou, si elle n'y est pas, Arial Black, ou sinon Arial, ou sinon Verdana, ou si rien n'a marché, mets une police standard (sans-serif) ».

    En général, il est bien d'indiquer un choix de trois ou quatre polices (+ serif ou sans-serif) afin de s'assurer qu'au moins l'une d'entre elles aura été trouvée sur l'ordinateur du visiteur.

    Utiliser une police personnalisée avec @font-face

    Je trouve le choix des polices trop limité.

    Comment puis-je utiliser ma police préférée sur mon site web ?

    Pendant longtemps, cela n'était pas possible. Aujourd'hui, avec CSS 3, il existe heureusement un moyen d'utiliser n'importe quelle police sur son site. Cela fonctionne bien avec la plupart des navigateurs.

    Mais attention, il y a des défauts (ce serait trop beau sinon) :

    Voici les différents formats de fichiers de polices qui existent et qu'il faut connaître :

    En CSS, pour définir une nouvelle police, vous devez la déclarer comme ceci :

    @font-face {
        font-family: 'MaSuperPolice';
        src: url('MaSuperPolice.eot');
    }

    Le fichier de police (ici MaSuperPolice.eot) doit ici être situé dans le même dossier que le fichier CSS (ou dans un sous-dossier, si vous utilisez un chemin relatif).

    Je croyais qu'il y avait plusieurs formats de police ?

    Oui, d'ailleurs les .eot ne fonctionnent que sur Internet Explorer. L'idéal est de proposer plusieurs formats pour la police : le navigateur téléchargera celui qu'il sait lire. Voici comment indiquer plusieurs formats :

    @font-face {
        font-family: 'MaSuperPolice';
        src: url('MaSuperPolice.eot') format('eot'),
             url('MaSuperPolice.woff') format('woff'),
             url('MaSuperPolice.ttf') format('truetype'),
             url('MaSuperPolice.svg') format('svg');
    }

    Pour tester le fonctionnement, je vous propose de télécharger une police sur Font Squirrel, par exemple Learning Curve Pro. Cliquez sur « @font-face Kit », cela vous permettra de télécharger un kit prêt à l'emploi avec tous les formats pour cette police.

    Votre fichier CSS ressemblera au final à ceci :

    @font-face { /* Définition d'une nouvelle police nommée LearningCurveProRegular */
        font-family: 'LearningCurveProRegular';
        src: url('LearningCurve_OT-webfont.eot');
        src: url('LearningCurve_OT-webfont.eot?#iefix') format('embedded-opentype'),
             url('LearningCurve_OT-webfont.woff') format('woff'),
             url('LearningCurve_OT-webfont.ttf') format('truetype'),
             url('LearningCurve_OT-webfont.svg#LearningCurveProRegular') format('svg');
    }
    
    h1 /* Utilisation de la police qu'on vient de définir sur les titres */
    {
        font-family: 'LearningCurveProRegular', Arial, serif;
    }

    La première (grosse) section @font-face permet de définir un nouveau nom de police qui pourra être utilisé dans le fichier CSS. Ensuite, nous utilisons ce nom de police avec la propriété font-family, que nous connaissons, pour modifier l'apparence des titres <h1>. Vous pouvez voir le résultat à la figure suivante.

    Affichage d'une police personnalisée
    Affichage d'une police personnalisée
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    La taille Italique, gras, souligné…

    Italique, gras, souligné…

    La police L'alignement

    Il existe en CSS une série de propriétés classiques de mise en forme du texte. Nous allons découvrir ici comment afficher le texte en gras, italique, souligné… et au passage nous verrons qu'il est même possible d'aller jusqu'à le faire clignoter !

    Mettre en italique

    Attends un peu là ! Je croyais que la balise <em> permettait de mettre un texte en italique ?!

    Je n'ai jamais dit cela.

    Retournez voir les chapitres précédents si vous avez des doutes, mais je n'ai jamais dit que la balise <em> était faite pour mettre le texte en italique (de même que je n'ai jamais dit que <strong> était faite pour mettre en gras).

    <em>, mettez-vous bien cela dans la tête, est faite pour insister sur des mots. Cela veut dire que les mots qu'elle entoure sont assez importants.

    Pour représenter cette importance, la plupart des navigateurs choisissent d'afficher le texte en italique, mais ce n'est pas une obligation.

    Le CSS lui, permet de dire réellement : « Je veux que ce texte soit en italique ». Rien ne vous empêche, par exemple, de décider que tous vos titres seront en italique.

    Concrètement, en CSS, pour mettre en italique, on utilise font-style qui peut prendre trois valeurs :

    em
    {
        font-style: normal;
    }

    Ainsi, dans l'exemple suivant, je me sers de font-style pour mettre en italique tous mes titres <h2> :

    h2
    {
        font-style: italic;
    }

    Mettre en gras

    Et si nous passions à la mise en gras ?

    Alors, là encore, n'oubliez pas que ce n'est pas <strong> qui permet de mettre en gras (son rôle est d'indiquer que le texte est important, donc le navigateur l'affiche généralement en gras). La mise en gras en CSS peut par exemple s'appliquer aux titres, à certains paragraphes entiers, etc. C'est à vous de voir.

    La propriété CSS pour mettre en gras est font-weight et prend les valeurs suivantes :

    Voici par exemple comment écrire les titres en gras :

    h1
    {
        font-weight: bold;
    }

    Soulignement et autres décorations

    La propriété CSS associée porte bien son nom : text-decoration. Elle permet, entre autres, de souligner le texte, mais pas seulement. Voici les différentes valeurs qu'elle peut prendre :

    Ce CSS va vous permettre de tester les effets de text-decoration :

    h1
    {
        text-decoration: blink;
    }
    .souligne
    {
        text-decoration: underline;
    }
    .barre
    {
        text-decoration: line-through;
    }
    .ligne_dessus
    {
        text-decoration: overline;
    }

    Et le résultat est visible à la figure suivante.

    Différentes mises en forme du texte
    Différentes mises en forme du texte
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    La police L'alignement

    L'alignement

    Italique, gras, souligné… Les flottants

    Le langage CSS nous permet de faire tous les alignements connus : à gauche, centré, à droite et justifié.

    C'est tout simple. On utilise la propriété text-align et on indique l'alignement désiré :

    Regardez les différents alignements sur cet exemple :

    h1
    {
        text-align: center;
    }
    
    p
    {
        text-align: justify;
    }
    
    .signature
    {
        text-align: right;
    }

    Le résultat est visible à la figure suivante.

    Alignements du texte
    Alignements du texte
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Italique, gras, souligné… Les flottants

    Les flottants

    L'alignement La couleur et le fond

    Le CSS nous permet de faire flotter un élément autour du texte. On dit aussi qu'on fait un « habillage ».

    Pour que vous voyiez bien de quoi on parle, la figure suivante vous montre ce que nous allons apprendre à faire.

    Une image flottante entourée par du texte
    Une image flottante entourée par du texte

    J'imagine que, maintenant, la question qui vous brûle les lèvres est : « Mais quelle est donc la propriété magique qui fait flotter ? ».

    La réponse est… float (« flottant » en anglais). Cette propriété peut prendre deux valeurs très simples :

    L'utilisation des flottants est très simple :

    1. Vous appliquez un float à une balise.

    2. Puis vous continuez à écrire du texte à la suite normalement.

    Faire flotter une image

    Nous allons apprendre ici à faire flotter une image. Voici le code HTML que nous devons taper dans un premier temps :

    <p><img src="flash.gif" class="imageflottante" alt="Image flottante" /> Ceci est un texte normal de paragraphe, écrit à la suite de l'image et qui l'habillera car l'image est flottante.</p>

    Voici le seul bout de code CSS qu'on ait besoin de taper, qui permet de faire flotter l'image à gauche :

    .imageflottante
    {
        float: left;
    }

    Amusez-vous aussi à faire flotter l'image à droite, c'est tout bête : il suffit d'indiquer la valeur right et le tour est joué !

    Stopper un flottant

    Quand vous mettez en place un flottant, le texte autour l'habille. Mais comment faire si vous voulez qu'au bout d'un moment le texte continue en dessous du flottant ? On pourrait enchaîner plusieurs <br /> à la suite mais cela ne serait ni élégant ni très propre…

    En gros, on aimerait pouvoir obtenir le même résultat qu'à la figure suivante.

    Le texte sous l'image ignore la propriété float
    Le texte sous l'image ignore la propriété float

    Il existe en fait une propriété CSS qui permet de dire : « Stop, ce texte doit être en-dessous du flottant et non plus à côté ». C'est la propriété clear, qui peut prendre ces trois valeurs :

    Pour simplifier, on va utiliser tout le temps le clear: both, qui marche après un flottant à gauche et après un flottant à droite (cela fonctionne donc à tous les coups). Pour illustrer son fonctionnement, on va prendre ce code HTML :

    <p><img src="flash.gif" class="imageflottante" alt="Image flottante" /></p>
    <p>Ce texte est écrit à côté de l'image flottante.</p>
    <p class="dessous">Ce texte est écrit sous l'image flottante.</p>

    Et ce code CSS :

    .imageflottante
    {
        float: left;
    }
    .dessous
    {
        clear: both;
    }

    Et voilà le travail.

    On applique un clear: both; au paragraphe que l'on veut voir continuer sous l'image flottante et le tour est joué !

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    L'alignement La couleur et le fond

    La couleur et le fond

    Les flottants Couleur du texte

    Continuons notre tour d'horizon des propriétés CSS existantes. Nous allons nous intéresser ici aux propriétés liées de près ou de loin à la couleur. Nous verrons entre autres :

    Le CSS n'a pas fini de nous étonner !

    Couleur du texte

    La couleur et le fond Couleur de fond

    Passons maintenant au vaste sujet de la couleur.

    Comment cela, « vaste » ?

    Vous connaissez déjà la propriété qui permet de modifier la couleur du texte : il s'agit de color. Nous allons nous intéresser aux différentes façons d'indiquer la couleur, car il y en a plusieurs.

    Indiquer le nom de la couleur

    La méthode la plus simple et la plus pratique pour choisir une couleur consiste à taper son nom (in english, of course).

    Le seul défaut de cette méthode est qu'il n'existe que seize couleurs dites « standard ». D'autres couleurs officieuses existent mais, comme elles ne fonctionneront pas forcément de la même manière sur tous les navigateurs, je vais éviter de vous les montrer.

    La figure suivante vous montre les seize couleurs que vous pouvez utiliser en tapant simplement leur nom.

    Les seize noms de couleurs utilisables en CSS
    Les seize noms de couleurs utilisables en CSS

    Vous pouvez les apprendre par cœur si cela vous chante, en plus cela vous fera réviser votre anglais.

    Pour passer tous les titres en marron, on peut donc écrire :

    h1
    {
        color: maroon;
    }

    Vous trouverez le résultat à la figure suivante.

    Le titre est écrit en marron
    Le titre est écrit en marron

    La notation hexadécimale

    Seize couleurs, c'est quand même un peu limite quand on sait que la plupart des écrans peuvent en afficher seize millions.

    D'un autre côté, remarquez, s'il avait fallu donner un nom à chacune des seize millions de couleurs…

    Heureusement, il existe en CSS plusieurs façons de choisir une couleur parmi toutes celles qui existent. La première que je vais vous montrer est la notation hexadécimale. Elle est couramment utilisée sur le Web mais il existe aussi une autre méthode que nous verrons plus loin.

    Un nom de couleur en hexadécimal, cela ressemble à : #FF5A28. Pour faire simple, c'est une combinaison de lettres et de chiffres qui indiquent une couleur.

    On doit toujours commencer par écrire un dièse (#), suivi de six lettres ou chiffres allant de 0 à 9 et de A à F.

    Ces lettres ou chiffres fonctionnent deux par deux. Les deux premiers indiquent une quantité de rouge, les deux suivants une quantité de vert et les deux derniers une quantité de bleu. En mélangeant ces quantités (qui sont les composantes Rouge-Vert-Bleu de la couleur) on peut obtenir la couleur qu'on veut.

    Ainsi, #000000 correspond à la couleur noire et #FFFFFF à la couleur blanche. Mais maintenant, ne me demandez pas quelle est la combinaison qui produit de l'orange couleur « coucher de soleil », je n'en sais strictement rien.

    Voici par exemple comment on fait pour appliquer aux paragraphes la couleur blanche en hexadécimal :

    p
    {
        color: #FFFFFF;
    }

    La méthode RGB

    Que signifie RGB ? En anglais, Rouge-Vert-Bleu s'écrit Red-Green-Blue, ce qui s'abrège en « RGB ». Comme avec la notation hexadécimale, pour choisir une couleur, on doit définir une quantité de rouge, de vert et de bleu.

    Encore cette histoire tordue de quantités de rouge-vert-bleu ?

    Oui mais là, vous allez voir que c'est beaucoup plus pratique et qu'avec un logiciel de dessin tout simple comme Paint, vous pouvez trouver la couleur que vous désirez. Voici la marche à suivre :

    1. Lancez le logiciel Paint depuis le menu Démarrer.

    2. Rendez-vous dans la section Modifier les couleurs, comme indiqué à la figure suivante.

    3. Une fenêtre s'ouvre. Dans la zone qui apparaît à droite, faites bouger les curseurs pour sélectionner la couleur qui vous intéresse. Supposons que vous soyez pris d'une envie folle d'écrire vos titres <h1> en rose bonbon (supposons seulement). Sélectionnez la couleur dans la fenêtre, comme à la figure suivante.

    4. Relevez les quantités de Rouge-Vert-Bleu correspondantes, indiquées en bas à droite de la fenêtre (ici 240-96-204). Recopiez ces valeurs dans cet ordre dans le fichier CSS, comme dans le code ci-dessous.

    p
    {
        color: rgb(240,96,204);
    }
    Modification des couleurs sous Paint
    Modification des couleurs sous Paint
    Sélection d'une couleur dans Paint
    Sélection d'une couleur dans Paint

    Comme vous avez pu le constater dans l'exemple, pour utiliser la méthode RGB, il faut taper rgb(Rouge, Vert, Bleu) en remplaçant « Rouge, Vert, Bleu » par les nombres correspondants. Pour information, ces quantités sont toujours comprises entre 0 et 255.

    Et en Bonus Track…

    Je vous conseille un petit logiciel tout simple, gratuit et en français, réalisé par Benjamin Chartier, précisément conçu pour choisir vos couleurs. Nul doute qu'il vous sera très utile pour vous aider à choisir vos couleurs. Ce logiciel s'appelle « La boîte à couleurs » (figure suivante).

    La boîte à couleursLa boîte à couleurs

    Comme vous pouvez le voir, il comporte plusieurs onglets. Je vous recommande de rester sur le premier (RVB) ou d'aller dans l'onglet Visuel. Les autres ne nous concernent pas. Évitez en particulier l'onglet Nom, qui propose des noms de couleurs parfois invalides (je vous rappelle qu'il existe seulement seize noms de couleurs « standard »).

    Vous pouvez récupérer en bas à droite le numéro de la couleur en hexadécimal (le numéro commence toujours par un #) ou encore recopier les valeurs de Rouge-Vert-Bleu (RVB) dans le CSS.

    Enfin, et c'est certainement la fonctionnalité la plus intéressante du logiciel, vous pouvez utiliser la pipette en haut à droite pour récupérer n'importe quelle couleur s'affichant sur votre écran !

    Amusez-vous bien !

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    La couleur et le fond Couleur de fond

    Couleur de fond

    Couleur du texte Images de fond

    Pour indiquer une couleur de fond, on utilise la propriété CSS background-color. Elle s'utilise de la même manière que la propriété color, c'est-à-dire que vous pouvez taper le nom d'une couleur, l'écrire en notation hexadécimale ou encore utiliser la méthode RGB.

    Pour indiquer la couleur de fond de la page web, il faut travailler sur la balise <body>. Eh oui, <body> correspond à l'ensemble de la page web, c'est donc en modifiant sa couleur de fond que l'on changera la couleur d'arrière-plan de la page.

    Regardez très attentivement ce fichier CSS :

    /* On travaille sur la balise body, donc sur TOUTE la page */
    body
    {
        background-color: black; /* Le fond de la page sera noir */
        color: white; /* Le texte de la page sera blanc */
    }

    Voici le rendu de ce code en figure suivante.

    Texte en blanc sur fond noir
    Texte en blanc sur fond noir

    Eh mais tu as demandé à ce que le texte de la balise <body> soit écrit en blanc, et tous les paragraphes <p> et titres <h1> ont pris cette couleur. Comment cela se fait-il ?

    Je voulais justement profiter de l'occasion pour vous en parler. Ce phénomène s'appelle l'héritage. Je vous rassure tout de suite, personne n'est mort.

    Le CSS et l'héritage

    En CSS, si vous appliquez un style à une balise, toutes les balises qui se trouvent à l'intérieur prendront le même style.

    C'est en fait simple à comprendre et intuitif. La balise <body>, vous le savez, contient entre autres les balises de paragraphe <p> et de titre <h1>.

    Si j'applique une couleur de fond noire et une couleur de texte blanche à la balise <body>, tous mes titres et paragraphes auront eux aussi un arrière-plan de couleur noire et un texte de couleur blanche… C'est ce phénomène qu'on appelle l'héritage : on dit que les balises qui se trouvent à l'intérieur d'une autre balise « héritent » de ses propriétés.

    Cela veut dire que TOUT le texte de ma page web sera forcément écrit en blanc ?

    Non, pas obligatoirement. Si vous dites par la suite que vous voulez vos titres en rouge, ce style aura la priorité et vos titres seront donc en rouge. En revanche, si vous n'indiquez rien de particulier (comme on l'a fait tout à l'heure), alors vos titres hériteront de la couleur blanche.

    Cela ne fonctionne pas uniquement pour la couleur, entendons-nous bien. Toutes les propriétés CSS seront héritées : vous pouvez par exemple demander une mise en gras dans la balise <body> et tous vos titres et paragraphes seront en gras.

    Exemple d'héritage avec la balise <mark>

    On a tendance à croire qu'on ne peut modifier que la couleur de fond de la page. C'est faux : vous pouvez changer le fond de n'importe quel élément : vos titres, vos paragraphes, certains mots… Dans ce cas, ils apparaîtront surlignés (comme si on avait mis un coup de marqueur dessus).

    Vous vous souvenez par exemple de la balise <mark> qui permet de mettre en valeur certains mots ? Utilisons-la à nouveau ici :

    <h1>Qui a éteint la lumière ?</h1>
    
    <p>Brr, il fait tout noir sur ce site, c'est un peu <mark>inquiétant</mark> comme ambiance non vous trouvez pas ?</p>

    Par défaut, le texte s'affiche sur un fond jaune. Vous pouvez changer ce comportement en CSS :

    body
    {
        background-color: black;
        color: white;
    }
    
    mark
    {
        /* La couleur de fond prend le pas sur celle de toute la page */
        background-color: red;
        color: black;
    }

    Sur le texte de la balise <mark>, c'est la couleur de fond rouge qui s'applique. En effet, même si le fond de la page est noir, c'est la propriété CSS de l'élément le plus précis qui a la priorité (figure suivante).

    Un texte surligné en rouge sur un fond noir
    Un texte surligné en rouge sur un fond noir

    Le même principe vaut pour toutes les balises HTML et toutes les propriétés CSS ! Si vous dites :

    … on pourrait penser qu'il y a un conflit. Le texte important fait partie d'un paragraphe, quelle taille lui donner ? 1.2 em ou 1.4 em ? Le CSS décide que c'est la déclaration la plus précise qui l'emporte : comme <strong> correspond à un élément plus précis que les paragraphes, le texte sera écrit en 1.4 em.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Couleur du texte Images de fond

    Images de fond

    Couleur de fond La transparence

    Dans les exemples qui suivent, je vais modifier l'image de fond de la page. Cependant, tout comme pour la couleur de fond, n'oubliez pas que l'image de fond ne s'applique pas forcément à la page entière. On peut aussi mettre une image de fond derrière les titres, paragraphes, etc.

    Appliquer une image de fond

    La propriété permettant d'indiquer une image de fond est background-image. Comme valeur, on doit renseigner url("nom_de_l_image.png"). Par exemple :

    body
    {
        background-image: url("neige.png");
    }

    Ce qui nous donne la figure suivante.

    Une image de fond sur la page
    Une image de fond sur la page

    Bien entendu, votre fond n'est pas forcément en PNG, il peut aussi être en JPEG ou en GIF.

    L'adresse indiquant où se trouve l'image de fond peut être écrite en absolu (http://…) ou en relatif (fond.png).

    Options disponibles pour l'image de fond

    On peut compléter la propriété background-image que nous venons de voir par plusieurs autres propriétés qui permettent de changer le comportement de l'image de fond.

    background-attachment : fixer le fond

    La propriété CSS background-attachment permet de « fixer » le fond. L'effet obtenu est intéressant car on voit alors le texte « glisser » par-dessus le fond. Deux valeurs sont disponibles :

    body
    {
        background-image: url("neige.png");
        background-attachment: fixed; /* Le fond restera fixe */
    }

    background-repeat : répétition du fond

    Par défaut, l'image de fond est répétée en mosaïque. Vous pouvez changer cela avec la propriété background-repeat :

    Exemple d'utilisation :

    body
    {
        background-image: url("soleil.png");
        background-repeat: no-repeat;
    }

    background-position : position du fond

    On peut indiquer où doit se trouver l'image de fond avec background-position. Cette propriété n'est intéressante que si elle est combinée avec background-repeat: no-repeat; (un fond qui ne se répète pas).

    Vous devez donner à background-position deux valeurs en pixels pour indiquer la position du fond par rapport au coin supérieur gauche de la page (ou du paragraphe, si vous appliquez le fond à un paragraphe). Ainsi, si vous tapez :

    background-position: 30px 50px;

    … votre fond sera placé à 30 pixels de la gauche et à 50 pixels du haut. Il est aussi possible d'utiliser ces valeurs en anglais :

    Il est possible de combiner ces mots. Par exemple, pour aligner une image en haut à droite, vous taperez :

    background-position: top right;

    Ainsi, si je veux afficher un soleil en image de fond (figure suivante), en un unique exemplaire (no-repeat), toujours visible (fixed) et positionné en haut à droite (top right), je vais écrire ceci :

    body
    {
        background-image: url("soleil.png");
        background-attachment: fixed; /* Le fond restera fixe */
        background-repeat: no-repeat; /* Le fond ne sera pas répété */
        background-position: top right; /* Le fond sera placé en haut à droite */
    }
    Un soleil placé en image de fond en haut à droite
    Un soleil placé en image de fond en haut à droite

    Combiner les propriétés

    Si vous utilisez beaucoup de propriétés en rapport avec le fond (comme c'est le cas sur ce dernier exemple), vous pouvez utiliser une sorte de « super-propriété » appelée background dont la valeur peut combiner plusieurs des propriétés vues précédemment : background-image, background-repeat, background-attachment et background-position.

    On peut donc tout simplement écrire :

    body
    {
        background: url("soleil.png") fixed no-repeat top right;
    }

    C'est la première « super-propriété » que je vous montre, il y en aura d'autres. Il faut savoir que :

    Plusieurs images de fond

    Depuis CSS3, il est possible de donner plusieurs images de fond à un élément. Pour cela, il suffit de séparer les déclarations par une virgule, comme ceci :

    body
    {
        background: url("soleil.png") fixed no-repeat top right, url("neige.png") fixed;
    }

    La première image de cette liste sera placée par-dessus les autres (figure suivante). Attention donc, l'ordre de déclaration des images a son importance : si vous inversez le soleil et la neige dans le code CSS précédent, vous ne verrez plus le soleil !

    Images de fond multiples
    Images de fond multiples

    À noter que les images de fond multiples fonctionnent sur tous les navigateurs sauf sur les anciennes versions d'Internet Explorer, qui ne reconnaît cette fonctionnalité qu'à partir de la version 9 (IE9).

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Couleur de fond La transparence

    La transparence

    Images de fond Les bordures et les ombres

    Le CSS nous permet de jouer très facilement avec les niveaux de transparence des éléments ! Pour cela, nous allons utiliser des fonctionnalités de CSS3 : la propriété opacity et la notation RGBa.

    La propriété opacity

    La propriété opacity, très simple, permet d'indiquer le niveau d'opacité (c'est l'inverse de la transparence).

    Il faut donc choisir une valeur comprise entre 0 et 1. Ainsi, avec une valeur de 0.6, votre élément sera opaque à 60%… et on verra donc à travers !

    Voici comment on peut l'utiliser :

    p
    {
        opacity: 0.6;
    }

    Voici un exemple qui va nous permettre d'apprécier la transparence. Vous en trouverez le rendu à la figure suivante.

    body
    {
        background: url('neige.png');
    }
    
    p
    {
        background-color: black;
        color: white;
        opacity: 0.3;
    }
    Un paragraphe transparent
    Un paragraphe transparent

    Notez que la transparence fonctionne sur tous les navigateurs récents, y compris Internet Explorer à partir de IE9.

    La notation RGBa

    CSS3 nous propose une autre façon de jouer avec la transparence : la notation RGBa. Il s'agit en fait de la notation RGB que nous avons vue précédemment, mais avec un quatrième paramètre : le niveau de transparence (appelé « canal alpha »). De la même façon que précédemment, avec une valeur de 1, le fond est complètement opaque. Avec une valeur inférieure à 1, il est transparent.

    p
    {
        background-color: rgba(255, 0, 0, 0.5); /* Fond rouge à moitié transparent */
    }

    C'est aussi simple que cela. Vous pouvez obtenir exactement le même effet qu'avec opacity juste en jouant avec la notation RGBa, essayez !

    Cette notation est connue de tous les navigateurs récents, y compris Internet Explorer (à partir de IE9). Pour les navigateurs plus anciens, il est recommandé d'indiquer la notation RGB classique en plus de RGBa.

    Pour ces navigateurs, le fond ne sera alors pas transparent mais, au moins, il y aura bien une couleur d'arrière-plan.

    p
    {
        background-color: rgb(255,0,0); /* Pour les navigateurs anciens */
        background-color: rgba(255,0,0,0.5); /* Pour les navigateurs plus récents */
    }

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Images de fond Les bordures et les ombres

    Les bordures et les ombres

    La transparence Bordures standard

    Nouveau chapitre, nouveau lot de propriétés CSS. Ici, nous allons nous intéresser aux bordures et aux effets d'ombrage que l'on peut appliquer, aussi bien sur le texte que sur les blocs qui constituent notre page.

    Nous réutiliserons en particulier nos connaissances sur les couleurs pour choisir la couleur de nos bordures et de nos ombres.

    Prêts à vous en mettre une nouvelle fois plein la vue ?

    Bordures standard

    Les bordures et les ombres Bordures arrondies

    Le CSS vous offre un large choix de bordures pour décorer votre page. De nombreuses propriétés CSS vous permettent de modifier l'apparence de vos bordures : border-width, border-color, border-style

    Pour aller à l'essentiel, je vous propose ici d'utiliser directement la super-propriété border qui regroupe l'ensemble de ces propriétés. Vous vous souvenez de la super-propriété background ? Cela fonctionne sur le même principe : on va pouvoir combiner plusieurs valeurs.

    Pour border on peut utiliser jusqu'à trois valeurs pour modifier l'apparence de la bordure :

    Ainsi, pour avoir une bordure bleue, en tirets, épaisse de 3 pixels autour de mes titres, je vais écrire :

    h1
    {
        border: 3px blue dashed;
    }

    La figure suivante vous présente les différents styles de bordures que vous pouvez utiliser.

    Les différents types de bordures
    Les différents types de bordures

    En haut, à droite, à gauche, en bas…

    Qui a dit que vous étiez obligés d'appliquer la même bordure aux quatre côtés de votre élément ?

    Taratata, si vous voulez mettre des bordures différentes en fonction du côté (haut, bas, gauche ou droite), vous pouvez le faire sans problème. Dans ce cas, vous devrez utiliser ces quatre propriétés :

    Ce sont aussi des super-propriétés, elles fonctionnent comme border mais ne s'appliquent donc qu'à un seul côté.

    Pour ajouter une bordure uniquement à gauche et à droite des paragraphes, on écrira donc :

    p
    {
        border-left: 2px solid black;
        border-right: 2px solid black;
    }
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les bordures et les ombres Bordures arrondies

    Bordures arrondies

    Bordures standard Les ombres

    Les bordures arrondies, c'est un peu le Saint Graal attendu par les webmasters depuis des millénaires (ou presque). Depuis que CSS3 est arrivé, il est enfin possible d'en créer facilement !

    La propriété border-radius va nous permettre d'arrondir facilement les angles de n'importe quel élément. Il suffit d'indiquer la taille (« l'importance ») de l'arrondi en pixels :

    p
    {
        border-radius: 10px;
    }

    L'arrondi se voit notamment si l'élément a des bordures, comme sur la figure suivante.

    Des bordures arrondies
    Des bordures arrondies

    … ou s'il a une couleur de fond, comme sur la figure suivante.

    Un fond aux coins arrondis
    Un fond aux coins arrondis

    On peut aussi préciser la forme de l'arrondi pour chaque coin. Dans ce cas, indiquez quatre valeurs :

    p
    {
        border-radius: 10px 5px 10px 5px;
    }

    Les valeurs correspondent aux angles suivants dans cet ordre :

    1. en haut à gauche ;

    2. en haut à droite ;

    3. en bas à droite ;

    4. en bas à gauche.

    Enfin, il est possible d'affiner l'arrondi de nos angles en créant des courbes elliptiques figure suivante). Dans ce cas, il faut indiquer deux valeurs séparées par une barre oblique (slash, caractère /). Le mieux est certainement de tester pour voir l'effet :

    p
    {
        border-radius: 20px / 10px;
    }
    Bordures arrondies elliptiques
    Bordures arrondies elliptiques
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Bordures standard Les ombres

    Les ombres

    Bordures arrondies Création d'apparences dynamiques

    Les ombres font partie des nouveautés récentes proposées par CSS3. Aujourd'hui, il suffit d'une seule ligne de CSS pour ajouter des ombres dans une page !

    Nous allons ici découvrir deux types d'ombres :

    box-shadow : les ombres des boîtes

    La propriété box-shadow s'applique à tout le bloc et prend quatre valeurs dans l'ordre suivant :

    1. le décalage horizontal de l'ombre ;

    2. le décalage vertical de l'ombre ;

    3. l'adoucissement du dégradé ;

    4. la couleur de l'ombre.

    Par exemple, pour une ombre noire de 6 pixels, sans adoucissement, on écrira :

    p
    {
        box-shadow: 6px 6px 0px black;
    }

    Cela donne le résultat illustré à la figure suivante (j'ai ajouté une bordure au paragraphe pour qu'on voie mieux l'effet).

    Une ombre sous le paragraphe
    Une ombre sous le paragraphe

    Ajoutons un adoucissement grâce au troisième paramètre (figure suivante). L'adoucissement peut être faible (inférieur au décalage), normal (égal au décalage) ou élevé (supérieur au décalage). Essayons un décalage normal :

    p
    {
        box-shadow: 6px 6px 6px black;
    }
    Une ombre adoucie sous le paragraphe
    Une ombre adoucie sous le paragraphe

    On peut aussi rajouter une cinquième valeur facultative : inset. Dans ce cas, l'ombre sera placée à l'intérieur du bloc, pour donner un effet enfoncé :

    p
    {
        box-shadow: 6px 6px 6px black inset;
    }

    Je vous laisse essayer de voir le résultat.

    text-shadow : l'ombre du texte

    Avec text-shadow, vous pouvez ajouter une ombre directement sur les lettres de votre texte ! Les valeurs fonctionnent exactement de la même façon que box-shadow : décalage, adoucissement et couleur.

    p
    {
        text-shadow: 2px 2px 4px black;
    }

    Le résultat est illustré à la figure suivante.

    Texte ombré
    Texte ombré

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Bordures arrondies Création d'apparences dynamiques

    Création d'apparences dynamiques

    Les ombres Au survol

    C'est une de ses forces : le CSS nous permet aussi de modifier l'apparence des éléments de façon dynamique, c'est-à-dire que des éléments peuvent changer de forme une fois que la page a été chargée. Nous allons faire appel à une fonctionnalité puissante du CSS : les pseudo-formats.

    Nous verrons dans ce chapitre comment changer l'apparence :

    Vous allez voir que le langage CSS n'a pas fini de nous étonner !

    Au survol

    Création d'apparences dynamiques Au clic et lors de la sélection

    Nous allons découvrir dans ce chapitre plusieurs pseudo-formats CSS. Le premier que je vais vous montrer s'appelle :hover. Comme tous les autres pseudo-formats que nous allons voir, c'est une information que l'on rajoute après le nom de la balise (ou de la classe) dans le CSS, comme ceci :

    a:hover
    {
       
    }

    :hover signifie « survoler ». a:hover peut donc se traduire par : « Quand la souris est sur le lien » (quand on pointe dessus).

    À partir de là, c'est à vous de définir l'apparence que doivent avoir les liens lorsqu'on pointe dessus. Laissez libre cours à votre imagination, il n'y a pas de limite.

    Voici un exemple de présentation des liens, mais n'hésitez pas à inventer le vôtre :

    a /* Liens par défaut (non survolés) */
    {
       text-decoration: none;
       color: red;
       font-style: italic;
    }
    
    a:hover /* Apparence au survol des liens */
    {
       text-decoration: underline;
       color: green;
    }

    On a défini ici deux versions des styles pour les liens :

    Le résultat se trouve à la figure suivante.

    Changement d'apparence au survol de la souris
    Changement d'apparence au survol de la souris

    Sympa, n'est-ce pas ?

    Même si on l'utilise souvent sur les liens, vous pouvez modifier l'apparence de n'importe quel élément. Par exemple, vous pouvez modifier l'apparence des paragraphes lorsqu'on pointe dessus :

    p:hover /* Quand on pointe sur un paragraphe */
    {
    
    }
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Création d'apparences dynamiques Au clic et lors de la sélection

    Au clic et lors de la sélection

    Au survol Lorsque le lien a déjà été consulté

    Vous pouvez interagir encore plus finement en CSS. Nous allons voir ici que nous pouvons changer l'apparence des éléments lorsque l'on clique dessus et lorsqu'ils sont sélectionnés !

    :active : au moment du clic

    Le pseudo-format :active permet d'appliquer un style particulier au moment du clic. En pratique, il n'est utilisé que sur les liens.

    Le lien gardera cette apparence très peu de temps : en fait, le changement intervient lorsque le bouton de la souris est enfoncé. En clair, ce n'est pas forcément toujours bien visible.

    On peut par exemple changer la couleur de fond du lien lorsque l'on clique dessus :

    a:active /* Quand le visiteur clique sur le lien */
    {
        background-color: #FFCC66;
    }

    :focus : lorsque l'élément est sélectionné

    Là, c'est un peu différent. Le pseudo-format :focus applique un style lorsque l'élément est sélectionné.

    C'est-à-dire ?

    Une fois que vous avez cliqué, le lien reste « sélectionné » (il y a une petite bordure en pointillés autour). C'est cela, la sélection.

    Essayons pour l'instant sur les liens :

    a:focus /* Quand le visiteur sélectionne le lien */
    {
        background-color: #FFCC66;
    }
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Au survol Lorsque le lien a déjà été consulté

    Lorsque le lien a déjà été consulté

    Au clic et lors de la sélection Structurer sa page

    Il est possible d'appliquer un style à un lien vers une page qui a déjà été vue. Par défaut, le navigateur colore le lien en un violet assez laid (de mon point de vue du moins !).

    Vous pouvez changer cette apparence avec :visited (qui signifie « visité »). En pratique, sur les liens consultés, on ne peut pas changer beaucoup de choses à part la couleur (figure suivante).

    a:visited /* Quand le visiteur a déjà vu la page concernée */
    {
        color: #AAA; /* Appliquer une couleur grise */
    }
    Liens visités en gris
    Liens visités en gris

    Si vous ne souhaitez pas que les liens déjà visités soient colorés d'une façon différente, il vous faudra leur appliquer la même couleur qu'aux liens normaux. De nombreux sites web font cela (le Site du Zéro y compris !). Une exception notable : Google… ce qui est plutôt pratique, puisque l'on peut voir dans les résultats d'une recherche si on a déjà consulté ou non les sites que Google nous présente.

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Au clic et lors de la sélection Structurer sa page

    Structurer sa page

    Lorsque le lien a déjà été consulté Les balises structurantes de HTML5

    Nous approchons de plus en plus du but. Si nos pages web ne ressemblent pas encore tout à fait aux sites web que nous connaissons, c'est qu'il nous manque les connaissances nécessaires pour faire la mise en page.

    En général, une page web est constituée d'un en-tête (tout en haut), de menus de navigation (en haut ou sur les côtés), de différentes sections au centre… et d'un pied de page (tout en bas).

    Dans ce chapitre, nous allons nous intéresser aux nouvelles balises HTML dédiées à la structuration du site. Ces balises ont été introduites par HTML5 (elles n'existaient pas avant) et vont nous permettre de dire : « Ceci est mon en-tête », « Ceci est mon menu de navigation », etc.

    Pour le moment, nous n'allons pas encore faire de mise en page. Nous allons en fait préparer notre document HTML pour pouvoir découvrir la mise en page dans les prochains chapitres.

    Les balises structurantes de HTML5

    Structurer sa page Exemple concret d'utilisation des balises

    Je vais vous présenter ici les nouvelles balises introduites par HTML5 pour structurer nos pages. Vous allez voir, cela ne va pas beaucoup changer l'apparence de notre site pour le moment, mais il sera bien construit et prêt à être mis en forme ensuite !

    <header> : l'en-tête

    La plupart des sites web possèdent en général un en-tête, appelé header en anglais. On y trouve le plus souvent un logo, une bannière, le slogan de votre site…

    Vous devrez placer ces informations à l'intérieur de la balise <header> :

    <header>
        <!-- Placez ici le contenu de l'en-tête de votre page -->
    </header>

    La figure suivante, par exemple, représente une partie du Site du Zéro et vous pouvez voir son en-tête.

    L'en-tête du Site du Zéro
    L'en-tête du Site du Zéro

    L'en-tête peut contenir tout ce que vous voulez : images, liens, textes…

    À l'inverse de l'en-tête, le pied de page se trouve en général tout en bas du document. On y trouve des informations comme des liens de contact, le nom de l'auteur, les mentions légales, etc.

    <footer>
        <!-- Placez ici le contenu du pied de page -->
    </footer>

    La figure suivante vous montre à quoi ressemble le pied de page du Site du Zéro.

    Pied de page du Site du Zéro
    Pied de page du Site du Zéro

    <nav> : principaux liens de navigation

    La balise <nav> doit regrouper tous les principaux liens de navigation du site. Vous y placerez par exemple le menu principal de votre site.

    Généralement, le menu est réalisé sous forme de liste à puces à l'intérieur de la balise <nav> :

    <nav>
        <ul>
            <li><a href="index.html">Accueil</a></li>
            <li><a href="forum.html">Forum</a></li>
            <li><a href="contact.html">Contact</a></li>
        </ul>
    </nav>

    En figure suivante, vous pouvez observer le menu principal de navigation du Site du Zéro, qui pourrait utiliser la balise <nav>.

    Le menu de navigation du Site du Zéro
    Le menu de navigation du Site du Zéro

    <section> : une section de page

    La balise <section> sert à regrouper des contenus en fonction de leur thématique. Elle englobe généralement une portion du contenu au centre de la page.

    <section>
        <h1>Ma section de page</h1>
        <p>Bla bla bla bla</p>
    </section>

    Sur la page d'accueil du portail Free.fr, on trouve plusieurs blocs qui pourraient être considérés comme des sections de page (figure suivante).

    Des sections de page sur le portail de Free
    Des sections de page sur le portail de Free

    <aside> : informations complémentaires

    La balise <aside> est conçue pour contenir des informations complémentaires au document que l'on visualise. Ces informations sont généralement placées sur le côté (bien que ce ne soit pas une obligation).

    <aside>
        <!-- Placez ici des informations complémentaires -->
    </aside>

    Il peut y avoir plusieurs blocs <aside> dans la page.

    Sur Wikipédia, par exemple, il est courant de voir à droite un bloc d'informations complémentaires à l'article que l'on visualise. Ainsi, sur la page présentant la planète Saturne (figure suivante), on trouve dans ce bloc les caractéristiques de la planète (dimensions, masse, etc.).

    Bloc d'informations complémentaires sur Wikipédia
    Bloc d'informations complémentaires sur Wikipédia

    <article> : un article indépendant

    La balise <article> sert à englober une portion généralement autonome de la page. C'est une partie de la page qui pourrait ainsi être reprise sur un autre site. C'est le cas par exemple des actualités (articles de journaux ou de blogs).

    <article>
        <h1>Mon article</h1>
        <p>Bla bla bla bla</p>
    </article>

    Par exemple, voici un article sur le Site du Zéro en figure suivante.

    Un article publié sur le Site du Zéro
    Un article publié sur le Site du Zéro

    Résumé

    Ouf, cela fait beaucoup de nouvelles balises à retenir.

    Heureusement, je vous ai fait un petit schéma (figure suivante) pour vous aider à retenir leur rôle !

    Sections de la page identifiées par les balises
    Sections de la page identifiées par les balises
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Structurer sa page Exemple concret d'utilisation des balises

    Exemple concret d'utilisation des balises

    Les balises structurantes de HTML5 Assurer la compatibilité avec IE

    Essayons d'utiliser les balises que nous venons de découvrir pour structurer notre page web. Le code ci-dessous reprend toutes les balises que nous venons de voir au sein d'une page web complète :

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Zozor - Le Site Web</title>
        </head>
    
        <body>
            <header>
                <h1>Zozor</h1>
                <h2>Carnets de voyage</h2>
            </header>
            
            <nav>
                <ul>
                    <li><a href="#">Accueil</a></li>
                    <li><a href="#">Blog</a></li>
                    <li><a href="#">CV</a></li>
                </ul>
            </nav>
            
            <section>
                <aside>
                    <h1>À propos de l'auteur</h1>
                    <p>C'est moi, Zozor ! Je suis né un 23 novembre 2005.</p>
                </aside>
                <article>                
                    <h1>Je suis un grand voyageur</h1>
                    <p>Bla bla bla bla (texte de l'article)</p>
                </article>
            </section>
            
            <footer>
                <p>Copyright Zozor - Tous droits réservés<br />
                <a href="#">Me contacter !</a></p>
            </footer>
            
        </body>
    </html>

    Ce code peut vous aider à comprendre comment les balises doivent être agencées. Vous y reconnaissez un en-tête, un menu de navigation, un pied de page… et, au centre, une section avec un article et un bloc <aside> donnant des informations sur l'auteur de l'article.

    À quoi ressemble la page que nous venons de créer ?

    À rien !

    Si vous testez le résultat, vous verrez juste du texte noir sur fond blanc (figure suivante). C'est normal, il n'y a pas de CSS ! Par contre, la page est bien structurée, ce qui va nous être utile pour la suite.

    Une page bien structurée mais sans CSS
    Une page bien structurée mais sans CSS

    Je ne comprends pas l'intérêt de ces balises. On peut très bien obtenir le même résultat sans les utiliser !

    C'est vrai. En fait, ces balises sont seulement là pour expliquer à l'ordinateur « Ceci est l'en-tête », « Ceci est mon pied de page », etc. Elles n'indiquent pas, contrairement à ce qu'on pourrait penser, où doit être placé le contenu. C'est le rôle du CSS, comme nous le verrons dans peu de temps maintenant.

    À l'heure actuelle, pour tout vous dire, ces balises ont encore assez peu d'utilité. On pourrait très bien utiliser des balises génériques <div> à la place pour englober les différentes portions de notre contenu. D'ailleurs, c'est comme cela qu'on faisait avant l'arrivée de ces nouvelles balises HTML5.

    Néanmoins, il est assez probable que, dans un futur proche, les ordinateurs commencent à tirer parti intelligemment de ces nouvelles balises. On peut imaginer par exemple un navigateur qui choisisse d'afficher les liens de navigation <nav> de manière toujours visible ! Quand l'ordinateur « comprend » la structure de la page, tout devient possible.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les balises structurantes de HTML5 Assurer la compatibilité avec IE

    Assurer la compatibilité avec IE

    Exemple concret d'utilisation des balises Le modèle des boîtes

    Les nouvelles balises que nous venons de voir ne sont reconnues par Internet Explorer que depuis sa version 9 (IE9). Cela va poser un problème car, quand les anciennes versions d'IE ne connaissent pas une balise… elles ne traitent pas correctement la page (impossible de modifier leur CSS par exemple) !

    Cela peut heureusement se régler assez facilement à l'aide d'un script JavaScript. Les scripts sont des petits morceaux de code qui permettent de manipuler la page web et d'effectuer certaines actions. Nous n'allons pas nous intéresser ici au JavaScript (ce n'est pas le sujet de ce cours) mais il faut savoir que ce type de script est appelé depuis les pages HTML d'une façon assez similaire à l'appel des fichiers CSS.

    Les fichiers JavaScript portent généralement l'extension .js. Dans le code HTML, on les place en général dans la balise <head> avec cette balise :

    <script src="monscript.js"></script>

    Si je vous présente (brièvement) JavaScript ici, c'est parce qu'un petit script répondant au doux nom de HTML5shiv permet de faire en sorte que les balises que nous venons de voir (<header>, <footer>, <section>…) s'affichent correctement sur les anciennes versions d'Internet Explorer (IE6, IE7, IE8). Concrètement, il vous suffit d'ajouter les lignes suivantes dans votre code :

    <!--[if lt IE 9]>
        <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    Placez ce code dans la balise <head> comme ceci :

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <!--[if lt IE 9]>
                <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
            <![endif]-->
            <title>Inclusion de HTML5shiv</title>
        </head>
    
        <body>
    
        </body>
    </html>

    Et voilà, votre site s'affichera désormais sans problème dans Internet Explorer !

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Exemple concret d'utilisation des balises Le modèle des boîtes

    Le modèle des boîtes

    Assurer la compatibilité avec IE Les balises de type block et inline

    Une page web peut être vue comme une succession et un empilement de boîtes, qu'on appelle « blocs ». La plupart des éléments vus au chapitre précédent sont des blocs : <header>, <article>, <nav>… Mais nous connaissions déjà d'autres blocs : les paragraphes <p>, les titres <h1>

    Dans ce chapitre, nous allons apprendre à manipuler ces blocs comme de véritables boîtes. Nous allons leur donner des dimensions, les agencer en jouant sur leurs marges, mais aussi apprendre à gérer leur contenu… pour éviter que le texte ne dépasse de ces blocs !

    Ce sont des notions fondamentales dont nous allons avoir besoin pour mettre en page notre site web… Soyez attentifs !

    Les balises de type block et inline

    Le modèle des boîtes Les dimensions

    En HTML, la plupart des balises peuvent se ranger dans l'une ou l'autre de deux catégories :

    Mais comment je reconnais une balise inline d'une balise block ?

    C'est en fait assez facile :

    Pour bien visualiser le concept, voici en figure suivante un petit schéma que je vous ai concocté.

    Différence entre une balise inline et une balise block
    Différence entre une balise inline et une balise block

    Comme vous pouvez le voir, les blocs sont les uns en-dessous des autres. On peut aussi les imbriquer les uns à l'intérieur des autres (souvenez-vous, nos blocs <section> contiennent par exemple des blocs <aside> !).

    La balise inline <a></a>, elle, se trouve à l'intérieur d'une balise block et le texte vient s'insérer sur la même ligne.

    Quelques exemples

    Afin de mieux vous aider à assimiler quelles balises sont inline et quelles balises sont block, voici un petit tableau dressant la liste de quelques balises courantes.

    Balises block

    Balises inline

    <p>

    <em>

    <footer>

    <strong>

    <h1>

    <mark>

    <h2>

    <a>

    <article>

    <img />

    Ce tableau n'est pas complet, loin de là. Si vous voulez avoir la liste complète des balises qui existent et savoir si elles sont de type inline ou block, reportez-vous à l'annexe donnant la liste des balises HTML.

    Les balises universelles

    Vous les connaissez déjà car je vous les ai présentées il y a quelques chapitres. Ce sont des balises qui n'ont aucun sens particulier (contrairement à <p> qui veut dire « paragraphe », <strong> « important », etc.).

    Le principal intérêt de ces balises est que l'on peut leur appliquer une class (ou un id) pour le CSS quand aucune autre balise ne convient.

    Il existe deux balises génériques et, comme par hasard, la seule différence entre les deux est que l'une d'elle est inline et l'autre est block :

    Respectez la sémantique !

    Les balises universelles sont « pratiques » dans certains cas, certes, mais attention à ne pas en abuser. Je tiens à vous avertir de suite : beaucoup de webmasters mettent des <div> et des <span> trop souvent et oublient que d'autres balises plus adaptées existent.

    Voici deux exemples :

    Oui, vous allez me dire qu'au final le résultat (visuel) est le même. Je suis tout à fait d'accord. Mais les balises génériques n'apportent aucun sens à la page et ne peuvent pas être comprises par l'ordinateur. Utilisez toujours d'autres balises plus adaptées quand c'est possible. Google lui-même le conseille pour vous aider à améliorer la position de vos pages au sein de ses résultats de recherche !

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Le modèle des boîtes Les dimensions

    Les dimensions

    Les balises de type block et inline Les marges

    Nous allons ici travailler uniquement sur des balises de type block.

    Pour commencer, intéressons-nous à la taille des blocs. Contrairement à un inline, un bloc a des dimensions précises. Il possède une largeur et une hauteur. Ce qui fait, ô surprise, qu'on dispose de deux propriétés CSS :

    Par défaut, un bloc prend 100% de la largeur disponible. On peut le vérifier en appliquant à nos blocs des bordures ou une couleur de fond (figure suivante).

    Les blocs prennent toute la largeur disponible
    Les blocs prennent toute la largeur disponible

    Maintenant, rajoutons un peu de CSS afin de modifier la largeur des paragraphes. Le CSS suivant dit : « Je veux que tous mes paragraphes aient une largeur de 50% ».

    p
    {
        width: 50%;
    }

    Le résultat est visible à la figure suivante.

    Un paragraphe de 50% de largeur
    Un paragraphe de 50% de largeur

    Les pourcentages seront utiles pour créer un design qui s'adapte automatiquement à la résolution d'écran du visiteur.

    Toutefois, il se peut que vous ayez besoin de créer des blocs ayant une dimension précise en pixels :

    p
    {
       width: 250px;
    }

    Minimum et maximum

    On peut demander à ce qu'un bloc ait des dimensions minimales et maximales. C'est très pratique car cela nous permet de définir des dimensions « limites » pour que notre site s'adapte aux différentes résolutions d'écran de nos visiteurs :

    Par exemple, on peut demander à ce que les paragraphes occupent 50% de la largeur et exiger qu'il fassent au moins 400 pixels de large dans tous les cas :

    p
    {
        width: 50%;
        min-width: 400px;
    }

    Observez le résultat en modifiant la largeur de la fenêtre de votre navigateur. Vous allez voir que, si celle-ci est trop petite, le paragraphe se force à occuper au moins 400 pixels de largeur.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les balises de type block et inline Les marges

    Les marges

    Les dimensions Quand ça dépasse…

    Il faut savoir que tous les blocs possèdent des marges. Il existe deux types de marges :

    Regardez bien le schéma qui se trouve à la figure suivante.

    Marges extérieure et intérieure
    Marges extérieure et intérieure

    Sur ce bloc, j'ai mis une bordure pour qu'on repère mieux ses frontières.

    En CSS, on peut modifier la taille des marges avec les deux propriétés suivantes :

    Pour bien voir les marges, prenons deux paragraphes auxquels j'applique simplement une petite bordure (figure suivante) :

    p
    {
        width: 350px;
        border: 1px solid black;
        text-align: justify;
    }
    Marges par défaut sur les paragraphes
    Marges par défaut sur les paragraphes

    Comme vous pouvez le constater, il n'y a par défaut pas de marge intérieure (padding). En revanche, il y a une marge extérieure (margin). C'est cette marge qui fait que deux paragraphes ne sont pas collés et qu'on a l'impression de « sauter une ligne ».

    Supposons que je veuille rajouter une marge intérieure de 12 px aux paragraphes (figure suivante) :

    p
    {
        width: 350px;
        border: 1px solid black;
        text-align: justify;
        padding: 12px; /* Marge intérieure de 12px */
    }
    Une marge intérieure ajoutée aux paragraphes
    Une marge intérieure ajoutée aux paragraphes

    Maintenant, je veux que mes paragraphes soient plus espacés entre eux. Je rajoute la propriété margin pour demander à ce qu'il y ait 50 px de marge entre deux paragraphes (figure suivante) :

    p
    {
       width: 350px;
       border: 1px solid black;
       text-align: justify;
       padding: 12px;
       margin: 50px; /* Marge extérieure de 50px */
    }

    Une marge extérieure ajoutée aux paragraphesUne marge extérieure ajoutée aux paragraphes

    Eh oui, margin (comme padding d'ailleurs) s'applique aux quatre côtés du bloc.

    Si vous voulez spécifier des marges différentes en haut, en bas, à gauche et à droite, il va falloir utiliser des propriétés plus précises… Le principe est le même que pour la propriété border, vous allez voir !

    En haut, à droite, à gauche, en bas… Et on recommence !

    L'idéal serait que vous reteniez les termes suivants en anglais :

    Ainsi, vous pouvez retrouver toutes les propriétés de tête.

    Je vais quand même vous faire la liste des propriétés pour margin et padding, histoire que vous soyez sûrs que vous avez compris le principe.

    Voici la liste pour margin :

    Et la liste pour padding :

    Centrer des blocs

    Il est tout à fait possible de centrer des blocs. C'est même très pratique pour réaliser un design centré quand on ne connaît pas la résolution du visiteur.

    Pour centrer, il faut respecter les règles suivantes :

    Essayons cette technique sur nos petits paragraphes (lignes 3 et 4) :

    p
    {
        width: 350px; /* On a indiqué une largeur (obligatoire) */
        margin: auto; /* On peut donc demander à ce que le bloc soit centré avec auto */
        border: 1px solid black;
        text-align: justify;
        padding: 12px;
        margin-bottom: 20px;
    }

    Et voici le résultat à la figure suivante.

    Centrage des paragraphesCentrage des paragraphes

    Ainsi, le navigateur centre automatiquement nos paragraphes !

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les dimensions Quand ça dépasse…

    Quand ça dépasse…

    Les marges Le positionnement en CSS

    Lorsqu'on commence à définir des dimensions précises pour nos blocs, comme on vient de le faire, il arrive qu'ils deviennent trop petits pour le texte qu'ils contiennent.

    Les propriétés CSS que nous allons voir ici ont justement été créées pour contrôler les dépassements… et décider quoi faire si jamais cela devait arriver.

    overflow : couper un bloc

    Supposons que vous ayez un long paragraphe et que vous vouliez (pour une raison qui ne regarde que vous) qu'il fasse 250 px de large et 110 px de haut. Ajoutons-lui une bordure et remplissons-le de texte… à ras-bord (figure suivante) :

    p
    {
        width: 250px;
        height: 110px;
        text-align: justify;
        border: 1px solid black;
    }
    Le texte dépasse du bloc de paragraphe
    Le texte dépasse du bloc de paragraphe

    Horreur ! Le texte dépasse des limites du paragraphe !

    Eh oui ! Vous avez demandé des dimensions précises, vous les avez eues ! Mais… le texte ne tient pas à l'intérieur d'un si petit bloc.

    Si vous voulez que le texte ne dépasse pas des limites du paragraphe, il va falloir utiliser la propriété overflow. Voici les valeurs qu'elle peut accepter :

    Avec overflow: hidden; le texte est donc coupé (on ne peut pas voir la suite), comme sur la figure suivante.

    Le texte est coupé aux limites du paragraphe
    Le texte est coupé aux limites du paragraphe

    Essayons maintenant overflow: auto; avec le code CSS suivant (résultat à la figure suivante) :

    p
    {
        width: 250px;
        height: 110px;
        text-align: justify;
        border: 1px solid black;
        overflow: auto;
    }

    Des barres de défilement sont ajoutées au paragrapheDes barres de défilement sont ajoutées au paragraphe

    Eurêka ! Des barres de défilement nous permettent maintenant de consulter le contenu qui n'était pas visible.

    word-wrap : couper les textes trop larges

    Si vous devez placer un mot très long dans un bloc, qui ne tient pas dans la largeur, vous allez adorer word-wrap. Cette propriété permet de forcer la césure des très longs mots (généralement des adresses un peu longues).

    La figure suivante représente ce que l'on peut avoir quand on écrit une URL un peu longue dans un bloc.

    Le texte déborde en largeur
    Le texte déborde en largeur

    L'ordinateur ne sait pas « couper » l'adresse car il n'y a ni espace, ni tiret. Il ne sait pas faire la césure.

    Avec le code suivant, la césure sera forcée dès que le texte risque de dépasser (figure suivante).

    p
    {
        word-wrap: break-word;
    }
    Le texte est coupé pour ne pas déborder
    Le texte est coupé pour ne pas déborder

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les marges Le positionnement en CSS

    Le positionnement en CSS

    Quand ça dépasse… Le positionnement flottant

    Voici venu le moment tant attendu : nous allons apprendre à modifier la position des éléments sur notre page. La théorie que nous allons voir ici nous sera indispensable au prochain chapitre, dans lequel nous réaliserons ensemble, pas à pas, le design de notre premier site !

    Vous allez voir, il existe plusieurs techniques permettant d'effectuer la mise en page de son site. Chacune a ses avantages et ses défauts, ce sera à vous de sélectionner celle qui vous semble la meilleure selon votre cas.

    Le positionnement flottant

    Le positionnement en CSS Transformez vos éléments avec display

    Vous vous souvenez de la propriété float ? Nous l'avons utilisée pour faire flotter une image autour du texte (figure suivante).

    L'image flotte autour du texte grâce à la propriété float
    L'image flotte autour du texte grâce à la propriété float

    Il se trouve que cette propriété est aujourd'hui utilisée par la majorité des sites web pour… faire la mise en page ! En effet, si on veut placer son menu à gauche et le contenu de sa page à droite, c'est a priori un bon moyen. Je dis bien a priori car, à la base, cette propriété n'a pas été conçue pour faire la mise en page et nous allons voir qu'elle a quelques petits défauts.

    Reprenons le code HTML structuré que nous avons réalisé il y a quelques chapitres :

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <link rel="stylesheet" href="style.css" />
            <title>Zozor - Le Site Web</title>
        </head>
    
        <body>
            <header>
                <h1>Zozor</h1>
                <h2>Carnets de voyage</h2>
            </header>
            
            <nav>
                <ul>
                    <li><a href="#">Accueil</a></li>
                    <li><a href="#">Blog</a></li>
                    <li><a href="#">CV</a></li>
                </ul>
            </nav>
            
            <section>
                <aside>
                    <h1>À propos de l'auteur</h1>
                    <p>C'est moi, Zozor ! Je suis né un 23 novembre 2005.</p>
                </aside>
                <article>                
                    <h1>Je suis un grand voyageur</h1>
                    <p>Bla bla bla bla (texte de l'article)</p>
                </article>
            </section>
            
            <footer>
                <p>Copyright Zozor - Tous droits réservés
    
                <a href="#">Me contacter !</a></p>
            </footer>
            
        </body>
    </html>

    Je rappelle que, sans CSS, la mise en page ressemble à la figure suivante.

    Une page HTML sans CSS
    Une page HTML sans CSS

    Nous allons essayer de placer le menu à gauche et le reste du texte à droite. Pour cela, nous allons faire flotter le menu à gauche et laisser le reste du texte se placer à sa droite.

    Nous voulons que le menu occupe 150 pixels de large. Nous allons aussi rajouter une bordure noire autour du menu et une bordure bleue autour du corps (à la balise <section>) pour bien les distinguer :

    nav
    {
        float: left;
        width: 150px;
        border: 1px solid black;
    }
    
    section
    {
        border: 1px solid blue;
    }

    Voici le résultat à la figure suivante. Ce n'est pas encore tout à fait cela.

    Le menu est bien positionné mais collé au texte
    Le menu est bien positionné mais collé au texte

    Il y a deux défauts (mis à part le fait que c'est encore bien moche) :

    On veut bien que le pied de page (« Copyright Zozor ») soit placé en bas sous le menu mais, par contre, on aimerait que tout le corps de page soit constitué d'un seul bloc placé à droite.

    Pour résoudre ces deux problèmes d'un seul coup, il faut ajouter une marge extérieure à gauche de notre <section>, marge qui doit être par ailleurs supérieure à la largeur du menu. Si notre menu fait 150 px, nous allons par exemple donner une marge extérieure gauche de 170 px à notre section de page (figure suivante), ici à la ligne 10.

    nav
    {
        float: left;
        width: 150px;
        border: 1px solid black;
    }
    
    section
    {
        margin-left: 170px;
        border: 1px solid blue;
    }
    Le corps de page est bien aligné à droite du menu
    Le corps de page est bien aligné à droite du menu

    Voilà, le contenu de la page est maintenant correctement aligné.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Le positionnement en CSS Transformez vos éléments avec display

    Transformez vos éléments avec display

    Le positionnement flottant Le positionnement inline-block

    Je vais vous apprendre ici à modifier les lois du CSS (brrr…). Accrochez-vous !

    Il existe en CSS une propriété très puissante : display. Elle est capable de transformer n'importe quel élément de votre page d'un type vers un autre. Avec cette propriété magique, je peux par exemple imposer à mes liens (originellement de type inline) d'apparaître sous forme de blocs :

    a
    {
        display: block;
    }

    À ce moment-là, les liens vont se positionner les uns en-dessous des autres (comme des blocs normaux) et il devient possible de modifier leurs dimensions !

    Voici quelques-unes des principales valeurs que peut prendre la propriété display en CSS (il y en a encore d'autres) :

    Valeur

    Exemples

    Description

    inline

    <a>, <em>, <span>

    Eléments d'une ligne. Se placent les uns à côté des autres.

    block

    <p>, <div>, <section>

    Eléments en forme de blocs. Se placent les uns en-dessous des autres et peuvent être redimensionnés.

    inline-block

    <select>, <input>

    Eléments positionnés les uns à côté des autres (comme les inlines) mais qui peuvent être redimensionnés (comme les blocs).

    none

    <head>

    Eléments non affichés.

    On peut donc décider de masquer complètement un élément de la page avec cette propriété. Par exemple, si je veux masquer les éléments qui ont la classe « secret », je vais écrire :

    .secret
    {
        display: none;
    }

    Et quel est ce nouveau type bizarre, inline-block ? C'est un mélange ?

    Oui, ce type d'élément est en fait une combinaison des inlines et des blocs. C'est un peu le meilleur des deux mondes : les éléments s'affichent côte à côte et peuvent être redimensionnés.

    Peu de balises sont affichées comme cela par défaut, c'est surtout le cas des éléments de formulaire (comme <input>) que nous découvrirons un peu plus tard. Par contre, avec la propriété display, nous allons pouvoir transformer d'autres balises en inline-block, ce qui va nous aider à réaliser notre design.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Le positionnement flottant Le positionnement inline-block

    Le positionnement inline-block

    Transformez vos éléments avec display Les positionnements absolu, fixe et relatif

    Les manipulations que demande le positionnement flottant se révèlent parfois un peu délicates sur des sites complexes. Dès qu'il y a un peu plus qu'un simple menu à mettre en page, on risque d'avoir à recourir à des clear: both; qui complexifient rapidement le code de la page.

    Si le positionnement flottant reste, de loin, le mode de positionnement le plus utilisé sur le Web à l'heure actuelle, d'autres techniques existent et bien peu de webmasters le savent. L'une d'elles, étonnamment puissante, est passée sous le nez des concepteurs de sites web alors qu'elle existe depuis CSS 2.1, c'est-à-dire depuis plus de dix ans ! Elle consiste à transformer vos éléments en inline-block avec la propriété display.

    Quelques petits rappels sur les éléments de type inline-block :

    Nous allons transformer en inline-block les deux éléments que nous voulons placer côte à côte : le menu de navigation et la section du centre de la page.

    nav
    {
        display: inline-block;
        width: 150px;
        border: 1px solid black;
    }
    
    section
    {
        display: inline-block;    
        border: 1px solid blue;
    }

    Ce qui nous donne comme résultat la figure suivante.

    Le menu et le corps sont côte à côte… mais positionnés en bas !
    Le menu et le corps sont côte à côte… mais positionnés en bas !

    Argh !

    Ce n'est pas tout à fait ce qu'on voulait. Et en fait, c'est normal : les éléments inline-block se positionnent sur une même ligne de base (appelée baseline), en bas.

    Heureusement, le fait d'avoir transformé les éléments en inline-block nous permet d'utiliser une nouvelle propriété, normalement réservée aux tableaux : vertical-align. Cette propriété permet de modifier l'alignement vertical des éléments. Voici quelques-unes des valeurs possibles pour cette propriété :

    Il ne nous reste plus qu'à aligner nos éléments en haut (lignes 6 et 13), et le tour est joué (figure suivante) !

    nav
    {
        display: inline-block;
        width: 150px;
        border: 1px solid black;
        vertical-align: top;
    }
    
    section
    {
        display: inline-block;    
        border: 1px solid blue;
        vertical-align: top;
    }
    Le menu et le corps sont alignés en haut et côte à côte
    Le menu et le corps sont alignés en haut et côte à côte

    Et voilà ! Pas besoin de s'embêter avec les marges, aucun risque que le texte passe sous le menu… Bref, c'est parfait !

    … Quoi ? Pardon, on me signale dans l'oreillette qu'un certain navigateur vient jouer les trouble-fête…

    inline-block et compatibilité Internet Explorer

    Le positionnement inline-block est parfaitement compris par Internet Explorer à partir de IE8.

    Pour les anciennes versions, IE6 et IE7 en particulier, le positionnement inline-block fonctionne… mais uniquement sur les éléments qui étaient des inline à la base !

    On peut heureusement régler ce problème avec une petite « bidouille » : si le navigateur est IE6 ou IE7, on transforme l'élément en inline et on change son comportement en lui donnant le layout (en lui affectant la propriété zoom: 1;). L'élément pourra alors être redimensionné.

    Pour commencer, il va falloir créer une seconde feuille de style CSS spéciale pour Internet Explorer 6 et 7. On va utiliser pour cela un commentaire conditionnel, que nous avions déjà aperçu auparavant, qui ne sera lu que par IE6 et IE7 :

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <link rel="stylesheet" href="style.css" />
            <!--[if lte IE 7]>
            <link rel="stylesheet" href="style_ie.css" />
            <![endif]-->
    
            <title>Zozor - Le Site Web</title>
        </head>

    Si le navigateur est IE6 ou IE7, une seconde feuille de style CSS, style_ie.css, sera chargée et viendra s'ajouter à la première. Dedans, nous ferons toutes nos « bidouilles » pour régler les problèmes liés aux vieilles versions d'Internet Explorer, afin que notre site s'affiche correctement chez tout le monde, même chez ceux qui vivent encore à la préhistoire ;-) .

    Dans style_ie.css, rajoutez simplement le code suivant :

    nav, section
    {
        display: inline;
        zoom: 1;
    }

    Voilà, c'est tout ! Dans votre feuille de style classique (style.css), continuez à utiliser inline-block comme avant. Ceux qui ont IE6 ou IE7 liront en plus ce code un peu spécial, qui leur permet d'obtenir le même résultat visuel !

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Transformez vos éléments avec display Les positionnements absolu, fixe et relatif

    Les positionnements absolu, fixe et relatif

    Le positionnement inline-block TP : création d'un site pas à pas

    Il existe d'autres techniques un peu particulières permettant de positionner avec précision des éléments sur la page :

    Il faut d'abord faire son choix entre les trois modes de positionnement disponibles. Pour cela, on utilise la propriété CSS position à laquelle on donne une de ces valeurs :

    Nous allons étudier un à un chacun de ces positionnements.

    Le positionnement absolu

    Le positionnement absolu permet de placer un élément (réellement) n'importe où sur la page. Pour effectuer un positionnement absolu, on doit écrire :

    element
    {
        position: absolute;
    }

    Mais cela ne suffit pas ! On a dit qu'on voulait un positionnement absolu, mais encore faut-il dire où l'on veut que le bloc soit positionné sur la page.

    Pour ce faire, on va utiliser quatre propriétés CSS :

    On peut leur donner une valeur en pixels, comme 14px, ou bien une valeur en pourcentage, comme 50%.

    Si ce n'est pas très clair pour certains d'entre vous, la figure suivante devrait vous aider à comprendre.

    Positionnement absolu de l'élément sur la page
    Positionnement absolu de l'élément sur la page

    Avec cela, vous devriez être capables de positionner correctement votre bloc.

    Il faut donc utiliser la propriété position et au moins une des quatre propriétés ci-dessus (top, left, right ou bottom). Si on écrit par exemple :

    element
    {
        position: absolute;
        right: 0px;
        bottom: 0px;
    }

    … cela signifie que le bloc doit être positionné tout en bas à droite (0 pixel par rapport à la droite de la page, 0 par rapport au bas de la page).

    Si on essaye de placer notre bloc <nav> en bas à droite de la page, on obtient le même résultat qu'à la figure suivante.

    Le menu est positionné en bas à droite de l'écran
    Le menu est positionné en bas à droite de l'écran

    On peut bien entendu ajouter une marge intérieure (padding) au menu pour qu'il soit moins collé à sa bordure.

    Les éléments positionnés en absolu sont placés par-dessus le reste des éléments de la page ! Par ailleurs, si vous placez deux éléments en absolu vers le même endroit, ils risquent de se chevaucher. Dans ce cas, utilisez la propriété z-index pour indiquer quel élément doit apparaître au-dessus des autres.

    element
    {
        position: absolute;
        right: 0px;
        bottom: 0px;
        z-index: 1;
    }
    element2
    {
        position: absolute;
        right: 30px;
        bottom: 30px;
        z-index: 2;
    }

    L'élément ayant la valeur de z-index la plus élevée sera placé par dessus les autres, comme le montre la figure suivante.

    Positionnement des éléments absolus
    Positionnement des éléments absolus

    Le positionnement fixe

    Le principe est exactement le même que pour le positionnement absolu sauf que, cette fois, le bloc reste fixe à sa position, même si on descend plus bas dans la page.

    element
    {
        position: fixed;
        right: 0px;
        bottom: 0px;
    }

    Essayez d'observer le résultat, vous verrez que le menu reste dans le cas présent affiché en bas à droite même si on descend plus bas dans la page (figure suivante).

    Le menu reste affiché en bas à droite en toutes circonstancesLe menu reste affiché en bas à droite en toutes circonstances

    Le positionnement relatif

    Plus délicat, le positionnement relatif peut vite devenir difficile à utiliser. Ce positionnement permet d'effectuer des « ajustements » : l'élément est décalé par rapport à sa position initiale.

    Prenons par exemple un texte important, situé entre deux balises <strong>. Pour commencer, je le mets sur fond rouge pour qu'on puisse mieux le repérer :

    strong
    {
       background-color: red; /* Fond rouge */
       color: yellow; /* Texte de couleur jaune */
    }

    Cette fois, le schéma que je vous ai montré tout à l'heure pour les positions absolue et fixe ne marche plus. Pourquoi ? Parce que l'origine a changé : le point de coordonnées (0, 0) ne se trouve plus en haut à gauche de votre fenêtre comme c'était le cas tout à l'heure. Non, cette fois l'origine se trouve en haut à gauche… de la position actuelle de votre élément.

    Tordu n'est-ce pas ? C'est le principe de la position relative. Le schéma en figure suivante devrait vous aider à comprendre où se trouve l'origine des points.

    Origine de la position relative
    Origine de la position relative

    Donc, si vous faites un position: relative; et que vous appliquez une des propriétés top, left, right ou bottom, le texte sur fond rouge va se déplacer par rapport à la position où il se trouve.

    Prenons un exemple : je veux que mon texte se décale de 55 pixels vers la droite et de 10 pixels vers le bas. Je vais donc demander à ce qu'il soit décalé de 55 pixels par rapport au « bord gauche » et de 10 pixels par rapport au « bord haut » (lignes 6 à 8) :

    strong
    {
       background-color: red;
       color: yellow;
       
       position: relative;
       left: 55px;
       top: 10px;
    }

    Le texte est alors décalé par rapport à sa position initiale, comme illustré à la figure suivante.

    Le texte est décalé
    Le texte est décalé

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Le positionnement inline-block TP : création d'un site pas à pas

    TP : création d'un site pas à pas

    Les positionnements absolu, fixe et relatif Maquettage du design

    Enfin, nous y voilà. C'est un chapitre un peu particulier, assez différent de ce que vous avez lu jusqu'à maintenant. En fait, c'est ce que j'appelle un « TP » (Travaux Pratiques). Maintenant, vous ne pouvez plus vous contenter de lire mes chapitres à moitié endormis, vous allez devoir mettre la main à la pâte en même temps que moi.

    Vous avez lu beaucoup de théorie jusqu'ici mais vous vous demandez sûrement comment font les webmasters pour créer d'aussi beaux sites. Vous vous dites que vous êtes encore loin d'avoir les connaissances nécessaires pour construire tout un site… Eh bien vous vous trompez !

    Maquettage du design

    TP : création d'un site pas à pas Organiser le contenu en HTML

    Je vois d'ici le tableau. Vous vous dites « Chouette, on va créer un site complet », vous ouvrez votre éditeur de texte (Notepad++ par exemple), et vous me regardez en me demandant « Bon, par quelle ligne de code on commence ? ».

    Et là, je dois justement vous arrêter. Prenez un crayon et un papier : il faut d'abord réfléchir à ce que vous voulez créer comme site. De quoi va-t-il parler ? Avez-vous un thème, un objectif ?

    Je sais, par expérience, que la plupart d'entre vous « cherche juste à apprendre » pour le moment. Vous n'avez donc peut-être pas encore d'idée précise en tête. Dans ce cas, je vous suggère de créer un site pour vous présenter, pour assurer votre présence sur le Web : ce site parlera de vous, il y aura votre CV, vos futures réalisations et pourquoi pas votre blog.

    En ce qui me concerne, dans ce TP, je vais réaliser le site web de notre mascotte Zozor, le célèbre âne du Site du Zéro (figure suivante). Zozor a décidé de partir en voyage à travers le monde et sa première étape sera… San Francisco ! Il veut donc créer un site web pour qu'on le connaisse et pour qu'on suive son périple à travers le monde.

    L'âne Zozor, la mascote du Site du Zéro
    L'âne Zozor, la mascote du Site du Zéro

    La première étape consiste à maquetter le design, pour avoir un objectif du site web à réaliser. À partir de là, deux possibilités :

    Pour ma part j'ai fait appel à Fan Jiyong, un graphiste, qui m'a proposé le design (qui me plaît beaucoup !) que vous pouvez voir à la figure suivante.

    La maquette du site web que nous allons réaliserLa maquette du site web que nous allons réaliser

    Conception de la maquette : Fan Jiyong

    Cette maquette est en fait une simple image du résultat qu'on veut obtenir. Je demande au graphiste de me fournir les éléments qui vont m'aider à construire le design, c'est-à-dire les codes couleurs utilisés, les images découpées (figure suivante) ainsi que les polices dont j'aurai besoin.

    Télécharger les images et les polices

    Image utilisateur
    Image utilisateur
    Image utilisateur
    Image utilisateur

    Quelques-unes des images « découpées » utilisées dans le design

    Il ne nous reste plus qu'à réaliser ce site web ! Nous allons procéder en deux temps :

    1. Nous allons construire le squelette HTML de la page.

    2. Puis nous allons le mettre en forme et le mettre en page avec CSS.

    Allez, au boulot !

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    TP : création d'un site pas à pas Organiser le contenu en HTML

    Organiser le contenu en HTML

    Maquettage du design Mettre en forme en CSS

    La première chose à faire est de distinguer les principaux blocs sur la maquette. Ces blocs vont constituer le squelette de notre page.

    Pour créer ce squelette, nous allons utiliser différentes balises HTML :

    Comment je sais quelle balise utiliser moi ?

    C'est à vous de décider. De préférence, utilisez une balise qui a du sens (comme les balises structurantes <header>, <section>, <nav>) mais, si aucune balise ne vous semble mieux convenir, optez pour la balise générique <div>.

    Regardez la figure suivante pour voir ce que je vous propose comme structure.

    Maquette découpée en différentes sectionsMaquette découpée en différentes sections

    Toutes les balises que l'on va utiliser n'apparaissent pas sur cette maquette mais cela vous permet d'avoir une idée de l'imbrication que je propose pour les éléments.

    Le HTML n'est pas vraiment la partie complexe de la réalisation du site web. En fait, si vous avez bien compris comment imbriquer des balises, vous ne devriez pas avoir de mal à réaliser un code approchant du mien :

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <link rel="stylesheet" href="style.css" />
            <title>Zozor - Carnets de voyage</title>
        </head>
    
        <body>
            <div id="bloc_page">
                <header>
                    <div id="titre_principal">
                        <img src="images/zozor_logo.png" alt="Logo de Zozor" id="logo" />
                        <h1>Zozor</h1>
                        <h2>Carnets de voyage</h2>
                    </div>
                    
                    <nav>
                        <ul>
                            <li><a href="#">Accueil</a></li>
                            <li><a href="#">Blog</a></li>
                            <li><a href="#">CV</a></li>
                            <li><a href="#">Contact</a></li>
                        </ul>
                    </nav>
                </header>
                
                <div id="banniere_image">
                    <div id="banniere_description">
                        Retour sur mes vacances aux États-Unis...
                        <a href="#" class="bouton_rouge">Voir l'article <img src="images/flecheblanchedroite.png" alt="" /></a>
                    </div>
                </div>
                
                <section>
                    <article>
                        <h1><img src="images/ico_epingle.png" alt="Catégorie voyage" class="ico_categorie" />Je suis un grand voyageur</h1>
                        <p>Lorem ipsum dolor sit amet...</p>
                        <p>Vivamus sed libero nec mauris pulvinar facilisis ut non sem...</p>
                        <p>Phasellus ligula massa, congue ac vulputate non, dignissim at augue...</p>
                    </article>
                    <aside>
                        <h1>À propos de l'auteur</h1>
                        <img src="images/bulle.png" alt="" id="fleche_bulle" />
                        <p id="photo_zozor"><img src="images/zozor_classe.png" alt="Photo de Zozor" /></p>
                        <p>Laisse-moi le temps de me présenter : je m'appelle Zozor, je suis né un 23 novembre 2005.</p>
                        <p>Bien maigre, n'est-ce pas ? C'est pourquoi, aujourd'hui, j'ai décidé d'écrire ma biographie (ou zBiographie, comme vous voulez !) afin que les zéros sachent qui je suis réellement.</p>
                        <p><img src="images/facebook.png" alt="Facebook" /><img src="images/twitter.png" alt="Twitter" /><img src="images/vimeo.png" alt="Vimeo" /><img src="images/flickr.png" alt="Flickr" /><img src="images/rss.png" alt="RSS" /></p>
                    </aside>
                </section>
                
                <footer>
                    <div id="tweet">
                        <h1>Mon dernier tweet</h1>
                        <p>Hii haaaaaan !</p>
                        <p>le 12 mai à 23h12</p>
                    </div>
                    <div id="mes_photos">
                        <h1>Mes photos</h1>
                        <p><img src="images/photo1.jpg" alt="Photographie" /><img src="images/photo2.jpg" alt="Photographie" /><img src="images/photo3.jpg" alt="Photographie" /><img src="images/photo4.jpg" alt="Photographie" /></p>
                    </div>
                    <div id="mes_amis">
                        <h1>Mes amis</h1>
                        <ul>
                            <li><a href="#">Pupi le lapin</a></li>
                            <li><a href="#">Mr Baobab</a></li>
                            <li><a href="#">Kaiwaii</a></li>
                            <li><a href="#">Perceval.eu</a></li>
                        </ul>
                        <ul>
                            <li><a href="#">Belette</a></li>
                            <li><a href="#">Le concombre masqué</a></li>
                            <li><a href="#">Ptit prince</a></li>
                            <li><a href="#">Mr Fan</a></li>
                        </ul>
                    </div>
                </footer>
            </div>
        </body>
    </html>

    Petite particularité : comme vous le voyez, tout le contenu de la page est placé dans une grande balise <div> ayant pour idbloc_page (on l'appelle aussi parfois main_wrapper en anglais). Cette balise englobe tout le contenu, ce qui va nous permettre de fixer facilement les dimensions de la page et de centrer notre site à l'écran.

    Pour le reste, aucune grosse difficulté à signaler. Notez que je n'ai pas forcément pensé à toutes les balises du premier coup : en réalisant le design en CSS, il m'est parfois apparu qu'il était nécessaire d'englober une partie des balises d'un bloc <div> pour m'aider dans la réalisation du design.

    Pour le moment, comme vous vous en doutez, le site web n'est pas bien beau (et encore, je suis gentil). Vous pouvez voir le résultat actuel à la figure suivante.

    Apparence du site web constitué uniquement du HTML
    Apparence du site web constitué uniquement du HTML

    C'est en CSS que la magie va maintenant opérer.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Maquettage du design Mettre en forme en CSS

    Mettre en forme en CSS

    Organiser le contenu en HTML Assurer la compatibilité avec IE

    Les choses se compliquent un peu plus lorsqu'on arrive au CSS. En effet, il faut du travail (et parfois un peu d'astuce) pour obtenir un résultat se rapprochant de la maquette. Je dis bien « se rapprochant » car vous ne pourrez jamais obtenir un résultat identique au pixel près.

    Mettez-vous bien cela en tête : le but est d'obtenir le rendu le plus proche possible, sans chercher la perfection. Même si vous obtenez selon vous « la perfection » sur un navigateur, vous pouvez être sûrs qu'il y aura des différences sur un autre navigateur (plus ancien) ou sur une autre machine que la vôtre. Nous allons donc faire au mieux et ce sera déjà du travail, vous verrez.

    Pour mettre en forme le design, je vais procéder en plusieurs étapes. Je vais m'occuper des éléments suivants, dans cet ordre :

    1. Polices personnalisées.

    2. Définition des styles principaux de la page (largeur du site, fond, couleur par défaut du texte).

    3. En-tête et liens de navigation.

    4. Bannière (représentant le pont de San Francisco).

    5. Section principale du corps de page, au centre.

    6. Pied de page (footer).

    Les polices personnalisées

    Pour les besoins du design, mon graphiste a utilisé trois polices sur sa maquette :

    La plupart des ordinateurs sont équipés de Trebuchet MS (quoique pas nécessairement tous, on pourrait la faire télécharger). Par contre, les deux autres polices sont un peu originales et ne sont sûrement pas présentes sur les ordinateurs de vos visiteurs. Nous allons les leur faire télécharger.

    Comme vous le savez, il faut proposer plusieurs versions de ces polices pour les différents navigateurs. Dafont ne propose que le .ttf en téléchargement. Par contre, FontSquirrel propose un générateur de polices à utiliser en CSS3 avec @font-face : vous lui envoyez un .ttf, l'outil transforme le fichier dans tous les autres formats nécessaires et vous fournit même le code CSS prêt à l'emploi !

    Je m'en suis servi pour générer les différentes versions des deux polices exotiques que je vais utiliser. Ensuite, dans mon fichier CSS, je rajoute ce code qui m'a été fourni par FontSquirrel pour déclarer les nouvelles polices :

    /* Définition des polices personnalisées */
    
    @font-face
    {
        font-family: 'BallparkWeiner';
        src: url('polices/ballpark.eot');
        src: url('polices/ballpark.eot?#iefix') format('embedded-opentype'),
             url('polices/ballpark.woff') format('woff'),
             url('polices/ballpark.ttf') format('truetype'),
             url('polices/ballpark.svg#BallparkWeiner') format('svg');
        font-weight: normal;
        font-style: normal;
    }
    
    @font-face
    {
        font-family: 'Dayrom';
        src: url('polices/dayrom.eot');
        src: url('polices/dayrom.eot?#iefix') format('embedded-opentype'),
             url('polices/dayrom.woff') format('woff'),
             url('polices/dayrom.ttf') format('truetype'),
             url('polices/dayrom.svg#Dayrom') format('svg');
        font-weight: normal;
        font-style: normal;
    }

    En plus de cela, il faut bien entendu mettre à disposition les fichiers des polices. Comme vous le voyez, j'ai créé un sous-dossier polices dans lequel j'ai mis les différentes versions de mes polices.

    Définition des styles principaux

    On peut maintenant s'attaquer à définir quelques styles globaux pour tout le design de notre page. On va définir une image de fond, une police et une couleur de texte par défaut, et surtout on va dimensionner notre page et la centrer à l'écran.

    /* Eléments principaux de la page */
    
    body
    {
        background: url('images/fond_jaune.png');
        font-family: 'Trebuchet MS', Arial, sans-serif;
        color: #181818;
    }
    
    #bloc_page
    {
        width: 900px;
        margin: auto;
    }
    
    section h1, footer h1, nav a
    {
        font-family: Dayrom, serif;
        font-weight: normal;
        text-transform: uppercase;
    }

    Avec #bloc_page, le bloc qui englobe toute la page, j'ai fixé les limites à 900 pixels de large. Avec les marges automatiques, le design sera centré.

    J'ai utilisé la propriété CSS text-transform: uppercase; (que nous n'avons pas vue auparavant) pour faire en sorte que mes titres soient toujours écrits en majuscules. Cette propriété transforme en effet le texte en majuscules (elle peut aussi faire l'inverse avec lowercase). Notez qu'on aurait aussi pu écrire les titres directement en majuscules dans le code HTML.

    La figure suivante vous montre ce qu'on obtient pour le moment avec le code CSS. On est encore loin du résultat final mais on se sent déjà un petit peu plus « chez soi ».

    Le fond et les limites de la page commencent à apparaître
    Le fond et les limites de la page commencent à apparaître

    En-tête et liens de navigation

    D'après la structure que j'ai proposée, l'en-tête contient aussi les liens de navigation. Commençons par définir l'en-tête et, en particulier, le logo en haut à gauche. Nous verrons ensuite comment mettre en forme les liens de navigation.

    L'en-tête

    /* Header */
    
    header
    {
        background: url('images/separateur.png') repeat-x bottom;
    }
    
    #titre_principal
    {
        display: inline-block;
    }
    
    header h1
    {
        font-family: 'BallparkWeiner', serif;
        font-size: 2.5em;
        font-weight: normal;
    }
    
    #logo, header h1
    {
        display: inline-block;
        margin-bottom: 0px;
    }
    
    header h2
    {
        font-family: Dayrom, serif;
        font-size: 1.1em;
        margin-top: 0px;
        font-weight: normal;
    }

    Nous créons une distinction entre l'en-tête et le corps de page grâce à une image de fond. Les éléments sont positionnés en inline-block et nous personnalisons les polices et les dimensions. Rien d'extraordinaire pour le moment.

    Les liens de navigation

    La mise en forme des liens de navigation est un petit peu plus intéressante. Vous l'avez vu, j'ai créé une liste à puces pour les liens… mais une telle liste s'affiche habituellement en hauteur, et non en largeur. Heureusement, cela se change facilement, vous allez voir :

    /* Navigation */
    
    nav
    {
        display: inline-block;
        width: 740px;
        text-align: right;
    }
    
    nav ul
    {
        list-style-type: none;
    }
    
    nav li
    {
        display: inline-block;
        margin-right: 15px;
    }
    
    nav a
    {
        font-size: 1.3em;
        color: #181818;
        padding-bottom: 3px;
        text-decoration: none;
    }
    
    nav a:hover
    {
        color: #760001;
        border-bottom: 3px solid #760001;
    }

    La principale nouveauté est la définition CSS list-style-type: none;, qui permet de retirer l'image ronde servant de puce. Chaque élément de la liste (<li>) est positionné en inline-block, ce qui nous permet de placer les liens côte à côte comme nous le souhaitions.

    Le reste des définitions ne contient rien d'extraordinaire : des dimensions, des couleurs, des bordures… Autant de choses que vous connaissez déjà. Notez que je ne trouve pas forcément les bonnes valeurs du premier coup, il me faut parfois tâtonner un peu pour trouver une apparence proche de la maquette d'origine.

    La figure suivante représente le résultat que nous obtenons avec les derniers ajouts de CSS.

    L'en-tête est mis en page
    L'en-tête est mis en page

    La bannière

    Bien, passons maintenant à un exercice un peu plus difficile mais très intéressant : la bannière ! Notre maquette comporte une jolie bannière représentant le pont de San Francisco. Cette bannière, sur votre site, peut être amenée à évoluer. Ici, elle peut servir à illustrer, par exemple, le dernier billet de blog de notre ami Zozor, qui vient de visiter San Francisco.

    La bannière est intéressante à plus d'un titre :

    Voici le code que j'ai utilisé pour réaliser toute la bannière :

    /* Bannière */
    
    #banniere_image
    {
        margin-top: 15px;
        height: 200px;
        border-radius: 5px;
        background: url('images/sanfrancisco.jpg') no-repeat;
        position: relative;
        box-shadow: 0px 4px 4px #1c1a19;
        margin-bottom: 25px;
    }
    
    #banniere_description
    {
        position: absolute;
        bottom: 0;
        border-radius: 0px 0px 5px 5px;
        width: 99.5%;
        height: 33px;
        padding-top: 15px;
        padding-left: 4px;
        background-color: rgb(24,24,24); /* Pour les anciens navigateurs */
        background-color: rgba(24,24,24,0.8);
        color: white;
        font-size: 0.8em;
    }
    
    .bouton_rouge
    {
        display: inline-block;
        height: 25px;
        position: absolute;
        right: 5px;
        bottom: 5px;
        background: url('images/fond_degraderouge.png') repeat-x;
        border: 1px solid #760001;
        border-radius: 5px;
        font-size: 1.2em;
        text-align: center;
        padding: 3px 8px 0px 8px;
        color: white;
        text-decoration: none;
    }
    
    .bouton_rouge img
    {
        border: 0;
    }

    Ce code est assez technique et riche en fonctionnalités CSS. C'est peut-être la partie la plus délicate à réaliser dans cette page.

    Vous pouvez constater que j'ai choisi d'afficher l'image du pont sous forme d'image de fond dans le bloc <div> de la bannière.

    J'ai aussi donné une position relative à la bannière, sans utiliser de propriétés pour en modifier le décalage… Pourquoi ? A priori, une position relative sans décalage ne sert à rien… Et pourtant, cela m'a été particulièrement utile pour placer le bouton « Voir l'article » en bas à droite de la bannière. En effet, j'ai placé le bouton en absolu à l'intérieur.

    Le bouton ne devrait-il pas se placer en bas à droite de la page ?

    Non, souvenez-vous ce que je vous avais dit : si un bloc est positionné en absolu dans un autre bloc lui-même positionné en absolu, fixe ou relatif, alors il se positionne à l'intérieur de ce bloc.

    Notre bannière est positionnée en relatif (sans décalage). Comme le bouton est positionné en absolu à l'intérieur, il se place donc en bas à droite de la bannière !

    C'est une technique particulièrement utile et puissante dans la réalisation d'un design, souvenez-vous en !

    Dernier détail : pour la légende de la bannière, j'ai choisi d'utiliser la transparence avec la notation RGBa plutôt que la propriété opacity. En effet, opacity aurait rendu tout le contenu du bloc transparent, y compris le bouton « Voir l'article » à l'intérieur. J'ai trouvé préférable de rendre transparente seulement la couleur de fond plutôt que tout le bloc.

    Le résultat est plutôt sympathique (figure suivante).

    La bannière est mise en forme
    La bannière est mise en forme

    Cela en jette, vous ne trouvez pas ?

    Le corps

    Le corps, au centre de la page, est dans notre cas constitué d'une unique balise <section> (mais il pourrait y en avoir plusieurs, bien sûr).

    Pas beaucoup de difficultés sur le corps, le positionnement du bloc « À propos de l'auteur » se fait en inline-block. On joue avec les angles arrondis et les ombres, on ajuste un peu les marges et les dimensions du texte, et nous y voilà !

    /* Corps */
    
    article, aside
    {
        display: inline-block;
        vertical-align: top;
        text-align: justify;
    }
    
    article
    {
        width: 625px;
        margin-right: 15px;
    }
    
    .ico_categorie
    {
        vertical-align: middle;
        margin-right: 8px;
    }
    
    article p
    {
        font-size: 0.8em;
    }
    
    aside
    {
        position: relative;
        width: 235px;
        background-color: #706b64;
        box-shadow: 0px 2px 5px #1c1a19;
        border-radius: 5px;
        padding: 10px;
        color: white;
        font-size: 0.9em;
    }
    
    #fleche_bulle
    {
        position: absolute;
        top: 100px;
        left: -12px;
    }
    
    #photo_zozor
    {
        text-align: center;
    }
    
    #photo_zozor img
    {
        border: 1px solid #181818;
    }
    
    aside img
    {
        margin-right: 5px;
    }

    La petite difficulté ici était de réussir à placer la flèche à gauche du bloc <aside> « À propos de l'auteur » pour donner l'effet d'une bulle. Là encore, notre meilleur ami est le positionnement absolu. La technique est la même : je positionne le bloc <aside> en relatif (sans effectuer de décalage), ce qui me permet ensuite de positionner l'image de la flèche en absolu par rapport au bloc <aside> (et non par rapport à la page entière). En jouant sur le décalage de l'image, je peux la placer avec précision où je veux, au pixel près (figure suivante) !

    Le corps de la page est mis en forme
    Le corps de la page est mis en forme

    Le pied de page

    Il ne nous reste plus que le pied de page à mettre en forme. Celui-ci est constitué de trois sous-blocs que j'ai matérialisés par des <div> auxquels j'ai donné des id pour mieux les repérer. Ces blocs sont positionnés en inline-block les uns à côté des autres.

    /* Footer */
    
    footer
    {
        background:  url('images/ico_top.png') no-repeat top center, url('images/separateur.png') repeat-x top, url('images/ombre.png') repeat-x top;
        padding-top: 25px;
    }
    
    footer p, footer ul
    {
        font-size: 0.8em;
    }
    
    footer h1
    {
        font-size: 1.1em;
    }
    
    #tweet, #mes_photos, #mes_amis
    {
        display: inline-block;
        vertical-align: top;
    }
    
    #tweet
    {
        width: 28%;
    }
    
    #mes_photos
    {
        width: 35%;
    }
    
    #mes_amis
    {
        width: 31%;
    }
    
    #mes_photos img
    {
        border: 1px solid #181818;
        margin-right: 2px;
    }
    
    #mes_amis ul
    {
        display: inline-block;
        vertical-align: top;
        margin-top: 0;
        width: 48%;
        list-style-image: url('images/ico_liensexterne.png');
        padding-left: 2px;
    }
    
    #mes_amis a
    {
        text-decoration: none;
        color: #760001;
    }

    Deux petites particularités à signaler sur le pied de page :

    Et voilà, notre design est terminé (figure suivante) !

    Le pied de page est mis en forme
    Le pied de page est mis en forme

    Ah, vous pensez en avoir fini ? Il reste hélas encore un peu de travail : il faut tester notre site sur différents navigateurs. Idéalement, il vaut mieux le faire au fur et à mesure de la mise en place du design. En particulier, les anciennes versions d'Internet Explorer (IE6 à IE8) méritent qu'on s'y attarde car le résultat n'est pas forcément celui auquel on s'attendait…

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Organiser le contenu en HTML Assurer la compatibilité avec IE

    Assurer la compatibilité avec IE

    Mettre en forme en CSS Vérifier la validité

    Depuis Internet Explorer 9 (IE9), nous n'avons plus vraiment de raisons de nous plaindre du légendaire retard d'Internet Explorer dans la gestion du CSS. Voyez vous-mêmes le résultat (figure suivante), il est très bon sur ce navigateur sans aucune adaptation nécessaire.

    Le site sous IE9 : aucun problème à signaler !
    Le site sous IE9 : aucun problème à signaler !

    Par contre, vous risquez d'attraper quelques cheveux blancs en regardant le résultat sur les anciennes versions d'Internet Explorer.

    Comment je fais pour voir le résultat sous IE6 à IE8, si je suis équipé d'IE9 ?

    Je vous avais parlé d'IETester, un outil pratique mais instable (il plante souvent). Vous pouvez l'essayer pour tester votre site sur les anciennes versions d'IE.

    Il y a cependant une solution plus stable et plus rapide : appuyez sur la touche F12 de votre clavier lorsque vous êtes sous IE9 et une barre dédiée aux développeurs web apparaît. Là, un menu vous permet de changer le comportement d'IE (figure suivante) afin de simuler les anciennes versions (à partir de IE7).

    Changement du moteur de rendu sous IE
    Changement du moteur de rendu sous IE

    Là, en général, il arrive qu'on prenne très peur.

    La figure suivante vous montre ce qu'on obtient en « mode IE7 ».

    Le site sous IE7 : rien ne s'affiche correctement !
    Le site sous IE7 : rien ne s'affiche correctement !

    Avant de préparer votre valise pour aller vivre en Patagonie loin de ce monde cruel, laissez-moi vous redonner le moral avec cette phrase rassurante : tout problème a une solution (répétez cela autant de fois que nécessaire).

    En fait, notre site ne rencontre que deux problèmes principaux sur les anciennes versions d'IE :

    Par contre, il faudra faire une croix sur certaines fonctionnalités plus récentes de CSS3 qui ne sont pas gérées sur ces vieilles versions :

    Étant donné que ce sont des fonctionnalités liées à l'apparence, nous ne chercherons pas à les faire fonctionner sur les anciennes versions d'IE. Si toutefois vous y tenez, sachez que, là encore, des scripts existent et permettent d'émuler la plupart de ces fonctionnalités manquantes, mais cela vous demandera pas mal de travail supplémentaire et votre site risque d'être plus lent sur ces navigateurs. Du moment que le site reste lisible sur les anciennes versions d'IE, je vous recommande de ne pas vous préoccuper trop de ces problèmes.

    Faire fonctionner les balises structurantes de HTML5

    Nous l'avons vu, il suffit d'ajouter un simple bout de code JavaScript dans l'en-tête de son site et le tour est joué (lignes 6 à 8) :

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <link rel="stylesheet" href="style.css" />
            <!--[if lt IE 9]>
            <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
            <![endif]-->
            <title>Zozor - Carnets de voyage</title>
        </head>

    Régler le positionnement inline-block

    Pour gérer le positionnement inline-block, nous avons vu qu'il était nécessaire de créer une feuille de style spéciale pour les anciennes versions d'Internet Explorer. Il faut utiliser un CSS un peu différent pour que les vieilles versions d'IE « comprennent » ce qu'il faut faire.

    En créant une feuille de style spéciale pour les vieilles versions d'IE (qu'on pourrait appeler style_ie.css) et en utilisant la technique ci-dessous, on peut reproduire le comportement des inline-block :

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <link rel="stylesheet" href="style.css" />
            <!--[if lte IE 7]>
            <link rel="stylesheet" href="style_ie.css" />
            <![endif]-->
    
            <title>Zozor - Le Site Web</title>
        </head>

    La feuille de style style_ie.css contiendra des déclarations comme celle-ci :

    element
    {
        display: inline;
        zoom: 1;
    }

    Cette technique doit être appliquée sur chaque élément positionné en inline-block.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Mettre en forme en CSS Vérifier la validité

    Vérifier la validité

    Assurer la compatibilité avec IE Le code final

    Le W3C propose sur son site web un outil appelé le « Validateur » (« Validator » en anglais).

    Le validateur est une sorte de programme qui va analyser votre code source et vous dire s'il est correctement écrit ou s'il comporte des erreurs que vous devez corriger.

    Souvenez-vous : le W3C a établi des normes. Il est nécessaire de les respecter, pour qu'on soit sûr que tous les sites web parlent la même « langue ».

    Il existe un validateur pour HTML et un validateur pour CSS (à mettre dans vos favoris !). Celui pour CSS comportant quelques bugs (il signale comme invalides des feuilles CSS qui sont tout à fait valides), nous ne nous y attarderons pas. Par contre, le validateur HTML va être très intéressant pour nous : voici son adresse http://validator.w3.org.

    Vous pouvez valider votre page web de trois façons différentes, c'est pour cela qu'il y a trois onglets :

    Pour le moment, notre site web n'est pas encore disponible sur le Web, ce qui fait qu'il n'a pas d'adresse URL. Le mieux est donc d'envoyer le fichier .html que l'on a fait ou encore de copier-coller directement le code HTML.

    Si vous envoyez votre code HTML et que tout se passe bien, le validateur va vous répondre avec le message représenté à la figure suivante.

    Le validateur du W3C nous informe que notre page ne comporte pas d'erreur
    Le validateur du W3C nous informe que notre page ne comporte pas d'erreur

    Dans ce cas, cela signifie que tout va bien et que vous avez bien construit votre page !

    Malheureusement, il arrivera souvent que vous ayez des erreurs. Dans ce cas, évitez de paniquer comme cela :

    AU SEEECOUUUUUUUURS !!! Ma page web n'est pas valide, je ne vais pas m'en sortir, je suis cerné par les erreurs, faites quelque chose aidez-mmmoiiiiii !

    Vous aviez une belle page web, elle s'affichait bien, elle était jolie, et pourtant le validateur vous répond avec un message rouge inquiétant, en vous disant que votre page web n'est pas bien construite.

    Tout d'abord, mettez-vous bien ceci en tête : ce n'est pas parce que votre page web s'affiche correctement qu'elle ne comporte pas d'erreur. Votre page web peut être toute belle et comporter beaucoup d'erreurs.

    Quel intérêt de les corriger alors ?

    Il faut savoir que les navigateurs « essaient » de ne pas afficher les erreurs, lorsqu'ils en rencontrent, pour ne pas perturber l'internaute. Mais rien ne vous dit que d'autres navigateurs ne vont pas se comporter bizarrement !

    Avoir une page web valide, c'est donc avoir la possibilité de dormir tranquille en sachant que l'on a bien fait les choses comme il faut. Cela simplifie le travail des programmes qui lisent les pages web.

    De plus, et c'est vérifié, une page web correctement construite aura plus de chances d'être mieux positionnée dans les résultats de recherche de Google, ce qui vous amènera… plus de visiteurs !

    Voici une liste de conseils qui peuvent vous aider à résoudre les erreurs qui risquent de vous être signalées tôt ou tard :

    <p>Ceci est un texte correctement placé dans un paragraphe.
    <br />
    Les balises <br /> doivent se trouver à l'intérieur d'un paragraphe, ne l'oubliez pas</p>
    
    Ceci est un texte en-dehors d'un paragraphe. C'est interdit.
    <br />
  • Toutes vos images doivent comporter un attributalt qui indique ce que contient l'image. Si, par hasard, votre image est purement décorative (vous ne pouvez pas en trouver de description), vous êtes autorisés à ne rien mettre comme valeur pour l'attribut alt.

  • <!-- L'image comporte une description -->
    <img src="photo.jpg" alt="Une photo de moi" />
    
    <!-- L'image ne comporte pas de description mais a quand même un attribut alt -->
    <img src="deco.png" alt="" />
  • Vos balises doivent être fermées dans l'ordre.

  • <!-- Les balises ne sont pas fermées dans leur ordre d'ouverture -->
    <p>Texte <em>important</p></em>
    
    <!-- Les balises sont fermées dans leur ordre d'ouverture -->
    <p>Texte <em>important</em></p>

    Gardez bien ce schéma en tête, beaucoup de débutants font cette erreur.

  • Si vos liens comportent des &, vous devez les remplacer par le code &amp; pour éviter toute confusion au navigateur.

  • <!-- Exemple d'un mauvais lien en HTML -->
    <a href="http://www.site.com/?jour=15&mois=10&an=2000">
    
    <!-- Exemple d'un bon lien en HTML -->
    <a href="http://www.site.com/?jour=15&amp;mois=10&amp;an=2000">
  • Vérifiez enfin que vous n'avez pas utilisé des balises anciennes et désormais obsolètes en HTML5 (comme le vieux <frame>, la balise <marquee>

  • Le validateur vous dira « Element XXX undefined » (balise inconnue) ou encore « There is no attribute XXX » (attribut inconnu).

    Tout le monde fait des erreurs, alors ne paniquez pas. Corrigez pas à pas votre page web jusqu'à ce que le validateur vous affiche un beau résultat en vert.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Assurer la compatibilité avec IE Le code final

    Le code final

    Vérifier la validité Les tableaux

    Je mets à disposition le code final de la page web que nous avons réalisée. Vous pouvez également visualiser le résultat (figure suivante) en ligne grâce à un code web.

    Apparence finale du site webApparence finale du site web

    Vous pouvez aussi télécharger un fichier ZIP contenant tous les fichiers du site pour pouvoir le tester chez vous :

    Télécharger les fichiers du site (500 Ko)

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Vérifier la validité Les tableaux

    Les tableaux

    Le code final Un tableau simple

    Indispensables pour organiser les informations, les tableaux sont un petit peu délicats à construire en HTML : cela explique que je vous les présente seulement maintenant. Il va en effet falloir imbriquer de nouvelles balises HTML dans un ordre précis.

    Nous allons commencer par construire des tableaux basiques, puis nous les complexifierons au fur et à mesure : fusion de cellules, division en multiples sections… Nous découvrirons aussi les propriétés CSS liées aux tableaux, qui nous permettront de personnaliser leur apparence.

    Un tableau simple

    Les tableaux Un tableau structuré

    La première balise à connaître est <table> </table>. C'est cette balise qui permet d'indiquer le début et la fin d'un tableau.

    Cette balise est de type bloc, il faut donc la placer en dehors d'un paragraphe. Exemple :

    <p>Ceci est un paragraphe avant le tableau.</p>
    
    <table>
       <!-- Ici, on écrira le contenu du tableau -->
    </table>
    
    <p>Ceci est un paragraphe après le tableau.</p>

    Bon, et qu'écrit-on à l'intérieur du tableau ?

    Là, préparez-vous à subir une avalanche de nouvelles balises.

    Pour commencer en douceur, voici deux nouvelles balises très importantes :

    En HTML, un tableau se construit ligne par ligne. Dans chaque ligne (<tr>), on indique le contenu des différentes cellules (<td>).

    Schématiquement, un tableau se construit comme à la figure suivante.

    Un tableau, avec des cellules contenues dans des lignes
    Un tableau, avec des cellules contenues dans des lignes

    On a une balise de ligne (<tr>) qui englobe un groupe de cellules (<td>).

    Par exemple, si je veux faire un tableau à deux lignes, avec trois cellules par ligne (donc trois colonnes), je devrai taper ceci :

    <table>
       <tr>
           <td>Carmen</td>
           <td>33 ans</td>
           <td>Espagne</td>
       </tr>
       <tr>
           <td>Michelle</td>
           <td>26 ans</td>
           <td>États-Unis</td>
       </tr>
    </table>

    Le résultat est un peu déprimant (figure suivante).

    Un tableau sans bordures
    Un tableau sans bordures

    C'est un tableau ça ?

    Le texte s'est écrit à la suite et il n'y a même pas de bordures !

    Oui, un tableau sans CSS paraît bien vide. Et justement, rajouter des bordures est très simple, vous connaissez déjà le code CSS correspondant !

    td /* Toutes les cellules des tableaux... */
    {
        border: 1px solid black; /* auront une bordure de 1px */
    }

    Et voici le résultat à la figure suivante.

    Chaque cellule a sa propre bordure
    Chaque cellule a sa propre bordure

    Hum, ce n'est pas encore aussi parfait que ce qu'on voudrait. En effet, on aimerait qu'il n'y ait qu'une seule bordure entre deux cellules, or ce n'est pas le cas ici.

    Heureusement, il existe une propriété CSS spécifique aux tableaux, border-collapse, qui signifie « coller les bordures entre elles ».

    Cette propriété peut prendre deux valeurs :

    table
    {
        border-collapse: collapse; /* Les bordures du tableau seront collées (plus joli) */
    }
    td
    {
        border: 1px solid black;
    }

    La figure suivante représente le résultat obtenu.

    Les bordures sont collées les unes aux autres
    Les bordures sont collées les unes aux autres

    Voilà qui est mieux !

    La ligne d'en-tête

    Maintenant que l'on a ce qu'on voulait, on va rajouter la ligne d'en-tête du tableau. Dans l'exemple ci-dessous, les en-têtes sont « Nom », « Âge » et « Pays ».

    La ligne d'en-tête se crée avec un <tr> comme on l'a fait jusqu'ici, mais les cellules qu'elle contient sont, cette fois, encadrées par des balises <th> et non pas <td> !

    <table>
       <tr>
           <th>Nom</th>
           <th>Âge</th>
           <th>Pays</th>
       </tr>
    
       <tr>
           <td>Carmen</td>
           <td>33 ans</td>
           <td>Espagne</td>
       </tr>
       <tr>
           <td>Michelle</td>
           <td>26 ans</td>
           <td>États-Unis</td>
       </tr>
    </table>

    La ligne d'en-tête est très facile à reconnaître pour deux raisons :

    Comme le nom des cellules est un peu différent pour l'en-tête, il faut penser à mettre à jour le CSS pour lui dire d'appliquer une bordure sur les cellules normales et sur l'en-tête (figure suivante).

    table
    {
        border-collapse: collapse;
    }
    td, th /* Mettre une bordure sur les td ET les th */
    {
        border: 1px solid black;
    }
    Un tableau avec un en-tête
    Un tableau avec un en-tête

    Comme vous pouvez le constater, votre navigateur a mis en gras le texte des cellules d'en-tête. C'est ce que font en général les navigateurs mais, si vous le désirez, vous pouvez changer cela à coups de CSS : modifier la couleur de fond des cellules d'en-tête, leur police, leur bordure, etc.

    Titre du tableau

    Normalement, tout tableau doit avoir un titre. Le titre permet de renseigner rapidement le visiteur sur le contenu du tableau.

    Notre exemple est constitué d'une liste de personnes… oui mais alors ? Qu'est-ce que cela représente ? Sans titre de tableau, vous le voyez, on est un peu perdu.

    Heureusement, il y a <caption> !

    Cette balise se place tout au début du tableau, juste avant l'en-tête. C'est elle qui contient le titre du tableau (figure suivante) :

    <table>
       <caption>Passagers du vol 377</caption>
    
       <tr>
           <th>Nom</th>
           <th>Âge</th>
           <th>Pays</th>
       </tr>
       <tr>
           <td>Carmen</td>
           <td>33 ans</td>
           <td>Espagne</td>
       </tr>
       <tr>
           <td>Michelle</td>
           <td>26 ans</td>
           <td>États-Unis</td>
       </tr>
    </table>
    Un tableau avec un titre
    Un tableau avec un titre

    C'est quand même plus clair !

    Sachez que vous pouvez changer la position du titre avec la propriété CSS caption-side qui peut prendre deux valeurs :

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les tableaux Un tableau structuré

    Un tableau structuré

    Un tableau simple Les formulaires

    Nous avons appris à construire des petits tableaux simples. Ces petits tableaux suffisent dans la plupart des cas, mais il arrivera que vous ayez besoin de réaliser des tableaux plus… complexes.

    Nous allons découvrir deux techniques particulières :

    Diviser un gros tableau

    Si votre tableau est assez gros, vous aurez tout intérêt à le découper en plusieurs parties. Pour cela, il existe des balises HTML qui permettent de définir les trois « zones » du tableau :

    Que mettre dans le pied de tableau ? Généralement, si c'est un long tableau, vous y recopiez les cellules d'en-tête. Cela permet de voir, même en bas du tableau, à quoi se rapporte chacune des colonnes. Schématiquement, un tableau en trois parties se découpe donc comme illustré à la figure suivante.

    Un tableau découpé en plusieurs parties
    Un tableau découpé en plusieurs parties

    C'est un peu déroutant mais il est conseillé d'écrire les balises dans l'ordre suivant :

    1. <thead>

    2. <tfoot>

    3. <tbody>

    Dans le code, on renseigne donc d'abord la partie du haut, ensuite la partie du bas, et enfin la partie principale (<tbody>). Le navigateur se chargera d'afficher chaque élément au bon endroit, ne vous inquiétez pas.

    Voici donc le code à écrire pour construire le tableau en trois parties :

    <table>
       <caption>Passagers du vol 377</caption>
    
       <thead> <!-- En-tête du tableau -->
           <tr>
               <th>Nom</th>
               <th>Âge</th>
               <th>Pays</th>
           </tr>
       </thead>
    
       <tfoot> <!-- Pied de tableau -->
           <tr>
               <th>Nom</th>
               <th>Âge</th>
               <th>Pays</th>
           </tr>
       </tfoot>
    
       <tbody> <!-- Corps du tableau -->
           <tr>
               <td>Carmen</td>
               <td>33 ans</td>
               <td>Espagne</td>
           </tr>
           <tr>
               <td>Michelle</td>
               <td>26 ans</td>
               <td>États-Unis</td>
           </tr>
           <tr>
               <td>François</td>
               <td>43 ans</td>
               <td>France</td>
           </tr>
           <tr>
               <td>Martine</td>
               <td>34 ans</td>
               <td>France</td>
           </tr>
           <tr>
               <td>Jonathan</td>
               <td>13 ans</td>
               <td>Australie</td>
           </tr>
           <tr>
               <td>Xu</td>
               <td>19 ans</td>
               <td>Chine</td>
           </tr>
       </tbody>
    </table>

    3, 2, 1… Fusioooon !

    Dans certains tableaux complexes, vous aurez besoin de « fusionner » des cellules entre elles.

    Un exemple de fusion ? Regardez le tableau à la figure suivante, qui dresse une liste de films et indique à qui ils s'adressent.

    Un tableau contenant des titres de films et leur public
    Un tableau contenant des titres de films et leur public

    Pour le dernier film, vous voyez que les cellules ont été fusionnées : elles ne font plus qu'une. C'est exactement l'effet qu'on cherche à obtenir.

    Pour effectuer une fusion, on rajoute un attribut à la balise <td>. Il faut savoir qu'il existe deux types de fusion :

    Comme vous le savez, vous devez donner une valeur à l'attribut (que ce soit colspan ou rowspan). Il faut indiquer le nombre de cellules à fusionner entre elles. Dans notre exemple, nous avons fusionné deux cellules : celle de la colonne « Pour enfants ? » et celle de « Pour adolescents ? ». On devra donc écrire :

    <td colspan="2">

    … qui signifie : « Cette cellule est la fusion de deux cellules ». Il est possible de fusionner plus de cellules à la fois (trois, quatre, cinq… autant que vous voulez).

    Voilà le code HTML qui me permet de réaliser la fusion correspondant au tableau précédent :

    <table>
       <tr>
           <th>Titre du film</th>
           <th>Pour enfants ?</th>
           <th>Pour adolescents ?</th>
       </tr>
       <tr>
           <td>Massacre à la tronçonneuse</td>
           <td >Non, trop violent</td>
           <td>Oui</td>
       </tr>
       <tr>
           <td>Les bisounours font du ski</td>
           <td>Oui, adapté</td>
           <td>Pas assez violent...</td>
       </tr>
       <tr>
           <td>Lucky Luke, seul contre tous</td>
           <td colspan="2">Pour toute la famille !</td>
       </tr>
    </table>

    Une remarque importante : vous voyez que la ligne 19 ne contient que deux cellules au lieu de trois (il n'y a que deux balises <td>). C'est tout à fait normal car j'ai fusionné les deux dernières cellules entre elles. Le <td colspan="2"> indique que cette cellule prend la place de deux cellules à la fois.

    Et pour la fusion verticale avec rowspan, on fait comment ?

    Cela se complique un petit peu. Pour notre exemple, nous allons « inverser » l'ordre de notre tableau : au lieu de mettre les titres de films à gauche, on va les placer en haut.

    C'est une autre façon de voir le tableau : au lieu de le construire en hauteur, on peut le construire en longueur.

    Dans ce cas, le colspan n'est plus adapté, c'est un rowspan qu'il faut utiliser :

    <table>
       <tr>
           <th>Titre du film</th>
           <td>Massacre à la tronçonneuse</td>
           <td>Les bisounours font du ski</td>
           <td>Lucky Luke, seul contre tous</td>
       </tr>
       <tr>
           <th>Pour enfants ?</th>
           <td>Non, trop violent</td>
           <td>Oui, adapté</td>
           <td rowspan="2">Pour toute la famille !</td>
       </tr>
       <tr>
           <th>Pour adolescents ?</th>
           <td>Oui</td>
           <td>Pas assez violent...</td>
       </tr>
    </table>

    Résultat : les cellules sont fusionnées verticalement (figure suivante) !

    Les cellules ont été fusionnées verticalement
    Les cellules ont été fusionnées verticalement

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Un tableau simple Les formulaires

    Les formulaires

    Un tableau structuré Créer un formulaire

    Toute page HTML peut être enrichie de formulaires interactifs, qui invitent vos visiteurs à renseigner des informations : saisir du texte, sélectionner des options, valider avec un bouton… tout est possible !

    Nous arrivons cependant aux limites du langage HTML car il faut ensuite pouvoir analyser les informations que le visiteur a saisies… et cela ne peut pas se faire en langage HTML. Comme nous allons le voir, le traitement des résultats doit s'effectuer dans un autre langage, par exemple le PHP.

    En attendant, nous avons un grand nombre de nouvelles balises HTML à découvrir. Bienvenue dans le monde merveilleux des formulaires, un monde où les boutons, les cases à cocher et les listes déroulantes vivent en harmonie (enfin presque).

    Créer un formulaire

    Les formulaires Les zones de saisie basiques

    Lorsqu'il vous prend subitement l'envie d'insérer un formulaire dans votre page HTML, vous devez pour commencer écrire une balise <form> </form>. C'est la balise principale du formulaire, elle permet d'en indiquer le début et la fin.

    <p>Texte avant le formulaire</p>
    
    <form>
       <p>Texte à l'intérieur du formulaire</p>
    </form>
    
    <p>Texte après le formulaire</p>

    Voilà pour la structure de base. Maintenant, soyez attentifs : ce que j'ai à vous dire n'est pas évident parce qu'on est à la limite du HTML.

    On va prendre un exemple pour que les choses soient claires. Supposons que votre visiteur vienne de taper un commentaire dans votre formulaire, par exemple un message qu'il aimerait publier sur vos forums. Ce message doit être envoyé pour que vous puissiez le recevoir (logique, non ?) et l'afficher pour vos autres visiteurs.

    Eh bien c'est là le problème, ou plutôt les problèmes, que l'on va se poser :

    Pour fournir les réponses à ces deux problèmes, vous devez ajouter deux attributs à la balise <form> :

    On va donc maintenant compléter la balise <form> avec les deux attributs qu'on vient de voir.

    Pour method, vous l'aurez deviné, je vais mettre la valeur post.

    Pour action, je vais taper le nom d'une page fictive en PHP (traitement.php). C'est cette page qui sera appelée lorsque le visiteur cliquera sur le bouton d'envoi du formulaire.

    <p>Texte avant le formulaire</p>
    
    <form method="post" action="traitement.php">
       <p>Texte à l'intérieur du formulaire</p>
    </form>
    
    <p>Texte après le formulaire</p>

    Pour le moment, on ne sait pas ce qu'il se passe à l'intérieur de la page traitement.php : je vous demande de me faire confiance et d'imaginer que cette page existe et fonctionne.

    Notre priorité, pour le moment, est de découvrir en HTML/CSS comment faire pour insérer des zones de texte, des boutons et des cases à cocher dans votre page web. C'est ce que nous allons voir maintenant.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les formulaires Les zones de saisie basiques

    Les zones de saisie basiques

    Créer un formulaire Les zones de saisie enrichies

    Bien, retour au concret.

    Nous allons passer en revue les différentes balises HTML permettant de saisir du texte dans un formulaire.

    Il faut savoir qu'il y a deux zones de texte différentes :

    Zone de texte monoligne

    La figure suivante montre à quoi ressemble une zone de texte monoligne.

    Une zone de texte monoligne
    Une zone de texte monoligne

    Pour insérer une zone de texte dans une ligne, on va utiliser la balise <input />.

    Pour créer une zone de texte à une ligne, on doit écrire :

    <input type="text" />

    Ce n'est pas encore suffisant : il faut donner un nom à votre zone de texte. Ce nom n'apparaît pas sur la page mais il vous sera indispensable par la suite. En effet, cela vous permettra (en PHP par exemple) de reconnaître d'où viennent les informations : vous saurez que tel texte est le pseudo du visiteur, tel texte est le mot de passe qu'il a choisi, etc.

    Pour donner un nom à un élément de formulaire, on utilise l'attribut name. Ici, on va supposer qu'on demande au visiteur de rentrer son pseudo :

    <input type="text" name="pseudo" />

    Essayons donc de créer un formulaire très basique avec notre champ de texte :

    <form method="post" action="traitement.php">
       <p><input type="text" name="pseudo" /></p>
    </form>

    Comme d'habitude, je vous invite fortement à essayer ce code chez vous afin d'observer le résultat.

    Les libellés

    Cette zone de texte est bien jolie mais si votre visiteur tombe dessus, il ne sait pas ce qu'il doit écrire. C'est justement le rôle de la balise <label> :

    <form method="post" action="traitement.php">
        <p>
            <label>Votre pseudo</label> : <input type="text" name="pseudo" />
        </p>
    </form>

    Ce code donne exactement le résultat que vous avez pu observer à la figure précédente.

    Mais cela ne suffit pas. Il faut lier le label à la zone de texte.

    Pour ce faire, on doit donner un nom à la zone de texte, non pas avec l'attribut name mais avec l'attribut id (que l'on peut utiliser sur toutes les balises).

    Un name et un id sur le champ ? Cela ne va-t-il pas faire double emploi ?

    Si, un peu. Personnellement, je donne la même valeur au name et à l'id, cela ne pose pas de problème.

    Pour lier le label au champ, il faut lui donner un attribut for qui a la même valeur que l'id du champ… Le mieux est de le voir sur un exemple :

    <form method="post" action="traitement.php">
       <p>
           <label for="pseudo">Votre pseudo</label> : <input type="text" name="pseudo" id="pseudo" />
       </p>
    </form>

    Essayez de cliquer sur le texte « Votre pseudo » : vous allez voir que le curseur se place automatiquement dans la zone de texte correspondante.

    Quelques attributs supplémentaires

    On peut ajouter un certain nombre d'autres attributs à la balise <input /> pour personnaliser son fonctionnement :

    Dans l'exemple suivant, la zone de texte contient une indication permettant de comprendre ce qu'il faut saisir ; le champ fait 30 caractères de long mais on ne peut écrire que 10 caractères maximum à l'intérieur :

    <form method="post" action="traitement.php">
        <p>
            <label for="pseudo">Votre pseudo :</label>
            <input type="text" name="pseudo" id="pseudo" placeholder="Ex : Zozor" size="30" maxlength="10" />
        </p>
    </form>

    Testez vous-mêmes le résultat pour observer le comportement du champ. En attendant, voici le rendu du champ dans son état initial en figure suivante.

    Un champ de texte avec une indication (placeholder)Un champ de texte avec une indication (placeholder)

    Zone de mot de passe

    Vous pouvez facilement faire en sorte que la zone de texte se comporte comme une « zone de mot de passe », c'est-à-dire une zone où on ne voit pas à l'écran les caractères saisis. Pour créer ce type de zone de saisie, utilisez l'attribut type="password".

    Je complète mon formulaire. Il demande maintenant au visiteur son pseudo et son mot de passe :

    <form method="post" action="traitement.php">
       <p>
           <label for="pseudo">Votre pseudo :</label>
           <input type="text" name="pseudo" id="pseudo" />
           
           <br />
           <label for="pass">Votre mot de passe :</label>
           <input type="password" name="pass" id="pass" />
           
       </p>
    </form>

    Testez la zone de mot de passe : vous verrez que les caractères ne s'affichent pas à l'écran, comme sur la figure suivante.

    Une zone de saisie de mot de passeUne zone de saisie de mot de passe

    Zone de texte multiligne

    Pour créer une zone de texte multiligne, on change de balise : nous allons utiliser <textarea> </textarea>.

    Comme pour tout autre élément du formulaire, il faut lui donner un nom avec name et utiliser un label qui explique de quoi il s'agit.

    <form method="post" action="traitement.php">
       <p>
           <label for="ameliorer">Comment pensez-vous que je pourrais améliorer mon site ?</label><br />
           <textarea name="ameliorer" id="ameliorer"></textarea>
       </p>
    </form>

    Et voici le résultat en image (figure suivante) !

    Une (petite) zone de saisie multiligne
    Une (petite) zone de saisie multiligne

    Comme vous pouvez le constater, c'est un peu petit ! Heureusement, on peut modifier la taille du <textarea> de deux façons différentes.

    Pourquoi ouvre-t-on la balise <textarea> pour la fermer juste après ?

    Vous pouvez pré-remplir le <textarea> avec une valeur par défaut. Dans ce cas, on n'utilise pas l'attribut value : on écrit tout simplement le texte par défaut entre la balise ouvrante et la balise fermante !

    <form method="post" action="traitement.php">
       <p>
           <label for="ameliorer">
           Comment pensez-vous que je puisse améliorer mon site ?
           </label>
           <br />
           
           <textarea name="ameliorer" id="ameliorer" rows="10" cols="50">
           Améliorer ton site ?!
           Mais enfin ! Il est tellement génialissime qu'il n'est pas nécessaire de l'améliorer !
           </textarea>       
       </p>
    </form>

    Et voici le résultat à la figure suivante.

    Une zone de saisie multiligne pré-remplie
    Une zone de saisie multiligne pré-remplie
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Créer un formulaire Les zones de saisie enrichies

    Les zones de saisie enrichies

    Les zones de saisie basiques Les éléments d'options

    HTML5 apporte de nombreuses fonctionnalités nouvelles relatives aux formulaires. De nouveaux types de champs sont en effet apparus avec cette version. Il suffit de donner à l'attribut type de la balise <input /> l'une des nouvelles valeurs disponibles. Faisons un petit tour d'horizon !

    E-mail

    Vous pouvez demander à saisir une adresse e-mail :

    <input type="email" />

    Le champ vous semblera a priori identique mais votre navigateur sait désormais que l'utilisateur doit saisir une adresse e-mail. Il peut afficher une indication si l'adresse n'est pas un e-mail, c'est ce que fait Firefox par exemple (figure suivante).

    Un champ e-mail mal renseigné est entouré de rouge dans Firefox
    Un champ e-mail mal renseigné est entouré de rouge dans Firefox

    Sachez que certains navigateurs, comme les navigateurs mobiles sur iPhone et Android, affichent un clavier adapté à la saisie d'e-mail (figure suivante).

    Clavier de saisie d'e-mail sur un iPhone
    Clavier de saisie d'e-mail sur un iPhone

    Une URL

    Avec le type url, on peut demander à saisir une adresse absolue (commençant généralement par http://) :

    <input type="url" />

    Même principe : si le champ ne vous semble pas différent sur votre ordinateur, sachez que celui-ci comprend bel et bien que le visiteur est censé saisir une adresse. Les navigateurs mobiles affichent par exemple un clavier adapté à la saisie d'URL (figure suivante).

    Clavier de saisie d'URL sur iPhone
    Clavier de saisie d'URL sur iPhone

    Numéro de téléphone

    Ce champ est dédié à la saisie de numéros de téléphone :

    <input type="tel" />

    Sur iPhone, par exemple, un clavier adapté s'affiche lorsqu'on doit remplir le champ (figure suivante).

    Clavier de saisie de numéro de téléphone sur un iPhone
    Clavier de saisie de numéro de téléphone sur un iPhone

    Nombre

    Ce champ permet de saisir un nombre entier :

    <input type="number" />

    Le champ s'affichera en général avec des petites flèches pour changer la valeur (figure suivante).

    Champ de saisie de nombreChamp de saisie de nombre

    Vous pouvez personnaliser le fonctionnement du champ avec les attributs suivants :

    Un curseur

    Le type range permet de sélectionner un nombre avec un curseur (aussi appelé slider), comme à la figure suivante :

    <input type="range" />

    Un curseur grâce au type rangeUn curseur grâce au type range

    Vous pouvez utiliser là aussi les attributs min, max et step pour restreindre les valeurs disponibles.

    Couleur

    Ce champ permet de saisir une couleur :

    <input type="color" />

    En pratique, il reste assez peu mis en œuvre par les navigateurs à l'heure actuelle. Ne vous étonnez pas si vous voyez seulement un champ de texte classique.

    Date

    Différents types de champs de sélection de date existent :

    Exemple :

    <input type="date" />

    Comme vous le voyez, il y a le choix !

    À l'heure actuelle, peu de navigateurs gèrent ce type de champ à part Opera.

    Recherche

    On peut créer un champ de recherche comme ceci :

    <input type="search" />

    Le navigateur décide ensuite comment afficher le champ de recherche. Ainsi, il peut ajouter une petite loupe au champ pour signifier que c'est un champ de recherche et éventuellement mémoriser les dernières recherches effectuées par le visiteur.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les zones de saisie basiques Les éléments d'options

    Les éléments d'options

    Les zones de saisie enrichies Finaliser et envoyer le formulaire

    HTML vous offre une ribambelle d'éléments d'options à utiliser dans votre formulaire. Ce sont des éléments qui demandent au visiteur de faire un choix parmi une liste de possibilités. Nous allons passer en revue :

    Les cases à cocher

    Créer une case à cocher ? Rien de plus simple ! Nous allons réutiliser la balise <input />, en spécifiant cette fois le type checkbox :

    <input type="checkbox" name="choix" />

    Rajoutez un <label> bien placé, et le tour est joué !

    <form method="post" action="traitement.php">
       <p>
           Cochez les aliments que vous aimez manger :<br />
           <input type="checkbox" name="frites" id="frites" /> <label for="frites">Frites</label><br />
           <input type="checkbox" name="steak" id="steak" /> <label for="steak">Steak haché</label><br />
           <input type="checkbox" name="epinards" id="epinards" /> <label for="epinards">Epinards</label><br />
           <input type="checkbox" name="huitres" id="huitres" /> <label for="huitres">Huitres</label>
       </p>
    </form>

    Et voici le résultat en figure suivante.

    Des cases à cocher
    Des cases à cocher

    N'oubliez pas de donner un nom différent à chaque case à cocher, cela vous permettra d'identifier plus tard lesquelles ont été cochées par le visiteur.

    Enfin, sachez que vous pouvez faire en sorte qu'une case soit cochée par défaut avec l'attribut checked :

    <input type="checkbox" name="choix" checked />

    Les zones d'options

    Les zones d'options vous permettent de faire un choix (et un seul) parmi une liste de possibilités. Elles ressemblent un peu aux cases à cocher mais il y a une petite difficulté supplémentaire : elles doivent être organisées en groupes. Les options d'un même groupe possèdent le même nom (name), mais chaque option doit avoir une valeur (value) différente.

    La balise à utiliser est toujours un <input />, avec cette fois la valeur radio pour l'attribut type.

    Les choses seront plus claires sur l'exemple ci-dessous :

    <form method="post" action="traitement.php">
       <p>
           Veuillez indiquer la tranche d'âge dans laquelle vous vous situez :<br />
           <input type="radio" name="age" value="moins15" id="moins15" /> <label for="moins15">Moins de 15 ans</label><br />
           <input type="radio" name="age" value="medium15-25" id="medium15-25" /> <label for="medium15-25">15-25 ans</label><br />
           <input type="radio" name="age" value="medium25-40" id="medium25-40" /> <label for="medium25-40">25-40 ans</label><br />
           <input type="radio" name="age" value="plus40" id="plus40" /> <label for="plus40">Encore plus vieux que ça ?!</label>
       </p>
    </form>

    Ce qui nous donne la figure suivante.

    Des boutons radio
    Des boutons radio

    Pourquoi avoir mis le même nom pour chaque option ? Tout simplement pour que le navigateur sache de quel « groupe » le bouton fait partie.

    Essayez d'enlever les attributs name, vous verrez qu'il devient possible de sélectionner tous les éléments d'options. Or, ce n'est pas ce que l'on veut, c'est pour cela qu'on les « lie » entre eux en leur donnant un nom identique.

    Si vous avez deux zones d'options différentes, il faut donner un name unique à chaque groupe, comme ceci :

    <form method="post" action="traitement.php">
       <p>
           Veuillez indiquer la tranche d'âge dans laquelle vous vous situez :<br />
           <input type="radio" name="age" value="moins15" id="moins15" /> <label for="moins15">Moins de 15 ans</label><br />
           <input type="radio" name="age" value="medium15-25" id="medium15-25" /> <label for="medium15-25">15-25 ans</label><br />
           <input type="radio" name="age" value="medium25-40" id="medium25-40" /> <label for="medium25-40">25-40 ans</label><br />
           <input type="radio" name="age" value="plus40" id="plus40" /> <label for="plus40">Encore plus vieux que ça ?!</label>
       </p>
       <p>
           Sur quel continent habitez-vous ?<br />
           <input type="radio" name="continent" value="europe" id="europe" /> <label for="europe">Europe</label><br />
           <input type="radio" name="continent" value="afrique" id="afrique" /> <label for="afrique">Afrique</label><br />
           <input type="radio" name="continent" value="asie" id="asie" /> <label for="asie">Asie</label><br />
           <input type="radio" name="continent" value="amerique" id="amerique" /> <label for="amerique">Amérique</label><br />
           <input type="radio" name="continent" value="australie" id="australie" /> <label for="australie">Australie</label>
       </p>
    </form>

    Les listes déroulantes

    Les listes déroulantes sont un autre moyen élégant de faire un choix parmi plusieurs possibilités. Le fonctionnement est un peu différent. On va utiliser la balise <select> </select> qui indique le début et la fin de la liste déroulante. On ajoute l'attribut name à la balise pour donner un nom à la liste.

    Puis, à l'intérieur du <select> </select>, nous allons placer plusieurs balises <option> </option> (une par choix possible). On ajoute à chacune d'elles un attribut value pour pouvoir identifier ce que le visiteur a choisi.

    Voici un exemple d'utilisation :

    <form method="post" action="traitement.php">
       <p>
           <label for="pays">Dans quel pays habitez-vous ?</label><br />
           <select name="pays" id="pays">
               <option value="france">France</option>
               <option value="espagne">Espagne</option>
               <option value="italie">Italie</option>
               <option value="royaume-uni">Royaume-Uni</option>
               <option value="canada">Canada</option>
               <option value="etats-unis">États-Unis</option>
               <option value="chine">Chine</option>
               <option value="japon">Japon</option>
           </select>
       </p>
    </form>

    Le résultat obtenu est représenté à la figure suivante.

    Une liste déroulanteUne liste déroulante

    Si vous voulez qu'une option soit sélectionnée par défaut, utilisez cette fois l'attribut selected :

    <option value="canada" selected>Canada</option>

    Vous pouvez aussi grouper vos options avec la balise <optgroup> </optgroup>. Dans notre exemple, pourquoi ne pas séparer les pays en fonction de leur continent ?

    <form method="post" action="traitement.php">
       <p>
           <label for="pays">Dans quel pays habitez-vous ?</label><br />
           <select name="pays" id="pays">
               <optgroup label="Europe">
                   <option value="france">France</option>
                   <option value="espagne">Espagne</option>
                   <option value="italie">Italie</option>
                   <option value="royaume-uni">Royaume-Uni</option>
               </optgroup>
               <optgroup label="Amérique">
                   <option value="canada">Canada</option>
                   <option value="etats-unis">Etats-Unis</option>
               </optgroup>
               <optgroup label="Asie">
                   <option value="chine">Chine</option>
                   <option value="japon">Japon</option>
               </optgroup>
           </select>
       </p>
    </form>

    Le résultat obtenu est représenté à la figure suivante.

    Les options sont regroupées par continentLes options sont regroupées par continent

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les zones de saisie enrichies Finaliser et envoyer le formulaire

    Finaliser et envoyer le formulaire

    Les éléments d'options La vidéo et l'audio

    Nous y sommes presque. Il ne nous reste plus qu'à agrémenter notre formulaire de quelques dernières fonctionnalités (comme la validation), puis nous pourrons ajouter le bouton d'envoi du formulaire.

    Regrouper les champs

    Si votre formulaire grossit et comporte beaucoup de champs, il peut être utile de les regrouper au sein de plusieurs balises <fieldset>. Chaque <fieldset> peut contenir une légende avec la balise <legend>. Regardez cet exemple :

    <form method="post" action="traitement.php">
     
       <fieldset>
           <legend>Vos coordonnées</legend> <!-- Titre du fieldset --> 
    
           <label for="nom">Quel est votre nom ?</label>
           <input type="text" name="nom" id="nom" />
    
           <label for="prenom">Quel est votre prénom ?</label>
           <input type="text" name="prenom" id="prenom" />
     
           <label for="email">Quel est votre e-mail ?</label>
           <input type="email" name="email" id="email" />
    
       </fieldset>
     
       <fieldset>
           <legend>Votre souhait</legend> <!-- Titre du fieldset -->
     
           <p>
               Faites un souhait que vous voudriez voir exaucé :
    
               <input type="radio" name="souhait" value="riche" id="riche" /> <label for="riche">Etre riche</label>
               <input type="radio" name="souhait" value="celebre" id="celebre" /> <label for="celebre">Etre célèbre</label>
               <input type="radio" name="souhait" value="intelligent" id="intelligent" /> <label for="intelligent">Etre <strong>encore</strong> plus intelligent</label>
               <input type="radio" name="souhait" value="autre" id="autre" /> <label for="autre">Autre...</label>
           </p>
     
           <p>
               <label for="precisions">Si "Autre", veuillez préciser :</label>
               <textarea name="precisions" id="precisions" cols="40" rows="4"></textarea>
           </p>
       </fieldset>
    </form>

    Le résultat obtenu est représenté à la figure suivante.

    Les champs sont regroupésLes champs sont regroupés

    Sélectionner automatiquement un champ

    Vous pouvez placer automatiquement le curseur dans l'un des champs de votre formulaire avec l'attribut autofocus. Dès que le visiteur chargera la page, le curseur se placera dans ce champ.

    Par exemple, pour que le curseur soit par défaut dans le champ prenom :

    <input type="text" name="prenom" id="prenom" autofocus />

    Rendre un champ obligatoire

    Vous pouvez faire en sorte qu'un champ soit obligatoire en lui donnant l'attribut required.

    <input type="text" name="prenom" id="prenom" required />

    Le navigateur indiquera alors au visiteur, si le champ est vide au moment de l'envoi, qu'il doit impérativement être rempli.

    :required
    {
        background-color: red;
    }

    Le bouton d'envoi

    Il ne nous reste plus qu'à créer le bouton d'envoi. Là encore, la balise <input /> vient à notre secours. Elle existe en quatre versions :

    Pour créer un bouton d'envoi on écrira donc par exemple :

    <input type="submit" value="Envoyer" />

    Ce qui nous donne la figure suivante.

    Un bouton d'envoi
    Un bouton d'envoi

    Lorsque vous cliquez sur le bouton « Envoyer », le formulaire vous amène alors à la page indiquée dans l'attribut action. Souvenez-vous, nous avions imaginé une page fictive : traitement.php.

    Le problème, c'est que vous ne pouvez pas créer cette page seulement en HTML. Il est nécessaire d'apprendre un nouveau langage, comme le PHP, pour pouvoir « récupérer » les informations saisies et décider quoi en faire. Cela tombe bien, j'ai aussi rédigé un cours sur le langage PHP pour ceux que cela intéresse ! Ce cours existe également en livre : Concevez votre site web avec PHP et MySQL, de Mathieu Nebra, paru chez Simple IT dans la collection le Livre du Zéro, ISBN 978-2-9535278-1-0.

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les éléments d'options La vidéo et l'audio

    La vidéo et l'audio

    Finaliser et envoyer le formulaire Les formats audio et vidéo

    Depuis l'arrivée de Youtube et Dailymotion, il est devenu courant aujourd'hui de regarder des vidéos sur des sites web. Il faut dire que l'arrivée du haut débit a aidé à démocratiser les vidéos sur le Web.

    Cependant, aucune balise HTML ne permettait jusqu'ici de gérer la vidéo. Il fallait à la place utiliser un plugin, comme Flash. Encore aujourd'hui, Flash reste de loin le moyen le plus utilisé pour regarder des vidéos sur Youtube, Dailymotion, Vimeo et ailleurs. Mais utiliser un plugin a de nombreux défauts : on dépend de ceux qui gèrent le plugin (en l'occurence, l'entreprise Adobe, qui possède Flash), on ne peut pas toujours contrôler son fonctionnement, il y a parfois des failles de sécurité… Au final, c'est assez lourd.

    C'est pour cela que deux nouvelles balises standard ont été créées en HTML5 : <video> et <audio> !

    Les formats audio et vidéo

    La vidéo et l'audio Insertion d'un élément audio

    Lorsque je vous ai présenté les images et la balise <img />, j'ai commencé par un petit tour d'horizon des différents formats d'images (JPEG, PNG, GIF, etc.). Pour la vidéo et l'audio, je vais faire pareil… mais c'est plus compliqué.

    En fait, le fonctionnement des vidéos est même tellement complexe qu'on pourrait faire un cours entier à ce sujet ! Étant donné qu'on parle ici de HTML, nous n'allons pas passer toutes nos prochaines nuits à étudier les subtilités de l'encodage vidéo. Je vais donc simplifier les choses et vous expliquer juste ce que vous avez besoin de savoir.

    Les formats audio

    Pour diffuser de la musique ou n'importe quel son, il existe de nombreux formats. La plupart d'entre eux sont compressés (comme le sont les images JPEG, PNG et GIF) ce qui permet de réduire leur poids :

    Aucun navigateur ne gère tous ces formats à la fois. Retenez surtout la compatibilité pour les MP3 et OGG :

    Navigateur

    MP3

    OGG

    Internet Explorer

    Oui

    -

    Chrome

    Oui

    Oui

    Firefox

    -

    Oui

    Safari

    Oui

    -

    Opera

    -

    Oui

    Il n'y a pas de format « idéal » reconnu par tous les navigateurs ?

    Eh non ! Heureusement, on pourra proposer différents formats aux navigateurs qui sélectionneront alors celui qu'ils savent lire.

    Les formats vidéo

    Le stockage de la vidéo est autrement plus complexe. On a besoin de trois éléments :

    Quelle est la compatibilité des codecs vidéo sur les différents navigateurs ? Là encore, vous allez voir que c'est un joyeux bazar :

    Navigateur

    H.264

    Ogg Theora

    WebM

    Internet Explorer

    Oui

    -

    Oui

    Chrome

    -

    Oui

    Oui

    Firefox

    -

    Oui

    Oui

    Safari

    Oui

    -

    -

    Opera

    Oui

    Oui

    Oui

    Là encore, aucun format ne sort du lot. Il est conseillé de proposer chaque vidéo dans plusieurs formats pour qu'elle soit lisible sur un maximum de navigateurs.

    Pour convertir une vidéo dans ces différents formats, je vous conseille l'excellent logiciel gratuit Miro Video Converter que vous pouvez télécharger grâce au code web ci-dessous.

    Il vous suffit de glisser-déposer votre vidéo dans la fenêtre du programme et de sélectionner le format de sortie souhaité. Cela vous permettra de créer plusieurs versions de votre vidéo !

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    La vidéo et l'audio Insertion d'un élément audio

    Insertion d'un élément audio

    Les formats audio et vidéo Insertion d'une vidéo

    En théorie, il suffit d'une simple balise pour jouer un son sur notre page :

    <audio src="musique.mp3"></audio>

    En pratique, c'est un peu plus compliqué que cela.

    Si vous testez ce code… vous ne verrez rien ! En effet, le navigateur va seulement télécharger les informations générales sur le fichier (on parle de métadonnées) mais il ne se passera rien de particulier.

    Vous pouvez compléter la balise des attributs suivants :

    Ajoutons les contrôles et ce sera déjà mieux !

    <audio src="hype_home.mp3" controls></audio>

    L'apparence du lecteur audio change en fonction du navigateur. La figure suivante représente par exemple le lecteur audio dans Google Chrome.

    Le lecteur audio dans Google Chrome
    Le lecteur audio dans Google Chrome

    Pourquoi ouvrir la balise pour la refermer immédiatement après ?

    Cela vous permet d'afficher un message ou de proposer une solution de secours pour les navigateurs qui ne gèrent pas cette nouvelle balise. Par exemple :

    <audio src="hype_home.mp3" controls>Veuillez mettre à jour votre navigateur !</audio>

    Ceux qui ont un navigateur récent ne verront pas le message. Les anciens navigateurs, qui ne comprennent pas la balise, afficheront en revanche le texte qui se trouve à l'intérieur.

    On a vu que certains navigateurs ne géraient pas le MP3, comment faire ?

    Il faut proposer plusieurs versions du fichier audio. Dans ce cas, on va construire notre balise comme ceci :

    <audio controls>
        <source src="hype_home.mp3"></source>
        <source src="hype_home.ogg"></source>
    </audio>

    Le navigateur prendra automatiquement le format qu'il reconnaît.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les formats audio et vidéo Insertion d'une vidéo

    Insertion d'une vidéo

    Insertion d'un élément audio Mise en page adaptative avec les Media Queries

    Il suffit d'une simple balise <video> pour insérer une vidéo dans la page :

    <video src="sintel.webm"></video>

    Mais, là encore, vous risquez d'être déçus si vous utilisez seulement ce code. Aucun contrôle ne permet de lancer la vidéo !

    Rajoutons quelques attributs (la plupart sont les mêmes que pour la balise <audio>) :

    Voici un code un peu plus complet :

    <video src="sintel.webm" controls poster="sintel.jpg" width="600"></video>

    Et le résultat à la figure suivante.

    Une vidéo avec les options de lecture et une taille définie
    Une vidéo avec les options de lecture et une taille définie

    Pourquoi ouvrir et refermer immédiatement après la balise ?

    La réponse est la même que pour la balise <audio>. Cela vous permet d'afficher un message ou d'utiliser une technique de secours (en Flash) si le navigateur ne reconnaît pas la balise :

    <video src="sintel.webm" controls poster="sintel.jpg" width="600">
        Il est temps de mettre à jour votre navigateur !
    </video>

    Comment contenter tous les navigateurs, puisque chacun reconnaît des formats vidéo différents ?

    Vous utiliserez la balise <source> à l'intérieur de la balise <video> pour proposer différents formats. Le navigateur prendra celui qu'il reconnaît :

    <video controls poster="sintel.jpg" width="600">
        <source src="sintel.mp4" />
        <source src="sintel.webm" />
        <source src="sintel.ogv" />
    </video>

    Comment afficher la vidéo en plein écran ?

    Ce n'est pas possible à l'heure actuelle. En fait, il existe bien un moyen sous Firefox mais il est un peu caché : il faut faire un clic droit sur la vidéo, puis sélectionner « Plein écran ».

    Il n'y a pas de moyen de forcer le plein écran, même en JavaScript. Cela peut se comprendre, car des sites pourraient perturber fortement la navigation des visiteurs en affichant des vidéos en plein écran sans leur demander leur accord !

    Comment protéger ma vidéo, je ne veux pas qu'on puisse la copier facilement !

    Ce n'est pas possible. Les balises n'ont pas été conçues pour limiter ou empêcher le téléchargement. C'est assez logique quand on y pense : pour que le visiteur puisse voir la vidéo, il faut bien de toute façon qu'il la télécharge d'une manière ou d'une autre !

    N'espérez donc pas empêcher le téléchargement de votre vidéo avec cette technique.

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Insertion d'un élément audio Mise en page adaptative avec les Media Queries

    Mise en page adaptative avec les Media Queries

    Insertion d'une vidéo Mise en place des media queries

    Savez-vous quelle est la première préoccupation des webmasters qui mettent en place le design de leur site ? La résolution d'écran de leurs visiteurs. Eh oui : selon les écrans, il y a plus ou moins de place, plus ou moins de pixels de largeur.

    Cette information est importante lorsque vous construisez un design : comment votre site doit-il s'afficher en fonction des différentes résolutions d'écran ? Si vous avez un écran large, vous risquez d'oublier que certaines personnes naviguent avec des écrans plus petits. Et je ne vous parle même pas des navigateurs des smartphones, qui sont encore moins larges.

    C'est là que les media queries entrent en jeu. Ce sont des règles à appliquer pour changer le design d'un site en fonction des caractéristiques de l'écran ! Grâce à cette technique, nous pourrons créer un design qui s'adapte automatiquement à l'écran de chaque visiteur !

    Mise en place des media queries

    Mise en page adaptative avec les Media Queries Les règles disponibles

    Les media queries font partie des nouveautés de CSS3. Il ne s'agit pas de nouvelles propriétés mais de règles que l'on peut appliquer dans certaines conditions. Concrètement, vous allez pouvoir dire « Si la résolution de l'écran du visiteur est inférieure à tant, alors applique les propriétés CSS suivantes ». Cela vous permet de changer l'apparence du site dans certaines conditions : vous pourrez augmenter la taille du texte, changer la couleur de fond, positionner différemment votre menu dans certaines résolutions, etc.

    Contrairement à ce qu'on pourrait penser, les media queries ne concernent pas que les résolutions d'écran. Vous pouvez changer l'apparence de votre site en fonction d'autres critères comme le type d'écran (smartphone, télévision, projecteur…), le nombre de couleurs, l'orientation de l'écran (portrait ou paysage), etc. Les possibilités sont très nombreuses !

    Appliquer une media query

    Les media queries sont donc des règles qui indiquent quand on doit appliquer des propriétés CSS. Il y a deux façons de les utiliser :

    Chargement d'une feuille de style différente

    Vous vous souvenez de la balise <link /> qui permet, dans notre code HTML, de charger un fichier .css ?

    <link rel="stylesheet" href="style.css" />

    On peut lui ajouter un attribut media, dans lequel on va écrire la règle qui doit s'appliquer pour que le fichier soit chargé. On dit qu'on fait une « requête de media » (media query en anglais). Voici un exemple :

    <link rel="stylesheet" media="screen and (max-width: 1280px)" href="petite_resolution.css" />

    Au final, votre code HTML pourrait proposer plusieurs fichiers CSS : un par défaut (qui est chargé dans tous les cas) et un ou deux autres qui seront chargés en supplément uniquement si la règle correspondante s'applique.

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <link rel="stylesheet" href="style.css" /> <!-- Pour tout le monde -->
            <link rel="stylesheet" media="screen and (max-width: 1280px)" href="petite_resolution.css" /> <!-- Pour ceux qui ont une résolution inférieure à 1280px -->
            <title>Media queries</title>
        </head>

    Chargement des règles directement dans la feuille de style

    Une autre technique, que je préfère personnellement pour des raisons pratiques, consiste à écrire ces règles dans le même fichier CSS que d'habitude.

    Dans ce cas, on écrit la règle dans le fichier .css comme ceci :

    @media screen and (max-width: 1280px)
    {
        /* Rédigez vos propriétés CSS ici */
    }
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Mise en page adaptative avec les Media Queries Les règles disponibles

    Les règles disponibles

    Mise en place des media queries Mise en pratique des media queries sur le design

    Il existe de nombreuses règles permettant de construire des media queries. Je vous présente ici les principales :

    Les règles peuvent être combinées à l'aide des mots suivants :

    Voici quelques exemples de media queries pour vous aider à bien comprendre le principe.

    /* Sur les écrans, quand la largeur de la fenêtre fait au maximum 1280px */
    @media screen and (max-width: 1280px)
    
    /* Sur tous types d'écran, quand la largeur de la fenêtre est comprise entre 1024px et 1280px */
    @media all and (min-width: 1024px) and (max-width: 1280px)
    
    /* Sur les téléviseurs */
    @media tv
    
    /* Sur tous types d'écrans orientés verticalement */
    @media all and (orientation: portrait)

    Tester les media queries

    Les media queries sont surtout utilisées pour adapter le design du site aux différentes largeurs d'écran.

    Faisons un test tout simple : nous allons changer la couleur et la taille du texte si la fenêtre fait plus ou moins de 1024 pixels de large. Pour ce test, je vais utiliser la seconde méthode qui consiste à écrire la règle directement dans le même fichier .css que d'habitude :

    /* Paragraphes en bleu par défaut */
    p
    {
        color: blue;
    }
    
    /* Nouvelles règles si la fenêtre fait au plus 1024px de large */
    @media screen and (max-width: 1024px)
    {
        p
        {
            color: red; 
            background-color: black;
            font-size: 1.2em;
        }
    }

    Dans notre feuille CSS, nous avons d'abord demandé à ce que le texte des paragraphes soit écrit en bleu, jusque là rien de nouveau. En revanche, nous avons ajouté une media query qui s'applique à tous les écrans dont la largeur ne dépasse pas 1024px. À l'intérieur, nous avons appliqué des règles CSS sur les paragraphes pour les écrire plus gros et en rouge.

    Résultat : la page n'a pas la même apparence selon la taille de la fenêtre (figure suivante) ! Essayez de la redimensionner pour voir !

    Tester ce code

    L'apparence du texte change en fonction de la taille de la fenêtre
    L'apparence du texte change en fonction de la taille de la fenêtre
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Mise en place des media queries Mise en pratique des media queries sur le design

    Mise en pratique des media queries sur le design

    Les règles disponibles Media queries et navigateurs mobiles

    Bon, changer la couleur du texte, c'est bien joli mais cela n'apporte pas grand-chose. Par contre, cela devient de suite plus intéressant quand on se sert des media queries pour modifier l'apparence de son site en fonction de la résolution. Vous allez voir qu'on peut faire tout ce qu'on veut !

    Pour cet exemple, je vous propose de reprendre le design que nous avons créé pour le site web de Zozor (figure suivante).

    Le site web réalisé lors du TP
    Le site web réalisé lors du TP

    Le site est bien adapté à la plupart des résolutions d'écran mais, quand l'écran est plus petit que 1024 px, il devient nécessaire de « scroller » vers la droite pour voir toute la page. Le site n'est donc pas très pratique à consulter sur un petit écran.

    Je vous propose d'utiliser les media queries pour changer l'apparence du site sur les résolutions inférieures à 1024 px de largeur. Nous allons opérer les modifications suivantes :

    On pourrait bien entendu faire beaucoup d'autres modifications : changer la couleur, la disposition du pied de page, etc. Mais cela sera déjà bien suffisant pour nous entraîner avec les media queries.

    Nous allons travailler directement à l'intérieur du fichier style.css que nous avons réalisé lors du TP. Nous y ajouterons quelques instructions media queries pour adapter le design. Je vous invite à télécharger les fichiers du TP si vous ne les avez pas déjà.

    Télécharger le TP

    La page

    Pour le moment, la largeur de la page est fixée à 900 px et le contenu est centré :

    #bloc_page
    {
        width: 900px;
        margin: auto;
    }

    À la suite de ces lignes, je vous propose d'ajouter la règle media query suivante :

    @media all and (max-width: 1024px)
    {
        #bloc_page
        {
            width: auto;
        }
    }

    La règle signifie : « Pour tous les types d'écrans, si la largeur de la fenêtre ne dépasse pas 1024 px, alors exécuter les règles CSS suivantes ».

    Les règles CSS en question sont très simples, il n'y en a en fait qu'une seule : on donne une largeur automatique à la page (plutôt qu'une largeur fixe de 900 px). La page prendra alors tout l'espace disponible dans la fenêtre. Cela évite l'apparition de barres de défilement horizontales sur les petites résolutions.

    Le menu de navigation

    Nous voulons que le menu de navigation prenne moins de place sur les petites résolutions. Plutôt que de lui donner une dimension fixe, nous allons lui redonner sa dimension automatique flexible d'origine. Chaque élément du menu s'écrira en dessous du précédent : pour cela, nous transformerons les puces en block plutôt qu'en inline-block.

    Enfin, le texte sera écrit plus petit et nous retirons la bordure en bas des liens lors du survol, car elle est moins adaptée à cette disposition.

    @media all and (max-width: 1024px)
    {
        nav
        {
            width: auto;
            text-align: left;
        }
        
        nav li
        {
            display: block;
            padding-left: 4px;
        }
        
        nav a
        {
            font-size: 1.1em;
        }
        
        nav a:hover
        {
            border-bottom: 0;
        }
    }

    La bannière

    Pour retirer la bannière, rien de plus simple : nous utilisons la propriété display à laquelle nous affectons la valeur none. Si la fenêtre est trop petite, nous préférons masquer complètement la bannière :

    @media all and (max-width: 1024px)
    {
        #banniere_image
        {
            display: none;
        }
    }

    Le bloc « À propos de l'auteur »

    Plutôt que de placer ce bloc à droite de l'article, nous allons le faire passer en-dessous. Ce type de disposition « de haut en bas » est plus adapté aux petits écrans.

    À l'intérieur du bloc, nous réajustons un peu la position des éléments : la photo de Zozor, notamment, sera placée en flottant à droite.

    @media all and (max-width: 1024px)
    {
        article, aside
        {
            width: auto;
            display: block;
            margin-bottom: 15px;
        }
        
        #fleche_bulle
        {
            display: none;
        }
        
        #photo_zozor img
        {
            width: 110px;
            float: right;
            margin-left: 15px;
        }
        
        aside p:last-child
        {
            text-align: center;
        }
    }

    Que signifie aside p:last-child ?

    C'est un sélecteur avancé que nous n'avons pas utilisé jusqu'ici. aside p signifie « Tous les paragraphes à l'intérieur de la balise <aside> ». Avec :last-child, on cible uniquement le dernier paragraphe dans le bloc aside (celui qui contient les liens vers Facebook et Twitter), pour pouvoir centrer les images. Bien entendu, on aurait aussi pu affecter une class ou un id à ce paragraphe pour le cibler directement, mais je n'ai pas voulu modifier le code HTML.

    Le résultat

    La page est désormais complètement réorganisée lorsque la fenêtre fait 1024 px ou moins de largeur. Regardez par vous-mêmes le résultat, la figure suivante parle d'elle-même !

    Le même site, présenté différemment en fonction de la largeur de l'écranLe même site, présenté différemment en fonction de la largeur de l'écran

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les règles disponibles Media queries et navigateurs mobiles

    Media queries et navigateurs mobiles

    Mise en pratique des media queries sur le design Aller plus loin

    Comme vous le savez sûrement, les écrans des smartphones sont beaucoup moins larges que nos écrans habituels (seulement quelques centaines de pixels de large). Pour s'adapter, les navigateurs mobiles affichent le site en « dézoomant », ce qui permet d'avoir un aperçu de l'ensemble de la page. La zone d'affichage simulée est appelée le viewport : c'est la largeur de la fenêtre du navigateur sur le mobile.

    En CSS, avec les media queries, si vous ciblez l'écran avec max-width sur un mobile, celui-ci va comparer la largeur que vous indiquez avec celle de son viewport. Le problème, c'est que le viewport change selon le navigateur mobile utilisé !

    Navigateur

    Largeur du viewport par défaut

    Opera Mobile

    850 pixels

    iPhone Safari

    980 pixels

    Android

    800 pixels

    Windows Phone 7

    1024 pixels

    Un iPhone se comporte comme si la fenêtre faisait 980 px de large, tandis qu'un Android se comporte comme si la fenêtre faisait 800 px !

    Pour cibler les smartphones, plutôt que d'utiliser max-width, il peut être intéressant de recourir à max-device-width : c'est la largeur du périphérique. Les périphériques mobiles ne dépassant pas 480 px de large, on pourra viser uniquement les navigateurs mobiles avec cette media query :

    @media all and (max-device-width: 480px)
    {
        /* Vos règles CSS pour les mobiles ici */
    }

    Pourquoi ne pas cibler les mobiles avec la règle media handheld ?

    Je vois que vous suivez, très bien ! En effet, on peut (en théorie) cibler les écrans mobiles avec le media handheld… Malheureusement, aucun navigateur mobile à part Opera mobile ne reconnaît handheld. Ils se comportent tous comme s'ils étaient des écrans normaux (screen). On ne peut donc pas vraiment utiliser handheld pour viser les mobiles.

    Vous pouvez modifier la largeur viewport du navigateur mobile avec une balise meta à insérer dans l'en-tête (<head>) du document :

    <meta name="viewport" content="width=320" />

    Vous pouvez utiliser cette balise pour modifier la façon dont le contenu de votre page s'organise sur les mobiles. Pour obtenir un rendu facile à lire, sans zoom, vous pouvez demander à ce que le viewport soit le même que la largeur de l'écran :

    <meta name="viewport" content="width=device-width" />

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Mise en pratique des media queries sur le design Aller plus loin

    Aller plus loin

    Media queries et navigateurs mobiles Du site web à l'application web (JavaScript, AJAX…)

    Alors que ce cours touche à sa fin, la tentation est grande de penser que l'on a tout vu. Tout vu ? Vous n'avez quand même pas cru cela ? Allons bon, il vous reste des centaines de choses à découvrir, que ce soit sur HTML, CSS, ou les technologies qui y sont liées (PHP, JavaScript…).

    Ce chapitre a pour but de vous donner quelques directions pour compléter votre apprentissage. Alors ne soyez pas tristes, car vous n'avez pas fini de faire des découvertes !

    Du site web à l'application web (JavaScript, AJAX…)

    Aller plus loin Technologies liées à HTML5 (Canvas, SVG, Web Sockets…)

    JavaScript est un langage qui existe depuis de nombreuses années maintenant et que l'on utilise fréquemment sur le Web en plus de HTML et CSS. C'est probablement l'un des premiers langages que vous voudrez apprendre maintenant que vous avez des connaissances en HTML et CSS.

    À quoi JavaScript peut-il bien servir ? On ne peut pas tout faire avec HTML et CSS ?

    On peut faire déjà beaucoup de choses en HTML et CSS mais, lorsqu'on veut rendre sa page plus interactive, un langage comme JavaScript devient indispensable.

    Voici quelques exemples de ce à quoi peut servir JavaScript :

    JavaScript est un langage qui se rapproche des langages de programmation tels que le C, C++, Python, Ruby… À l'inverse, HTML et CSS sont davantage des langages de description : ils décrivent comment la page doit apparaître mais ils ne donnent pas d'ordres directs à l'ordinateur (« fais ceci, fais cela… »), contrairement à JavaScript.

    JavaScript est régulièrement utilisé aujourd'hui pour faire de l'AJAX (Asynchronous JavaScript And XML). Cette technique permet de modifier une partie de la page web que le visiteur consulte en échangeant des données avec le serveur. Cela donne l'impression que les pages sont plus dynamiques et plus réactives. Le visiteur n'a plus besoin de recharger systématiquement toute la page.

    Les navigateurs sont de plus en plus efficaces dans leur traitement de JavaScript, ce qui fait que les pages qui utilisent JavaScript sont de plus en plus réactives. On peut ainsi arriver aujourd'hui à créer des sites qui deviennent littéralement des applications web, l'équivalent de logiciels mais disponibles sous forme de sites web !

    Un exemple célèbre : Google Docs, la suite bureautique de Google, disponible sur le Web (figure suivante).

    Le tableur Google Docs
    Le tableur Google Docs

    Pour en savoir plus sur JavaScript, lisez le tutoriel du Site du Zéro !

    Lire le tutoriel Javascript

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Aller plus loin Technologies liées à HTML5 (Canvas, SVG, Web Sockets…)

    Technologies liées à HTML5 (Canvas, SVG, Web Sockets…)

    Du site web à l'application web (JavaScript, AJAX…) Les sites web dynamiques (PHP, JEE, ASP .NET…)

    Le W3C ne travaille pas que sur les langages HTML et CSS. Ce sont certes les plus connus, mais le W3C cherche aussi à définir d'autres technologies qui viennent compléter HTML et CSS. Elles sont nombreuses et on les confond d'ailleurs souvent avec HTML5.

    Voici une petite liste de ces nouvelles technologies introduites en parallèle de HTML5 (notez que certaines ne sont pas vraiment « nouvelles » mais elles reviennent sur le devant de la scène) :

    Une application web 3D utilisant WebGL
    Une application web 3D utilisant WebGL

    Comme vous le voyez, vous avez de nouveaux mondes à découvrir ! Dès que vous connaîtrez suffisamment JavaScript, vous pourrez aller encore plus loin dans la gestion de votre site web… que vous pourrez même transformer en véritable application !

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Du site web à l'application web (JavaScript, AJAX…) Les sites web dynamiques (PHP, JEE, ASP .NET…)

    Les sites web dynamiques (PHP, JEE, ASP .NET…)

    Technologies liées à HTML5 (Canvas, SVG, Web Sockets…) Envoyez votre site sur le Web

    Les langages dont nous allons parler ici sont eux aussi des langages de programmation. Comme JavaScript ? Oui, mais avec une différence importante : JavaScript s'exécute sur la machine de vos visiteurs, tandis que les langages que nous allons voir s'exécutent sur le « serveur » qui contient votre site web.

    Quelle différence cela fait-il que le programme tourne sur la machine du visiteur ou sur le serveur ?

    Les différences sont importantes. Tout d'abord, en termes de puissance, un serveur sera bien souvent plus rapide que la machine de vos visiteurs, ce qui permet d'effectuer des calculs plus complexes. Vous avez aussi davantage de contrôle côté serveur qu'en JavaScript… Mais le JavaScript reste irremplaçable car il y a certaines actions que vous ne pouvez faire que du côté « visiteur ».

    Les langages serveur permettent de générer la page web lorsque le visiteur arrive sur votre site (figure suivante). Chaque visiteur peut donc obtenir une page web personnalisée suivant ses besoins !

    Échange de données avec un serveur
    Échange de données avec un serveur

    Les langages ne servent donc pas aux mêmes choses, mais ils se complètent. Si vous combinez HTML + CSS + JavaScript + PHP, par exemple, vous pouvez faire de l'AJAX (échanges de données entre la page et le serveur), vous pouvez effectuer des calculs, stocker des informations dans des bases de données… bref, faire de vrais sites web dynamiques !

    Les langages « côté serveur » sont nombreux. Citons-en quelques-uns :

    Au final, ces langages vous permettent de réaliser vos rêves les plus fous sur votre site web :

    Bonne découverte !

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Technologies liées à HTML5 (Canvas, SVG, Web Sockets…) Envoyez votre site sur le Web

    Envoyez votre site sur le Web

    Les sites web dynamiques (PHP, JEE, ASP .NET…) Le nom de domaine

    Votre site est tout beau, tout propre, tout prêt… mais comme il est sur votre disque dur, personne d'autre ne va pouvoir en profiter !

    Vous aimeriez donc l'envoyer sur le Web, mais… vous ne savez pas comment faire.

    Nous allons découvrir dans cette annexe tout ce qu'il faut savoir pour envoyer son site sur le Web :

    1. Comment réserver un nom de domaine ?

    2. Qu'est-ce qu'un hébergeur et comment cela fonctionne-t-il ?

    3. Enfin, comment utiliser un client FTP pour pouvoir transférer les fichiers sur le Net ?

    Le nom de domaine

    Envoyez votre site sur le Web L'hébergeur

    Savez-vous ce qu'est un nom de domaine ?

    Il s'agit en fait d'une adresse sur le Web : siteduzero.com est par exemple un nom de domaine.

    Un nom de domaine est constitué de deux parties : siteduzero.com.

    Réserver un nom de domaine

    Moi aussi je veux un nom de domaine pour mon site ! Comment dois-je faire ?

    Alors j'ai une bonne et une mauvaise nouvelle. Comme d'habitude, on va commencer par la mauvaise :

    En effet, un nom de domaine coûte entre 7 et 12 euros par an.

    Le prix peut varier en fonction de l'extension. Ainsi, l'extension .info est généralement proposée à plus bas prix et peut s'avérer être une alternative intéressante. Mais si vous voulez une adresse plus « courante », il faudra plutôt viser une extension de type .com ou encore .fr.

    Pour réserver un nom de domaine, deux solutions :

    Dans ce chapitre, nous allons voir comment commander un nom de domaine en même temps que l'hébergement, c'est de loin la solution la plus simple et la moins coûteuse pour vous.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Envoyez votre site sur le Web L'hébergeur

    L'hébergeur

    Le nom de domaine Utiliser un client FTP

    Intéressons-nous maintenant à l'hébergeur.

    Qu'est-ce qu'un hébergeur et pourquoi aurais-je besoin de lui ?

    Sur Internet, tous les sites web sont stockés sur des ordinateurs particuliers appelés serveurs (figure suivante). Ce sont des ordinateurs généralement très puissants, qui restent tout le temps allumés. Ils contiennent les pages des sites web et les délivrent aux internautes qui les demandent, à toute heure du jour et de la nuit.

    Un serveur
    Un serveur

    Un serveur ne possède pas d'écran car, la plupart du temps, il tourne tout seul sans qu'il y ait besoin de faire quoi que ce soit dessus. Comme vous le voyez, les serveurs sont très plats : c'est un format spécial de serveur (appelé « 1U »). Cela permet de les empiler dans des baies, c'est-à-dire une sorte d'armoire climatisée pour serveurs (figure suivante).

    Une baie de serveurs
    Une baie de serveurs

    Comme vous le voyez, il y a un écran pour toute la baie. C'est suffisant car on ne branche l'écran sur un serveur que si celui-ci rencontre un problème. La plupart du temps, heureusement, le serveur travaille sans broncher.

    Le rôle de l'hébergeur

    L'hébergeur est une entreprise qui se charge de gérer des baies de serveurs. Elle s'assure du bon fonctionnement des serveurs 24h/24, 7j/7. En effet, si l'un d'eux tombe en panne, tous les sites présents sur la machine deviennent inaccessibles (et cela fait des clients mécontents).

    Ces baies se situent dans des lieux particuliers appelés datacenters (figure suivante). Les datacenters sont donc en quelque sorte des « entrepôts à serveurs » et leur accès est très protégé.

    Un datacenter, dans lequel on voit plusieurs baies de serveurs
    Un datacenter, dans lequel on voit plusieurs baies de serveurs

    Bref, gérer un serveur soi-même est complexe et, la plupart du temps, les particuliers et les entreprises font appel à un hébergeur dont c'est le métier.

    Trouver un hébergeur

    Les hébergeurs, contrairement aux registrars, sont très très nombreux. Il y en a de tous types, à tous les prix. Il y a un vocabulaire à connaître pour vous repérer dans leurs offres :

    Mais où puis-je trouver un hébergeur ?

    Oh ça, c'est très simple.

    Une recherche dans Google de « hébergeur web » vous donnera plusieurs millions de résultats. Vous n'aurez que l'embarras du choix.

    Dans la suite de ce tutoriel, je vais vous montrer comment cela fonctionne avec l'hébergeur 1&1, auprès de qui nous avons pu obtenir des réductions spécialement pour les visiteurs du Site du Zéro. :)

    Image utilisateur

    Revenons à 1&1. Cet hébergeur propose plusieurs offres d'hébergement mutualisé, comme le montre la figure suivante.

    Les offres d'hébergement de 1and1Les offres d'hébergement de 1and1

    Comme vous le voyez, la page indique que vous avez une réduction de 21€ (soit 3 mois gratuits) sur l'hébergement 1&1 Illimité encadre en rouge en bas. Cette réduction s'ajoute aux 6 mois gratuits offerts par 1&1 en ce moment, ce qui fait pas moins de 9 mois gratuits sur un an ! Cela devrait vous revenir au final dans les 21€ pour héberger votre site web pendant un an, nom de domaine compris.

    Notez bien que la réduction ne s'applique que sur l'offre 1&1 Illimité.

    Commander un hébergement pour votre site web

    Cliquez sur le bouton "Continuer" dans l'offre 1&1 Illimité. On vous demande ensuite de choisir le nom de domaine de votre site, c'est-à-dire l'adresse à laquelle on pourra le trouver. Cochez la case en fonction des extensions que vous voulez utiliser (.com, .fr...). Un seul nom de domaine étant compris dans l'offre, je vous recommande de ne cocher qu'une seule case (par exemple ".com"). Si vous en cochez plusieurs, il faudra payer un peu plus.

    On vous demande de choisir le nom de domaine de votre siteOn vous demande de choisir le nom de domaine de votre site

    Une fois que c'est fait, 1&1 va vérifier que le nom de domaine que vous demandez n'est pas déjà pris :

    Vérifiez si le nom de domaine est libre avant de continuerVérifiez si le nom de domaine est libre avant de continuer

    Si le domaine est libre, vous pouvez continuer ! Cliquez simplement sur "Continuer". :)

    On vous proposera ensuite plusieurs offres commerciales (acheter plus de domaines, un générateur de sites...). A moins qu'elles ne vous intéressent, je vous invite à cliquer sur "Non merci" à chaque fois :

    On vous propose d'acheter d'autres noms de domaine (facultatif)On vous propose d'acheter d'autres noms de domaine (facultatif)

    Vous devriez à la fin arriver sur votre panier. Vérifiez que les 21€ de réduction sont bien pris en compte (sinon c'est probablement que vous avez sélectionné la mauvaise offre au tout début) :

    Il ne reste plus qu'à valider le panier !Il ne reste plus qu'à valider le panier !

    Il ne vous reste plus qu'à renseigner vos coordonnées et finaliser l'achat.

    Une fois les formalités et le paiement effectués, vous êtes redirigés vers 1&1, qui vous confirme la prise en compte de votre commande. Vous devriez recevoir un peu plus tard un e-mail vous indiquant toutes les informations nécessaires pour mettre en place votre site. Conservez-les précieusement, vous en aurez besoin.

    Lorsque vous avez reçu par e-mail vos identifiants pour vous connecter au serveur de votre hébergeur, vous pouvez passer à l'étape suivante : envoyer votre site web sur le serveur de votre hébergeur !

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Le nom de domaine Utiliser un client FTP

    Utiliser un client FTP

    L'hébergeur Mémento des balises HTML

    Installer un client FTP

    FTP signifie File Transfer Protocol et, pour faire court et simple, c'est le moyen que l'on utilise pour envoyer nos fichiers.

    Il existe des logiciels permettant d'utiliser le FTP pour transférer vos fichiers sur Internet.

    Bien entendu, des logiciels FTP, il en existe des centaines, gratuits, payants, français, anglais, etc.

    Pour que nous soyons sur la même longueur d'onde, je vais vous proposer celui que j'utilise, qui est gratuit et en français : FileZilla (figure suivante).

    L'icône du célèbre client FTP FileZilla
    L'icône du célèbre client FTP FileZilla

    Quoiqu'il en soit, je vais vous montrer quelle est la marche à suivre avec FileZilla. Et la première étape, c'est bien entendu de le télécharger !

    Télécharger FileZilla

    Prenez la version correspondant à votre système d'exploitation (Windows, Mac OS X ou Linux).

    Je vous fais confiance pour l'installation, elle est toute simple et vous ne devriez pas avoir de problème.

    Lancez le logiciel, vous devriez voir quelque chose ressemblant à la figure suivante.

    FileZilla est ouvert
    FileZilla est ouvert

    À première vue, cela semble un peu compliqué (à première vue seulement). En fait, le principe est très simple.

    Il y a quatre grandes zones à connaître dans la fenêtre :

    1. En haut, vous verrez apparaître les messages qu'envoie et reçoit le logiciel. Si vous avez un peu de chance, vous verrez même la machine vous dire bonjour (si si, je vous jure). En général, cette zone ne nous intéresse pas vraiment, sauf s'il y a des messages d'erreur en rouge…

    2. À gauche, c'est votre disque dur. Dans la partie du haut, vous avez les dossiers et, dans la partie du bas, la liste des fichiers du dossier actuel.

    3. À droite, c'est la liste des fichiers envoyés sur le serveur sur Internet. Pour le moment il n'y a rien car on ne s'est pas connecté, mais cela va venir, ne vous en faites pas.

    4. Enfin, en bas, vous verrez apparaître les fichiers en cours d'envoi (et le pourcentage d'envoi).

    La première étape va être de se connecter au serveur de votre hébergeur.

    Configurer le client FTP

    Quel que soit l'hébergeur que vous avez choisi, cela fonctionne toujours de la même manière. On va vous fournir trois informations qui sont indispensables pour que FileZilla puisse se connecter au serveur :

    Si vous avez ces trois informations, vous allez pouvoir continuer.

    Si vous ne les avez pas, il faut que vous les cherchiez, c'est indispensable. On vous les a probablement envoyées par e-mail. Sinon, n'hésitez pas à les demander à votre hébergeur (IP, login et mot de passe).

    Maintenant que nous sommes en possession de ces informations, nous allons les donner à FileZilla, qui en a besoin pour se connecter au serveur.

    Cliquez sur la petite icône en haut à gauche (pas sur la petite flèche à droite, mais bien sur l'image), représentée à la figure suivante.

    L'icône de connexion de FileZilla
    L'icône de connexion de FileZilla

    Une fenêtre s'ouvre. Cliquez sur Nouveau site et donnez-lui le nom que vous voulez (par exemple « Site du Zéro »). À droite, vous allez devoir indiquer les trois informations dont je viens de vous parler, comme à la figure suivante.

    Les trois informations à donner à FileZilla
    Les trois informations à donner à FileZilla

    Vous pouvez distinguer en haut l'hôte (c'est là qu'il faut indiquer ftp.monsite.com, par exemple). Cochez Type d'authentification : Normale pour pouvoir saisir le login et le mot de passe.

    Cliquez sur Connexion et le tour est (presque) joué.

    Transférer les fichiers

    À ce stade, deux possibilités :

    Si la connexion a réussi, alors ce que vous avez à faire est très simple : dans la partie de gauche, cherchez où se trouvent, sur votre disque dur, vos fichiers .html et .css (mais aussi vos images .jpg, .png, .gif, etc.).

    À gauche, faites un double-clic sur le fichier que vous voulez transférer. Au bout de quelques secondes, il apparaîtra à droite, ce qui voudra dire qu'il a été correctement envoyé sur le serveur, et donc qu'il est accessible sur Internet !

    La figure suivante, par exemple, représente le résultat que l'on obtient après avoir transféré un fichier index.html et quelques autres fichiers.

    Des fichiers sont hébergés sur le FTP
    Des fichiers sont hébergés sur le FTP

    Il apparaît à droite, ce qui veut dire qu'il est maintenant disponible sur le serveur.

    Vous pouvez aussi transférer des dossiers entiers d'un seul coup : il suffit de faire un glisser-déposer du dossier depuis la partie de gauche (ou directement de la fenêtre de votre système d'exploitation) jusqu'à la partie de droite de la fenêtre de FileZilla.

    Une fois configuré, vous pouvez voir que l'envoi de fichiers est très simple.

    En résumé

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    L'hébergeur Mémento des balises HTML

    Mémento des balises HTML

    Utiliser un client FTP Mémento

    Cette page est une liste non exhaustive des balises HTML qui existent. Vous trouverez ici un grand nombre de balises HTML. Nous en avons déjà vu certaines dans le cours, mais il y en a d'autres que nous n'avons pas eu l'occasion d'étudier. Généralement, les balises que nous n'avons pas étudiées sont des balises un peu plus rarement utilisées. Peut-être trouverez-vous votre bonheur dans ce lot de nouvelles balises.

    Vous pouvez vous servir de cette annexe comme d'un aide-mémoire lorsque vous développez votre site web.

    Mémento

    Mémento des balises HTML Mémento des propriétés CSS

    Balises de premier niveau

    Les balises de premier niveau sont les principales balises qui structurent une page HTML. Elles sont indispensables pour réaliser le « code minimal » d'une page web.

    Balise

    Description

    <html>

    Balise principale

    <head>

    En-tête de la page

    <body>

    Corps de la page

    Code minimal d'une page HTML :

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>Titre</title>
        </head>
    
        <body>
        
        </body>
    </html>

    Balises d'en-tête

    Ces balises sont toutes situées dans l'en-tête de la page web, c'est-à-dire entre <head> et </head> :

    Balise

    Description

    <link />

    Liaison avec une feuille de style

    <meta />

    Métadonnées de la page web (charset, mots-clés, etc.)

    <script>

    Code JavaScript

    <style>

    Code CSS

    <title>

    Titre de la page

    Balises de structuration du texte

    Balise

    Description

    <abbr>

    Abréviation

    <blockquote>

    Citation (longue)

    <cite>

    Citation du titre d'une œuvre ou d'un évènement

    <q>

    Citation (courte)

    <sup>

    Exposant

    <sub>

    Indice

    <strong>

    Mise en valeur forte

    <em>

    Mise en valeur normale

    <mark>

    Mise en valeur visuelle

    <h1>

    Titre de niveau 1

    <h2>

    Titre de niveau 2

    <h3>

    Titre de niveau 3

    <h4>

    Titre de niveau 4

    <h5>

    Titre de niveau 5

    <h6>

    Titre de niveau 6

    <img />

    Image

    <figure>

    Figure (image, code, etc.)

    <figcaption>

    Description de la figure

    <audio>

    Son

    <video>

    Vidéo

    <source>

    Format source pour les balises <audio> et <video>

    <a>

    Lien hypertexte

    <br />

    Retour à la ligne

    <p>

    Paragraphe

    <hr />

    Ligne de séparation horizontale

    <address>

    Adresse de contact

    <del>

    Texte supprimé

    <ins>

    Texte inséré

    <dfn>

    Définition

    <kbd>

    Saisie clavier

    <pre>

    Affichage formaté (pour les codes sources)

    <progress>

    Barre de progression

    <time>

    Date ou heure

    Balises de listes

    Cette section énumère toutes les balises HTML permettant de créer des listes (listes à puces, listes numérotées, listes de définitions…)

    Balise

    Description

    <ul>

    Liste à puces, non numérotée

    <ol>

    Liste numérotée

    <li>

    Élément de la liste à puces

    <dl>

    Liste de définitions

    <dt>

    Terme à définir

    <dd>

    Définition du terme

    Balises de tableau

    Balise

    Description

    <table>

    Tableau

    <caption>

    Titre du tableau

    <tr>

    Ligne de tableau

    <th>

    Cellule d'en-tête

    <td>

    Cellule

    <thead>

    Section de l'en-tête du tableau

    <tbody>

    Section du corps du tableau

    <tfoot>

    Section du pied du tableau

    Balises de formulaire

    Balise

    Description

    <form>

    Formulaire

    <fieldset>

    Groupe de champs

    <legend>

    Titre d'un groupe de champs

    <label>

    Libellé d'un champ

    <input />

    Champ de formulaire (texte, mot de passe, case à cocher, bouton, etc.)

    <textarea>

    Zone de saisie multiligne

    <select>

    Liste déroulante

    <option>

    Élément d'une liste déroulante

    <optgroup>

    Groupe d'éléments d'une liste déroulante

    Balises sectionnantes

    Ces balises permettent de construire le squelette de notre site web.

    Balise

    Description

    <header>

    En-tête

    <nav>

    Liens principaux de navigation

    <footer>

    Pied de page

    <section>

    Section de page

    <article>

    Article (contenu autonome)

    <aside>

    Informations complémentaires

    Balises génériques

    Les balises génériques sont des balises qui n'ont pas de sens sémantique.

    En effet, toutes les autres balises HTML ont un sens : <p> signifie « Paragraphe », <h2> signifie « Sous-titre », etc.

    Parfois, on a besoin d'utiliser des balises génériques (aussi appelées balises universelles) car aucune des autres balises ne convient. On utilise le plus souvent des balises génériques pour construire son design.

    Il y a deux balises génériques : l'une est inline, l'autre est block.

    Balise

    Description

    <span>

    Balise générique de type inline

    <div>

    Balise générique de type block

    Ces balises ont un intérêt uniquement si vous leur associez un attribut class, id ou style :

    Ces trois attributs ne sont pas réservés aux balises génériques : vous pouvez aussi les utiliser sans aucun problème dans la plupart des autres balises.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Mémento des balises HTML Mémento des propriétés CSS

    Mémento des propriétés CSS

    Mémento Mémento

    Cette page est une liste non exhaustive des propriétés CSS qui existent en CSS3. Pour la plupart, ce sont des propriétés que nous avons vues dans le cours, mais vous trouverez aussi quelques nouvelles propriétés que nous n'avons pas abordées.

    La liste est non exhaustive car mon but n'est pas de faire la liste de toutes les propriétés CSS qui peuvent exister : il y en a vraiment trop (plus de deux cents !) et certaines sont très rarement utilisées.

    Mémento

    Mémento des propriétés CSS Gérer la compatibilité entre les navigateurs

    Propriétés de mise en forme du texte

    Je résume ici la plupart des propriétés de mise en forme du texte.

    Qu'est-ce que la mise en forme de texte ? C'est tout ce qui touche à la présentation du texte proprement dit : le gras, l'italique, le souligné, la police, l'alignement, etc.

    Propriété

    Valeurs (exemples)

    Description

    font-family

    police1, police2, police3, serif, sans-serif, monospace

    Nom de police

    @font-face

    Nom et source de la police

    Police personnalisée

    font-size

    1.3em, 16px, 120%...

    Taille du texte

    font-weight

    bold, normal

    Gras

    font-style

    italic, oblique, normal

    Italique

    text-decoration

    underline, overline, line-through, blink, none

    Soulignement, ligne au-dessus, barré ou clignotant

    font-variant

    small-caps, normal

    Petites capitales

    text-transform

    capitalize, lowercase, uppercase

    Capitales

    font

    -

    Super propriété de police. Combine : font-weight, font-style, font-size, font-variant, font-family.

    text-align

    left, center, right, justify

    Alignement horizontal

    vertical-align

    baseline, middle, sub, super, top, bottom

    Alignement vertical (cellules de tableau ou éléments inline-block uniquement)

    line-height

    18px, 120%, normal...

    Hauteur de ligne

    text-indent

    25px

    Alinéa

    white-space

    pre, nowrap, normal

    Césure

    word-wrap

    break-word, normal

    Césure forcée

    text-shadow

    5px 5px 2px blue
    (horizontale, verticale, fondu, couleur)

    Ombre de texte

    Propriétés de couleur et de fond

    Propriété

    Valeurs (exemples)

    Description

    color

    nom, rgb(rouge,vert,bleu), rgba(rouge,vert,bleu,transparence), #CF1A20...

    Couleur du texte

    background-color

    Identique à color

    Couleur de fond

    background-image

    url('image.png')

    Image de fond

    background-attachment

    fixed, scroll

    Fond fixe

    background-repeat

    repeat-x, repeat-y, no-repeat, repeat

    Répétition du fond

    background-position

    (x y), top, center, bottom, left, right

    Position du fond

    background

    -

    Super propriété du fond. Combine : background-image, background-repeat, background-attachment, background-position

    opacity

    0.5

    Transparence

    Propriétés des boîtes

    Propriété

    Valeurs (exemples)

    Description

    width

    150px, 80%...

    Largeur

    height

    150px, 80%...

    Hauteur

    min-width

    150px, 80%...

    Largeur minimale

    max-width

    150px, 80%...

    Largeur maximale

    min-height

    150px, 80%...

    Hauteur minimale

    max-height

    150px, 80%...

    Hauteur maximale

    margin-top

    23px

    Marge en haut

    margin-left

    23px

    Marge à gauche

    margin-right

    23px

    Marge à droite

    margin-bottom

    23px

    Marge en bas

    margin

    23px 5px 23px 5px
    (haut, droite, bas, gauche)

    Super-propriété de marge.

    Combine : margin-top, margin-right, margin-bottom, margin-left.

    padding-left

    23px

    Marge intérieure à gauche

    padding-right

    23px

    Marge intérieure à droite

    padding-bottom

    23px

    Marge intérieure en bas

    padding-top

    23px

    Marge intérieure en haut

    padding

    23px 5px 23px 5px
    (haut, droite, bas, gauche)

    Super-propriété de marge intérieure.

    Combine : padding-top, padding-right, padding-bottom, padding-left.

    border-width

    3px

    Épaisseur de bordure

    border-color

    nom, rgb(rouge,vert,bleu), rgba(rouge,vert,bleu,transparence), #CF1A20...

    Couleur de bordure

    border-style

    solid, dotted, dashed, double, groove, ridge, inset, outset

    Type de bordure

    border

    3px solid black

    Super-propriété de bordure. Combine border-width, border-color, border-style.

    Existe aussi en version border-top, border-right, border-bottom, border-left.

    border-radius

    5px

    Bordure arrondie

    box-shadow

    6px 6px 0px black
    (horizontale, verticale, fondu, couleur)

    Ombre de boîte

    Propriétés de positionnement et d'affichage

    Propriété

    Valeurs (exemples)

    Description

    display

    block, inline, inline-block, table, table-cell, none...

    Type d'élément (block, inline, inline-block, none…)

    visibility

    visible, hidden

    Visibilité

    clip

    rect (0px, 60px, 30px, 0px)
    rect (haut, droite, bas, gauche)

    Affichage d'une partie de l'élément

    overflow

    auto, scroll, visible, hidden

    Comportement en cas de dépassement

    float

    left, right, none

    Flottant

    clear

    left, right, both, none

    Arrêt d'un flottant

    position

    relative, absolute, static

    Positionnement

    top

    20px

    Position par rapport au haut

    bottom

    20px

    Position par rapport au bas

    left

    20px

    Position par rapport à la gauche

    right

    20px

    Position par rapport à la droite

    z-index

    10

    Ordre d'affichage en cas de superposition.

    La plus grande valeur est affichée par-dessus les autres.

    Propriétés des listes

    Propriété

    Valeurs (exemples)

    Description

    list-style-type

    disc, circle, square, decimal, lower-roman, upper-roman, lower-alpha, upper-alpha, none

    Type de liste

    list-style-position

    inside, outside

    Position en retrait

    list-style-image

    url('puce.png')

    Puce personnalisée

    list-style

    -

    Super-propriété de liste. Combine list-style-type, list-style-position, list-style-image.

    Propriétés des tableaux

    Propriété

    Valeurs (exemples)

    Description

    border-collapse

    collapse, separate

    Fusion des bordures

    empty-cells

    hide, show

    Affichage des cellules vides

    caption-side

    bottom, top

    Position du titre du tableau

    Autres propriétés

    Propriété

    Valeurs (exemple)

    Description

    cursor

    crosshair, default, help, move, pointer, progress, text, wait, e-resize, ne-resize, auto...

    Curseur de souris

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Mémento des propriétés CSS Gérer la compatibilité entre les navigateurs

    Gérer la compatibilité entre les navigateurs

    Mémento Les commentaires conditionnels

    Voilà le scénario : vous travaillez d'arrache-pied sur le design de votre site web. Vous y passez du temps, vous le soignez, et au final vous êtes contents de vous. Vous faites tester le site par un ami et là il vous répond : « C'est un peu moche quand même ».

    Soit vous et votre ami avez des goûts complètement différents, soit le site est joli chez vous, mais pas chez lui. En effet, les navigateurs n'ont pas exactement le même rendu, même s'ils s'efforcent de suivre les mêmes règles HTML et CSS. Plus le navigateur est ancien, plus il y a de risques qu'il ne comprenne pas les fonctionnalités que vous utilisez.

    Plutôt que de céder à la panique, ce chapitre vous propose quelques méthodes pour apprendre à gérer ces différences entre navigateurs… et obtenir le meilleur résultat possible quel que soit le navigateur.

    Les commentaires conditionnels

    Gérer la compatibilité entre les navigateurs Les hacks CSS

    Souvent, ce sont les anciennes versions d'Internet Explorer qui vont vous poser problème. Comme certaines d'entre elles sont toujours utilisées, vous devez apprendre à composer avec.

    La syntaxe des commentaires conditionnels

    Heureusement, il existe une technique très pratique pour adapter votre code aux anciennes versions d'Internet Explorer. Grâce à des commentaires conditionnels, vous pouvez faire en sorte qu'une portion du code HTML soit lue uniquement par certaines versions d'IE. Ce sont des commentaires HTML qui ont une forme un peu spéciale et qui ne seront lus que par IE.

    <!--[if IE]>
    Code HTML réservé à IE
    <![endif]-->

    L'ensemble forme un commentaire HTML : il commence par <!-- et se termine par -->. Les navigateurs ignoreront donc le code qui se trouve à l'intérieur… sauf IE, qui y voit une condition [if IE] signifiant « Si c'est Internet Explorer ».

    L'intérêt est que cette technique permet de cibler différentes versions d'Internet Explorer. Par exemple :

    <!--[if IE8]>

    … ciblera uniquement Internet Explorer 8.

    On peut utiliser les symboles suivants pour viser un ensemble de versions :

    Ainsi :

    <!--[if lte IE8]>

    … signifie « Toutes les versions d'Internet Explorer inférieures ou égales à IE8 » (c'est-à-dire IE8, IE7, IE6…).

    À l'inverse, on peut cibler les navigateurs autres qu'Internet Explorer avec la syntaxe suivante :

    <!--[if !IE]><!-->
    Code HTML pour les navigateurs différents d'IE
    <!--<![endif]-->

    La syntaxe a l'air un peu complexe, mais l'astuce est bien conçue. Si vous regardez bien, il y a deux balises de commentaires. Le code HTML se trouve en-dehors des balises de commentaires, il sera donc lu par tous les navigateurs… sauf IE, qui lit les commentaires lui demandant de ne pas lire le code HTML qui suit.

    Utilité des commentaires conditionnels

    À quoi servent les commentaires conditionnels ?

    On peut utiliser les commentaires conditionnels pour afficher un message à destination des vieilles versions d'Internet Explorer : « Attention, vous naviguez avec un navigateur très ancien, mettez-vous à jour… ».

    Cependant, on s'en sert surtout pour charger des feuilles de style spéciales pour IE :

    <!--[if lte IE8]>
    <link rel="stylesheet" href="style_ie.css" />
    <![endif]-->

    La feuille style_ie.css sera lue ici uniquement par les versions d'IE inférieures ou égales à IE8. À l'intérieur, on peut « adapter » le code CSS pour faire en sorte que le site s'affiche mieux sur ces navigateurs. À vous de modifier la dimension des éléments si nécessaire, d'utiliser d'autres méthodes de positionnement plus adaptées, etc.

    Cependant, vu qu'il y a plusieurs versions d'Internet Explorer en circulation (IE6, IE7, IE8, IE9…), une feuille de style ne suffit pas. Parfois, on voudra effectuer une modification uniquement pour IE6 et IE7, parfois uniquement pour IE6, parfois pour IE8 et IE9… À moins de créer une feuille de style par version, on ne s'en sort pas. Mais cela fait alors beaucoup de fichiers .css à gérer.

    La solution, régulièrement employée par les webmasters expérimentés aujourd'hui, consiste à donner un nom de classe à la balise <body> qui englobe le corps de la page. Ce nom de classe indiquera dans le fichier .css le nom de la version d'IE correspondant au navigateur. Dans ce cas, un seul fichier CSS suffit. Par exemple, si on écrit :

    <body class="ie8">

    … cela nous donnera dans le fichier CSS l'information que le navigateur est IE8. On peut ensuite, dans ce fichier CSS, écrire :

    .ie8 nav
    {
        /* Modification du style de la balise nav pour IE8 */
    }

    Avec les commentaires conditionnels, on peut écrire plusieurs versions de la balise <body> en fonction du navigateur :

    <!--[if IE6]><body class="ie6 old_ie"><![endif]-->
    <!--[if IE7]><body class="ie7 old_ie"><![endif]-->
    <!--[if IE8]><body class="ie8"><![endif]-->
    <!--[if IE9]><body class="ie9"><![endif]-->
    <!--[if !IE]><!--><body><!--<![endif]-->
    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Gérer la compatibilité entre les navigateurs Les hacks CSS

    Les hacks CSS

    Les commentaires conditionnels Les outils de débogage

    « Hack » signifie « bidouille » en anglais. Il s'agit d'astuces qui permettent de faire en sorte que les propriétés CSS soient lues par certaines versions d'Internet Explorer uniquement. Le principe est le même que les commentaires conditionnels, mais c'est moins « propre » : les hacks se basent sur des erreurs de ces navigateurs, qui lisent des propriétés CSS alors qu'ils ne devraient pas.

    Voici l'un des hacks les plus célèbres :

    balise
    {
        margin: 15px; /* Pour les autres navigateurs */
        ma\rgin: 20px; /* Pour IE6 et IE7 */
    }

    Un bug dans IE6 et IE7 leur fait lire la seconde propriété. Normalement, la présence de l'antislash (\) au milieu du nom de la propriété rend celle-ci invalide, mais ces navigateurs ignorent l'antislash et lisent la propriété comme si de rien n'était.

    D'autres hacks existent, citons par exemple :

    balise
    {
        margin: 15px; /* Pour les autres navigateurs */
        *margin: 20px; /* Pour IE6 et IE7 */
        _margin: 20px; /* Pour IE6 */
    }

    La présence d'une étoile au début du nom de la propriété fait que tous les navigateurs, sauf IE6 et IE7, ignorent la ligne. De même, la présence d'un underscore (_) fait que la ligne est ignorée par tous les navigateurs, sauf IE6.

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les commentaires conditionnels Les outils de débogage

    Les outils de débogage

    Les hacks CSS

    Parfois, votre page ne s'affiche pas comme vous le souhaitez, même sur un navigateur récent. Dans ce cas, il faut partir à la recherche de l'erreur que l'on a faite. Plusieurs techniques sont à votre disposition, je vais vous présenter celles que j'utilise le plus souvent.

    La couleur de fond pour marquer les éléments

    La technique la plus simple pour faire du débogage consiste tout simplement… à donner une couleur de fond à un élément qui ne se comporte pas comme vous le souhaitez (par exemple, un menu qui se positionne mal). C'est donc aussi simple que cela :

    nav
    {
        background-color: blue;
    }

    Cette couleur de fond, très voyante, est temporaire : vous vous en servez uniquement pour voir la « place » qu'occupe votre élément. Souvent, cela vous permet de comprendre ce qui se passe dans votre page.

    Cependant, si cette technique ne suffit pas, il va falloir sortir l'artillerie lourde : un outil de débogage.

    Les outils de débogage

    Ce sont des outils très puissants (et assez impressionnants) qui permettent de manipuler la page web directement dans le navigateur. La plupart des navigateurs actuels sont équipés de ces outils, spécialement conçus pour les développeurs web que nous sommes :

    L'outil de débogage de Google Chrome (en bas du navigateur)
    L'outil de débogage de Google Chrome (en bas du navigateur)

    Il y a plusieurs façons de se servir de ces outils. Vous pouvez étudier la hiérarchie de vos balises en affichant le code source (en bas à gauche sur la figure suivante) et modifier en temps réel le code de votre page : faites un double-clic sur un texte ou une balise à modifier, et vous verrez le résultat changer dans la fenêtre du navigateur au fur et à mesure ! Attention toutefois : vos changements ne sont pas enregistrés, vous faites là un simple test pour comprendre le comportement du navigateur.

    En bas à droite, vous avez la liste des propriétés CSS qui s'appliquent à l'élément actuellement sélectionné dans le code source. Vous pouvez lui ajouter des propriétés, en retirer, les modifier, etc. Tous les changements sont appliqués immédiatement. Notez que les propriétés CSS qui sont écrasées par d'autres propriétés sont barrées ou grisées : cela vous permet de comprendre comment votre feuille de style se comporte.

    Enfin, pour cibler directement un élément de votre page, vous pouvez faire un clic droit sur l'élément à analyser, puis cliquer sur Inspecter l'élément. La barre de débogage propose aussi un bouton pour cibler un élément (une loupe sous Google Chrome, un curseur sous IE, etc.).

    Le cours s'arrête ici ! Pensez à consulter les annexes si vous ne l'avez pas fait, vous y découvrirez de nouvelles pistes pour poursuivre votre apprentissage de HTML et CSS ! ;)

    Fatigué(e) de lire sur un écran ? Découvrez ce cours en livre.

    Les hacks CSS