Moin!
Abgesehen davon: Die Browserweiche, mit @import für alle anderen Browser außer Netscape 4 vernünftige und komplexere Stylesheets zu laden, funktioniert bestens und ist sowas von zukunftssicher - Netscape 4 wird @import garantiert niemals verstehen. Das ist also sicher.
wenn du einen Rausschmeisser brauchst, ist das die komfortabelste
Lösung. Eindeutig ist auch document.layers, und die php-weiche ist
besonders für NC4 sinnvoll um z.B. weniger valide Sachen
wie ein knappes <script> anderen Browsern gar nicht erst anzubieten.
Eine PHP-gesteuerte Browserweiche kann aber wunderbar versagen!
Alle Netscape 4 kennen kein @import - damit kriegt man _ganz sicher_ alle Netscape 4 aussortiert und gibt ihnen nur ein eingeschränktes, ggf. auch mit Netscape-Spezifika erweitertes CSS-Stylesheet. Wer es ganz besonder gut meinen will, der läßt in das <link>-CSS nur standardkonforme CSS-Angaben rein und regelt den Rest (layer-background-* etc) mit JSSS - also <style type="text/javascript">. Das ist dann nämlich auch valide, und trennt Netscape 4 von den restlichen Browsern auch 100% - vielleicht sogar noch besser, weil sich ja auch andere Browserhersteller überlegen könnten, @import nicht zu implementieren.
In Javascript kriegt man den Netscape 4 auch zu 100% korrekt mit document.layers erkannt. Das sollte man daher für irgendwelche DHTML-Layer-Geschichten auch nehmen.
Aber PHP kann sich ja nur auf irgendeine Information verlassen, die der Browser gleich beim ersten Seitenabruf sendet - Javascript kann da noch nicht wirksam geworden sein, um z.B. das Vorhandensein von document.layers zurückzumelden, es sei denn, man läßt vor jeder Seite eine Vor-Seite aufrufen, die prüft, welcher Browser denn vorliegt - ziemlich aufwendig und nervig für den Besucher.
Ach ja: Zum Validieren wird ja gerne der Valligator benutzt - der meldet sich auf der Site z.B. als "W3C_Validator/1.183 libwww-perl/5.64". Google sucht als "Googlebot/2.1 (+http://www.googlebot.com/bot.html)". Und es gibt darüber hinaus noch viele weitere User-Agents, die sinnvoll behandelt werden sollten. Die Versuchung liegt nahe, diesen Netzteilnehmern genau wie dem Netscape 4 speziell angepaßte Seiten anzubieten. Gerade für Suchmaschinen könnte es sich ja vielleicht lohnen - ich bin sicher, dass das auch gemacht wird. Spannende Frage ist: Was passiert, wenn der Spider die Seiten alle _zweimal_ abfragt, einmal offiziell als Bot, einmal als getarnter Browser - und sie dann nicht übereinstimmen? Ich bin mir sicher, dass auch das gemacht wird.
CSS für Netscape4 ist oft besser realisierbar als z.B. hier im
Forum immer wieder behauptet wird, und es wird mit "ordentlichen
Stylesheets in Kombination mit einer ordentlichen HTML-Datei" noch
einfacher oder ist zumindest da nicht kontraproduktiv.
Mein Reden: Mit ordentlicher Arbeit spart man sich die fehlerträchtige Browserunterscheidung. Denn wie weit soll die gehen? Will man wirklich gegen _alle_ Browserbugs ein Mittelchen ausliefern - dann hat man mindestens genausoviel zu tun, wie man Zeit aufwenden müßte, um z.B. ein gemeinsames Stylesheet für alle Browser zu erstellen.
Ich vermute dass der Doctype <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.01 Transitional//EN"> am ehesten Voraussetzungen schafft, beim IE5
ähnliche Ergebnisse zu erzielen wie beim IE6, immerhin wird IE5 wohl
von rund 40% benutzt.
Nein, der IE5 hat den width-Bug - dagegen kann man nichts tun. Abgesehen davon ist noch die URL-Angabe im DOCTYPE erforderlich, damit sich der IE6 wie ein Mozilla verhält - naja, jedenfalls "fast". :->
Mir ist allerdings noch nicht klar, ob dann "für den Mozilla" alle
Grössen, margin usw. per verschachtelter divs realisiert werden
müssten oder könnten.
Doch, das klappt:
#aussen { width:100px; }
#innen { border:3px solid black; padding:10px; }
<div id="aussen"><div id="innen">Der Inhalt</div></div>
Mit diesem Trick wird das äußere DIV in jedem Browser 100 Pixel breit (border und padding sind nicht gesetzt), und das innere DIV wird so breit, wie Platz ist (eben 100px), wobei 3 Pixel Border und 10 Pixel padding eingefügt werden. Der IE-width-Bug tritt nicht auf, weil dort, wo width gesetzt wird, keine border und padding auftreten (die beim IE fälschlich als Bestandteil von width gerechnet werden, aber normalerweise _zusätzlich_ auf die Breite draufgerechnet werden).
Auch für den body kann es schwierig werden, da benötige ich z.B. ein
grosses div für die ganze Seite um halbwegs einen body mit 100%
width/height zu simulieren, sehr lästig, und habe da auch eine
Unterscheidung für Mozilla reinschreiben müssen, wenn ich es
recht erinnere braucht es einmal {height:auto;} dann :100%}, und
beim Mozilla klappt es trotzdem noch nicht wie gewünscht.
Das Problem habe ich einfach deshalb nicht, weil ich akzeptiere, dass eine Seite oben links im Fenster beginnt und nach unten soweit reicht, wie Inhalt da ist. Alles andere ist Unsinn, wenn man dynamisch anpassbare Seiten schreibt. Zentrieren horizontal _und_ vertikal kommt nicht vor.
Das von dir erwähnte "browserunabhängige HTML+CSS" erfordert
entweder noch mehr Tricks - fällt dir da noch etwas ein um auch bei
Scrollbalken per absoluter Positionierung möglichst einfach
sowohl rechts als auch unten hinzukommen, idealerweise sogar ohne
Unterscheidungen wie #xy[id]{width:100%;}#xy{height:auto;}?
Ähm, du meinst right und bottom? Funktioniert relativ gut in den besseren Browsern (zumindest right), versagt aber beim Netscape 4. Dem kann man leider dann kein dynamisch angepaßtes Layout verpassen, sondern muß die Breiten statisch festlegen und mit left positionieren.
Oder kann mit CSS nicht rechts oder unten platziert werden, müssten
also letztendlich Tabellen oder spacer.gif verwendet werden?
Du willst position:fixed haben, weißt es nur noch nicht. Diese Positionierungsart bezieht sich nicht auf die Seite, sondern aufs Browserfenster. Damit könnte man relativ simpel feststehende Rahmen etc. erzeugen. Leider leider leider ist der IE noch zu doof dazu. Deshalb warte ich mit solcherart Layouts immer noch ab - und für den professionellen Einsatz auf Kundensites ist die Wartefrist vermutlich noch länger, weil erstmal alle alten IEs "absterben" müssen.
- Sven Rautenberg