dtとddを同じ行に配置する方法


212

CSSを使用して、次のスタイルを設定するにはどうすればよいですか。

<dl>
    <dt>Mercury</dt>
    <dd>Mercury (0.4 AU from the Sun) is the closest planet to the Sun and the smallest planet.</dd>
    <dt>Venus</dt>
    <dd>Venus (0.7 AU) is close in size to Earth, (0.815 Earth masses) and like Earth, has a thick silicate mantle around an iron core.</dd>
    <dt>Earth</dt>
    <dd>Earth (1 AU) is the largest and densest of the inner planets, the only one known to have current geological activity.</dd>
</dl>

内容のでdt一つの列に表示のコンテンツdd各々と、別の列にはdt、対応するdd同じ行に?つまり、次のようなものを作成します。

テーブル形式


ただ、便利なノートのように:あなたはこれをチェックし、DTSおよびDDSの線の間の間隔を制御したい場合:stackoverflow.com/q/896815/114029これらの強力なタグには、本当に簡単で美しいフォームをスタイリングします。
Leniel Maccaferri

参照してくださいstackoverflow.com/questions/896815/...特に受け入れ答えのstackoverflow.com/a/896840/1037948
drzaus

1
これに受け入れ答えを変更することを検討してください:stackoverflow.com/a/44599527/3853934
のMichałPerłakowski

回答:


140

dl {
  width: 100%;
  overflow: hidden;
  background: #ff0;
  padding: 0;
  margin: 0
}
dt {
  float: left;
  width: 50%;
  /* adjust the width; make sure the total of both is 100% */
  background: #cc0;
  padding: 0;
  margin: 0
}
dd {
  float: left;
  width: 50%;
  /* adjust the width; make sure the total of both is 100% */
  background: #dd0
  padding: 0;
  margin: 0
}
<dl>
  <dt>Mercury</dt>
  <dd>Mercury (0.4 AU from the Sun) is the closest planet to the Sun and the smallest planet.</dd>
  <dt>Venus</dt>
  <dd>Venus (0.7 AU) is close in size to Earth, (0.815 Earth masses) and like Earth, has a thick silicate mantle around an iron core.</dd>
  <dt>Earth</dt>
  <dd>Earth (1 AU) is the largest and densest of the inner planets, the only one known to have current geological activity.</dd>
</dl>


2
ありがとう!このCSSのヒントは、フォームデコレータクラスをコーディングせずにZendフォームをフォーマットするのに役立ちました。
devNoise作成

この方法を使用して、「行」の下部マージンまたはパディングトウスペースを追加できないようです。
Graeck

7
clear: leftラップする必要がある場合でもインラインを保つために、dtスタイルにa を追加することをお勧めします。
Simon

1
この* { ... }ステートメントにより、すべての余白とパディングが失われ、削除するとDLがゆがみます。クラスを使用してもトリックはありません。DL以外が必要な場合は、どこにでもマージンとパディングなしで移動する必要があるようです...または?
Erk

これは、<dd>の最初の単語を選択(ダブルクリック)すると不自然に動作します。また、<dt>と<dd>の間に空白(またはhtmlminを使用している場合は&nbsp;)がない限り、<dt>内のテキストを選択します。
KFunk 2017年

122

フロートを使用せずに解決策を得ました! コードペンで
これを確認して ください

Viz。

dl.inline dd {
  display: inline;
  margin: 0;
}
dl.inline dd:after{
  display: block;
  content: '';
}
dl.inline dt{
  display: inline-block;
  min-width: 100px;
}



アップデート- 3 回目 2017年1月:問題のために私が追加したフレックスボックスベースのソリューション。リンクされたコードペンで確認し、必要に応じて調整してください。ありがとう!

dl.inline-flex {
  display: flex;
  flex-flow: row;
  flex-wrap: wrap;
  width: 300px;      /* set the container width*/
  overflow: visible;
}
dl.inline-flex dt {
  flex: 0 0 50%;
  text-overflow: ellipsis;
  overflow: hidden;
}
dl.inline-flex dd {
  flex:0 0 50%;
  margin-left: auto;
  text-align: left;
  text-overflow: ellipsis;
  overflow: hidden;
}

