Alan
Alan

Reputation: 471

Indent List in HTML and CSS

I'm new to CSS and working with list. I tried using one of the code I saw on w3schools which shows how to indent lists:

<html>
<body>

<h4>A nested List:</h4>
<ul>
  <li>Coffee</li>
  <li>Tea
    <ul>
    <li>Black tea</li>
    <li>Green tea</li>
    </ul>
  </li>
  <li>Milk</li>
</ul>

</body>
</html>

My css is overriding it so it all apears on the same vertical line. Is there any CSS code I could use locally on the list to override the main css file? Any help would be appreciated.

Upvotes: 35

Views: 168439

Answers (7)

Karim Shaloh
Karim Shaloh

Reputation: 81

li {
  padding-left: 30px;
}
<p>Some text to show left edge of container.<p>
<ul>
  <li>List item</li>
</ul>
The above will add 30px of space between the bullet or number and your text.

li {
  margin-left: 30px;
}
<p>Some text to show left edge of container.<p>
<ul>
  <li>List item</li>
</ul>
The above will add 30px of space between the bullet or number and the left edge of the container.

Upvotes: 3

sk8forether
sk8forether

Reputation: 249

You can also use html to override the css locally. I was having a similar issue and this worked for me:

<html>
<body>

<h4>A nested List:</h4>
<ul style="PADDING-LEFT: 12px">
  <li>Coffee</li>
  <li>Tea
    <ul>
    <li>Black tea</li>
    <li>Green tea</li>
    </ul>
  </li>
  <li>Milk</li>
</ul>

</body>
</html>

Upvotes: 3

Madara&#39;s Ghost
Madara&#39;s Ghost

Reputation: 174957

Yes, simply use something like:

ul {
  padding-left: 10px;
}

And it will bump each successive ul by 10 pixels.

Working jsFiddle

Upvotes: 38

Metafaniel
Metafaniel

Reputation: 30604

You can use [Adjacent sibling combinators] as described in the W3 CSS Selectors Recommendation1 So you can use a + sign (or even a ~ tilde) apply a padding to the nested ul tag, as you described in your question and you'll get the result you need. I also think what you want it to override the main css, locally. You can do this:

<style>
    li+ul {padding-left: 20px;}
</style>

This way the inner ul will be nested including the bullets of the li elements. I wish this was helpful! =)

Upvotes: 3

Maria Berinde-Tampanariu
Maria Berinde-Tampanariu

Reputation: 1041

I solved the same problem by adding text-indent to the nested list.

<h4>A nested List:</h4>
<ul>
  <li>Coffee</li>
  <li>Tea
    <ul id="list2">
    <li>Black tea</li>
    <li>Green tea</li>
    </ul>
  </li>
  <li>Milk</li>
</ul>

#list2
{
 text-indent:50px;
}

Upvotes: 11

Jason Gennaro
Jason Gennaro

Reputation: 34855

It sounds like some of your styles are being reset.

By default in most browsers, uls and ols have margin and padding added to them.

You can override this (and many do) by adding a line to your css like so

ul, ol {  //THERE MAY BE OTHER ELEMENTS IN THE LIST
    margin:0;
    padding:0;
}

In this case, you would remove the element from this list or add a margin/padding back, like so

ul{
    margin:1em;
}

Example: http://jsfiddle.net/jasongennaro/vbMbQ/1/

Upvotes: 14

Kalle H. V&#228;ravas
Kalle H. V&#228;ravas

Reputation: 3615

Normally, all lists are being displayed vertically anyways. So do you want to display it horizontally?

Anyways, you asked to override the main css file and set some css locally. You cannot do it inside <ul> with style="", that it would apply on the children (<li>).

Closest thing to locally manipulating your list would be:

<style>
    li {display: inline-block;}
</style>
<ul>
  <li>Coffee</li>
  <li>Tea
    <ul>
        <li>Black tea</li>
        <li>Green tea</li>
    </ul>
  </li>
  <li>Milk</li>
</ul>

Upvotes: 3

Related Questions