2009-10-16 10 views
5

を設定し、私のようにシンプルに定義リストを使用したいスタイルdefinititionリストと簡単なキー値が

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

を定義リストは、意味的に思えますここで最高のオプションです。

トリックを行います新しい実行中の表示スタイルを使用:

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

をしかし、これは広くまだサポートされていません。どのようにしてhtmlを変更することなく、より良いクロスブラウザサポート(6必要ない)のために私の定義リストをスタイルすることができますか(現在私はディスプレイのインラインを使用し、醜いbrを追加します)?

編集明確にする:デザインは、これらの複数行のフィールドを保存するには、行の先頭にラップする必要があることを指定し

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

:として、それがレンダリングされますので

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

が動作しません。スペース。

答えて

8

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

に有用である別のオプションは、:after疑似クラスです。あなたはdt要素のそれぞれにコロンをスキップして持つことができ:

dt:after { 
    content: ":"; 
} 

これはそれをより柔軟になり、あなたは全体のリストやウェブサイト全体でその文字を変更することができ、またはあなたのように感じた場合はそれを取り除きますそれ。

上記のラッピング問題を解決するには、dtdd要素の両方に幅を設定する必要があります。または、名前/住所などの場合はth、「データ」の場合はtdの表を使用します。 IMOテーブルはここでは意味的に許容される解決策です - です。

+0

あなたの解決策は1つの警告でうまくいくようです:ddが空の場合、その下のddは間違ったフィールドに移動します!しかし私のアプリケーションでは、空行が発生しないので問題はありません。ありがとう! – Tomas

+0

分かりませんでしたが、 'dd'ごとに複数の' dt'要素を持つことができます(その用語は複数の定義を持つことができ、複数の用語に対して同じ定義を使用できます)。あなたが言及した問題は、空の 'dd'が無視されるために発生します。そのため、' dt'は次の 'dt'でグループ化され、両方とも' dd'に関連付けられます。 – DisgruntledGoat

+2

ええ、解決策を見つけました: 'dtで' clear:left'を削除し、これを別のルールとして追加してください: 'dd:after {content:"。可視性:非表示;クリア:左; } ' – DisgruntledGoat

0

このように、前の要素の左側にddをフローティングすることができます。

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

余分なアライメントのいずれかにwidth属性を追加することもできます。

私はこれが仕事だと思う
dt { clear: left; width: 20%; } 
dd { float: left; } 
+0

複数の行にまたがる場合、ddの内容が左揃えになるため、動作しません。指定されたデザインでは、質問の「アドレス」の例に示すように、ddデータを行の先頭に折り返します。 – Tomas

0

さて、あなたは、単にDTフロートを聞かせできます左

dt { float: left; } 

か、他聞かせdtの表示インライン:私はこの(コメント解除最初の行は、小さな幅をテストするために)考える

dt { display: inline; } 
+0

dt {display:inline; }はまだ動作していませんddはまだブロックです(試してみてください)。 dt {float:left; }質問で明らかになったように動作しません – Tomas

+0

私はGateKillerが示唆しているようにフローティングddを混合し、あなたとDisgruntledGoatが示唆するようにフローティングdtを混在させて申し訳ありません。これは動作するようです.. – Tomas

0

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

ddからデフォルトの左マージンを削除する必要があります。

dt {float:left;clear:left;margin-right:5px;} 
dd {margin:0;} 
関連する問題