Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Propriété CSS column-height
Expérimental: Il s'agit d'une technologie expérimentale.
Vérifiez attentivement le tableau de compatibilité des navigateurs avant de l'utiliser en production.
La propriété CSS column-height définit la hauteur des colonnes dans une mise en page multi-colonnes CSS.
La propriété abrégée columns peut être utilisée pour définir les valeurs des propriétés column-height, column-count et column-width dans une seule déclaration.
Syntaxe
/* Valeurs avec un mot-clé */
column-height: auto;
/* Valeurs de type <length> */
column-height: 300px;
column-height: 25em;
column-height: 70vh;
/* Valeurs globales */
column-height: inherit;
column-height: initial;
column-height: revert;
column-height: revert-layer;
column-height: unset;
Valeurs
auto-
La valeur initiale. Si le conteneur de contenu a une hauteur définie, les colonnes de contenu s'étendront jusqu'à cette hauteur, débordant sur le côté si le contenu ne tient pas à l'intérieur du conteneur. Si le conteneur de contenu n'a pas de hauteur définie, le contenu sera réparti également entre les colonnes générées à l'intérieur du conteneur.
<length>-
La hauteur des colonnes. Doit être non négative.
Description
La propriété column-height définit la hauteur des colonnes dans une mise en page multi-colonnes. Cela est utile pour contraindre la hauteur des colonnes pour la lisibilité lors de la définition de plusieurs colonnes à l'aide des propriétés column-count ou column-width.
Sans column-height, si la hauteur du contenu multi-colonnes dépasse la hauteur de la fenêtre, les lecteurs devront faire défiler jusqu'à la fin d'une colonne, puis revenir en haut de la colonne suivante. Une solution possible serait de définir une hauteur fixe sur le conteneur de contenu, cependant, les colonnes excédentaires déborderont alors sur le côté, et les lecteurs devront faire défiler horizontalement pour lire tout le contenu.
La propriété column-height, ainsi que column-wrap, permet de définir une hauteur spécifique pour les colonnes et de les envelopper sur une nouvelle rangée de colonnes lorsque le bord du conteneur est atteint.
La valeur par défaut de column-wrap est auto, ce qui se résout en wrap lorsque column-height est défini sur une valeur de type <length> ; wrap permet aux colonnes à hauteur fixe de s'enrouler sur plusieurs rangées. Lorsque column-height est égal à auto, column-wrap: auto se résout en nowrap, permettant aux colonnes de déborder horizontalement si une hauteur de conteneur fixe est définie. En raison de ce comportement par défaut, il n'est généralement pas nécessaire de définir explicitement la propriété column-wrap.
Définition formelle
| Valeur initiale | auto |
|---|---|
| Applicabilité | Conteneurs de type bloc, sauf les boîtes englobant les tableaux |
| Héritée | non |
| Valeur calculée | auto if specified as auto, otherwise for <length> the absolute value specified |
| Type d'animation | par type de valeur calculée |
Syntaxe formelle
column-height =
auto |
<length [0,∞]>
Exemples
>Utilisation simple
Cet exemple démontre une utilisation simple de la propriété column-height pour créer une mise en page multi-colonnes enveloppée.
HTML
Nous incluons un poème de Dr. Seuss en utilisant une liste ordonnée (<ol>) contenant 28 éléments <li>, suivi du nom de l'auteur dans un paragraphe (<p>).
<ol>
<li>Un poisson</li>
<li>Deux poissons</li>
<li>Poisson rouge</li>
<li>Poisson bleu</li>
...
</ol>
<p>-- Dr. Seuss</p>
<ol>
<li>Un poisson</li>
<li>Deux poissons</li>
<li>Poisson rouge</li>
<li>Poisson bleu</li>
<li>Poisson noir</li>
<li>Poisson bleu</li>
<li>Poisson vieux</li>
<li>Poisson nouveau.</li>
<li>Celui-ci a une petite étoile.</li>
<li>Celui-ci a une petite voiture.</li>
<li>Dis ! Quelle quantité</li>
<li>De poissons il y a.</li>
<li>Oui. Certains sont rouges. Et certains sont bleus.</li>
<li>Certains sont vieux. Et certains sont nouveaux.</li>
<li>Certains sont tristes.</li>
<li>Et certains sont joyeux.</li>
<li>Et certains sont très, très mauvais.</li>
<li>Pourquoi sont-ils</li>
<li>Tristes et joyeux et mauvais ?</li>
<li>Je ne sais pas.</li>
<li>Allez demander à votre père.</li>
<li>Certains sont minces.</li>
<li>Et certains sont gros.</li>
<li>Le gros a</li>
<li>Un chapeau jaune.</li>
<li>De là à ici, d'ici à là,</li>
<li>Des choses amusantes</li>
<li>Sont partout.</li>
</ol>
<p>--Dr. Seuss</p>
CSS
Nous définissons la liste ordonnée (<ol>) comme un conteneur multi-colonnes en définissant la propriété column-width à 150px, ce qui signifie que le conteneur contiendra autant de colonnes que possible, chacune ayant au moins 150px de large. La propriété gap de 2em définit un écart horizontal entre les colonnes et un écart vertical entre les rangées de colonnes. Nous définissons ensuite la column-height à 2em, ce qui fait que la valeur par défaut auto de la propriété column-wrap se résout en wrap pour créer des rangées de colonnes enveloppées.
ol {
column-width: 150px;
gap: 2em;
column-height: 3em;
}
Résultat
Colonnes avec un défilement à accroche
Cet exemple combine une mise en page multi-colonnes enveloppée par un défilement à accroche CSS, créant une expérience utilisateur·ice où chaque action de défilement accroche une nouvelle rangée de colonnes à l'intérieur de la hauteur complète de la fenêtre pour une lecture confortable.
HTML
Le HTML, qui contient plusieurs paragraphes de contenu provenant des pages d'accueil MDN HTML, CSS et JavaScript, a été masqué pour des raisons de concision.
<h1>Résumés HTML, CSS et JavaScript</h1>
<p>
<strong>HTML</strong> (HyperText Markup Language) est le bloc de construction
le plus basique du Web. Il définit le sens et la structure du contenu web.
D'autres technologies, en plus de HTML, sont généralement utilisées pour
décrire l'apparence (CSS) ou le comportement (JavaScript) d'une page web.
</p>
<p>
« L'Hypertexte » fait référence aux liens qui connectent les pages
web entre elles, soit au sein d'un même site web, soit entre différents sites
web. Les liens sont un aspect fondamental du Web. En téléchargeant du contenu
sur Internet et en le liant à des pages créées par d'autres personnes, vous
devenez un participant actif du World Wide Web.
</p>
<p>
Le HTML utilise le « balisage » pour annoter le texte, les images et
d'autres contenus afin de les afficher dans un navigateur Web. Le balisage
HTML comprend des « éléments » spéciaux tels que
<a href="/fr/docs/Web/HTML/Reference/Elements/head"
><code><head></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/title"
><code><title></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/body"
><code><body></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/header"
><code><header></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/footer"
><code><footer></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/article"
><code><article></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/section"
><code><section></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/p"> <code><p></code> </a>,
<a href="/fr/docs/Web/HTML/Reference/Elements/div"><code><div></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/span"
><code><span></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/img"><code><img></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/aside"
><code><aside></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/audio"
><code><audio></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/canvas"
><code><canvas></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/datalist"
><code><datalist></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/details"
><code><details></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/embed"
><code><embed></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/nav"><code><nav></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/search"
><code><search></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/output"
><code><output></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/progress"
><code><progress></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/video"
><code><video></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/ul"><code><ul></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/ol"><code><ol></code></a
>,
<a href="/fr/docs/Web/HTML/Reference/Elements/li"><code><li></code></a>
et bien d'autres.
</p>
<p>
Un élément HTML est distingué du reste du texte dans un document par des
« balises », qui consistent en le nom de l'élément entouré de
<code><</code> et <code>></code>. Le nom d'un élément à l'intérieur
d'une balise n'est pas sensible à la casse. C'est-à-dire qu'il peut être écrit
en majuscules, en minuscules ou dans un mélange des deux. Par exemple, la
balise <code><title></code> peut être écrite comme
<code><Title></code>, <code><TITLE></code>, ou de toute autre
manière. Cependant, la convention et la pratique recommandée est d'écrire les
balises en minuscules.
</p>
<hr />
<p>
<strong>Les feuilles de style en cascade</strong>
(<strong>CSS</strong>) est un
<a href="/fr/docs/Web/API/StyleSheet">langage de feuilles de style</a>
utilisé pour décrire la présentation d'un document écrit en
<a href="/fr/docs/Web/HTML">HTML</a> ou
<a href="/fr/docs/Web/XML/Guides/XML_introduction">XML</a> (y compris les
dialectes XML tels que <a href="/fr/docs/Web/SVG">SVG</a>,
<a href="/fr/docs/Web/MathML">MathML</a> ou
<a href="/fr/docs/Glossary/XHTML">XHTML</a>). CSS décrit comment les éléments
doivent être rendus à l'écran, sur papier, à l'oral ou sur d'autres supports.
</p>
<p>
CSS fait partie des langages de base du <strong>web ouvert</strong> et est
standardisé à travers les navigateurs web selon
<a
href="https://www.w3.org/Style/CSS/#specs"
class="external"
target="_blank">
les spécifications du W3C <sup>(angl.)</sup> </a
>. Auparavant, le développement de différentes parties de la spécification CSS
se faisait de manière synchrone, ce qui permettait la version des dernières
recommandations. Vous avez peut-être entendu parler de CSS1, CSS2.1, ou même
CSS3. Il n'y aura jamais de CSS3 ou de CSS4 ; plutôt, tout est maintenant
simplement « CSS » avec des modules CSS individuels ayant des
numéros de version.
</p>
<p>
Après CSS 2.1, la portée de la spécification a considérablement augmenté et le
progrès des différents modules CSS a commencé à différer tellement, qu'il est
devenu plus efficace de
<a
href="https://www.w3.org/Style/CSS/current-work"
class="external"
target="_blank">
développer et publier des recommandations séparément par module
<sup>(angl.)</sup> </a
>. Au lieu de versionner la spécification CSS, le W3C prend maintenant
périodiquement un instantané de
<a href="https://www.w3.org/TR/css/" class="external" target="_blank">
l'état stable le plus récent de la spécification CSS
<sup>(angl.)</sup>
</a>
et le progrès des modules individuels. Les modules CSS ont maintenant des
numéros de version, ou des niveaux, tels que
<a
href="https://drafts.csswg.org/css-color-5/"
class="external"
target="_blank"
>CSS Color Module Level 5 <sup>(angl.)</sup></a
>.
</p>
<hr />
<p>
<strong>JavaScript</strong> (<strong>JS</strong>) est un langage de
programmation léger interprété (ou
<a href="/fr/docs/Glossary/Just_In_Time_Compilation">compilé juste-à-temps</a
>) avec des
<a href="/fr/docs/Glossary/First-class_Function">
fonctions de première classe </a
>. Bien qu'il soit surtout connu comme le langage de script pour les pages
Web,
<a
href="https://fr.wikipedia.org/wiki/JavaScript#Autres_utilisations"
class="external"
target="_blank"
>de nombreux environnements non-navigateurs</a
>
l'utilisent également, tels que
<a href="/fr/docs/Glossary/Node.js">Node.js</a>,
<a href="https://couchdb.apache.org/" class="external" target="_blank"
>Apache CouchDB</a
>
et
<a
href="https://opensource.adobe.com/dc-acrobat-sdk-docs/acrobatsdk/"
class="external"
target="_blank"
>Adobe Acrobat</a
>. JavaScript est un langage
<a href="/fr/docs/Glossary/Prototype-based_programming">
basé sur les prototypes </a
>,
<a href="/fr/docs/Glossary/Garbage_collection">
avec gestion automatique de la mémoire </a
>, <a href="/fr/docs/Glossary/Dynamic_typing">dynamique</a>, supportant
plusieurs paradigmes tels que impératif, fonctionnel et orienté objet.
</p>
<p>
Les capacités dynamiques de JavaScript incluent la construction d'objets à
l'exécution, les listes de paramètres variables, les variables de fonction, la
création de scripts dynamiques (avec
<a href="/fr/docs/Web/JavaScript/Reference/Global_Objects/eval"
><code>eval</code></a
>), l'introspection des objets (avec
<a href="/fr/docs/Web/JavaScript/Reference/Statements/for...in"
><code>for...in</code></a
>
et
<a
href="/fr/docs/Web/JavaScript/Reference/Global_Objects/Object#méthodes_statiques"
>les <code>Object</code> utilitaires</a
>), et la récupération du code source (les fonctions JavaScript stockent leur
texte source et peuvent être récupérées avec
<a href="/fr/docs/Web/JavaScript/Reference/Global_Objects/Function/toString"
><code>toString()</code></a
>).
</p>
<p>
Cette section est dédiée au langage JavaScript lui-même, et non aux parties
spécifiques aux pages Web ou à d'autres environnements hôtes. Pour des
informations sur les <a href="/fr/docs/Glossary/API">API</a>
spécifiques aux pages Web, veuillez consulter
<a href="/fr/docs/Web/API">Web APIs</a> et
<a href="/fr/docs/Glossary/DOM">DOM</a>.
</p>
<p>
Les standards pour JavaScript sont les
<a href="https://tc39.es/ecma262/" class="external" target="_blank"
>ECMAScript Language Specification <sup>(angl.)</sup></a
>
(ECMA-262) et la
<a href="https://tc39.es/ecma402/" class="external" target="_blank">
ECMAScript Internationalization API specification <sup>(angl.)</sup>
</a>
(ECMA-402). Dès qu'un navigateur implémente une fonctionnalité, nous essayons
de la documenter. Cela signifie que dans certains cas, des
<a href="https://github.com/tc39/proposals" class="external" target="_blank">
propositions pour de nouvelles fonctionnalités ECMAScript
<sup>(angl.)</sup>
</a>
ont déjà été implémentées dans les navigateurs, documentation et exemples dans
les articles MDN peuvent utiliser certaines de ces nouvelles fonctionnalités.
La plupart du temps, cela se produit entre les
<a href="https://tc39.es/process-document/" class="external" target="_blank"
>étapes <sup>(angl.)</sup></a
>
3 et 4, et se produit généralement avant que la spécification ne soit
officiellement publiée.
</p>
<p>
Ne confondez pas JavaScript avec le
<a
href="https://fr.wikipedia.org/wiki/Java_(langage)"
class="external"
target="_blank"
>langage de programmation Java</a
>
—
<strong>JavaScript n'est <em>pas</em> « Java interprété »</strong>.
Les deux termes « Java » et « JavaScript » sont des
marques déposées ou des marques commerciales d'Oracle aux États-Unis et dans
d'autres pays. Cependant, les deux langages de programmation ont une syntaxe,
une sémantique et une utilisation très différentes.
</p>
<p>
La documentation JavaScript des fonctionnalités de base du langage
(principalement
<a href="/fr/docs/Web/JavaScript/Reference/JavaScript_technologies_overview"
>ECMAScript <sup>(angl.)</sup></a
>, pour la plupart) inclut les éléments suivants :
</p>
CSS
Nous commençons par définir column-width sur l'élément HTML <body> pour définir la largeur préférée des colonnes. Un gap de 3em 2em entraîne un espace de 3em entre les lignes et un espace de 2em entre les colonnes. Le column-rule ajoute une ligne au centre de l'espace entre les colonnes. La column-height de 95vh rend les colonnes presque aussi hautes que la fenêtre d'affichage.
Nous définissons explicitement column-wrap sur wrap comme rappel du comportement de retour à la ligne appliqué. Nous aurions pu définir la valeur sur auto ou omettre complètement la propriété, car, par défaut, column-wrap se résout en wrap lorsque column-height est défini sur une valeur <length>.
body {
column-width: 150px;
column-rule: 2px solid red;
gap: 3em 2em;
padding: 0 2em;
column-height: 95vh;
column-wrap: wrap;
}
Ensuite, nous définissons la propriété column-span de l'élément HTML <h1> sur all, afin que le titre s'étende sur toutes les colonnes, et nous définissons la propriété margin-top du premier <p> sur 0 afin qu'il s'aligne avec le haut des colonnes.
h1 {
column-span: all;
}
p:first-of-type {
margin-top: 0;
}
Enfin, nous ajoutons le défilement par accroche en définissant scroll-snap-type sur y mandatory sur l'élément <html>, et scroll-snap-align sur start sur les pseudo-éléments ::column qui représentent chaque colonne générée. Cela fait en sorte que le contenu s'accroche en haut d'une nouvelle colonne à chaque fois qu'il est défilé.
html {
scroll-snap-type: y mandatory;
}
::column {
scroll-snap-align: start;
}
* {
box-sizing: border-box;
}
html {
font-family: "Arial", sans-serif;
}
p {
line-height: 1.5;
}
@supports not (column-height: 15em) {
body::before {
content: "Votre navigateur ne prend pas en charge la propriété 'column-height'.";
background-color: wheat;
position: fixed;
inset: 40% 0;
height: fit-content;
text-align: center;
padding: 1rem 0;
}
}
Résultat
Essayez de faire défiler le contenu. Remarquez comment chaque nouvelle ligne de colonnes remplit la fenêtre d'affichage, et comment le contenu s'accroche proprement en haut d'une nouvelle ligne à chaque défilement.
Zone de test de column-height et column-count playground
Cet exemple s'appuie sur le précédent en incluant deux curseurs de plage qui vous permettent d'ajuster le nombre de colonnes et la hauteur des colonnes dans la mise en page multi-colonnes.
HTML et JavaScript
Le HTML est le même que dans l'exemple précédent, avec l'ajout d'un formulaire contenant deux éléments <input type="range"> qui mettent à jour les valeurs de column-count et column-height via JavaScript. Le HTML et le JavaScript sont masqués pour plus de concision.
<form>
<div>
<label for="columns">
<code>column-count <output id="columns-output">3</output></code>
</label>
<input type="range" min="3" max="6" value="3" id="columns" />
</div>
<div>
<label for="column-height">
<code>column-height <output id="column-height-output">20em</output></code>
</label>
<input type="range" min="10" max="30" value="20" id="column-height" />
</div>
</form>
const columnsRange = document.getElementById("columns");
const columnsOutput = document.getElementById("columns-output");
const columnHeightRange = document.getElementById("column-height");
const columnHeightOutput = document.getElementById("column-height-output");
columnsRange.addEventListener("input", () => {
document.body.style.columnCount = columnsRange.value;
columnsOutput.textContent = columnsRange.value;
});
columnHeightRange.addEventListener("input", () => {
document.body.style.columnHeight = `${columnHeightRange.value}em`;
columnHeightOutput.textContent = `${columnHeightRange.value}em`;
});
CSS
Nous définissons la column-rule et la gap avec les mêmes valeurs que dans l'exemple précédent. Nous ne définissons pas de column-width ; à la place, nous créons une mise en page multi-colonnes en utilisant la propriété column-count, en réglant de manière interactive le nombre de colonnes et la hauteur des lignes de colonnes avec JavaScript. Le défilement par accroche n'est pas inclus dans cet exemple.
body {
column-count: 3;
column-height: 20em;
column-rule: 2px solid red;
gap: 3em 2em;
padding: 0 2em;
}
form {
border: 1px solid black;
background-color: white;
padding: 10px;
position: fixed;
bottom: 1px;
right: 1px;
}
form div {
display: flex;
gap: 1em;
align-items: center;
justify-content: space-between;
}
Résultat
Ajustez le nombre de colonnes et la hauteur des colonnes pour voir l'effet de ces propriétés.
Spécifications
| Spécification |
|---|
| CSS Multi-column Layout Module Level 2> # propdef-column-height> |
Compatibilité des navigateurs
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Voir aussi
- La propriété
column-count - La propriété
column-width - La propriété raccourcie
columns - La propriété
column-wrap - Le module de mise en page multi-colonnes CSS
Aider à améliorer MDN
Cette page a été modifiée le par les contributeur·ice·s du MDN.