Recettes en HTML5 / CSS3
Sommaire
1. Info-bulle paramétrable
1. Info-bulle paramétrable
Retour au manuel
<abbr title="Médecins sans Frontières">MSF</abbr> permet une définition ou une explicitation de sigle dans un post-it : survolez MSF
Ce post-il a plusieurs désavantages : il est toujours jaune pâle et selon les navigateurs, n'apparaît souvent qu'après une demi-seconde et peut disparaître après un moment.
L'utilisation de deux classes et l'attribut display permettent de fabriquer soi-même une info-bulle beaucoup plus souple. Exemple fonctionnel :
<!DOCTYPE HTML><html><head> <meta charset="utf-8"> <style> .mot { color:#00a; } .expl { display:none; } .mot:hover span.expl { display:inline; position:absolute; border:solid 1px #008; background:#8dd; margin: 1.3em 0 0 1px; padding:.3em; margin:.5em; text-align:center } </style> </head><body> <p> <span class="mot"> MSF<span class="expl"><b>M</b>édecins<br>sans<br><b>F</b>rontières</span> </span> </body></html>
Survolez MSFMédecins
sans
Frontières
Par défaut, le texte qui se trouve entre les balises <span class="expl"> et </span> n'est pas affiché (display:none). Mais lorsque «Expression» est survolé (.mot:hover), la balise-fille (désignée par .mot:hover span.expl) s'affiche (display:inline pour un affichage à droite).
background:#xyz permet de rendre le fond opaque (transparent par défaut)
margin permet un positionnement plus fin par rapport à l'expression survolée
padding aère le texte dans son cadre
Parmi les avantages, il est possible d'y intégrer un tableau, une image, ou des liens… permettant même un menu avec sous-menus sans javascript. Défini une fois pour toute dans un ficher CSS, cela prend peu de place dans le fichier HTML (un système de menu un peu plus), surtout si on sacrifie une balise comme je le fais pour ce site (voir www.jchr.be/jchr.css), voir section suivante :
Le désavantage est qu'en fin de ligne, la bulle peut partiellement s'afficher en dehors de la fenêtre du navigateur, alors que <abbr> gère l'espace où la bulle s'affiche.
Amélioration et simplification
- les smartphones et tablettes ne disposent (normalement) pas du survol, mais cela fonctionne en touchant brièvement le mot si on étoffe la ligne :
.mot:hover span.expl, .mot:active span.expl { … }
- on va supprimer la nécessité de préciser des class dans le code HTML en sacrifiant la balise <s>
<!DOCTYPE HTML><html><head> <meta charset="utf-8"> <style> s { text-decoration:none; } /* suppression du «barré» */ s { color:#00a } /* couleur du texte (toujours visible) à survoler */ s:hover, s:active { color:#eee; background:#336 } /* couleur du texte survolé */ s s { display:none; text-decoration:none } /* contenu caché, non souligné */ s:hover s, s:active s /* ce qui apparaît si le texte est survolé */ { display:inline; position:absolute; color:#eee; background:#336; text-align:center; padding:1px 6px 2px; margin: 1.3em 0 0 1px } </style> </head><body> <p> <s>MSF<s><b>M</b>édecins<br>sans<br><b>F</b>rontières</s></s> </body></html>
- l'encodage utf-8 a été défini
- les styles ont été placés entre <style> et </style>, mais il est évident qu'il convient de les définir dans un fichier CSS appelé dans le fichier HTML : une séquence <s>mot<s>explication</s></s> suffit alors pour toutes les pages qui incluent, entre <head> et </head>, la ligne
<link rel="stylesheet" href="nomdefichier.css" type="text/css">