Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

UMARIZAL

Menu dropdown 100% em CSS, tem como?

Recommended Posts

Olá pessoal.

 

Atualmente, possuo em meu site ( http://umarizal.com ) um menu que usa Javascript (acho que é em DHTML)...

 

Tal menu, não tem seus links reconhecidos pelos sites de busca, por isso, quero criar um menu sem javascript ou dhtml.

 

Li algo (pesquisando no google) sobre menus 100% em CSS, tem como?

 

Existe um programa (software) para criação de menus em CSS?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hehe, pois é... também participo do Fórum do GdH sim...

 

Então, eu já vi este tuto, o site do Maujor é ponto de passagem obrigatório de qualquer um que queira aprender CSS...

 

No entanto, eu procuro um programa que faça isso mais facilmente... sabe de algum? Encontrei alguns bons como o AllButtons 1.6 mas é pago... queria algo freeware ou livre...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, usei o modelo do tópico que você citou... mas se perceber (pegando o arquivo compactado disponibilizado), os links não abrem mesmo após editar (trocar o # pelo URL).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste o teu código para vermos como você fez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poste o teu código para vermos como você fez.

 

Bem, o próprio código fornecido pelo autor já não abre os links... vejam:

http://rapidshare.com/files/225763183/Menu_Drop-Down.rar.html

 

Vamos lá... vou por os códigos aqui:

 

Drop-Down.html (onde está o menu)

<!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>
		<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
		<title>Menu Drop-Down CSS</title>
		<link rel="stylesheet" type="text/css" href="Css/estilos.css"/>
		<script type="text/javascript" src="Js/comportamento.js"></script>
	</head>
	<body>
		<div id="menu">
			<ul class="principal">
				<li id="first" class="selecionado"><a href="#"><span>Home</span>
					</a></li>
				<li><a href="#"><span>Projetos</span>
					</a>
					<ul class="nivel2">
						<li><a href="#">Desafios PHP</a></li>
						<li><a href="#" class="submenu">Desafios WS</a>
							<ul class="nivel3">
								<li><a href="#">XHTML</a></li>
								<li><a href="#">XML</a></li>
								<li><a href="#">CSS</a></li>
							</ul>
						</li>
					</ul>
				</li>
				<li><a href="#"><span>Tutoriais</span>
					</a>
					<ul class="nivel2">
						<li><a href="#">Ajax</a></li>
						<li><a href="#" class="submenu">CSS</a>
							<ul class="nivel3">
								<li><a href="#">Básico</a></li>
								<li><a href="#">Intermediário</a></li>
								<li><a href="#">Avançado</a></li>
							</ul>
						</li>
						<li><a href="#">Javascript</a></li>
						<li><a href="#" class="submenu">Photoshop</a>
							<ul class="nivel3">
								<li><a href="#">Básico</a></li>
								<li><a href="#">Intermediário</a></li>
								<li><a href="#">Avançado</a></li>
							</ul>
						</li>
						<li><a href="#" class="submenu">PHP</a>
							<ul class="nivel3">
								<li><a href="#">Básico</a></li>
								<li><a href="#">Intermediário</a></li>
								<li><a href="#">Avançado</a></li>
							</ul>
						</li>
						<li><a href="#">XHTML</a></li>
					</ul>
				</li>
				<li><a href="#"><span>Artigos</span>
					</a>
					<ul class="nivel2">
						<li><a href="#">Webdesign</a></li>
						<li><a href="#">Diversos</a></li>
						<li><a href="#">Webstandards</a></li>
					</ul>
				</li>
				<li><a href="#"><span>Contato</span>
					</a></li>
			</ul>
		</div>
	</body>
</html>

estilos.css (estilo)

 * {
    margin: 0;
    padding: 0;
    font-family: Arial, Helvetica, sans-serif;
}

a {
    text-decoration: none;
}

a:hover {
    text-decoration: underline;
} .clear {
    clear: both;
} #menu {
    background: #000 url(../Imagens/fundo_menu.png);
    padding: 5px 0;
} #menu ul {
    list-style: none;
}

ul.principal {
    width: 800px;
    height: 30px;
    margin: 0 auto;
}

ul.principal li {
    float: left;
    margin: 0 0 0 10px;
    text-align: center;
    position: relative;
    height: 30px;
    background: transparent;
}

ul.principal li:first-child, ul.principal li#first {
    margin-left: 0;
}

ul.principal li a {
    color: #FFF;
    display: block;
    background: url(../Imagens/botao.png) top center;
    padding: 5px 0 0 0;
    width: 152px;
    height: 25px;
    font-weight: bold;
}

ul.principal li a:hover {
    text-decoration: none;
}

