Domandina: il div con altezza inferiore a 10 pixel lo hai visualizzato con Internet Explorer? Perché quella brutta copia di un browser attribuisce ai div (anche vuoti!) una simpaticissima altezza di default! Per evitare questa trovata di Explorer, devi settare il font-size di quel div a 1px. 
Per l'elenco non ordinato, devi prima di tutto eliminare il padding e il margin sia dall'elemento <ul> che dagli elementi[*] (se ti servono dei padding o dei margini per gli elementi[*] è comunque una buona norma indicare tutti e 4 i padding e i margin settando esplicitamente a 0 quelli che non si desiderano). Es.:
codice:
ul {
padding: 0;
margin: 0;
}
ul li {
.....
padding: 0;
margin: 0 2px 0 7px; /* imposta esplicitamente a 0 i margini superiore e inferiore di ogni elemento[*] e contemporaneamente setta a 2px il suo margine destro e a 7px quello sinistro */
.....
}
Ricorda anche se se imposti gli elementi[*] per essere visualizzati orizzontalmente devi tenere conto del metodo che usi. Puoi impostarli come float: left o float: right senza particolari accorgimenti. Se invece usi display: inline, nel tuo codice XHTML non devi andare a capo quando chiudi un[*] e ne apri un altro, altrimenti i browser intelligenti (non Explorer!) ti mostrano uno spazio tra una voce del menu e l'altra anche se padding e margin sono a 0.