Как стилизовать dt и dd, чтобы они находились на одной линии?
Используя 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
в той же строке? То есть производя что-то похожее:
![формат таблицы]()
Ответы
Ответ 1
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
У меня есть решение без использования поплавков!
проверить это на codepen
Виз.
dl.inline dd {
display: inline;
margin: 0;
}
dl.inline dd:after{
display: block;
content: '';
}
dl.inline dt{
display: inline-block;
min-width: 100px;
}
Обновление - 3 rd Январь 2017: Я добавил решение на основе гибкой коробки для решения проблемы. Убедитесь, что в связанном codepen и уточните его в соответствии с потребностями. Спасибо!
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;
}
Ответ 3
Если вы используете Bootstrap 3 (или ранее)...
<dl class="dl-horizontal">
<dt>Label:</dt>
<dd>
Description of planet
</dd>
<dt>Label2:</dt>
<dd>
Description of planet
</dd>
</dl>
Ответ 4
Предполагая, что вы знаете ширину поля:
dt { float: left; width: 100px; }
dd { margin-left: 100px; }
Ответ 5
CSS Grid layout
Как и таблицы, макет сетки позволяет автору выравнивать элементы по столбцам и строкам.
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>
Ответ 6
Поскольку мне еще нужно увидеть пример, который работает для моего варианта использования, вот самое полное доказательство, которое я смог реализовать.
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="#">[email protected]</a></dd>
<dt>Postal Address</dt>
<dd><div class="address">123 FAKE ST<br />EXAMPLE EX 00000</div></dd>
</dl>
Text
Ответ 7
![jsFiddle Screenshot]()
Смотрите jsFiddle demo
Мне нужен был список точно так, как описано для проекта, который показал сотрудников в компании, с их фотографией слева и информацией справа. Мне удалось выполнить очистку, используя psuedo-элементы после каждого DD
:
.myList dd:after {
content: '';
display: table;
clear: both;
}
Кроме того, я хотел, чтобы текст отображался только справа от изображения, без обертки под плавающим изображением (эффект псевдо-столбца). Это можно сделать, добавив элемент DIV
с CSS overflow: hidden;
вокруг содержимого тега DD
. Вы можете опустить этот дополнительный DIV
, но содержимое тега DD
будет обтекаться плавающим DT
.
После игры с ним я смог поддерживать несколько DT
элементов за DD
, но не несколько элементов DD
на DT
. Я попробовал добавить еще один необязательный класс для очистки только после последнего DD
, но последующих DD
элементов, обернутых под элементами DT
(не мой желаемый эффект... Я хотел, чтобы элементы DT
и DD
формировали столбцы, и дополнительные элементы DD
были слишком широкими).
По всем правам, это должно работать только в IE8 +, но из-за причуды в IE7 он также работает там.
Ответ 8
Мне нужно сделать это и иметь контент <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;
}
}
Ответ 9
Вот еще один вариант, который работает, отображая встроенные строки dt и dd, а затем добавляя разрыв строки после dd.
dt, dd {
display: inline;
}
dd:after {
content:"\a";
white-space: pre;
}
Это похоже на решение Navaneeth выше, но, используя этот подход, контент не будет выстраиваться в линию, как в таблице, но dd будет следовать за dt сразу на каждой строке независимо от длины.
Ответ 10
В зависимости от стиля элементов dt и dd вы можете столкнуться с проблемой: сделать их одинаковыми. Например, если вы хотите увидеть некоторую видимую границу внизу этих элементов, вы, скорее всего, захотите отобразить границу на той же высоте, что и в таблице.
Одно из решений для этого - обман и делает каждую строку элементом "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>
Ответ 11
Я нашел решение, которое кажется мне идеальным, но ему нужны дополнительные теги <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>
Ответ 12
Мне недавно нужно было смешивать inline и non-inline пары dt/dd, указав класс dl-inline
на <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
>
Ответ 13
Это работает на 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.
Ответ 14
это работает, чтобы отобразить их как таблицу, с границей, она должна реагировать с 3em шириной первого столбца. Word-wrap просто разбивает любые слова, более широкие, чем столбец
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>
Ответ 15
Обычно при оформлении списков определений в виде таблиц я начинаю со следующего:
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 */
}
Ответ 16
Большинство предложенных здесь людей работают, однако вы должны помещать только общий код в таблицу стилей и помещать код в 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>
Похоже на это