2
パーフェクト!その邪悪なフロートは1つの問題を解決するだけで、2つの新しい問題(垂直方向の配置がないなど)を与えてくれました。それが今なくなったのは素晴らしいことです。
インフルエンザ

8
これは、DD部分の短いテキストでうまく機能します。テキストが長すぎる場合は、折り返されてDT部分の下に表示されます。
Riccardo Murri 2014年

3
これは、リストの一部の項目が空の場合でも機能します。すごい!
Tomas Kubes 16年

@ tjm1706:フレックスベースのソリューションでは、長いテキストのケースを処理できると思います。おかげで:)
Navaneeth 2017年

@navaneeth素晴らしいソルン。追加した単語と定義の間のドットを取得するために、次のように追加しました:dl.inline-flex dt:after {content: "................"}実際には、ここに150ドットを使用して十分です また、空白を追加する必要があります:dtにnowrap
MERM

60

CSSグリッドレイアウト

テーブルと同様に、グリッドレイアウトを使用すると、作成者は要素を列と行に配置できます。
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout

列のサイズを変更するには、grid-template-columnsプロパティを確認してください。

dl {
  display: grid;
  grid-template-columns: max-content auto;
}

dt {
  grid-column-start: 1;
}

dd {
  grid-column-start: 2;
}
<dl>
  <dt>Mercury</dt>
  <dd>Mercury (0.4 AU from the Sun) is the closest planet to the Sun and the smallest planet.</dd>
  <dt>Venus</dt>
  <dd>Venus (0.7 AU) is close in size to Earth, (0.815 Earth masses) and like Earth, has a thick silicate mantle around an iron core.</dd>
  <dt>Earth</dt>
  <dd>Earth (1 AU) is the largest and densest of the inner planets, the only one known to have current geological activity.</dd>
</dl>


これがまさに私が欲しいものです。caniuse.com/#feat=css-grid-私が望むほど普遍的ではありませんが、十分にサポートされています。
Iiridayn 2018年

59

Bootstrap 3(またはそれ以前)を使用している場合...

<dl class="dl-horizontal">
    <dt>Label:</dt>
    <dd>
      Description of planet
    </dd>
    <dt>Label2:</dt>
    <dd>
      Description of planet
    </dd>
</dl>

14
BootstrapのCSSを見ると、Bootstrapを使用しなくてもスタイルを設定する方法もわかりますが、私はそのフレームワークが大好きです。例を単純化するためにレスポンシブデザインのメディアクエリを無視したスニペットを次に示します。dl{margin-top:0; margin-bottom:20px} dt、dd {line-height:1.428571429} dt {font-weight:700} dd {margin-left:0} .dl-horizo​​ntal dt {float:left; width:160px; clear:left; text-align:right; overflow:hidden; text-overflow:ellipsis; white-space:nowrap} .dl-水平dd {margin-left:180px}
ティムフランクリン

8
これdl-horizontalは実際にはBootstrap 4から削除されました。BS4では、代わりにグリッドクラスを使用する必要があります。
Scribblemacher 2017

21

あなたがマージンの幅を知っていると仮定します:

dt { float: left; width: 100px; }
dd { margin-left: 100px; }

2
あなたが利益をハードコードしましたので、私は、きれいにそれを呼び出すことはありません。
リアム・ドーソン

6
クリーン:シンプルで明確な、そして楽しい形をしています。答えは短いです。3つのステートメントで問題を解決します。マージンを知らなかったことは、質問の一部としての要件ではありませんでした。
祖先の

6
Cleanは通常、これらのスタイルの質問のマークアップに使用されます。とにかく、StackOverflowへようこそ。わかりやすくするために、これらの種類の仮定を質問の本文に含めることをお勧めします。
Liam Dawson

8

私のユースケースで機能する例をまだ見ていなかったため、ここで私が実現できた最も完全なソリューションを示します。

dd {
    margin: 0;
}
dd::after {
    content: '\A';
    white-space: pre-line;
}
dd:last-of-type::after {
    content: '';
}
dd, dt {
    display: inline;
}
dd, dt, .address {
    vertical-align: middle;
}
dt {
    font-weight: bolder;
}
dt::after {
    content: ': ';
}
.address {
    display: inline-block;
    white-space: pre;
}
Surrounding

