Voici la façon dont est faite la page
http://osirisnet.net/carte/carte_01.htm?fr (si on remplace "?fr" par "?en" on a la même page en anglais)
Tout est conçu pour être "responsive", c'est à dire s'adapter à la taille de l'écran.
1) La carte:
Il s'agit d'une image, dont la taille est contrôlée par
#mapBackground {width: 100%;border-radius: 1em;}
Pour pouvoir calculer la position des points sur la carte, j'ai défini en JavaScript les coordonnées du coin supérieur gauche et du point inférieur droit:
var Lat0 = 31.8386, Lng0 = 27.84, Lat1 = 21.7086, Lng1 = 34.72;
2) les "points sensibles" sur la carte:
Il s'agit de structures dont le modèle est:
<div class="mapPoint" id="_Tanis" style="top:8.5%;left:55.96%;" onclick="togglePoint('Tanis')">
<img src="bullet_red.png" alt="">
<div class="E">Tanis
<div class="summary S shortText" lang="fr">
<h2>Tanis</h2>
<p data-link="Tanis_">
<a href="javascript:displayText('Tanis_')">Nécropole royale</a></p>
</div>
</div>
</div>
Cette structure relativement complexe est générée par JavaScript: chaque "point sensible" est défini comme un objet JavaScript, les valeurs de la propriété "style" sont calculées en fonction des coordonnées géographiques du point: on exprime la distance aux bords en pourcentage de la largeur, ce qui assure l'ajustement de la position en fonction de la largeur de l'écran.
Si on clique sur le point, ça appelle la fonction JavaScript togglePoint() qui ajoute la calss "active" dans la balise <div>, ce qui devient
<<div class="mapPoint active"...>
Dans ce cas, la balise <div class="summary ...> devient visible, ce qui affiche son contenu, lequel contient un lien qui appelle la fonction displayText. Certaines <div> comportent plusieurs liens, ce qui correspond à ton menu.
Tout cela est un peu complexe, je t'invite à afficher le contenu de la page et des fichiers carte.js et carte.css et à me poser des questions s'il y a quelque chose d'obscure
(ce qui est dans doute le cas!)
Remarque: l'utilisation d'une balise <a href="javascript:..."> est considérée comme "à proscrire", il est considéré comme préférable de mettre un onclick="displayText(...)" dans la balise <p>, ce que je vais sans doute faire dans une future version