Éléments en ligne
=================

Les éléments HTML (**Hypertext Markup Language**) étaient historiquement catégorisés comme des éléments de type « bloc » (*block* en anglais) ou de type « en ligne » (*inline* en anglais). Comme il s'agit d'une caractéristique de présentation, elle est aujourd'hui spécifiée par CSS dans le module de spécification *Flow Layout* qui définit l'organisation visuelle par défaut des éléments (le « flux » normal). Les éléments en lignes n'occupent que l'espace entre leurs balises et s'insèrent dans le flux du contenu plutôt que de créer un nouveau « bloc » visuel. Dans cet article, nous verrons en détails ces éléments en ligne et leurs différences par rapport aux éléments de bloc.

**Note :** Un élément en ligne ne commence pas sur une nouvelle ligne et prend uniquement la largeur qui lui est nécessaire.

Éléments en ligne et éléments de bloc : un exemple
--------------------------------------------------

Un exemple vaut mieux qu'une longue explication. Voici pour commencer la feuille de style CSS que nous utiliserons :


```css
.highlight {
  background-color: #ee3;
}
```

### Élément en ligne

Le fragment de code HTML qui suit utilise un élément en ligne avec la classe `highlight` :


```html
<p>
  L'élément span qui suit est un
  <span class="highlight">élément en ligne</span> ; son arrière-plan est coloré
  afin d'illustrer la zone couverte par cet élément en ligne.
</p>
```


Dans cet exemple, l'élément `<p>` (le paragraphe) est un élément de bloc qui contient du texte. Dans ce texte, on a un élément `<span>` qui est un élément en ligne. L'élément `<span>` étant un élément en ligne, le paragraphe est bien affiché sous la forme d'un flux de texte sans rupture :
```

body {
  margin: 0;
  padding: 4px;
  border: 1px solid #333;
}

.highlight {
  background-color: #ee3;
}
```

### Élément de bloc

Transformons l'exemple précédent pour passer d'un élément `<span>` à un élément `<div>` qui est un élément de bloc :


```html
<p>L'élément div qui suit est un <div class="highlight">élément de bloc</div> ;
son arrière-plan est coloré afin d'illustrer la zone couverte par cet élément de
bloc.</p>
```


```
body {
  margin: 0;
  padding: 4px;
  border: 1px solid #333;
}

.highlight {
  background-color: #ee3;
}
```


Et voici le résultat qu'on obtient :

On voit ici que l'élément `<div>` modifie complètement la disposition du texte et le découpe en trois parties : une partie avant le `<div>`, une partie constituée avec le texte de l'élément `<div>` et une dernière partie ensuite.

### Modifier le type d'un d'élément

Il est possible de choisir le mode d'affichage d'un élément afin de modifier son comportement par défaut grâce à la propriété CSS `display`. En passant la valeur de `display` de `"inline"` à `"block"`, on peut indiquer au navigateur d'afficher l'élément comme une boîte de bloc plutôt que comme une boîte en ligne. Attention, l'élément ne sera plus affiché de la même façon, vérifiez le résultat obtenu. De plus, ce changement n'impactera pas la catégorie et le modèle de contenu de l'élément : utiliser `display:block` sur un élément `<span>` ne permettra toujours pas de lui imbriquer un élément `<div>` à l'intérieur.

Différences conceptuelles
-------------------------

Voici, en résumé, les différences conceptuelles entre les éléments en ligne et les éléments de bloc :

Modèle de contenu

En général, les éléments en ligne ne peuvent contenir que des données ou d'autres éléments en ligne. Il n'est pas possible de placer des éléments de bloc à l'intérieur d'éléments en ligne.

Formatage

Par défaut, les éléments en ligne n'introduisent pas de saut de ligne dans le flux du document. En revanche, les éléments de bloc provoquent un saut de ligne (ce comportement peut être modifié grâce au CSS).

Liste des éléments en ligne
---------------------------

Bien que cette notion de présentation soit désormais (depuis HTML5) portée par le CSS et remplacée par les catégories de contenu, voici les éléments HTML qui se comportent par défaut comme des éléments en ligne:

* `<a>`
* `<abbr>`
* `<acronym>`
* `<audio>` (si les contrôles sont visibles)
* `<b>`
* `<bdi>`
* `<bdo>`
* `<big>`
* `<br>`
* `<button>`
* `<canvas>`
* `<cite>`
* `<code>`
* `<data>`
* `<datalist>`
* `<del>`
* `<dfn>`
* `<em>`
* `<embed>`
* `<i>`
* `<iframe>`
* `<img>`
* `<input>`
* `<ins>`
* `<kbd>`
* `<label>`
* `<map>`
* `<mark>`
* `<meter>`
* `<noscript>`
* `<object>`
* `<output>`
* `<picture>`
* `<progress>`
* `<q>`
* `<ruby>`
* `
`
* `<samp>`
* `<script>`
* `<select>`
* `<slot>`
* `<small>`
* `<span>`
* `<strong>`
* `<sub>`
* `<sup>`
* `<svg>`
* `<template>`
* `<u>`
* `<tt>`
* `<var>`
* `<video>`
* `<wbr>`
Voir aussi
----------

* Les éléments de bloc
* Référence des éléments HTML
* La propriété CSS `display`
* Les catégories de contenu
* Les éléments de bloc et les éléments en ligne dans le flux normal