problema menù espandibile

  • Creatore Discussione Creatore Discussione save83
  • Data di inizio Data di inizio

save83

Nuovo Utente
8 Mar 2012
1
0
0
Buon giorno a tutti, spero di postare nella sezione giusta.
Inanzitutto ringrazio anticipatamente chi mi aiuterà.
Ho un piccolo problema con un menù espandibile.
Questo funziona e si visualizza correttamente in firefox, ma se lo apro con safari e chrome succede che all'apertura del sotto menù con le voci secondarie, la voce primaria si sposta in alto, di poco, però non mi piace per niente.
Vi posto il codice pagina:

PHP:
if(!window.Node){
  var Node = {ELEMENT_NODE : 1, TEXT_NODE : 3};
}

function checkNode(node, filter){
  return (filter == null || node.nodeType == Node[filter] || node.nodeName.toUpperCase() == filter.toUpperCase());
}

function getChildren(node, filter){
  var result = new Array();
  var children = node.childNodes;
  for(var i = 0; i < children.length; i++){
    if(checkNode(children[i], filter)) result[result.length] = children[i];
  }
  return result;
}

function getChildrenByElement(node){
  return getChildren(node, "ELEMENT_NODE");
}

function getFirstChild(node, filter){
  var child;
  var children = node.childNodes;
  for(var i = 0; i < children.length; i++){
    child = children[i];
    if(checkNode(child, filter)) return child;
  }
  return null;
}

function getFirstChildByText(node){
  return getFirstChild(node, "TEXT_NODE");
}

function getNextSibling(node, filter){
  for(var sibling = node.nextSibling; sibling != null; sibling = sibling.nextSibling){
    if(checkNode(sibling, filter)) return sibling;
  }
  return null;
}
function getNextSiblingByElement(node){
        return getNextSibling(node, "ELEMENT_NODE");
}

// Menu Functions & Properties

var activeMenu = null;

function showMenu() {
  if(activeMenu){
    activeMenu.className = "";
    getNextSiblingByElement(activeMenu).style.display = "none";
  }
  if(this == activeMenu){
    activeMenu = null;
  } else {
    this.className = "active";
    getNextSiblingByElement(this).style.display = "block";
    activeMenu = this;
  }
  return false;
}

function initMenu(){
  var menus, menu, text, a, i;
  menus = getChildrenByElement(document.getElementById("menu"));
  for(i = 0; i < menus.length; i++){
    menu = menus[i];
    text = getFirstChildByText(menu);
    a = document.createElement("a");
    menu.replaceChild(a, text);
    a.appendChild(text);
    a.href = "#";
    a.onclick = showMenu;
    a.onfocus = function(){this.blur()};
  }
}

if(document.createElement) window.onload = initMenu;


HTML:
<style>
#menu_vert {
	font-family: Verdana, Geneva, sans-serif;
	font-size: 11px;
	text-decoration: none;
	width: 200px;
	position: absolute;
	top: 25px;
	left: 10px;
	background-color: #FFF;
}
ul#menu {
	width: 170px;
	list-style-type: none;
	margin: 0;
	padding: 0;
	background-color: #FFF;
}

ul#menu li, 
  ul#menu a {
	font-family: Verdana, Geneva, sans-serif;
	font-size: 10px;
	padding-right: 5px;
	color: #999;
	padding-left: 0px;
}
#menu_vert #menu .sottosettori ul {
	list-style-type: none;
	padding-left: 0px;
	margin-left: 0px;
	display: none;
	padding-top: 15px;
}
#menu_vert #menu .sottosettori ul li {
	line-height: normal;
}
ul#menu li {
	line-height: 38px;
}
#menu li:hover{
}

ul#menu a {
	text-decoration: none;
	outline: none;
	line-height: 25px;
}
#menu_vert #menu .sottosettori ul li a{
	color: #999;
	text-align: left;
	line-height: 25px;
	font-size: 10px;
	padding-left: 0px;
	font-family: Verdana, Geneva, sans-serif;
}
#menu li ul  li{
	padding-left: 0px;
}
#menu_vert #menu .sottosettori ul li a:hover {
	color: #666;
}
#menu li.sottosettori {
	background-image: url(../IMG/graffica.jpg);
	background-repeat: no-repeat;
	background-position: left top;
	text-align: left;
	padding-left: 32px;
}
#menu li.settori_web_foto {
	background-image: url(../IMG/settore_bianco.jpg);
	text-align: left;
	background-position: left top;
	background-repeat: no-repeat;
	padding-right: 15px;
	padding-left: 32px;
}
#menu li.sottosettori:hover {
	background-image: url(../IMG/graffica_r.jpg);
}
</style>
<script type="text/javascript" src="../js/expandingMenu.js"></script>
</head>
<body>

<div id="menu_vert">
<ul id="menu">
  <li class="sottosettori">GRAFICA
  <ul>
	<li><a href='immagine_coordinata.html'>immagine coordinata</a>
 	<li><a href='loghi.html'>loghi</a></li>
 	<li><a href='editoria.html'>editoria</a></li>
</ul>
  </li>
  <li class="sottosettori">STAMPA
    <ul>
    <li><a href='grande_formato.html'>digitale grande formato</a> </li>
	<li><a href='piccolo_formato.html'>digitale piccolo formato</a></li>
	<li><a href='litografia.html'>litografia</a></li>
	<li><a href='editoriale.html'>editoriale</a></li>
    </ul>
  </li>
  <li class="sottosettori">SOLUZIONI DIGITALI
  <ul>
	<li><a href='vetrofanie.html'>vetrofanie</a> </li>
	<li><a href='decorazioni_automezzi.html'>decorazioni automezzi</a></li>
	<li><a href='carwrapping.html'>carwrapping</a></li>
	<li><a href='serigrafia.html'>serigrafia</a></li>
    <li><a href='segnaletica_interna.html'>segnaletica interna</a></li>
    <li><a href='segnaletica_esterna.html'>segnaletica esterna</a></li>
    </ul>
    </li>
  <li class="sottosettori">INCISORIA
    <ul>
    <li><a href='targhe.html'>targhe</a>
 	<li><a href='timbri.html'>timbri</a></li>
    </ul>
  </li>
  <li class="sottosettori">OGGETTISTICA
    <ul>
    <li><a href='gadget.html'>gadget</a>
 	<li><a href='abbigliamento.html'>abbigliamento<br/>personalizzato </a></li>
    </ul>
  </li>
   <li class="settori_web_foto">FOTO</li>
   <li class="settori_web_foto">WEB</li>
</ul>

</div> 

</body>
</html>
 
Ciao,
ho provato con Chrome Firefox e addirittura con IE

ma il problema che dici di avere

la voce primaria si sposta in alto, di poco,

non l'ho riscontrato

Forse il problema non è nel codice che hai postato

cmq .. molto bello
 

Discussioni simili