Table des matières

(Presque) toute la documentation provient de MDN Web Docs

<head>
  <meta charset="utf-8" />
  <title>My test page</title>
  <meta name="author" content="Chris Mills" />
  <meta name="description" content="Bla bla." />
 
  <link rel="icon" href="https://example.com/favicon-150x150.png" sizes="32x32" type="image/x-icon" />
  <link rel="icon" href="https://example.com/favicon.png" sizes="192x192" type="image/x-icon" />
  <link rel="icon" href="favicon.ico" />
  <link rel="apple-touch-icon" sizes="144x144" href="https://developer.mozilla.org/static/img/favicon144.png" />
  <link rel="apple-touch-icon" sizes="114x114" href="https://developer.mozilla.org/static/img/favicon114.png" />
  <link rel="apple-touch-icon" sizes="72x72" href="https://developer.mozilla.org/static/img/favicon72.png" />
  <link rel="apple-touch-icon" href="https://developer.mozilla.org/static/img/favicon57.png" />
 
  <link rel="stylesheet" href="my-css-file.css" />
 
  <script src="my-js-file.js" defer></script>
</head>

Pour <link rel="stylesheet">, voir css.

Pour <script src="my-js-file.js" defer></script>, voir css. Il est nécessaire d'écrire </script>.

Les seuls pouvant s’abréger sont : <area>, <base>, <br>, <col>, <embed>, <hr>, <img>, <input>, <link>, <meta>, <param>, <source>, <track>, <wbr>. Void element

Open Graph protocol

Données pour présenter sous forme de miniature la page web.

  <meta property="og:locale" content="fr_FR" />
  <meta property="og:type" content="article" />
  <meta property="og:title" content="Title" />
  <meta property="og:description" content="Bla bla" />
  <meta property="og:url" content="https://example.com/original/url" />
  <meta property="og:site_name" content="Site Name" />
  <meta property="og:image" content="https://example.com/image.webp" />
  <meta property="og:image:width" content="1280" />
  <meta property="og:image:height" content="620" />
  <meta property="og:image:type" content="image/webp" />

Getting started with Cards

  <meta name="twitter:card" content="summary" />
  <meta name="twitter:site" content="@nytimesbits" />
  <meta name="twitter:creator" content="@nickbilton" />

body

Structure de la page

Tous les champs servent essentiellement aux crawlers.

<article> : le contenu est un article.

<section> : rubriques d'un article.

<div> : bloc pour un contenu divers. Le crawler ne connait pas l'importance du contenu.

Paragraphes

Attribut id : désigne un point d'ancrage pour les liens hypertexte,

<h1>h1 header</h1>
<h2>h2 header</h2>
<h3>h3 header</h3>
<h4>h4 header</h4>
<h5>h5 header</h5>
<h6>h6 header</h6>

h1 header

h2 header

h3 header

h4 header

h5 header
h6 header
Texte
 
non
 
multi-ligne.
 
<p>Texte</p>
<p>multi-ligne.</p>
Texte non multi-ligne.

Texte

multi-ligne.

Par exemple : utiliser <p> pour délimiter les couplets et refrains d'une chanson et utiliser <br /> pour les rimes.

Ligne 1<br />
Ligne 2
Ligne 1
Ligne 2
<ol>
  <li>liste ordonnée
    <ul>
      <li>liste non ordonnée imbriquée</li>
    <ul>
  </li>
<ol>
  1. liste ordonnée
    • liste non ordonnée imbriquée
<dl>
  <dt>Terme</dt>
  <dd>Description 1</dd>
  <dd>Description 2</dd>
<dl>
Terme
Description 1
Description 2
<blockquote cite="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote">
<p>blabla</p>
</blockquote>

blabla

Il y a <q> pour une citation dans un paragraphe.

On peut aussi combiner <blockquote> et <cite>

<blockquote>
  <p>Text</p>
  <footer>
   <cite><a href="http://www.example.com/">Cite text</a></cite>
  </footer>
</blockquote>

Text

<address>
  <a href="mailto:jim@example.com">jim@example.com</a><br />
  <a href="tel:+14155550132">+1 (415) 555‑0132</a>
</address>
Auteur: W3docs team
Contacter à l'auteur

Toutes les affichages sont identiques. code représente du code informatique, var représente une variable, kbd représente la commande saisie au clavier, samp représente la sortie standard.

Groupes de mots

<span style="font-size: 32px; margin: 21px 0; display: block;">
  Is this a top level heading?
</span>
Is this a top level heading?
I am <em>glad</em> you weren't <em>late</em>.
I am glad you weren't late.
This liquid is <strong>highly toxic</strong>.
This liquid is highly toxic.
This liquid is <mark>highly toxic</mark>.
This liquid is highly toxic.

La documentation de Mozilla indique de mettre le format à l'intérieur du <a>.

<a href="https://developer.mozilla.org/en-US/">
  <h1>MDN Web Docs</h1>
</a>
<a href="https://developer.mozilla.org/en-US/">
  <img src="mdn_logo.svg" alt="MDN Web Docs" />
