Comment ça marche
Pour commencer
En clair, le script entoure chaque class="js-simple-tooltip"
avec un span class="<votre-préfixe-class>-container"
et ajoute le contenu dans un conteneur caché juste après. Dès que le focus clavier ou la souris est sur l’élément avec class="js-simple-tooltip"
, l’infobulle est affichée.
Vous pouvez l’utiliser sur l’élément que vous voulez (input
, button
, a
…).
Ensuite un peu de stylage
Ensuite, il va générer quelques classes pour vous, pour vous permettre de styler vos infobulles comme vous le souhaitez.
ARIA arrive ensuite
Grâce aux attributs aria-describedby
et id
s générés à la volée, l’information ne se perd jamais.
Et JavaScript fait le reste
Quelques listeners pour les interactions clavier et souris sont ajoutés, quand vous en activez un, le script va mettre à jour les attributs et gérer le clavier, vous pourrez le fermer en utilisant la touche Esc.
Comment l’utiliser
Télécharger le script
Vous pouvez utilisez la commande npm : npm i van11y-accessible-simple-tooltip-aria
.
Vous pouvez aussi utiliser Bower : bower install van11y-accessible-simple-tooltip-aria
.
Attributs
Utilisez l’attribut data-simpletooltip-text
ou data-simpletooltip-content-id
sur un élément pour activer l’infobulle.
- Mettez simplement
class="js-simpletooltip"
sur un bouton pour activer le script.
- Attribut
data-simpletooltip-prefix-class
(non obligatoire) : le préfixes pour toutes les styles/classes de l’infobulle (utile pour créer différents styles).
- Attribut
data-simpletooltip-text
: le texte de l’infobulle.
- Attribut
data-simpletooltip-content-id
: l’id
du contenu (caché) dans votre page qui sera affiché dans l’infobulle.
Exemples
Voici 3 exemples :
<button class="js-simple-tooltip" data-simpletooltip-text="Super, ça marche !">
Survolez-moi ou focusez-moi pour afficher l’infobulle
</button>
<button class="js-simple-tooltip" data-simpletooltip-content-id="tooltip-case_1">
Montrez-moi une autre infobulle
</button>
<div id="tooltip-case_1" class="hidden">
Super, vous pouvez prendre le contenu d’un bloc caché.
</div>
<button class="js-simple-tooltip" data-simpletooltip-prefix-class="minimalist-left"
data-simpletooltip-text="Oui, avec data-simpletooltip-prefix-class, si facile">
Et un autre ?
</button>
Ces exemples sont pris de la démo.
Le script est lancé au chargement de la page. Si vous avez besoin de l’exécuter sur du contenu généré en AJAX, vous pourrez utiliser par exemple sur <div id="newContent">la source du tooltip</div>
:
van11yAccessibleSimpleTooltipAria(document.getElementById('newContent')[, addListeners]);
addListeners
est un booléen facultatif (par défaut à true
) pour ajouter les listeners du tooltip (nécessaires une seule fois normalement).
Comment (bien) le styler
Ces exemples sont pris de la démo.
.simpletooltip[aria-hidden="true"],
.minimalist-simpletooltip[aria-hidden="true"],
.minimalist-left-simpletooltip[aria-hidden="true"] {
display: none;
}
.simpletooltip_container,
.minimalist-simpletooltip_container,
.minimalist-left-simpletooltip_container {
position: relative;
}
.simpletooltip,
.minimalist-simpletooltip,
.minimalist-left-simpletooltip {
position: absolute;
z-index: 666;
width: 10em;
border-radius: .5em;
background: rgba( 0, 0, 0, .9 );
color: #eee;
padding: .5em;
text-align: left;
line-height: 1.3;
}
.simpletooltip,
.minimalist-simpletooltip {
right: auto;
left: 100%;
margin-left: .5em;
}
.minimalist-left-simpletooltip {
right: 100%;
left: auto;
margin-right: .5em;
}
.simpletooltip::before,
.minimalist-simpletooltip::before,
.minimalist-left-simpletooltip::before {
content: '';
speak: none;
position: absolute;
z-index: 666;
width: 10px;
height: 10px;
pointer-events: none;
}
.simpletooltip::before,
.minimalist-simpletooltip::before {
top: .5em;
left: -10px;
margin-left: -10px;
border: 10px solid transparent;
border-right: 10px solid rgba( 0, 0, 0, .9 );
}
.minimalist-left-simpletooltip::before {
top: .5em;
right: -10px;
margin-right: -10px;
border: 10px solid transparent;
border-left: 10px solid rgba( 0, 0, 0, .9 )
}
@media (max-width: 44.375em) {
.simpletooltip,
.minimalist-simpletooltip,
.minimalist-left-simpletooltip {
top: 100%;
left: 50%;
right: 0;
margin: 0;
margin-top: .7em;
margin-left: -5em;
}
.simpletooltip::before,
.minimalist-simpletooltip::before,
.minimalist-left-simpletooltip::before {
top: -10px;
right: auto;
left: 50%;
margin-left: -5px;
margin-top: -10px;
border: 10px solid transparent;
border-bottom: 10px solid rgba( 0, 0, 0, .9 );
}
}
Configuration par défaut
const CONFIG = {
TOOLTIP_SIMPLE: 'js-simple-tooltip',
TOOLTIP_SIMPLE_CONTAINER: 'simpletooltip_container',
TOOLTIP_SIMPLE_RAW: 'simpletooltip',
TOOLTIP_SIMPLE_LABEL_ID: 'label_simpletooltip_',
TOOLTIP_DATA_TEXT: 'data-simpletooltip-text',
TOOLTIP_DATA_PREFIX_CLASS: 'data-simpletooltip-prefix-class',
TOOLTIP_DATA_CONTENT_ID: 'data-simpletooltip-content-id',
ATTR_DESCRIBEDBY: 'aria-describedby',
ATTR_HIDDEN: 'aria-hidden',
ATTR_ROLE: 'role',
ROLE: 'tooltip',
...config
};
Si vous avez besoin d’une autre configuration, il faut appeler le plugin ainsi :
var other_tooltip = van11yAccessibleSimpleTooltipAria({
TOOLTIP_SIMPLE: 'js-simple-tooltip2',
TOOLTIP_DATA_PREFIX_CLASS: 'data-simpletooltip-prefix-class2'
});
other_tooltip.attach();
Et tout fonctionnera comme vous le souhaitez.