Существует альтернатива, в которой вы можете задать видимость пунктов меню в зависимости от стиля наведения родительского элемента, например.
li ul {display: none;}
li:hover > ul {display: block;}
это означает, что вы можете создавать меню, просто используя
<ul id="menu">
<li>
some item
<ul><li>sub item</li></ul>
</li>
<li>
some other item
</li>
<ul>
Очевидно, вы захотите добавить больше стилей, классов и т. Д., Чтобы предотвратить его применение ко всем спискам, но это общая концепция, стоящая за меню css.