</a>

On peut ajouter #XYZ en fin d'adresse Internet pour se positionner à l'emplacement dans la page qui contient l'attribut id="XYZ".

L'attribut title ajoute un texte via une tooltip (déprécié, non utilisable sans souris).

Le texte du lien doit être une description autonome de l'URL. Mauvais exemple : <a href="https://www.mozilla.org/firefox/">Cliquer ici</a> pour télécharger.

On peut aussi faire un lien vers un mail : <a href="mailto:nowhere@mozilla.org">Send email to nowhere</a>.

<q cite="https://developer.mozilla.org/en-US/docs/Web/HTML/Element/blockquote">blabla</q>
blabla

Il y a <blockquote> pour une citation de tout un paragraphe.

<abbr title="Reverend">Rev.</abbr>
Rev.
C<sub>8</sub>H<sub>10</sub>N<sub>4</sub>O<sub>2</sub>
C8H10N4O2
<time datetime="2016-01-20">20 January 2016</time>

Multimédia

Images

<img src="mdn_logo.svg" alt="Mozilla logo" />
MDN Web Docs

Attribut alt : pour un texte alternatif décrivant l'image.

Attributs width et height : dimension en pixel. La taille doit correspondre aux dimensions de l'image. Ce n'est pas fait pour redimensionner l'image (sauf taille dynamique dans la page). Si seulement un des deux attributs est indiqué, le ratio de la taille de l'image sera conservé.

Attributs srcset et sizes : afficher une image spécifique en fonction de la largeur de l'image affichée. Souvent la dimension de l'image dépend de la largeur d'affichage.

<img
  srcset="img-480w.jpg 480w, img-800w.jpg 800w"
  sizes="(max-width: 600px) 480px,
         800px"
  src="img-800w.jpg" />

Dans srcset, il faut mettre la liste des images avec leur dimension. On met w pour indiquer la largeur (width) en pixel.

Dans sizes, il y a la largeur (en px) en fonction d'une condition CSS. La première condition vraie est appliquée donc l'ordre est important.

Il permet d'afficher des images de façon dynamique mais de façon plus fine, toujours sur la base de condition CSS.

<picture>
  <source media="(max-width: 799px)" srcset="elva-480w.jpg" />
  <source media="(min-width: 800px)" srcset="elva-800w.jpg" />
  <img src="elva-800w.jpg" alt="Chris standing up holding his daughter Elva" />
</picture>

ou encore :

<picture>
  <source media="(orientation: landscape)"
    srcset="land-small-car-image.jpg 200w,
            land-medium-car-image.jpg 600w,
            land-large-car-image.jpg 1000w"
    sizes="(min-width: 700px) 500px,
           (min-width: 600px) 400px,
           100vw">
  <source media="(orientation: portrait)"
    srcset="port-small-car-image.jpg 700w,
            port-medium-car-image.jpg 1200w,
            port-large-car-image.jpg 1600w"
    sizes="(min-width: 768px) 700px,
           (min-width: 1024px) 600px,
           500px">
  <img src="land-medium-car-image.jpg" alt="Car">
</picture>

Why You Should Use Picture Tag Instead of Img Tag Archive du 25/01/2021 le 14/03/2024

<figure>
  <img
    src="images/dinosaur.jpg"
    alt="The head and torso of a dinosaur skeleton;
            it has a large head with long sharp teeth"
    width="400"
    height="341" />
 
  <figcaption>
    A T-Rex on display in the Manchester University Museum.
  </figcaption>
</figure>
The head and torso of a dinosaur skeleton;
            it has a large head with long sharp teeth
A T-Rex on display in the Manchester University Museum.

Il est possible d'inclure l'image via <img src="equilateral.svg" /> ou directement <svg>…</svg>.

Dans le premier cas, l'image peut être mise en cache. Mais les css de la page n'impacteront pas l'image svg.

Dans le cas où l'image est “inline”, c'est l'inverse.

Vidéos

<video src="rabbit320.webm" controls>
  <source src="rabbit320.webm" type="video/webm" />
    <p>
    Your browser doesn't support HTML video. Here is a
    <a href="rabbit320.webm">link to the video</a> instead.
  </p>
</video>

Il est aussi possible de mettre plusieurs formats de vidéo :

<video controls>
  <source src="rabbit320.mp4" type="video/mp4" />
  <source src="rabbit320.webm" type="video/webm" />
  <p>
    Your browser doesn't support this video. Here is a
    <a href="rabbit320.mp4">link to the video</a> instead.
  </p>
</video>

Liste des attributs :

<video
  controls
  width="400"
  height="400"
  autoplay
  loop
  muted
  preload="auto"
  poster="poster.png">
  <source src="/lib/exe/fetch.php?media=prog:html:rabbit320.webm" type="video/webm" />
  <p>
    Your browser doesn't support this video. Here is a
    <a href="rabbit320.mp4">link to the video</a> instead.
  </p>
</video>

On peut utiliser le format vtt.

WEBVTT

