Форматирование списка нарушено

Пример: * 1932.

Удивительно, но это тоже работает: * 1917-32.

  • 1917-32.

Я использую новейшую версию 3.3.0.beta3-dev без каких-либо плагинов.

2 лайка
    1. тестирование
    1. тест второй строки

Используемая разметка

* 1932. тест смт
* 1933. снова сейчас тогда

Да, я вижу проблему, но это не кажется валидной разметкой Markdown. Я протестировал это в другом редакторе Markdown и столкнулся с аналогичной проблемой:

Вы можете избежать этого, убрав точку после числа. Например:

  • 1932 - тестирование
  • 1933 - тест второй строки

или исключив * в начале:

  1. тестирование
  2. тест второй строки
1932. тестирование
1933. тест второй строки
1 лайк

Но это работает только для последовательных лет:

  1. первый
  2. второй
  3. третий
2008. первый
2014. второй
2015. третий

Возможно, использование HTML вместо Markdown также может служить альтернативой:

  • 1997. первый
  • 2000. второй
  • 2015. третий
<ul>
  <li> 1997. первый</li>
  <li> 2000. второй</li>
  <li> 2015. третий</li>
</ul>
1 лайк

Это также ограничение Markdown. Протестировал GitHub и несколько других редакторов Markdown — все они по умолчанию создают нумерованные списки.

3 лайка

Удаление этого отступа с помощью CSS нормализует его.

li>ul, li>ol, .cooked li>ul, .cooked li>ol, .d-editor-preview li>ul, .d-editor-preview li>ol {
    margin: 0; /* Удалите это */
}
1 лайк
12983298. one
2. test
  1. one
  2. test

Да, я видел это раньше. Мы используем сложные приёмы в CSS, которые в редких случаях нарушают это визуально.

Думаю, причина в том, что это можно использовать во вред. Возможно, @awesomerobot помнит.

2 лайка

хм, ещё один тест:

- 12983298\. one
- 2\. test
  • 12983298. one
  • 2. test
* 12983298\. one
* 2\. test
  • 12983298. one
  • 2. test

Очевидно, что число, за которым следует точка, даже если оно не является первым токеном в строке, будет восприниматься как нумерованный список.

1 лайк

Это происходит потому, что в Markdown, когда после числа ставится точка ., система предполагает, что это нумерованный список.

Таким образом, используя форматирование вроде * 1932., вы генерируете следующий HTML:

<ul>
  <li>
    <ol start="1932">
      <li><!-- содержимое элемента --></li>
    </ol>
  </li>
  <li>
    <ol start="1933">
      <li><!-- содержимое элемента --></li>
    </ol>
  </li>
</ul>

Технически это валидно, но выглядит странно и не является ожидаемым поведением.

Это происходит потому, что при добавлении дефиса - число перестает быть последовательным, поэтому система не распознает это как нумерованный список, и точка игнорируется.

Чтобы избежать этого, в идеале следует использовать один из следующих вариантов:

* 1932 (маркированный список, если числа не являются последовательными)

или

1932. (нумерованный список, если числа последовательные)

Если точка необходима, но список не должен быть нумерованным, можно экранировать точку . с помощью обратного слэша \ следующим образом:

* 1932\.

Это отдельная проблема, которая возникает и при использовании CSS браузера по умолчанию:

Маркер элемента в HTML-списке — это псевдоэлемент, который размещается до учёта отступов (padding/margin) списка, поэтому он всегда появляется за пределами «блока» контента. Даже при удалении отступов у списка маркеры будут выходить за его границы.

Например, если убрать отступы у списка и добавить свойство overflow: hidden для родительского контейнера, маркеры списка вообще не будут видны:

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

Наши CSS-стили делают списки немного более компактными по горизонтали по сравнению со стандартными, и мы используем как левый отступ (margin), так и внутренний отступ (padding)… но результат в целом тот же:

Существует CSS-свойство list-style-position: inside, которое может изменить положение маркера, поместив его внутрь блока контента. Однако это означает, что вы больше не получите красивого выравнивания номеров:

list-style-position: outside; (по умолчанию):

image

list-style-position: inside; (маркер списка занимает место внутри контента)

image

Таким образом, чтобы корректно поддерживать нумерованные списки любой длины и не нарушать выравнивание контента, нам пришлось бы сделать что-то вроде… использовать JavaScript для определения количества цифр в маркере (начиная с первого числа в списке, затем подсчитать все элементы списка, чтобы определить длину) и применить достаточный отступ, чтобы вместить самое большое число.

4 лайка

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

2 лайка