Quelques astuces pour Quarto lors du rendu en diaporama reveal.js
Améliorez vos présentations Quarto ! Découvrez les astuces essentielles pour produire de superbes diaporamas reveal.js : slides de titre personnalisées, positionnement du logo, personnalisation CSS/JS et mises en page avancées.
Traduction automatique
Cet article a plus d'un an, mais il a été relu le 30 juillet 2026 — son contenu est toujours exact.
Cet article fait partie de la série Découvrir Quarto :
- Exécuter Quarto Markdown dans Docker
- Affichage conditionnel avec Quarto
- Utiliser Quarto pour créer un diaporama PowerPoint
- Utiliser des variables depuis un fichier externe dans votre projet Quarto
- Quelques astuces pour Quarto lors du rendu en diaporama reveal.js
- Les blocs Callout de Quarto
- Le short code includes de Quarto
- Style inline avec Quarto
- Mes extensions Quarto préférées
- Utiliser le templating Mustache avec Quarto
- Rendez votre projet Quarto prêt pour les Devcontainers — fini les galères de configuration
- Quarto - Comment j'ai construit un écosystème auto-documenté pour plus de 50 projets

Cet article est un pot-pourri d'astuces Quarto pour reveal.js : slides de titre, positionnement personnalisé du logo avec CSS/JS, images de fond et leur comportement background-size, contrôle du slide-level, emoji, classes r-fit-text et r-stretch, apparitions basées sur les fragments, mises en page en colonnes et en quadrants, short codes personnalisés, CSS inline et externe, masquage des légendes d'images, style des callouts, navigation verticale/en grille, slugs de slides personnalisés, numéros de slides et notes du présentateur.
La documentation reveal.js de Quarto est le meilleur endroit pour trouver les instructions permettant de créer des présentations reveal.js impeccables.
Dans cet article, nous allons passer rapidement en revue quelques astuces pour rendre vos présentations reveal.js encore meilleures.
Pour le workflow complet — écrire, prévisualiser et exporter un diaporama reveal.js en HTML et en PDF depuis un devcontainer — voir Améliorez vos présentations avec Quarto, reveal.js, Decktape, Docker et les DevContainers.
Image Docker avec Quarto
Si vous n'avez pas encore d'image Docker avec Quarto, lisez cet article Exécuter Quarto Markdown dans Docker.
Travailler avec les slides
Créer une slide de titre
La slide de titre est la première de votre présentation. Vous pouvez ajouter une telle slide avec quelques lignes de yaml :
---title: "My Slide Show"title-slide-attributes: data-background-image: ./img/background.jpg data-background-size: cover data-background-opacity: "0.9"---# Slide 1
# Slide 2
# Slide 3Ce fichier configure une présentation de diapositives en définissant des métadonnées YAML en en-tête. Il spécifie le titre principal et personnalise l'apparence de la première diapositive avec une image de fond, en contrôlant sa taille et sa transparence.
Le diaporama comportera quatre slides, la première sera la title-slide.

Afficher un logo en haut à gauche sur la première slide, puis en bas à droite
L'exemple ci-dessous illustre le besoin : sur votre première slide, vous voulez rendre votre logo bien plus visible que sur les autres slides.
Pour y arriver, sur la première slide affichée, votre logo sera affiché en haut à gauche avec une certaine taille, alors qu'au changement de slide, le logo sera positionné en bas à droite et sera bien plus petit.
Voici un exemple visuel :

