Упорядоченный список (HTML) с нижним альфа-каналом с правыми круглыми скобками?


83

По умолчанию для упорядоченного списка в нижнем альфа-списке используется точка '.'. Есть ли способ использовать правую скобку вместо а) ... б) .. и т. Д.?


3
Может быть, один из ответов можно выбрать как правильный? ...
Такит Иси 01

Ответы:


165

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

ol {
  counter-reset: list;
}
ol > li {
  list-style: none;
}
ol > li:before {
  content: counter(list, lower-alpha) ") ";
  counter-increment: list;
}
<span>custom list style type (v1):</span>
<ol>
  <li>Number 1</li>
  <li>Number 2</li>
  <li>Number 3</li>
  <li>Number 4</li>
  <li>Number 5</li>
  <li>Number 6</li>
</ol>

Работает во всех современных браузерах и IE9 + (и, возможно, IE8, но может содержать ошибки).

Обновление: я добавил дочерний селектор, чтобы вложенные списки не выбирали родительский стиль. Трейдер также отмечает в комментариях, что выравнивание элементов списка также нарушено. В статье на 456bereastreet есть хорошее решение, которое предполагает абсолютное позиционирование счетчика.

ol {
    counter-reset: list;
}
ol > li {
    list-style: none;
    position: relative;
}
ol > li:before {
    counter-increment: list;
    content: counter(list, lower-alpha) ") ";
    position: absolute;
    left: -1.4em;
}
<span>custom list style type (v2):</span>
<ol>
  <li>Number 1</li>
  <li>Number 2</li>
  <li>Number 3</li>
  <li>Number 4</li>
  <li>Number 5</li>
  <li>Number 6</li>
</ol>

Вот jsFiddle, показывающий результат, включая вложенные списки.


1
Вы правы, в IE6 это не работает. Но хорошие новости: он работает в Firefox 3.5.3.
mouviciel

1
На самом деле было бы лучше, если бы: ol {counter-reset: list; } Исходный не будет работать, когда есть несколько олов.
Фэн Цзян,

1
К вашему сведению, чтобы получить нумерованный список вместо алфавитного, просто удалите расширение , lower-alpha. Таким образом, contentзначение будетcounter(list) ") ";
Trevan Hetzel

1
Добавлю только, что это не стопроцентная нумерация. Вы можете увидеть разницу по многопозиционным позициям. В обычных списках (с использованием стандартных маркеров или чисел) каждая строка имеет одинаковый отступ, поэтому маркер или номер выглядят так, как будто они стоят перед блоком текста. В приведенном выше решении каждая следующая строка начинается под нумерацией и не вставляется слегка. Что не меняет того факта, что это действительно отличное решение! :>
trejder

Плюс: это полностью не работает в многоуровневых списках (мой пример в jsFiddle ).
Trejder

11

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

https://jsfiddle.net/0a8992b9/ выводит:

(i)first roman
    (a)first alpha
    (b)second alpha
    (c)third alpha
    (d)fourth alpha
(ii)second roman
(iii)third roman
    (a)first alpha
    (b)second alpha

1
+1 Вы сделали сброс по альфе. это мне очень помогло. Большое спасибо. Если у кого-то нет альфа-класса, он может использовать ol [style * = "list-style-type: lower-alpha;"]
SK.

Есть ли способ сделать это, сохранив при этом текст справа от буквы, используемой вместо маркера? т.е. отсутствие переноса текста под буквой (например, a)), а скорее перенос обратно к точке, где текст начинается для определенной буквенной точки, как будет выглядеть обычный <li>
sabliao

@sabliao добавить отрицательное значение text-indentна liуровне
Тайлер Джеймс Янг

3

Добавление этого в CSS дало некоторые интересные результаты. Было близко, но без сигары.

li:before {
    display: inline-block;
    width: 1em; 
    position: relative;
    left: -0.5em; 
    content: ')'
}

----- Отредактировано для включения решения от Iazel в комментариях -----

Я усовершенствовал ваше решение:

li {
    position: relative;
}
li:before {
    display: inline-block;
    width: 7px;
    position: absolute;
    left: -12px;
    content: ')';
    background-color: #FFF;
    text-align: center;
}

Фон и position: absoluteсвое дело!


Я усовершенствовал ваше решение: li { position: relative; } li:before { display: inline-block; width: 7px; position: absolute; left: -12px; content: ')'; background-color: #FFF; text-align: center; } фон и позиция: absolute сделали свое дело! :)
Iazel

-9

У меня это работает в IE7, FF3.6, Opera 9.64 и Chrome 6.0.4:

<ol start="a" type="a" style="font-weight: normal;">
<li><span style="inline-block;margin-left: -9px !important; margin-left: -15px;">) &nbsp;</span> content for line number one;</li>
<li><span style="inline-block;margin-left: -9px !important; margin-left: -15px;">) &nbsp;</span>  content for line number two;</li>
<li><span style="inline-block;margin-left: -9px !important; margin-left: -15px;">) &nbsp;</span>  content for line number three;</li> 
<li><span style="inline-block;margin-left: -9px !important; margin-left: -15px;">) &nbsp;</span>  content for line number four;</li>
<li><span style="inline-block;margin-left: -9px !important; margin-left: -15px;">) &nbsp;</span>  content for line number five;</li>
<li><span style="inline-block;margin-left: -9px !important; margin-left: -15px;">) &nbsp;</span>  content for line number six;</li>
</ol>

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

надеюсь это поможет.


1
Вы уверены, что этого не должно быть display:inline-block;?
JaredMcAteer

Это хитрость, потому что он зависит от размера шрифта при попытке разместить скобку рядом с автоматически сгенерированным символом «a», «b» и т. Д. Если вы собирались сделать что-то подобное, вам следует использовать list-style-type: none и взять на себя рендеринг всего «а)», а не пытаться просто рендерить парен.
Чарльз Кендрик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.