2009-05-22 5 views
14

ho la seguente html:CSS: <DL> intervallato/margine tra i dt/coppie dd

<dl> 
     <dt>Item 1</dt> 
     <dd> 
      <ul> 
       <li>Value 1</li> 
      </ul> 
     </dd> 
     <dt>Item 2</dt> 
     <dd> 
      <!-- this item is missing a value --> 
     </dd> 
     <dt>Item 3</dt> 
     <dd> 
      <ul> 
       <li>Value 1</li> 
       <li>Value 2</li> 
       <li>Value 3</li> 
      </ul> 
     </dd> 
    </dl> 

Vorrei stenderlo come (invece del dl normale che mette il termine e definizioni sotto a vicenda):

Item 1 Value 1 
Item 2  
Item 3 Value 1 
      Value 2 
      Value 3 

Quale non è un problema. Il problema è che vorrei aggiungere un margine tra ogni termine/coppia di definizioni. Il problema è che le definizioni non hanno la stessa altezza (vanno da 0 a 5 voci di elenco), quindi non posso applicare lo stesso margine sui tag dd.

risposta

19

Come va?

dt, dd { display: block; float: left; margin-top: 20px; } 
dt { clear: both; } 
+0

questa è la soluzione più pulita nei miei occhi. – Gidon

+4

Non dimenticare dl {overflow: hidden; } ... :) – bang

4

vuoi dire qualcosa come:

Item 1 Value 1 

Item 2  

Item 3 Value 1 
      Value 2 
      Value 3 

Perché allora non vedo il motivo per cui non è possibile applicare il margine sugli elementi dd. Ho fatto un rapido esperimento utilizzando il seguente CSS:

ul { 
    margin: -1.2em 0 0 100px; 
    padding: 0; 
} 

dd { 
    margin-bottom: 10px; 
} 

Quale sembra avere l'effetto necessario.

+0

Grazie, anche questo sembra funzionare. – Gidon

0

Il tuo 'elemento 2' è veramente vuoto o ha un &nbsp; in esso? Se è vuoto, sarà difficile ottenere il dt/dd per allineare correttamente perché gli altri dd avranno un'altezza di 20px (per esempio) e il dd vuoto avrà un'altezza di 0.

Attenzione con il margine superiore, dovrai applicarlo sia a dt che a dd.

Preferisco utilizzare il riempimento nella parte inferiore del dd. Dà risultati più coerenti.

dt { 
    float: left; 
    clear: left; 
    width: 8em; 
    } 
dd { 
    margin: 0 0 0 9em; 
    padding: 0 0 2.5em 0; 
    } 
1

penso che l'uso corretto di dl, dt e dd non utilizza ulli 's all'interno di un dd, ma invece utilizzare diversi dd' s. Mi sembra che tu stia usando una lista all'interno di un elemento che è esso stesso per la quotazione.

<dl> 
    <dt>Item 1</dt> 
    <dd>Value 1</dd> 
    <dt>Item 2</dt> 
    <dd> 
     &nbsp; 
    </dd> 
    <dt>Item 3</dt> 
    <dd>Value 1</dd> 
    <dd>Value 2</dd> 
    <dd>Value 3</dd> 
</dl> 

per i CSS è possibile utilizzare questo:

DL { 
PADDING: 0; MARGIN: 0; } 
DT { 
POSITION: relative; PADDING: 0; MARGIN: 0; TOP: 1.2em; LEFT: 0px; } 
DD { 
PADDING: 0; MARGIN: 0 0 0 5em; } 
+2

È stato pensato come un esempio. Ma ancora, l'uso di 3 DD è semanticamente diverso da un DD con un UL. 3 DD significa che il termine ha 3 definizioni. 1 DD con UL significa che il termine ha una definizione che viene generata da un elenco. – Gidon

+0

@Gidon In questi giorni l'Elenco definizioni è stato ufficialmente "ri-proposto" come Elenco di descrizione, quindi è perfettamente semanticamente valido avere 3 DD per un DT. Mi rendo conto che potrebbe non essere stato il caso in cui è stata posta questa domanda. –