Pour cela, nous allons devoir ajouter un JavaScript personnalisé et un CSS personnalisé.
Créez un nouveau dossier appelé assets et, dans ce dossier, un fichier appelé style.css et un second appelé custom.js.
Besoin d'aide ? Cliquez sur le bouton « Aide » ci-dessus pour les instructions de mise en place.
Maintenant, utilisez-les dans votre slides.md comme ceci :
---title: "My Slide Show"subtitle: "Playing with logo"author: "Christophe Avonture"date: last-modifiedlang: "en"
format: revealjs: logo: images/my-logo.svg css: assets/style.css resources: images header-includes: | <script src="assets/custom.js" type="application/javascript"></script>---Ce fichier YAML configure une présentation Reveal.js avec métadonnées de base (titre, auteur, date) et des paramètres de rendu incluant un logo personnalisé, une feuille de styles CSS et un script JavaScript personnalisé.
Comme vous le voyez ci-dessus, le code JavaScript est injecté dans votre présentation via la directive header-includes. Pour la feuille de style, c'est la directive css qui est utilisée (il n'y a malheureusement pas de directive js:).
Pour exécuter cet exemple, lancez quarto render slides.md --to revealjs.
Ajouter une image de fond à une slide
Un fond, un titre et un peu de style :
# Merry Christmas {background-image="images/winter.jpg" style="text-align: center; background-color: #cfb0f399; color: #210753;"}Ce fichier de balisage crée un en-tête de page festif avec le texte « Merry Christmas » et applique plusieurs styles CSS directement à l'élément, y compris une image d'arrière-plan, un alignement du texte centré, une couleur de fond semi-transparente rose-violet et une couleur de texte violet foncé.
Pour exécuter cet exemple, lancez quarto render slides.md --to revealjs.

