Как стилизовать 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 на той же строке? То есть производя что-то, что выглядит так:

16 ответов:
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>
у меня есть решение без использования поплавков!
проверитьcodepenто есть.
dl.inline dd { display: inline; margin: 0; } dl.inline dd:after{ display: block; content: ''; } dl.inline dt{ display: inline-block; min-width: 100px; }
обновление - 3rd января 2017: я добавил решение на основе flex-box для этой проблемы. Проверьте это в связанном 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; }
Если вы используете bootstrap...
<dl class="dl-horizontal"> <dt>Label:</dt> <dd> Description of planet </dd> <dt>Label2:</dt> <dd> Description of planet </dd> </dl>
потому что я еще не видел пример, который работает для моего случая использования, вот наиболее полное доказательство решения, которое я смог реализовать.
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как ни странно, это не работает с
display: inline-block. Я полагаю, что если вам нужно настроить размер любого элементаdtэлементы илиddэлементы, вы можете установить какdisplay: flexbox; display: -webkit-flex; display: flex;иflexскорописьюddэлементы иdtэлементы как-то какflex: 1 1 50%иdisplayкакdisplay: inline-block. Но я не проверял это, поэтому подходите с осторожностью.
CSS Grid layout
как и таблицы, макет сетки позволяет автору выравнивать элементы по столбцам и rows.
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>
посмотреть демо jsFiddle
мне нужен был список точно так, как описано для проекта, который показал сотрудников в компании, с их фотографией слева и информацией справа. Мне удалось выполнить очистку с помощью psuedo-элементов после каждого
DD:.myList dd:after { content: ''; display: table; clear: both; }кроме того, я хотел, чтобы текст отображался только справа от изображения, без обертывания под плавающим изображением (эффект псевдо-столбца). Этот может быть достигнуто путем добавления
DIVэлемент с CSSoverflow: hidden;по содержаниюDDтег. Вы можете опустить этот дополнительныйDIV, но контентDDтег обернется под плавающимDT.после игры с ним некоторое время, я был в состоянии поддерживать несколько
DTэлементы наDD, но не несколькоDDэлементы наDT. Я попытался добавить еще один необязательный класс, чтобы очистить только после последнегоDD, однако послеDDэлементы, завернутые подDTэлементы (не мой желаемый эффект... я хотел, чтобыDTиDDэлементы для формирования столбцов, а дополнительныеDDэлементы были слишком широки).по всем правам, это должно работать только в IE8+, но из-за причуды в IE7 он работает там же.
мне нужно сделать это и есть
<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; } }
вот еще один вариант, который работает, отображая DT и DD inline, а затем добавляя разрыв строки после dd.
dt, dd { display: inline; } dd:after { content:"\a"; white-space: pre; }это похоже на решение Navaneeth выше, но при использовании этого подхода содержимое не будет выстраиваться как в таблице, но dd будет следовать за dt сразу на каждой строке независимо от длины.
я нашел решение, которое кажется мне идеальным, но оно нуждается в дополнительном
<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>
в зависимости от того, как вы стилизуете элементы 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>
мне недавно понадобилось смешивать встроенные и невстроенные ДТ/ДД парами, путем указания класса
dl-inlineon<dt>элементы, за которыми следует inline<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 >
это работает на 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>
это работает, чтобы отобразить их в виде таблицы, с границей, он должен быть отзывчивым с 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>
обычно я начинаю со следующего при стилизации списков определений в виде таблиц:
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 */ }
большинство из того, что люди здесь предложили, работает, однако вы должны поместить только общий код в таблицу стилей и поместить конкретный код в 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>

Comments