Впорядкований список (HTML) нижньої літери з правими дужками?


83

Типовий нижній алфавітний список для впорядкованого списку використовує крапку '.'. Чи є спосіб використовувати правильну дужку замість цього, як a) ... b) ..etc?


3
Можливо, одну з відповідей можна вибрати як правильну? ...
Takit Isy

Відповіді:


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, але може бути помилковим).

Оновлення: я додав дочірній селектор, щоб запобігти вкладенню списків у збір батьківського стилю. trejder також вважає хорошим моментом у коментарях те, що вирівнювання елементів списку також зіпсовано. Стаття на 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; } Оригінальний не працюватиме, якщо є кілька олів.
Feng Jiang

1
FYI, щоб отримати нумерований список замість алфавітного, просто видаліть , lower-alpha. Отже, contentзначення було бcounter(list) ") ";
Треван Гецель

1
Дозволю лише додати, що це не 100% реальна нумерація. Ви бачите різницю в багаторядкових позиціях. У звичайних списках (із використанням стандартних маркерів або цифр) кожен рядок має однаковий відступ, тому маркер або число виглядають як стоячи перед блоком тексту. У наведеному вище рішенні кожен наступний рядок починається нижче нумерації і не є трохи вставленим. Що не змінює факту, що це справді акуратне рішення! :>
трейдер

Плюс: це не вдається повністю у багаторівневих списках (мій приклад у jsFiddle ).
трейдер

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.

чи є спосіб це зробити, а також, щоб текст залишався праворуч від літери, що використовується замість крапки? тобто відсутність переносу тексту під букву (наприклад, а)), а швидше повернення до точки, де текст починається для певної
літерної

@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; } Передумови та положення: абсолют зробив свою справу! :)
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" тощо. Якщо ви збиралися робити щось подібне, вам слід скористатися списком-style-type: none і взяти на себе рендеринг всього "а)", а не намагатися просто зробити батьківський.
Чарльз Кендрік,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.