hm..erst mal muß ich widersprechen, mozilla ist kein exot, aber es ist so gut wie unnötig extrawürste für mozilla zu stricken, da er mener erfahrung nach html, javascript und dom am konformsten interpretiert, seine verbeitung nimmt auch zu.
was opera angeht, so liegt die falsche identifikation fast immer an der einstellung von opera. es gibt die varable USER_AGENT die über den header mit übermittelt wird. dieser header ist eigentlich für browser spezifisch. opera hat nun ein verhängnisvolles feature, man kann ändern als was er sich ausgibt und im standardfall gibt er sich als IE aus, das ist verhängnisvoll, da er die gängige IE syntax für JS nicht oder nicht korrekt interpretiert. mann kann das ganze aber über javascript etwas umschiffen, nciht jedoch über serverseitiges scripting.
gängige browserweichen nutzen zur identifizierung meist die variable user agent, aber aus o.g. gründen ist diese unzuverlässig.
es ist besser einen browser anhand der fähigkeiten zu identifizieren in der form:
if(document.layers){browser='netscape';}
if(document.all){browser='ie bis 5.1';}
if(document.getElementsByTagName("head")){browser='IE ab 5.5, netscape ab 6.0, mozilla, konquerer';}
else{browser='inkompatibler mist';}
somit hat man die wirklich wichtigen infos..nicht wie behauptet der browser zu heissen, sondern was ann er wirklich. serverseitig klappt das nun allerdings nicht, am sichersten arbeitet man dann mit kombinationen aus user_agent, javascript und DOM...
css ist leider nur teils/teils eine lösung, da netscape, opera und ie css teilweise komplett unterschiedlich interpretieren, gerade was positionierungen angeht. 100% sind wirklich so gut wie nicht zu erreichen an interoperabilität mit allen browsern in einer version einer seite, es sei denn man lässt sei über php o.ä. auf dem server browserspezifisch montieren.