« Pop in » modale
Les explications sur les scripts ne sont pas encore détaillées. Ça va arriver…
Petit point sémantique : nous allons parler ici de la construction d'un fenêtre pseudo « modale », donc d'une
popin et non pas d'une popup.
En effet, dans l'histoire ancienne du web, avant que les navigateurs n'utilisent un système d'onglets, il était
assez courant de créer des fenêtres modales, dites « popups ».
Ces nouvelles fenêtres venaient en superposition de la fenêtre courante et avaient pour particularité de bloquer
l'accès à cette dernière.
Bien évidemment, des petits malins, plus souvent appelés « régie publicitaire » ce sont dit que c'était quand
même un bon moyen d'obliger les internautes à afficher des contenus non demandés.
Donc, un jour, des gens encore plus malins se sont dit qu'ils allaient les proscrire. Pas totalement, mais en
empêchant que ces popups puissent s'ouvrir toutes seules mais, surtout qu'elles ne bloqueraient pas la fenêtre
ouvrante.
Et c'est là que sont arrivées les popins.
Donc, définition de ces petites choses :
- Popup :
- ou pop up, voulant dire « apparaître » est une nouvelle fenêtre système de navigateur. Comme ce n'est pas le sujet abordé ici, voir le fonctionnement sur MDN
- Popin :
- ou pop in, voulant dire « entrer brusquement » est un objet HTML inséré dans la page courante en superposition du contenu existant. Le plus souvent, un calque de fond vient bloquer l'accès à l'arrière plan.
Maintenant que nous savons de quoi nous parlons, c'est parti pour les explications.
UX/UI, accessibilité, etc…
L'interface des popins peut vite commencer à poser des petits soucis lors de leur intégration. Il va falloir prendre en compte différents paramêtres :
- Les dimensions d'affichage ;
- l'affichage du contenu ;
- le chargement du contenu ;
- les terminaux (mobile, tablette, ordinateur de bureau) ;
- les différents navigateurs, particulièrement Safari sous iOs ;
- et bien entendu, l'accessibilité ! Si si…
Au final, ça devient vite un casse-tête à faire manger son clavier à un intégrateur web. Sans sel.
Anatomie d'une popin

Jusque là, rien de bien extraordinaire… c'est une popin.
Mais dans une popin, on peut avoir du contenu, là c'est plutôt normal, mais aussi une barre de titre, un bouton
de fermeture, un pied de bloc fixé en bas pour conserver apparent le bouton d'action principale (type « ajouter
au panier » ou valider une action d'un formulaire) ou tout autre chose nécessaire à l'interface utilisateur.
Et tout ça doit rester visible dans la fenêtre du navigateur, quelle que soit sa hauteur et c'est le moment où
ça se corse un peu. Il est courant de voir des popins qui défilent avec la page, d'autres dont le contenu
déborde ou disparait dans les tréfonds et encore d'autres où on ne sait pas où cliquer pour valider l'action ou
la refermer. Et là, nous n'avons pas encore parlé d'accessibilité, notamment en naviguant au clavier.
Le principal problème reste cette fameuse hauteur qui est le plus souvent calculée en Javascript. Peu performant
et surtout pas adaptatif en cas de rotation du terminal (mobile ou tablette), sauf à recalculer en cas de
redimensionnement de la zone d'affichage (le viewport in english).
Les 4 modèles de popin
Les utilitaires Javascript et CSS
Il va donc falloir utiliser du Javascipt pour afficher et charger les contenus de la popin et un peu de CSS pour gérer l'affichage et la gestion de la hauteur de cette popin que nous allons gentiment nommer « mary-poppins ». Oui je sais… Mais comme le menu « burger » en mobile s'appelle « cote-de-boeuf », autant poursuivre sur la lignée !
Variables Javascript utilitaires
La librairie jQuery est nécessaire.
En premier lieu, il nous faut quelques variables. FOCUSABLE_SELECTORS permet de cibler les éléments
focusables, KEYCODES est une astuce de fainéant parce que j'ai la flemme de mémoriser les codes de
touches clavier et enfin une variable DOM à portée globale qui évite de demander à jQuery de rechercher
des éléments maintes fois utilisés sur un site. C'est aussi comme ça que jQuery est performant…
Enfin, une variable globalOpenTrigger qui va permettre de replacer le focus sur les éléments
déclencheurs d'ouverture de popin. Ce point est important pour la partie accessibilité.
Fonctions Javascript utilitaires
Utilitaire de fermeture des popins modales.
Utilitaire de « trap focus ». Ce script permet la navigation au clavier en boucle à l'intérieur de popin. Cette fonctionnalité est nécessaire pour l'accessibilité.
Utilitaire de gestion automatisée des z-index qui permet de ne pas avoir les gérer en CSS.
Utilitaire d'affichage du calque de fond (overlay).
La fonction d'affichage de la popin.
Détails à venir pour les options possibles (chargment asynchrone ou markup statique, largeur, etc.).
Feuilles de styles CSS associée
Les variables custom CSS utiles