Vous êtes dans la zone de contenu principal de la page

« Pop in » modale

Cet article est en cours de rédaction.
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

Utilisation des sources
Les sources de « « Pop in » modale » proposées par sont mises à disposition selon les termes de la licence Creative Commons CC BY-NC-SA 4.0 (licence Creative Commons CC BY-NC-SA 4.0 : Attribution - Pas d'utilsation commerciale - Partage dans les mêmes conditions).
Si vous souhaitez participer, même modestement, au maintien du site et pour son usage, vous pouvez cliquer sur le joli bouton…
Un petit sou avec