Webly: Menu Drop-down Css - Webly

Ir para

Regras para postagem

É permitido postar livremente respostas com comentários, testes e avaliações dos scripts. Postagens contendo dúvidas sobre o script, deverão ser postadas no fórum principal de Webstandards/Tableless/CSS/XML.

IMPORTANTE: Todos os tutoriais postados neste fórum irão automaticamente para o portal Webly. Contribua você também e faça parte da equipe de colaboradores que fazem a evolução da web. Obrigado.
  • (4 Páginas)
  • +
  • 1
  • 2
  • 3
  • Último »

Menu Drop-down Css Menus horizontal e vertical Avaliar tópico: ***-- 3 Votos

#1 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 04 setembro 2006 - 02:12

Atenção:
já fiz um sistema muito melhor de menus drop down. Sem necessitar de tag script pra definir o hover no IE. Dê uma olhada: Ultimate Micox Menu Drop Down CSS - Feito 05/03/2008



Menu Horizontal, sub-menu Horizontal
mais abaixo, estão postados outros tipos de menu

Testado em: Firefox 1.5 ; Internet Explorer 6.0 ; Opera 8.5.

Postado inicialmente no meu blog: Menu Horizontal, Sub-Menu Horizontal - Menus CSS 1



Mostrarei aqui um código pronto para fazer seu menu drop-down CSS horizontal, com sub-menus horizontais de até 3 níveis.
Não farei tutorial, não explicarei o funcionamento, nem como cheguei até este código.
Para isto existem inúmeros sites. Estude CSS se quiser entender ou poste uma pergunta no fórum iEvolution sobre CSS :)
Se quiser pular as etapas e já pegar o código pronto, vá até o final deste post.

Uma prévia do menu pode ser vista em um site que eu estou desenvolvendo: www.lgcom.com.br (este tem apenas 2 níveis, mas pode ser expandido para 3)


Imagem


Etapa 1 - O Código (X)HTML

1.1 - Faça um Menu qualquer baseado em listas UL.
1.2 - Coloque a classe "menu-hh" no seu UL ou em qualquer elemento pai dele que desejar.

Exemplo:

<div  class="menu-hh">
  <ul>
	<li><a  href="quem-somos.asp">Quem somos</a></li>
	<li><a  href="produtos.asp">Produtos</a>
			  <ul>
				<li><a  href="radios-portateis.asp">R&aacute;dios  port&aacute;teis</a>
						  <ul>
							<li><a  href="2.htm">Sub-menu 3</a></li>
							<li><a  href="2.htm">Sub-menu 3</a></li>
							<li><a  href="2.htm">Sub-menu 3</a></li>
							<li><a  href="2.htm">Sub-menu 3</a></li>
						  </ul>
				 </li>
				 <li><a href="radios-moveis.asp">R&aacute;dios  m&oacute;veis</a></li>
				 <li><a  href="repetidoras.asp">Repetidoras</a></li>
				 <li><a href="sistemas-hf.asp">Sistemas  HF</a></li>
				 <li><a  href="acessorios.asp">Acess&oacute;rios</a></li>
			  </ul>
	</li>
	<li><a  href="revendas.asp">Revendas</a>
			  <ul>
				 <li><a href="2.htm">Sub-menu 2</a>
						  <ul>
							<li><a  href="2.htm">Sub-menu 3</a></li>
							<li><a  href="2.htm">Sub-menu 3</a></li>
							<li><a  href="2.htm">Sub-menu 3</a></li>
						  </ul>
				 </li>
				 <li><a href="2.htm">Sub-menu  2</a></li>
				 <li><a href="2.htm">Sub-menu  2</a></li>
			  </ul>
	</li>
	<li><a  href="cotato.asp">Solicite uma  cota&ccedil;&atilde;o</a></li>
	<li><a  href="assistencia-tecnica.asp">Assist&ecirc;ncia  t&eacute;cnica</a></li>
	<li><a  href="locacao.asp">Loca&ccedil;&atilde;o</a></li>
	<li><a  href="contato.asp">Contate-nos </a></li>
  </ul>
  </div>



Etapa 2 - O código CSS

