Menu

Listas em HTML: marcadores, listas ordenadas e aninhadas

Como fazer listas em HTML: marcadores com <ul>, listas numeradas com <ol> (start, reversed, letras e algarismos romanos), listas aninhadas, listas de descrição e como estilizar ou remover os marcadores com CSS.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Listas em HTML: ul, ol e li

O HTML tem duas listas principais. <ul> (unordered list, lista não ordenada) mostra marcadores, e <ol> (ordered list, lista ordenada) mostra números. Cada item é um <li> (list item).

Use <ol> quando a ordem significa algo (passos, rankings, um sumário) e <ul> quando não significa. Os leitores de tela anunciam as duas como listas com uma contagem, como "lista, 3 itens", e por isso uma lista de verdade é melhor que linhas que começam com um "•" ou "1." digitado.

Uma lista só pode conter elementos <li> diretamente. Todo o resto, inclusive títulos, parágrafos e outras listas, vai dentro de um <li>.

Estilos de marcador

list-style-type no <ul> muda o marcador. O pseudo-elemento ::marker estiliza o próprio marcador ou número, separado do texto:

Um valor em string usa esse texto como marcador. "\2713 " é um sinal de visto seguido de um espaço: o primeiro espaço só encerra o escape \2713. ::marker aceita poucas propriedades, principalmente color, font-size e outras propriedades de fonte, o que cobre o pedido comum de "marcadores coloridos" sem marcação extra.

Listas ordenadas: números, letras e algarismos romanos

<ol> tem atributos para a numeração:

AtributoExemploResultado
typetype="a"a, b, c (A, i, I e 1 também funcionam)
startstart="5"Começa a contar em 5
reversedreversedConta de trás para frente
value (no <li>)<li value="10">Este item é o 10, os próximos continuam a partir daí

type faz sentido no HTML porque as letras podem ter significado ("escolha a opção B"). Para mudanças só visuais, o CSS list-style-type: upper-alpha ou lower-roman faz o mesmo.

Listas aninhadas

Uma sublista vai dentro do <li> a que pertence, depois do texto desse item. Os navegadores mudam o marcador a cada nível: disco, depois círculo, depois quadrado.

Repare onde fica o </li>: o item "Frontend" só fecha depois da sua sublista. Fechá-lo antes do <ul> coloca a sublista direto dentro do <ul> externo, o que é inválido mesmo parecendo quase igual.

Listas ordenadas se aninham do mesmo jeito, e a numeração recomeça em 1 em cada sublista. Para números como 1.1 e 1.2, são necessários contadores CSS.

Listas de descrição: dl, dt e dd

Uma lista de descrição forma pares de termos e descrições: um glossário, os detalhes de um pedido, pares no estilo de perguntas frequentes. <dt> é o termo e <dd> a descrição:

Um termo pode ter vários <dd>, e vários <dt> podem compartilhar um <dd>. Os navegadores recuam o <dd> por padrão; a regra margin acima remove esse recuo. Para dados com várias colunas, uma tabela é mais adequada.

Listas sem marcadores: menus e listas horizontais

Menus de navegação são listas de links. Remova os marcadores com list-style: none e o recuo com padding: 0, e depois coloque os itens em linha com flexbox:

Para os leitores de tela, a lista continua sendo uma lista ("navegação, lista, 3 itens"). Uma exceção: o Safari com VoiceOver pode deixar de tratá-la como lista quando os marcadores são removidos. Se a contagem importa para os seus usuários, adicione role="list" ao <ul>.

Espaçamento padrão

Os navegadores dão às listas uma margem superior e inferior de 1em e as recuam com padding-inline-start: 40px, que é onde ficam os marcadores. O padding fica no lado inicial, então em idiomas da direita para a esquerda os marcadores e o recuo passam para o outro lado automaticamente. Remova o padding e os marcadores vão para fora da caixa da lista, onde podem ser cortados; mantenha algum padding ou use list-style-position: inside.

Erros comuns

  • <li> sem uma lista pai. Ele precisa estar dentro de <ul>, <ol> ou <menu>.
  • Uma lista aninhada fora do seu <li>. Coloque a sublista dentro do item a que ela pertence.
  • Texto ou outras tags direto dentro de <ul>, como <ul><p>Note</p><li>...</li></ul>. Leve para dentro de um <li> ou para fora da lista.
  • Digitar marcadores ou números à mão com • e <br>. Os leitores de tela ouvem um parágrafo, não uma lista.
  • list-style: none sem padding: 0, deixando um misterioso recuo de 40 pixels.
  • Usar <ol> pela aparência. Se a ordem não importa, use <ul> e estilize.

Perguntas frequentes

Como fazer uma lista com marcadores no HTML?

Use uma lista não ordenada: <ul> com um <li> para cada item, por exemplo <ul><li>Milk</li><li>Eggs</li></ul>. O navegador desenha um marcador antes de cada item e recua a lista.

Qual a diferença entre ul e ol?

<ul> é uma lista não ordenada, mostrada com marcadores, para itens cuja ordem não importa. <ol> é uma lista ordenada, mostrada com números, para passos e rankings em que a ordem importa. As duas contêm itens <li>.

Como tirar os marcadores de uma lista no HTML?

Defina list-style: none no <ul> pelo CSS. Defina também padding-inline-start: 0 (ou padding: 0) para remover o recuo que o navegador adiciona para os marcadores.

Como começar uma lista ordenada em outro número?

Use o atributo start: <ol start="5"> numera o primeiro item como 5. reversed conta de trás para frente, e value num <li> define o número desse item e dos seguintes.

Como fazer uma lista dentro de outra no HTML?

Coloque o <ul> ou <ol> interno dentro de um <li> da lista externa, depois do texto desse item. Uma lista colocada direto dentro de outro <ul>, entre elementos <li>, é inválida.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR