J'ai pensé poster ici ma solution JavaScript en 20 lignes. Elle n'est pas parfaite, mais peut être utile pour certains en fonction de ce que vous attendez de vos infobulles.
Quand l'utiliser
- Styliser automatiquement l'infobulle de tous les éléments HTML avec un nom de domaine de type
TITLE
défini (ceci inclut les éléments ajoutés dynamiquement au document dans le futur)
- Aucun changement ou bidouillage Javascript/HTML n'est nécessaire pour chaque infobulle (seulement le bouton
TITLE
attribut, sémantiquement clair)
- Très léger (ajoute environ 300 octets gzippés et minifiés)
- Vous ne voulez qu'une info-bulle stylisée très basique.
Quand ne pas utiliser
- Nécessite jQuery, donc ne pas utiliser si vous n'utilisez pas jQuery
- Mauvaise prise en charge des éléments imbriqués qui ont tous deux des infobulles
- Vous avez besoin de plus d'une infobulle à l'écran en même temps.
- Il faut que l'info-bulle disparaisse après un certain temps.
Le code
// Use a closure to keep vars out of global scope
(function () {
var ID = "tooltip", CLS_ON = "tooltip_ON", FOLLOW = true,
DATA = "_tooltip", OFFSET_X = 20, OFFSET_Y = 10,
showAt = function (e) {
var ntop = e.pageY + OFFSET_Y, nleft = e.pageX + OFFSET_X;
$("#" + ID).html($(e.target).data(DATA)).css({
position: "absolute", top: ntop, left: nleft
}).show();
};
$(document).on("mouseenter", "*[title]", function (e) {
$(this).data(DATA, $(this).attr("title"));
$(this).removeAttr("title").addClass(CLS_ON);
$("<div id='" + ID + "' />").appendTo("body");
showAt(e);
});
$(document).on("mouseleave", "." + CLS_ON, function (e) {
$(this).attr("title", $(this).data(DATA)).removeClass(CLS_ON);
$("#" + ID).remove();
});
if (FOLLOW) { $(document).on("mousemove", "." + CLS_ON, showAt); }
}());
Collez-le n'importe où, il devrait fonctionner même si vous exécutez ce code avant que le DOM ne soit prêt (il n'affichera simplement pas vos infobulles avant que le DOM ne soit prêt).
Personnalisez
Vous pouvez modifier le var
sur la deuxième ligne pour la personnaliser un peu.
var ID = "tooltip"; // The ID of the styleable tooltip
var CLS_ON = "tooltip_ON"; // Does not matter, make it somewhat unique
var FOLLOW = true; // TRUE to enable mouse following, FALSE to have static tooltips
var DATA = "_tooltip"; // Does not matter, make it somewhat unique
var OFFSET_X = 20, OFFSET_Y = 10; // Tooltip's distance to the cursor
Style
Vous pouvez désormais donner un style à vos infobulles en utilisant le CSS suivant :
#tooltip {
background: #fff;
border: 1px solid red;
padding: 3px 10px;
}
0 votes
stackoverflow.com/questions/36275678/how-to-create-a-tooltip (en anglais)
0 votes
J'ai fait un petit script qui fait cela et qui s'appelle title-tooltips