<dl>
  <dt>Phone Number</dt>
  <dd>+1 (800) 555-1234</dd>
  <dt>Email Address</dt>
  <dd><a href="#">example@example.com</a></dd>
  <dt>Postal Address</dt>
  <dd><div class="address">123 FAKE ST<br />EXAMPLE EX  00000</div></dd>
</dl>

Text

不思議なことに、それはで動作しませんdisplay: inline-blockdt要素またはdd要素のいずれかのサイズを設定する必要がある場合は、dlの表示を次のように設定し、要素と要素display: flexbox; display: -webkit-flex; display: flex;flex省略形を次のように設定できると思いますdddtflex: 1 1 50%displayなどをdisplay: inline-block。しかし、私はそれをテストしていないので、注意してアプローチしてください。


6

jsFiddleスクリーンショット

jsFiddleデモを見る

会社の従業員を左の写真と右の情報で示すプロジェクトについて説明したとおりのリストが必要でした。私は毎回疑似要素を使用してクリアを達成することができましたDD

.myList dd:after {
  content: '';
  display: table;
  clear: both;
}

さらに、テキストを画像の右側にのみ表示し、フローティング画像の下に折り返さないようにしたいと考えました(疑似列効果)。これは、タグのコンテンツの周囲にDIVCSS を含む要素を追加することで実現できます。この追加は省略できますが、タグのコンテンツはフロートの下にラップされますoverflow: hidden;DDDIVDDDTます。

これでしばらく遊んだ後、私は複数サポートすることができたDTあたりの要素をDD、ではなく、複数DDの要素あたりDT。最後のの後にのみクリアする別のオプションクラスを追加しようとしましたDDが、後続のDD要素はDT要素の下にラップされました(希望する効果ではありません… DTDD要素で列を形成したいと思いました。DD要素があまりにも広いでした)。

すべての権利によって、これはIE8 +でのみ機能するはずですが、IE7の癖により、同様に機能します。


簡単にここで最良の答えの1つです。
Michael Ahlers、2016

5

次に、dtとddをインラインで表示し、ddの後に改行を追加することで機能する別のオプションを示します。

dt, dd {
 display: inline;
}
dd:after {
 content:"\a";
 white-space: pre;
}

これは上記のNavaneethのソリューションに似ていますが、このアプローチを使用すると、コンテンツは表のように整列しませんが、ddは長さに関係なく、すべての行でdtの直後に続きます。


5

これを行う必要があり、<dt>コンテンツに対してコンテンツを垂直方向に中央揃えにし<dd>ます。とdisplay: inline-block一緒に使用しましたvertical-align: middle

Codepenの完全な例はこちら

.dl-horizontal {
  font-size: 0;
  text-align: center;

  dt, dd {
    font-size: 16px;
    display: inline-block;
    vertical-align: middle;
    width: calc(50% - 10px);
  }

  dt {
    text-align: right;
    padding-right: 10px;
  }

  dd {
    font-size: 18px;
    text-align: left;
    padding-left: 10px;
  } 
}

3

dt要素とdd要素のスタイル方法によっては、問題が発生する可能性があります。それらの高さを同じにすることです。たとえば、これらの要素の下部に境界線を表示したい場合は、表のように同じ高さで境界線を表示することをお勧めします。

このための1つの解決策は、各行を "dl"要素にして不正にすることです。(これは、テーブルでtrを使用するのと同じです)定義リストの元々の興味を失いますが、対応するものでは、これは、迅速かつきれいなスタイルの疑似テーブルを取得する簡単な方法です。

CSS:

dl {
 margin:0;
 padding:0;
 clear:both;
 overflow:hidden;
}
dt {
 margin:0;
 padding:0;
 float:left;
 width:28%;
 list-style-type:bullet;
}
dd {
 margin:0;
 padding:0;
 float:right;
 width:72%;
}