ul.principal li:hover a, ul.principal li.over a {
    background: url(../Imagens/botao.png) 0 -32px;
}

ul.principal li.selecionado a {
    background: url(../Imagens/botao.png) 0 -64px;
}

ul.principal li ul.nivel2 {
    position: absolute;
    z-index: 10;
    left: 0;
    top: 30px;
    border: 1px solid #000;
    border-top: none;
    display: none;
    width: 150px;
}

ul.principal li:hover ul.nivel2, ul.principal li.over ul.nivel2 {
    display: block;
}

ul.principal li ul.nivel2 li {
    margin: 0;
    height: 25px;
}

ul.principal li ul.nivel2 li a {
    width: 140px;
    background: #EEE url(../Imagens/fundo_nivel2.png) top;
    color: #000;
    height: 20px;
    margin: 0;
    padding: 2px 0 2px 10px;
    text-align: left;
    border-top: 1px solid #000;
    font-weight: normal;
}

ul.principal li ul.nivel2 li a.submenu {
    background: #EEE url(../Imagens/fundo_nivel2_sub.png) top;
}

ul.principal li ul.nivel2 li:hover a, ul.principal li ul.nivel2 li.over a {
    background: #DDD url(../Imagens/fundo_nivel2.png) bottom;
}

ul.principal li ul.nivel2 li:hover a.submenu, ul.principal li ul.nivel2 li.over a.submenu {
    background: #DDD url(../Imagens/fundo_nivel2_sub.png) bottom;
}

ul.principal li ul.nivel2 li ul.nivel3 {
    position: absolute;
    left: 150px;
    top: 0;
    border: 1px solid #000;
    border-top: none;
    display: none;
}

ul.principal li ul.nivel2 li:hover ul.nivel3, ul.principal li ul.nivel2 li.over ul.nivel3 {
    display: block;
}

ul.principal li ul.nivel2 li ul.nivel3 li {
    height: 21px;
}

ul.principal li ul.nivel2 li ul.nivel3 li a {
    background: #FFF url(../Imagens/fundo_nivel3.png) top;
    font-size: 10pt;
    height: 16px;
}

ul.principal li ul.nivel2 li ul.nivel3 li:hover a, ul.principal li ul.nivel2 li ul.nivel3 li.over a {
    background: #CDF5FF url(../Imagens/fundo_nivel3.png) bottom;
}

comportamento.js (javascript)

/**
 * Autor: Henrique J. P. Barcelos
 * MSN: rick_hjpbarcelos@hotmail.com
 * Data: 25/04/2009
 */

//ao carregar a janela...
window.onload = function(){
	//pego todos os elementos LI dentro do menu
    var itens = document.getElementById("menu").getElementsByTagName("li");
    for (var i = 0; i < itens.length; i++) {
    	
		//Efeito Rollover para IE6, que não suporta a pseudo-classe :hover do CSS em elementos LI
        itens[i].onmouseover = function(){
            //se o elemento for o que estiver selecionado, eu adiciono a classe over. Ficará assim class="selecionado, over"...
			if (this.className.match("selecionado")) {
                this.className += ", over";
            }
			//se não for o seleiconado, apenas defino o nome da classe como sendo over
            else {
                this.className = "over";
            }
        }
		
		//Mesma intenção do bloco acima, adiciona o Efeito Rollout para o IE6
        itens[i].onmouseout = function(){
			//se a classe do elemento contiver a palavra 'selecionado', 
			//defino esse como sendo o nome da classe quando o mouse sair de cima dele
            if (this.className.match("selecionado")) {
                this.className = "selecionado";
            }
			//se não, atribuo o valor vazio para a classe
            else {
                this.className = "";
            }
        }
		
		//Essa função faz a mudança de classe quando o elemento é clicado.
		//É necessária tanto no IE quanto no Fx, Op, Ch, Sa, etc...
        itens[i].onclick = function(){
			//faço com que todos os elementos voltem ao seu estado "natural", limpando o nome da classe...
            for (var i = 0; i < itens.length; i++) {
                itens[i].className = "";
            }
			//em seguida, faço com que o elemento clicado receba a classe 'selecionado'
            this.className = "selecionado";
			//isto aqui apenas impede que o link seja executado, no caso porque meus links são "#"...
			//Retire essa linha caso for utilizar...
            return false;
        }
    }
}

