(reprise du message précédent)
Menu avec effet tiroir
Du html
Une càc de css
Une càs de javascript
Exemple en ligne
Edit : C'est réglé pour les [ i] j'avais pas lu le post-it
Modifié par ds-network (15 Jun 2006 - 14:42)
Menu avec effet tiroir
Du html
<dl class="menu">
<dt>Rubrique</dt>
<dd>
<ul>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
</ul>
</dd>
</dl>
<dl class="menu">
<dt>Rubrique</dt>
<dd>
<ul>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
<li><a href="#">Sous-rubrique</a></li>
</ul>
</dd>
</dl>
Une càc de css
body
{
font-family: Arial, Helvetica, sans-serif;
background: #EEE;
}
dl.menu, dl.menu dt, dl.menu dd, dl.menu dd ul, dl.menu dd ul li
{
margin: 0px;
padding: 0px;
}
dl.menu
{
float: left;
width: 150px;
cursor: pointer;
}
dl.menu dt
{
background: #FFF;
font-size: 12px;
font-weight: bold;
color: #666;
}
dl.menu dd ul
{
border-right: 1px solid #CCC;
border-bottom: 1px solid #CCC;
border-left: 1px solid #CCC;
width: 140px;
margin: 0px auto;
list-style-type: none;
background: #EEE;
font-size: 11px;
}
dl.menu dd ul li:hover
{
background: #CCC;
}
dl.menu dd ul li a
{
text-decoration: none;
color: #666;
padding-left: 5px;
}
dl.menu dd ul li a:hover
{
color: #FFF;
padding-left: 10px;
}
Une càs de javascript
var drawerMenu = {
inc : 5,
elements : new Array,
timers : new Array,
construct : function()
{
var dls = document.getElementsByTagName('dl');
var n = 0;
for(var i = 0; i < dls.length; i++)
{
if(dls[ i].className == 'menu')
{
n++;
drawerMenu.timers[n] = 0;
dls[ i].onmouseover = drawerMenu.triggerShow;
dls[ i].onmouseout = drawerMenu.triggerHide;
dls[ i].targetElement = n;
for(var j = 0; j < dls[ i].childNodes.length; j++)
{
if(dls[ i].childNodes[j].nodeType == 1)
{
if(dls[ i].childNodes[j].tagName == 'DD')
{
dls[ i].childNodes[j].style.position = 'relative';
dls[ i].childNodes[j].style.overflow = 'hidden';
dls[ i].childNodes[j].style.height = '0px';
for(var k = 0; k < dls[ i].childNodes[j].childNodes.length; k++)
{
if(dls[ i].childNodes[j].childNodes[k].nodeType == 1)
{
if(dls[ i].childNodes[j].childNodes[k].tagName == 'UL')
{
drawerMenu.elements[n] = dls[ i].childNodes[j].childNodes[k];
dls[ i].childNodes[j].childNodes[k].style.position = 'absolute';
dls[ i].childNodes[j].childNodes[k].style.top = '-'+dls[ i].childNodes[j].childNodes[k].offsetHeight+'px';
}
}
}
}
}
}
}
}
},
triggerShow : function()
{
if(drawerMenu.timers[this.targetElement]) clearInterval(drawerMenu.timers[this.targetElement]);
drawerMenu.timers[this.targetElement] = setInterval('drawerMenu.show('+this.targetElement+')', 20);
},
triggerHide : function()
{
if(drawerMenu.timers[this.targetElement]) clearInterval(drawerMenu.timers[this.targetElement]);
drawerMenu.timers[this.targetElement] = setInterval('drawerMenu.hide('+this.targetElement+')', 20);
},
show : function(i)
{
var ul = drawerMenu.elements[ i];
var t = parseInt(ul.style.top);
var inx = Math.ceil(-t/drawerMenu.inc);
if(t+inx < 0)
{
ul.style.top = (t+inx) +'px';
ul.parentNode.style.height = (ul.offsetHeight+t+inx) + 'px';
}
else if(t < 0)
{
ul.style.top = '0px';
ul.parentNode.style.height = ul.offsetHeight + 'px';
}
else
{
clearInterval(drawerMenu.timers[ i]);
drawerMenu.timers[ i] = 0;
}
},
hide : function(i)
{
var ul = drawerMenu.elements[ i];
var t = parseInt(ul.style.top);
var inx = Math.ceil(t/drawerMenu.inc);
if(inx == 0) inx = -1;
if(t+inx > -ul.offsetHeight)
{
ul.style.top = (t+inx) +'px';
ul.parentNode.style.height = (ul.offsetHeight+t+inx) + 'px';
}
else if(t > -ul.offsetHeight)
{
ul.style.top = -ul.offsetHeight + 'px';
ul.parentNode.style.height = '0px';
}
else
{
clearInterval(drawerMenu.timers[ i]);
drawerMenu.timers[ i] = 0;
}
}
}
window.onload = drawerMenu.construct;
Exemple en ligne
Edit : C'est réglé pour les [ i] j'avais pas lu le post-it
Modifié par ds-network (15 Jun 2006 - 14:42)