Cours Développement Frontend - La sémantique

Qu’est-ce que la sémantique ?

La sémantique est une partie importante du HTML : elle garantit que votre code aura du sens pour la machine.

Mais qu’est-ce que cela signifie, “avoir du sens pour la machine” ?

Lorsque l’on écrit du code HTML, il faut distinguer deux choses :

  • la syntaxe ;
  • la sémantique.

La syntaxe est le fait d’écrire du code correct et qui fonctionnera. Comme lorsque vous écrivez une phrase dans n’importe quelle langue, il y a une syntaxe à respecter. En HTML, c’est pareil !

Si j’écris par exemple :

<!DOCTYPE html>
<html>
	<head>
	</head>
	<body>
	</body>
</html>

la syntaxe est correcte.

Mais si j’écris :

<html>
	<head>
	<body>
	</head>
	</body>
</html>

la syntaxe est complètement fausse, puisque j’ai ouvert la balise head, puis j’ai ouvert une balise body, et j’ai ensuite fermé la balise head avant de fermer la balise body. De plus, le head ne peut pas contenir le body !

Maintenant, revenons sur la sémantique. Le premier morceau de code était syntaxiquement et sémantiquement correct. La sémantique désigne le sens délivré par une phrase. Dans un code HTML, la sémantique peut être fausse tandis que la syntaxe est juste !

Dans l’exemple suivant, j’utilise deux nouvelles balises : h1 et p. La première permet de spécifier un titre principal, et la seconde de spécifier un paragraphe.

Si j’ai le code suivant :

<h1>Mon titre principal <p>un paragraphe</p></h1>

La syntaxe est correcte : j’ai mes balises qui sont correctement ouvertes et fermées. Néanmoins, la sémantique est fausse : en effet, avoir un paragraphe à l’intérieur d’un titre n’a pas de sens.

Il convient donc de toujours s’assurer du sens que porte notre code.

Pourquoi la sémantique ?

C’est bien joli cette histoire de sémantique, mais si on doit passer des heures à savoir si telle ou telle balise est sémantique, on risque de ne jamais terminer nos projets.

Alors pourquoi la sémantique ? Lorsque les différents bots de référencement vont parcourir votre site web, ils vont noter la sémantique de votre code. Lorsque des personnes handicapées (aveugles, notamment) vont naviguer sur votre site avec des outils d’aide, ils vont avoir besoin de cette sémantique.

La sémantique de votre code offrira des information sur la signification du contenu de votre site web.

Pour bien l’illustrer, voici deux morceaux de code, l’un sans sémantique, et l’autre avec sémantique :

<p>
Présentation
Bonjour, et bienvenue sur ce site.  Ici, vous trouverez tout ce qu'il y a à savoir sur qui je suis, mes projets et mon parcours.

Qui suis-je ?
Je m'appelle John DOE, et je suis designer en freelance depuis maintenant 20 ans !

Mes projets
Je travaille généralement sur des projets d'entreprises. Retrouvez-les sur mon Behance !

Mon parcours
Cliquez ici pour dérouler mon parcours !
</p>

Et voici le même contenu, mais avec des balises apportant de la sémantique :


<h1>Présentation</h1>
<p>Bonjour, et bienvenue sur ce site.  Ici, vous trouverez tout ce qu'il y a à savoir sur qui je suis, mes projets et mon parcours.</p>

<h2>Qui suis-je ?</h2>
<p>Je m'appelle John DOE, et je suis designer en freelance depuis maintenant 20 ans !</p>

<h2>Mes projets</h2>
<p>Je travaille généralement sur des projets d'entreprises. Retrouvez-les sur mon Behance !</p>

<h2>Mon parcours</h2>
<p>Cliquez ici pour dérouler mon parcours !</p>

Dans le deuxième cas, on met en évidence quelles portions du texte sont des titres, et quelles portions sont des paragraphes. Ainsi, la machine, autrement dit les outils et bots qui vont “lire” votre page web, auront connaissance de la signification de votre contenu.

Les balises sémantiques

Parmi les balises HTML, plusieurs portent une valeur sémantique.

Les balises de titres

Les balises de titre indiquent l’importance d’un titre dans une page. Elles vont de h1 à h6 .

Il ne doit y avoir qu’un seul h1 par page ou par article. Il peut y avoir plusieurs h2h6.

Elles seront utilisées en fonction de l’importance de votre contenu.

Exercice : créez un document HTML, placez-y le texte suivant (tiré d’un journal) et, en utilisant les balises de titre, essayez de lui donner une sémantique correcte. Plusieurs manières de faire sont possibles.

Le ZEvent récolte 10 millions d'euros pour Action contre la faim

Marathon caritatif diffusé sur Twitch depuis vendredi soir, le ZEvent, qui regroupe les communautés du streaming, du gaming et de l'esport, a de nouveau pulvérisé son record de dons, établi l'an dernier. Plus de dix millions d'euros ont été récoltés pour Action contre la faim.

Record battu
Pour la sixième édition de l’événement caritatif – la cinquième sous le nom de « Z Event » –, les plus grandes stars françaises du streaming de jeux vidéo ont récolté plus de 10 millions d’euros de dons auprès de leurs fans, a annoncé l’un des organisateurs, lundi 1er novembre.

Propos sexistes
Seule ombre au tableau : l’un des participants, Inoxtag, considéré comme l’un des plus prometteurs de la nouvelle génération de youtubeurs et parmi le top 5 des personnalités ayant levé le plus de fonds lors de cet événement, a tenu des propos sexistes lors de son live.

Des faits dénoncés par l’une des autres participantes, la streameuse Ultia :