O menu funciona perfeitamente... porém, mesmo alterando o link (trocando # pelo respectivo URL), ao clicar, não abre o link.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta última função está desativando o click:

/* 
	   itens[i].onclick = function(){
			//faço com que todos os elementos voltem ao seu estado "natural", limpando o nome da classe...
            for (var i = 0; i < itens.length; i++) {
                itens[i].className = "";
            }
			//em seguida, faço com que o elemento clicado receba a classe 'selecionado'
            this.className = "selecionado";
			//isto aqui apenas impede que o link seja executado, no caso porque meus links são "#"...
			//Retire essa linha caso for utilizar...
            return false;
        }
		*/
por isso que o href não funciona.

Apenas comentei ela, e consegui com que os links fossem seguidos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça esse efeito de outra forma.. como usando a técnica que postei aqui:

puramente css:

http://forum.imasters.com.br/index.php?/topic/354140-repente-css-menus/page__view__findpost__p__1341165

 

E não trás 'malefícios'. Não cheguei a testar o código do autor num 'situação real', mas por se tratar de Javascript, e não ler nada da URL, acho que essa mudança de estado não funciona qndo você realmente trocar de página. Já que o código JS vai ser 'reiniciado'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça esse efeito de outra forma.. como usando a técnica que postei aqui:

puramente css:

http://forum.imasters.com.br/index.php?/topic/354140-repente-css-menus/page__view__findpost__p__1341165

 

E não trás 'malefícios'. Não cheguei a testar o código do autor num 'situação real', mas por se tratar de Javascript, e não ler nada da URL, acho que essa mudança de estado não funciona qndo você realmente trocar de página. Já que o código JS vai ser 'reiniciado'.

 

Aqui não funfou....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mostre como fez.

De preferência um link para a página.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mostre como fez.

De preferência um link para a página.

 

http://terraplenagem.umarizal.com

 

Tá funcionando... tá até legalzinho... mas quando clico em algum ítem do menu... ele não muda de cor (deveria ficar como está o primeiro ítem à esquerda, da cor laranja após clicado).

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso se deve ao fato de você não estar trocando a classe 'selecionado' conforme muda de página.

Já que vai usar essa técnida para mostrar a página atual, faça um if/else em cada item do menu, comparando se oque está na URL é igual à ele.. se for, você adiciona a classe, senão, não coloca nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso se deve ao fato de você não estar trocando a classe 'selecionado' conforme muda de página.

Já que vai usar essa técnida para mostrar a página atual, faça um if/else em cada item do menu, comparando se oque está na URL é igual à ele.. se for, você adiciona a classe, senão, não coloca nada.

 

Willian, você poderia me dar um exemplo de código de como fazer isso (com apenas um ítem, eu faço os demais)? Não entendo nada de PHP, sou um aventureiro nesta área... rs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uai... vai entender... te juro que aqui não tá ficando... e testei no Firefox 3.5.3 / Internet Explorer 8 / Google Chrome 3.

 

Olha:

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oxe... ò.Ó Não tenho como testar em browsers para Windows agora. =/

 

Mas é simples. Através de um script, é só adicionar uma class="ativo" por exemplo no link.

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Hehe, como disse acima, sou totalmente leigo no assunto... vou jogando no "erro e acerto"... teria como me dar um exemplo de código (apenas de 1 dos ítens) para eu entender e fazer com os demais?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Putz cara... é um dropdown.. =X

 

isso significa que para fazer com server-side.. vai dar mais trabalho do que com css.. mas tudo bem...

<?php
	$pag = $_GET['pagina'];
	if( $pag=='principal' || $pag=='' )
		$pagina_principal=' class="selecionado" ';
	else if( $pag=='=historia-da-empresa' || $pag=='nossos-objetivos-e-valores' 
		|| $pag=='organizacao-gerencial' || $pag=='responsabilidade-social-e-ambiental' )
		$sobre_nos=' class="selecionado" ';
?>	
	<ul class="principal"> 
		<li id="first" <?php echo $pagina_principal; ?>><a href="?pagina=principal"><span>PÁGINA PRINCIPAL</span></a> 
        </li> 
		<li><a href="#"><span>A EMPRESA</span></a> 
			<ul class="nivel2"> 
				<li <?php echo $sobre_nos; ?>><a href="#" class="submenu">Sobre nós</a> 
					<ul class="nivel3"> 
						<li><a href="?pagina=historia-da-empresa">Nossa História</a></li> 
						<li><a href="?pagina=nossos-objetivos-e-valores">Objetivos e valores</a></li> 
						<li><a href="?pagina=organizacao-gerencial">Organização</a></li> 
   						<li><a href="?pagina=responsabilidade-social-e-ambiental">Responsabilidades</a></li> 
					</ul> 
				</li>
ou seja, você terá que testar com ifs, se algum dos itens do submenu, está na URL.. se estiver.. você atribui à varável que eu coloquei nos LI, a classe... separei dessa forma, para ficar menos poluído.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.