2009-10-16 7 views
5

Je voudrais utiliser une liste de définition aussi simple que:style une liste definitition aussi simple valeur de clé définie

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

pour render quelque chose comme:

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

La liste de définition semble sémantiquement meilleure option ici.

Utilisation du nouveau style d'affichage run-in fera l'affaire:

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

Mais ce n'est pas encore largement pris en charge. Comment puis-je styliser ma liste de définitions pour un meilleur support cross-browser (ie6 pas nécessaire), sans changer le html (actuellement j'utilise display inline et j'ajoute des brides disgracieux)?

Modifier pour clarifier:

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

ne fonctionnera pas parce qu'elle rendrait comme:

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

La conception précise que ces champs multi-ligne devrait envelopper au début de la ligne pour préserver espace.

Répondre

8

Je pense que cela fonctionnerait:

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

Une autre option qui est utile est le :after pseudo-classe. Vous pouvez sauter le côlon sur chacun des dt éléments et ont:

dt:after { 
    content: ":"; 
} 

Cela rend plus souple et vous pouvez changer ce caractère dans la liste et le site Web dans son ensemble, ou de se débarrasser de celui-ci si vous vous sentiez comme il. Pour résoudre le problème d'emballage que vous avez mentionné, vous devez définir les largeurs sur les éléments dt et dd. Ou, utilisez une table, avec th pour le nom/adresse etc et td pour les "données". IMO une table est une solution sémantiquement acceptable ici - il est données tabulaires.

+0

Votre solution semble bien fonctionner avec une mise en garde: si un dd est vide, le dd en dessous se déplacera vers le mauvais champ! Cependant pour mon application ce n'est pas un problème car les lignes vides ne se produiront pas. Merci! – Tomas

+0

Si vous ne le saviez pas, vous pouvez avoir plusieurs éléments 'dt' par' dd' et vice-versa (l'idée étant un "terme" peut avoir plusieurs définitions et la même définition peut être utilisée pour plusieurs termes). Le problème que vous avez mentionné se produit parce qu'un 'dd' vide est ignoré, donc' dt' pour cela est groupé avec le 'dt' suivant et les deux associés' dd'. – DisgruntledGoat

+2

Ooh, trouvé une solution: enlever le 'clear: left' sur le' dt' et l'ajouter comme une règle séparée: 'dd: after {content:". "; visibilité: cachée; clair: gauche; } ' – DisgruntledGoat

0

Vous pouvez juste faire flotter le dd à la gauche de l'élément précédent comme ça.

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

Vous pouvez également ajouter un attribut de largeur pour un alignement supplémentaire.

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

Ne fonctionnera pas car cela alignera à gauche le contenu dd s'il est enroulé sur plusieurs lignes. La conception spécifiée souhaite que les données dd soient renvoyées au début de la ligne, comme indiqué dans l'exemple "adresse" de la question. – Tomas

0

Eh bien, vous pouvez simplement laisser dt float: left

dt { float: left; } 

ou bien laisser dt ligne d'affichage:

dt { display: inline; } 
+0

dt {display: inline; } ne fonctionne pas car dd est toujours un bloc (essayez-le). dt {float: à gauche; } ne fonctionne pas comme clarifié dans la question – Tomas

+0

Je suis désolé j'ai mélangé dd flottant comme suggéré par GateKiller, et dt flottant comme suggéré par vous et DisgruntledGoat. Cela semble fonctionner .. – Tomas

0

Je pense que ce (première ligne uncomment pour tester petite largeur):

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

Vous devez supprimer la marge gauche par défaut du dd.

dt {float:left;clear:left;margin-right:5px;} 
dd {margin:0;} 
Questions connexes