2010-07-07 5 views
10

Parece que html (estricto) no permite anidar ningún elemento no en línea dentro de un <p>, pero ¿cómo se supone que debo representar un párrafo que contiene una lista (algo que ocurre a menudo en textos naturales). He visto tres respuestas que parecen insatisfactorias:Nida listas en párrafos en html

  • Las listas no deben aparecer dentro de los párrafos. (No voy a entrar en un debate cultural, pero ciertamente espero que html no se convierta en el lugar para dictar el estilo de escritura.)
  • Separe el texto en un párrafo, luego en una lista y luego en un segundo párrafo con el post-texto. Esto se ve mal porque ahora tengo <p> fragmentos que son partes de párrafos, y eso parece malo para un marcado que está tratando de moverse en una dirección más semántica.
  • Falsos párrafos usando <div class="mypara"> - que parece una mala forma de eludir todo y renunciar al uso del marcado con la semántica adecuada para el texto.

¿Hay alguna otra forma de hacer esto que sea semánticamente correcta y válida?

+0

+1 por señalar el de obra común alrededor de este problema. El problema es aún más visible cuando utiliza una lista en el medio de una oración para enfatizar su estructura, ya que dividir una oración en diferentes párrafos es definitivamente semánticamente incorrecta. P.ej. "Quiero comprar [enumerar] • leche, • azúcar, • manzana y • una viola [/ list] hoy." Esto se usa comúnmente al componer texto con TeX. – Palec

Respuesta

9

Los párrafos en HTML 5, a partir del borrador de trabajo más reciente, se definen como elementos de flujo que pueden contener solo elementos de fraseo. Las listas también se definen como elementos de flujo y no pueden incluirse en los párrafos. Independientemente de lo que piense que debería ser la definición de párrafo, esta es la definición formal del término en HTML, y creo que es poco probable que cambie.

Hay dos posibilidades que usted podría considerar además de los dos que usted ha mencionado:

  • consideramos que alcanza para un elemento de flujo más amplio alcance que el párrafo si se aplica, como section, nav, header, footer, o article.
  • Utilice un enfoque híbrido: ajuste la secuencia p – ol – p con un div de su elección que aplique un formato común al conjunto.

En lo que va div, la especificación HTML 5 recomienda claramente que debe ser un elemento de "último recurso", ya que no lleva el significado semántico de la manera que lo hacen otros elementos HTML, y puede que no sea tan fácil de usar en agentes de usuario alternativos. Siguiendo este consejo, no usaría div con el costo de p para el texto del cuerpo si la semántica es importante para usted. Sin embargo, puede ser útil para asegurarse de que el uso de varios párrafos no se vuelva demasiado entrecortado visualmente.

+0

La situación a la que me enfrento es a un sistema para generar HTML, y parece que la mejor opción en este caso es usar 'div's. Aparte de eso, la sugerencia de usar las etiquetas más amplias parece una buena idea también. – Zee

3

No creo que la etiqueta html <p> esté destinada a controlar las expresiones idiomáticas de los estilos de escritura reales. Es una forma sencilla de mostrar un trozo de texto de manera ordenada. No creo que esté destinado a simular material impreso. Tendrás que usar una div para este.

+0

Si solo es para formatear, parece que no tiene mucho sentido usar la etiqueta 'p' de todos modos ... Pero estoy bastante seguro de que he visto algunas menciones de navegadores que los tratan de manera diferente, pero no lo hago. Recuerdo dónde. (Tal vez algo relacionado con los lectores de pantalla.) – Zee

+0

Algunos pueden manejarlo de forma diferida, pero nunca querrás replantear la calidad de tu trabajo en esas implicaciones. Siempre, siempre, quieres disparar a la mitad; Cuantos más usuarios puedas hacer felices, mejor será tu sitio. – John

+0

Exactamente - y es por eso que hice la pregunta ... – Zee

0

La respuesta a su pregunta es obviamente no, porque las especificaciones dicen que no puede hacerlo. Al igual que usted, me gusta mantener la semántica, por lo que generalmente voy con su segunda opción (párrafo, lista, otro párrafo). Sin embargo, fuera de mi cabeza, no puedo pensar en ningún texto donde la lista en realidad no rompa el flujo de texto, por lo que parece que comenzar un nuevo párrafo después de una lista no puede doler.

+0

Probablemente sea más común que la lista forme parte del texto anterior (y sé que no habrá ninguna diferencia en cómo se representa, pero estoy tratando de descubrir qué es lo correcto ...). – Zee

1

Supongo que depende de lo que usted considera que es un "párrafo". Es obvio para mí que los diseñadores de HTML de ninguna manera consideran una lista como parte de un párrafo.Y aunque creo que se podría hacer una discusión para cualquiera de las interpretaciones, soy de la opinión de que la especificación es correcta.

Si bien una lista no representa una ruptura en la línea de pensamiento, ciertamente representa un cambio en la voz o el método de pensamiento, que creo que merece un nuevo contenedor semántico.

En la misma línea, un párrafo representa una partición lógica en una escritura. Una lista representa una secuencia de particiones lógicas, y aunque es imaginable que una partición lógica se pueda dividir en más particiones, tiene más sentido simplemente crear una nueva partición (especialmente para una interrupción tan grande en la voz/método).

La semántica puede ser en gran medida subjetiva. Y eso está bien. Sin embargo, en este caso, soy de la opinión de que la especificación HTML representa correctamente la semántica.

+1

Bueno, específicamente evité discutir si esta es una decisión correcta o no, más al punto, * no * creo que los autores de las especificaciones HTML deberían estar en una posición donde determinen si una lista en un párrafo es algo que debería permitirse o no. Eso requiere una investigación exhaustiva de trabajos tipográficos en diferentes culturas, y ciertamente hay muchos ejemplos de sistemas tipográficos (La/TeX es obvio) que permiten listas anidadas en párrafos. – Zee

+0

Supongo, entonces, que la respuesta fácil a su pregunta es "no" –

+0

Por cierto, creo que si la respuesta oficial es que no debe escribir una lista dentro de un párrafo porque está mal, y si hubo no hay una investigación tan completa (en la que los autores de Unicode invierten mucho tiempo), entonces esto es simplemente arrogancia. Esta es la razón por la cual espero que la respuesta real se base en cuestiones técnicas de renderizado y presentación en lugar de decidir por mí qué se debe considerar un buen estilo. – Zee

3

¿Hay alguna razón de estilo visual detrás de todo esto? En otras palabras, cuando tiene algo como lo siguiente, ¿está representando visualmente de una manera que no encuentra ideal?

<p>Some paragraph text.</p> 
<ul> 
    <li>First list item</li> 
    <li>Second list item</li> 
    <li>Third list item</li> 
</ul> 
<p>Another paragraph.</p> 

Si el problema es demasiado margen después de la P y antes de la UL, a continuación, se puede tratar de un selector de hermanos adyacentes como éste para compensar:

p + ul { margin-top: -1em; } 
+1

La representación visual no fue el problema (los divs funcionan bien de todos modos): fue un intento de encontrar alguna forma "correcta" de hacerlo, manteniendo las etiquetas significativas. – Zee

Cuestiones relacionadas