2010-07-07 10 views
10

Sembra che html (strict) non consenta di annidare elementi non inline all'interno di uno <p>, ma come posso riprodurre un paragrafo che contiene un elenco (qualcosa che si verifica spesso in testi naturali). Ho visto tre risposte che sembrano tutte insoddisfacenti:Nidificare gli elenchi nei paragrafi in codice

  • Gli elenchi non dovrebbero accadere all'interno dei paragrafi. (Non ho intenzione di entrare in un dibattito culturale, ma spero certamente che l'html non diventerà il posto in cui dettare lo stile di scrittura.)
  • Separa il testo in un paragrafo, quindi un elenco, quindi un secondo paragrafo con il post-testo. Questo sembra male perché ora ho <p> pezzi che sono parti di paragrafi, e che sembra male per un markup che sta cercando di muoversi in una direzione più semantica.
  • Fake paragraph using some <div class="mypara"> - che sembra un brutto modo per aggirare il tutto e rinunciare all'uso del markup con la semantica corretta per il testo.

C'è un altro modo per farlo che è semanticamente corretto e valido?

+0

+1 per indicare il lavoro-comuni intorno a questo problema. Il problema è ancora più visibile quando si usa una lista nel mezzo di una frase per enfatizzare la sua struttura, poiché la divisione di una frase tra diversi paragrafi è definitivamente semanticamente scorretta. Per esempio. "Voglio comprare [lista] • latte, • zucchero, • Apple, e • una viola [/ list] oggi." Questo è comunemente usato quando si scrive testo con TeX. – Palec

risposta

9

I paragrafi in HTML 5, al momento dell'ultima bozza di lavoro, sono definiti come elementi del flusso che possono contenere solo elementi di fraseggio. Gli elenchi sono anche definiti come elementi di flusso e non possono essere inclusi nei paragrafi. Qualunque cosa tu pensi che la definizione di paragrafo dovrebbe essere, questa è la definizione formale del termine in HTML, e penso che sia improbabile che cambi.

ci sono due possibilità che si potrebbe prendere in considerazione oltre ai due che hai citato:

  • considerare il raggiungimento di un elemento di flusso più ampio-portata di quelle del punto se si applica, come ad esempio section, nav, header, footer o article.
  • Utilizzare un approccio ibrido: avvolgere la sequenza p – ol – p con un div di propria scelta che applica la formattazione comune all'insieme.

Per quanto riguarda div va, le specifiche HTML 5 raccomanda chiaramente che dovrebbe essere un elemento di "ultima istanza", perché non sopporta significato semantico nel modo in cui gli altri elementi HTML fanno, e non può essere così user-friendly in user agent alternativi. Seguendo questo consiglio, non userei div al costo di p per il corpo del testo se la semantica è importante per te. Tuttavia, può essere utile per assicurarsi che l'uso di più paragrafi non diventi troppo visivamente discontinuo.

+0

La situazione che sto affrontando è di un sistema per generare HTML, e sembra che l'opzione migliore in questo caso sia quindi usare 'div's. Oltre a questo, il suggerimento di utilizzare i tag più ampi sembra una buona idea. – Zee

3

Non penso che il tag html <p> abbia lo scopo di controllare gli idiomi degli stili di scrittura effettivi. È un modo semplice per visualizzare una porzione di testo in modo ordinato. Non credo che sia pensato per simulare il materiale stampato. Dovrai usare un Div per questo.

+0

Se è solo per la formattazione, sembra che ci sia molto poco nell'uso del tag 'p' comunque ... Ma sono abbastanza sicuro di aver visto alcune menzioni di browser che le trattavano in modo diverso - ma non lo faccio Ricordo dove. (Forse qualcosa relativo agli screen reader.) – Zee

+0

Alcuni possono gestirlo in modo difforme, ma non si vuole mai mettere in discussione la qualità del proprio lavoro su quelle implosioni. Devi sempre, sempre, voler sparare per la via di mezzo; più utenti puoi rendere felici, meglio sarà il tuo sito. – John

+0

Esattamente - ed è per questo che ho posto la domanda ... – Zee

0

La risposta alla tua domanda è ovviamente no, perché le specifiche dicono che non puoi farlo. Come te, mi piace mantenere la semantica, quindi di solito vado con la tua seconda opzione (paragrafo, elenco, un altro paragrafo). In ogni caso, non riesco a pensare a nessun testo in cui la lista non rompa effettivamente il flusso di testo, quindi sembra che iniziare un nuovo paragrafo dopo un elenco non possa far male.

+0

Probabilmente è più comune che l'elenco faccia parte del testo precedente (e so che non ci saranno differenze nel modo in cui viene visualizzato, ma sto cercando di capire qual è la cosa giusta ...). – Zee

1

Suppongo che dipenda da ciò che consideri un "paragrafo". È ovvio per me che i progettisti di HTML non considerano in alcun modo una lista come parte di un paragrafo.E mentre penso che si possa fare una discussione per entrambe le interpretazioni, sono dell'opinione che le specifiche siano corrette.

Mentre una lista non rappresenta una rottura in linea di pensiero, rappresenta certamente un cambiamento nella voce o nel metodo di pensiero, che credo meriti un nuovo contenitore semantico.

Allo stesso modo, un paragrafo rappresenta una partizione logica in un pezzo di scrittura. Una lista rappresenta una sequenza di partizioni logiche, e mentre è immaginabile che una partizione logica possa essere divisa in più partizioni, ha più senso creare semplicemente una nuova partizione (specialmente per un'interruzione così grande nella voce/metodo).

La semantica può essere in gran parte soggettiva. E va bene. Tuttavia, in questo caso, sono dell'opinione che le specifiche HTML rappresentino correttamente la semantica.

+1

Beh, ho evitato espressamente di discutere se questa è una decisione corretta o meno - più al punto, io * non * penso che gli autori delle specifiche HTML dovrebbero essere in una posizione in cui determinano se un elenco in un paragrafo è qualcosa che dovrebbe essere permesso o meno. Ciò richiede un'indagine approfondita su opere tipografiche attraverso culture diverse, e ci sono certamente molti esempi di sistemi tipografici (La/TeX è ovvio) che permettono di inserire elenchi annidati in paragrafi. – Zee

+0

Suppongo, quindi, che la semplice risposta alla tua domanda sia "no" –

+0

BTW - personalmente, penso che se la risposta della specifica ufficiale è che non dovresti scrivere una lista all'interno di un paragrafo perché è sbagliata, e se c'era nessuna indagine così approfondita (su cui gli autori di Unicode investono un sacco di tempo), quindi questa è solo un'arma di arroganza. Questo è il motivo per cui mi aspetto che la risposta effettiva sia basata su problemi tecnici di rendering e presentazione piuttosto che decidere per me cosa debba essere considerato di buon stile. – Zee

3

Esiste un motivo di stile visivo dietro tutto questo? In altre parole, quando hai qualcosa di simile al seguente, viene visualizzato visivamente in un modo che non trovi ideale?

<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> 

Se il problema è troppo margine dopo la P e prima della UL, allora si può provare un selettore fratello adiacente così da compensare:

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

Il rendering visivo non era il problema (i div funzionano bene comunque) - è stato un tentativo di trovare un modo "giusto" per farlo, mantenendo i tag significativi. – Zee