Non è così, lo si può verificare subito inserendo tutto il codice in una pagina html:
codice:
<style type="text/css">
 ul {
    list-style:none;
    display:inline;
 }
 ul li {
    display:none;
 }
 ul li:hover {
    display:block;
 }

</style>
<ul class="menu">
	[*]1
	[*]2
	[*]
		3
		<ul>
			[*]3.1
			[*]3.2
		[/list]
	
	[*]4[/list]
Così non funziona perchè prima di tutto nascondo gli elementi al primo livello della lista con:
ul li { display:none;}
mentre semmai dovrei nascondere il secondo livello, così:
ul.menu li ul { display:none;}
ma anche quando ho nascosto il secondo livello, non posso farlo riapparire con un semplice css, in quanto i selettori di stato (:hover, :focus, :active ecc..) il css li applica solo agli elementi interessati allo stato dichiarato (in questo caso gli elementi al primo livello della lista:
ul.menu li:hover) e non ad altri elementi.
Per questo i menu dinamici hanno sempre codice javascript.
Se la lista fosse costruita staticamente in html mi sarebbe facile attribuire delle classi agli elementi di secondo livello e creare l'effetto rollover, ma siccome la lista viene costruita dinamicamente, non posso aggiungere classi e non conosco il numero degli elementi della lista (che possono essere aggiunti o tolti dinamicamente con Joomla) quindi tutto si complica perchè l'unico dato certo è la classe della lista principale.