Как вы можете настроить числа в упорядоченном списке?

Как выровнять числа в упорядоченном списке по левому краю?

1.  an item
// skip some items for brevity 
9.  another item
10. notice the 1 is under the 9, and the item contents also line up

Изменить символ после числа в упорядоченном списке?

1) an item

Также существует решение CSS для перехода от чисел к алфавитным / римским спискам вместо использования атрибута type в элементе ol.

Меня больше всего интересуют ответы, которые работают в Firefox 3.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
112
0
107 313
16
Перейти к ответу Данный вопрос помечен как решенный

Ответы 16

CSS для списков стилей - здесь, но в основном это:

li {
    list-style-type: decimal;
    list-style-position: inside;
}

Однако конкретный макет, который вам нужен, вероятно, может быть достигнут только путем вникания во внутренности макета с помощью чего-то вроде это (обратите внимание, что я на самом деле не пробовал):

ol { counter-reset: item }
li { display: block }
li:before { content: counter(item) ") "; counter-increment: item }

Это выравнивает числа, а текстовое содержимое - нет.

grom 28.01.2009 02:48

Существует Тип атрибута, который позволяет вам изменить стиль нумерации, однако вы не можете изменить точку после цифры / буквы.

<ol type = "a">
    <li>Turn left on Maple Street</li>
    <li>Turn right on Clover Court</li>
</ol>

Разметку в этом ответе нужно исправить. Используйте строчные буквы и заключайте значения атрибутов в «кавычки».

dylanfm 28.01.2009 01:46

