Число вложенных упорядоченных списков в HTML
У меня есть вложенный упорядоченный список.
<ol>
<li>first</li>
<li>second
<ol>
<li>second nested first element</li>
<li>second nested secondelement</li>
<li>second nested thirdelement</li>
</ol>
</li>
<li>third</li>
<li>fourth</li>
</ol>
В настоящее время вложенные элементы снова начинаются с 1, например.
- первый
- второй
- второй вложенный первый элемент
- второй вложенный второй элемент
- второй вложенный третий элемент
- третий
- четвёртая
Я хочу, чтобы второй элемент был пронумерован следующим образом:
- первый
-
второй
2,1. второй вложенный первый элемент
2,2. второй вложенный второй элемент
2,3. второй вложенный третий элемент
- третий
- четвёртая
Есть ли способ сделать это?
Ответы
Ответ 1
Вот пример, который работает во всех браузерах. Чистый CSS-подход работает в реальных браузерах (т.е. Все, кроме IE6/7), и jQuery код должен охватывать неподдерживаемые. Это в аромате SSCCE, вы можете просто скопировать'n'paste'n'run его без изменений.
<!doctype html>
<html lang="en">
<head>
<title>SO question 2729927</title>
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function() {
if ($('ol:first').css('list-style-type') != 'none') { /* For IE6/7 only. */
$('ol ol').each(function(i, ol) {
ol = $(ol);
var level1 = ol.closest('li').index() + 1;
ol.children('li').each(function(i, li) {
li = $(li);
var level2 = level1 + '.' + (li.index() + 1);
li.prepend('<span>' + level2 + '</span>');
});
});
}
});
</script>
<style>
html>/**/body ol { /* Won't be interpreted by IE6/7. */
list-style-type: none;
counter-reset: level1;
}
ol li:before {
content: counter(level1) ". ";
counter-increment: level1;
}
ol li ol {
list-style-type: none;
counter-reset: level2;
}
ol li ol li:before {
content: counter(level1) "." counter(level2) " ";
counter-increment: level2;
}
ol li span { /* For IE6/7. */
margin: 0 5px 0 -25px;
}
</style>
</head>
<body>
<ol>
<li>first</li>
<li>second
<ol>
<li>second nested first element</li>
<li>second nested second element</li>
<li>second nested third element</li>
</ol>
</li>
<li>third</li>
<li>fourth</li>
</ol>
</body>
</html>
Ответ 2
Я знаю, что поздно ответить, но я просто нашел пример этого, используя CSS. Добавьте это к вам раздел (или файл) CSS:
ol.nested
{
counter-reset: item
}
li.nested
{
display: block
}
li.nested:before
{
content: counters(item, ".") ". ";
counter-increment: item
}
Вот пример того, как выглядит ваш код списка:
<ol class="nested">
<li class="nested">item 1</li>
<li class="nested">item 2
<ol class="nested">
<li class="nested">subitem 1</li>
<li class="nested">subitem 2</li>
</ol></li>
<li class="nested">item 3</li>
</ol>
НТН
Ответ 3
Ни одно из решений на этой странице не работает правильно и универсально для всех уровней и длинных (завернутых) абзацев. Его очень сложно достичь последовательного отступа из-за переменного размера маркера (1., 1.2, 1.10, 1.10.5,...); он не может быть просто "фальшив", даже не с заранее рассчитанным запасом/заполнением для каждого возможного уровня отступов.
![]()
Наконец-то я нашел решение, которое действительно работает и не нуждается в JavaScript.
Его протестировали на Firefox 32, Chromium 37, IE 9 и Android Browser. Не работает в IE 7 и ранее.
CSS
ol {
list-style-type: none;
counter-reset: item;
margin: 0;
padding: 0;
}
ol > li {
display: table;
counter-increment: item;
margin-bottom: 0.6em;
}
ol > li:before {
content: counters(item, ".") ". ";
display: table-cell;
padding-right: 0.6em;
}
li ol > li {
margin: 0;
}
li ol > li:before {
content: counters(item, ".") " ";
}
Пример:
![example]()
Попробуйте на jsFiddle, разворачивайте его на Gist.
Ответ 4
Acctualy, если вы использовали sass/scss в проекте для стилизации, вы можете использовать mixin для этого. Для стилизации этого вложенного списка вам нужно всего две строки кода sass.
@import 'nested_list'
+nested_list('nested', 2)
<ol>
<li>first</li>
<li>second
<ol class="nested-2">
<li>second nested first element</li>
<li>second nested secondelement</li>
<li>second nested thirdelement</li>
</ol>
</li>
<li>third</li>
<li>fourth</li>
</ol>
В полном примере вы можете клонировать/смотреть git repo или сгенерировать css на fidle
Ответ 5
Это невозможно в чистом HTML/CSS. См. ответ BalusC для отличного решения из готового решения. Список типов нумерации можно найти в w3schools, здесь.
Ближайшим вариантом, который я смог найти, является использование атрибута value
, начиная с w3c, но следующая разметка
<ol>
<li value="30">
makes this list item number 30.
</li>
<li value="40">
makes this list item number 40.
</li>
<li>
makes this list item number 41.
</li>
<li value="2.1">
makes this list item number ...
</li>
<li value="2-1">
makes this list item number ...
</li>
</ol>
создает список с номерами 30, 40, 41, 2 и 2.
Как уже указывал Джон, ваш лучший выбор будет заключаться в написании сценариев в этой ситуации.
Ответ 6
С небольшой настройкой вы сможете адаптировать используемую здесь технику (во втором примере) для создания последовательных списков.