Categorias
Projetos

Melhor forma para listas com caption?

Lista com caption, lista com label, lista com título, listas com agrupamento de itens… Independentemente de como você chama, se você é do front end, com certeza vai ter que implementar isso algum dia.

E, das diversas possibilidades de se chegar ao resultado final, será esta a que vamos mostrar agora a melhor de todas?

Prover uma lista com caption semanticamente relevante e de olho na acessibilidade é algo bem interessante, e esses são alguns dos pontos fortes dessa técnica para menus com label.

Em diversas situações de UI, é preciso fornecer listas com separação por tópicos (na prática, algo como sublistas, mas listado tudo de uma vez), e é justamente esse componente visual que você vai aprender a fazer.

E, dentre as diversas técnicas que possibilitam isso — como menus aninhados; tag de título antes da tag de lista; lista de definição (que, semanticamente, serve para outra coisa) —, essa vai te surpreender pela simplicidade e por respeitar semântica e a11y.

Lista com caption/label: HTML

Comentamos que os pontos fortes dessa técnica, além de sua simplicidade, é ela ser feita respeitando a semântica HTML de lista e acessibilidade.

Para tanto, o HTML é bastante dentro do comum; nada de especial é preciso ser feito, podendo ser codado algo mais ou menos como:

<ul class="c-list">
<li class="c-list__item">
<a href="#" class="c-list__link">Item 1</a>
</li>
<li class="c-list__item">
<a href="#" class="c-list__link">Item 2</a>
</li>
<li class="c-list__item">
<a href="#" class="c-list__link">Item 3</a>
</li>
<li class="c-list__item">
<a href="#" class="c-list__link">Item 4</a>
</li>
</ul>

Aliás, vai ser preciso colocar algo diferentinho, sim. Mas não se preocupe, é um pouco diferente, mas, ainda assim, bastante comum: um atributo data-.

Então, logo na próprio tag <ul>, altere para o seguinte:

<ul class="c-list" data-title="Options Alpha">

Se você está se perguntando para o quê isso vai ser e como é possível aproveitar atributos data- no CSS, então agora você vai ter uma bela surpresa!

Lista com caption/label: CSS

Para começar, vamos nos valer de Variáveis CSS para definir algumas cores que serão usadas para a estilização do menu com caption:

:root {
--color-white: #fafafa;
--color-purple: #7209b7;
--color-purple-light: #c782e2;
--color-turquoise: #4cc9f0;
}

Toda a parte visual que estamos mostrando é para o exemplo de implementação da técnica de menus com label; obviamente, você irá colocar o CSS conforme seja necessário em seu projeto.

Tendo essas cores definidas, é possível passar à estilização:

.c-list {
background-color: var(--color-purple);
list-style-type: none;
margin: 0;
padding: 0;
&__link {
color: var(--color-white);
display: block;
padding: 20px;
padding-left: 40px;
text-decoration: none;
&:hover {
background-color: var(--color-turquoise);
color: var(--color-purple);
}
}
}

Atente-se que estamos usando Sass para a estilização. Se você tentar usar aninhamento com CSS puro, não vai funcionar.

Se não souber muito bem o que é Sass e/ou tiver dúvidas quanto a se uso, confira nosso artigo com o básico de Sass para se virar nas webs.

Agora, a cereja do bolo:

&::before {
color: var(--color-purple-light);
content: attr(data-title);
display: inline-block;
text-transform: uppercase;
padding: 20px 20px 15px 20px;
}

A criação de um pseudo-elemento ::before que vai mostrar o valor de data-title através de [attr()](https://developer.mozilla.org/pt-BR/docs/Web/CSS/attr).

Com isso, ao se adicionar múltiplas listas, uma seguida da outra, o visual mostrado é de uma lista com caption/label dentro dos parâmetros prometidos: com simplicidade e respeitando semântica e a11y.

Resultado final da implementação de lista com caption/label

Confira o resultado final ao vivo:

Conclusão

Em webdev, há sempre diversas maneiras para se chegar a resultados de UI. Todas as abordagens tem suas vantagens e desvantagens; cabe a você decidir qual vai usar na sua implementação específica.

Certamente a técnica que mostramos para listas com caption será um adendo valioso em seu arsenal de possibilidades, o que vai ajudar bastante nas tomadas de decisão sempre que for necessário implementar este tipo de lista.

E aí, já teve que implementar uma lista com labels assim? Qual técnica você usou e o que tem a dizer sobre isso? Conta pra gente nos comentários!