HTML5
Introduction
Pourquoi apprendre le Web ?
Le Web est de nos jours omniprésent, que ce soit via des :
- sites Web servant d'outils de communication (e.g. portefolio, vitrine, documentation en ligne, etc.) ;
- applications Web fournissant des services à des utilisateurs sans requérir d'installation, et sans se soucier de la plateforme utilisée.
En Sciences des Données, vous utilisez déjà (ou utiliserez) du Web pour des :
- formulaires en lignes (e.g. via Google form) ;
- exports Web de tableaux de bords ;
- productions de graphiques interactifs via Plotly, RShiny, etc.
Il existe une pléthore d'outils pour le Web. En tout premier lieu, il convient donc de choisir les bons outils pour les bons besoins, en fonction des contraintes du projet. Ces outils étant si nombreux, et en constante évolution, qu'il n'est pas possible de tous les étudier dans le cadre de cette formation.
Il est ainsi nécessaire d'apprendre les bases du Web afin que vous puissiez plus aisément vous adapter à de nouveaux outils, et les adapter à vos besoins et contraintes spécifiques (configurations, plugins, etc).
La formation ayant une coloration Cybersécurité, nous verrons aussi quelques notions de sécurité Web, vous permettant d'avoir un recul critique sur le Web.
D'où vient le Web ?
La problématique
Nous sommes en 1990, Tim Berners-Lee travaille au CERN. À l'époque, la documentation technique du CERN était rédigée via SGML, un méta-langage. SGML découpe les documents en 3 parties :
- le DTD (Document Type Definition) : la structure/le format du document.
- le contenu : les informations contenues dans le document.
- les feuilles de styles : comment afficher les informations.
Le DTD permet l'uniformisation des documents, permettant alors d'aisément traiter des lots de documents, notamment pour des opérations d'indexations, et de recherche.
Les feuilles de styles, quant à elles permettent de séparer le contenu de la présentation. Les ingénieurs peuvent ainsi écrire plus efficacement le contenu technique sans se soucier de la mise en forme. On ajoute ensuite une feuille de style permettant un affichage uniformisé des informations, mais différencié en fonction du support (écran, feuille A4, livre, etc).
À l'époque, les chercheurs au CERN travaillaient sur plusieurs lieux géographiques différents. Il était alors nécessaire de partager de la documentation, à distance. Pour cela ils utilisaient un protocole d'échange de fichiers à distance appelé FTP (File Transfert Protocol).
Le problème est que certains documents faisaient référence à d'autres. Pour cela les liens hypertextes sont très pratiques : dans le document, il suffit de cliquer sur le lien pour ouvrir le document référencé.
Sauf que... les liens hypertextes ne marchent que pour des documents locaux, comment ouvrir des documents à distance ?
Tim Berners-Lee va alors créer tout un ensemble d'outils et de concepts afin de résoudre ce problème.
Le début du Web
En tout premier lieu, il faut pouvoir indiquer la ressource distante référencée, donc avoir un moyen de l'identifier. Pour cela Tim Berners-Lee va créer le concept d'URL (Unique Resource Locator), une chaîne de caractère référençant une ressource distante et structurée de la sorte : .
Il faut ensuite pouvoir récupérer cette ressource. Le problème est que FTP a été conçu pour télécharger/uploader des fichiers par lots. Il n'est alors pas très adapté à des téléchargements ponctuels et temporaires de fichiers uniques. Tim Berners-Lee va alors créer HTTP (HyperText Transfert Protocol) qui permet d'obtenir très simplement une ressource à partir de son URL.
Tim Berners-Lee créée aussi le tout premier navigateur Web (WorldWideWeb) capable d'accéder à des ressources distantes à partir de son URL. Il supporte alors les protocoles suivants :
- : pour lire des ressources locales.
- : un ancêtre des forums en ligne.
Il ne reste alors plus qu'à définir un type de document SGML qui pourra contenir des liens hypertextes URL, et qui s'affichera dans le navigateur. Pour cela Tim Berners-Lee créée HTML (HyperText Markup Langage), une application de SGML.
HTML
Les balises HTML
HTML est un langage permettant de décrire une structure via des balises, e.g. :
- correspond à un retour à la ligne (*break line*).
- correspond à un paragraphe (*paragraph*).
Les éléments qui ne peuvent avoir de contenu s'écrivent avec une balise auto-fermante (self-closing tag) qui se présente sous la forme suivante : .
Les éléments qui peuvent avoir du contenu, e.g. un paragraphe peut contenir du texte, s'écrivent sous la forme suivante :
- est la balise ouvrante (opening tag).
- est la balise fermante (closing tag).
- est le contenu de la balise.
Vous remarquerez que HTML utilise et pour marquer le début et la fin d'une balise. Ainsi, est interprété par HTML comme étant une balise.
Pour éviter cela, on va échapper les caractères utilisés par HTML via des entités HTML (HTML entities) :
- devient (lesser than) ;
- devient (greater than) ;
- devient (quote) ;
- devient (ampersand).
💡 En HTML, les commentaires s'écrivent ainsi :
Les attributs HTML
Les attributs HTML (HTML attribute) permettent de configurer les éléments HTML :
- affiche l'image présente à l'URL indiquée par l'attribut .
- est un lien hypertexte pointant sur l'URL indiqué par l'attribut .
Les attributs HTML sont indiqués dans la balise ouvrante (ou auto-fermante) de l'élément HTML. Le nom de l'attribut est précédé d'un suivi de sa valeur entre guillemets.
💡 Une même balise HTML peut contenir plusieurs attributs, séparés par un espace :
- : ouvrir dans un nouvel onglet.
-
- est le **type MIME** du fichier.
- au clic, télécharge la ressource.
- indique le nom par défaut du fichier téléchargé.
💡 Certains attributs n'ont pas besoin de valeur et configurent l'élément par leur seule présence. Ce sont les attributs booléens (boolean attributes), e.g. :
Chaque type d'élément HTML a sa propre liste d'attributs qui permettent de le configurer. Il existe cependant des attributs appelés attributs universels (global attributes) communs à tous les éléments HTML, e.g. :
- permet d'afficher une bulle d'information (tooltip) au survol de l'élément.
Données structurées
Listes
Une liste est un élément HTML qui contient plusieurs sous éléments (list item). Les listes peuvent être ordonnées (ordered list) ou non (unordered list).
- Item A
- Item B
- Item A
- Item B
Tableaux
Les tableaux (table) sont composés d'un (ou plusieurs) corps (table body) contenant des lignes (table row), elles-même composée de cellules (table data) :
| A | B |
| C | C |
💡 Il est possible d'ajouter les cellules d'en-têtes (table header), dans le corps de la table, mais aussi dans une en-tête (table header) ou un pied (table footer) :
| ID | Nom |
|---|---|
| 1 | Pierre |
| 2 | Paul |
Structure et sémantique
Par défaut, certains éléments HTML modifient l'affichage du texte :
| HTML | Affichage | Sens |
| A | important (strong importance) | |
| A | mis en valeur (emphasis) | |
| A | marqué | |
| A | inséré (inserted) | |
| supprimé (deleted) |
De la même manière, les balises à permettent d'indiquer différents niveaux de titres.
| HTML | Affichage | Sens |
| titre de niveau 1 | ||
| titre de niveau 2 | ||
| titre de niveau 3 | ||
| titre de niveau 4 | ||
| titre de niveau 5 | ||
| titre de niveau 6 |
⚠ Ils ne doivent pas être utilisés pour leur affichage par défaut, qui peut être modifié, mais pour leur sémantique, i.e. le sens qu'ils donnent.
⚠ Il ne doit y avoir qu'un seul par page.
Sémantique vs affichage
Pour rappel, HTML décrit la structure d'une page Web, mais pas la manière dont les éléments doivent être affichés dans la page Web.
Il est notamment possible d'intégrer e.g. des données sous la forme de listes ou de tableaux. Cependant, les listes et les tableaux ne doivent être utilisés que pour décrire la structure des données. Ils ne doivent pas être utilisés pour positionner des éléments sur une page Web.
Par exemple, pour afficher une liste d'utilisateurs avec différentes propriétés (e.g. ID, nom, prénom, mails) on utilisera un tableau. En revanche, on évitera de l'utiliser pour un ensemble d'images s'affichant sous la forme d'une grille.
Un tableau a un nombre de colonnes et de lignes fixe. Une grille quant à elle peut avoir un nombre de colonnes et de lignes variables afin d'adapter l'affichage à l'espace disponible, e.g. lié à la largeur de l'écran.
Structure d'une page Web
L'arbre DOM
Comme nous l'avons vu, un élément HTML peut contenir du texte ou d'autres éléments HTML. Il est d'ailleurs très fréquent d'utiliser les conteneurs génériques :
- pour grouper un contenu dans un "bloc".
- se comporte comme du texte inséré à la ligne courante.
On peut représenter cette hiérarchie sous la forme d'un arbre, appelé arbre DOM où chaque élément HTML est associé à un noeud (node), et a pour fils son contenu :
Document
├── div
│ ├── A
│ ├── div
│ │ └── B
│ └── C
└── div
├── D
├── span
│ └── E
└── F
On utilise alors la terminologie suivante :
Racine ├── ... ...
Parent ├── Enfant ...
Ancêtre ├── Descendant ... ├── Descendant ...
... ├── Frère └── Frère
Inspecter une page Web
- inspecteur / sélecteurs
Afficher/inspecter l'arbre DOM de la page
- attributs globaux class/id
- sélecteurs (#, .)
Attributes
=> id et #id (unique)
=> class : pas besoin unique, séparés par un espace.
=> selecteurs + outils ? (inspecteur : all vs clic element - TP?)
=> + tagname + #id + .class (+ de choses + tard)
=> + attr [attr] / [attr=""] + plein d'autres, pas la peine de retenir par coeur.
=> sémantique (e.g.
Le format d'une page Web
Jusqu'à présent, nous avons vu des éléments HTML permettant de définir le corps (contenu) d'une page Web. Cependant une page Web est composée de :
- une en-tête (head) définissant les méta-données de la page Web.
- un corps (body) définissant le contenu de la page Web.
Les pages Web suivent ainsi la structure suivante :
💡 indique le type du fichier (document type).
💡 est le noeud racine, aussi appelé la racine (root).
Encore plus de balises et attributs...
La documentation
Le langage HTML contient une pléthore de balises (>135) et d'attributs (>131) différents. Cependant, toutes les balises et tous les attributs ne sont pas à utiliser, certains sont :
- obsolètes ;
- pas standards ;
- expérimentaux (changements futurs possibles) ;
- pas supportés par tous les navigateurs.
💡 La documentation MDN est très utile pour vérifier les attributs que prend un élément HTML donné.
💡 Le site caniuse permet de rechercher si un élément ou un attribut est supporté par les navigateurs, et à partir de quelle version.
Balises sémantiques et SEO
Beaucoup d'éléments HTML sont en réalité "identiques" et se distinguent que par leur sémantique, e.g. :
- : en-tête de tableau.
- : corps de tableau.
- : pied de tableau.
Ces deux éléments sont en réalité identiques dans leur affichage et comportement, leur seule différence est dans le nom de la balise.
De la même manière, les éléments , , etc. ont juste un affichage par défaut différent. Affichage qui peut être aisément modifié et interverti.
💡 L'avantage d'avoir des noms différents est de rendre le code HTML plus explicite, facilitant sa lecture par les machines et les humains. Cependant, à votre niveau, il n'est pas utile de trop en accorder d'importance.
💡 La facilitation de la compréhension de la structure de votre page Web par des machines (e.g. quel est le titre de la page, quels sont les mots clefs importants, etc), impact notamment le SEO (Search Engine Optimization).
Accessibilité
HTML offre aussi de nombreux attributs afin de faciliter l'accessibilité de vos pages Web, notamment aux personnes souffrant d'handicaps visuels ou moteur.
L'accessibilité est un métier à part entière, il n'est donc pas attendu de vous que vous produisiez des pages Web accessibles.
Les composants Web
Comme si cela ne suffisait pas, vous pouvez aussi créer vos propres éléments HTML personnalisés (custom elements).
Imaginez par exemple une page Web affichant une liste de produits. Chaque produit est structuré et affiché de la même manière avec une image, un nom, et un prix :
Vous pourriez copier-coller la même structure pour chaque produit, mais cela comporte de nombreux défauts :
- pour en changer la structure, il faudra tous les modifier (avec risques d'oublie).
- le code HTML devient très lourd et verbeux.
Pour éviter cela, vous pouvez définir votre propre élément personnalisé :
Ces éléments personnalisés (custom elements) sont créés en associant un nom de balise (doit contenir un ) à un composants Web (Web Components) dont vous définirez le contenu en HTML :
Le navigateur remplira alors automatiquement chacun de vos éléments personnalisés par le contenu que vous aurez spécifié. Cela présente de nombreux avantages :
- rend le code plus lisible et explicite.
- permet d'organiser son code en différents modules/fichiers.
- permet une arborescence de projet plus explicite.
- évite les problèmes liés à la duplication de code.
- performances améliorées (temps de téléchargement et vitesse d'exécution).
💡 Il existe de très nombreuses bibliothèques/framework Web permettant de définir des composants Web. Dans le cadre de ce module, on utilisera LISS à des fins pédagogique pour simplifier la création de vos propres composants Web.
⚠ Les balises auto-fermantes ne sont pas supportées par les composants Web.
X
CM1
https://developer.mozilla.org/docs/Web/HTML
https://www.w3schools.com/html/ ▶ La documentation : ▶ https://developer.mozilla.org/docs/Web/HTML ▶ https://www.w3schools.com/html/ ▶ Les cours : ▶ https://developer.mozilla.org/docs/Learn/HTML/ Introduction_to_HTML/Getting_started ▶ Les exemples : ▶ https://www.w3schools.com/html/html_examples.asp ▶ Les r ´ef ´erences : ▶ https://developer.mozilla.org/docs/Web/HTML/Element ▶ https://www.w3schools.com/tags/ref_byfunc.asp
inspecteur HTML (h4ck cf US) ▶ Inspecteur : DOM (FF: ctrl + + I / Chr: ctrl + + C ).
-> en-tête (méta-donnée)
-> base (sous-sites) + URI abs/relatif + #?
💡 Le lien peut être absolu (commençant par /) ou relatif (commençant par ./).
💡 Pour les liens externes, l'URL doit être précisée, e.g. "https://foo.fr/faa".
-> meta charset (autres méta-données)
[onglet] :
-> title
-> link favicon
+ juste évoquer + preview (discord/fb/google) -> pas normalisé
- "og:" (Discord) [title/desc/image/type/url]
- "twitter:"
- "description" : google