6

I am trying to make a list like
Element 1. bird
Element 2. lion
...

The problem is I don't want to write "Element" for every item. Is there any way to add content to my list?

animuson
  • 53,861
  • 28
  • 137
  • 147
EkremG
  • 131
  • 1
  • 13

2 Answers2

8

You need CSS counters:

#customlist {
  /* delete default counter */
  list-style-type: none;
  /* create custom counter and set it to 0 */
  counter-reset: elementcounter;
}

#customlist>li:before {
  /* print out "Element " followed by the current counter value */
  content: "Element " counter(elementcounter) ": ";
  /* increment counter */
  counter-increment: elementcounter;
}
<ol id="customlist">
  <li>Elephant</li>
  <li>Bird</li>
  <li>Lion</li>
</ol>
Zeta
  • 103,620
  • 13
  • 194
  • 236
  • It did what i want but i have one more problem with that. I have a nested list like: Element 1: bird Element 2: lion Element: white lion Element 3: dog when i want to create a nested list it gives increment for every li item and i dont want it to happen do you have any advice? – EkremG Feb 13 '12 at 11:37
  • I can't really reproduce your bug, but I think the `>` selector should help you. This will only select direct children. – Zeta Feb 13 '12 at 11:41
  • Right ">" helped me Thank you again Zeta :) – EkremG Feb 13 '12 at 11:44
0

Nowadays we can use not just counters but also the ::marker pseudo element.

For example, as an answer to this question: How to replace the dot '.' from an ordered list of type 'a'

ol {
 list-style-type: lower-alpha;
 counter-reset: listcounter;
 padding-left: 30px;
}
li {
 counter-increment: listcounter;
}
li::marker {
 content: counter(listcounter, lower-alpha) ": ";
}
<ol type="a">
  <li>Element a</li>
  <li>Element b</li>
  <li>Element c</li>
</ol>
A Haworth
  • 30,908
  • 4
  • 11
  • 14