tags:

views:

191

answers:

3

Hi!

I want to create HTML nested lists that has the following format:

1  
   1.1  
   1.2  
   1.3  
   1.4   
2
   2.1

I tried a solution that I found on the internet:

OL { counter-reset: item }
LI { display: block }
LI:before { content: counters(item, ".") " "; counter-increment: item }

But it didnt work for me. Any help please??

If the counter solution is too complicated, is there a way to fake the nested list effect, by writing them manually but being sure that the formatting looks like a real list

A: 

Works perfectly for me, in FF 3.6.6, so:

  1. Which browser is it not working in?
  2. What does your markup look like (i.e. are you nesting the lists correctly)?
Bobby Jack
I am testing with IE. The problem with my markup could be tha fact that i have a html that has got lots of lists and i want to apply this effect to some of them which are not the root ones i mean: i dont want the counter to start when it first gets an ol element. Can i use different tag names instead of ol and li for this list i want to nest, in the css and in the markup?
medusa
Please do add your html to your post, in addition to your CSS.
Wade
A: 

This should work. It is a bad way to do this but if you MUST support IE6 not much choice.

      <ol>
        <li><span>1</span> Item
          <ol>
            <li><span>1.1</span> Item</li>
            <li><span>1.2</span> Item</li>
            <li><span>1.3</span> Item</li>
            <li><span>1.4</span> Item</li>
          </ol>
        </li>            
        <li><span>2</span> Item
          <ol>
            <li><span>2.1</span> Item</li>
          </ol>            
        </li>
      </ol>

with css

ol {list-style:none;}

After your comment I've redone it a bit.

  <ol>
    <li><span>1</span> Item
      <ol>
        <li><span>1.1</span> <p>ItemItemItem ItemItemItemItemItemItemItemItem ItemItemItemItemItemItemItemItem ItemItemItemItemItemItemItemItem</p></li>
        <li><span>1.2</span> <p>ItemItemItem ItemItemItemItemItemItemItemItem ItemItemItemItemItemItemItemItem ItemItemItemItemItemItemItemItem</p></li>
        <li><span>1.3</span> <p>ItemItemItem ItemItemItemItemItemItemItemItem ItemItemItemItemItemItemItemItem ItemItemItemItemItemItemItemItem</p></li>
        <li><span>1.4</span> <p>Item</p></li>
      </ol>
    </li>            
    <li><span>2</span> Item
      <ol>
        <li><span>2.1</span> Item</li>
      </ol>            
    </li>
  </ol>

And the css would be

ol {list-style:none;} ol li span { display: block; float: left; width: 30px; } ol li { clear:both; width: 400px;

} ol li p { float: left; width: 370px; margin: 0;

}

You may have to adjust the widths.

Matthew Rygiel
no it doesnt work because when the item is too long it breaks on the other line and begins right beneath the number not the text.
medusa
+1  A: 

The before element doesn't work in IE6, but it's the correct way of doing it. I'd recommend using IE7.js, a javascript library that makes IE6 behave like IE7 where javascript and CSS are concerned. Another way could be using a javascript hack that runs only if the browser is IE6 and traverses de DOM modifying the list items...

In For A Beautiful Web you can find more information regarding IE6-compatible websites.

Diego
suppose i write the js that traverses the dom and finds the list items, what attributes should i change then?
medusa
You should change the inner html of the list items. I seriously recommend you include ie7.js in your page though, it's a well made hack that works wonders and allows you to target better browsers during your page design and emulate functionalities in crap browsers like IE6.
Diego