2.1
- Adicione as declarações abaixo no seu arquivo CSS.
2.2 - Como o Opera pede width para elementos posicionados com absolute (devidamente), eu usei a técnica do display table para resolver este problema do width no Opera
2.3 - Se for necessário realiza alterações pra melhorar o visual, faça fora destas declarações pra não correr o risco de "estragá-las" (a não ser que você entenda bem de CSS né?). Aguarde, mostrarei como fazer estas alterações na etapa 4.
/* menu horizontal by micox */
.menu-hh { display: table; }
.menu-hh * { margin: 0; padding: 0;}
.menu-hh a { display: block; }
.menu-hh li { list-style: none; float: left; height: 1%; }
.menu-hh li ul { position: absolute; visibility: hidden; white-space: nowrap;}
/* hack para navegadores que exigem width para elementos pos absolute (Opera) */
html:first-child>body .menu-hh li ul { width: 500px; }
.menu-hh li:hover ul, .menu-hh  li.over ul { visibility: visible;} /* a class  .over eh tecnica pro hover no IE */
.menu-hh li:hover ul li ul, .menu-hh li.over ul li ul{ visibility: hidden;}
.menu-hh li ul li:hover ul, .menu-hh li ul li.over ul{ visibility: visible;}
/* visual */
.menu-hh { background-color: #F60; width: 90%; margin: 0 0 0 12px; height: 31px;}
  .menu-hh a { font-weight: bold; text-decoration: none; color: #000; padding: 0 10px; line-height: 20px;}
  .menu-hh a:hover { text-decoration: underline; background-color: #DF2800;}
  .menu-hh ul li ul { background-color: #DF2800; border: 1px solid #000; }


Etapa 3 - Javascript pra ativar o hover (.over) no IE

3.1
- Como já sabe, o IE não interpreta a pseudo-classe ":hover". Por este motivo, você (geralmente) verá nos menus CSS uma declaração contendo também um seletor com a classe ".over" e será necessário adicionar uma solução Javascript pra simular o comportamento do ":hover". Para saber mais sobre isto, leia aqui na explicação do Maujor.
3.2 - Adicione a seguinte chamada ao Javascript no seu código (X)HTML:
<!--[if lte IE 6]>
  <script type="text/javascript" src="funcoesIE.js"></script>
  <![endif]-->

3.3 - Crie um arquivo chamado funcoesIE.js
3.4 - Coloque o seguinte código dentro deste arquivo java script:
function DOMgetElementsByClassName($node,$className){
	   /* Description: retorna um array com todos os elementos dentro
		  de $node que possuam a classe indicada em $className
	   Versão: 1.0 - 30/08/2006
	   Author: Micox - Náiron J.C.G - micoxjcg@yahoo.com.br
	   Site:   http://elmicox.blogspot.com 
	   Não retire estas informações pra não infringir direitos autorais!
	   */
	var $node, $atual, $className, $retorno = new Array(), $novos = new Array();
	$retorno = new Array();
	for (var $i=0;$i<$node.childNodes.length;$i++){
	   $atual = $node.childNodes[$i];
	   if($atual.nodeType==1){// 1 = XML_ELEMENT_NODE
		  $classeAtual = $atual.className; 
		  if(new RegExp("\\b"+$className+"\\b").test($classeAtual)){
			 $retorno[$retorno.length] = $atual;
		  }
		  if($atual.childNodes.length>0){
			 $novos = DOMgetElementsByClassName($atual,$className);
			 if($novos.length>0){
				$retorno = $retorno.concat($novos);
			 }
		  }
	   }
	}
	return $retorno;
	}

	function addEvent(obj, evType, fn){
	   //adiciona evento, versao crossbrowser
	   //retirado de http://elcio.com.br/crossbrowser/#7
	   if (obj.addEventListener){
		  obj.addEventListener(evType, fn, true)}
	   if (obj.attachEvent){
		  obj.attachEvent("on"+evType, fn)}
	   }
function ativaHover(classe) {
			//ativa o hover para elementos n?o links, por causa de bug do IE
			//retirado de http://www.maujor.com/tutorial/ddownmenu-a.php
			var pais = DOMgetElementsByClassName(document.body,classe);
			for (var j=0; j<pais.length; j++) {
						var sfEls = pais[j].getElementsByTagName("LI");
						for (var i=0; i<sfEls.length; i++) {
								   sfEls[i].onmouseover=function() {
											   this.className+=" over";
								   }
								   sfEls[i].onmouseout=function() {
											   this.className=this.className.replace(new RegExp(" over\\b"), "");
								   }
						}
			}
}
 
addEvent(window,"load",function () { ativaHover("menu-hh"); });


Etapa 4 - Embelezando
Prontinho. Agora você tem um menu cru. Deve estar da seguinte forma:


Imagem

Um pouco feio não é mesmo? Para estilizá-lo é só você efetuar outras declarações. De preferência em outro local, sem mexer no CSS que passei na etapa 2.

Eu, por exemplo, coloquei as seguintes declarações um pouco mais abaixo no meu código CSS e ficou bonitinho:

.menu-hh { background-color: #F60; width: 520px; margin: 0 0 0 12px; height: 31px;}
  .menu-hh a { font-weight: bold; text-decoration: none; color: #000;
  padding: 0 10px; line-height: 20px;}
  .menu-hh a:hover { text-decoration: underline; background-color: #DF2800;}
  .menu-hh ul li ul { background-color: #DF2800; border: 1px solid #000; }


Com isto, finalizei meu menu. Simples não?

Como já falei no início, uma prévia do menu pode ser vista em : www.lgcom.com.br
Lembrando que este que está aí é apenas de 2 níveis.



Etapa 5 - Código todo pronto
Abaixo é só copiar, colar e editar. :) Bugs corrigidos. Eu havia esquecido o comentário condicional, de zerar as margens e padding aqui no código pronto e de declarar o DOCTYPE. Pode usar tranquilo

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<!--[if lte IE 6]>
 <script>
 function DOMgetElementsByClassName($node,$className){
 /* Description: retorna um array com todos os elementos dentro
	 de $node que possuam a classe indicada em $className
	Versão: 1.0 - 30/08/2006
	Author: Micox - Náiron J.C.G - micoxjcg@yahoo.com.br
	Site:   http://elmicox.blogspot.com
	Não retire estas informações pra não infringir direitos autorais!
 */
  var $node, $atual, $className, $retorno = new Array(), $novos = new Array();
  $retorno = new Array();
  for (var $i=0;$i<$node.childNodes.length;$i++){
   $atual = $node.childNodes[$i];
   if($atual.nodeType==1){// 1 = XML_ELEMENT_NODE
	  $classeAtual = $atual.className;							  
	  if(new RegExp("\\b"+$className+"\\b").test($classeAtual)){
	  $retorno[$retorno.length] = $atual;
	  }
	  if($atual.childNodes.length>0){
	  $novos = DOMgetElementsByClassName($atual,$className);
	  if($novos.length>0){
	 $retorno = $retorno.concat($novos);
	  }
	  }
   }
  }
  return $retorno;
 }
 function addEvent(obj, evType, fn){
  //adiciona evento, versao crossbrowser
  //retirado de http://elcio.com.br/crossbrowser/#7
  if (obj.addEventListener){
   obj.addEventListener(evType, fn, true)}
  if (obj.attachEvent){
   obj.attachEvent("on"+evType, fn)}
 }
 function ativaHover(classe) {
  //ativa o hover para elementos n?o links, por causa de bug do IE
  //retirado de http://www.maujor.com/tutorial/ddownmenu-a.php
  var pais = DOMgetElementsByClassName(document.body,classe);
  for (var j=0; j<pais.length; j++) {
   var sfEls = pais[j].getElementsByTagName("LI");
   for (var i=0; i<sfEls.length; i++) {
	  sfEls[i].onmouseover=function() {
	   this.className+=" over";
	  }
	  sfEls[i].onmouseout=function() {
	   this.className=this.className.replace(new RegExp(" over\\b"), "");
	  }
   }
  }
 }
  
 addEvent(window,"load",function () { ativaHover("menu-hh"); });
 </script>
<![endif]-->
<style>
/* menu horizontal by micox */
.menu-hh { display: table; }
.menu-hh * { margin: 0; padding: 0;}
.menu-hh a { display: block; }
.menu-hh li { list-style: none; float: left; height: 1%; }
.menu-hh li ul { position: absolute; visibility: hidden; white-space: nowrap;}
/* hack para navegadores que exigem width para elementos pos absolute (Opera) */
html:first-child>body .menu-hh li ul { width: 500px; }
.menu-hh li:hover ul, .menu-hh  li.over ul { visibility: visible;} /* a class  .over eh tecnica pro hover no IE */
.menu-hh li:hover ul li ul, .menu-hh li.over ul li ul{ visibility: hidden;}
.menu-hh li ul li:hover ul, .menu-hh li ul li.over ul{ visibility: visible;}
/* visual */
.menu-hh { background-color: #F60; width: 90%; margin: 0 0 0 12px; height: 31px;}
  .menu-hh a { font-weight: bold; text-decoration: none; color: #000; padding: 0 10px; line-height: 20px;}
  .menu-hh a:hover { text-decoration: underline; background-color: #DF2800;}
  .menu-hh ul li ul { background-color: #DF2800; border: 1px solid #000; }
</style>
</head>
<body>
<div class="menu-hh">
  <ul>
	<li><a  href="quem-somos.asp">Quem somos</a></li>
	<li><a  href="produtos.asp">Produtos</a>
   <ul>
  <li><a  href="radios-portateis.asp">Rádios  portáteis</a>
	 <ul>
	<li><a  href="2.htm">Sub-menu 3</a></li>
	<li><a  href="2.htm">Sub-menu 3</a></li>
	<li><a  href="2.htm">Sub-menu 3</a></li>
	<li><a  href="2.htm">Sub-menu 3</a></li>
	 </ul>
   </li>
   <li><a href="radios-moveis.asp">Rádios  móveis</a></li>
   <li><a  href="repetidoras.asp">Repetidoras</a></li>
   <li><a href="sistemas-hf.asp">Sistemas  HF</a></li>
   <li><a  href="acessorios.asp">Acessórios</a></li>
   </ul>
	</li>
	<li><a  href="revendas.asp">Revendas</a>
   <ul>
   <li><a href="2.htm">Sub-menu 2</a>
	 <ul>
	<li><a  href="2.htm">Sub-menu 3</a></li>
	<li><a  href="2.htm">Sub-menu 3</a></li>
	<li><a  href="2.htm">Sub-menu 3</a></li>
	 </ul>
   </li>
   <li><a href="2.htm">Sub-menu  2</a></li>
   <li><a href="2.htm">Sub-menu  2</a></li>
   </ul>
	</li>
	<li><a  href="cotato.asp">Solicite uma  cotação</a></li>
	<li><a  href="assistencia-tecnica.asp">Assistência  técnica</a></li>
	<li><a  href="locacao.asp">Locação</a></li>
	<li><a  href="contato.asp">Contate-nos </a></li>
  </ul>
</div>
</body>
</html>



Fim
Aqui acaba este primeiro menu horizontal com submenus horizontais de até 3 níveis.
Caso lhe tenha sido útil, comente aqui e me incentive a continuar escrevendo mais.
Caso tenha encontrado algum bug, comente aqui e me informe para eu tentar corrigir.
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#2 Membro offline   FelipeMorais Ícone

  • Ícone
  • Grupo: Membro Amigo
  • Posts: 528
  • Cadastrado: 19-agosto 06

Postou 04 setembro 2006 - 06:22

Opa rapaz... Mt bom, aposto que vai ajudar muita gente!
Parabéns!
Novidades em breve.
0

#3 Membro offline   TheChessMan Ícone

  • Aposentado ganha pouco! Tô de volta! :P
  • Ícone
  • Grupo: Membro Amigo
  • Posts: 696
  • Cadastrado: 04-julho 06
  • Localização:Bento Gonçalves - RS

Postou 04 setembro 2006 - 08:54

Muito bom micox! Agora temos um bom link para indicar!

;)
www.lendo.org
www.portuguesfacil.net
0

#4 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 04 setembro 2006 - 08:58

Estou preparando as continuações.
Menu de tudo que é jeito. Sempre em WS.
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#5 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 06 setembro 2006 - 11:33

Saiu o segundo menu.

Menu Horizontal, Sub-Menu Vertical

Postado inicialmente em: Menu Horizontal, Sub-Menu Vertical - Menus CSS 2

Etapa 1 - O código xHTML:

Repita o código (X)HTML postado no menu anterior. Porém o nome de classe que deverá ser utilizado é menu-hv.

Etapa 2 - O CSS:

2.1 - Adicione as declarações abaixo no seu arquivo CSS.
2.2 - Se for necessário realizar alterações pra melhorar o visual, faça fora destas declarações pra não correr o risco de "estragá-las" (a não ser que você entenda bem de CSS né?). Aguarde, mostrarei como fazer estas alterações na etapa 4.

/* menu horizontal-vertical by micox */
 .menu-hv * { margin: 0; padding: 0;}
 .menu-hv a { display: block; }
 .menu-hv li { list-style: none; float: left; height: 1%; }
 .menu-hv li ul { position: absolute; visibility: hidden;}
 .menu-hv li ul li { float: none; white-space: nowrap; display: inline; /* o inline é pro IE */}
 .menu-hv li ul li ul { position: absolute; left: 100%; top: 0; }
 .menu-hv li:hover ul, .menu-hv li.over ul { visibility: visible;}
 .menu-hv li:hover ul ul, .menu-hv li.over ul ul { visibility: hidden;}
 .menu-hv ul ul li:hover ul, .menu-hv ul ul li.over ul { visibility: visible;}


Etapa 3 - Javascript pra ativar o hover no IE

3.1 - Veja as etapas do Javascript no menu anterior.(fiz algumas pequenas alterações no menu anterior, troquei a função overMenuHH por uma mais genérica. Já editei o post inicial.)
3.2 - Para saber mais sobre o comportamento indevido do IE quanto ao ":hover", leia aqui na explicação do Maujor.
3.3 - Editado 28/11/06: Não se esqueça de colocar o comentário condicional pra que o script só funcione no IE (era um dos bugs).
3.4 - Adicione a seguinte chamada ao final do arquivo de script pra carregar o menu no IE.
addEvent(window,"load",function () { ativaHover("menu-hv"); });


Etapa 4 - Embelezando

Prontinho. Agora você tem um menu cru. Deve estar da seguinte forma:

Um pouco feio não é mesmo? Para estilizá-lo é só você efetuar outras declarações. De preferência em outro local, sem mexer no CSS que passei na etapa 2.

Eu, por exemplo, coloquei as seguintes declarações um pouco mais abaixo no meu código CSS e ficou bonitinho:

.menu-hv { background: #DF2800 url(img/bg-menu.jpg) repeat-x top; 
   width: 757px; margin: 0 0 0 12px; height: 31px;}
   .menu-hv a { font-weight: bold; text-decoration: none; color: #FFF;
   padding: 0 10px; line-height: 23px;}
   .menu-hv a:hover { text-decoration: underline; background-color: #000; color: #FFF;}
   .menu-hv ul li ul { background-color: #DF2800; border: 1px solid #000; }



Com isto, finalizei meu menu. Simples não?

Como já falei no início, uma prévia do menu pode ser vista aqui.


Etapa 5 - Código inteiro pronto

Abaixo é só copiar, colar e editar. :) Editado 28/11/06: Bugs corrigidos. Eu havia esquecido o comentário condicional e de zerar as margens e padding aqui no código pronto. Pode usar tranquilo.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!--[if lte IE 6]>
<script>
 function DOMgetElementsByClassName($node,$className){
 /* Description: retorna um array com todos os elementos  dentro
				 de  $node que possuam a classe indicada em $className
	Versão: 1.0 -  30/08/2006
	Author: Micox -  Náiron J.C.G - micoxjcg@yahoo.com.br
	Site:   http://elmicox.blogspot.com
	Não retire estas  informações pra não infringir direitos autorais!
 */
  var $node,  $atual, $className, $retorno = new Array(), $novos = new Array();
  $retorno =  new Array();
  for (var  $i=0;$i<$node.childNodes.length;$i++){
   $atual  = $node.childNodes[$i];
   if($atual.nodeType==1){//  1 = XML_ELEMENT_NODE
   $classeAtual  = $atual.className;							  
   if(new  RegExp("\\b"+$className+"\\b").test($classeAtual)){
	  $retorno[$retorno.length] = $atual;
   }
   if($atual.childNodes.length>0){
	  $novos =  DOMgetElementsByClassName($atual,$className);
	  if($novos.length>0){
	 $retorno = $retorno.concat($novos);
	  }
   }
   }
  }
  return  $retorno;
 }
 function addEvent(obj, evType, fn){
	 //adiciona evento,  versao crossbrowser
	 //retirado de  http://elcio.com.br/crossbrowser/#7
	 if (obj.addEventListener){
		 obj.addEventListener(evType, fn, true)}
	 if (obj.attachEvent){
		 obj.attachEvent("on"+evType,  fn)}
 }
 function ativaHover(classe) {
  //ativa o  hover para elementos n?o links, por causa de bug do IE
  //retirado  de http://www.maujor.com/tutorial/ddownmenu-a.php
  var pais =  DOMgetElementsByClassName(document.body,classe);
  for (var  j=0; j<pais.length; j++) {
   var  sfEls = pais[j].getElementsByTagName("LI");
   for  (var i=0; i<sfEls.length; i++) {
   sfEls[i].onmouseover=function()  {
	this.className+="  over";
   }
   sfEls[i].onmouseout=function()  {
	this.className=this.className.replace(new  RegExp(" over\\b"), "");
   }
   }
  }
 }

 addEvent(window,"load",function  () { ativaHover("menu-hv"); });
 </script>
 <![endif]-->
 <style>
 /* menu horizontal-vertical by micox */
 .menu-hv * { margin: 0; padding: 0;}
 .menu-hv a { display: block; }
 .menu-hv li { list-style: none; float: left; height: 1%; }
 .menu-hv li ul { position: absolute; visibility: hidden;}
 .menu-hv li ul li { float: none; white-space: nowrap; display: inline; /* o inline é pro IE */}
 .menu-hv li ul li ul { position: absolute; left: 100%; top: 0; }
 .menu-hv li:hover ul, .menu-hv li.over ul { visibility: visible;}
 .menu-hv li:hover ul ul, .menu-hv li.over ul ul { visibility: hidden;}
 .menu-hv ul ul li:hover ul, .menu-hv ul ul li.over ul { visibility: visible;}
 /* visual */
 .menu-hv {  background: #DF2800 url(img/bg-menu.jpg) repeat-x top;
									width: 757px;  margin: 0 0 0 12px; height: 31px;}
			 .menu-hv a { font-weight: bold;  text-decoration: none; color: #FFF;
										padding: 0 10px; line-height: 23px;}
			 .menu-hv a:hover { text-decoration:  underline; background-color: #000; color: #FFF;}
			 .menu-hv ul li ul {  background-color: #DF2800; border: 1px solid #000; }
 </style>
 </head>
 <body>
 <div class="menu-hv">
   <ul>
	 <li><a href="quem-somos.php">Quem  somos</a></li>
	 <li><a  href="produtos.php">Produtos</a>
	   <ul>
		 <li><a  href="radios-portateis.php">Rádios  portáteis</a>
		   <ul>
			  <li><a href="#">Terceiro  nível</a></li>
			  <li><a href="#">Link 2</a></li>
			  <li><a href="#">Link 3</a></li>
		   </ul>
		 </li>
		 <li><a  href="radios-moveis.php">Rádios  móveis</a></li>
		 <li><a  href="repetidoras.php">Repetidoras</a></li>
		 <li><a  href="sistemas-hf.php">Sistemas HF</a></li>
		 <li><a  href="acessorios.php">Acessórios</a></li>
	   </ul>
	 </li>
	 <li><a  href="revendas.php">Revendas</a></li>
	 <li><a href="cotato.php">Solicite uma  cotação</a></li>
	 <li><a  href="assistencia-tecnica.php">Assistência  técnica</a></li>
	 <li><a  href="locacao.php">Locação</a></li>
	 <li><a href="contato.php">Contate-nos  </a></li>
   </ul>
 </div>
 </body>
</html>



Fim

Aqui acaba este segundo Menu Horizontal com Submenus Verticais de até 3 níveis.
Caso lhe tenha sido útil, comente aqui e me incentive a continuar escrevendo mais.
Caso tenha encontrado algum bug, comente aqui e me informe para eu tentar corrigir.
Caso tenha dúvidas, pergunte no fórum de Webstandards / Tableless / CSS .

Até o próximo menu pessoal.
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#6 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 21 setembro 2006 - 09:44

Menu Vertical, Sub-Menu Vertical - Menus CSS 3

Testado em: Firefox 1.5 ; Internet Explorer 6.0 ; Opera 8.5.

Mostrarei aqui um código pronto para fazer seu Menu Drop-down CSS Vertical, com Sub-menus Verticais de até 3 níveis.
Não farei tutorial, não explicarei o funcionamento, nem como cheguei até este código.
Para isto existem inúmeros sites. Estude CSS se quiser entender ou poste uma pergunta no fórum iEvolution sobre CSS :)
Se quiser pular as etapas e já pegar o código pronto, vá até o final deste post.

O menu anterior pode ser visto em: Menu drop-down CSS Horizontal, com sub-menus Verticais de até 3 níveis.
Um índice dos menus já feitos pode ser vista aqui: Lista de menus.

Uma prévia do menu pode ser vista aqui.

Imagem



Etapa 1 - O Código (X)HTML

Repita o código (X)HTML postado no menu inicial . Porém o nome de classe que deverá ser utilizado é menu-vv.


Etapa 2 - O código CSS

2.1 - Adicione as declarações abaixo no seu arquivo CSS.
2.2 - Defina a largura na primeira declaração (menu-vv ul).
2.3 - Seria possível fazer um menu independente de largura, que se ajustasse automagicamente à largura dos textos, porém o maldito hack do IE atrapalhou.
2.4 - Se for necessário realizar alterações pra melhorar o visual, faça fora destas declarações pra não correr o risco de "estragá-las" (a não ser que você entenda bem de CSS né?). Aguarde, mostrarei como fazer estas alterações na etapa 4.

/* menu vertical-vertical by micox */
.menu-vv * { margin: 0; padding: 0;}
.menu-vv ul { width: 130px; /* defina aqui a largura dos menus */ display: table;}
.menu-vv a { display: block; }
.menu-vv ul li { list-style: none; position: relative; }
 * html .menu-vv ul li { height: 1%; /*para o maldito hack do IE */ }
.menu-vv ul li ul { position: absolute; left: 100%; top: 0; visibility: hidden; }
.menu-vv li:hover ul, .menu-vv li.over ul { visibility: visible;} 
.menu-vv li:hover ul ul, .menu-vv li.over ul ul { visibility: hidden;} 
.menu-vv ul ul li:hover ul, .menu-vv ul ul li.over ul { visibility: visible;}


Etapa 3 - Javascript pra ativar o hover (.over) no IE

3.1 - Veja as etapas do Javascript no menu inicial .
3.2 - Para saber mais sobre o comportamento indevido do IE quanto ao ":hover", leia aqui na explicação do Maujor.
3.3 - Adicione a seguinte chamada ao final do arquivo de script pra carregar o menu no IE.

addEvent(window,"load",function () { ativaHover("menu-vv"); });

3.4 - Editado: Não se esqueça de colocar o comentário condicional pra que o script só funcione no IE (era um dos bugs)

Etapa 4 - Embelezando

Prontinho. Agora você tem um menu cru. Deve estar da seguinte forma:

Imagem Um pouco feio não é mesmo? Para estilizá-lo é só você efetuar outras declarações. De preferência em outro local, sem mexer no CSS que passei na etapa 2.

Eu, por exemplo, coloquei as seguintes declarações um pouco mais abaixo no meu código CSS e ficou bonitinho:

.menu-vv { background: #DF2800 url(img/bg-menu.jpg) repeat-x top; float: left; margin-bottom: 50px;}
 .menu-vv a { font-weight: bold; text-decoration: none; color: #FFF;
	 padding: 0 10px; line-height: 23px;}
 .menu-vv a:hover { text-decoration: underline; background-color: #000; color: #FFF;}
 .menu-vv ul li ul { background-color: #DF2800; border: 1px solid #000; }
Com isto, finalizei meu menu. Simples não?

Como já falei no início, uma prévia do menu pode ser vista aqui.


Etapa 5 - Código todo pronto

Abaixo é só copiar, colar e editar. :)
Editado 29/01/07 -> Bugs corrigidos. Eu havia esquecido o comentário condicional, de zerar as margens e padding aqui no código pronto e de declarar o DOCTYPE. Pode usar tranquilo
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!--[if lte IE 6]>
 <script>
 function DOMgetElementsByClassName($node,$className){
 /* Description: retorna um array com todos os elementos dentro
	 de $node que possuam a classe indicada em $className
	Versão: 1.0 - 30/08/2006
	Author: Micox - Náiron J.C.G - micoxjcg@yahoo.com.br
	Site:   http://elmicox.blogspot.com
	Não retire estas informações pra não infringir direitos autorais!
 */
  var $node, $atual, $className, $retorno = new Array(), $novos = new Array();
  $retorno = new Array();
  for (var $i=0;$i<$node.childNodes.length;$i++){
   $atual = $node.childNodes[$i];
   if($atual.nodeType==1){// 1 = XML_ELEMENT_NODE
   $classeAtual = $atual.className;							  
   if(new RegExp("\\b"+$className+"\\b").test($classeAtual)){
   $retorno[$retorno.length] = $atual;
   }
   if($atual.childNodes.length>0){
   $novos = DOMgetElementsByClassName($atual,$className);
   if($novos.length>0){
	$retorno = $retorno.concat($novos);
   }
   }
   }
  }
  return $retorno;
 }
 function addEvent(obj, evType, fn){
  //adiciona evento, versao crossbrowser
  //retirado de http://elcio.com.br/crossbrowser/#7
  if (obj.addEventListener){
   obj.addEventListener(evType, fn, true)}
  if (obj.attachEvent){
   obj.attachEvent("on"+evType, fn)}
 }
 function ativaHover(classe) {
  //ativa o hover para elementos n?o links, por causa de bug do IE
  //retirado de http://www.maujor.com/tutorial/ddownmenu-a.php
  var pais = DOMgetElementsByClassName(document.body,classe);
  for (var j=0; j<pais.length; j++) {
   var sfEls = pais[j].getElementsByTagName("LI");
   for (var i=0; i<sfEls.length; i++) {
   sfEls[i].onmouseover=function() {
  this.className+=" over";
   }
   sfEls[i].onmouseout=function() {
  this.className=this.className.replace(new RegExp(" over\\b"), "");
   }
   }
  }
 }
  
 addEvent(window,"load",function () { ativaHover("menu-vv"); });
 </script>
<![endif]-->
<style type="text/css">
 /* menu vertical-vertical by micox */
 .menu-vv * { margin: 0; padding: 0;}
 .menu-vv ul { width: 130px; /* defina aqui a largura dos menus */ display: table;}
 .menu-vv a { display: block; }
 .menu-vv ul li { list-style: none; position: relative; }
  * html .menu-vv ul li { height: 1%; /*para o maldito hack do IE */ }
 .menu-vv ul li ul { position: absolute; left: 100%; top: 0; visibility: hidden; }
 .menu-vv li:hover ul, .menu-vv li.over ul { visibility: visible;} 
 .menu-vv li:hover ul ul, .menu-vv li.over ul ul { visibility: hidden;} 
 .menu-vv ul ul li:hover ul, .menu-vv ul ul li.over ul { visibility: visible;} 
 /* visual */
 .menu-vv { background: #DF2800 url(img/bg-menu.jpg) repeat-x top; float: left; margin-bottom: 50px;}
 .menu-vv a { font-weight: bold; text-decoration: none; color: #FFF; padding: 0 10px; line-height: 23px;}
 .menu-vv a:hover { text-decoration: underline; background-color: #000; color: #FFF;}
 .menu-vv ul li ul { background-color: #DF2800; border: 1px solid #000; }
</style>
</head>
<body>
<div class="menu-vv">
  <ul>
	<li><a href="quem-somos.php">Quem somos</a></li>
	<li><a href="produtos.php">Produtos</a>
	  <ul>
		<li><a href="radios-portateis.php">Rádios portáteis</a>
		  <ul>
			<li><a href="#">Terceiro nível</a></li>
			<li><a href="#">Link 2</a></li>
			<li><a href="#">Link 3</a></li>
		  </ul>
		</li>
		<li><a href="radios-moveis.php">Rádios móveis</a></li>
		<li><a href="repetidoras.php">Repetidoras</a></li>
		<li><a href="sistemas-hf.php">Sistemas HF</a></li>
		<li><a href="acessorios.php">Acessórios</a></li>
	  </ul>
	</li>
	<li><a href="revendas.php">Revendas</a></li>
	<li><a href="cotato.php">Solicite uma cotação</a></li>
	<li><a href="assistencia-tecnica.php">Assistência técnica</a></li>
	<li><a href="locacao.php">Locação</a></li>
	<li><a href="contato.php">Contate-nos </a></li>
  </ul>
</div>
</body>
</html>



Fim

Aqui acaba este terceiro Menu Vertical com Submenus Verticais de até 3 níveis. A série sobre menus acaba com este.
Já abordei os 3 tipos principais de menus. Se quiser saber sobre outros tipos, é só comentar e pedir.
Caso lhe tenha sido útil, comente aqui e me incentive a continuar escrevendo mais.
Caso tenha encontrado algum bug, comente aqui e me informe para eu tentar corrigir.
Caso tenha dúvidas, pergunte no fórum de Webstandards / Tableless / CSS .

Agora pretendo começar uma série sobre Ajax e requisições assíncronas.
Até o próximo post.
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#7 Membro offline   FelipeMorais Ícone

  • Ícone
  • Grupo: Membro Amigo
  • Posts: 528
  • Cadastrado: 19-agosto 06

Postou 21 setembro 2006 - 09:56

Micox, muito boa a série cara... e vou ficar no aguardo dos post sobre ajax...

Parabéns
Novidades em breve.
0

#8 Membro offline   Fábio Jácome Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 1
  • Cadastrado: 19-outubro 06

Postou 19 outubro 2006 - 05:39

Esse menu Horizontal com subitens horizontais não funciona no Firefox.
0

#9 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 19 outubro 2006 - 05:54

Fábio, veja ele funcionando aqui. Tanto no FF1.5 quanto no IE6.0.

Diga qual o problema ocorreu com seu menu pragente tentar resolver :ohok:
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#10 Membro offline   trit0n* Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 81
  • Cadastrado: 13-setembro 06
  • Localização:Goiânia - GO
  • Interesses:Design, design e + design!

Postou 28 outubro 2006 - 12:26

Cara eu sei que estou ressussitando.
Mas tenho que agradecer.
Me ajudou muito. Caiu como uma luva na minha mão.

^^

Abs.
Never stop the music!
0

#11 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 28 outubro 2006 - 12:42

heheh Beleza :)
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#12 Membro offline   visual_online Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 9
  • Cadastrado: 30-novembro 06

Postou 30 novembro 2006 - 11:49

Gente, eu ja estou completamente cansado de tentar colocar este script pra funcionar, e ja cheguei a conclusao que o problema so pode ser eu mesmo, pois nao entendo quase nada de javascript. Acredito q fiz tudo conforme explicado aki, mas nao da certo. Uso firefox 2.0 e IE 6.0. Espero uma ajuda ai o quanto antes.

Esqueci de citar que no firefox aparece tudo em cima um do outro, mas os submenus aparecem e no IE so aparecem os links mesmo no famoso azulão padrao sem submenus... :thumbsdown:
0

#13 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 30 novembro 2006 - 12:21

Ae visual, eu corrigi o menu 2 que realmente tinha uns bugs pois eu esqueci algumas coisas no tutorial.
Lá no meu blog eu já corrigi. tinha esquecido de:
- Pra funcionar corretamente no IE, é obrigatório colocar o doctype.
- O javascript tem que ficar dentro de um comentário condicional pra funcionar só no IE.
- Esqueci de zerar os margins e paddings do menu ( menu-hv { margin:0; padding:0;}

Já corrigi isso lá no meu blog. Anoite, ou quando eu tiver tempo, corrigirei aqui também :joia:
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

#14 Membro offline   visual_online Ícone

  • Ícone
  • Grupo: Membros
  • Posts: 9
  • Cadastrado: 30-novembro 06

Postou 30 novembro 2006 - 02:49

valeu micox :joia: Agora se for possivel, passa pra gente ai o link pro seu blog, mais precisamente no local onde foi feita a alteração pq eu to com um trabalho aki e to dependendo so desse menu.

Muito obrigado pela ajuda e sucesso
0

#15 Membro offline   Micox Ícone

  • Comunidade de desenvolvedores
  • Ícone
  • Grupo: Administradores
  • Posts: 5511
  • Cadastrado: 03-julho 06
  • Localização:Goiânia-GO
  • Interesses:Webly e elmicox.blogspot.com

Postou 30 novembro 2006 - 07:32

Ué. Tava lá em cima na própria postagem heheh: http://elmicox.blogs...u-vertical.html

:joia:
valeus.net/mwords - Links automáticos p/ o MercadoLivre em seu texto

Ajude, responda: mesmo que não saiba exatamente a resposta, seu pitaco pode dar uma luz no problema do outro.
Não respondo dúvidas por MP / Email / MSN e afins. O fórum está aqui pra isto.

elmicox.blogspot.com
0

  • (4 Páginas)
  • +
  • 1
  • 2
  • 3
  • Último »


Resposta rápida

  

1 usuário(s) está(ão) lendo este tópico
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)