The most famous pure CSS menus come from Eric Meyer. The menu is in an unordered list (<ul>) and there are two CSS selectors at the heart of their operation:
li ul {display: none;} li:hover > ul {display: block;}
Submenu items are hidden until their parents are hovered. The > selector means, "direct parent". The major problem with Meyer's menus are IE doesn't support either the > selector or hovering arbitrary elements, so the children are never displayed.
The other issue that is something of a pain is if you only want elements with children to expand, you need to mark which elements should be allowed to expand in the <li> with class attributes. It is a pretty menu though that degrades fairly well. (Browsers without CSS get an <ul>. Browsers which can't hover arbitrary items get only the top level.)
Horizontal menus are also possible or mixtures between the two. In the following examples the javascript is only used to change the class of the list. All of the positioning is CSS with additional CSS for coloring.
The other major class of dynamic menus are controlled by javascript. These have the ability to be more tolerant to browsers implementations and can also include animation effects. There should be a box to the right that you can click to produce a menu.