« Reveal.js » : différence entre les versions

De EduTech Wiki
Aller à la navigation Aller à la recherche
(Page vide créée)
 
 
(167 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
== Introduction  ==
[https://revealjs.com/ Reveal.js] est une [[Bibliothèques JavaScript|bibliothèque JavaScript]] qui permet de créer des présentations/diaporama en utilisant les technologies du web [[Introduction à HTML5|HTML5]], [[Introduction à CSS|CSS]] et [[JavaScript]] : tout ce qui est possible de faire dans le web peut être fait aussi dans des slides.


De ce fait, la création de slides avec Reveal.js ouvre des potentialités pédagogiques inexprimées par le bias de présentations construites avec des logiciels plus traditionnels comme PowerPoint ou Keynotes. Parmi les options figurent :
* La publication des slides en tant que pages/application web en accès avec un simple navigateur
* La possibilité d'intégrer facilement des éléments multi-média directement tirés du web comme des images, vidéos, animations, etc.
* L'implémentation de slides interactives qui exploitent les possiblités de la [[computation avec JavaScript]] et de l'[[interactivité avec JavaScript]]. On peut par exemple intégrer directement dans les slides des quiz, des mécanismes de drag&drop, ou encore des algorithmes aléatoires ou qui s'adaptent aux actions/choix des utilisateurs
En d'autres termes, en exploitant les technologies du web, il est possible de mieux intégrer des principes de l'[[apprentissage multimédia]] dans des supports pédagogiques ''hybrides''. On exploite d'un côté la familiarité des apprenant-es avec les supports de type présentation/diaporama, mais en intégrant en même temps de mécanisme pour augmenter leur contrôle ainsi que leur investissement cognitif dans la fruition des contenus.
Cette page propose un aperçu de ces potentialités avec quelques exemples. Sur le plan technique, la [https://revealjs.com/ documentation de la bibliothèque] est assez bien fournie ('''sauf pour ce qui concerne l'installation, voir plus bas''') et cette page évite donc de reproposer tous les aspects qui sont déjà bien traitées ailleurs. 
=== Pré-requis ===
La création de slides avec Reveal.js présuppose à minima une connaissance de base de [[HTML5]] et [[CSS]]. Pour tirer avantage des potentialités interactives, une connaissances de [[JavaScript]] est également nécessaire. Les ressources suivantes représentent des repères utiles pour pouvoir ensuite utiliser Reveal.js de manière plus approfondie :
* {{ Goblock | [[Introduction à HTML5]] }}
* {{ Goblock | [[Introduction à CSS]] }}
* {{ Goblock | [[Pensée computationnelle avec JavaScript]] }}
Sur le plan des contenus, il peut être très utile de connaître quelques principes de design graphiques et pédagogiques. Les pages suivantes peuvent être utiles à ce propos :
* {{ Goblock | [[Les principes CRAP]] }} : principes liés à l'acronyme Contraste, Répétition, Alignement et Proximité
* {{ Goblock | [[Principes de design multimédia applicables à la vidéo]] }} : même si les contenus s'adressent principalement à la vidéo, certains principes peuvent s'appliquer également aux présentations
=== Logiciels nécessaires ===
Pour créer des slides avec Reveal.js il faut disposer tout simplément d'un éditeur de texte tel que [[Visual studio code]].
=== Exemples concrets ===
Cet article propose un survol général du fonctionnement de la bibliothèque. Elle représente donc un point d'entrée pour pouvoir [[créer des présentations interactives avec Reveal.js]]. Cette deuxième page se focalise plus sur les enjeux et potentialités techno-pédagogiques de présentations qui exploitent la [[computation avec JavaScript]] et l'[[interactivité avec JavaScript]].
== Notes sur la version ==
Cette page fait référence à la version '''4.3.x''' de la bibliothèque (voir [[versionnage sémantique]]). Les aspects traités sont cependant plutôt liés à l'interaction entre HTML5, CSS et JavaScript et devraient donc être valables aussi pour des versions successives.
== Installation ==
Il existe plusieurs manières d'utiliser Reveal.js qui vont du très basique (ajouter les fichiers nécessaires à un fichier .html) au plus complexe (exploiter [[Node.js]] pour créer un environnement de développement). Dans cette page nous proposons un dépôt [[GitHub]] avec une organisation des fichiers déjà pré-établie en fonction des pratiques du cours [[STIC:STIC I]] du Master of Science in Learning and Teaching Technologies à l'Université de Genève. Ce type d'organisation n'est cependant pas obligatoire pour le fonctionnement de Reveal.js. Il suffit de veiller à ce que les différents fichiers de la bibliothèques (CSS, JavaScript, plugin-in, etc.) soit disponibles et incorporés avec des liens corrects dans le fichier principale avec la présentation.
=== Template proposé ===
Le template proposé est disponible dans un dépot GitHub. Il peut être cloné ou téléchargé à travers le bouton '''code''' en haut à gauche, ou - si vous avez un compte [[GitHub]], utilisé comme template pour démarrer un nouveau projet. Le lien au dépôt est le suivant :
{{ Goblock | [https://github.com/MALTT-STIC/stic-1-revealjs-template MALTT_STIC/stic-1-revealjs-template]}}
Le template est structuré en principe pour une seule présentation, la section suivante décrit comme il peut être adapté pour plusieurs présentations. Encore une fois, il s'agit d'éléments arbitraires qui peuvent être modifiés du moment où la présence et la relation entre fichiers indispensables/optionnels sont maintenues.
Le template est organisé de la manière suivante :
* Tous les fichiers de fonctionnement sont disponibles dans un dossier <code>assets</code>. Ce dossier propose 4 sous-dossiers :
** <code>css</code> : dossier pour un ou plusieurs fichiers CSS personnels, c'est-à-dire avec des déclarations de style proposés directement par le concepteur. Un fichier <code>style.css</code> est déjà disponible et incorporé dans le template
** <code>images</code> : dossier pour récolter les images utilisées dans la présentation
** <code>js</code> : un dossier pour récolter un ou plusieurs fichier JavaScript codés directement par le concepteur. Un fichier <code>app.js</code> est déjà disponible et incorporé dans le template
** <code>vendor</code> : un dossier qui est censé contenir des [[bibliothèques JavaScript]]. Ici ce trouve un sous-dossier <code>revealjs</code> qui se compose de deux dossiers :
*** <code>dist</code> : un dossier qui contient le fichiers CSS et JavaScript qui déterminent le fonctionnement "de base" de Reveal.js. Dans le dossier <code>dist</code> se trouvent par exemple les différents thèmes disponibles ''out of the box''
*** <code>plugin</code> : un dossier qui contient les plugins de Reveal.js. Ces plugins permettent d'ajouter des foncionnalités comme le Zoom sur les images, la syntaxe du code, etc. Plusieurs plugins sont déjà incorporés dans le template
* <code>index.html</code> : le fichier dans lequel se trouve le contenu de la présentation.
=== Code de base du template ===
Le code du fichier <code>index.html</code> (avec commentaires pour reconnaître les différents éléments) est le suivant :
<syntaxhighlight lang="HTML5" line>
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Template pour présentation avec Reveal.js</title>
    <!-- CSS obligatoire de Reveal.js -->
    <link rel="stylesheet" href="./assets/vendor/revealjs/dist/reveal.css" />
    <!-- CSS selon le thème de Reveal.js choisi, voir le dossier correspondant pour les options -->
    <link
      rel="stylesheet"
      href="./assets/vendor/revealjs/dist/theme/serif.css"
    />
    <!-- CSS personnel avec déclarations de style en ajoute ou en substitution -->
    <link rel="stylesheet" href="./assets/css/style.css" />
  </head>
  <body>
    <!-- Début du contenu de la présentation -->
    <div class="reveal">
      <div class="slides">
        <!-- Chaque slide se crée avec une balise section -->
   
        <!-- ... code abrégé ... -->
      </div>
    </div>
    <!-- JS obligatoire de Reveal.js -->
    <script src="./assets/vendor/revealjs/dist/reveal.js"></script>
    <!-- Plugin JS optionnels de Reveal.js -->
    <script src="./assets/vendor/revealjs/plugin/highlight/highlight.js"></script>
    <script src="./assets/vendor/revealjs/plugin/markdown/markdown.js"></script>
    <script src="./assets/vendor/revealjs/plugin/math/math.js"></script>
    <script src="./assets/vendor/revealjs/plugin/notes/notes.js"></script>
    <script src="./assets/vendor/revealjs/plugin/search/search.js"></script>
    <script src="./assets/vendor/revealjs/plugin/zoom/zoom.js"></script>
    <!-- Initialization de Reveal.js selon la configuration souhaitée -->
    <script>
      // https://revealjs.com/initialization/
      Reveal.initialize({
        controls: true,
        progress: true,
        center: false,
        hash: true,
        slideNumber: true,
        // Learn about plugins: https://revealjs.com/plugins/
        plugins: [
          RevealZoom,
          RevealNotes,
          RevealSearch,
          RevealMarkdown,
          RevealHighlight,
          RevealMath,
        ],
      });
    </script>
    <!-- JS personnel pour ajouter des éléments interactifs (optionnel)-->
    <script src="./assets/js/app.js"></script>
  </body>
</html>
</syntaxhighlight>
=== Extension du template à plusieurs présentations ===
Pour créer plusiuers présentations sans avoir à dupliquer tous les fichiers à chaque fois, il est possible par exemple de créer un nouveau dossier à la racine du projet (i.e. au même niveau de <code>assets</code>) et créer un fichier <code>index.html</code> à l'intérieur de chaque sous-dossier représentant une présentation différente. Chaque dossier de la présentation peut à ce moment avoir de sous-dossiers pour les images, script JavaScript, etc. spécifiques à cette présentation. Par exemple :
|- assets
|- presentation-1
    |- index.html
    |- images
      |- maison.svg
    |- js
      |- drag-and-drop.js
|- presentation-2
    |- index.html
    |- images
      |- voiture.svg
    |- js
      |- animation.js
{{bloc important | À ce moment il faut bien modifier les chemins relatifs aux fichiers CSS/JS. Le nouveau chemin doit tenir compte du fait que les fichiers se trouvent à un niveau supérieur. Il faut donc modifier les pointage de <code>./assets/etc/...</code> à '''<code>../assets/etc/...</code>'''. }}
=== Incorporation d'autres bibliothèques JavaScript ===
Étant une présentation Reveal.js une page/application web comme toute autre, on peut tout à fait utiliser d'autres [[bibliothèques JavaScript]] dans une présentation. L'arborescence du template facilite cette possibilité, car il suffit d'insérer les autres bibliothèques dans le dossier <code>assets/vendor</code> :
|- assets
    |- ...
    |- vendor
      |- revealjs
      |- autre-bibliotheque-1
      |- autre-bibliotheque-2
      |- ...
À ce moment il suffit d'incorporer les fichiers CSS/JS de la bibliothèque dans le fichier <code>.html</code> avec le contenu de la présentation.
== Créer la structure pour la présentation ==
Reveal.js permet de créer des slides ''classiques'', c'est-à-dire qui occupent toute l'espace disponible à l'écran, ou des slides ''embedded''/incrustées dans une page avec d'autres contenus.
=== Présentation à plein écran ===
Sans rien spécifier au niveau de la configuration, la présentation en plein écran s'applique automatiquement. À ce moment, la structure de la présentation consiste dans deux <code>div</code> '''emboîtés''' :
# La ''racine'' <code><nowiki><div class="reveal">...</div></nowiki></code>
# Un div qui va contenir les slides <code><nowiki><div class="slides">...</div></nowiki></code>
Le code commence directement à l'intérieur du body :
<syntaxhighlight line lang="HTML5">
<html>
  <head>
  <!-- Autre code pas affiché pour brévité -->
  </head>
  <body>
    <div class="reveal">
      <div class="slides">
      <!-- Les slides vont ici -->
      </div>
    </div>
    <!-- Importation des fichiers JavaScript -->
  </body>
</html>
</syntaxhighlight>
=== Présentation ''embedded'' ===
La structure pour une présentation incrustée dans d'autres contenus d'une page HTML5 est la même. Elle doit cependant apparaître en fonction de la position souhaité par rapport au reste de la page. Donc elle ne doit pas forcément commencer juste après l'ouverture du body.
Pour afficher la présentation de manière ''embedded'' il faut spécifier dans les options de configuration le code suivant :
<syntaxhighlight lang="JavaScript">
Reveal.initialize({
  // Autre associations clé-valeur pour les options
  embedded: true
});
</syntaxhighlight>
La présentation va à ce moment assumer les dimensions qui s'appliquent à la balise ''racine'' <code><nowiki><div class="reveal">...</div></nowiki></code>. Cela peut donc dépendre de la dimension de l'élément parent si cette balise est emboîtéé et/ou des propriétés CSS qui lui sont appliquées.
=== Ajouter des slides ===
Pour ajouter des slides, il suffit d'ajouter des balises <code><nowiki><section>...</section></nowiki></code> à l'intérieur de la balise <code><nowiki><div class="slides">...</div></nowiki></code> :
<syntaxhighlight lang="HTML5" line>
<div class="reveal">
  <div class="slides">
    <!-- Slide avec le titre -->
    <section>
      <h1>Titre de la présentation</h1>
    </section>
    <!-- Slide avec l'introduction -->
    <section>
      <h2>Introduction</h2>
      <p>Cette présentation porte sur ...
    </section>
  </div>
</div>
</syntaxhighlight>
Il est également possible de créer des sections à l'intérieur d'une section, ce qui correspond à créer des [https://revealjs.com/vertical-slides/ slides ''verticales'']. Les utilisateurs peuvent néanmoins ne pas être habitués à ce type de fonctionnalité, qu'il faudrait utiliser avec une scénarisation attentive pour en tirer des bénéfices pédagogiques.
Sur le plan de l'organisation, il est de bonne pratique d'ajouter des commentaires pour délimiter les différentes slides. Des commentaires sémantique à propos du contenu sont à préférer plutôt que numéroter les commentaires en fonction de l'ordre des slides. De cette manière, il est possible de modifier l'ordre des slides sans avoir à modifier tous les commentaires.
== Contenus de la présentation ==
En principe, tout élément HTML5 peut être intégré dans les slides avec Reveal.js. Cette section présente quelques possibilités, mais l'intérêt de Reveal.js réside dans les potentialités de combiner plusieurs éléments.
=== Contenu typographique avec HTML5 ===
On peut insérer du texte avec les balises HTML5 normalement consacrées à cette fonction : titres de différents niveaux, paragraphes, listes à puces, etc.
<syntaxhighlight line lang="HTML5">
<!-- Introduction -->
<section>
  <h3>Qu'est-ce qu'EduTechWiki</h3>
  <p>EduTechWiki est un wiki sur la technologie éducative et domaines annexes hébergé et maintenu à TECFA depuis 2006.</p>
</section>
<!-- Visites -->
<section>
  <h3>Trafic généré</h3>
  <ol>
    <li>1.4 mio in 2019</li>
    <li>1.2 mio in 2020</li>
    <li>1.1 mio in 2021</li>
  </ol>
</section>
</syntaxhighlight>
Reveal.js met à disposition la classe <code>class="r-fit-text"</code> qui permet à un élément textuel de prendre toute la place disponible sans sortir du cadre de la slide. Ceci est utile par exemple pour créer des larges textes sans avoir à essayer plusieurs niveaux des titres ou styles personnalisés.
<syntaxhighlight lang="HTML5" line>
<section>
  <h2 class="r-fit-text">Tout l'espace disponible</h2>
</section>
</syntaxhighlight>
=== Contenu avec Markdown ===
Markdown est un langage de formatage léger et orienté aux contenus les plus fréquents. Un aperçu du langage est disponible dans la page [[Introduction à Rmarkdown]].
Pour utiliser Markdown il faut bien veiller à ce que le plugin correspondant soit incorporé et initialisé dans la configuration de Reveal (voir template). À ce moment, il suffit de spécifier l'utilisation de Markdown de cette manière :
<syntaxhighlight line lang="HTML5">
<section data-markdown>
  <textarea data-template>
    ## Titre de la slide
    - Item 1
    - **Item 2 en gras**
    - [TECFA](https://tecfa.unige.ch)
  </textarea>
</section>
</syntaxhighlight>
=== Afficher du code ===
Pour afficher du code informatique dans des slides, il faut veiller à incorporer et initialiser le plugin highlight (voir le template). Selon le type de snytaxe utilisée, il faudra également incorporer la feuille de style CSS qui permet d'appliquer le formatage au code (e.g. couleur de fond, mots clé, etc.). Les feuilles de styles disponibles se trouvent dans le dossier du plugin highlight (dans assets/vendor/revealjs/plugin selon l'organisation du template proposé).
L'affichage du code peut se faire à la ligne ou dans des blocs de code. Dans le premier cas, il suffit d'englober le contenu avec la balise <nowiki><code>...</code></nowiki>.
Pour les blocs de code, on peut utiliser la balise <nowiki><pre>...</pre></nowiki> pour garantir que les indentations soient respectées.
<syntaxhighlight lang="HTML5">
<section>
  <pre><code>
    <h1>Du code HTML5</h1>
    <p>Qui va recevoir du formatage...</p>
  </pre></code>
</section>
</syntaxhighlight>
Dans la balise code on peut ajouter des attributs utiles pour mettre encore plus en relief le code, par exemple :
* '''data-line-numbers''' permet de mettre en évidence une ou plusieurs lignes du code. Par exemple :
*: <code><nowiki><code data-line-numbers="1, 5-10">...</code></nowiki></code>
*: met en évidence la première ligne et les lignes de 5 à 10.
*: On peut même mettre en évidence de manière progressive en séparant les lignes intéressées par un |. Par exemple :
*: <code><nowiki><code data-line-numbers="1-4|5-10|11-15">...</code></nowiki></code>
*: met d'abord en évidence les lignes de 1-4, ensuite de 5 à 10, et enfin de 11 à 15.
* '''data-trim''' permet d'enlever les espaces au début et à la fin du code, ce qui permet par exemple de commencer le code à la ligne suivant la balise code
=== Images ===
On peut ajouter des [[Image matricielle|images matricielles]] ou des [[Image vectorielle|images vectorielles]] simplement avec la balise <code><nowiki><img src="..." alt="..." title="..." /></nowiki></code>.
On peut également appliquer des règles de style déjà prévues par Reveal.js. Voir la partie "Layout" plus bas.
=== Audio/Vidéo ===
Les composantes audio et/ou vidéo peuvent être intégrés simplement avec les balises correspondantes en HTML5. Voir à ce propos {{ Goblock | [[HTML5 audio et video]]}}
Reveal.js prévoit aussi l'attribut <code>data-autoplay</code> qui permet d'entamer la lecture de l'élément audio/vidéo directement lorsque le slide conteneur est ouvert par l'utilisateur :
<syntaxhighlight line lang="HTML5">
<section>
  <h3>Magnifique vidéo qui démarre toute seule</h3>
  <video data-autoplay ...>...</video>
</section>
</syntaxhighlight>
=== Frame interne ===
Pour englober du contenu d'autres sites (e.g. une vidéo depuis une plateforme, un prototype [[Figma]], etc.), on peut utiliser la balise <code><nowiki><iframe data-src="..."></iframe></nowiki></code>.
Si on utilise l'attribut <code>data-src</code> au lieu de l'habituel <code>src</code>, le contenu du frame sera chargé seulement si la slide est visionnée par l'utilisateur.
=== Classes pour le layout des contenus ===
Reveal.js met à disposition dans son CSS de base un nombre de classes qui aident à mieux déterminer le layout des contenus. Cette section en présente quelques unes. D'autres peuvent être ajoutées avec du CSS personnalisé.
==== Adapter le contenu à l'espace disponible avec r-stretch ====
La classe '''<code>r-stretch</code>''' permet d'adapter la taille verticale d'un élément à la place disponible en fonction de la présence d'autres contenus. Cette classe va fonctionner seulement si les deux conditions suivantes sont respectées :
# L'élément auquel la classe est appliquée (e.g. une image) est un ''children'' direct de la balise <code><nowiki><section>...</section></nowiki></code> qui représente la slide
# Il n'existe qu'un seul élément avec cette classe à l'intérieur de la même slide
Par exemple :
<syntaxhighlight lang="HTML5" line>
<section>
  <h2>Titre</h2>
  <img src="..." alt="..." title="..." class="r-stretch">
  <small>Ceci est une image qui prend la place disponible</small>
</section>
</syntaxhighlight>
==== Placer des contenus alignés horizontalement ====
La classe '''<code>r-hstack</code>''' permet de placer des contenus l'un à côté de l'autre :
<syntaxhighlight line lang="HTML5">
<section>
  <h3>Alignement horizontale</h3>
  <div class="r-hstack">
    <div>Sur la gauche</div>
    <div>Sur la droite</div>
  </div>
</section>
</syntaxhighlight>
==== Ajouter un cadre à un élément ====
La classe '''<code>r-frame</code>''' permet d'ajouter un cadre (i.e. une bordure) à tout élément qui l'applique :
<syntaxhighlight lang="HTML5" line>
<section>
  <div class="r-frame">
    Contenu mis en relief par une bordure
  </div>
</section>
</syntaxhighlight>
==== Empiler des éléments les uns sur les autres ====
La classe '''<code>r-stack</code>''' permet de positionner un élément sur un autre élément sous-jacent. Ceci peut être combiné avec la fonctionnalités des ''fragments'' (voir plus bas) qui permet d'afficher progressivement des éléments au sein de la même slide ou avec des animations/transitions (voir plus bas) qui affichent un seul élément à la fois en cachant les autres.
<syntaxhighlight line lang="HTML5">
<section>
  <div class="r-stack">
    <p>Premier élément</p>
    <p>Deuxième élément superposé</p>
  </div>
</section>
</syntaxhighlight>
== Ajouter des éléments interactifs ==
Reveal.js met à disposition des éléments interactifs ''out of the box'' qui peuvent être plus ou moins sophistiqués (e.g. en ajoutant des classes ou des attributs). D'autres peuvent être ajoutés ''simplement'' grâce à l'[[interactivité avec JavaScript]] possible dans toute page web. Dans tous les cas, ces éléments interactifs peuvent être exploités pour des finalités pédagogiques, notamment en lien avec l'[[apprentissage multimédia]].
=== Fragments (affichage progressif) ===
En ajoutant la classe '''<code>class="fragment"</code>''' à tout élément dans une slide, cet élément va s'afficher progressivement (i.e. lorsque l'utilisateur ou le système automatique déclenche la suite de la présentation). Dans le code suivant, par exemple, l'utilisateur ne voit que le titre de la slide lorsque celle-ci est affiché dans le navigateur. Les points de la liste à puces s'afficheront progressivement avec le déclenchement de la suite :
<syntaxhighlight line lang="HTML5">
<section>
  <h3>Titre visible du départ</h3>
  <ul>
    <li class="fragment">Affiché progressivement dans un premier temps</li>
    <li class="fragment">Affiché progressivement dans un deuxième temps</li>
    <li class="fragment">Affiché progressivement dans un troisième temps</li>
  </ul>
</section>
</syntaxhighlight>
On peut combiner la classe <code>fragment</code> avec d'autres classes qui déterminent de manière plus précise la transitions entre éléments, comme par exemple <code>fade-out</code>, <code>highlight-red</code>, etc. Voir la [https://revealjs.com/fragments/ documentation sur le fragment] pour plus d'options. Il est d'ailleurs possible d'emboiter plusieurs ''fragments'' sur le même élément (exemple tiré de la documentation officielle) :
<syntaxhighlight lang="HTML5" line>
<span class="fragment fade-in">
  <span class="fragment highlight-red">
    <span class="fragment fade-out">
      Fade in > Turn red > Fade out
    </span>
  </span>
</span>
</syntaxhighlight>
Cet élément va dans l'ordre :
# Apparaître avec un effet fade-in
# Changer dans la couleur de police rouge
# Disparaître avec un effet fade-out
On peut également spécifier l'ordre dans lequel les fragments apparaissent à l'écran avec l'attribut <code>data-fragment-index="..."</code>. Il faut spécifier dans la valeur un chiffre qui détermine l'ordre. Il est possible d'attribuer à deux ou plusieurs éléments le même index, à ce moment, les éléments apparaissent au même temps.
=== Liens entre slides ===
Les liens entre slides peuvent être créés de différentes manières. Ils représentent un fonction intéressante d'un point de vue pédagogique, par exemple pour :
* Créer des références croisées
* Créer des parcours/narrations non linéaires
* Suivre/sauter des parties de la présentation sur la base des connaissances des apprenant-es
* Faciliter la segmentation en partie pour des longues présentations ou des présentations prévues en fruition autonome
==== Liens internes avec le ''hash'' ====
Le ''hash'' est la suite de caractère qui est attachée à chaque slide par Reveal.js. Le hash peut être construit :
* Sur la base de la position de la slide dans l'ordre, e.g. <code>#/3</code>
* Sur la base d'une valeur sémantique de l'attribut id donnée à la section, par exemple <code><nowiki><section id="introduction">...</section></nowiki></code> qui correspond à l'''hash'' <code>#/introduction</code>. Cette deuxième option est plus sûre, car elle n'est pas affecté par un changement d'ordre des slides.
Pour créer des liens internes avec le ''hash'' on peut par exemple utiliser la balise <code>a</code> de HTML5. Avec le ''hash'' numérique le code ressemble à ce-ci :
<syntaxhighlight lang="HTML5" line>
<section>
  <a href="#/0">Revenir au début</a>
</section>
</syntaxhighlight>
Avec le ''hash'' sémantique le code est le suivant :
<syntaxhighlight lang="HTML5" line>
<!-- Slide avec le lien -->
<section>
  <a href="#/partie-2">Aller directement à la Partie II</a>
</section>
<!-- Slide "target" du lien, avec id sémantique -->
<section id="partie-2">
  <h1>Deuxième partie !</h1>
</section>
</syntaxhighlight>
==== Liens interns ''relatifs'' ====
Reveal.js met également à disposition des classes qui peuvent être combinées par exemple avec des boutons et qui permettent de naviguer à travers les slides de manière ''relative'' (e.g. aller au suivant). Voici le code tiré de la documentation officielle :
<syntaxhighlight lang="HTML5" line>
<button class="navigate-left">Left</button>
<button class="navigate-right">Right</button>
<button class="navigate-up">Up</button>
<button class="navigate-down">Down</button>
<!-- Previous vertical OR horizontal slide -->
<button class="navigate-prev">Prev</button>
<!-- Next vertical OR horizontal slide -->
<button class="navigate-next">Next</button>
</syntaxhighlight>
Les boutons sont automatiquement rendus actifs ou inactifs selon la disponibilité d'un slide correspondante à la direction de navigation.
=== Transitions et animations ===
On peut ajouter des éléments animés entre slides avec des contenus différents (transitions) ou qui maintiennent des éléments communs  qui se modifient (animation).
==== Transitions entre slides ====
Les passages entre une slide et l'autre peuvent être définis au niveau globale et/ou dans chaque slide individuellement.
Les valeurs possibles sont les suivantes :
* '''none''' : pas de transition
* '''fade''' : le slide ''disparaît'' en laissant émerger la suivante
* '''slide''' : défilement ''habituel''
* '''convex''' : défilement avec un angle convexe
* '''concave''' : défilement avec un angle concave
* '''zoom''' : la prochaine slide s'agrandit à partir du centre de la slide actuelle
Pour définir la transition au niveau global, il faut spécifier la valeur dans l'initialisation de Reveal.js :
<syntaxhighlight lang="JavaScript">
Reveal.initialize({
  //Autre associations clé-valeur
  backgroundTransition: 'slide'
});
</syntaxhighlight>
Pour définir la transition de manière ponctuelle, on utilise l'attribut <code>data-transition="option"</code> à l'intérieur de la balise <code>section</code> :
<syntaxhighlight lang="HTML5" line>
<section data-transition="zoom">
  Effet zoom
</section>
<section data-transition="slide">
  Défilement habituel
</section>
</syntaxhighlight>
On peut même définir un comportement différent pour l'entrée et la sortie d'une slide en spécifiant deux options dans l'attribut, par exemple <code>data-transition="zoom slide-in"</code>. Dans ce cas, on peut ajouter les suffixes -in ou -out à l'option slide.
==== Animations ====
Reveal.js peut animer automatiquement des contenus de slides adjacentes qui maintiennent des éléments communs. Pour ce faire, les deux slides doivent proposer l'attribut <code>data-auto-animate</code> dans les balises <code>section</code>. Voici un exemple tiré de la documentation officielle :
<syntaxhighlight lang="HTML5" line>
<section data-auto-animate>
  <h1>Auto-Animate</h1>
</section>
<section data-auto-animate>
  <h1 style="margin-top: 100px; color: red;">Auto-Animate</h1>
</section>
</syntaxhighlight>
Pour plus d'informations sur les animations se référer à [https://revealjs.com/auto-animate/ la partie dédiée dans la documentation officielle].
=== Interactivité avancée avec JavaScript ===
Une présentation Reveal.js peut être exploitée comme ''toile'' pour intégrer toute sorte de [[computation avec JavaScript]] et [[interactivité avec JavaScript]].
Ceci peut se faire de différentes manières, y compris l'exploitation de l'[[API]] de Reveal.js elle-même. À travers l'objet <code>Reveal</code>, en effet, on peut avoir accès à différentes propriétés et méthodes liées à la présentation, comme par exemple :
<syntaxhighlight lang="JavaScript">
Reveal.left();
Reveal.right();
Reveal.up();
Reveal.down();
Reveal.prev();
Reveal.next();
</syntaxhighlight>
Pour plus d'informations, un article sur ce wiki propose des exemples de présentations interactives :
{{ Goblock | [[Créer des présentations interactives avec Reveal.js]] }}
== Configuration/personnalisation ==
Il existe plusieurs manières de configurer/personnaliser les présentations faites avec Reveal.js. Dans cette section nous proposons quelques unes.
=== Utiliser les options de configuration ''built-in'' ===
À travers la méthode <code>Reveal.initialize()</code> on peut déterminer un grand nombre d'options d'affichage et du fonctionnement de la présentation en passant un objet (associations clé-valeur) comme argument. Par exemple :
<syntaxhighlight lang="JavaScript" line>
Reveal.initialize({
  //Afficher ou pas les contrôles pour se déplacer dans les slide
  controls: true,
  //Afficher ou pas le numéro des slides
  slideNumber: true,
  //Randomiser l'ordre des slides à chaque chargement de la présentation
  shuffle: true,
});
</syntaxhighlight>
Voir la  [https://revealjs.com/config/ liste des options sur la documentation officielle].
L'objet passé à la méthode d'initialisation peut également spécifier des éléments sur la taille des slides. Voir [https://revealjs.com/presentation-size/ les options sur la taille dans la documentation officielle].
=== Ajouter des arrière-plans personnalisés ===
On peut agir au niveau du ''background'' des slides au niveau individuel, afin qu'une slide particulière possède un arrière-plan spécifique/différent des autres.
Reveal.js accepte plusieurs types de background :
* Couleurs uniformes
* Gradients
* Images fixes ou en parallax (scroll horizontale d'une même large image)
* Vidéos
Voici quelques examples. Pour plus de possibilités, voir [https://revealjs.com/backgrounds/ la page de la documentation officielle sur le background].
==== Couleur uniforme ====
La couleur uniforme est définie avec l'attribut <code>data-background-color</code> qui accepte des noms des couleurs, des valeurs hexadécimaux, ou la fonction rgb(xxx, xxx, xxx) avec les valeurs des couleurs primaires :
<syntaxhighlight lang="HTML5">
<section data-background-color="blue">
  <h1>Texte</h1>
</section>
<section data-background-color="#970000">
  <h1>Texte</h1>
</section>
<section data-background-color="rgb(230, 127, 33)">
  <h1>Texte</h1>
</section>
</syntaxhighlight>
==== Gradient ====
On peut spécifier trois types de gradient comme valeur de l'attribut <code>data-background-gradient</code> :
* linear-gradient(direction, couleur1, couleur2)
* raidal-gradient(couleur1, couleur2)
* conic-gradient(couleur1, couleur2)
Par exemple :
<syntaxhighlight lang="HTML5" line>
<section data-background-gradient="linear-gradient(to bottom, #283b95, #17b2c3)">
  <h2>Texte</h2>
</section>
<section data-background-gradient="radial-gradient(#283b95, #17b2c3)">
  <h2>Texte</h2>
</section>
</syntaxhighlight>
Encore une fois, on peut spécifier les couleur avec le nom, la valeur hexadécimale, ou les valeurs rgb(xxx, xxx, xxx).
==== Image de fond ====
Une image de fond peut être appliquée à une slide à travers des attributs avec le préfix <code>data-background-</code> :
* <code>data-background-image</code> : URL relatif ou absolu de l'image
* <code>data-background-size</code> : [https://developer.mozilla.org/fr/docs/Web/CSS/background-size option CSS] (e.g. cover, contain)
* <code>data-background-position</code> : [https://developer.mozilla.org/fr/docs/Web/CSS/background-position option CSS] (e.g. center, top, ...)
* <code>data-background-repeat</code> : [https://developer.mozilla.org/docs/Web/CSS/background-repeat option CSS] (e.g. no-repeat, repeat-x, ...)
* <code>data-background-opacity</code> : valeur de 0 (transparent) à 1 (opacité totale)
Exemples tiré de la documentation officielle :
<syntaxhighlight lang="HTML5" line>
<section data-background-image="http://example.com/image.png">
  <h2>Image</h2>
</section>
<section
  data-background-image="http://example.com/image.png"
  data-background-size="100px"
  data-background-repeat="repeat"
>
  <h2>This background image will be sized to 100px and repeated</h2>
</section>
</syntaxhighlight>
==== Vidéo de fond ====
On peut utiliser une ou plusieurs vidéos (e.g. une ''playlist'') en arrière-plan pour chaque slide individuellement. La vidéo peut également être jouée en boucle, par exemple pour donner la sensation d'un mouvement continu. Les attributs pour appliquer une vidéo en arrière-plan sont les suivantes :
* <code>data-background-video</code> : un URL ou pluieurs URL séparés par une virgule qui pointent vers un fichier vidéo compatible pour le web (voir [[HTML5 audio et video]])
* <code>data-background-video-loop</code> : true or false pour déterminer si la vidéo joue en boucle (false si pas spécifié)
* <code>data-background-video-muted</code> : true or false pour enlever le son à la vidéo
* <code>data-background-size</code> et <code>data-background-opacity</code> : mêmes options d'une image en arrière plan (voir plus haut)
Exemple tiré de la documentation officielle :
<syntaxhighlight lang="HTML5" line>
<section data-background-video="https://static.slid.es/site/homepage/v1/homepage-video-editor.mp4"
          data-background-video-loop data-background-video-muted>
  <h2>Video</h2>
</section>
</syntaxhighlight>
==== Autres fonds ====
Il est également possible d'ajouter un iframe comme arrière-plan, par exemple pour montrer une démo ou une page à lire, ainsi qu'une image avec effet ''parallax'' (défilement de l'image dans la direction de la présentation). Pour plus de détails se référer à [https://revealjs.com/backgrounds/ la page sur les backgrounds dans la documentation officielle].
=== Choisir un thème pré-défini ===
Reveal.js propose une dizaine de thèmes différents qui sont disponibles en tant que fichier .css différents. Dans le template proposé dans cet article, les fichiers se trouvent dans le dossier <code>assets/vendor/revealjs/dist/theme/</code>.
Dans la version 4.3.x traitée dans cette page, les thèmes sont les suivants (liste tirée de la documentation officielle) :
{| class="wikitable"
! Name
! Effect
|-
| black
| Black background, white text, blue links (default)
|-
| white
| White background, black text, blue links
|-
| league
| Gray background, white text, blue links
|-
| beige
| Beige background, dark text, brown links
|-
| sky
| Blue background, thin dark text, blue links
|-
| night
| Black background, thick white text, orange links
|-
| serif
| Cappuccino background, gray text, brown links
|-
| simple
| White background, black text, blue links
|-
| solarized
| Cream-colored background, dark green text, blue links
|-
| blood
| Dark background, thick white text, red links
|-
| moon
| Dark blue background, thick grey text, blue links
|}
Pour appliquer un thème il faut incorporer le fichier .css correspondant dans le <code>head</code> de la page .html contenant la présentation, par exemple :
<syntaxhighlight lang="HTML5">
<link
      rel="stylesheet"
      href="./assets/vendor/revealjs/dist/theme/solarized.css"
    />
</syntaxhighlight>
=== Apporter des modifications à un thème existant ===
Il existe plusieurs manières de modifier un thème existant. Ici nous proposons d'exploiter la présence d'un fichier CSS personnel dans le template proposé pour écraser/remplacer les déclaration de la feuille de style pré-établie. La condition pour que ce mécanisme fonctionne est tout simplement que le fichier CSS personnel soit incorporé dans la page .html après le fichier du thème pré-établi.
À ce moment on peut agir principalement de deux manières :
# Remplacer les variables des styles globaux
# Spécifier ponctuellement des déclarations de style pour des classes et/ou des éléments
==== Remplacer les variables de styles globaux ====
Chaque thème présente des variables de style qui sont appliqué au pseudo-élément <code>:root</code>. Par exemple, le thème beige propose les valeurs suivantes pour les variables :
<syntaxhighlight lang="CSS">
:root {
  --r-background-color: #f7f3de;
  --r-main-font: Lato, sans-serif;
  --r-main-font-size: 40px;
  --r-main-color: #333;
  --r-block-margin: 20px;
  --r-heading-margin: 0 0 20px 0;
  --r-heading-font: League Gothic, Impact, sans-serif;
  --r-heading-color: #333;
  --r-heading-line-height: 1.2;
  --r-heading-letter-spacing: normal;
  --r-heading-text-transform: uppercase;
  --r-heading-text-shadow: none;
  --r-heading-font-weight: normal;
  --r-heading1-text-shadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15);
  --r-heading1-size: 3.77em;
  --r-heading2-size: 2.11em;
  --r-heading3-size: 1.55em;
  --r-heading4-size: 1em;
  --r-code-font: monospace;
  --r-link-color: #8b743d;
  --r-link-color-dark: #564826;
  --r-link-color-hover: #c0a86e;
  --r-selection-background-color: rgba(79, 64, 28, 0.99);
  --r-selection-color: #fff;
}
</syntaxhighlight>
On peut à ce moment définir avec le même pseudo-sélecteur seulement les variables que nous souhaitons modifier dans le fichier CSS personnel, par exemple :
<syntaxhighlight lang="CSS">
:root {
  --r-background-color: #F8F8F8;
  --r-heading-color: #123456;
}
</syntaxhighlight>
Il est plus pratique de rédeclarer les variables dans un autre fichier plutôt que les modifier directement dans le fichier du thème, car de cette manière si on met à jour les fichiers de Reveal.js suite à une nouvelle version, les modifications ne seront pas écrasées.
==== Spécifier ponctuellement des déclarations de style ====
Comme dans toute page HTML5, on peut appliquer des propriétés de style CSS à toute élément à travers les différentes sélecteurs (voir [[Introduction à CSS]]). Pour être sûr de bien écraser d'autres potentiels déclarations déjà disponibles, il est important de donner des sélecteurs spécifiques, par exemple :
<syntaxhighlight lang="CSS">
.reveal h1 { color: #FFF }
</syntaxhighlight>
Si on avait utilisé seulement <code>h1 { ... }</code> il y a le risque qu'une déclaration plus précise - et donc prioritaire - soit disponible dans le fichier du thème.
À travers des déclarations de style ponctuelles on peut par exemple appliquer un logo fixe qui apparaît dans la présentation. Pour ce faire, on peut par exemple donner une image de fond au body :
<syntaxhighlight lang="CSS">
body {
  background-image: url("lien/vers/image.svg") !important;
  background-repeat: no-repeat !important;
  background-position: left 20px bottom 20px !important;
  background-size: 100px !important;
}
</syntaxhighlight>
=== Créer son propre thème ===
La création d'un thème nécessite de quelques connaissances techniques en plus. Il faudra en effet à minima :
# Installer [[Node.js]]
# Télécharger l'environnement de développement de la bibliothèque depuis [https://github.com/hakimel/reveal.js le dépôt GitHub officiel]
# Installer l'environnement de travail (voir la section [https://revealjs.com/installation/#full-setup full-setup dans la documentation officielle]
# Dupliquer le fichier <code>.scss</code> (un CSS à compiler) depuis le dossier css/theme
# Apporter les modifications au nouveau fichier <code>.scss</code>
# Lancer la commande de compliation <code>npm run build -- css-themes</code>
== Fonctionnalités pour le présentateur/utilisateur ==
Le présentateur et/ou les utiliateurs des slides ont à disposition quelques options utiles, dont certaines sont illustrées dans cette section.
=== Présentation en plein écran ===
Pour afficher la présentation en plein écran utilisez la touche du clavier <code>F</code>. Il faut bien veiller que la fenêtre du navigateur possède le''focus'' pour que cela marche. Si la fonction ne marche pas, cliquez une fois sur la surface de la page et ensuite saisissez la touche <code>F</code>.
Pour sortir de la modalité en plein écran utilisez la touche <code>Esc</code>.
=== Aperçu des slides ===
On peut obtenir à tout moment un aperçu de l'ensemble des slides avec la touche <code>O</code> ou <code>Esc</code>. Une fois la modalité aperçu affichée, on peut naviguer normalement à travers les slides.
Pour sortir de la modalité utilisez à nouveau la touche <code>O</code> ou <code>Esc</code>.
=== Modalité orateur ===
Pour afficher la modalité orateur utilisez la touche <code>S</code>. Une fenêtre pop-up ('''qu'il faudra probablement autoriser dans votre navigateur''') va s'affiche à l'écran avec la présentation, le contenu de la prochaine étape, un timer et éventuellement les notes de chaque slide.
Pour utiliser la modalité orateur dans une classe ou une conférence, il faudra choisir l'extension plutôt que la duplication de l'écran dans les options de connexion au projecteur. De cette manière, vous pouvez déplacer la fenêtre principale du navigateur sur l'écran du projecteur et garder le pop-up de la modalité orateur sur votre propre écran.
Pour plus d'informations, y compris comment ajouter des notes aux slides, se référer à la [https://revealjs.com/speaker-view/ documentation officielle sur la ''speaker view''].
=== Zoom ===
Si le plugin zoom est incorporé (comme dans le template proposé), vous pouvez utiliser la combinaison <code>Alt + Click du mouse</code> (pour Windows et Mac) et <code>Ctrl + Click du mouse</code> (Linux) pour agrandir toute partie d'une slide. Pour revenir à la taille normale utilisez à nouveau la même combinaison.
=== Recherche à l'intérieur des slides ===
Si le plugin search est incorporé (comme dans le templateproposé), en saisissant la combinaison <code>Ctrl+ Alt + F</code> un champ de recherche s'affiche, de manière très discrète, en haut à droite de l'écran. Vous pouvez à ce moment saisir les mots de la recherche et appuyer sur <code>Enter</code>. Si une correspondance est trouvée, la première slide avec un ''match'' s'affiche automatiquement, avec la clé de recherche mise en évidence en jaune. Si plusieurs correspondances existent, vous pouvez utiliser la flèche droite pour passer directement aux slides concernées.
=== Auto-play ===
On peut définir un timer pré-définis pour le défilement des slides. Pour ce faire, il faut passer les informations à la méthode d'initialisation, par exemple :
<syntaxhighlight lang="JavaScript">
Reveal.initialize({
  // Autres options
  autoSlide: 5000,
  loop: true
});
</syntaxhighlight>
Cette option peut être utile par exemple pour une utilisation dans la recherche, notamment si les participant-es doivent être exposé-es à des stimuli pour une période définie.
Si vous utilisez cette fonctionnalité dans un contexte de fruition autonome de la présentation, pensez à bien signaler l'auto-play aux utilisateurs.
=== Exporter en PDF ===
On peut exporter la présentation en PDF, se référer à la [https://revealjs.com/pdf-export/ documentation officielle ''export pdf''] pour les différentes options.
== Extensions ==
Il existe des nombreux plugin qui permettent d'ajouter des fonctionnalités. Certains plugin (i.e. ceux inclus dans le template proposé) sont directement développés par le créateur de la bibliothèque, d'autres sont développés par la communauté. Il faut donc faire attention à la fiabilité et compatibilité des plugins.
{{ Goblock | [https://github.com/hakimel/reveal.js/wiki/Plugins,-Tools-and-Hardware Liste de ''third party plugin''] }}
=== Audio Slideshow ===
[https://github.com/rajgoel/reveal.js-plugins/tree/master/audio-slideshow Audio Slideshow] est un plugin qui permet d'ajouter des narrations audio aux slides. Contrairement au même principe sur PowerPoint (voir [[Enregistrer un diaporama powerpoint]]), le résultat n'est pas une vidéo, mais la coordination entre les slides HTML5/CSS/JS et des fichiers audio. De ce fait, il y un épargne considérable en termes de poids des présentations. De plus, l'interactivité des slides est maintenues, car l'utilisateur peut continuer à bénéficier des contenus à son rythme si la narration automatique est mise en pause.
== Conclusion ==
Cet article a proposé un aperçu du fonctionnement et des potentialités de la bibliothèque JavaScript Reveal.js. La possibilité de créer des présentations avec les technologies du web [[HTML5]], [[CSS]] et [[JavaScript]] est une manière pour rendre les présentations indépendantes de technologies propriétaires, en faciliter la dissémination à travers le web, et pour les rendre plus interactives, notamment dans une perspective de fruition autonome.
Cet article générale est complété par des exemples plus spécifiques dans la page [[Créer des présentations interactives avec Reveal.js]].
== Ressources ==
=== Liens ===
* [https://revealjs.com/ Site officiel de Reveal.js]
* [https://github.com/hakimel/reveal.js Dépôt GitHub de la bibliothèque] : le dépôt sert aussi pour demander du support directement au(x) développeur(s)
=== Exemples ===
* [https://mafritz.ch/slides/ Présentations liées au domaine de la technologie éducative] : collections de slides crées par [[Utilisateur:Mattia A. Fritz|Mattia A. Fritz]] ([[Discussion utilisateur:Mattia A. Fritz|discussion]]) sur différents thèmes en lien avec la technologie éducative et domaines annexes
[[Category: JavaScript]]
[[Category: Tutoriel]]
[[Category: Ressources STIC]]

Dernière version du 28 janvier 2023 à 14:39

Introduction

Reveal.js est une bibliothèque JavaScript qui permet de créer des présentations/diaporama en utilisant les technologies du web HTML5, CSS et JavaScript : tout ce qui est possible de faire dans le web peut être fait aussi dans des slides.

De ce fait, la création de slides avec Reveal.js ouvre des potentialités pédagogiques inexprimées par le bias de présentations construites avec des logiciels plus traditionnels comme PowerPoint ou Keynotes. Parmi les options figurent :

  • La publication des slides en tant que pages/application web en accès avec un simple navigateur
  • La possibilité d'intégrer facilement des éléments multi-média directement tirés du web comme des images, vidéos, animations, etc.
  • L'implémentation de slides interactives qui exploitent les possiblités de la computation avec JavaScript et de l'interactivité avec JavaScript. On peut par exemple intégrer directement dans les slides des quiz, des mécanismes de drag&drop, ou encore des algorithmes aléatoires ou qui s'adaptent aux actions/choix des utilisateurs

En d'autres termes, en exploitant les technologies du web, il est possible de mieux intégrer des principes de l'apprentissage multimédia dans des supports pédagogiques hybrides. On exploite d'un côté la familiarité des apprenant-es avec les supports de type présentation/diaporama, mais en intégrant en même temps de mécanisme pour augmenter leur contrôle ainsi que leur investissement cognitif dans la fruition des contenus.

Cette page propose un aperçu de ces potentialités avec quelques exemples. Sur le plan technique, la documentation de la bibliothèque est assez bien fournie (sauf pour ce qui concerne l'installation, voir plus bas) et cette page évite donc de reproposer tous les aspects qui sont déjà bien traitées ailleurs.

Pré-requis

La création de slides avec Reveal.js présuppose à minima une connaissance de base de HTML5 et CSS. Pour tirer avantage des potentialités interactives, une connaissances de JavaScript est également nécessaire. Les ressources suivantes représentent des repères utiles pour pouvoir ensuite utiliser Reveal.js de manière plus approfondie :

Sur le plan des contenus, il peut être très utile de connaître quelques principes de design graphiques et pédagogiques. Les pages suivantes peuvent être utiles à ce propos :

Logiciels nécessaires

Pour créer des slides avec Reveal.js il faut disposer tout simplément d'un éditeur de texte tel que Visual studio code.

Exemples concrets

Cet article propose un survol général du fonctionnement de la bibliothèque. Elle représente donc un point d'entrée pour pouvoir créer des présentations interactives avec Reveal.js. Cette deuxième page se focalise plus sur les enjeux et potentialités techno-pédagogiques de présentations qui exploitent la computation avec JavaScript et l'interactivité avec JavaScript.

Notes sur la version

Cette page fait référence à la version 4.3.x de la bibliothèque (voir versionnage sémantique). Les aspects traités sont cependant plutôt liés à l'interaction entre HTML5, CSS et JavaScript et devraient donc être valables aussi pour des versions successives.

Installation

Il existe plusieurs manières d'utiliser Reveal.js qui vont du très basique (ajouter les fichiers nécessaires à un fichier .html) au plus complexe (exploiter Node.js pour créer un environnement de développement). Dans cette page nous proposons un dépôt GitHub avec une organisation des fichiers déjà pré-établie en fonction des pratiques du cours STIC:STIC I du Master of Science in Learning and Teaching Technologies à l'Université de Genève. Ce type d'organisation n'est cependant pas obligatoire pour le fonctionnement de Reveal.js. Il suffit de veiller à ce que les différents fichiers de la bibliothèques (CSS, JavaScript, plugin-in, etc.) soit disponibles et incorporés avec des liens corrects dans le fichier principale avec la présentation.

Template proposé

Le template proposé est disponible dans un dépot GitHub. Il peut être cloné ou téléchargé à travers le bouton code en haut à gauche, ou - si vous avez un compte GitHub, utilisé comme template pour démarrer un nouveau projet. Le lien au dépôt est le suivant :

Le template est structuré en principe pour une seule présentation, la section suivante décrit comme il peut être adapté pour plusieurs présentations. Encore une fois, il s'agit d'éléments arbitraires qui peuvent être modifiés du moment où la présence et la relation entre fichiers indispensables/optionnels sont maintenues.

Le template est organisé de la manière suivante :

  • Tous les fichiers de fonctionnement sont disponibles dans un dossier assets. Ce dossier propose 4 sous-dossiers :
    • css : dossier pour un ou plusieurs fichiers CSS personnels, c'est-à-dire avec des déclarations de style proposés directement par le concepteur. Un fichier style.css est déjà disponible et incorporé dans le template
    • images : dossier pour récolter les images utilisées dans la présentation
    • js : un dossier pour récolter un ou plusieurs fichier JavaScript codés directement par le concepteur. Un fichier app.js est déjà disponible et incorporé dans le template
    • vendor : un dossier qui est censé contenir des bibliothèques JavaScript. Ici ce trouve un sous-dossier revealjs qui se compose de deux dossiers :
      • dist : un dossier qui contient le fichiers CSS et JavaScript qui déterminent le fonctionnement "de base" de Reveal.js. Dans le dossier dist se trouvent par exemple les différents thèmes disponibles out of the box
      • plugin : un dossier qui contient les plugins de Reveal.js. Ces plugins permettent d'ajouter des foncionnalités comme le Zoom sur les images, la syntaxe du code, etc. Plusieurs plugins sont déjà incorporés dans le template
  • index.html : le fichier dans lequel se trouve le contenu de la présentation.

Code de base du template

Le code du fichier index.html (avec commentaires pour reconnaître les différents éléments) est le suivant :

<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Template pour présentation avec Reveal.js</title>
    <!-- CSS obligatoire de Reveal.js -->
    <link rel="stylesheet" href="./assets/vendor/revealjs/dist/reveal.css" />
    <!-- CSS selon le thème de Reveal.js choisi, voir le dossier correspondant pour les options -->
    <link
      rel="stylesheet"
      href="./assets/vendor/revealjs/dist/theme/serif.css"
    />
    <!-- CSS personnel avec déclarations de style en ajoute ou en substitution -->
    <link rel="stylesheet" href="./assets/css/style.css" />
  </head>
  <body>
    <!-- Début du contenu de la présentation -->
    <div class="reveal">
      <div class="slides">
        <!-- Chaque slide se crée avec une balise section -->
    
        <!-- ... code abrégé ... -->
      </div>
    </div>
    <!-- JS obligatoire de Reveal.js -->
    <script src="./assets/vendor/revealjs/dist/reveal.js"></script>
    <!-- Plugin JS optionnels de Reveal.js -->
    <script src="./assets/vendor/revealjs/plugin/highlight/highlight.js"></script>
    <script src="./assets/vendor/revealjs/plugin/markdown/markdown.js"></script>
    <script src="./assets/vendor/revealjs/plugin/math/math.js"></script>
    <script src="./assets/vendor/revealjs/plugin/notes/notes.js"></script>
    <script src="./assets/vendor/revealjs/plugin/search/search.js"></script>
    <script src="./assets/vendor/revealjs/plugin/zoom/zoom.js"></script>
    <!-- Initialization de Reveal.js selon la configuration souhaitée -->
    <script>
      // https://revealjs.com/initialization/
      Reveal.initialize({
        controls: true,
        progress: true,
        center: false,
        hash: true,
        slideNumber: true,

        // Learn about plugins: https://revealjs.com/plugins/
        plugins: [
          RevealZoom,
          RevealNotes,
          RevealSearch,
          RevealMarkdown,
          RevealHighlight,
          RevealMath,
        ],
      });
    </script>
    <!-- JS personnel pour ajouter des éléments interactifs (optionnel)-->
    <script src="./assets/js/app.js"></script>
  </body>
</html>

Extension du template à plusieurs présentations

Pour créer plusiuers présentations sans avoir à dupliquer tous les fichiers à chaque fois, il est possible par exemple de créer un nouveau dossier à la racine du projet (i.e. au même niveau de assets) et créer un fichier index.html à l'intérieur de chaque sous-dossier représentant une présentation différente. Chaque dossier de la présentation peut à ce moment avoir de sous-dossiers pour les images, script JavaScript, etc. spécifiques à cette présentation. Par exemple :

|- assets
|- presentation-1
   |- index.html
   |- images
      |- maison.svg
   |- js
      |- drag-and-drop.js
|- presentation-2
   |- index.html
   |- images
      |- voiture.svg
   |- js
      |- animation.js
À ce moment il faut bien modifier les chemins relatifs aux fichiers CSS/JS. Le nouveau chemin doit tenir compte du fait que les fichiers se trouvent à un niveau supérieur. Il faut donc modifier les pointage de ./assets/etc/... à ../assets/etc/....

Incorporation d'autres bibliothèques JavaScript

Étant une présentation Reveal.js une page/application web comme toute autre, on peut tout à fait utiliser d'autres bibliothèques JavaScript dans une présentation. L'arborescence du template facilite cette possibilité, car il suffit d'insérer les autres bibliothèques dans le dossier assets/vendor :

|- assets
   |- ...
   |- vendor
      |- revealjs
      |- autre-bibliotheque-1
      |- autre-bibliotheque-2
      |- ...

À ce moment il suffit d'incorporer les fichiers CSS/JS de la bibliothèque dans le fichier .html avec le contenu de la présentation.

Créer la structure pour la présentation

Reveal.js permet de créer des slides classiques, c'est-à-dire qui occupent toute l'espace disponible à l'écran, ou des slides embedded/incrustées dans une page avec d'autres contenus.

Présentation à plein écran

Sans rien spécifier au niveau de la configuration, la présentation en plein écran s'applique automatiquement. À ce moment, la structure de la présentation consiste dans deux div emboîtés :

  1. La racine <div class="reveal">...</div>
  2. Un div qui va contenir les slides <div class="slides">...</div>

Le code commence directement à l'intérieur du body :

<html>
  <head>
  <!-- Autre code pas affiché pour brévité -->
  </head>
  <body>
    <div class="reveal">
      <div class="slides">
       <!-- Les slides vont ici -->
      </div>
    </div>
    <!-- Importation des fichiers JavaScript -->
  </body>
</html>

Présentation embedded

La structure pour une présentation incrustée dans d'autres contenus d'une page HTML5 est la même. Elle doit cependant apparaître en fonction de la position souhaité par rapport au reste de la page. Donc elle ne doit pas forcément commencer juste après l'ouverture du body.

Pour afficher la présentation de manière embedded il faut spécifier dans les options de configuration le code suivant :

Reveal.initialize({ 
  // Autre associations clé-valeur pour les options
  embedded: true 
});

La présentation va à ce moment assumer les dimensions qui s'appliquent à la balise racine <div class="reveal">...</div>. Cela peut donc dépendre de la dimension de l'élément parent si cette balise est emboîtéé et/ou des propriétés CSS qui lui sont appliquées.

Ajouter des slides

Pour ajouter des slides, il suffit d'ajouter des balises <section>...</section> à l'intérieur de la balise <div class="slides">...</div> :

<div class="reveal">
  <div class="slides">
    <!-- Slide avec le titre -->
    <section>
      <h1>Titre de la présentation</h1>
    </section>

    <!-- Slide avec l'introduction -->
    <section>
      <h2>Introduction</h2>
      <p>Cette présentation porte sur ...
    </section>
  </div>
</div>

Il est également possible de créer des sections à l'intérieur d'une section, ce qui correspond à créer des slides verticales. Les utilisateurs peuvent néanmoins ne pas être habitués à ce type de fonctionnalité, qu'il faudrait utiliser avec une scénarisation attentive pour en tirer des bénéfices pédagogiques.

Sur le plan de l'organisation, il est de bonne pratique d'ajouter des commentaires pour délimiter les différentes slides. Des commentaires sémantique à propos du contenu sont à préférer plutôt que numéroter les commentaires en fonction de l'ordre des slides. De cette manière, il est possible de modifier l'ordre des slides sans avoir à modifier tous les commentaires.

Contenus de la présentation

En principe, tout élément HTML5 peut être intégré dans les slides avec Reveal.js. Cette section présente quelques possibilités, mais l'intérêt de Reveal.js réside dans les potentialités de combiner plusieurs éléments.

Contenu typographique avec HTML5

On peut insérer du texte avec les balises HTML5 normalement consacrées à cette fonction : titres de différents niveaux, paragraphes, listes à puces, etc.

<!-- Introduction -->
<section>
  <h3>Qu'est-ce qu'EduTechWiki</h3>
  <p>EduTechWiki est un wiki sur la technologie éducative et domaines annexes hébergé et maintenu à TECFA depuis 2006.</p>
</section>

<!-- Visites -->
<section>
  <h3>Trafic généré</h3>
  <ol>
    <li>1.4 mio in 2019</li>
    <li>1.2 mio in 2020</li>
    <li>1.1 mio in 2021</li>
  </ol>
</section>

Reveal.js met à disposition la classe class="r-fit-text" qui permet à un élément textuel de prendre toute la place disponible sans sortir du cadre de la slide. Ceci est utile par exemple pour créer des larges textes sans avoir à essayer plusieurs niveaux des titres ou styles personnalisés.

<section>
  <h2 class="r-fit-text">Tout l'espace disponible</h2>
</section>

Contenu avec Markdown

Markdown est un langage de formatage léger et orienté aux contenus les plus fréquents. Un aperçu du langage est disponible dans la page Introduction à Rmarkdown.

Pour utiliser Markdown il faut bien veiller à ce que le plugin correspondant soit incorporé et initialisé dans la configuration de Reveal (voir template). À ce moment, il suffit de spécifier l'utilisation de Markdown de cette manière :

<section data-markdown>
  <textarea data-template>
    ## Titre de la slide
    - Item 1
    - **Item 2 en gras**
    - [TECFA](https://tecfa.unige.ch)
  </textarea>
</section>

Afficher du code

Pour afficher du code informatique dans des slides, il faut veiller à incorporer et initialiser le plugin highlight (voir le template). Selon le type de snytaxe utilisée, il faudra également incorporer la feuille de style CSS qui permet d'appliquer le formatage au code (e.g. couleur de fond, mots clé, etc.). Les feuilles de styles disponibles se trouvent dans le dossier du plugin highlight (dans assets/vendor/revealjs/plugin selon l'organisation du template proposé).

L'affichage du code peut se faire à la ligne ou dans des blocs de code. Dans le premier cas, il suffit d'englober le contenu avec la balise <code>...</code>.

Pour les blocs de code, on peut utiliser la balise <pre>...</pre> pour garantir que les indentations soient respectées.

<section>
  <pre><code>
     <h1>Du code HTML5</h1>
     <p>Qui va recevoir du formatage...</p>
  </pre></code>
</section>

Dans la balise code on peut ajouter des attributs utiles pour mettre encore plus en relief le code, par exemple :

  • data-line-numbers permet de mettre en évidence une ou plusieurs lignes du code. Par exemple :
    <code data-line-numbers="1, 5-10">...</code>
    met en évidence la première ligne et les lignes de 5 à 10.
    On peut même mettre en évidence de manière progressive en séparant les lignes intéressées par un |. Par exemple :
    <code data-line-numbers="1-4|5-10|11-15">...</code>
    met d'abord en évidence les lignes de 1-4, ensuite de 5 à 10, et enfin de 11 à 15.
  • data-trim permet d'enlever les espaces au début et à la fin du code, ce qui permet par exemple de commencer le code à la ligne suivant la balise code

Images

On peut ajouter des images matricielles ou des images vectorielles simplement avec la balise <img src="..." alt="..." title="..." />.

On peut également appliquer des règles de style déjà prévues par Reveal.js. Voir la partie "Layout" plus bas.

Audio/Vidéo

Les composantes audio et/ou vidéo peuvent être intégrés simplement avec les balises correspondantes en HTML5. Voir à ce propos

Reveal.js prévoit aussi l'attribut data-autoplay qui permet d'entamer la lecture de l'élément audio/vidéo directement lorsque le slide conteneur est ouvert par l'utilisateur :

<section>
  <h3>Magnifique vidéo qui démarre toute seule</h3>
  <video data-autoplay ...>...</video>
</section>

Frame interne

Pour englober du contenu d'autres sites (e.g. une vidéo depuis une plateforme, un prototype Figma, etc.), on peut utiliser la balise <iframe data-src="..."></iframe>.

Si on utilise l'attribut data-src au lieu de l'habituel src, le contenu du frame sera chargé seulement si la slide est visionnée par l'utilisateur.

Classes pour le layout des contenus

Reveal.js met à disposition dans son CSS de base un nombre de classes qui aident à mieux déterminer le layout des contenus. Cette section en présente quelques unes. D'autres peuvent être ajoutées avec du CSS personnalisé.

Adapter le contenu à l'espace disponible avec r-stretch

La classe r-stretch permet d'adapter la taille verticale d'un élément à la place disponible en fonction de la présence d'autres contenus. Cette classe va fonctionner seulement si les deux conditions suivantes sont respectées :

  1. L'élément auquel la classe est appliquée (e.g. une image) est un children direct de la balise <section>...</section> qui représente la slide
  2. Il n'existe qu'un seul élément avec cette classe à l'intérieur de la même slide

Par exemple :

<section>
  <h2>Titre</h2>
  <img src="..." alt="..." title="..." class="r-stretch">
  <small>Ceci est une image qui prend la place disponible</small>
</section>

Placer des contenus alignés horizontalement

La classe r-hstack permet de placer des contenus l'un à côté de l'autre :

<section>
  <h3>Alignement horizontale</h3>
  <div class="r-hstack">
    <div>Sur la gauche</div>
    <div>Sur la droite</div>
  </div>
</section>

Ajouter un cadre à un élément

La classe r-frame permet d'ajouter un cadre (i.e. une bordure) à tout élément qui l'applique :

<section>
  <div class="r-frame">
    Contenu mis en relief par une bordure
  </div>
</section>

Empiler des éléments les uns sur les autres

La classe r-stack permet de positionner un élément sur un autre élément sous-jacent. Ceci peut être combiné avec la fonctionnalités des fragments (voir plus bas) qui permet d'afficher progressivement des éléments au sein de la même slide ou avec des animations/transitions (voir plus bas) qui affichent un seul élément à la fois en cachant les autres.

<section>
  <div class="r-stack">
    <p>Premier élément</p>
    <p>Deuxième élément superposé</p>
  </div>
</section>

Ajouter des éléments interactifs

Reveal.js met à disposition des éléments interactifs out of the box qui peuvent être plus ou moins sophistiqués (e.g. en ajoutant des classes ou des attributs). D'autres peuvent être ajoutés simplement grâce à l'interactivité avec JavaScript possible dans toute page web. Dans tous les cas, ces éléments interactifs peuvent être exploités pour des finalités pédagogiques, notamment en lien avec l'apprentissage multimédia.

Fragments (affichage progressif)

En ajoutant la classe class="fragment" à tout élément dans une slide, cet élément va s'afficher progressivement (i.e. lorsque l'utilisateur ou le système automatique déclenche la suite de la présentation). Dans le code suivant, par exemple, l'utilisateur ne voit que le titre de la slide lorsque celle-ci est affiché dans le navigateur. Les points de la liste à puces s'afficheront progressivement avec le déclenchement de la suite :

<section>
  <h3>Titre visible du départ</h3>
  <ul>
    <li class="fragment">Affiché progressivement dans un premier temps</li>
    <li class="fragment">Affiché progressivement dans un deuxième temps</li>
    <li class="fragment">Affiché progressivement dans un troisième temps</li>
  </ul>
</section>

On peut combiner la classe fragment avec d'autres classes qui déterminent de manière plus précise la transitions entre éléments, comme par exemple fade-out, highlight-red, etc. Voir la documentation sur le fragment pour plus d'options. Il est d'ailleurs possible d'emboiter plusieurs fragments sur le même élément (exemple tiré de la documentation officielle) :

<span class="fragment fade-in">
  <span class="fragment highlight-red">
    <span class="fragment fade-out">
      Fade in > Turn red > Fade out
    </span>
  </span>
</span>

Cet élément va dans l'ordre :

  1. Apparaître avec un effet fade-in
  2. Changer dans la couleur de police rouge
  3. Disparaître avec un effet fade-out

On peut également spécifier l'ordre dans lequel les fragments apparaissent à l'écran avec l'attribut data-fragment-index="...". Il faut spécifier dans la valeur un chiffre qui détermine l'ordre. Il est possible d'attribuer à deux ou plusieurs éléments le même index, à ce moment, les éléments apparaissent au même temps.

Liens entre slides

Les liens entre slides peuvent être créés de différentes manières. Ils représentent un fonction intéressante d'un point de vue pédagogique, par exemple pour :

  • Créer des références croisées
  • Créer des parcours/narrations non linéaires
  • Suivre/sauter des parties de la présentation sur la base des connaissances des apprenant-es
  • Faciliter la segmentation en partie pour des longues présentations ou des présentations prévues en fruition autonome

Liens internes avec le hash

Le hash est la suite de caractère qui est attachée à chaque slide par Reveal.js. Le hash peut être construit :

  • Sur la base de la position de la slide dans l'ordre, e.g. #/3
  • Sur la base d'une valeur sémantique de l'attribut id donnée à la section, par exemple <section id="introduction">...</section> qui correspond à l'hash #/introduction. Cette deuxième option est plus sûre, car elle n'est pas affecté par un changement d'ordre des slides.

Pour créer des liens internes avec le hash on peut par exemple utiliser la balise a de HTML5. Avec le hash numérique le code ressemble à ce-ci :

<section>
  <a href="#/0">Revenir au début</a>
</section>

Avec le hash sémantique le code est le suivant :

<!-- Slide avec le lien -->
<section>
  <a href="#/partie-2">Aller directement à la Partie II</a>
</section>

<!-- Slide "target" du lien, avec id sémantique -->
<section id="partie-2">
  <h1>Deuxième partie !</h1>
</section>

Liens interns relatifs

Reveal.js met également à disposition des classes qui peuvent être combinées par exemple avec des boutons et qui permettent de naviguer à travers les slides de manière relative (e.g. aller au suivant). Voici le code tiré de la documentation officielle :

<button class="navigate-left">Left</button>
<button class="navigate-right">Right</button>
<button class="navigate-up">Up</button>
<button class="navigate-down">Down</button>

<!-- Previous vertical OR horizontal slide -->
<button class="navigate-prev">Prev</button>

<!-- Next vertical OR horizontal slide -->
<button class="navigate-next">Next</button>

Les boutons sont automatiquement rendus actifs ou inactifs selon la disponibilité d'un slide correspondante à la direction de navigation.

Transitions et animations

On peut ajouter des éléments animés entre slides avec des contenus différents (transitions) ou qui maintiennent des éléments communs qui se modifient (animation).

Transitions entre slides

Les passages entre une slide et l'autre peuvent être définis au niveau globale et/ou dans chaque slide individuellement.

Les valeurs possibles sont les suivantes :

  • none : pas de transition
  • fade : le slide disparaît en laissant émerger la suivante
  • slide : défilement habituel
  • convex : défilement avec un angle convexe
  • concave : défilement avec un angle concave
  • zoom : la prochaine slide s'agrandit à partir du centre de la slide actuelle

Pour définir la transition au niveau global, il faut spécifier la valeur dans l'initialisation de Reveal.js :

Reveal.initialize({
  //Autre associations clé-valeur
  backgroundTransition: 'slide'
});

Pour définir la transition de manière ponctuelle, on utilise l'attribut data-transition="option" à l'intérieur de la balise section :

<section data-transition="zoom">
  Effet zoom
</section>
<section data-transition="slide">
  Défilement habituel
</section>

On peut même définir un comportement différent pour l'entrée et la sortie d'une slide en spécifiant deux options dans l'attribut, par exemple data-transition="zoom slide-in". Dans ce cas, on peut ajouter les suffixes -in ou -out à l'option slide.

Animations

Reveal.js peut animer automatiquement des contenus de slides adjacentes qui maintiennent des éléments communs. Pour ce faire, les deux slides doivent proposer l'attribut data-auto-animate dans les balises section. Voici un exemple tiré de la documentation officielle :

<section data-auto-animate>
  <h1>Auto-Animate</h1>
</section>
<section data-auto-animate>
  <h1 style="margin-top: 100px; color: red;">Auto-Animate</h1>
</section>

Pour plus d'informations sur les animations se référer à la partie dédiée dans la documentation officielle.

Interactivité avancée avec JavaScript

Une présentation Reveal.js peut être exploitée comme toile pour intégrer toute sorte de computation avec JavaScript et interactivité avec JavaScript.

Ceci peut se faire de différentes manières, y compris l'exploitation de l'API de Reveal.js elle-même. À travers l'objet Reveal, en effet, on peut avoir accès à différentes propriétés et méthodes liées à la présentation, comme par exemple :

Reveal.left();
Reveal.right();
Reveal.up();
Reveal.down();
Reveal.prev();
Reveal.next();

Pour plus d'informations, un article sur ce wiki propose des exemples de présentations interactives :

Configuration/personnalisation

Il existe plusieurs manières de configurer/personnaliser les présentations faites avec Reveal.js. Dans cette section nous proposons quelques unes.

Utiliser les options de configuration built-in

À travers la méthode Reveal.initialize() on peut déterminer un grand nombre d'options d'affichage et du fonctionnement de la présentation en passant un objet (associations clé-valeur) comme argument. Par exemple :

Reveal.initialize({

  //Afficher ou pas les contrôles pour se déplacer dans les slide
  controls: true,

  //Afficher ou pas le numéro des slides
  slideNumber: true,

  //Randomiser l'ordre des slides à chaque chargement de la présentation
  shuffle: true,
});

Voir la liste des options sur la documentation officielle.

L'objet passé à la méthode d'initialisation peut également spécifier des éléments sur la taille des slides. Voir les options sur la taille dans la documentation officielle.

Ajouter des arrière-plans personnalisés

On peut agir au niveau du background des slides au niveau individuel, afin qu'une slide particulière possède un arrière-plan spécifique/différent des autres.

Reveal.js accepte plusieurs types de background :

  • Couleurs uniformes
  • Gradients
  • Images fixes ou en parallax (scroll horizontale d'une même large image)
  • Vidéos

Voici quelques examples. Pour plus de possibilités, voir la page de la documentation officielle sur le background.

Couleur uniforme

La couleur uniforme est définie avec l'attribut data-background-color qui accepte des noms des couleurs, des valeurs hexadécimaux, ou la fonction rgb(xxx, xxx, xxx) avec les valeurs des couleurs primaires :

<section data-background-color="blue">
  <h1>Texte</h1>
</section>

<section data-background-color="#970000">
  <h1>Texte</h1>
</section>

<section data-background-color="rgb(230, 127, 33)">
  <h1>Texte</h1>
</section>

Gradient

On peut spécifier trois types de gradient comme valeur de l'attribut data-background-gradient :

  • linear-gradient(direction, couleur1, couleur2)
  • raidal-gradient(couleur1, couleur2)
  • conic-gradient(couleur1, couleur2)

Par exemple :

<section data-background-gradient="linear-gradient(to bottom, #283b95, #17b2c3)">
  <h2>Texte</h2>
</section>

<section data-background-gradient="radial-gradient(#283b95, #17b2c3)">
  <h2>Texte</h2>
</section>

Encore une fois, on peut spécifier les couleur avec le nom, la valeur hexadécimale, ou les valeurs rgb(xxx, xxx, xxx).

Image de fond

Une image de fond peut être appliquée à une slide à travers des attributs avec le préfix data-background- :

  • data-background-image : URL relatif ou absolu de l'image
  • data-background-size : option CSS (e.g. cover, contain)
  • data-background-position : option CSS (e.g. center, top, ...)
  • data-background-repeat : option CSS (e.g. no-repeat, repeat-x, ...)
  • data-background-opacity : valeur de 0 (transparent) à 1 (opacité totale)

Exemples tiré de la documentation officielle :

<section data-background-image="http://example.com/image.png">
  <h2>Image</h2>
</section>
<section 
  data-background-image="http://example.com/image.png" 
  data-background-size="100px" 
  data-background-repeat="repeat"
>
  <h2>This background image will be sized to 100px and repeated</h2>
</section>

Vidéo de fond

On peut utiliser une ou plusieurs vidéos (e.g. une playlist) en arrière-plan pour chaque slide individuellement. La vidéo peut également être jouée en boucle, par exemple pour donner la sensation d'un mouvement continu. Les attributs pour appliquer une vidéo en arrière-plan sont les suivantes :

  • data-background-video : un URL ou pluieurs URL séparés par une virgule qui pointent vers un fichier vidéo compatible pour le web (voir HTML5 audio et video)
  • data-background-video-loop : true or false pour déterminer si la vidéo joue en boucle (false si pas spécifié)
  • data-background-video-muted : true or false pour enlever le son à la vidéo
  • data-background-size et data-background-opacity : mêmes options d'une image en arrière plan (voir plus haut)

Exemple tiré de la documentation officielle :

<section data-background-video="https://static.slid.es/site/homepage/v1/homepage-video-editor.mp4" 
          data-background-video-loop data-background-video-muted>
  <h2>Video</h2>
</section>

Autres fonds

Il est également possible d'ajouter un iframe comme arrière-plan, par exemple pour montrer une démo ou une page à lire, ainsi qu'une image avec effet parallax (défilement de l'image dans la direction de la présentation). Pour plus de détails se référer à la page sur les backgrounds dans la documentation officielle.

Choisir un thème pré-défini

Reveal.js propose une dizaine de thèmes différents qui sont disponibles en tant que fichier .css différents. Dans le template proposé dans cet article, les fichiers se trouvent dans le dossier assets/vendor/revealjs/dist/theme/.

Dans la version 4.3.x traitée dans cette page, les thèmes sont les suivants (liste tirée de la documentation officielle) :

Name Effect
black Black background, white text, blue links (default)
white White background, black text, blue links
league Gray background, white text, blue links
beige Beige background, dark text, brown links
sky Blue background, thin dark text, blue links
night Black background, thick white text, orange links
serif Cappuccino background, gray text, brown links
simple White background, black text, blue links
solarized Cream-colored background, dark green text, blue links
blood Dark background, thick white text, red links
moon Dark blue background, thick grey text, blue links

Pour appliquer un thème il faut incorporer le fichier .css correspondant dans le head de la page .html contenant la présentation, par exemple :

<link
      rel="stylesheet"
      href="./assets/vendor/revealjs/dist/theme/solarized.css"
    />

Apporter des modifications à un thème existant

Il existe plusieurs manières de modifier un thème existant. Ici nous proposons d'exploiter la présence d'un fichier CSS personnel dans le template proposé pour écraser/remplacer les déclaration de la feuille de style pré-établie. La condition pour que ce mécanisme fonctionne est tout simplement que le fichier CSS personnel soit incorporé dans la page .html après le fichier du thème pré-établi.

À ce moment on peut agir principalement de deux manières :

  1. Remplacer les variables des styles globaux
  2. Spécifier ponctuellement des déclarations de style pour des classes et/ou des éléments

Remplacer les variables de styles globaux

Chaque thème présente des variables de style qui sont appliqué au pseudo-élément :root. Par exemple, le thème beige propose les valeurs suivantes pour les variables :

:root {
  --r-background-color: #f7f3de;
  --r-main-font: Lato, sans-serif;
  --r-main-font-size: 40px;
  --r-main-color: #333;
  --r-block-margin: 20px;
  --r-heading-margin: 0 0 20px 0;
  --r-heading-font: League Gothic, Impact, sans-serif;
  --r-heading-color: #333;
  --r-heading-line-height: 1.2;
  --r-heading-letter-spacing: normal;
  --r-heading-text-transform: uppercase;
  --r-heading-text-shadow: none;
  --r-heading-font-weight: normal;
  --r-heading1-text-shadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0, 0, 0, 0.1), 0 0 5px rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.3), 0 3px 5px rgba(0, 0, 0, 0.2), 0 5px 10px rgba(0, 0, 0, 0.25), 0 20px 20px rgba(0, 0, 0, 0.15);
  --r-heading1-size: 3.77em;
  --r-heading2-size: 2.11em;
  --r-heading3-size: 1.55em;
  --r-heading4-size: 1em;
  --r-code-font: monospace;
  --r-link-color: #8b743d;
  --r-link-color-dark: #564826;
  --r-link-color-hover: #c0a86e;
  --r-selection-background-color: rgba(79, 64, 28, 0.99);
  --r-selection-color: #fff;
}

On peut à ce moment définir avec le même pseudo-sélecteur seulement les variables que nous souhaitons modifier dans le fichier CSS personnel, par exemple :

:root {
  --r-background-color: #F8F8F8;
  --r-heading-color: #123456;
}

Il est plus pratique de rédeclarer les variables dans un autre fichier plutôt que les modifier directement dans le fichier du thème, car de cette manière si on met à jour les fichiers de Reveal.js suite à une nouvelle version, les modifications ne seront pas écrasées.

Spécifier ponctuellement des déclarations de style

Comme dans toute page HTML5, on peut appliquer des propriétés de style CSS à toute élément à travers les différentes sélecteurs (voir Introduction à CSS). Pour être sûr de bien écraser d'autres potentiels déclarations déjà disponibles, il est important de donner des sélecteurs spécifiques, par exemple :

.reveal h1 { color: #FFF }

Si on avait utilisé seulement h1 { ... } il y a le risque qu'une déclaration plus précise - et donc prioritaire - soit disponible dans le fichier du thème.

À travers des déclarations de style ponctuelles on peut par exemple appliquer un logo fixe qui apparaît dans la présentation. Pour ce faire, on peut par exemple donner une image de fond au body :

body {
  background-image: url("lien/vers/image.svg") !important;
  background-repeat: no-repeat !important;
  background-position: left 20px bottom 20px !important;
  background-size: 100px !important;
}

Créer son propre thème

La création d'un thème nécessite de quelques connaissances techniques en plus. Il faudra en effet à minima :

  1. Installer Node.js
  2. Télécharger l'environnement de développement de la bibliothèque depuis le dépôt GitHub officiel
  3. Installer l'environnement de travail (voir la section full-setup dans la documentation officielle
  4. Dupliquer le fichier .scss (un CSS à compiler) depuis le dossier css/theme
  5. Apporter les modifications au nouveau fichier .scss
  6. Lancer la commande de compliation npm run build -- css-themes

Fonctionnalités pour le présentateur/utilisateur

Le présentateur et/ou les utiliateurs des slides ont à disposition quelques options utiles, dont certaines sont illustrées dans cette section.

Présentation en plein écran

Pour afficher la présentation en plein écran utilisez la touche du clavier F. Il faut bien veiller que la fenêtre du navigateur possède lefocus pour que cela marche. Si la fonction ne marche pas, cliquez une fois sur la surface de la page et ensuite saisissez la touche F.

Pour sortir de la modalité en plein écran utilisez la touche Esc.

Aperçu des slides

On peut obtenir à tout moment un aperçu de l'ensemble des slides avec la touche O ou Esc. Une fois la modalité aperçu affichée, on peut naviguer normalement à travers les slides.

Pour sortir de la modalité utilisez à nouveau la touche O ou Esc.

Modalité orateur

Pour afficher la modalité orateur utilisez la touche S. Une fenêtre pop-up (qu'il faudra probablement autoriser dans votre navigateur) va s'affiche à l'écran avec la présentation, le contenu de la prochaine étape, un timer et éventuellement les notes de chaque slide.

Pour utiliser la modalité orateur dans une classe ou une conférence, il faudra choisir l'extension plutôt que la duplication de l'écran dans les options de connexion au projecteur. De cette manière, vous pouvez déplacer la fenêtre principale du navigateur sur l'écran du projecteur et garder le pop-up de la modalité orateur sur votre propre écran.

Pour plus d'informations, y compris comment ajouter des notes aux slides, se référer à la documentation officielle sur la speaker view.

Zoom

Si le plugin zoom est incorporé (comme dans le template proposé), vous pouvez utiliser la combinaison Alt + Click du mouse (pour Windows et Mac) et Ctrl + Click du mouse (Linux) pour agrandir toute partie d'une slide. Pour revenir à la taille normale utilisez à nouveau la même combinaison.

Recherche à l'intérieur des slides

Si le plugin search est incorporé (comme dans le templateproposé), en saisissant la combinaison Ctrl+ Alt + F un champ de recherche s'affiche, de manière très discrète, en haut à droite de l'écran. Vous pouvez à ce moment saisir les mots de la recherche et appuyer sur Enter. Si une correspondance est trouvée, la première slide avec un match s'affiche automatiquement, avec la clé de recherche mise en évidence en jaune. Si plusieurs correspondances existent, vous pouvez utiliser la flèche droite pour passer directement aux slides concernées.

Auto-play

On peut définir un timer pré-définis pour le défilement des slides. Pour ce faire, il faut passer les informations à la méthode d'initialisation, par exemple :

Reveal.initialize({
  // Autres options
  autoSlide: 5000,
  loop: true
});

Cette option peut être utile par exemple pour une utilisation dans la recherche, notamment si les participant-es doivent être exposé-es à des stimuli pour une période définie.

Si vous utilisez cette fonctionnalité dans un contexte de fruition autonome de la présentation, pensez à bien signaler l'auto-play aux utilisateurs.

Exporter en PDF

On peut exporter la présentation en PDF, se référer à la documentation officielle export pdf pour les différentes options.

Extensions

Il existe des nombreux plugin qui permettent d'ajouter des fonctionnalités. Certains plugin (i.e. ceux inclus dans le template proposé) sont directement développés par le créateur de la bibliothèque, d'autres sont développés par la communauté. Il faut donc faire attention à la fiabilité et compatibilité des plugins.

Audio Slideshow

Audio Slideshow est un plugin qui permet d'ajouter des narrations audio aux slides. Contrairement au même principe sur PowerPoint (voir Enregistrer un diaporama powerpoint), le résultat n'est pas une vidéo, mais la coordination entre les slides HTML5/CSS/JS et des fichiers audio. De ce fait, il y un épargne considérable en termes de poids des présentations. De plus, l'interactivité des slides est maintenues, car l'utilisateur peut continuer à bénéficier des contenus à son rythme si la narration automatique est mise en pause.

Conclusion

Cet article a proposé un aperçu du fonctionnement et des potentialités de la bibliothèque JavaScript Reveal.js. La possibilité de créer des présentations avec les technologies du web HTML5, CSS et JavaScript est une manière pour rendre les présentations indépendantes de technologies propriétaires, en faciliter la dissémination à travers le web, et pour les rendre plus interactives, notamment dans une perspective de fruition autonome.

Cet article générale est complété par des exemples plus spécifiques dans la page Créer des présentations interactives avec Reveal.js.

Ressources

Liens

Exemples