Opacity fa esattamente quello che hai riscontrato tu, ovvero agisce anche su tutti gli oggetti figli! O usi una png semi-trasparente oppure utilizzi la nuova proprierà CSS3 rgba() che funziona in maniera esattamente identica alla vecchia rgb() ma accetta 4 valori invece di 3, il quarto è il canale alpha, ovvero l'opacità. Questa proprietà NON si trasmette ai contenitori figli. Guarda bene, qualche giorno fa avevo spiegato a un altro utente la sintassi precisa con alcuni esempi.