Esto me ha estado molestando por un tiempo y me pregunto si hay algún consenso sobre cómo hacerlo correctamente. Cuando estoy usando una lista HTML, ¿cómo incluyo semánticamente un encabezado para la lista?
Una opción es esta:
<h3>Fruits I Like:</h3>
<ul>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
pero semánticamente el <h3>
encabezado no está explícitamente asociado con el<ul>
Otra opción es esta:
<ul>
<li><h3>Fruits I Like:</h3></li>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
pero esto parece un poco sucio, ya que el título no es realmente uno de los elementos de la lista.
Esta opción no está permitida por el W3C:
<ul>
<h3>Fruits I Like:</h3>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
como <ul>
's sólo pueden contener uno o más <li>
' s
El antiguo "título de lista" <lh>
tiene más sentido
<ul>
<lh>Fruits I Like:</lh>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
pero, por supuesto, no forma parte oficialmente de HTML
Escuché que sugirió que usemos <label>
como un formulario:
<ul>
<label>Fruits I Like:</label>
<li>Apples</li>
<li>Bananas</li>
<li>Oranges</li>
</ul>
pero esto es un poco extraño y no se validará de todos modos.
Es fácil ver los problemas semánticos al intentar diseñar los encabezados de mi lista, donde termino necesitando poner mis <h3>
etiquetas dentro de la primera <li>
y apuntar a ellas para diseñar con algo como:
ul li:first-of-type {
list-style: none;
margin-left: -1em;
/*some other header styles*/
}
horrores! Pero al menos de esta manera puedo controlar todo <ul>
, el encabezado y todo, diseñando la ul
etiqueta.
¿Cuál es la forma correcta de hacer esto? ¿Algunas ideas?
fuente
Respuestas:
Como ya ha dicho Felipe Alsacreations, la primera opción está bien.
Si desea asegurarse de que nada debajo de la lista se interprete como perteneciente al encabezado, para eso son exactamente los elementos de contenido de secciones de HTML5. Entonces, por ejemplo, podrías hacer
fuente
<h1>
dentro de,<section>
ya que es el encabezado de nivel superior dentro de esas etiquetas.<h1>
allí, seguro. Pero también<h3>
está bien. Siempre que no use un encabezado de nivel superior dentro de la misma sección.En este caso, usaría una lista de definiciones de la siguiente manera:
fuente
Tu primera opción es la buena. Es la menos problemática y ya ha encontrado las razones correctas por las que no puede usar las otras opciones.
Por cierto, su encabezado ESTÁ asociado explícitamente con
<ul>
: ¡está justo antes de la lista! ;)editar: Steve Faulkner, uno de los editores de W3C HTML5 y 5.1 ha esbozado una definición de un
lt
elemento . Es un borrador no oficial que discutirá para HTML 5.2, nada más todavía.fuente
<p>
. Pero aún me gustaría algo un poco más explícito, algo así como elfor
atributo de un<label>' or the
<th> `para tablas. Creo que la<lh>
opción tendría más sentido si fuera compatible con el W3C.un <div> es una división lógica en su contenido, semánticamente esta sería mi primera opción si quisiera agrupar el encabezado con la lista:
entonces puede usar el siguiente CSS para diseñar todo junto como una unidad
fuente
También puede usar el
<figure>
elemento para vincular un encabezado a su lista como este:Fuente: https://www.w3.org/TR/2017/WD-html53-20171214/single-page.html#the-li-element (Ejemplo 162)
fuente
Intente definir una nueva clase, ulheader, en css. p.ulheader ~ ul selecciona todo lo que sigue inmediatamente a My Header
fuente
Según w3.org (tenga en cuenta que este enlace está en el borrador de la especificación HTML 3.0 caducado hace mucho tiempo ):
fuente
HTML 3.0
Vaya, es un documento muy antiguo.Pongo el título dentro de la ul. No hay ninguna regla que diga que UL debe contener solo elementos LI.
fuente