2009-10-16 11 views
5

Me gustaría utilizar una lista de definición tan simple como:estilo tan simple valor de la clave fija

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

para hacer algo como:

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

La lista de definiciones parece semánticamente la La mejor opción aquí.

Usando el nuevo estilo de la pantalla de ejecución en el hará el truco:

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

Pero esto no es apoyado ampliamente todavía. ¿Cómo puedo diseñar mi lista de definiciones para una mejor compatibilidad entre navegadores (es decir, no es necesario), sin cambiar el html (actualmente uso la visualización en línea y agrego feas br)?

Editar para aclarar:

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

no funcionará, ya que haría que:

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

El diseño especifica que estos campos multilínea debe envolver al inicio de la línea de preservar espacio.

Respuesta

8

creo que esto funcionaría:

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

Otra opción que es útil es la pseudo-clase :after. Se podría omitir los dos puntos en cada uno de los dt elementos y tienen:

dt:after { 
    content: ":"; 
} 

Esto hace que sea más flexible y puede cambiar ese carácter a través de la lista y el sitio web en su conjunto, o deshacerse de él si usted se sentía como eso.

Para resolver el problema de envoltura que mencionó, necesitará establecer anchuras en los elementos dt y dd. O bien, use una tabla, con th para nombre/dirección, etc. y td para los "datos". IMO una tabla es una solución semánticamente aceptable aquí - es es datos tabulares.

+0

Su solución parece funcionar muy bien con una advertencia: si un dd está vacío, el dd debajo de él cambiará al campo equivocado. Sin embargo, para mi aplicación esto no es un problema ya que las líneas vacías no ocurrirán. ¡Gracias! – Tomas

+0

Si no lo sabía, puede tener múltiples elementos 'dt' por' dd' y viceversa (la idea que es un "término" puede tener múltiples definiciones y la misma definición se puede usar para varios términos). El problema que mencionaste se debe a que se ignora un 'dd' vacío, por lo tanto, el' dt' se agrupa con el siguiente 'dt' y ambos se asocian con el último' dd'. – DisgruntledGoat

+2

Ooh, encontró una solución: elimine 'clear: left' en' dt' y añada esto como una regla separada: 'dd: after {content:". "; visibilidad: oculta; claro: izquierda; } ' – DisgruntledGoat

0

Simplemente puede flotar el dd a la izquierda del elemento anterior como ese.

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

También podría agregar un atributo de ancho a la alineación adicional.

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

No funcionará porque esto alineará por la izquierda el contenido de dd si se envuelve en varias líneas. El diseño especificado quiere que los datos dd se envuelvan al comienzo de la línea como se muestra en el ejemplo de "dirección" en la pregunta. – Tomas

0

Bueno, se podría simplemente dejar dt float: left

dt { float: left; } 

o si no, que dt línea de visualización:

dt { display: inline; } 
+0

dt {display: inline; } no funciona porque dd sigue siendo un bloque (pruébalo). dt {float: izquierda; } no funciona como se aclaró en la pregunta – Tomas

+0

Lamento mezclar dd flotante como lo sugiere GateKiller, y dt flotante como lo sugirieron usted y DisgruntledGoat. Esto parece funcionar ... – Tomas

0

Creo que esta (primera línea uncomment para la prueba de poca anchura):

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

Debe eliminar el margen izquierdo predeterminado del dd.

dt {float:left;clear:left;margin-right:5px;} 
dd {margin:0;} 
Cuestiones relacionadas