Exemple:
<a href="example.com" title="My site"> Link </a>
Comment changer la présentation de l'attribut "title" dans le navigateur?. Par défaut, il a juste un fond jaune et une petite police. Je voudrais l'agrandir et changer la couleur de fond.
Existe-t-il un moyen CSS de styliser l'attribut title?
Réponses:
Voici un exemple de la façon de procéder:
la source
Il semble qu'il existe en fait une solution CSS pure, ne nécessitant que l'
attr
expression css , le contenu généré et les sélecteurs d'attribut (ce qui suggère que cela fonctionne aussi loin que IE8):Source: https://jsfiddle.net/z42r2vv0/2/
mise à jour avec entrée de @ViROscar: veuillez noter qu'il n'est pas nécessaire d'utiliser un attribut spécifique, bien que j'aie utilisé l'attribut "title" dans l'exemple ci-dessus; en fait, ma recommandation serait d'utiliser l'attribut "alt", car il est possible que le contenu soit accessible aux utilisateurs ne pouvant pas bénéficier de CSS.
mettre à jour à nouveau Je ne change pas le code parce que l'attribut "title" signifie essentiellement l'attribut "tooltip", et ce n'est probablement pas une bonne idée de cacher un texte important dans un champ accessible uniquement en survol, mais si vous êtes intéressé à rendre ce texte accessible, l'attribut "aria-label" semble être le meilleur endroit pour cela: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute
la source
stacking context
. Tous les éléments avecposition
autre questatic
crée un nouveau contexte d'empilement et des info-bulles CSS pures ne sont pas visibles à l'extérieur ni ne peuvent aller au-delà d'un tel contexte d'empilement , donc si vous avez un élément serré avec une positionrelative
, votre info-bulle CSS ne sera pas visible. La seule solution consiste à attacher une info-bulle au contexte d'empilement supérieur (par exemple<body>
) qui nécessite JavaScript.Vous ne pouvez pas styliser un
title
attribut réelLa façon dont le texte de l'
title
attribut est affiché est définie par le navigateur et varie d'un navigateur à l'autre. Il n'est pas possible pour une page Web d'appliquer un style à l'info-bulle que le navigateur affiche en fonction de l'title
attribut.Cependant, vous pouvez créer quelque chose de très similaire en utilisant d'autres attributs.
Vous pouvez créer une pseudo-info-bulle avec CSS et un attribut personnalisé (par exemple
data-title
)Pour cela, j'utiliserais un
data-title
attribut.data-*
Les attributs sont une méthode pour stocker des données personnalisées dans des éléments DOM / HTML. Il existe plusieurs façons d'y accéder . Surtout, ils peuvent être sélectionnés par CSS.Étant donné que vous pouvez utiliser CSS pour sélectionner des éléments avec des
data-title
attributs, vous pouvez ensuite utiliser CSS pour créer:after
(ou:before
)content
qui contient la valeur de l'attribut à l'aideattr()
.Exemples d'infobulles stylisées
Plus grand et avec une couleur de fond différente (à la demande de la question):
Style plus élaboré (adapté de cet article de blog ):
Problèmes connus
Contrairement à une véritable
title
info-bulle, l'info-bulle produite par le CSS ci-dessus n'est pas nécessairement garantie d'être visible sur la page (c'est-à-dire qu'elle peut être en dehors de la zone visible). En revanche, il est garanti d'être dans la fenêtre courante, ce qui n'est pas le cas pour une info-bulle réelle.En outre, la pseudo-info-bulle est positionnée par rapport à l'élément qui a la pseudo-info-bulle plutôt que par rapport à l'emplacement de la souris sur cet élément. Vous souhaiterez peut-être affiner l'emplacement d'affichage de la pseudo-info-bulle. Le faire apparaître dans un emplacement connu par rapport à l'élément peut être un avantage ou un inconvénient, selon la situation.
Vous ne pouvez pas utiliser
:before
ou:after
sur des éléments qui ne sont pas des conteneursIl y a une bonne explication dans cette réponse à "Puis-je utiliser un pseudo-élément: avant ou: après sur un champ de saisie?"
En effet, cela signifie que vous ne pouvez pas utiliser cette méthode directement sur des éléments tels que
<input type="text"/>
,<textarea/>
,<img>
, etc. La solution facile est d'envelopper l'élément qui n'est pas un récipient dans un<span>
ou<div>
et ont la pseudo-infobulle sur le récipient.Exemples d'utilisation d'une pseudo-info-bulle sur un
<span>
habillage d'un élément non conteneur:D'après le code du blog lié ci-dessus (que j'ai vu pour la première fois ici dans une réponse qui l'a plagié), il m'a semblé évident d'utiliser un
data-*
attribut au lieu de l'title
attribut. Cela a également été suggéré dans un commentaire de snostorm sur cette réponse (maintenant supprimée).la source
input[type='text']
outextarea
, mais je ne sais pas pourquoi. Quelqu'un peut-il expliquer?:before
et:after
pseudo-éléments ne fonctionnent pas sur des éléments qui ne sont pas des conteneurs. Il y a une bonne explication dans la réponse: Puis-je utiliser un pseudo-élément: avant ou: après sur un champ de saisie? Pour utiliser cette méthode, il est probablement plus simple d'envelopper les éléments qui ne sont pas des conteneurs dans un<span>
ou<div>
sur lesquels vous placez l'data-title
attribut. Vous voudrez probablement aussi leur donnerdisplay: inline-block;
, car cela leur donnera la même taille que le<input>
ou<textarea>
. J'ai mis à jour cette réponse avec un exemple.CSS ne peut pas changer l'apparence de l'infobulle. Il dépend du navigateur / du système d'exploitation. Si vous voulez quelque chose de différent, vous devrez utiliser Javascript pour générer du balisage lorsque vous survolez l'élément au lieu de l'info-bulle par défaut.
la source
Je pensais publier ma solution JavaScript de 20 lignes ici. Ce n'est pas parfait, mais peut être utile pour certains selon ce dont vous avez besoin dans vos info-bulles.
Quand l'utiliser
TITLE
attribut défini (cela inclut les éléments ajoutés dynamiquement au document à l'avenir)TITLE
attribut, sémantiquement clair)Quand NE PAS utiliser
Le code
Collez-le n'importe où, cela devrait fonctionner même lorsque vous exécutez ce code avant que le DOM soit prêt (il ne montrera simplement pas vos info-bulles tant que DOM n'est pas prêt).
Personnaliser
Vous pouvez modifier les
var
déclarations sur la deuxième ligne pour la personnaliser un peu.Style
Vous pouvez désormais styliser vos info-bulles à l'aide du CSS suivant:
la source
J'ai trouvé la réponse ici: http://www.webdesignerdepot.com/2012/11/how-to-create-a-simple-css3-tooltip/
mon propre code va comme ceci, j'ai changé le nom de l'attribut, si vous conservez le nom du titre de l'attribut, vous finissez par avoir deux fenêtres contextuelles pour le même texte, une autre modification est que mon texte en vol stationnaire s'affiche sous le texte exposé.
la source
Un jsfiddle pour le modèle d'infobulle personnalisé est ici
Il est basé sur le CSS Positioning et les sélecteurs de classes pseduo
Vérifiez les documents MDN pour la prise en charge multi-navigateur des pseudo-classes
la source
L'infobulle native ne peut pas être stylisée.
Cela étant dit, vous pouvez utiliser une bibliothèque qui afficherait des styles de couches flottantes lorsque l'élément est survolé (au lieu des info-bulles natives, et les supprimer) nécessitant peu ou pas de modifications de code ...
la source
title
attribut. Donc, si vous configurez votre propre implémentation d'infobulles, il est préférable d'utiliser un autre attribut (disonsdata-tip
) au lieu detitle
.Vous ne pouvez pas styliser l'info-bulle du navigateur par défaut. Mais vous pouvez utiliser javascript pour créer vos propres info-bulles HTML personnalisées.
la source
Cela fonctionne également avec n'importe quel attribut que vous souhaitez ajouter, par exemple:
HTML
CSS
Voyez-le fonctionner à: http://jsfiddle.net/vpYWE/1/
la source
anything
n'est pas un attribut HTML valide. Pour les attributs personnalisés, utilisez desdata-
attributs.