Categories: CSSphptodas

Destacar link para página corrente

As boas práticas do desenvolvimento web preconizam, entre outras técnicas, que se forneça ao usuário um meio rápido de identificação da página onde ele se encontra. Tal técnica é conhecida como: iluminar a página atual ou destacar a página corrente.

O método consagrado para destacar a página corrente consiste em estilizar de modo diferente o link do menu de navegação que aponta para ela e adicionalmente retirar a funcionalidade de visualizar o cursor indicativo de link (uma “mãozinha” – ) quando o usuário coloca o ponteiro do mouse sobre o link para a página corrente.

Neste tutorial vamos estudar duas técnicas que permitem obter o efeito de destaque para o link da página corrente conforme mostrado na figura, na qual apresentamos um menu de navegação com quatro links com o usuário visualizando a Página um.

Vamos concentrar nosso raciocínio no fato de que para estilizar de modo diferente um dos links do menu temos que descobrir um meio de atribuir um identificador id ou uma classe class única e exclusiva para o link que aponta para a página corrente. Existem duas maneiras distintas para se atingir o objetivo: com CSS e com linguagem de programação dinâmica. Vejamos as duas:

Destacar com CSS

Para identificar de forma única cada uma das páginas de um menu de navegação podemos atribuir um id ou uma class ao elemento body da página.

De forma semelhante, para identificar de forma única cada um dos links do menu de navegação podemos atribuir um id ou uma class ao elemento a do menu.

Observe o código a seguir:

...
<body id="pagina-um">
...
<ul id="nav">
<li><a href="home.html" id="ho">Home</a></li>
<li><a href="pagina-um.html" id="p1">Página um</a></li>
<li><a href="pagina-dois.html" id="p2">Página dois</a></li>
<li><a href="pagina-tres.html" id="p3">Página três</a></li>
</ul>
...

Notar que atribuimos o id="pagina-um" para o elemento body da Página um, bem como atribuimos id's para cada um dos elementos a do menu.

Assim, se quisermos estilizar exclusivamente o link que aponta para a Página um usamos o seletor CSS body#pagina-um #nav li a#p1 e nosso problema está resolvido!

Observe as regras CSS completas para destacar a página corrente do menu exemplo deste tutorial:

body#home a#ho, body#pagina-um a#p1,
body#pagina-dois a#p2, body#pagina-tres a#p3 {
 cursor: default;
 border-left: 10px solid #3172d5;
 border-right: 10px solid #c1d5f2;
 background-color: #6f9ce2;
 color: #fff;
 }

Notar a presença da declaração para estilizar o cursor.

Ver o exemplo funcionando on-line. (abre em outra janela)
Não esqueça de inspecionar o código-fonte das páginas.

Destacar com PHP

Usaremos PHP para demonstrar a outra maneira para destacar o link corrente.

A técnica com uso de programação consiste em se inserir dinamicamente um identificador no elemento a que aponta para a página corrente, sem necessidade de identificadores para o elemento body e para cada um dos links do menu.

Uma das funcionalidades nativas do PHP fornece um array de variáveis predefinidas conhecido como super globais. Uma destas variáveis é o caminho absoluto, em relação à raiz do site, da página corrente e que pode ser recuperado com a declaração $_SERVER['SCRIPT_NAME'].

Por exemplo: Considere uma página web denominada pagina-um.php hospedada no subdiretorio denominado layout do diretório denominado tutorial do site http://www.maujor.com. Ou seja, o endereço completo da página é: http://www.maujor.com/tutorial/layout/pagina-um.php.

Neste caso a variável $_SERVER['SCRIPT_NAME'] retornará /tutorial/layout/pagina-um.php.

Para extrair o nome do arquivo usaremos a função nativa do PHP denominada basename(). Fazendo basename($_SERVER['SCRIPT_NAME']) iremos obter pagina-um.php. Agora, tendo o nome do arquivo, fica fácil incluir dinamicamente uma classe denominada corrente no link da página atual como mostrado a seguir:

...
...
...
<?php $paginaCorrente = basename($_SERVER['SCRIPT_NAME']);?>
<ul id="nav">
<li><a href="home.php" <?php if($paginaCorrente == 'home.php') {echo 'class="corrente"';} ?>>Home</a></li>
<li><a href="pagina-um.php" <?php if($paginaCorrente == 'pagina-um.php') {echo 'class="corrente"';} ?>>Página um</a></li>
<li><a href="pagina-dois.php" <?php if($paginaCorrente == 'pagina-dois.php') {echo 'class="corrente"';} ?>>Página dois</a></li>
<li><a href="pagina-tres.php" <?php if($paginaCorrente == 'pagina-tres.php') {echo 'class="corrente"';} ?>>Página três</a></li>
</ul>
...

Observe as regras CSS completas para destacar a página corrente do menu exemplo deste tutorial:

#nav li a.corrente {
 cursor: default;
 border-left: 10px solid #3172d5;
 border-right: 10px solid #c1d5f2;
 background-color: #6f9ce2;
 color: #fff;
 }

Notar a presença da declaração para estilizar o cursor.

Ver o exemplo funcionando on-line. (abre em outra janela)
Não esqueça de inspecionar o código-fonte das páginas.

Maujor

View Comments

  • Sua dica ajudou bastante o programador aqui do site.

  • este codigo funciona no Chrome, no edge, IE.. mas não funciona no Firefox?

    <a href="../rbel.php" >RBEL

  • Código bastante objetivo e explicação sem enrolação. Muito obrigado pelo apoio.

  • Aonde eu insiro este código? Style.css?
    No meu site não há nenhum tipo de código parecido
    to perdido precisava disso funcionando

  • Desta maneira o código funciona perfeitamente.

    <a title="" class="" href="home.php">Home

  • Obrigado pela informação. Infelizmente meu problema era parecido com o do Nilson.
    Vou continuar acompanhando o site, achei ele bem completo.
    Parabéns pelo post.

  • Isso que eu temia..

    Pense que existiria alguma forma de identificar a URL..
    mas, muito obrigado mesmo pelas suas dicas e Tutoriais

    Parabéns pelo trabalho

Share
Published by
Maujor

Recent Posts

Teste seu conhecimento #20

Em 2006 comecei a publicar nesse blog uma série de desafios CSS que consistiam em…

7 anos ago

Teste seu conhecimento #19

Há muito tempo que eu não publico um "Teste seu conhecimento". Esta semana, revendo algumas…

10 anos ago

JavaScript bubbling e capturing

Introdução Elementos da marcação HTML podem ser aninhados uns dentro de outros, criando-se uma cadeia…

10 anos ago

HTML5 – W3C versus WHATWG

HTML5? Web universal? É comum eu me deparar com dúvidas sobre a HTML5 não só…

10 anos ago

Seria esse o futuro das imagens responsivas?

Quem é Tab Atkins Jr? Tab Atkins Jr, um desenvolvedor americano, trabalhou durante muitos anos…

11 anos ago

BrazilJS Conf 2013

Pessoal, a BrazilJS Conf 2013 disponibilizou para o Maujor cupons de desconto para serem oferecidos…

11 anos ago