Hallo Linuchs,
Wenn ich etwa in mehreren Webseiten ein input-Feld habe, das bei der Eingabe per Ajax Vorschläge für Ortsnamen holt, gehört die entspr. .js Datei dazu ebenso wie CSS Angaben.
Nun meckert der HTML-Validator, wenn ich CSS-Angaben in dem div formuliere, wo sie logisch hingehören. Der Firefox macht's trotzdem, aber unbekannte Browser?
Dann solltest du das vielleicht in der Art lösen, wie dedlfix es vorschlug:
Dein Projekt intern (bzw. in deinem Falle auf dem Server) Komponenten-basiert zu organisieren und dann HTML, CSS und JS separat ausliefern.
Du könntest beispielsweise die Ausgabekontrolle von PHP benutzen und das HTML ausgeben, und Funktionen definieren, die JS und CSS bzw. die darauf verweisenden Links sammeln und dann am Ende des Prozesses der Seitengenerierung ein HTML-Grundgerüst ausgeben, in das in den Head des HTML dein CSS und JS oder bessser die Referenzen darauf eingefügt werden und dann via ob_end_flush()
dein HTML ausgegeben wird.
Ist es nicht die objektorientierte Idee, dass Variablen und Verfahren gemeinsam in einer "Kiste" liegen?
Ja, in Programmiersprachen. Zusätzlich auch noch Vererbung: Du hast beispielsweise Code, der einen bestimmten Typ von Formular abwickelt und packst ihn in eine Klasse. Dann kannst du diese Klasse um die gewünschten Funktionen erweitern, aber trotzdem noch die ursprüngliche Klasse nutzen. Ich fange gerade erst an, echte Programme objektorientiert zu schreiben...
Und was sollen die ständigen Ermahnungen, CSS nicht als inline in einen Tag zu packen? Ich will nicht für jeden Super-Sonderfall die weit weg liegende "Zentrale" verändern.
Wenn dieser „Super-Sonderfall“ (wenn du eine Funktion mehr als einmal einbindest, ist das m. M. n. keiner mehr) häufiger verwendet wirst, hast du überall inline-Code drin stehen. Der Performance ist das nicht zuträglich.
Außerdem ist ein div
mit einer bestimmten Gestaltung für dich als Entwickler ein Sonderfall, wenn der Nutzer diese Seite bzw. eine Seite, die diese Vorlage benutzt, mehrmals aufruft, wird dieses CSS jedes Mal mit übertragen – es ist also für den Nutzer kein Sonderfall mehr. Hier lohnt es sich, das (mit anderen Deklarationen, es sollen ja nicht zu viele einzelne Dateien übertragen werden) in eine CSS-Datei zu packen und diese dann einzubinden.
Ein oder mehrere, zentrale und ggf. minifizierte Stylesheets und Scripte können clientseitig gecacht werden und ersparen damit letztlich auch dir Traffic. Es kann allerdings durchaus sinnvoll sein, das CSS und JS zusätzlich zu modularisieren und damit nicht auf jeder Seite alles einzubinden:
Wenn du beispielsweise CSS und JS für den öffentlichen Teil deiner Site hast und welches für den Bereich für Eingeloggte und das in separaten Dateien vorliegen hast, dann kannst du dafür sorgen, dass nur im Bereich für Eingeloggte alle Dateien geladen werden.
Außerdem verbaust du dir die Möglichkeit, via Content-Security-Policy strikte Regeln für inline-Dinge (Bilder, JS und Styles) zu definieren und verschenkst damit die Möglichkeit, zu verhindern, dass eventuell auftretende XSS-Lücken ausgenutzt werden können.
Gruß
Julius