Есть учебники по этому вопросу, но есть две проблемы:
- IE6 не поддерживает: наведите курсор на теги, отличные от якорей, поэтому вам нужно решение Javascript для этого браузера; и
- На самом деле действительно сложно заставить его работать согласованно во всех основных браузерах.
Рассмотрим альтернативу с использованием jQuery и плагина superfish (вдохновленного suckefish):
<ul class="menu">
<li>...
</ul>
<script type="text/javascript">
$(function() {
$("ul.menu").superfish();
});
</script>
Готово.
Если вы идете (полу) чистым маршрутом CSS, я настоятельно рекомендую вам использовать одну из существующих сред для этого (например, suckerfish или производную). В противном случае вы просто потянете свои волосы и потратите много времени, чтобы заставить их работать правильно.
Чтобы ответить на ваш вопрос о глубине: упомянутое вами правило, по сути, уходит в бесконечную глубину. Помните, что пробел в CSS - селектор потомков, а не дочерний селектор. Причина повторных групп заключается в том, что правило применяется только с (скажем) третьего уровня вниз.
Это потому, что на первом и втором уровнях будут специальные стили. Первой будет горизонтальная или вертикальная черта. Второй будет всплывать из этого, но с третьего уровня он будет постоянно появляться таким же образом.