Hallo Mathias und alle anderen!
Und muss es denn sein, dass man eben massenweise JS mitliefert um die Unterschiede auszubügeln?
Erstens ist so etwas wie Modernizr und yepnope nicht »massenweise JavaScript«, sondern ein stark begrenztes und zugeschnittenes Script. Zweitens, ja, es muss derzeit sein. Es ist manchmal sauberer, ein Feature mit JavaScript abzufragen, als im CSS oder sonstwo Progressive Enhancement versuchen.
Ja, die Dinge sind wie sie sind, aber es könnte doch alles viel einfacher sein
Auf jeden Fall könnte es einfacher sein. Ich sehe aber nicht, dass es einfacher werden würde, wenn der Browser dem Server mit jedem Request mitteilen würde, welche CSS-Eigenschaft und JavaScript-APIs er in welcher Revision unterstützt. Eine browserseitige Programmiersprache wie JavaScript, die tatsächliche Anwendungsfälle live testen kann, ist da immer irgendwelchen Bekundungen des Browsers überlegen, ein gewisses Feature zu unterstützen.
Dem würde ich sofort und uneingeschränkt zustimmen, wenn da nicht die Möglichkeit wäre, dass der User Javascript deaktiviert hat.
Lange Zeit wurde nicht nur hier gebetsmühlenartig gepredigt sein Layout nicht von Javascript abhängig zu machen! Und ich persönlich sehe ich das auch immer noch so, sprich auch der User ohne JS muss eine zumindest halbwegs brauchbare Seite angezeigt bekommen. Und das erhöht quasi den Aufwand weiter, da man dann nicht nur die Unterschiede der verschiedenen Browser "ausbügeln" muss, sondern zusätzlich noch im CSS unterscheiden muss, zwischen JS ja/ nein.
Von den Media Queries einmal abgesehen, gibt es erst seit kurzem das 'CSS Conditional Rules Module Level 3'. Aktuell wird @supports allerdings nur von Opera (12.10), Opera Mobile (14.0) und Firefox Aurora unterstützt. Und selbst wenn es alle gängigen Browser eines Tages unterstützen, wird es noch lange dauern, bis es seine "volle Wirkung" entfalten kann, denn dazu müssen erst alle Versionen, die zwar das entsprechende Modul/ Feature unterstützen, aber nicht @supports, verschwunden sein.
Und mir geht dieser Ansatz, der viel zu spät kommt, auch noch nicht weit genug. Denn Theorie und Praxis sind ja immer zwei verschiedene Dinge. Will sagen, theoretisch könnte man "einfaches & effizientes" CSS schreiben - in der Praxis sieht das aufgrund von unterschiedlichen "Interpretationen" der Spezifikationen und individueller Browserbugs schon ganz anders aus ...!
Von daher plädiere ich seit langem dafür, dass man in CSS einen den 'Conditional Comments' ähnlichen Mechanismus implementiert, der das gezielte Ansprechen bestimmter Engines und Browsern ermöglicht, ohne auf irgendwelche 'Hacks' zurückgreifen zu müssen.
Das könnte dann analog zu den bereits existierenden @-rules z.B. so aussehen:
@browser(chrome 20+) {...}
oder
@engine(webkit) {...}
CSS kommt mir schon geraume Zeit so vor, als würden sich die Entwickler stets an dem Grundsatz:"Warum einfach, wenn es auch kompliziert geht!" orientieren. ;-)
Ich meine spätestens, wenn bei etlichen Websites der Umfang der zugehörigen CSS Datei(en) größer ist als der eigentliche Inhalt, muss man sich doch mal fragen, ob das alles wirklich so "richtig" ist!
In 99% aller Fälle gucken sich User eine Seite in einem Browser an - fertig!
Bei den allermeisten Smartphones hat das Browserfenster eine unveränderliche Größe. Warum muss man solch einem Client dann die anderen 90% des CSS ausliefern, mit denen er nichts anfangen kann!?
Und die Browserhersteller tun ein Übriges ...! So "nötigen" sie einen quasi zu serverseitigem UA-Sniffing, wenn du dem User die Möglichkeit geben willst, auch die sog. Desktopversion der Seite zu sehen. Und ja, das kann aufgrund einer weiteren "Willkür" der Browserhersteller sehr wohl "sinnvoll" sein. Ich spreche von der "willkürlichen" Festlegung der Viewportgröße. Auch hier hat man imho nicht bis zu Ende gedacht.
Ein Beispiel:
Ich besitze ein Smartphone mit einem Full HD Display. Gemäß Browserhersteller ist mein Viewport aber nicht 1080px breit, sondern nur 360px. Und selbst wenn ich die Desktopversion einer Seite anfordere, dann ist mein Viewport immer noch nicht so groß, wie es der eigentlichen Auflösung entsprechen würde, sondern immer noch nur 980px. Wenn ich jetzt das Bild von meinem Smartphone auf einen Monitor oder Fernseher streame, habe ich trotz vlt. 40" Bildschirmdiagonale eine Webseitendarstellung, die gemäß Media Query für 980px bestimmt ist ...!
Und die geplante Abschaffung des zuständigen Meta-Tags, und die Verlagerung ins CSS (@viewport), ist ein Schritt vom Regen in die Traufe ...!
Es gibt also imho mehrere Baustellen:
1. Es müssen neue Möglichkeiten her, effizienteres CSS schreiben zu können.
2. Es müssen Möglichkeiten her, die übermittelte Datenmenge auf das wirklich Erforderliche reduzieren zu können.
3. Es müssen Möglichkeiten her, clientseitig für das Layout relevante Dinge auch ohne JS in Erfahrung bringen zu können.
Wie das letztendlich erreicht wird, ist mir egal! :-P
Nur insbesondere im Bezug auf Punkt 2, sehe ich da eigentlich nur serverseitige Möglichkeiten. Und alles, was nicht mit dem Request mitgeliefert wird, kommt imho zu spät.
Gruß Gunther