Можно ли указать начальный номер для упорядоченного списка?

У меня есть упорядоченный список, в котором я хотел бы, чтобы начальный номер был 6. Я обнаружил, что это было поддерживается (теперь устарело) в HTML 4,01. В этой спецификации они говорят, что вы можете указать начальное целое число с помощью CSS. (вместо атрибута start)

Как бы вы определили начальный номер с CSS?

Ответ 1

Если вам нужна функциональность для запуска упорядоченного списка (OL) в определенной точке, вам нужно указать свой doctype как HTML 5; который:

<!doctype html>

С помощью этого doctype допустимо установить атрибут start в упорядоченном списке. Например:

<ol start="6">
  <li>Lorem</li>
  <li>Ipsum</li>
  <li>Dolor</li>
</ol>

Ответ 2

<ol start=""> больше не устаревает в HTML5, поэтому я буду продолжать использовать его независимо от того, что говорит HTML4.01.

Ответ 3

start="number" отстой, потому что он не изменяется автоматически на основе нумерации перед ним.

Другим способом сделать это, который может соответствовать более сложным потребностям, является использование counter-reset и counter-increment.

Проблема

Скажите, что вы хотели что-то вроде этого:

1. Item one
2. Item two

Interruption from a <p> tag

3. Item three
4. Item four

Вы можете установить start="3" на третьем li второго ol, но теперь вам нужно будет его менять каждый раз, когда вы добавляете элемент в первый ol

Решение

Сначала очистите форматирование нашей текущей нумерации.

ol {
  list-style: none;
}

У каждого из них будет отображаться счетчик

ol li:before {
  counter-increment: mycounter;
  content: counter(mycounter) ". ";
}

Теперь нам просто нужно убедиться, что счетчик сбрасывается только на первом ol вместо каждого.

ol:first-of-type {
  counter-reset: mycounter;
}

Demo

http://codepen.io/ajkochanowicz/pen/mJeNwY

Теперь я могу добавить столько элементов в любой список, и нумерация будет сохранена.

1. Item one
2. Item two
...
n. Item n

Interruption from a <p> tag

n+1. Item n+1
n+2. Item n+2
...

Ответ 4

Как и другие, можно использовать атрибут start элемента ol.

В качестве альтернативы можно использовать атрибут value элемента li. Оба атрибута отмечены как устаревшие в HTML 4.01, но не в HTML 5 (ol и li).

<ol start="-2">
  <li>Alpha</li>
  <li>Beta</li>
  <li value="10">Gamma</li>
  <li>Delta</li>
</ol>

Ответ 5

Я удивлен, что не смог найти ответ в этой теме.

Я нашел этот источник, который я суммировал ниже:

Чтобы установить начальный атрибут для упорядоченного списка, используя CSS вместо HTML, вы можете использовать свойство counter-increment следующим образом:

ol {
  list-style: none;
  counter-increment: start 3;
  }
li:before {
  content: counter(start, lower-alpha) ") ";
  counter-increment: start;
  }

counter-increment видимому, имеет индекс 0, поэтому для получения списка, начинающегося с 4, используйте 3.

Для следующего HTML

<ol>
  <li>Buy milk</li>
  <li>Feed the dog</li>
  <li>Drink coffee</li>
</ol>

Мой результат

d) Buy milk
e) Feed the dog
f) Drink coffee

Проверьте мою скрипку

Смотрите также W3 ссылку

Ответ 6

Для нумерации упорядоченного списка с номера, отличного от значения по умолчанию ("1"), требуется атрибут start. Этот атрибут был разрешен (не рекомендуется) в спецификации HTML 4.01 (HTML 4.01 еще не был "Замененной спецификацией" на момент публикации этого вопроса) и по-прежнему разрешен в текущей спецификации HTML 5.2. Элемент ol также имел необязательный атрибут start в переходном DTD XHTML 1.0, но не в строгом DTD XHTML 1.0 (найдите строку ATTLIST ol и проверьте список атрибутов). Таким образом, несмотря на то, что говорится в некоторых старых комментариях, атрибут start не устарел; скорее это было недопустимо в строгих DTD HTML 4.01 и XHTML 1.0. Несмотря на то, что говорится в одном из комментариев, атрибут start недопустим для элемента ul и в настоящее время не работает в Firefox и Chromium.

Также обратите внимание, что разделитель тысяч не работает (в текущих версиях Firefox и Chromium). В следующем фрагменте кода 10.000 будет интерпретироваться как 10; то же самое относится и к 10,000. Поэтому не используйте следующий тип значения counter:

<ol start="10.000">
  <li>Item 10.000</li>
  <li>Next item</li>
  <li>Next item</li>
</ol>

Итак, что вы должны использовать, это следующее (в редких случаях, когда требуются значения выше 1000):