И закройте свои элементы:

  • ...
  • .
    dylanfm 28.01.2009 01:46

    @dylanfm - Вы знаете, что представленная разметка правильная, 100% правильный HTML, да? Не опускайте людей за то, что они не используют XHTML, если XHTML не запрошен.

    Ben Blank 28.01.2009 03:00

    Я не голосовал против тебя. И да, это правда. HTML. Я был просто придирчивым и придирчивым человеком.

    dylanfm 28.01.2009 13:04

    Приношу свои извинения за размещение недействительного HTML. Я скопировал код с веб-сайта и не подумал его исправить. Мне теперь стыдно :(

    GateKiller 28.01.2009 13:55

    Я предлагаю поиграть с атрибутом: before и посмотреть, чего с его помощью можно достичь. Это будет означать, что ваш код действительно ограничен хорошими новыми браузерами и исключает (досадно большой) сегмент рынка, по-прежнему использующий устаревшие старые браузеры,

    Что-то вроде следующего, что заставляет фиксировать элементы. Да, я знаю, что выбирать ширину самостоятельно менее изящно, но использование CSS для вашего макета похоже на работу полиции под прикрытием: какими бы хорошими ни были ваши мотивы, всегда получается беспорядок.

    li:before {
      content: counter(item) ") ";
      counter-increment: item;
      display: marker;
      width: 2em;
    }
    

    Но вам придется поэкспериментировать, чтобы найти точное решение.

    вам понадобится счетчик сброса: item; перед этим блоком.

    Greg 03.05.2013 09:58

    Числа будут лучше выстраиваться, если вы добавите к числам ведущие нули, установив для список-стиль-тип значение:

    ol { list-style-type: decimal-leading-zero; }
    
    Ответ принят как подходящий

    Это решение, которое я работаю в Firefox 3, Opera и Google Chrome. Список по-прежнему отображается в IE7 (но без закрывающих скобок и чисел выравнивания по левому краю):

    ol {
      counter-reset: item;
      margin-left: 0;
      padding-left: 0;
    }
    li {
      display: block;
      margin-bottom: .5em;
      margin-left: 2em;
    }
    li::before {
      display: inline-block;
      content: counter(item) ") ";
      counter-increment: item;
      width: 2em;
      margin-left: -2em;
    }
    <ol>
      <li>One</li>
      <li>Two</li>
      <li>Three</li>
      <li>Four</li>
      <li>Five</li>
      <li>Six</li>
      <li>Seven</li>
      <li>Eight</li>
      <li>Nine<br>Items</li>
      <li>Ten<br>Items</li>
    </ol>

    Обновлено: Включено исправление нескольких строк, выполненное незнакомцем

    Also is there a CSS solution to change from numbers to alphabetic/roman lists instead of using the type attribute on the ol element.

    См. Свойство CSS список-стиль-тип. Или при использовании счетчиков второй аргумент принимает значение типа списка. Например, в следующем примере будет использоваться верхний римский алфавит:

    li::before {
      content: counter(item, upper-roman) ") ";
      counter-increment: item;
    /* ... */
    

    Необходимо было снова добавить числа, их удалял глобальный стиль (кто знает, почему вы использовали бы ol и удалили числа, а не ul ??). Очень четкий ответ +1 для полного объяснения и кода, можно легко изменить, чтобы делать что угодно.

    Morvael 13.02.2014 15:35

    Я предлагаю более чистое решение CSS поля / отступы, которое лучше работает со списками с широкой нумерацией: ol {counter-reset: item; padding-left: 0;} li {display: block; margin-bottom: .5em;} li:before {display: inline-block; content: counter(item) ") "; counter-increment: item; padding-right: 0.8em;}.

    mmj 26.07.2016 17:55

    Это здорово. Спасибо.

    aronmoshe_m 18.10.2020 06:16

    Документы говорят о list-style-position: outside

    CSS1 did not specify the precise location of the marker box and for reasons of compatibility, CSS2 remains equally ambiguous. For more precise control of marker boxes, please use markers.

    Далее на этой странице рассказывается о маркерах.

    Один из примеров:

           LI:before { 
               display: marker;
               content: "(" counter(counter) ")";
               counter-increment: counter;
               width: 6em;
               text-align: center;
           }
    

    Все примеры (см. w3.org/TR/CSS2/generate.html#q11) для маркеров у меня не работают.

    grom 30.01.2009 01:31

    У меня есть это. Попробуйте следующее:

    <html>
    <head>
    <style type='text/css'>
    
        ol { counter-reset: item; }
    
        li { display: block; }
    
        li:before { content: counter(item) ")"; counter-increment: item; 
            display: inline-block; width: 50px; }
    
    </style>
    </head>
    <body>
    <ol>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
        <li>Something</li>
    </ol>
    </body>
    

    Загвоздка в том, что этот определенно не будет работать в старых или менее совместимых браузерах: display: inline-block - очень новое свойство.

    Украл много этого из других ответов, но для меня это работает в FF3. Имеет upper-roman, равномерный отступ, закрывающую скобку.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns = "http://www.w3.org/1999/xhtml">
    <head>
    <title> new document </title>
    <style type = "text/css">
    <!--
    ol {
      counter-reset: item;
      margin-left: 0;
      padding-left: 0;
    }
    li {
      margin-bottom: .5em;
    }
    li:before {
      display: inline-block;
      content: counter(item, upper-roman) ")";
      counter-increment: item;
      width: 3em;
    }
    -->
    </style>
    </head>
    
    <body>
    <ol>
      <li>One</li>
      <li>Two</li>
      <li>Three</li>
      <li>Four</li>
      <li>Five</li>
      <li>Six</li>
      <li>Seven</li>
      <li>Eight</li>
      <li>Nine</li>
      <li>Ten</li>
    </ol>
    </body>
    </html>
    

    Заимствовал и улучшил Ответ Маркуса Даунинга. Протестировано и работает в Firefox 3 и Opera 9. Также поддерживает несколько строк.

    ol {
        counter-reset: item;
        margin-left: 0;
        padding-left: 0;
    }
    
    li {
        display: block;
        margin-left: 3.5em;          /* Change with margin-left on li:before.  Must be -li:before::margin-left + li:before::padding-right.  (Causes indention for other lines.) */
    }
    
    li:before {
        content: counter(item) ")";  /* Change 'item' to 'item, upper-roman' or 'item, lower-roman' for upper- and lower-case roman, respectively. */
        counter-increment: item;
        display: inline-block;
        text-align: right;
        width: 3em;                  /* Must be the maximum width of your list's numbers, including the ')', for compatability (in case you use a fixed-width font, for example).  Will have to beef up if using roman. */
        padding-right: 0.5em;
        margin-left: -3.5em;         /* See li comments. */
    }
    

    Также вам нужно выравнивание текста: слева; не правильно. И последняя строка должна быть margin-left: -3.5em;

    grom 30.01.2009 02:30

    @grom, спасибо за исправление em. Кроме того, Opera по умолчанию отображает списки с выравниванием по правому краю, поэтому я скопировал это поведение.

    strager 30.01.2009 03:27

    @grom, проблема Firefox в том, что ... Firefox помещает псевдоэлемент lid: before в свою собственную строку без float, даже если это display: inline-block.

    strager 30.01.2009 03:28

    @strager, ну я использую 3.0.4 в Linux и 3.0.3 в Windows, и у меня работает без float: left; правило.

    grom 30.01.2009 03:33

    @grom, хм, интересно. Я только что проверил, и без поплавка работает. Может, я ошибся.

    strager 30.01.2009 16:20

    Быстро и грязно альтернативное решение. Вы можете использовать символ табуляции вместе с предварительно отформатированным текстом. Вот возможность:

    <style type = "text/css">
    ol {
        list-style-position: inside;
    }
    li:first-letter {
        white-space: pre;
    }
    </style>
    

    и ваш html:

    <ol>
    <li>    an item</li>
    <li>    another item</li>
    ...
    </ol>
    

    Обратите внимание, что пространство между тегом li и началом текста является символом табуляции (то, что вы получаете, когда нажимаете клавишу табуляции внутри блокнота).

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

    <style type = "text/css">
    ol {
        list-style-position: inside;
    }
    </style>
    
    <ol>
        <li><pre>   </pre>an item</li>
        <li><pre>   </pre>another item</li>
        ...
    </ol>
    

    Нет ... просто используйте DL:

    dl { overflow:hidden; }
    dt {
     float:left;
     clear: left;
     width:4em; /* adjust the width; make sure the total of both is 100% */
     text-align: right
    }
    dd {
     float:left;
     width:50%; /* adjust the width; make sure the total of both is 100% */
     margin: 0 0.5em;
    }
    

    Остальные ответы лучше с концептуальной точки зрения. Тем не менее, вы можете просто заполнить числа левой клавишей с соответствующим числом '', чтобы они выровнялись.

    * Примечание: я сначала не понял, что используется нумерованный список. Я думал, что список создается явно.

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

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

    Я не знаю причин для этого, но предположим, что у вас есть веские причины.

    Предлагаемые здесь способы достижения состоят в добавлении содержимого в вашу разметку, в основном через псевдокласс CSS: before. Этот контент действительно изменяет вашу структуру DOM, добавляя в нее эти элементы.

    Когда вы используете стандартную нумерацию «ol», у вас будет визуализированный контент, в котором текст «li» можно выбрать, но номер, предшествующий ему, не может быть выбран. То есть стандартная система нумерации кажется скорее «украшением», чем реальным содержанием. Если вы добавляете контент для чисел, используя, например, методы ": before", этот контент будет доступен для выбора, и из-за этого будут возникать нежелательные проблемы при вставке / вставке или проблемы с доступом к средствам чтения с экрана, которые будут читать этот "новый" контент дополнительно к стандартной системе счисления.

    Возможно, другим подходом может быть стилизация чисел с использованием изображений, хотя эта альтернатива вызовет свои собственные проблемы (числа не отображаются, когда изображения отключены, размер текста для числа не меняется, ...).

    В любом случае, причина этого ответа не только в том, чтобы предложить эту альтернативу «изображениям», но и в том, чтобы заставить людей задуматься о последствиях попытки изменить стандартную систему нумерации для упорядоченных списков.

    Вы также можете указать свои собственные числа в HTML - например, если числа предоставлены базой данных:

    ol {
      list-style: none;
    }
    
    ol>li:before {
      content: attr(seq) ". ";
    }
    <ol>
      <li seq = "1">Item one</li>
      <li seq = "20">Item twenty</li>
      <li seq = "300">Item three hundred</li>
    </ol>

    Атрибут seq становится видимым с помощью метода, аналогичного приведенному в других ответах. Но вместо content: counter(foo) мы используем content: attr(seq).

    Демо в CodePen с большим количеством стилей

    Вы можете упростить это, если просто используете атрибут value на <li>. например <li value = "20">. Тогда вам не нужны никакие псевдоэлементы. Демо

    GWB 19.01.2016 00:38

    @GWB Хотя это действительно (и хорошее решение), оно ограничено числовыми значениями, поскольку список является порядковым. Таким образом, вы не можете сделать что-то вроде value = "4A", потому что это не сработает. Кроме того, атрибут value может работать с атрибутом type, но значение по-прежнему должно быть числом (поскольку оно работает в упорядоченном наборе).

    jedd.ahyoung 07.11.2016 18:34

    Спасибо - это сработало для меня, когда мне нужно было Летающая тарелка для отображения списка в обратном порядке (атрибут reversed - только html5, как и valueli). Вместо seq я установил value и использовал attr(value) вместо attr(seq).

    jaygooby 14.02.2018 19:29

    Этот код делает стиль нумерации таким же, как заголовки содержимого li.

    <style>
        h4 {font-size: 18px}
        ol.list-h4 {counter-reset: item; padding-left:27px}
        ol.list-h4 > li {display: block}
        ol.list-h4 > li::before {display: block; position:absolute;  left:16px;  top:auto; content: counter(item)"."; counter-increment: item; font-size: 18px}
        ol.list-h4 > li > h4 {padding-top:3px}
    </style>
    
    <ol class = "list-h4">
        <li>
            <h4>...</h4>
            <p>...</p> 
        </li>
        <li>...</li>
    </ol>
    

    HTML5: используйте атрибут value (CSS не требуется)

    Современные браузеры интерпретируют атрибут value и отображают его так, как вы ожидаете. См. Документация MDN.

    <ol>
      <li value = "3">This is item three.</li>
      <li value = "50">This is item fifty.</li>
      <li value = "100">This is item one hundred.</li>
    </ol>

    Также посмотрите статья <ol> о MDN, особенно документацию для start и атрибута.

    Другие вопросы по теме