Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selecting all direct children of a <ul> element

Say I have:

<ul class="menu">
 <li>One</li>
  <ul class="submenu">
   <li>Apple</li>
   <li>Orange</li>
  </ul>
 <li>Two</li>
  <ul class="submenu">
   <li>Pear</li>
   <li>Banana</li>
  </ul>
</ul>

Is there a way to select only the first children of the top level <ul> element (in this case "One" and "Two") with just CSS?

like image 689
Soliah Avatar asked Oct 21 '09 08:10

Soliah


People also ask

How do you select direct children of an element in CSS?

The child combinator ( > ) is placed between two CSS selectors. It matches only those elements matched by the second selector that are the direct children of elements matched by the first. Elements matched by the second selector must be the immediate children of the elements matched by the first selector.

How do I select all children in a div?

A child selector matches all child elements of a specified element. It is composed of two or more selectors that are separated by ">". This syntax selects all child elements.


2 Answers

Use the child selector >:

ul > li { font-weight: bold; }

The only problem is that this doesn't work in IE6. See this list of CSS selectors and browser support.

If you need to support that browser you'll have to do something like this.

ul li { font-weight: bold; }
ul li li { font-weight: normal; }

This will be relatively straightforward in some situations and completely unworkable in others. If you find yourself in a difficult situation you may need to interpose some classes to make it easier.

like image 200
cletus Avatar answered Oct 05 '22 14:10

cletus


ul > li

But it won't work in IE6. Here is a nice list of selector support in IE versions: http://www.smashingmagazine.com/2009/10/14/css-differences-in-internet-explorer-6-7-and-8/

The simplest way to explicitly target them is to give them a separate class name.

like image 34
Victor Stanciu Avatar answered Oct 05 '22 16:10

Victor Stanciu