2009-10-16 12 views
5

mi piacerebbe utilizzare un elenco di definizioni di semplice come:stile un elenco definitition semplice valore della chiave impostato

<dl> 
    <dt>name:</dt> 
    <dd>Tomas</dd> 

    <dt>address:</dt> 
    <dd>this is a very long wrapping address</dd> 

    <dt>age:<dt> 
    <dd>29</dd> 
<dl> 

a rendere qualcosa di simile:

name: Tomas 
address: this is a very long 
wrapping address 
age: 29 

L'elenco definizione sembra semanticamente il migliore opzione qui.

Utilizzando il nuovo stile di visualizzazione di run-in farà il trucco:

<style> dt { display: run-in; } </style> 

Ma questo non è ampiamente ancora supportato. Come posso modellare la mia lista di definizioni per un migliore supporto cross-browser (ie6 non necessario), senza modificare l'html (attualmente utilizzo la visualizzazione in linea e aggiungo brutti br)?

Modifica per chiarire:

dt { clear: left; } 
dd { float: left; } 

non funzionerà, perché avrebbe reso come:

name: Tomas 
address: this is a very long 
     wrapping address 
age: 29 

La progettazione specifica che questi campi multi-linea dovrebbe avvolgere al punto di partenza della linea di preservare spazio.

risposta

8

penso che questo dovrebbe funzionare:

dt { 
    float: left; 
    clear: left; 
    margin: 0; 
    padding: 0 .5em 0 0; 
} 
dd { 
    margin: 0; 
    padding: 0; 
} 

Un'altra opzione che è utile è la pseudo-classe :after. Si potrebbe saltare il colon su ciascuno dei dt elementi e avere:

dt:after { 
    content: ":"; 
} 

Questo lo rende più flessibile e si può cambiare quel personaggio in tutta la lista e il sito nel suo complesso, o di sbarazzarsi di esso, se si ha voglia esso.

Per risolvere il problema del wrapping che hai menzionato, dovrai impostare le larghezze su entrambi gli elementi dt e dd. Oppure, usa una tabella, con th per nome/indirizzo ecc. E td per i "dati". IMO una tabella è una soluzione semanticamente accettabile qui - è è dati tabulari.

+0

La tua soluzione sembra funzionare bene con un avvertimento: se un dd è vuoto il dd sotto di esso si sposterà sul campo sbagliato! Tuttavia per la mia applicazione questo non è un problema dato che non si verificheranno linee vuote. Grazie! – Tomas

+0

Se non lo sapevi, puoi avere più elementi 'dt' per' dd' e viceversa (l'idea di essere un "termine" può avere più definizioni e la stessa definizione può essere usata per più termini). Il problema che hai menzionato si verifica perché un 'dd' vuoto viene ignorato, quindi il' dt' per questo è raggruppato con il successivo 'dt' ed entrambi associati a quest'ultimo' dd'. – DisgruntledGoat

+2

Ooh, ho trovato una soluzione: rimuovere 'clear: left' su' dt' e aggiungerla come una regola separata: 'dd: after {content:". "; visibilità: nascosta; chiaro: a sinistra; } ' – DisgruntledGoat

0

Si potrebbe semplicemente spostare il dd a sinistra dell'elemento precedente in questo modo.

dt { clear: left; } 
dd { float: left; } 

È anche possibile aggiungere un attributo di larghezza a entrambi per l'allineamento extra.

dt { clear: left; width: 20%; } 
dd { float: left; } 
+0

Non funziona perché questo allineerà il contenuto dd se questo si avvolge su più righe. Il design specificato vuole che i dati dd vengano inseriti all'inizio della riga come mostrato nell'esempio "indirizzo" nella domanda. – Tomas

0

Beh, si può semplicemente lasciare che dt float: left

dt { float: left; } 

oppure lasciare che dt visualizzazione in linea:

dt { display: inline; } 
+0

dt {display: inline; } non funziona perché dd è ancora un blocco (provalo). dt {float: left; } non funziona come chiarito nella domanda – Tomas

+0

Mi spiace di aver confuso il dd mobile come suggerito da GateKiller e fluttante dt come suggerito da te e DisgruntledGoat. Questo sembra funzionare .. – Tomas

0

Penso che questo (uncomment prima linea per testare per la piccola larghezza):

dl, dd, dt { margin: 0; } 
/*dl { width: 80px; }*/ 
dl dt, dl dd { display: inline; } 
dl dd:after { content: ' '; padding-left: 100%; } 
0

È necessario rimuovere il margine sinistro predefinito dal dd.

dt {float:left;clear:left;margin-right:5px;} 
dd {margin:0;} 
Problemi correlati