.huitCinqPts dl dt, .huitCinqPts dl dd {font-size:11.3px;}
.bord_inf_gc dl {padding-top:0.23em;padding-bottom:0.5em;border-bottom:1px solid #aaa;}

HTML:

<div class="huitCinqPts bord_inf_gc">
  <dl><dt>Term1</dt><dd>Definition1</dd></dl>
  <dl><dt>Term2</dt><dd>Definition2</dd></dl>
</div>

1
書いてないquatreVingtCinqPts?:)
nicodemus13

2

私には完璧に思える解決策を見つけましたが、追加の<div>タグが必要です。<table>テーブルのように配置するためにタグを使用する必要はなくdisplay:table-row;display:table-cell;スタイルと スタイルを使用するだけで十分であることがわかりました。

<style type="text/css">
dl > div {
  display: table-row;
}
dl > div > dt {
  display: table-cell;
  background: #ff0;
}
dl > div > dd {
  display: table-cell;
  padding-left: 1em;
  background: #0ff;
}
</style>

<dl>
  <div>
    <dt>Mercury</dt>
    <dd>Mercury (0.4 AU from the Sun) is the closest planet to the Sun and the smallest planet.</dd>
  </div>
  <div>
    <dt>Venus</dt>
    <dd>Venus (0.7 AU) is close in size to Earth, (0.815 Earth masses) and like Earth, has a thick silicate mantle around an iron core.</dd>
  </div>
  <div>
    <dt>Earth</dt>
    <dd>Earth (1 AU) is the largest and densest of the inner planets, the only one known to have current geological activity.</dd>
  </div>
</dl>

XHTMLに準拠していないのはなぜですか?
Derick Schoonbee、2012

8
@DerickSchoonbee- dlsはdtsとddsを子として持つことのみが許可されているため。dtsは、子としてインライン要素のみを持つことができます。ddsは、何らかの理由で、子としてブロックレベルの要素を持つことができます。
アンソニー

6
-1無効なHTML 4、XHTML 1、またはHTML5。基本的には、私のようなDI要素が必要です。しかし、そのような要素があれば、CSSテーブルのような難解なものはまったく必要ありません...とにかく、その要素は存在しないので、使用しないでください。
Andreas Rejbrand 2013

@AndreasRejbrand DI要素も有効なHTML5ではありません
AlexMorley-Finch 2014

@ AlexMorley-Finch:わかっています。そのため、そのような要素が必要だと述べました(DIはXHTML 2.0のものです)ちなみに、WHATWG HTML 5エディターのIan Hicksonは、run-inCSS display値がまさに私が欲しいものだ(私の場合、単純な名前と値のメタデータリストが欲しい)ことに気付きました。
Andreas Rejbrand 2014年

2

私は最近、インライン要素が後に続くべき要素にクラスdl-inlineを指定することにより、インラインと非インラインのdt / ddペアを混合<dt>する必要がありました<dd>

dt.dl-inline {
  display: inline;
}
dt.dl-inline:before {
  content:"";
  display:block;
}
dt.dl-inline + dd {
  display: inline;
  margin-left: 0.5em;
  clear:right;
}
<dl>
    <dt>The first term.</dt>
    <dd>Definition of the first term. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a placerat odio viverra fusce.</dd>
    <dt class="dl-inline">The second term.</dt>
    <dd>Definition of the second term. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a placerat odio viverra fusce.</dd>
    <dt class="dl-inline">The third term.</dt>
    <dd>Definition of the third term. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a placerat odio viverra fusce.</dd>
    <dt>The fourth term</dt>
    <dd>Definition of the fourth term. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque a placerat odio viverra fusce.</dd>
</dl

>


1

これはIE7 +で動作し、標準に準拠しており、さまざまな高さを使用できます。

<style>
dt {
    float: left;
    clear: left;
    width: 100px;        
    padding: 5px 0;
    margin:0;
}
dd {
    float: left;
    width: 200px;
    padding: 5px 0;
    margin:0;
}
.cf:after {
    content:'';
    display:table;
    clear:both;
}
</style>

<dl class="cf">
    <dt>A</dt>
    <dd>Apple</dd>
    <dt>B</dt>
    <dd>Banana<br>Bread<br>Bun</dd>
    <dt>C</dt>
    <dd>Cinnamon</dd>
