Introdução
As interfaces de usuário (UI) são fundamentais para a interação entre os usuários e as aplicações web. Uma UI bem projetada não apenas facilita o uso da aplicação, mas também melhora significativamente a experiência do usuário. O CSS, ou Cascading Style Sheets, é uma ferramenta poderosa na criação de interfaces visuais atraentes e funcionais. Um dos recursos mais interessantes e frequentemente subutilizados do CSS é a pseudo-classe :target. Este artigo explora em profundidade como criar interfaces de usuário dinâmicas e interativas usando a pseudo-classe :target em CSS.
O que é a Pseudo-Classe :target?

A pseudo-classe :target em CSS é usada para selecionar o elemento que corresponde ao identificador de fragmento (hash) na URL. Quando um elemento é “atingido” por um identificador de fragmento, ele se torna o “alvo” e o CSS pode estilizar esse elemento de forma específica.
Exemplo básico:
html<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.content {
display: none;
}
.content:target {
display: block;
}
</style>
<title>Pseudo-Classe target</title>
</head>
<body>
<a href="#section1">Seção 1</a>
<a href="#section2">Seção 2</a>
<a href="#section3">Seção 3</a>
<div id="section1" class="content">
<h2>Seção 1</h2>
<p>Conteúdo da Seção 1</p>
</div>
<div id="section2" class="content">
<h2>Seção 2</h2>
<p>Conteúdo da Seção 2</p>
</div>
<div id="section3" class="content">
<h2>Seção 3</h2>
<p>Conteúdo da Seção 3</p>
</div>
</body>
</html>
Neste exemplo, quando o usuário clica em um dos links, o conteúdo associado é exibido na página. A pseudo-classe :target torna possível alternar entre diferentes seções de conteúdo sem a necessidade de JavaScript.
Usos Práticos da Pseudo-Classe :target em UIs
Navegação em Páginas de Âncoras
Um dos usos mais comuns da pseudo-classe :target é em sistemas de navegação de uma página, onde os usuários podem clicar em links que os levam a diferentes seções da mesma página. Isso é particularmente útil para sites de portfólio, páginas de aterrissagem (landing pages) e sites de uma página.
Exemplo de Implementação:
html<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
nav a {
padding: 10px;
text-decoration: none;
color: #333;
border: 1px solid #ccc;
margin-right: 5px;
}
.section {
height: 100vh;
padding: 20px;
border-bottom: 1px solid #ddd;
}
.section:target {
background-color: #f0f0f0;
}
</style>
<title>Navegação com target</title>
</head>
<body>
<nav>
<a href="#home">Home</a>
<a href="#about">Sobre</a>
<a href="#services">Serviços</a>
<a href="#contact">Contato</a>
</nav>
<div id="home" class="section">
<h2>Home</h2>
<p>Bem-vindo ao nosso site.</p>
</div>
<div id="about" class="section">
<h2>Sobre</h2>
<p>Informações sobre a empresa.</p>
</div>
<div id="services" class="section">
<h2>Serviços</h2>
<p>O que oferecemos.</p>
</div>
<div id="contact" class="section">
<h2>Contato</h2>
<p>Entre em contato conosco.</p>
</div>
</body>
</html>
Neste exemplo, ao clicar em qualquer um dos links de navegação, a seção correspondente na página ganha destaque visual, indicando ao usuário que ele está naquela seção específica.
Tabs Sem JavaScript
Outra aplicação interessante da pseudo-classe :target é a criação de sistemas de abas (tabs) sem o uso de JavaScript. Isso é útil para sites que precisam ser rápidos e leves, mas que ainda exigem uma interface de usuário rica.
Exemplo de Implementação:
html<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.tab-content {
display: none;
}
.tab-content:target {
display: block;
}
.tabs a {
padding: 10px;
text-decoration: none;
color: #fff;
background-color: #007bff;
margin-right: 5px;
border-radius: 5px;
}
.tabs a:target {
background-color: #0056b3;
}
</style>
<title>Tabs com target</title>
</head>
<body>
<div class="tabs">
<a href="#tab1">Tab 1</a>
<a href="#tab2">Tab 2</a>
<a href="#tab3">Tab 3</a>
</div>
<div id="tab1" class="tab-content">
<h2>Conteúdo da Tab 1</h2>
<p>Este é o conteúdo da primeira aba.</p>
</div>
<div id="tab2" class="tab-content">
<h2>Conteúdo da Tab 2</h2>
<p>Este é o conteúdo da segunda aba.</p>
</div>
<div id="tab3" class="tab-content">
<h2>Conteúdo da Tab 3</h2>
<p>Este é o conteúdo da terceira aba.</p>
</div>
</body>
</html>
Aqui, cada aba é associada a uma seção específica. Ao clicar em uma aba, o conteúdo correspondente é exibido, e as outras abas permanecem ocultas.
Galeria de Imagens
Outra aplicação interessante da pseudo-classe :target é na criação de galerias de imagens onde o usuário pode navegar entre diferentes imagens clicando em miniaturas.
Exemplo de Implementação:
html<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.gallery {
display: flex;
justify-content: space-around;
margin-bottom: 20px;
}
.gallery a {
border: 1px solid #ccc;
padding: 5px;
cursor: pointer;
}
.gallery img {
width: 100px;
height: 100px;
object-fit: cover;
}
.display {
width: 100%;
text-align: center;
}
.display img {
max-width: 100%;
height: auto;
display: none;
}
.display img:target {
display: block;
}
</style>
<title>Galeria de Imagens com target</title>
</head>
<body>
<div class="gallery">
<a href="#img1"><img src="img1.jpg" alt="Imagem 1"></a>
<a href="#img2"><img src="img2.jpg" alt="Imagem 2"></a>
<a href="#img3"><img src="img3.jpg" alt="Imagem 3"></a>
</div>
<div class="display">
<img id="img1" src="img1.jpg" alt="Imagem 1">
<img id="img2" src="img2.jpg" alt="Imagem 2">
<img id="img3" src="img3.jpg" alt="Imagem 3">
</div>
</body>
</html>
Neste exemplo, a pseudo-classe :target é usada para exibir a imagem clicada em tamanho maior na seção de exibição. Isso é útil para criar uma galeria de imagens simples sem o uso de JavaScript.
Vantagens e Desvantagens de Usar :target
Vantagens
-
Sem JavaScript Necessário: A pseudo-classe
:targetpermite criar interatividade sem a necessidade de escrever código JavaScript, o que pode simplificar o desenvolvimento e reduzir o tempo de carregamento da página. -
Compatibilidade:
:targeté amplamente suportado nos navegadores modernos, tornando-o uma opção segura para criar interatividade básica. -
SEO-Friendly: Como
:targetdepende de hashes na URL, ele não afeta a acessibilidade ou o SEO da página, tornando-o uma opção amigável para motores de busca.
Desvantagens
-
Limitações Funcionais: Embora seja poderoso para casos simples,
:targettem limitações em termos de funcionalidade avançada. Por exemplo, ele não pode ser usado para manipular estados de componentes complexos ou para animações avançadas. -
Dependência da URL: A pseudo-classe
:targetdepende da manipulação de hashes na URL, o que pode não ser ideal para todos os tipos de aplicação. Além disso, a navegação entre diferentes “targets” gera histórico no navegador, o que pode não ser o comportamento desejado. -
Estilo Limitado: A customização dos estilos para o elemento
:targetpode ser limitada em comparação com o que pode ser alcançado usando JavaScript e CSS juntos.
Exemplos Avançados de Uso de :target
Sistema de Modal Dinâmico
Uma aplicação avançada da pseudo-classe :target é a criação de modais (caixas de diálogo) dinâmicos. Modais são elementos flutuantes usados para exibir informações ou capturar entradas do usuário, e são comuns em muitos tipos de interfaces.
Exemplo de Implementação:
html<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.modal {
display: none;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 300px;
background-color: #fff;
padding: 20px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
z-index: 1000;
}
.modal:target {
display: block;
}
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
display: none;
z-index: 999;
}
.overlay:target {
display: block;
}
.close {
display: block;
text-align: right;
}
</style>
<title>Modal com target</title>
</head>
<body>
<a href="#modal1">Abrir Modal 1</a>
<a href="#modal2">Abrir Modal 2</a>
<div id="modal1" class="modal">
<div class="close"><a href="#">Fechar</a></div>
<p>Este é o conteúdo do Modal 1.</p>
</div>
<div id="modal2" class="modal">
<div class="close"><a href="#">Fechar</a></div>
<p>Este é o conteúdo do Modal 2.</p>
</div>
<div id="overlay" class="overlay"></div>
</body>
</html>
Este exemplo usa :target para abrir e fechar modais dinamicamente. Ao clicar em um link, o modal correspondente é exibido, e o usuário pode fechar o modal clicando no link de fechamento.
Criação de Slideshows
Outra aplicação interessante da pseudo-classe :target é a criação de slideshows onde cada slide é um “target” diferente.
Exemplo de Implementação:
html<!DOCTYPE html>
<html lang="pt">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.slideshow {
width: 100%;
max-width: 600px;
margin: 0 auto;
position: relative;
}
.slide {
display: none;
}
.slide:target {
display: block;
}
.navigation {
text-align: center;
margin-top: 10px;
}
.navigation a {
text-decoration: none;
padding: 10px;
background-color: #007bff;
color: #fff;
margin: 0 5px;
border-radius: 5px;
}
</style>
<title>Slideshow com target</title>
</head>
<body>
<div class="slideshow">
<div id="slide1" class="slide">
<img src="slide1.jpg" alt="Slide 1">
</div>
<div id="slide2" class="slide">
<img src="slide2.jpg" alt="Slide 2">
</div>
<div id="slide3" class="slide">
<img src="slide3.jpg" alt="Slide 3">
</div>
</div>
<div class="navigation">
<a href="#slide1">1</a>
<a href="#slide2">2</a>
<a href="#slide3">3</a>
</div>
</body>
</html>
Este exemplo mostra como criar um slideshow simples com :target, onde o usuário pode navegar entre diferentes slides clicando nos botões de navegação.
Considerações Finais
A pseudo-classe :target é uma ferramenta versátil no arsenal do desenvolvedor web, oferecendo uma maneira simples e eficaz de adicionar interatividade às interfaces de usuário sem a necessidade de JavaScript. Embora tenha suas limitações, ela pode ser extremamente útil em projetos onde a simplicidade e a performance são prioridades.
O uso da pseudo-classe :target deve ser considerado no contexto de cada projeto. Para interfaces mais complexas, pode ser necessário combinar :target com outras tecnologias, como JavaScript, para alcançar o resultado desejado. No entanto, para muitos casos de uso, :target oferece uma solução elegante e eficiente.
Em um cenário onde a performance e a simplicidade são cruciais, como em páginas de aterrissagem ou sites estáticos, :target pode ser a escolha ideal. Além disso, o fato de ser nativamente suportado por todos os navegadores modernos significa que sua implementação é direta e sem complicações.
Explorar a pseudo-classe :target em diferentes contextos pode abrir novas possibilidades para designs criativos e funcionais, melhorando a experiência do usuário e criando interfaces mais dinâmicas e envolventes.
“Mais Informações”


