par
AB » 15 oct. 2008, 03:25
D'ailleurs y'a un autre souci, c'est qu'avec IE on a des infobulles automatiques pour indiquer le sens du texte survolé.
Par exemple au survol des liens "test", l'infobulle IE indique "test : test;examen; tester, mettre à l'épreuve" et cette infobulle se superpose à celle créée en javascript qui se retrouve donc masquée en partie ou en totalité ...
Voici ton code que j'ai remanié pour éviter ce problème sur la première ligne de test (je n'ai pas touché aux autres pour comparaison). J'ai utilisé une balise acronym que je cache en css. Cela fonctionne et fait un code valide par contre au niveau de la sémantique, les puristes auraient sûrement des choses à redire... Mais je vois pas comment faire autrement (faire simplement title="" ne fonctionne pas).
- J'ai supprimé aussi quelques lignes de ton code (inutiles)
- et mis pour l'exemple une largeur maximale pour l'infobulle. C'est modifiable ou supprimable dans le css #tooltext, et pour IE6 et inférieur dans les commentaires conditionnels <!--[if lte IE 6]>...
Concernant le fait que les infobulles sont entièrement cachées si on se trouve en bas de page... bah suffit de remonter leur positionnement et on est certain de voir au moins le début donc le visiteur n'aura qu'à scroller un peu pour voir la suite si besoin...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Info bulle</title>
<!--[if lte IE 6]>
<style type="text/css">
#tooltext {
width:expression(document.getElementById("tooltext").offsetWidth >= 250? "250px": "auto" );
}
</style>
<![endif]-->
<script type="text/javascript">
<!--
document.onmousemove = mouseover;
function mouseover(e)
{
var decal_x = 15;
var decal_y = -25;
if(!e)
{
e = window.event;
}
if(!e || (typeof(e.pageX) != 'number' && typeof(e.clientX) != 'number'))
{
return;
}
if(typeof(e.pageX) == 'number')
{
var x = e.pageX;
var y = e.pageY;
}
else
{
var x = e.clientX;
var y = e.clientY;
if(!((window.navigator.userAgent.indexOf('Opera')+1) || (window.ScriptEngine&&ScriptEngine().indexOf('InScript')+1) || window.navigator.vendor=='KDE'))
{
if(document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft))
{
x += document.documentElement.scrollLeft;
y += document.documentElement.scrollTop;
}
else if(document.body && (document.body.scrollTop || document.body.scrollLeft))
{
x += document.body.scrollLeft;
y += document.body.scrollTop;
}
}
}
var xcord = x + decal_x;
var ycord = y + decal_y;
document.getElementById("tooltip").style.left = xcord + "px";
document.getElementById("tooltip").style.top = ycord + "px";
}
function setOpacity(obj, opacity)
{
// IE/Win
obj.style.filter = "alpha(opacity:"+opacity+")";
// Safari<1.2, Konqueror
obj.style.KHTMLOpacity = opacity/100;
// Older Mozilla and Firefox
obj.style.MozOpacity = opacity/100;
// Safari 1.2, newer Firefox and Mozilla, CSS3
obj.style.opacity = opacity/100;
}
function fadeIn(objId, opacity)
{
if (document.getElementById)
{
obj = document.getElementById(objId);
if (opacity <= 100)
{
setOpacity(obj, opacity);
opacity += 3;
timer = window.setTimeout("fadeIn('"+objId+"',"+opacity+")", 18);
document.getElementById(objId).style.display = 'block';
}
}
}
function tooltipShow(title, message)
{
document.getElementById("tooltitle").innerHTML = title;
document.getElementById("tooltext").innerHTML = message;
fadeIn('tooltip', 0);
}
function tooltipHide()
{
document.getElementById("tooltip").style.display = 'none';
clearTimeout(timer);
}
-->
</script>
<style type="text/css">
#tooltip {
position:absolute;
z-index:1000;
border:1px solid #444;
padding:5px;
background-color:#000;
-moz-border-radius:3px;
-webkit-border-radius:3px;
line-height:16px;
}
#tooltitle{
margin: 0;
font-size:11px;
font-weight:bold;
font-family:Verdana, Arial, Helvetica, sans-serif;
color:#FFF;
border-bottom: #F7F7F7 dotted 1px;
padding-bottom:2px;
}
#tooltext{
margin: 0;
font-size:11px;
font-family:Verdana, Arial, Helvetica, sans-serif;
color:#FFF;
max-width:250px;
}
.cacheinfoIE acronym{
display:none;
}
</style>
</head>
<body>
<div id="tooltip" style="display:none;">
<div id="tooltitle"></div>
<div id="tooltext"></div>
</div>
<p>
<a class="cacheinfoIE" href="" onmouseover="tooltipShow('test 1', 'message 1 de la première info-bulle et un peu de texte pour tester sur plusieurs lignes la hauteur de l\'infobulle')" onmouseout="tooltipHide();"><acronym>invisible</acronym>test</a><br /><br />
<a title="" href="" onmouseover="tooltipShow('test 2', 'message 2')" onmouseout="tooltipHide();">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 3', 'message 3')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 4', 'message 4')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 5', 'message 5')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 6', 'message 6')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 7', 'message 7')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 8', 'message 8')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 9', 'message 9')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 10', 'message 10')" onmouseout="tooltipHide()">test</a><br /><br />
</p>
</body>
</html>
D'ailleurs y'a un autre souci, c'est qu'avec IE on a des infobulles automatiques pour indiquer le sens du texte survolé.
Par exemple au survol des liens "test", l'infobulle IE indique "test : test;examen; tester, mettre à l'épreuve" et cette infobulle se superpose à celle créée en javascript qui se retrouve donc masquée en partie ou en totalité ...
Voici ton code que j'ai remanié pour éviter ce problème sur la première ligne de test (je n'ai pas touché aux autres pour comparaison). J'ai utilisé une balise acronym que je cache en css. Cela fonctionne et fait un code valide par contre au niveau de la sémantique, les puristes auraient sûrement des choses à redire... Mais je vois pas comment faire autrement (faire simplement title="" ne fonctionne pas).
- J'ai supprimé aussi quelques lignes de ton code (inutiles)
- et mis pour l'exemple une largeur maximale pour l'infobulle. C'est modifiable ou supprimable dans le css #tooltext, et pour IE6 et inférieur dans les commentaires conditionnels <!--[if lte IE 6]>...
Concernant le fait que les infobulles sont entièrement cachées si on se trouve en bas de page... bah suffit de remonter leur positionnement et on est certain de voir au moins le début donc le visiteur n'aura qu'à scroller un peu pour voir la suite si besoin...
[php]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Info bulle</title>
<!--[if lte IE 6]>
<style type="text/css">
#tooltext {
width:expression(document.getElementById("tooltext").offsetWidth >= 250? "250px": "auto" );
}
</style>
<![endif]-->
<script type="text/javascript">
<!--
document.onmousemove = mouseover;
function mouseover(e)
{
var decal_x = 15;
var decal_y = -25;
if(!e)
{
e = window.event;
}
if(!e || (typeof(e.pageX) != 'number' && typeof(e.clientX) != 'number'))
{
return;
}
if(typeof(e.pageX) == 'number')
{
var x = e.pageX;
var y = e.pageY;
}
else
{
var x = e.clientX;
var y = e.clientY;
if(!((window.navigator.userAgent.indexOf('Opera')+1) || (window.ScriptEngine&&ScriptEngine().indexOf('InScript')+1) || window.navigator.vendor=='KDE'))
{
if(document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft))
{
x += document.documentElement.scrollLeft;
y += document.documentElement.scrollTop;
}
else if(document.body && (document.body.scrollTop || document.body.scrollLeft))
{
x += document.body.scrollLeft;
y += document.body.scrollTop;
}
}
}
var xcord = x + decal_x;
var ycord = y + decal_y;
document.getElementById("tooltip").style.left = xcord + "px";
document.getElementById("tooltip").style.top = ycord + "px";
}
function setOpacity(obj, opacity)
{
// IE/Win
obj.style.filter = "alpha(opacity:"+opacity+")";
// Safari<1.2, Konqueror
obj.style.KHTMLOpacity = opacity/100;
// Older Mozilla and Firefox
obj.style.MozOpacity = opacity/100;
// Safari 1.2, newer Firefox and Mozilla, CSS3
obj.style.opacity = opacity/100;
}
function fadeIn(objId, opacity)
{
if (document.getElementById)
{
obj = document.getElementById(objId);
if (opacity <= 100)
{
setOpacity(obj, opacity);
opacity += 3;
timer = window.setTimeout("fadeIn('"+objId+"',"+opacity+")", 18);
document.getElementById(objId).style.display = 'block';
}
}
}
function tooltipShow(title, message)
{
document.getElementById("tooltitle").innerHTML = title;
document.getElementById("tooltext").innerHTML = message;
fadeIn('tooltip', 0);
}
function tooltipHide()
{
document.getElementById("tooltip").style.display = 'none';
clearTimeout(timer);
}
-->
</script>
<style type="text/css">
#tooltip {
position:absolute;
z-index:1000;
border:1px solid #444;
padding:5px;
background-color:#000;
-moz-border-radius:3px;
-webkit-border-radius:3px;
line-height:16px;
}
#tooltitle{
margin: 0;
font-size:11px;
font-weight:bold;
font-family:Verdana, Arial, Helvetica, sans-serif;
color:#FFF;
border-bottom: #F7F7F7 dotted 1px;
padding-bottom:2px;
}
#tooltext{
margin: 0;
font-size:11px;
font-family:Verdana, Arial, Helvetica, sans-serif;
color:#FFF;
max-width:250px;
}
.cacheinfoIE acronym{
display:none;
}
</style>
</head>
<body>
<div id="tooltip" style="display:none;">
<div id="tooltitle"></div>
<div id="tooltext"></div>
</div>
<p>
<a class="cacheinfoIE" href="" onmouseover="tooltipShow('test 1', 'message 1 de la première info-bulle et un peu de texte pour tester sur plusieurs lignes la hauteur de l\'infobulle')" onmouseout="tooltipHide();"><acronym>invisible</acronym>test</a><br /><br />
<a title="" href="" onmouseover="tooltipShow('test 2', 'message 2')" onmouseout="tooltipHide();">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 3', 'message 3')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 4', 'message 4')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 5', 'message 5')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 6', 'message 6')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 7', 'message 7')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 8', 'message 8')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 9', 'message 9')" onmouseout="tooltipHide()">test</a><br /><br />
<a href="" onmouseover="tooltipShow('test 10', 'message 10')" onmouseout="tooltipHide()">test</a><br /><br />
</p>
</body>
</html>[/php]