Isso tem me incomodado por um tempo e estou me perguntando se há algum consenso sobre como fazer isso da maneira correta. Quando estou usando uma lista HTML, como posso incluir semanticamente um cabeçalho para a lista?
Uma opção é esta:
<h3>Fruits I Like:</h3>
<ul>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
mas semanticamente o <h3>
título não está explicitamente associado ao<ul>
Outra opção é esta:
<ul>
<li><h3>Fruits I Like:</h3></li>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
mas isso parece um pouco sujo, pois o título não é realmente um dos itens da lista.
Esta opção não é permitida pelo W3C:
<ul>
<h3>Fruits I Like:</h3>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
as <ul>
's só podem conter um ou mais <li>
' s
O antigo "cabeçalho da lista" <lh>
faz mais sentido
<ul>
<lh>Fruits I Like:</lh>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
mas é claro que não faz parte oficial do HTML
Já ouvi a sugestão de usar <label>
como um formulário:
<ul>
<label>Fruits I Like:</label>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
mas isso é um pouco estranho e não validará de qualquer maneira.
É fácil ver os problemas semânticos ao tentar estilizar os cabeçalhos da minha lista, onde acabo precisando colocar minhas <h3>
tags dentro do primeiro <li>
e direcioná-las para estilização com algo como:
ul li:first-of-type {
list-style: none;
margin-left: -1em;
/*some other header styles*/
}
horrores! Mas, pelo menos dessa forma, posso controlar o todo <ul>
, título e tudo, estilizando a ul
tag.
Qual é a maneira correta de fazer isso? Alguma ideia?
fonte
Respostas:
Como já disse Felipe Alsacreations, a primeira opção é boa.
Se você quiser garantir que nada abaixo da lista seja interpretado como pertencente ao título, é exatamente para isso que servem os elementos de conteúdo de seccionamento HTML5. Então, por exemplo, você poderia fazer
fonte
<h1>
dentro de<section>
, pois é o título de nível superior dentro dessas tags.<h1>
lá, com certeza. Mas também<h3>
está bom. Contanto que você não use um título de nível superior na mesma seção.Nesse caso, eu usaria uma lista de definições da seguinte forma:
fonte
Sua primeira opção é a boa. É o menos problemático e você já encontrou os motivos corretos pelos quais não poderia usar as outras opções.
A propósito, seu título ESTÁ explicitamente associado ao
<ul>
: está logo antes da lista! ;)editar: Steve Faulkner, um dos editores do W3C HTML5 e 5.1 esboçou uma definição de um
lt
elemento . Esse é um rascunho não oficial que ele discutirá para HTML 5.2, nada mais ainda.fonte
<p>
. Mas eu ainda gostaria de algo um pouco mais explícito, algo como ofor
atributo de um<label>' or the
<th> `para tabelas. Acho que a<lh>
opção faria mais sentido se fosse realmente suportada pelo W3C.um <div> é uma divisão lógica em seu conteúdo, semanticamente esta seria minha primeira escolha se eu quisesse agrupar o título com a lista:
então você pode usar o seguinte css para estilizar tudo junto como uma unidade
fonte
Você também pode usar o
<figure>
elemento para vincular um título à sua lista, como este:Fonte: https://www.w3.org/TR/2017/WD-html53-20171214/single-page.html#the-li-element (Exemplo 162)
fonte
Tente definir uma nova classe, ulheader, em css. p.ulheader ~ ul seleciona tudo o que segue imediatamente Meu cabeçalho
fonte
De acordo com w3.org (observe que este link está na especificação HTML 3.0 de rascunho há muito expirada ):
fonte
HTML 3.0
Uau, esse é um documento muito antigo.Coloquei o cabeçalho dentro do ul. Não há nenhuma regra que diga que UL deve conter apenas elementos LI.
fonte