0
00:00:00.000 --> 00:00:12.000
<v Test>[Test]</v>

NOTE This is a comment and must be preceded by a blank line

1
00:00:18.700 --> 00:00:21.500
This blade has a dark past.

2
00:00:22.800 --> 00:00:26.800
It has shed much innocent blood.

Les numéros 0/1/2 s'incrémentent pour chaque texte.

Il est possible de mettre plusieurs track, une pour chaque sous-titre.

<video controls>
  <source src="example.webm" type="video/webm" />
  <track kind="subtitles" src="subtitles_es.vtt" srclang="es" label="Spanish" />
</video>

Audio

La syntaxe est proche de <video>. Les attributs sont les mêmes sauf height, width et poster qui n'existent pas.

<audio controls>
  <source src="viper.mp3" type="audio/mp3" />
  <source src="viper.ogg" type="audio/ogg" />
  <p>
    Your browser doesn't support this audio file. Here is a
    <a href="viper.mp3">link to the audio</a> instead.
  </p>
</audio>

Contenu externe

<iframe width="560" height="315"
src="https://www.youtube-nocookie.com/embed/T3twGCdofGA?si=50WCDE7BqTocjyY7"
title="YouTube video player" frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope;
picture-in-picture; web-share" allowfullscreen></iframe>

Attributs sans commentaire : width, height et allowfullscreen.

sandbox : toujours le mettre quand le widget est compatible (donc pas Google).

<object data="mypdf.pdf" type="application/pdf" width="800" height="1200">
  <p>
    You don't have a PDF plugin, but you can
    <a href="mypdf.pdf">download the PDF file. </a>
  </p>
</object>

You don't have a PDF plugin, but you can download the PDF file.

Il existe aussi <embed> pour faire la même chose c'est l'ancienne syntaxe.

Données

<table>
  <tr>
    <td>Hi, I'm your first cell.</td>
    <td>I'm your second cell.</td>
  </tr>
  <tr>
    <td>I'm your third cell.</td>
    <td>I'm your fourth cell.</td>
  </tr>
</table>
Hi, I'm your first cell. I'm your second cell.
I'm your third cell. I'm your fourth cell.

Les entêtes th sont des cellules, pas des lignes ou des colonnes.

Il est aussi possible de fusionner les cellules et colonnes avec rowspan et colspan.

<table>
  <tr>
    <th colspan="2">Animals</th>
  </tr>
  <tr>
    <th colspan="2">Hippopotamus</th>
  </tr>
  <tr>
    <th rowspan="2">Horse</th>
    <td>Mare</td>
  </tr>
  <tr>
    <td>Stallion</td>
  </tr>
  <tr>
    <th colspan="2">Crocodile</th>
  </tr>
  <tr>
    <th rowspan="2">Chicken</th>
    <td>Hen</td>
  </tr>
  <tr>
    <td>Rooster</td>
  </tr>
</table>
Animals
Hippopotamus
Horse Mare
Stallion
Crocodile
Chicken Hen
Rooster

Enfin, il est possible de changer le style de chaque colonne avec colgroup et col.

<table>
  <colgroup>
    <col span="2">
    <col style="background-color:#97DB9A;">
    <col style="width:42px;">
    <col style="background-color:#97DB9A;">
    <col style="background-color:#DCC48E; border:4px solid #C1437A;">
    <col span="2" style="width:42px;">
  </colgroup>
  <tr>
    <td>&nbsp;</td>
    <th>Mon</th>
    <th>Tues</th>
    <th>Wed</th>
    <th>Thurs</th>
    <th>Fri</th>
    <th>Sat</th>
    <th>Sun</th>
  </tr>
</table>
  Mon Tues Wed Thurs Fri Sat Sun
1st period English     German Dutch    

Utiliser <caption> pour ajouter un titre à la table.

Il est aussi possible de mettre les lignes d'entête dans un <thead>, les lignes de bas de tableau dans un <tfoot> et les lignes restants dans un <tbody>.

Enfin, il est possible d'expliciter les entêtes des lignes et colonnes avec l'attribut scope="col" ou scope="row". Si des cellules d'entête sont fusionnées avec colspan ou rowspan, il faut utiliser colgroup et rowgroup.

<table>
  <caption>Titre</caption>
  <thead>
    <tr>
      <td>&nbsp;</td>
      <th scope="col">Mon</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">1st period</th>
      <td>English</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <td>Dernier1</td>
      <th scope="col">Dernier2</th>
    </tr>
  </tfoot>
</table>
Titre
  Mon
1st period English
Dernier1 Dernier2

Exemples

Syntaxe Mozilla Marking up a letter

structure Mozilla Structuring a page of content

Cas particuliers

Si l'arbre html est invalide, le navigateur va faire des modifications (pouvant varier en fonction des navigateurs) pour rendre le XML valide.

Il existe des validateurs HTML : The W3C Markup Validation Service.

Exemple :

<p>What causes errors in HTML?
<ul>...

va devenir

<p>What causes errors in HTML?</p>
<ul>