Background-size contain ou cover
Parfois, l'affichage de l'image n'est pas celui que vous souhaitez ; c'est le cas quand l'image est trop grande et/ou la slide trop étroite.
L'illustration ci-dessous le montre : la photo du paresseux est beaucoup trop grande et vous ne pouvez pas la voir en entier.
Cela peut être corrigé en utilisant l'attribut background-size. Quand il n'est pas mentionné (comme pour la première slide ci-dessous), la valeur par défaut est cover (voir https://developer.mozilla.org/en-US/docs/Web/CSS/background-size pour plus d'informations).
Vous pouvez demander au navigateur de redimensionner l'image pour qu'elle soit affichée en entier. C'est le comportement quand background-size vaut contain.
## {background-image="images/2024.jpg"}
## {background-image="images/2024.jpg" background-size="contain"}Ce fichier définit deux en-têtes de section avec des images de fond. La première utilise une image par défaut, tandis que la seconde ajoute une propriété background-size pour contrôler comment l'image s'affiche dans l'espace disponible.
Pour exécuter cet exemple, lancez quarto render slides.md --to revealjs.
La slide ci-dessous utilise cover et, non, ce n'est pas vraiment attrayant.

La seconde slide utilise contain et, au moins, on voit ce que le paresseux essayait de nous dire.

Slide-level
Le niveau de slide est un élément de configuration important (documentation officielle).
Si nous regardons le Markdown ci-dessous, combien de slides aurons-nous ? Deux ou trois ? La première pour le titre, la seconde pour Technologies and tools, mais Apache sera-t-il une slide séparée ou non ?
---title: "Playing with slide-level"---
## Technologies and tools
### Apache
Our web applications are running under [Apache](https://httpd.apache.org/).
We don't need to have Apache locally since we're using it as a Docker image.Ce document Markdown décrit les technologies et outils utilisés dans un projet, en commençant par Apache comme serveur web. Il explique que l'équipe utilise Apache via Docker plutôt que de l'installer localement sur chaque machine.
En fait, cela dépend du réglage slide-level. Par défaut, slide-level vaut 2 et le résultat sera alors :
Nous avons deux slides. Sur la seconde, on voit notre titre de niveau 3 Apache comme du texte dans Technologies and tools.
Si vous voulez qu'une slide soit créée pour chaque titre de niveau 2 et de niveau 3 (ou plus), vous devez le définir avec slide-level.
---title: "Playing with slide-level"# highlight-next-lineformat: # highlight-next-line revealjs: # highlight-next-line slide-level: 3---
## Technologies and tools
### Apache
Our web applications are running under [Apache](https://httpd.apache.org/).
We don't need to have Apache locally since we're using it as a Docker image.Ce fichier configure un document Quarto/Pandoc pour générer une présentation Reveal.js. Il définit le niveau de titre qui crée des diapositives individuelles (ici, les titres de niveau 3 avec ### créeront chacun une nouvelle diapositive), ce qui permet de contrôler la granularité de la présentation.
Et le résultat donnera :
Utiliser des emoji
C'est simple, ajoutez juste l'entrée suivante dans votre front matter YAML.
---
from: markdown+emoji
---
Vous pouvez ensuite ajouter des emoji en tapant simplement le code comme :wave: ou :raised_hands:.
Vous trouverez une liste complète sur https://gist.github.com/rxaviers/7360908.
Texte en grand
La classe r-fit-text (doc officielle) donnera la taille maximale à votre contenu, c'est-à-dire :
#
::: {.r-fit-text}Big Text:::Ce snippet utilise la syntaxe de Pandoc pour appliquer une classe CSS nommée r-fit-text à un bloc de texte contenant « Big Text ». Cela permet au texte de s'adapter automatiquement à la taille de son conteneur, généralement utilisé dans les présentations pour que le texte soit lisible peu importe l'écran.
Stretch
La classe r-stretch (doc officielle) est ma préférée.
Prenez l'exemple ci-dessous :
# Slide 1
Here is an image:
{.r-stretch}
Some text after the image.Ce fichier définit une diapositive Quarto avec une image centralisée qui s'étire pour remplir l'espace disponible, suivie d'un texte. La classe CSS .r-stretch fait en sorte que l'image s'adapte dynamiquement à la taille de la diapositive.
Cela génèrera cette slide :

Ajouter beaucoup plus de texte / de paragraphes donnera cette nouvelle slide :

La hauteur de l'image sera redimensionnée automatiquement pour que le texte et les images tiennent sur la même slide. Si vous avez moins de texte, la hauteur de l'image sera plus grande, plus petite sinon. Sans devoir redimensionner l'image manuellement sur le disque. Très utile.
Afficher une image à la pression d'une touche
En utilisant ::: {.fragment .fade-up} pour définir une zone de contenu, vous demandez à reveal.js de n'afficher son contenu qu'à la séquence de touches suivante.
# It's a candy dog
::: {style="font-size: 2em; color: #75AADB;"}Would you like to see a candy dog?:::
::: {.fragment .fade-up}:::Ce fichier crée une présentation avec un titre stylisé qui pose une question, suivie d'une image qui apparaît progressivement lors de la présentation. Il utilise la syntaxe Markdown avec des extensions pour la mise en forme et les animations.
Pour exécuter cet exemple, lancez quarto render slides.md --to revealjs.

Créer des colonnes
Vous pouvez utiliser columns pour diviser votre slide :
##
::: columns
::: {.column width="70%"}

:::
::: {.column width="30%"}


:::
:::
Pour exécuter cet exemple, lancez quarto render slides.md --to revealjs.

Quatre quadrants
L'exemple ci-dessous vient de https://mine.quarto.pub/hello-quarto/#/quarto-highlights, un diaporama reveal.js réalisé avec Quarto.
L'idée est de découper les slides en quatre parties et d'afficher le contenu dans le sens horaire, en commençant par le cadran en haut à gauche.
::: columns
::: {.column width="5%"}
:::
::: {.column width="40%"}
::: bulletbox
::: {.fragment .fade-in-then-semi-out}
{width="450px"}
:::
:::
:::
::: {.column width="5%"}
:::
::: {.column width="40%"}
::: bulletbox
::: {.fragment .fade-in-then-semi-out}
{width="450px"}
:::
:::
:::
::: {.column width="5%"}
:::
:::
::: columns
::: {.column width="5%"}
:::
::: {.column width="40%"}
::: bulletbox
::: {.fragment .fade-in-then-semi-out}
{width="450px"}
:::
:::
:::
::: {.column width="5%"}
:::
::: {.column width="40%"}
::: bulletbox
::: {.fragment .fade-in-then-semi-out}
{width="450px"}
:::
:::
:::
::: {.column width="5%"}
:::
:::
Pour exécuter cet exemple, lancez quarto render slides.md --to revealjs.

Créer notre propre short code, facilement
J'aime pouvoir écrire ==Important text== et, pour une présentation revealjs, transformer automatiquement ce texte en <mark>Important text</mark> afin de pouvoir facilement lui appliquer un CSS personnalisé.
D'abord, créez un assets/custom.js s'il n'existe pas encore et copiez/collez le code suivant :
window.addEventListener("load", (event) => { // This function will search for short code like "==IpsoLorem==" // i.e. a portion of text between two equal sign and will replace it // to "<mark>IpsoLorem</mark>" so we can then use CSS to highlight // that portion. Reveal.on("slidechanged", function (event) { var re = /==([^=]*)==/; event.currentSlide.innerHTML = event.currentSlide.innerHTML.replace(new RegExp(re, "g"), "<mark>$1</mark>"); } );});Ce code attend que la page se charge complètement, puis écoute les changements de diapositives. À chaque fois qu'on change de diapositive, il cherche du texte encadré par des doubles égales (comme ==texte==) et le remplace par ce même texte entouré d'une balise HTML mark, ce qui permet au CSS de le mettre en surbrillance.
Dans votre front matter YAML, ajoutez ceci :
---format: revealjs: header-includes: | <script src="assets/custom.js" type="application/javascript"></script>---Ce fichier est un en-tête de configuration YAML pour un document Reveal.js, un framework de présentation. Il injecte un script personnalisé dans la section header du document HTML généré.
Et maintenant, quand le diaporama sera joué, un code JavaScript personnalisé remplacera à la volée chaque fragment ==xxxx== par <mark>xxx</mark>.
CSS
Utiliser du css inline
Vous pouvez appliquer des styles à du texte inline en créant des spans : [] pour entourer le texte à styler et {} pour définir le style à appliquer.
# Inline style
To draw attention to a specific part of the text, you might want to make it [red]{style="color: red;"} with a [yellow background]{style="background-color: yellow;"}; [like this]{style="color: red; background-color: yellow;"}.Ce fichier montre comment appliquer des styles CSS inline en Markdown pour colorer du texte et son arrière-plan. Il utilise la syntaxe de crochets suivis d'attributs style pour mettre en évidence certaines parties du contenu.
Pour exécuter cet exemple, lancez quarto render slides.md --to revealjs.
Le rendu est correct en HTML :

Utiliser un css personnalisé
Utilisez le bloc d'en-tête YAML pour cela.
---pagetitle: "Using my custom css"format: revealjs: theme: custom.css---##
{style="width:400px;"}Ce fichier configure une présentation Reveal.js avec un thème CSS personnalisé et affiche une diapositive contenant une image redimensionnée. L'en-tête YAML spécifie les paramètres de rendu tandis que le contenu crée une diapositive avec une image.
Pour exécuter cet exemple, lancez quarto render slides.md --to revealjs.
Maintenant, créez le fichier custom.css dans le même dossier que votre fichier Markdown et, par exemple, mettez le fond de la slide en jaune :
/*-- scss:defaults --*/.reveal { background-color: rgb(224, 226, 98);}Ce fichier CSS configure l'apparence de base d'une présentation Reveal.js en définissant la couleur de fond de l'élément .reveal sur un jaune pâle. C'est un thème ou une feuille de style personnalisée pour contrôler l'aspect visuel de la présentation.

Masquer la légende de l'image
Par défaut, revealjs affiche la légende de l'image en dessous de celle-ci. Vous pouvez la masquer avec cette feuille de style :
.reveal p.caption {
display: none;
}
Ce fragment CSS masque tous les éléments paragraphe ayant la classe 'caption' à l'intérieur d'éléments avec la classe 'reveal'. La propriété display: none les rend invisibles et les retire complètement du flux de la page.
Les callouts peuvent être stylés
Un callout est une div spéciale comme ci-dessous :
## Customize your terminal
:::{.callout-note}## NoticeSkip this part if you do not want to customize your terminal right now:::
As you can see on the image below, we can customize the terminal:Cette section documente comment personnaliser l'apparence et le comportement du terminal. Elle commence par une note optionnelle indiquant que les lecteurs peuvent sauter cette partie s'ils ne veulent pas faire de personnalisation immédiatement.
Dans revealjs, personnellement, je trouve que le rendu prend trop de place par rapport au contenu de ma slide. J'utilise donc du css pour masquer le titre :

.reveal .callout-title { display: none;}Ce snippet CSS masque les titres des callouts dans les présentations Reveal en les supprimant du flux d'affichage. C'est une personnalisation de thème pour épurer l'interface en retirant les étiquettes des boîtes de contenu particulier.
Navigation
Slides verticales
Il existe trois types de navigation : linear (celle par défaut), vertical ou grid (doc officielle).
Si vous utilisez la navigation vertical ou grid, vous devriez structurer vos slides avec des titres de niveau 1 pour l'axe horizontal et des titres de niveau 2 pour l'axe vertical.
Dans une navigation linear normale, revealjs affichera chaque slide, quelle que soit la touche pressée par l'utilisateur. Dans une navigation linear, en tant qu'auteur, vous êtes sûr que votre visiteur verra chacune d'elles.
Dans une navigation vertical ou grid, c'est comme si vous montriez le titre du chapitre : si l'utilisateur presse la touche down ou space, il entrera dans le chapitre (et ce verticalement). Mais s'il presse la touche right, il le sautera et passera au chapitre suivant.
Le navigation-mode dans l'en-tête yaml vous permet d'activer le mode vertical, voici un exemple :
---title: "Presentation"format: revealjs: navigation-mode: vertical---
# Slide 1
## Slide 1.1
# Slide 2
## Slide 2.1
## Slide 2.2
## Slide 2.3Ceci est un fichier de configuration Quarto qui définit une présentation en format revealjs. Le fichier spécifie le titre et configure le mode de navigation en vertical, ce qui signifie que les diapositives secondaires s'affichent en descendant verticalement. Le reste du fichier contient la structure hiérarchique des diapositives avec deux sections principales et plusieurs sous-sections.
Pressez la touche <kbd>esc</kbd>
La touche esc vous permet de voir la structure de votre diaporama revealjs.
Définir un nom pour votre slide
Par défaut, reveal.js génèrera un slug depuis le titre pour que vous puissiez référencer la slide dans une URL.
Prenez l'exemple suivant :
## Elit ad fugiat proident culpa sint
Elit ad fugiat proident culpa sint qui id pariatur nostrud ullamco velit irure tempor culpa. Laborum occaecat ea tempor voluptate duis pariatur proident ea. Aute adipisicing ut ullamco exercitation nisi nulla sint. Reprehenderit tempor quis non cupidatat.
## Cillum do et commodo minim ullamco elit culpa
Occaecat minim eu veniam laborumanim. Nostrud duis eiusmod ut amet velit commodo. Aliqua laborum cillum officia culpa quis duis enim cillum esse duis excepteur cillum do qui. Veniam dolore enim qui labore proident. Minim ipsum nisi Lorem cillum proident labore cupidatat aliqua pariatur. Nisi id magna incididunt et culpa.
Ce fichier contient du texte Lorem Ipsum organisant du contenu factice en deux sections avec des en-têtes de niveau 2. Il s'agit d'un document de remplissage typique utilisé pour démontrer la mise en page ou la structure sans contenu significatif.
Pour exécuter cet exemple, lancez quarto render slides.md --to revealjs.
L'URL générée pour la première slide sera http://[...]index.html#/elit-ad-fugiat-proident-culpa-sint et, pour la seconde slide, http://[...]index.html#/cillum-do-et-commodo-minim-ullamco-elit-culpa.
Pour définir le nom vous-même, ajoutez juste {#} suivi du slug que vous souhaitez.
<!-- highlight-next-line -->## Elit ad fugiat proident culpa sint {#intro}
Elit ad fugiat proident culpa sint qui id pariatur nostrud ullamco velit irure tempor culpa. Laborum occaecat ea tempor voluptate duis pariatur proident ea. Aute adipisicing ut ullamco exercitation nisi nulla sint. Reprehenderit tempor quis non cupidatat.
<!-- highlight-next-line -->## Cillum do et commodo minim ullamco elit culpa {#chapter1}
Occaecat minim eu veniam laborumanim. Nostrud duis eiusmod ut amet velit commodo. Aliqua laborum cillum officia culpa quis duis enim cillum esse duis excepteur cillum do qui. Veniam dolore enim qui labore proident. Minim ipsum nisi Lorem cillum proident labore cupidatat aliqua pariatur. Nisi id magna incididunt et culpa.Ce fichier est un document Markdown contenant deux sections principales avec des en-têtes numérotés et des identifiants d'ancre. Chaque section est précédée d'un commentaire de surlignage qui indique au système de rendu de mettre en évidence la ligne suivante, permettant ainsi une meilleure lisibilité visuelle du document.

Mais attention au menu des slides (en bas à gauche) : il est peut-être bon d'y définir aussi un nom adapté.

Pour cela, définissez l'attribut data-menu-title ; p.ex. :
<!-- highlight-next-line -->## Elit ad fugiat proident culpa sint {#intro data-menu-title="Introduction"}
<!-- highlight-next-line -->## Cillum do et commodo minim ullamco elit culpa {#chapter1 data-menu-title="Chapter 1"}Ce fichier contient des titres Markdown avec des attributs personnalisés pour la génération de documentation. Les commentaires highlight-next-line indiquent au générateur de mettre en évidence les lignes suivantes, tandis que les attributs entre accolades définissent des identifiants, des menus et d'autres métadonnées pour structurer le document.
Afficher le numéro de slide
Pour n'afficher que le numéro de la slide courante, vous pouvez utiliser slide-number: true mais, si vous voulez aussi le nombre total de slides, vous devriez utiliser slide-number: c/t :
format: revealjs: slide-number: c/tCe fichier de configuration YAML définit les paramètres de rendu pour un document Reveal.js. Il active l'affichage du numéro de diapositive au format « numéro actuel / total » en bas de chaque présentation.

Vous trouverez plus d'informations dans la documentation Quarto sur les numéros de slides.
Divers
Utiliser les notes du présentateur
Vous pouvez écrire dans votre présentation des messages qui ne seront pas affichés lors de la lecture du diaporama, mais seulement sur un second écran quand le présentateur le souhaite.
L'exemple ci-dessous l'illustre. La façon d'insérer de telles notes de présentateur est d'utiliser le bloc ::: notes.
##
::: columns::: {.column width="70%"}:::
::: {.column width="30%"}
::::::
::: notesOn the left side, you have ... and, on the right side, the first image is ....
The second image has been ...:::
##
```Ce fichier Markdown utilise la syntaxe Pandoc pour créer une diapositive avec une mise en page en deux colonnes : la colonne gauche occupe 70% de la largeur avec une image, la colonne droite occupe 30% avec deux images empilées. Des notes de présentation sont ajoutées pour expliquer le contenu visuel aux yeux du présentateur.
Pour exécuter cet exemple, lancez quarto render slides.md --to revealjs.
Donc, dans l'exemple ci-dessus, nous aurons deux slides. En pressant la touche s du clavier (s pour speakers), une nouvelle fenêtre s'affichera.
Quand vous avez deux écrans, sur le premier vous affichez votre présentation sans les notes (écran de gauche ci-dessous) et sur le second vous affichez les notes (écran de droite ci-dessous).
Si vous partagez votre écran via un outil comme Teams ou Zoom, même chose : vous partagez l'écran où la présentation est affichée (le premier) et gardez les notes pour vous seul.

Comme vous le voyez sur l'image ci-dessus, les notes du présentateur affichent des informations utiles comme le temps écoulé depuis le début de la présentation, l'heure actuelle et la slide suivante pour faciliter votre transition.
Cet article fait partie de la série Découvrir Quarto :
- Exécuter Quarto Markdown dans Docker
- Affichage conditionnel avec Quarto
- Utiliser Quarto pour créer un diaporama PowerPoint
- Utiliser des variables depuis un fichier externe dans votre projet Quarto
- Quelques astuces pour Quarto lors du rendu en diaporama reveal.js
- Les blocs Callout de Quarto
- Le short code includes de Quarto
- Style inline avec Quarto
- Mes extensions Quarto préférées
- Utiliser le templating Mustache avec Quarto
- Rendez votre projet Quarto prêt pour les Devcontainers — fini les galères de configuration
- Quarto - Comment j'ai construit un écosystème auto-documenté pour plus de 50 projets





