Le langage HTML (Hyper Text Markup Language) fait partie d’une classe plus vaste de langages (SGML, XML, XHTML,...) destinés à décrire des documents et leur mise en page tout en distinguant la forme et le fond. Il a été inventé Tim Berners-Lee en 1991 et a d’abord été utilisé par des physiciens du CERN afin de communiquer leurs travaux. Il est a la base du WEB, la partie actuellement la plus utilisée d’internet.
Tim Berners-Lee suit encore aujourd'hui avec attention l'évolution du Web et a créé le World Wide Web Consortium (W3C) qui définit les nouvelles versions des langages. Il a par ailleurs créé plus récemment la World Wide Web Foundation, qui analyse et suit l'évolution du Web.
Un fichier au format HTML (version 5) est avant tout destiné à être lu à l’aide d’un navigateur internet mais peut-être souvent en partie interprété par un traitement de texte comme nous venons de le constater.
La structure typique d’un document HTML (version 5) est la suivante :
<!DOCTYPE html >
< html lang="fr" >
<head >
<title > Titre de la page </title >
</head >
<body>
<p>
Ceci est une phrase avec un <a href="cible.html">hyperlien</a>.
</p>
<p>
Ceci est un paragraphe où il n’y a pas d’hyperlien.
</p>
</body>
</html>
En Résumé
La première ligne est une description du format du document. Le reste du document séparé en un en-tête et un corps encapsulé par les balises ou tags <html> et </html>.
Les balises les plus courantes (doubles) sont <p> et </p> qui délimitent un paragraphe et les plus importantes <a> et </a> qui définissent un lien hypertexte c’est-à-dire un renvoi vers une autre partie du document courant ou vers un autre document.
Bien qu’il soit possible de transformer un document HTML en une véritable soupe de tags assez indigeste (comme le font souvent les traitements de texte), de bonnes habitudes et de la rigueur permettent d’écrire des documents lisibles dont le fond est relativement séparé de la forme. On écrira ainsi dans des fichiers HTML le contenu et les tags relatifs à la structure et dans un fichier CSS (Cascading Style Sheet) les informations relatives au style. On ne se lancera donc pas dans la rédaction d’un document HTML sans avoir réfléchi avant à sa structure et son découpage en sous-partie. Cette réflexion pourra être conduite au brouillon et à l’aide de schémas. Dans la suite nous construirons petit à petit les bases d’un site internet présentant des recettes de cuisines.
Nous allons respecter une structure extrêmement classique pour un site internet : un bandeau horizontal en haut donnant l’identité du site (titre, logo), un menu latéral sur le côté gauche (pour la navigation dans la base de données des recettes) et un bloc droit destiné à recevoir les informations plus variables (ici les recettes mais aussi les informations de présentation du site). Il faut donc prévoir dès l'écriture d'une page sa structure en différentes divisions: en-tête, menu, section, article,etc...
Nous allons travailler sur 3 bureaux: Sur un bureau avec le traitement de texte Gedit pour coder, sur un autre avec le navigateur Web Firefox pour voir le résultat de notre code et sur un troisième pour voir nos différents fichiers
Télécharger le fichier index.txt ici.
Ouvrir le fichier index.txt avec Gedit, le sauvegarder en le renommant indextp14.html et encapsuler le texte par les balises < body> et < /body>.
Télécharger le fichier en-tete.txt ici.
Ouvrir le fichier en-tete.txt inclure son contenu en tête du fichier indextp14.html et terminer le fichier par la balise < /html>.
Si vous n’avez pas fait d’erreurs les trois divisions devraient apparaître de façon informe mais chacune débutant sur une ligne.
Taper l’adresse “http://validator.w3.org/” dans un nouvel onglet du navigateur et faire valider la page par la méthode “file upload”.
Si votre document contient des erreurs corrigez les. Sinon vous aurez seulement un avertissement que vous utilisez la dernière version HTML 5 et non la 4 et par conséquent votre page ne peut pas être validée, bien qu'elle soit correctement écrite.
Aller voir sur le Web l'évolution du langage HTML au cours du temps.
On notera que la mise en forme actuelle est minimale. Nous n’avons indiqué que la nature des choses mais donné aucune véritable instruction de mise en forme. Toute la mise en page a été décidée entièrement par le navigateur à partir de nos instructions de fond. Une bonne page HTML doit toujours être ainsi conçue.
Les instructions de mise en page sont enregistrées dans une feuille de style au format CSS. La notre s’appelle “style1tp14.css” ce qui n’est pas original mais informatif.
Télécharger le fichier style1tp14.css ici.
Ouvrir le fichier. Il contient des indications de mises en forme pour le “body”.
Au fur et à mesure que vous avez compris une propriété CSS commentez la dans le fichier style1tp14.css avec /* et */
header
{
margin:2em 3% 1% 3%;
padding:0.05em 0 0.05em 0;
font-size:200%;
background-color:#ffd000;
border-radius:25px;
}
header h1
{
font-family:"Comic Sans MS",Arial,Helvetica,sans-serif;
text-align:center;
}
Il manque manifestement un logo pour notre bandeau. Insérer dans la division du bandeau une division <div class=“logo”>. On notera l’utilisation de class plutôt que id. Contrairement aux id, les class ne sont pas uniques et peuvent apparaître plusieurs fois avec le même nom dans un même fichier. Chercher des explications sur le Web.
Télécharger l'image logo.png ici.
Insérer <img src="logo.png" width="100" alt="Logo"/>. Tester.
header .logo
{
float:left;
display:block;
}
Ajouter une marge de 15 pixels tout autour. Puis faire revalider votre page par le W3C.
left:5%;
position:absolute;
width:15%;
overflow:hidden;
Que signifie position:absolute ? Chercher sur le site OpenWeb.
border-color:#f09000;
border-style:solid;
border-width:0 0 3px 0;
font-size:medium;
font-weight:700;
margin:0;
padding-left:0em;
text-transform:uppercase;
Que signifie em ? Que signifie font-weight ?
margin-bottom:1.5em;
margin-top:0.5em;
et pour <li> :
list-style:none;
background-color:#f5f8fc;
border:1px solid #6090c0;
line-height:150%;
margin:0 3% 2em 21%;
padding:0 2% 3em 2%;
color:#000000;
et changer éventuellement les couleurs. Que signifie line-height ?
La vocation d’une page HTML est d’être liée à d’autres pages. Ainsi nous souhaitons qu’un clic sur un item de menu renvoie à la recette correspondante.
nav a
{
display:block;
text-decoration:none;
}
Vous pouvez changer d’autres propriétés à votre guise. Que signifient les propriétés précédentes ?
Télécharger le fichier far-casimir.txt ici.
Insérer le document far-casimir.txt dans le modèle et sauvegarder sous le nom far-casimir.html.
Pour bien comprendre la différence entre le fond (le texte en dehors des balises) et la forme (défini par le fichier CSS) nous allons travailler sur un autre fichier CSS. Cette fois ci nous voulons mettre le menu à l'horizontale, et ne faire apparaître à l'écran que les mots Entrées, Plats et Desserts. Lorsque la souris survole un de ces mots apparaît alors les items correspondants.
Repartir dans le fichier indextp14.html
Dans un premier temps encapsuler chaque titre h2 et la liste ul associée par une balise < div class="container" > qui va nous aider à placer les items de la liste ul bien au-dessous les uns des autres et du titre h2.
Télécharger le fichier style2tp14.css ici.
Ensuite ouvrir le fichier style2tp14.css. Ce dernier est à compléter en partie. Il s'agit de mettre à côté de certains commentaires les commandes CSS correspondantes en vous aidant ici www.w3.org/Style/css3-selectors-updates et ici Fonctionnement de float
Pour comprendre certaines commandes il faudra faire aussi l'arbre montrant la structure du fichier indextp14.html.
Pour le menu horizontal voici une correction possible.
Télécharger le fichier css style3tp14.css ici.
Voici ce que cela donne en ligne ici.
Pour le même fond avec une autre mise en forme ici.
Ne pas la prendre au pied de la lettre, mais essayer de comprendre les grandes idées comme:
Sélecteur
{
attribut1:valeur1;
attribut2:valeur2;
etc...
}
ul
{
display:none;/*on cache la liste ul à l'écran*/
}
ul
{
display:block;/*on montre la liste ul à l'écran*/
}
Les sélecteurs peuvent être un peu plus complexes comme nav .container h2:hover +ul qu'on lit de la droite vers la gauche:
Les attibuts qui vont suivre concernent donc l' ul qui suit immédiatement un h2 qui a été survolé par la souris (hover) dans le block container qui se trouve dans le block nav.
Concrétement cela permettra de montrer à l'écran l'ul lorsque le mot encadré par le block h2 a été survolé à l'écran, par exemple Entrées, ou Plats ou Desserts. Evidemment il ne faut pas que la liste des Desserts soit révélée, alors que le mot Entrées ait été survolé par la souris.
Pour écrire des sélecteurs plus complexes, il faut donc bien analyser la structure en arbre du fichier html.
Remarque importante En fonction du besoin on va chercher en ligne dans la documentation comme ici www.w3.org/Style/css3-selectors-updates des commandes un peu plus complexes.
Les pages HTML sont faites pour être lues par des navigateurs, des robots de recherche et bien sûr ceux qui les écrivent et les maintiennent. La multiplication des types d’usage différents et l’automatisation des processus à conduit à abandonner les pratiques des années 1990 consistant à mélanger la forme et le fond. On peut produire de mauvaises pages en suivant ces anciens principes à l’aide d’un traitement de texte. Au contraire, l’écriture de bonnes pages faciles à lire, à maintenir et à manipuler par des robots demande une structuration proche de la programmation. Il faut hiérarchiser les contenus, découper en blocs logiques, séparer la structure (HTML proprement dit), de la mise en page (reléguée dans les feuilles de style CSS). Ces bonnes pratiques ont aussi l’avantage d’augmenter la vitesse de chargement des pages (les feuilles de style utilisées plusieurs fois ne sont chargées qu’une fois) et d’optimiser l’espace de stockage de l’information. Nous avons pu constater qu’utiliser du HTML/CSS pur ne permettait toutefois pas d’éviter la répétition de certains contenus (bandeau,menu) ce qui ne facilite pas la maintenance des pages. On peut éviter cela par la division d’une page en plusieurs fichiers envoyés séparément aux navigateurs. Cela correspond à l’utilisation de frame. Nous n’avons pas expliqué cette technique ancienne car elle est déconseillée puisqu’elle rends difficile l’exploitation de liens profonds par les moteurs de recherche et risque de causer des incohérences et des pertes de contenu. Alors que faut-il faire ? La bonne solution consiste à faire construire automatiquement les pages du côté serveur WEB pour qu’elles soient ensuite envoyées complètes au navigateur client. Cela peut se faire par l’utilisation de langages de programmation comme JavaScript ou PHP si l’on souhaite que cette construction soit interactive (les pages sont générées à la demande du client). Mais si aucune interaction avec le client n’est nécessaire, les pages peuvent être aussi créées définitivement par des procédés automatiques avant l’installation sur le serveur. On pourra alors utiliser beaucoup de langages de programmation pour ce faire.