« C’est scandaleux ce qu’il se passe. Et nous, on l’applaudit ? Et on applaudit quelqu’un, parce que tout le monde est en train de la fétichiser, la sexualiser, parce qu’elle ne parle pas français, parce qu’elle comprend rien »

Les balises de section

La balise header

La balise header est utilisée dans deux cas :

  • pour spécifier l’en-tête de votre site (bannière, contenu introductif) ;
  • pour spécifier l’introduction d’une balise article (que l’on verra juste après).

La balise section

La balise section va permettre de regrouper les contenus qui sont sur un même sujet.

La balise footer est utilisée dans deux cas :

  • pour spécifier le pied de page de votre site ;
  • pour spécifier la conclusion d’une balise article.

La balise main

La balise main va permettre de spécifier quel est le contenu principal de votre page Web.

La balise aside

La balise aside va permettre d’informer que le contenu qu’elle englobe est complémentaire par rapport au contenu principal.

La balise nav

La balise nav indique une section offrant des liens de navigation.

La balise article

La balise article est particulière : elle spécifie du contenu qui, sémantiquement, pourrait être indépendant de la page web. Un article peut avoir son propre h1, son propre header, main et footer.

Autre balises

D’autres balises existent, parmi lesquelles

  • time;
  • summary;
  • mark;
  • details;
  • figcaption;
  • figure.

Les tableaux

Les tableaux ont souvent été utilisés pour autre chose que de la sémantique : il y a plusieurs années de cela, on les utilisait pour avoir une certaine disposition graphique. Aujourd’hui, nous n’avons plus besoin d’eux pour autre chose que de la sémantique et des cas particuliers où les données sont tabulaires (qui peuvent être utilisées dans un tableau).

La structure classique d’un tableau est la suivante :

<table>
 <!-- En-tête du tableau -->
	<thead>
		<!-- ligne -->
		<tr>
			<!-- Cellule d'en-tête -->
			<th>En-tête col1</th>
			<th>En-tête col2</th>
			<!-- on peut mettre autant de cellules d'en-têtes qu'on le souhaite -->
		</tr>
	</thead>
	<!-- Corps du tableau -->
	<tbody>
		<!-- ligne 1 -->
		<tr>
			<!-- Cellule (attention, ici c'est "td" et pas "th" !) -->
			<td>Cellule ligne 1 colonne 1</td>
			<td>Cellule ligne 1 colonne 2</td>
		</tr>
		
		<!-- ligne 2 -->
		<tr>
			<td>Cellule ligne 2 colonne 1</td>
			<td>Cellule ligne 2 colonne 2</td>
		</tr>
	</tbody>
</table>

Exercice : En vous basant sur la structure précédente et les données suivantes, écrivez un tableau HTML .

Données :

Principe du tableau : afficher la proportion d'étudiant.e.s dans chaque spécialité sur les trois dernières années.

Noms des colonnes : Initial, Dev, Design et E-business
Années : 2021, 2020 et 2019

Proportions : 
2019 >
		Initial > 15 %
		Dev > 25 %
		Design > 35 %
		E-business > 25 %
2020 >
		Initial > 25 %
		Dev > 33 %
		Design > 30 %
		E-business > 12 %
2021 >
		Initial > 0%
		Dev > 20 %
		Design > 35 %
		E-business > 45%

Les listes

Les listes, comme leur nom l’indique, vont servir à lister des éléments. Il existe deux types de listes : les listes ordonnées et les listes non-ordonnées.

Les listes ordonnées

<ol>
	<li>item 1</li>
	<li>item 2</li>
</ol>

Elles sont utilisées pour donner une idée d’ordre aux éléments qui la constituent.

Les listes non-ordonnées

<ul>
	<li>item 1</li>
	<li>item 2</li>
</ul>

Les listes non-ordonnées, au contraire des listes ordonnées, ne portent aucune notion d’ordre en elles. Elles sont celles qu’on retrouve le plus souvent.

Exercice : pour les listes suivantes, choisissez quel type de liste convient le mieux.

Liste 1 : classement des crypto-monnaies en terme de ranking sur CMC
- Bitcoin
- Ethereum
- Binance Coin
- Tether
- Cardano
- Solana

Liste 2 : liste de courses
- courgettes
- tomates
- laurier
- thym
- butternut
- lait d'avoine

Liste 3 : todo list
- ranger sa chambre
- nettoyer la salle de bain
- préparer les achats de Noël
- faire les courses
- avoir 20 en HTML - CSS - JavaScript

Liste 4 : liste des compétences
- JavaScript
- TypeScript
- Intégration CSS
- Java
- NodeJS

Les formulaires

Un formulaire se définit avec les balises<form></form>. Nous les verrons en détail plus tard (et vous les verrez également en PHP). Un formulaire contient des champs, définis avec <input>, et des boutons, définis avec <button></button>.

Les liens

Un lien hypertexte est ce qui vous permet de naviguer entre les pages d’un site, voire de site en site.

Un lien se définit avec la balise <a></a> et a besoin de l’attribut href pour fonctionner.

Exemple :

<a href="http://eemi.com">EEMI</a>

Exercice : écrivez, en HTML, un lien qui redirige vers Google. Cherchez également comment faire pour que ce lien s’ouvre dans un nouvel onglet.

Conclusion

Nous venons de voir plusieurs balises sémantiques pendant ce cours. D’autres balises existent, mais celles-ci sont les principales.

Pour finir, voici deux balises qui ne sont pas sémantiques : div et span. Ces deux balises sont ce que l’on appelle des conteneurs. Leur but est simplement de contenir d’autres balises et portions de page, pour ensuite y appliquer du CSS. Nous verrons tout cela plus en détail avec le cours sur le modèle en boîte.