sascha321: php Variable in css datei

Hallo

kann man php Variablen in einer css Datei verwenden?

Ich zeige euch ambesten wie es ohne css Datei ausieht und wie ich es mir mit css Datei vorstelle.

Ohne css Datei
<div style="float:left; background-color:'.$rasterfarbe.'; width:'.$quadrahtlaenge.'px; height:'.$quadrahtlaenge.'px;"></div>

mit css Datei
<div id="quadrat"></div>

so sieht die css datei aus

#quadrat {  
  
  
        float:left;  
        <?php echo 'background-color:'.$rasterfarbe?>;  
        <?php echo 'width:'.$quadrahtlaenge?>;  
        <?php echo 'height: '.$quadrahtlaenge?>;  
  
}  

und so wird sie eingebunden
<link href="style.css" rel="stylesheet" type="text/css" media="all" />

leider klappt das nicht wenn ich die php Variablen in der css Datei habe.
Geht das überhaubt?

  1. Hi,

    kann man php Variablen in einer css Datei verwenden?

    im Prinzip ja.[tm]

    #quadrat {

    float:left;
            <?php echo 'background-color:'.$rasterfarbe?>;
            <?php echo 'width:'.$quadrahtlaenge?>;
            <?php echo 'height: '.$quadrahtlaenge?>;
    }

      
    
    > leider klappt das nicht wenn ich die php Variablen in der css Datei habe.  
    > Geht das überhaubt?  
      
    Natürlich. Nur musst du dann dafür sorgen, dass die CSS-Datei auch durch den PHP-Parser geschleust wird. Am einfachsten geht das sicher, indem du sie von \*.css auf \*.php umbenennst. Vorsicht, am Anfang noch korrekten Content-Type-Header senden.  
      
    So long,  
     Martin  
    
    -- 
    Wer es in einem Unternehmen zu etwas bringen will, muss so tun, als hätte er es schon zu etwas gebracht.
    
    1. @@Der Martin:

      nuqneH

      Natürlich. Nur musst du dann dafür sorgen, dass die CSS-Datei auch durch den PHP-Parser geschleust wird. Am einfachsten geht das sicher, indem du sie von *.css auf *.php umbenennst. Vorsicht, am Anfang noch korrekten Content-Type-Header senden.

      Und Vorsicht, mich deucht, $rasterfarbe und $quadrahtlaenge werden in dem PHP-Script berechnet, das das HTML generiert. Die Variablen müssen natürlich dem Script bekannt sein, das das CSS generiert.

      Und „Quadrat“ schreibt sich ohne 'h'.

      Qapla'

      --
      Bildung lässt sich nicht downloaden. (Günther Jauch)
      1. Hallo

        vielen dank, habe es nun hinbekommen, aber es sieht so aus als ob das Script auf dem Server selber überholt. Die kleinen Quadrate die ich in dem grossen Quadrat erstelle können bis 1000 gehen und das scheint dann nicht mehr zu klappen. Bis 100 Quadrate funktioniert es.

        Vielen Dank für eure Hilfe.

  2. Hallo

    also benenne ich die style.css in style.php um und dann
    mach ich bei dem aufruf aus dem style.css ein style.php?

    Das ist alles? wenn ja, es geht aber nicht.

    Stehe jetzt irgendwie auf dem schlauch.

    1. Hello,

      also benenne ich die style.css in style.php um und dann
      mach ich bei dem aufruf aus dem style.css ein style.php?

      Alternative:

      Lass Die CSS-Ressource von Deinem Stamm-Script als statische Datei erstellen, wenn dies notwendig ist und nicht bei jedem Request.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. Hallo Tom,

        Lass Die CSS-Ressource von Deinem Stamm-Script als statische Datei erstellen, wenn dies notwendig ist und nicht bei jedem Request.

        dann wäre es ja fast besser (zumindest effizienter), die CSS-Regeln gleich in ein style-Element des HTML-Dokuments einzubauen, anstatt erst noch eine separate Datei zu schreiben und die mit einem zusätzlichen HTTP-Request abrufen zu lassen.
        Damit wäre das von Gunnar angesprochene Problem, dass die Werte in verschiedenen Scripten verfügbar sein müssten, auf elegante Weise erledigt.

        So long,
         Martin

        --
        Rizinus hat sich angeblich als sehr gutes Mittel gegen Husten bewährt.
        1. Hello,

          dann wäre es ja fast besser (zumindest effizienter), die CSS-Regeln gleich in ein style-Element des HTML-Dokuments einzubauen, anstatt erst noch eine separate Datei zu schreiben und die mit einem zusätzlichen HTTP-Request abrufen zu lassen.
          Damit wäre das von Gunnar angesprochene Problem, dass die Werte in verschiedenen Scripten verfügbar sein müssten, auf elegante Weise erledigt.

          Wenn es nur um ein einziges Modul geht, dass CSS benötigt, mag das ja auch recht wenig bleiben.
          Aber vielleicht möchte man in der CSS-Datei ja die Deklarationen für mehrere Ressourcen sammeln. und dann kann das nachher schon eine mächtig fette Datei werden.

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
          Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
          1. Hallo

            tja ich weiss im moment nicht wovon ihr redet, bzw. verstehe ich eure tips nicht.
            Egal ich lasse alles so wie es ist.

  3. Hello,

    so sieht die css datei aus

    #quadrat {

    float:left;
            <?php echo 'background-color:'.$rasterfarbe?>;
            <?php echo 'width:'.$quadrahtlaenge?>;
            <?php echo 'height: '.$quadrahtlaenge?>;

    }

      
    Und berichtige die Fehler noch:  
      
              float:left;  
              <?php  
                  echo 'background-color:'.$rasterfarbe.';';  
                  echo 'width:'.$quadrahtlaenge.';';  
                  echo 'height: '.$quadrahtlaenge.';';  
              ?>  
      
    oder  
      
              <?php  
                  echo "float:left;\r\n";  
                  echo "background-color: $rasterfarbe;\r\n";  
                  echo "width: $quadrahtlaenge;\r\n";  
                  echo "height: $quadrahtlaenge;\r\n;";  
              ?>  
      
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
    Nur selber lernen macht schlau  
    <http://bergpost.annerschbarrich.de>  
      
    
    
  4. Hallo!

    Eigentlich haben dir die hiesigen Experten schon alle Varianten, sowie einige Dinge, die es jeweils zu beachten gibt, aufgezählt.

    Wie mir scheint, allerdings so formuliert, dass du damit wenig anfangen kannst.

    Vielleicht helfen dir Google und dieses Tutorial ein wenig weiter bei deinem Verständnis.

    Gruß Gunther

    1. Hallo

      ja ich glaube das Sie mir tips und hinweise gegeben haben, aber wie Du schon sagtest ich kann damit nichts Anfangen.
      Danke für den Link, der hilft mir aber auch nicht weiter.
      Ich brauche Seiten auf Deutsch und da wirds dann halt schwer.

      Vielen Dank.

      1. Hallo!

        Danke für den Link, der hilft mir aber auch nicht weiter.

        Na ja, eigentlich waren es 2 Links! ;-)
        Wovon einer dich zu zig weiteren "Quellen" führen sollte.

        Ich brauche Seiten auf Deutsch und da wirds dann halt schwer.

        Und wir bräuchten evt. mal eine klarere Aussage, was du denn nicht verstehst.

        Grundsätzlich dürfte es bei "normaler" Konfiguration so sein, dass nur PHP-Dateien (.php, .phps, php3, php4) auch durch den PHP-Parser geschickt werden.

        Wenn du also hingehst, und einfach PHP-Code in eine CSS-Datei (.css) schreibst, wird dieser nicht verarbeitet, sondern es entsteht daraus nur eine ungültige CSS-Datei.

        Um PHP-Code in einer solchen Datei ebenfalls verarbeiten zu können, gibt es im wesentlichen 2 Möglichkeiten:
        1. Du benennst die Datei von der Endung her so um, dass sie eine Dateiendung hat, die geparst wird, also bspw. in .php
        Dann musst aber einen entsprechenden Content-Header mitschicken, damit der Browser weiß, dass es sich um eine CSS-Datei handelt:
        <?php header("Content-type: text/css"); ?>

        2. Du konfigurierst deinen Server (z.B. per .htaccess) so um, dass bspw. alle Dateien im Verzeichnis 'css' auch durch den PHP-Parser gejagt werden:
            AddType application/x-httpd-php .css

        Gruß Gunther

        1. hi,

          1. Du konfigurierst deinen Server (z.B. per .htaccess) so um, dass bspw. alle Dateien im Verzeichnis 'css' auch durch den PHP-Parser gejagt werden:
                AddType application/x-httpd-php .css

          Davon ist dringend abzuraten, da man mit dieser einen Zeile in seiner .htaccess das Caching der Statischen CSS-Ressourcen Effektiv unterbindet -- und das möchte man in der Regel nicht.

          mfg

          --
          マルコム ベック`秒 エイリアス エJ Ñ - ĜわたしÑ
          1. Hello,

            1. Du konfigurierst deinen Server (z.B. per .htaccess) so um, dass bspw. alle Dateien im Verzeichnis 'css' auch durch den PHP-Parser gejagt werden:
                  AddType application/x-httpd-php .css

            Davon ist dringend abzuraten, da man mit dieser einen Zeile in seiner .htaccess das Caching der Statischen CSS-Ressourcen Effektiv unterbindet -- und das möchte man in der Regel nicht.

            Die statischen Ressourcen kann man ja in ein anderes Verzeichnis legen.
            Ordnung ist das halbe Leben, und die andere Hälfte verbringt man mit suchen :-)

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. hi,

              Die statischen Ressourcen kann man ja in ein anderes Verzeichnis legen.
              Ordnung ist das halbe Leben, und die andere Hälfte verbringt man mit suchen :-)

              So kann man es auch machen; da ich aber nur mit einer einzigen .htaccess in meinem Projekt arbeite, würde es für mich nicht in Frage kommen.

              Ich gehe eher den entgegengesetzten Weg:

              ExpiresActive On  
              ExpiresDefault "access plus 1 years"  
                
              <FilesMatch "\.(jpg|jpeg|gif|png|mp3|flv|mov|avi|html|swf|css|js|ico)$">  
                  Header set Cache-Control "public"  
                  FileETag MTime Size  
              </FilesMatch>
              

              Zusätzlich generieren dann Smarty und Minify noch passende Expires-Header für die durch PHP-generierten Ressourcen.

              mfg

              --
              マルコム ベック`秒 エイリアス エJ Ñ - ĜわたしÑ
      2. hi,

        Ich brauche Seiten auf Deutsch und da wirds dann halt schwer.

        Du erstellst eine CSS-Datei -- nennen wir sie "func_css.php" -- in diese Datei schreibst du:

        <?php  
          
          error_reproting(E_ALL);  
          header('Content-type: text/css;');  
          
          echo 'body {background:#000;}';  
        ?>
        

        Zum testen bindest du jetzt dieses Script in deine Seite ein:

        <link type="text/css" rel="stylesheet" href="/css/func_css.php" />

        Wenn alles ok ist, dann kann es weiter gehen.

        Da du variable Werte in der CSS benötigst, gehe ich mal davon aus, dass diese variablen im HTML definiert werden und im nachhinein irgendwie an die CSS-Datei übergeben werden müssen, also:

        <link type="text/css" rel="stylesheet" href="/css/func_css.php?background=#000" />

        Der Aufruf in der CSS sieht dann so aus:

        <?php  
          
          error_reproting(E_ALL);  
          header('Content-type: text/css;');  
          
          if (isset($_GET['background']))  
          {  
            printf ('body {background:%s;}', $_GET['background']);  
          }  
        ?>
        

        Das war's schon.

        Sinnvollerweise prüfst du die an die CSS übergebenen Variablen in der "func_css.php", bevor du sie ausgibst.

        mfg

        --
        マルコム ベック`秒 エイリアス エJ Ñ - ĜわたしÑ
        1. Hello E*äh* M.,

          <link type="text/css" rel="stylesheet" href="/css/func_css.php?background=#000" />

            
          Dass das kein guter Tipp ist, weißt Du doch? :-P  
            
           <link type="text/css" rel="stylesheet" href="/css/func\_css.php?background-color=%23000" />  
            
          Die URi-Parameter müssen auf jeden Fall auch URL-codiert werden, egal, ob man das per Hand macht, oder per PHP erzeugen lässt.  
            
            
            
            
            
            
          Liebe Grüße aus dem schönen Oberharz  
            
            
          Tom vom Berg  
          ![](http://selfhtml.bitworks.de/Virencheck.gif)  
            
          
          -- 
          Nur selber lernen macht schlau  
          <http://bergpost.annerschbarrich.de>  
            
          
          
          1. hi Tom,

            Dass das kein guter Tipp ist, weißt Du doch? :-P

            Ich habe es in Erwägung gezogen -- wenn auch nur in Lokalen Gedankengängen ;)

            <link type="text/css" rel="stylesheet" href="/css/func_css.php?background-color=%23000" />

            Die URi-Parameter müssen auf jeden Fall auch URL-codiert werden, egal, ob man das per Hand macht, oder per PHP erzeugen lässt.

            Danke für die Korrektur.
            Da ich sowas noch nie genutzt habe, zumindest nicht in dieser Form, wusste ich nicht genau, wie ich da vorgehen sollte.

            mfg

            --
            マルコム ベック`秒 エイリアス エJ Ñ - ĜわたしÑ
            1. Hello,

              <link type="text/css" rel="stylesheet" href="/css/func_css.php?background-color=%23000" />

              Die URi-Parameter müssen auf jeden Fall auch URL-codiert werden, egal, ob man das per Hand macht, oder per PHP erzeugen lässt.

              Da ich sowas noch nie genutzt habe, zumindest nicht in dieser Form, wusste ich nicht genau, wie ich da vorgehen sollte.

              Anderenfalls wäre es doch ein Anker bzw. erstmal ein Fragment-Identifier geworden.
              http://www.w3.org/TR/html4/intro/intro.html#fragment-uri

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. hi,

                Da ich sowas noch nie genutzt habe, zumindest nicht in dieser Form, wusste ich nicht genau, wie ich da vorgehen sollte.

                Anderenfalls wäre es doch ein Anker bzw. erstmal ein Fragment-Identifier geworden.
                http://www.w3.org/TR/html4/intro/intro.html#fragment-uri

                Jau, stimmt, an Anker hatte ich dabei garnicht gedacht.

                mfg

                --
                マルコム ベック`秒 エイリアス エJ Ñ - ĜわたしÑ
          2. Hi!

            <link type="text/css" rel="stylesheet" href="/css/func_css.php?background=#000" />
            Die URi-Parameter müssen auf jeden Fall auch URL-codiert werden, egal, ob man das per Hand macht, oder per PHP erzeugen lässt.

            Und in dem Fall ganz besonders, weil das # sonst als Sprungzieleinleitung angesehen wird. Man könnte es auch ganz weglassen, wenn man auf Empfängerseite nicht zwischen benannten Farben und Zahlen-Werten unterscheiden muss. Zudem ist dort beim Einfügen eine Plausibilitätsprüfung vorzunehmen, um sich kein XSS einzufangen. Sonst übergibt einem da einfach jemand ein expression(...)

            Lo!

            1. Hello,

              <link type="text/css" rel="stylesheet" href="/css/func_css.php?background=#000" />
              Die URi-Parameter müssen auf jeden Fall auch URL-codiert werden, egal, ob man das per Hand macht, oder per PHP erzeugen lässt.

              Und in dem Fall ganz besonders, weil das # sonst als Sprungzieleinleitung angesehen wird.

              Das schrub ich schon https://forum.selfhtml.org/?t=188731&m=1256641

              Man könnte es auch ganz weglassen, wenn man auf Empfängerseite nicht zwischen benannten Farben und Zahlen-Werten unterscheiden muss. Zudem ist dort beim Einfügen eine Plausibilitätsprüfung vorzunehmen, um sich kein XSS einzufangen. Sonst übergibt einem da einfach jemand ein expression(...)

              Aber daran habe ich jetzt nicht gedacht...
              Da könnte dann doch auch PHP-Code eingeschleust werden, oder denke ich da nun wieder falsch?

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
              Nur selber lernen macht schlau
              http://bergpost.annerschbarrich.de
              1. Hi!

                Zudem ist dort beim Einfügen eine Plausibilitätsprüfung vorzunehmen, um sich kein XSS einzufangen. Sonst übergibt einem da einfach jemand ein expression(...)

                Aber daran habe ich jetzt nicht gedacht...
                Da könnte dann doch auch PHP-Code eingeschleust werden, oder denke ich da nun wieder falsch?

                Kommt auf den Kontext an. Solange du nicht mit eval() oder include & Co. hantierst, hast du keinen PHP-Code-Kontext vorliegen, in den etwas Ungewolltes eingeschleust werden könnte.

                Lo!