</dl>        

JSFiddleを参照してください


1

これはそれらをテーブルとして表示するように機能し、境界線があり、最初の列の幅が3emで応答するはずです。ワードラップは、列より広い単語を改行するだけです

 dl { display:block;
      border:2px solid black;
      margin: 1em;}  
 dt { display:inline-block;
      width:3em;
      word-wrap:break-word;} 
 dd { margin-left:0;
      display:inline;
      vertical-align:top;
      line-height:1.3;} 
 dd:after { content:'';display:block; } 

比較<table><dl>

<!DOCTYPE html>
<html>
<style>

dl { display:block;border:2px outset black;margin:1em; line-height:18px;}  
dt { display:inline-block;width:3em; word-wrap:break-word;} 

dd { margin-left:0; display:inline; vertical-align:top; line-height:1.3;} 
dd:after { content:'';display:block; } 


.glosstable { border:2px outset #aaaaaa;margin:1em; text-align:left}  
.glosstable, table, tbody,  tr,  td, dl, dt {font-size:100%; line-height:18px;}

.glossaz { font-size:140%;padding-left:2em;font-weight:bold;color: #00838c; } 
td.first {width: 2.5em;} 
</style>
<body>
Table<br>
<table class="glosstable">
  <tr><td class="first">Milk</td>
  <td class="glossdata">Black hot drink</td>
</tr>
  <tr><td class="first">Coffee2</td>
  <td class="glossdata">Black hot drink</td>
</tr>
  <tr><td>Warm milk</td>
  <td class="glossdata">White hot drink</td>
</tr>
</table>
DL list <br>
<dl class="glosstablep">
  <dt>Milk</dt>
  <dd class="glossdata">White cold drink</dd>
  <dt>Coffee2</dt>
  <dd class="glossdata">Black cold drink</dd>
  <dt>Warm Milk</dt>
  <dd class="glossdata">White hot drink</dd>
</dl>

</body>
</html>


0

定義リストをテーブルとしてスタイリングするときは、通常、次のことから始めます。

dt,
dd{
    /* Override browser defaults */
    display: inline;
    margin: 0;
}

dt  {
    clear:left;
    float:left;
    line-height:1; /* Adjust this value as you see fit */
    width:33%; /* 1/3 the width of the parent. Adjust this value as you see fit */
}

dd {
    clear:right;
    float: right;
    line-height:1; /* Adjust this value as you see fit */
    width:67%; /* 2/3 the width of the parent. Adjust this value as you see fit */
}

-8

ここで人々が提案したことのほとんどは機能しますが、以下に示すように、一般的なコードをスタイルシートに配置し、特定のコードをHTMLコードに配置する必要があります。そうしないと、スタイルシートが肥大化してしまいます。

ここに私がそれをする方法があります:

あなたのスタイルシートコード:

<style>
    dt {
        float:left;
    }
    dd {
        border-left:2px dotted #aaa;
        padding-left: 1em;
        margin: .5em;
    }   
</style>

あなたのhtmlコード:

<dl>
    <dt>1st Entity</dt>
    <dd style="margin-left: 5em;">Consumer</dd>
    <dt>2nd Entity</dt>
    <dd style="margin-left: 5em;">Merchant</dd>
    <dt>3rd Entity</dt>
    <dd style="margin-left: 5em;">Provider, or cToken direct to Merchant</dd>
    <dt>4th Entity</dt>
    <dd style="margin-left: 5em;">cToken to Provider</dd>
</dl>

こんな感じ


1
それがスタイルシートに移動できる場合は、margin-leftを繰り返さないことをお勧めします。これらはコードの重複を防ぐためにあります。スタイルシートの膨張は、一貫したデザインで打ち消すことができます。しかし、それでも-膨張を防ぐことがネットワークトラフィックを節約することである場合は、HTMLの代わりにスタイルシートに貼り付けることで保存されます。
Iiridayn 2013年

2
-1すみません。本当に他に選択肢がない場合を除いて、インラインスタイルを使用しないでください。そうしないと、最初は本当に厄介なhtmlマークアップになります。
MEM

これはアンチパターンだと思います。
Denis Ivanov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.