La présence en ligne est aujourd'hui primordiale, et pour tous les secteurs, même celui de l'immobilier !
Le besoin
Dans le cas du bâtiment de l'éclaireur, il était nécessaire de rendre consultable leur brochure papier sur leur site. Seulement, l'insertion simple du PDF n'était pas suffisante, et ils souhaitaient une véritable brochure animée, avec :
- Animation des pages tournées, comme lorsque l'on consulte un livre physique
- Animation d'arrivée des éléments, pour ajouter un peu de douceur
- Un design responsive pour être visible aussi bien sur téléphone que sur ordinateur
Pour toutes ces raisons, il était donc nécessaire de construire la brochure en HTML / CSS.
La structure HTML / CSS avec Webflow
L'avantage de Webflow, est qu'il permet de construire grâce à une interface WYSIWYG 1 du code HTML et CSS.
Ce qui signifie qu'au final, si vous aviez construit votre site en "codant pour de vrai" (notez bien la présence de guillemets 🙈 ) vous auriez au final produit plus ou moins les mêmes lignes de code, avec le même "langage de programmation" (pour mes amis les développeurs, encore une fois, notez les guillemets 🙊)
Pourquoi c'est un avantage ? Parce qu'on peut injecter autant de custom code qu'on le souhaite, qu'il soit HTML, CSS ou JS. Ainsi, Webflow n'a plus vraiment de limites, car ce qui n'est pas encore faisable nativement peut-être fait en intégrant les lignes de code dans la page.
Dans le cas appliqué de la brochure du site de "L'éclaireur", nous avons donc développé dans un premier temps une structure statique grâce à Webflow, en intégrant quelques lignes de code CSS non possibles nativement sur Webflow pour la rendre totalement responsive.
Exemple avec le code ci dessous qui s'assure que les pages de la brochure aient toujours le bon format, soit un format de 2/3 en desktop, peu importe le format de l'écran utilisé :
1 :root {
2 --ratio : 2/3;
3 --brochure-padding: var(--adaptive-sizes--32px);
4 }
5
6 /* Si ecran plus haut que large - On passe en relatif à la largeur de l'écran et non la hauteur */
7 @media screen and (orientation: portrait) and (min-width: 992px) {
8 .brochure_aspect {
9 max-height: calc(100vw - (var(--brochure-paddings) * 2));
10 max-width: calc((100vw - (var(--brochure-paddings) * 2)) * 2 * var(--ratio));
11 }
12 .brochure_page {
13 font-size: 0.75vw;
14 max-height: calc(100vw - (var(--brochure-paddings) * 2));
15 max-width: calc((100vw - (var(--brochure-paddings) * 2)) * var(--ratio));
16 }
17 }
Il est possible de voir le rendu et de le tester directement dans le designer Webflow, ce qui rend la mise en place de ces codes et HTML CSS encore plus simple.
1 : WYSIWYG = What You See Is What You Get, est une manière de construire des interfaces qui s'est beaucoup démocratisée avec l'avènement du no-code. Elle permet d'accélérer la vitesse de développement pour ceux qui sont du domaine, tout en rendant le développement plus simple pour ceux qui en on besoin sans être des experts.
La force des variables CSS
Vous remarquerez peut-être l'usage de variables CSS et leur puissance est sans limite.
Là où avant, lors de l'ajout de code custom dans une page il pouvait devenir compliqué de le modifier pour une personne moins technique, ces dernières ont vraiment amené une facilité de modification pour tous.
Ici, il serait possible sans avoir à venir modifier directement le code de changer l'espace autour de la brochure, ainsi que le ratio de cette dernière.
NB : à noter que pour que l'exemple soit complet, les variables sont ici définies dans le code, mais elles pourraient être définies depuis l'onglet "Variables" du projet Webflow.
Prenez garde à la responsivité
Mais en soit, en construisant avec Webflow, il est assez aisé de se rendre compte de l'apparence de notre site sur toutes les tailles d'écrans.
L'adaptation du ratio se fait simplement grâce à une dérivé du code présenté pour les formats ordinateurs.
Le plus gros challenge ici sera de garder la même structure au sein de chaque page, car vous n'aurez en général pas beaucoup de marge de manoeuvre si vous souhaitez garder chaque page similaire à la version papier sur le téléphone.
Je vous conseillerai ici d'opter pour des unités relatives à leur parent, tel que le em ou le cqw afin de pouvoir jouer en fonction des pages sur la taille de la police par rapport à son parent, ce dernier pouvant s'adapter à la largeur ou hauteur en fonction du besoin de chaque page.
L'animation "livre" avec Turn.JS
Une fois la structure HTML créée avec Webflow, nous pouvons donc interagir avec via du Javascript.
Quand il s'agit de créer des animations de type livre, la meilleure librairie disponible à ce jour est turn.js selon moi.
Très simple à mettre en place, elle propose un panel de fonction pour avoir des intégrations clavier et personnaliser les effets.
Il suffit d'ajouter les bons sélecteurs sur votre page et le tour est joue !
Choisir ses sélecteurs JS (ou jQuery)
Que ce soit pour du JavaScript, ou son framework jQuery, je vous conseille d'utiliser la fonctionnalité des custom attributs de Webflow plutôt que de prendre des classes ou mettre des ids.
Ces deux derniers sont trop souvent modifiés, soit par Webflow lui-même lors de copier coller intempestif, soit par des personnes faisant des mises à jour dans le Webflow. Les attributs ont l'avantage de ne pas être utilisés pour le design lui-même et sont donc moins souvent modifiés.
Vous pouvez voir notre article sur comment ajouter et utiliser les attributs sur Weflow pour plus de détails 😉
Une fois vos attributs placés, et votre petit code JS intégré, votre animation de brochure est en place.
Et la responsivité ?
Turn.js s'occupe lui même de passer de deux pages à une quand la taille l'écran le demande, donc pas besoin de vous en préoccuper pour le coup !
Ajouter des contrôle clavier
Si vous souhaitez que vos pages puissent être tournées via le clavier, vous pouvez simplement ajouter le code suivant dans votre page (après le parametrage de turn.js)
Dans l'exemple ci-dessous, il s'agit des touches flèche gauche et droite, pour faire respectivement précédent et suivant :
1var Webflow = Webflow || [];
2 Webflow.push(function () {
3 loadApp()
4
5 document.addEventListener("keydown", function (event) {
6 if (event.key === "ArrowRight") {
7 flipbook.turn("next");
8 } else if (event.key === "ArrowLeft") {
9 flipbook.turn("previous");
10 }
11 });
12
13 document.addEventListener('click', function (e) {
14 if (e.target.matches('[cd-custom-next="trigger"]')) {
15 flipbook.turn("next");
16 } else if (e.target.matches('[cd-custom-previous="trigger"]')) {
17 flipbook.turn("previous");
18 }
19 });
Les animations d'arrivé des éléments avec jQuery et JS
Place maintenant à la dernière étape : les animations d'arrivé.
Définition des animations
Vous avez la possibilité de définir différentes animations en fonction des éléments. Par exemple, nous avons fait une animation "slide from left" pour les textes, mais une animation de "zoom out" pour les images :
1 const animationOneSelector =
2 'p, h1, h2, h3, h4, h5, h6';
3 const animationTwoSelector =
4 'img, svg';
5
6
7flipbook.bind("turning", function (event, page, view) {
8 flipbook.find(animationOneSelector).stop().css({
9 opacity: 0,
10 position: 'relative',
11 left: '-10px'
12 });
13 flipbook.find(animationTwoSelector).stop().css({
14 transform: 'scale(1.2)',
15 opacity: 0
16 });;
Les sélecteurs pourraient ici encore être des attributs si on souhaite pouvoir contrôler avec plus de détails l'animation de chaque élément, ou avec des sélecteurs globaux, comme dans l'exemple, pour quelque de très uniforme.
Ajouter un délai entre l'animation de chaque élément
Pour une effet encore plus sympa, nous avons décidé d'ajouter un petit délai entre chaque élément, pour avoir quelque chose de vraiment progressif et smooth.