<ol start="10000">
  <li>Item 10.000</li>
  <li>Next item</li>
  <li>Next item</li>
</ol>

В некоторых других ответах предлагается использовать counter свойств CSS, но это противоречит традиционному разделению содержимого и макета (в HTML и CSS соответственно). Пользователи с определенными нарушениями зрения могут использовать свои собственные таблицы стилей, и в результате значения counter могут быть потеряны. Также необходимо проверить поддержку считывателя экрана для counter. Поддержка программ чтения с экрана для содержимого в CSS - относительно недавняя функция, и поведение не обязательно согласовано. См. Раздел " Считыватели экрана" и "CSS": выйдем ли мы из моды (в контент)? Джон Нортуп в блоге WebAIM (август 2017 г.)

Ответ 7

В случае, если списки являются вложенными, должна быть обработка, опускающая вложенные элементы списка, что я сделал, убедившись, что родительский элемент не является элементом списка.

var section = document.getElementById("TheContent");
var list = section.getElementsByTagName("li");
var cnt = 0;
for (var i=0;i<list.length;i++){
  if (list[i].parentElement.parentElement.nodeName!="LI") {
    cnt += 1;
    list[i].setAttribute("value",cnt);
  }
}
<!DOCTYPE html>
<html>
<body>

<section id="TheContent">
<h2>Ordered Lists - numbering not interupted</h2>
<p>This example avoids for the first list level that each ordered list starts with 1:</p>

<p><strong>1st list:</strong></p>
<ol>
  <li>list item 1</li>
  <li>list item 2</li>
  <li>list item 3</li>
</ol>

<p><strong>2nd list:</strong></p>
<ol>
  <li>item</li>
  <li>item
    <ol>
      <li>item</li>
      <li>item</li>
      <li>item</li>
    </ol>
  </li>
  <li>item</li>
</ol>
</section>

</body>
</html>

Ответ 8

С CSS немного сложнее охватить случай наличия вложенных элементов списка, таким образом, только первый уровень списка получает пользовательскую нумерацию, которая не прерывается с каждым новым упорядоченным списком. Я использую CSS комбинатор '>', чтобы определить возможные пути к элементам списка, которые должны получить собственную нумерацию. Смотрите https://www.w3schools.com/css/css_combinators.asp

body {
  counter-reset: li_cnt;
}
/* discard auto generated numbers */
ol {
  list-style-type: none;
}
/* all possible paths to the list item that shall have custom numbering */
section#TheContent > ol > li:before,
body > ol > li:before {
  counter-increment: li_cnt;
  content: counter(li_cnt)'. '; /* add own numbers */
}
/* switch on default auto generated numbers for nested list items */
li > ol {
  list-style-type: decimal;
}
<!DOCTYPE html>
<html>
<body>

<section id="TheContent">
<h2>Ordered Lists - numbering not interupted</h2>
<p>This example avoids for the first list level that each ordered list starts with 1:</p>

<p><strong>1st list:</strong></p>
<ol>
  <li>list item 1</li>
  <li>list item 2</li>
  <li>list item 3</li>
</ol>

<p><strong>2nd list:</strong></p>
<ol>
  <li>item</li>
  <li>item
    <ol>
      <li>item</li>
      <li>item</li>
      <li>item</li>
    </ol>
  </li>
  <li>item</li>
</ol>
</section>

</body>
</html>

Ответ 9

Вот живой пример упорядочения списка в топ-10 Гоа

Ответ 10

Очевидно, что ни @start упорядоченного списка <ol>, ни @value элемента списка <li> не могут быть установлены с помощью CSS. Смотрите https://www.w3schools.com/css/css_list.asp

Замена нумерации счетчиком в CSS кажется лучшим/быстрым/надежным решением, и есть другие, которые продвигают его, например, https://css-tricks.com/numbering-in-style/

С чистым JavaScript можно установить @value каждого элемента списка, но это, конечно, медленнее, чем CSS. Даже не требуется проверять, принадлежит ли элемент списка к упорядоченному списку <ol>, потому что неупорядоченные списки исключаются автоматически.

var section = document.getElementById("TheContent");
var list = section.getElementsByTagName("li");
for (var i=0; i<list.length; i++){
  if (list[i].parentElement.nodeName=="OL") {
    list[i].setAttribute("value",i+1);
  }
}
<!DOCTYPE html>
<html>
<body>

<section id="TheContent">
  <h2>Ordered Lists - numbering not interupted</h2>
  <p>This example avoid that each ordered list starts with 1:</p>

  <p><strong>1st list:</strong></p>
  <ol>
    <li>list item 1</li>
    <li>list item 2</li>
    <li>list item 3</li>
  </ol>

  <p><strong>2nd list:</strong></p>
  <ol>
    <li>list item 4</li>
    <li>list item 5</li>
    <li>list item 6</li>
  </ol>
  </section>

</body>
</html>