Hallo,
kann man auslesen ob javascript aktiv ist, und wenn nein nimm css_a wenn ja nimm css_b.
Ich würde darauf verzichten, das link-Element oder den Wert des href-Attributes dieses Elementes auszutauschen. Stattdessen würde ich nur ein Stylesheet im HTML einbinden:
<head>
...
<link rel="stylesheet" media="screen" href="/src/css" />
</head>
<body>
Der Clou dabei ist es, dass es im Stylesheet teilweise Regeln in dieser Form gibt:
#mit-js table {
}
... statt einfach nur:
table { }
Allen Elementen wird also abgefordert, dass sie unter einem Element mit der ID "mit-js" liegen – das bei der Auslieferung des HTML-Dokumentes nirgendwo existiert. Es wird nur eingefügt, wenn Javascript aktiviert ist und zwar von Javascript selber:
window.onload = function () {
document.body.id = "mit-js";
}
Beim fertigen Laden des Dokumentes wird diese anonyme Funktion geladen und als Inhalt der Funktion wird die ID des Elementes body auf die oben gesuchte ID gesetzt. Spontan funktionieren plötzlich alle CSS-Regeln, die in der Form "#mit-js element" definiert sind, ausser vielleicht auf das body-Element selber zutreffende Regeln, für diese nutzt man natürlich nur "mit-js {}". Geht natürlich auch mit Klassen.
Der Gedanke dahinter ist es, die drei Schichten (Strukturierung, Gestaltung, Verhalten), um Inhalt im Web zu präsentieren, nicht zu verknüpfen, sondern dafür zu sorgen, dass diese Schichten aufeinander aufbauen, aber eben nicht entscheidend für die Präsentation der Seite sind. Klassisch wird das in dem Diagramm von Russ Beakley, mehr wird es zur Zeit unter dem Begriff Unobtrusive DOM Scripting definiert. In diesem Fall ist die Verreckung deswegen vielleicht albern ja. In anderen Fällen ist es dagegen sinnvoller, Veränderungen in der Seite nicht direkt vorzunehmen, sondern in Javascript einfach mittels der Änderung eines Attributes dafür zu sorgen, das andere Darstellungsregeln zur Anwendung kommen – nicht notwendigerweise die eigenen, der Betrachter der Seite kann ja auch eigene im Browser definiert haben.
Tim