Variablen in CSS mithilfe von PHP

Dieser Beitrag wurde vor mehr als 14 Jahren veröffentlicht. Daher kann es sein, dass sein Inhalt oder ein Teil davon nicht mehr aktuell ist.

CSS-Dateien werden mit der Zeit immer länger und unübersichtlicher. Zudem kommt, dass sich bestimmte Farben, Breiten, Schriftgrößen oder ähnliches immer wieder wiederholen. Wenn man diese dann irgendwann ändern möchte, dann muss man immer das komplette Dokument durchsuchen um wirklich alles zu ändern. Eine nervenaufreibende Tätigkeit, welche durch Variablen im CSS erleitert werden kann. Die einfache Verwendung von PHP in CSS-Dateien kann einem dabei helfen sein Stylesheets oder seine Stylesheets leichter zu managen.

Durch einen Beitrag bei Dr. Web inspiriert, möchte ich hier mal eine etwas sinnvollere Lösung bieten um Variablen in CSS zu benutzen als dort erwähnt wird. Dort findet man folgenden Satz:

Das Problem ist dabei nur, dass das Stylesheet unübersichtlicher wird, weil es nun nicht mehr abgekoppelt ist und zuerst durch einen Preprocessor „laufen“ soll.

Das ist aber nicht wirklich verständlich, denn die CSS-Datei kann nach wie vor einzeln darstellen. Man muss ihr lediglich beibringen PHP zu verstehen. Das sollte auf so ziemlich jedem Paid-Webspace möglich sein und sogar einige Freehoster lassen dies zu. Mit Hilfe einer htaccess-Datei kann man dem Server sagen, wie er bestimmte Dateien lesen soll.

Also brauchen wir dem Server nur zu sagen, dass er neben Dateien mit der Endung .php auch Dateien mit der Endung .css als PHP-Datei erkennen soll, bzw. dass er auch in dieser Datei das PHP parsen soll, damit man Variablen in der CSS-Datei benutzen kann. In der gleichen Anweisung kann man auch HTML-Dateien mit einschließen. Diese Anweisung würde dann so aussehen:

AddType application/x-httpd-php php php5 php4 php3 html htm css

Somit werden alle Dateien mit den Endungen .php, .php5, .php4, .php3, .html, .htm und mit der Endung .css auf die Liste der Dateien gesetzt, welche der Server parsen soll.

Jetzt sollte man sich aber nicht wundern, denn wenn man die Seite jetzt aufruft, wird kein Stylesheet geladen. Man muss der CSS-Datei nun erst wieder sagen, dass sie eine solche Datei ist und das tut man mit PHP. Dazu muss man lediglich folgendes in die CSS-Datei eintragen:

<?php
header('Content-Type:text/css');
?>

Damit weiß die CSS-Datei nun wieder, dass sie eine ist und kann es dem Browser auch so mitteilen. Darunter folgt dann ganz normal das CSS. Dieses muss nicht unbedingt in einer echo-Anweisung von PHP stehen, doch es ist platzsparender. Denn wenn das CSS einzeln steht, muss man immer wieder PHP mit <?php öffnen, eine echo-Anweisung einleiten, die Variable eintragen und mit ?> wieder PHP schließen.

Wenn man die kompletten CSS-Anweisungen in einer echo-Anweisung mit Doppelquotes macht, braucht man an die Stellen, an die die Variable soll lediglich die Variable eintragen. Somit wird sie ausgeführt und man spart sich eine Menge Code.

Sobald das erledigt ist, muss man eigentlich nur noch unter dem header-Befehl die Variablen definieren. Wie das geht, sollte man bereits wissen, ansonsten findet man auch sicherlich noch eine Seite, auf der das nochmal genau beschrieben wird ;)

Wenn man das alles gemacht hat und seine Variablen bestimmt hat, fallen zukünftige Änderungen wesentlich leichter. Denn man muss erstens nicht mehr suchen, wo sich eine Anweisung versteckt, da sie alle oben sind und zweitens muss man nur noch eine Stelle im Code ändern.

8 Kommentare

  1. Interessanter Ansatz, allerdings erlaubt bei weitem nicht jeder PaidHoster die Editierung der htaccess-Datei bzw. ein AddType in derselben, von daher ist der Ansatz relativ irrelevant, wenn man nicht professionell gehostet wird…

  2. Danke, echt klasse.

    Hatte das bei drweb auch gesehen, aber ich fand die erklärung irgendwie zu unübersichtlich. Jetzt kann ich endlich variablen in CSS benutzen und muss mich nicht immer durchkämpfen.

    Jon

  3. Danke Thomas. Hast du vielleicht noch Vorschläge zur Verbesserung des Ansatzes?

  4. Das stimmt leider, aber das habe ich ja weiter oben schon erwähnt.
    Man kann das Ganze auch mit einer style.php machen und diese als text/css ausliefern. Ich habe mich nur für die CSS-Datei entschieden, da ich so in meinem Editor das Syntaxhighlighting habe.

    Diese Möglichkeit ist also auch so verwendbar, doch muss man eben eine PHP-Datei als Stylesheet einfügen.

  5. Megaa geile Idee! An so etwas habe ich ehrlich gesagt noch nie gedacht, bzw. habe ich die Idee mit "Variablen in einer .css Datei" immer direkt wieder aus meinem Kopf geschmissen, weil in meinen Augen es halt nicht ging.
    Werde ich sicherlich bei neuen Projekten einsetzen!

    Danke Wishu ;-)

  6. Hallo, die Idee mit Variablen in CSS ist ja nicht neu. Deine Umsetzung ist technisch sauber, allerdings lässt das ganze Konzept meiner Meinung nach etwas außer acht: zusätzlich zu den eigentlichen Seiten werden nun auch noch die dazugehörigen CSS-Dateien geparst. Das erhöht die Last deutlich (zumal oft (obwohl ineffizient) mehrere CSS-Dateien pro Seite geladen werden). Außerdem wird die CSS wahrshcienlich jedes Mal mitübertragen statt aus dem Cache des Browsers geholt, da ein anderer Timestamp drauf ist, obwohl sich nichts an der Datei geändert hat. Für hochfrequentierte Seiten ist das kein praktikabler Ansatz.
    Eine Alternative wäre ein sehr gutes Cache-System für die CSS – oder einfach eine gut geschriebene CSS, die Variablen nicht braucht ;-).

  7. Danke für den Hinweis. Darüber habe ich tatsächlich noch nicht nachgedacht. Ich werde mal drüber nachdenken, was man da verbessern kann.

    Gruß
    Wishu