Björn: Random CSS Zeile

Tag,
ich habe ein Problem.Ich möchte für einen Headkopf bei jedem laden der Seite ein anderes Bild zeigen. Gibt es hierfür einen Tip wie ich solch einen Randomeffekt bewirken kann ?

Code:
.head {
background-image: url(inc/images/head_b.jpg);
}

beim zweiten laden der Seite soll dann z.B. dieses geladen werden.

.head {
background-image: url(inc/images/head_c.jpg);
}

Gibt es hierfür eine CSS Lösung ?

  1. Hiho,

    Gibt es hierfür eine CSS Lösung ?

    Würde mich überraschen, da CSS eigentlich nichts ausführbares enhthalten sollte, sondern lediglich gestaltungsregeln.
    Sowas löst du am besten mit einer serverseitigen Sprache.

    Grüße

    Marc

    1. hat jemand eine Idee wie es am besten umzusetzen wäre ??

      1. Hi,

        hat jemand eine Idee wie es am besten umzusetzen wäre ??

        du kannst z. B. ein PHP-Skript erstellen, dass den Inhalt deiner CSS-Datei hat, einen auf .css endenden Dateinamen, per .htaccess kannst du einstellen, dass der PHP-Code trotzdem ausgeführt wird. Dann musst du ein wenig mit der rand()-Funktion rumhantieren, um zufällig ein Bild auszuwählen.
        Für den Client sieht es dann wie eine ganz normale CSS-Datei aus, auf dem Server hingegen kannst du zufällige Werte in das CSS einfügen lassen.

        Schöne Grüße
        Julian

        --
        "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning." - Rich Cook
        http://derjulian.net
        1. Hi,

          du kannst z. B. ein PHP-Skript erstellen, dass den Inhalt deiner CSS-Datei hat, einen auf .css endenden Dateinamen, per .htaccess kannst du einstellen, dass der PHP-Code trotzdem ausgeführt wird. Dann musst du ein wenig mit der rand()-Funktion rumhantieren, um zufällig ein Bild auszuwählen.
          Für den Client sieht es dann wie eine ganz normale CSS-Datei aus, auf dem Server hingegen kannst du zufällige Werte in das CSS einfügen lassen.

          Nachteil dabei: wegen einer einzigen Style-Deklaration (dem zufälligen Hintergrundbild) darf dann das gesamte CSS-File, in dem die Deklaration steht, nicht mehr gecached (entsprechende Header müssen natürlich gesetzt werden) werden, da sonst ja der Zufallseffekt wieder weg ist ==> überflüssiger Traffic + überflüssige Wartezeit für den Besucher.

          Je nachdem, wie wichtig der Zufallsbildeffekt ist (m.E: total unwichtig - ) kann es sinnvoller sein, das per Javascript zu machen.
          Ohne Javascript gäb's dann halt immer dasselbe Bild. Aber das CSS-File belastet den Traffic nicht mehr als absolut nötig.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Hallo Andreas,

            na da hast du mehr als recht. suche gerade etwas passendes in java aber noch gibt google nichts gescheites raus.

            1. folgendes Problem. Wie bekomme ich beides zueinander ???

              Code quellcode:

              <table width="100%" border="0" cellpadding="0" cellspacing="0" background="inc/images/head_w.jpg">

              Code Random Image:

              <SCRIPT LANGUAGE="Javascript"><!--

              // ***********************************************
              // AUTHOR: WWW.CGISCRIPT.NET, LLC
              // URL: http://www.cgiscript.net
              // Use the script, just leave this message intact.
              // Download your FREE CGI/Perl Scripts today!
              // ( http://www.cgiscript.net/scripts.htm )
              // ***********************************************

              function image() {
              };

              image = new image();
              number = 0;

              // imageArray
              image[number++] = "<img src='inc/images/head_b.jpg' border='0'>"
              image[number++] = "<img src='inc/images/head_h.jpg' border='0'>"
              image[number++] = "<img src='inc/images/head_p.jpg' border='0'>"
              image[number++] = "<img src='inc/images/head_r.jpg' border='0'>"
              image[number++] = "<img src='inc/images/head_t.jpg' border='0'>"
              image[number++] = "<img src='inc/images/head_w.jpg' border='0'>"
              // keep adding items here...

              increment = Math.floor(Math.random() * number);

              document.write(image[increment]);

              //--></SCRIPT>

          2. Hallo Andreas,

            du kannst z. B. ein PHP-Skript erstellen, dass den Inhalt deiner CSS-Datei hat

            Nachteil dabei: wegen einer einzigen Style-Deklaration (dem zufälligen Hintergrundbild) darf dann das gesamte CSS-File, in dem die Deklaration steht, nicht mehr gecached (entsprechende Header müssen natürlich gesetzt werden) werden, da sonst ja der Zufallseffekt wieder weg ist ==> überflüssiger Traffic + überflüssige Wartezeit für den Besucher.

            Korrekt. Das Script sollte besser die Grafiken ausliefern, nicht das Stylesheet.

            http://photomatt.net/scripts/randomimage

            Grüße
             Roland

            1. Hi,

              Nachteil dabei: wegen einer einzigen Style-Deklaration (dem zufälligen Hintergrundbild) darf dann das gesamte CSS-File, in dem die Deklaration steht, nicht mehr gecached (entsprechende Header müssen natürlich gesetzt werden) werden, da sonst ja der Zufallseffekt wieder weg ist ==> überflüssiger Traffic + überflüssige Wartezeit für den Besucher.

              Korrekt. Das Script sollte besser die Grafiken ausliefern, nicht das Stylesheet.

              Nö. Da damit die Bilder nicht mehr gecached werden dürfen, der zusätzliche Traffic wird damit vom CSS-File auf die Bild-Files verschoben.

              Entweder ein zusätzliches nichtzwischenzuspeicherndes Mini-CSS, das genau diese eine Deklaration samt Selektor enthält, oder aber eben per (immer identischem) Javascript-Code jeweils ein zufälliges Bild einbinden.

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              Schreinerei Waechter
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          3. 你好 MudGuard,

            Nachteil dabei: wegen einer einzigen Style-Deklaration (dem zufälligen
            Hintergrundbild) darf dann das gesamte CSS-File, in dem die Deklaration
            steht, nicht mehr gecached (entsprechende Header müssen natürlich gesetzt
            werden) werden, [...]

            Ja, wenn man das ganze CSS-File generieren lässt ;) Man könnte aber auch
            nur einen Teil generieren lassen und per zweitem <link> einbinden, nur so
            als Anregung *g*

            再见,
             克里斯蒂安

            --
            Zahnarztbesuch | Toilettenspruch II.
            Der Mund ist das Portal zum Unglück.
            http://wwwtech.de/
            1. Hi,

              Ja, wenn man das ganze CSS-File generieren lässt ;) Man könnte aber auch
              nur einen Teil generieren lassen und per zweitem <link> einbinden, nur so
              als Anregung *g*

              Siehe https://forum.selfhtml.org/?t=116556&m=745991
              und beachte die Zeit Deines und meines Postings ;-)

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              Schreinerei Waechter
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
              1. 你好 MudGuard,

                Siehe https://forum.selfhtml.org/?t=116556&m=745991
                und beachte die Zeit Deines und meines Postings ;-)

                Hehe, ja, das ist mir zwei Minuten nach dem Posten dann auch aufgefallen ;)

                再见,
                 克里斯蒂安

                --
                Zahnarztbesuch | Toilettenspruch II.
                Kommt ein Nullvektor zum Psychiater: "Herr Doktor, ich bin orientierungslos!"
                http://wwwtech.de/
  2. 你好 Björn,

    Gibt es hierfür eine CSS Lösung ?

    Nope. Generiere das CSS per Script auf Server-Seite.

    再见,
     克里斯蒂安

    --
    Zahnarztbesuch | Toilettenspruch II.
    Das Sein entsteht aus dem Nicht-Sein.
    http://wwwtech.de/
  3. Tag Björn.

    ich habe ein Problem.Ich möchte für einen Headkopf bei jedem laden der Seite ein anderes Bild zeigen. [...] Gibt es hierfür eine CSS Lösung?

    Der Vollständigkeit halber sei erwähnt, dass es im IE die Möglichkeit gibt, Javascript und CSS zu verbinden, die sog. CSS-Expressions. Damit kannst du den Rückgabewert einer Script-Anweisung einem CSS-Attribut als Wert zuweisen:

    Der Javascript-Teil:

    // erzeuge Zufallszahl zwischen 1 und 20  
    nr = Math.floor(Math.random() * 20) + 1;  
    bild = "url(backgrd_nr" + nr + ".gif)";  
      
    function constantExpression(const) {  
      return const;  
    }
    

    Der CSS-Teil:

    body {  
      background-image:url(default.gif);  
    }  
    * html body {  
      background-image:expression(constantExpression(bild));  
    }
    

    Im IE bekommst du so bei jedem Reload ein zufälliges Hintergrundbild aus der Reihe backgrd_nr1.gif ... backgrd_nr20.gif, in allen anderen Browsern ist das Hintergrundbild "default.gif" (siehe hierzu Star-HTML-Hack).

    Siechfred

  4. N'Obend

    ich habe ein Problem.Ich möchte für einen Headkopf bei jedem laden der Seite ein anderes Bild zeigen. Gibt es hierfür einen Tip wie ich solch einen Randomeffekt bewirken kann ?

    Gibt es hierfür eine CSS Lösung ?

    CSS nein. Ich habe ebenfalls mal so was versucht und bin dann dabei gelandet im CSS anstatt eines Bildes ein php-Script einzubinden:

      
    background-image:url(bilder/getImage.php?foo=bar);  
    
    

    Wobei getImage.php dann jeweils ein anderes Bild zurückgibt:

      
    <?php  
    srand((double)microtime()*1000000);  
    $bildNummer = rand(1, 5);  
    header('Location: head'.$bildNummer.'.jpg');  
    exit;  
    ?>  
    
    

    Allerdings spielt einem dann meist der Browsercache einen Streich… So wirklich funktionieren will es nicht :(

    Tschö,
    dbenzhuser

    --
    Heute in der Reihe „unser Ranking soll schöner werden“:
    Gefälschte Musikinstrumente Marke Bessons
    1. Hallo,

      header('Location: head'.$bildNummer.'.jpg');

      Du solltest aber schon einen absoluten URI senden, das ist im HTTP-Standard so vorgeschrieben.

      Header('Location: http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/head'.$bildNummer.'.jpg');

      (ja, ich weiß, das deckt nicht alles ab, aber meistens funktioniert's)

      Viele Grüße,
      Christian