Как сохранить отступ для второй строки в упорядоченных списках через CSS?
Я хочу иметь" внутренний " список с маркерами списка или десятичными числами, которые все заподлицо с превосходными текстовыми блоками. Вторые строки записей списка должны иметь тот же отступ, что и первая строка!
например:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor. Aenean Aenean massa.
Cum sociis natoque penatibus et magnis dis parturient montes,
nascetur ridiculus mus. Donec quam felis,
1. Text
2. Text
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor.
CSS предоставляет только два значения для его "list-style-position" - внутри и снаружи. С "внутри" вторые строки заподлицо со списком точек не с верхней линией:
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
ширина "снаружи" мой список не заподлицо с превосходными текстовыми блоками больше.
эксперименты ширина текста-отступ, отступ-левый и край-левый работают для неупорядоченных списков, но они терпят неудачу для упорядоченных списков, потому что это зависит от списка-десятичного числа символов:
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Aenean commodo ligula eget dolor.
3. longer Text, longer Text, longer Text, longer Text, longer Text, longer Text
second line of longer Text
4. Text
11. Text
12. Text
"11."и "12."не заподлицо с превосходящим текстовым блоком по сравнению с" 3."и "4.".
Итак, где секрет о упорядоченных списках и отступе второй строки? Спасибо за ваши усилия!
14 ответов
обновление
этот ответ устарел. Вы можете сделать это намного проще, как указано Я удивлен, что это еще не решено. Вы можете использовать алгоритм компоновки таблицы браузера (без использования таблиц) следующим образом:
ul {
list-style-position: outside;
}
см.https://www.w3schools.com/cssref/pr_list-style-position.asp
Оригинальный Ответ
ol {
counter-reset: foo;
display: table;
}
ol > li {
counter-increment: foo;
display: table-row;
}
ol > li::before {
content: counter(foo) ".";
display: table-cell; /* aha! */
text-align: right;
}
демо: http://jsfiddle.net/4rnNK/1/
чтобы заставить его работать в IE8, используйте legacy :before
обозначение одним двоеточием.
Я считаю, что это сделает то, что вы ищете.
.cssClass li {
list-style-type: disc;
list-style-position: inside;
text-indent: -1em;
padding-left: 1em;
}
JSFiddle: https://jsfiddle.net/dzbos70f/
самый простой и чистый способ, без каких-либо хаков, это просто отступ ul
(или ol
), вот так:
ol {
padding-left: 40px;
list-style-position: outside;
}
Это дает тот же результат, что и принятый ответ:https://jsfiddle.net/af2fqryz/
скриншоты:
, проверьте эту скрипку:
он показывает, как вручную отступить ul и ol с помощью CSS.
HTML-код
<head>
<title>Lines</title>
</head>
<body>
<ol type="1" style="list-style-position:inside;">
<li>Text</li>
<li>Text</li>
<li >longer Text, longer Text, longer Text, longer Text second line of longer Text </li>
</ol>
<br/>
<ul>
<li>Text</li>
<li>Text</li>
<li>longer Text, longer Text, longer Text, longer Text second line of longer Text </li>
</ul>
</body>
в CSS
ol
{
margin:0px;
padding-left:15px;
}
ol li
{
margin: 0px;
padding: 0px;
text-indent: -1em;
margin-left: 1em;
}
ul
{
margin:0;
padding-left:30px;
}
ul li
{
margin: 0px;
padding: 0px;
text-indent: 0.5em;
margin-left: -0.5em;
}
также я отредактировал вашу скрипку
запишите его.
вы можете задать margin и padding либо ol
или ul
в CSS
ol {
margin-left: 0;
padding-left: 3em;
list-style-position: outside;
}
Я считаю, что вам просто нужно поместить список "пуля" вне обивки.
li {
list-style-position: outside;
padding-left: 1em;
}
вы можете использовать CSS для выбора диапазона; в этом случае вам нужны элементы списка 1-9:
ol li:nth-child(n+1):nth-child(-n+9)
затем отрегулируйте поля на этих первых элементах соответствующим образом:
ol li:nth-child(n+1):nth-child(-n+9) { margin-left: .55em; }
ol li:nth-child(n+1):nth-child(-n+9) em,
ol li:nth-child(n+1):nth-child(-n+9) span { margin-left: 19px; }
смотрите его в действии здесь:http://www.wortfm.org/wort-madison-charts-for-the-week-beginning-11192012/
мое решение совершенно такое же, как Pumbaa80один, но я предлагаю использовать display: table
вместо display:table-row
на li
элемент.
Так что будет что-то вроде этого:
ol {
counter-reset: foo; /* default display:list-item */
}
ol > li {
counter-increment: foo;
display: table; /* instead of table-row */
}
ol > li::before {
content: counter(foo) ".";
display: table-cell;
text-align: right;
}
Итак, теперь мы можем использовать поля для интервала между li
' s
Я сам очень люблю это решение:
ul {
list-style-position: inside;
list-style-type: disc;
font-size: 12px;
line-height: 1.4em;
padding: 0 1em;
}
ul li {
margin: 0 0 0 1em;
padding: 0 0 0 1em;
text-indent: -2em;
}
следующий CSS сделал трюк:
ul{
margin-left: 1em;
}
li{
list-style-position: outside;
padding-left: 0.5em;
}
списки ol, ul будут работать, если вы хотите, вы также можете использовать таблицу с границей: нет в css.
хорошо, я вернулся и кое-что выяснил. Это грубое решение того, что я предлагал, но оно кажется функциональным.
во-первых, я сделал номера серией неупорядоченных списков. Неупорядоченный список обычно имеет диск в начале каждого элемента списка (
затем я сделал весь список отображения: таблица-строки. Вот, почему бы мне просто не вставить вам код, а не болтать о это?
<html>
<head>
<link type="text/css" rel="stylesheet" href="stylesheet.css"/>
<title>Result</title>
</head>
<body>
<div><ul>
<li>1.</li>
<li><p>2.</p></li>
<li>10.</li>
<li><p>110.</p></li>
<li>1000.</li>
</ul>
</div>
<div>
<p>Some author</p>
<p>Another author</p>
<p>Author #10</p>
<p>Author #110</p>
<p>The one thousandth author today will win a free i-Pod!!!! This line also wraps around so that we can see how hanging indents look.</p>
</div>
</body>
</html>'
CSS:
ul li{
list-style: none;
display: table-row;
text-align: right;
}
div {
float: left;
display: inline-block;
margin: 0.2em;
}
это, кажется, выравнивает текст во 2-м div с номерами в упорядоченном списке в первом div. Я окружил список и текст тегом, чтобы я мог просто сказать всем divs отображать как встроенные блоки. Это выстроило их в линию.
поле есть, чтобы поместить пробел между периодом и началом текста. В противном случае, они бегут прямо против одного другой и это выглядит как бельмо на глазу.
мой работодатель хотел, чтобы обернутый текст (для более длинных библиографических записей) соответствовал началу первой строки, а не левому краю. Первоначально я возился с положительным полем и отрицательным отступом текста, но затем я понял, что когда я переключился на два разных Дива, это привело к тому, что текст выстроился в линию, потому что левое поле div было полем, где текст естественно начинался. Таким образом, все Мне нужен был запас 0,2 ЭМ, чтобы добавить немного места,а все остальное выстроилось плавно.
Я надеюсь, что это поможет, если у OP была аналогичная проблема...Мне было трудно понять его / ее.
CSS предоставляет только два значения для своей "позиции стиля списка" - внутри и снаружи. С "внутри" вторые строки заподлицо со списком точек не с верхней линией:
в упорядоченных списках, без вмешательства, если вы дадите" list-style-position "значение " inside", вторая строка длинного элемента списка не будет иметь отступа, но вернется к левому краю списка (т. е. он будет выравниваться по левому краю с номером элемента). Это свойственно упорядоченным спискам и не бывает в неупорядоченных списках.
Если вы вместо этого дадите "list-style-position" значение "outside", вторая строка будет иметь тот же отступ, что и первая строка.
У меня был список с границей и была эта проблема. С" list-style-position", установленным на "inside", мой список не выглядел так, как я хотел. Но с" list-style-position", установленным на "outside", номера элементов списка вышли за рамки.
Я решил это, просто установив более широкий левый маржа для всего списка, которая толкнула весь список вправо, обратно в положение, в котором он был раньше.
CSS:
ol.classname {margin:0;padding: 0;}
ol.classname li {margin: 0.5 em 0 0 0; padding-left:0; list-style-position: outside;}
HTML-код:
<ol class="classname" style="margin:0 0 0 1.5em;">
у меня была такая же проблема и начал использовать user123444555621 в ответ. Однако мне также нужно было добавить padding
и border
для каждого li
, что это решение не позволяет, потому что каждый li
это table-row
.
во-первых, мы используем counter
повторить 'ы.
затем мы ставим display: table;
в каждом li
и display: table-cell
на :before
чтобы дать нам вмятины.
наконец, самая сложная часть. Так как мы не используйте макет таблицы для всего ol
мы должны обеспечить каждого :before
такая же ширина. Мы можем использовать ch
блок чтобы примерно сохранить ширину, равную количеству символов. Для того, чтобы сохранить ширину равномерной, когда количество цифр для :before
отличаемся, можем реализовать количество запросов. Предполагая, что ваши списки не будут 100 или более элементов, вам нужно только одно правило запроса количества, чтобы сказать :before
изменить его ширину, но вы можно легко добавить больше.
ol {
counter-reset: ol-num;
margin: 0;
padding: 0;
}
ol li {
counter-increment: ol-num;
display: table;
padding: 0.2em 0.4em;
border-bottom: solid 1px gray;
}
ol li:before {
content: counter(ol-num) ".";
display: table-cell;
width: 2ch; /* approximately two characters wide */
padding-right: 0.4em;
text-align: right;
}
/* two digits */
ol li:nth-last-child(n+10):before,
ol li:nth-last-child(n+10) ~ li:before {
width: 3ch;
}
/* three digits */
ol li:nth-last-child(n+100):before,
ol li:nth-last-child(n+100) ~ li:before {
width: 4ch;
}
<ol>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequuntur facere veniam saepe vel cumque, nobis quisquam! Velit maiores blanditiis cum in mollitia quas facere sint harum, officia laborum, amet vero!</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequuntur facere veniam saepe vel cumque, nobis quisquam! Velit maiores blanditiis cum in mollitia quas facere sint harum, officia laborum, amet vero!</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequuntur facere veniam saepe vel cumque, nobis quisquam! Velit maiores blanditiis cum in mollitia quas facere sint harum, officia laborum, amet vero!</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequuntur facere veniam saepe vel cumque, nobis quisquam! Velit maiores blanditiis cum in mollitia quas facere sint harum, officia laborum, amet vero!</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequuntur facere veniam saepe vel cumque, nobis quisquam! Velit maiores blanditiis cum in mollitia quas facere sint harum, officia laborum, amet vero!</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequuntur facere veniam saepe vel cumque, nobis quisquam! Velit maiores blanditiis cum in mollitia quas facere sint harum, officia laborum, amet vero!</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequuntur facere veniam saepe vel cumque, nobis quisquam! Velit maiores blanditiis cum in mollitia quas facere sint harum, officia laborum, amet vero!</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequuntur facere veniam saepe vel cumque, nobis quisquam! Velit maiores blanditiis cum in mollitia quas facere sint harum, officia laborum, amet vero!</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequuntur facere veniam saepe vel cumque, nobis quisquam! Velit maiores blanditiis cum in mollitia quas facere sint harum, officia laborum, amet vero!</li>
<li>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Consequuntur facere veniam saepe vel cumque, nobis quisquam! Velit maiores blanditiis cum in mollitia quas facere sint harum, officia laborum, amet vero!</li>
</ol>