Alex: CSS kann keine Konstanten

Hallo Leute

Eigentlich wollte ich hier herausfnden, wie man in CSS Farbnamen (oder andere Konstanten) definieren kann.
Ich habe da eine Standard CSS-Datei, die jeweils in entsprechende Unterordner kopiert wird und dann aber ein anderes Farbschema haben soll:

/*  Legende:  */
/*   */
/*  dunkel: #36a4af */
/*  mittel: #B0E0E6 */
/*  hell: #dff2f4 */

*.haupthinter {
  text-align:center;
  background-color:#36a4af;
  border-color:#dff2f4;
  border-width:0px 0px 2px 0px;
  border-style:solid;}

*.unterhinter {
  text-align:center;
  background-color:#B0E0E6;}

#label {
  text-align:center;
  color:#ff0000;
  font-size:large;
  font-weight:bold;
  border-color:#B0E0E6;
  border-width:15px 5px 0px;
  border-style:solid;
  padding:5px;
  background-color:#dff2f4}

#hauptlink {
  color:#dff2f4;
  text-decoration:underline;}

#leer {
  border-color:#dff2f4;
  border-width:0px 0px 2px 0px;
  border-style:solid; }

#eckelinks {
  width:14px;
  background-image:url(ecke_links.gif);
  background-repeat:no-repeat; }

#eckerechts {
  width:14px;
  background-image:url(ecke_rechts.gif);
  background-repeat:no-repeat; }

#unterzelle {
  text-align:center;
  background-color:#dff2f4;
  border-style:solid;
  border-color:#B0E0E6;
  border-width:0px;
  padding:5px;}

#fenster {
  border-style:solid;
  border-color:#B0E0E6;
  border-width:0px 10px 10px;
  background-image:url(bgnoten.jpg);
  padding-top:10px;
  padding-left:10px;
  padding-right:10px;
  padding-bottom:50px;}

Bis jetzt habe ich mit suchen/ersetzen, das Farbschema jeweils geändert, hätte es aber schöner gefunden, statt der Legende im Kommentar Konstanten zu definieren, die ich dann an den entsprechenden Stellen einfüge zB:

border-color:mittel;
statt
border-color:#B0E0E6;

Die Frage wurde im Forum recht eindeutig beantwortet:

--- CSS KANN DAS EINFACH NICHT ---

schade!

Eine Idee wäre natürlich, die entsprechenden Farbschemata in einer php-Datei zu definieren und dann vom Server die entsprechenden CSS-Dateien anpassen zu lassen. (Ist allerdings aufwendig und geht nur bei php-Unterstützung)

Aber offensichtlich bin ich mit dem Problem nicht alleine - und weil ich über dieses Manko in CSS jetzt erbost bin (wieso geht das nicht - das wäre doch so ungeheuer nützlich!!!) poste ich das mal als Meinung.

Ich bin mir sicher, dass die CSS-Verantwortlichen täglich dieses Forum nach neuen Ideen durchforsten, oder einer von Euch einen Beschwerdebrief aufsetzt ;)

Zumindest ist es befreiend meinen Unmut mit Euch zu teilen :)

Viele liebe Grüße an dieses phantastische Forum!
(Und vielleicht hat ja doch noch jemand eine geniale Idee ...)

  1. Hallo,

    ~~~css

    .hell {background:#fff}
      .mittel {background:#aaa}
      .dunkel {background:black}
      ...

      
      ~~~html
      
    <div id="hintergrund" class="dunkel"/>  
      <!--[..]-->  
      <li class="nav mittel"/>  
      
    

    geht doch?!

    gruss

    --
    no strict;
    no warnings;
    "May I introduce you to OSX. It even runs on cheap intel hardware."
    "I doubt that. It could run on cheap intel hardware, but Apple will restrict to expensive Apple hardware, which consists of cheap Intel hardware."
    1. geht doch?!

      Nein, Eternius, geht nicht.

      .foo {color: #aaa}  
      .bar {border-color: #aaa}
      

      Die Textfarbe der Elemente der Klasse foo soll mit der Rahmenfarbe der Elemente der Klasse bar übereinstimmen. Wir nehmen mal an, es gäbe noch mehr solcher Elemente und unterschiedliche Eigenschaften mit diesem Farbwert.

      Willst du diese Farbe ändern, bleibt dir nur dateiweites Suchen & Ersetzen; evtl. nicht mal das, wenn es noch andere Dinge der Farbe #aaa gibt, die du aber nicht ändern willst.

      Live long and prosper,
      Gunnar

      --
      „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
      1. Hallo,

        Nein, Eternius, geht nicht.

        .foo {color: #aaa}

        .bar {border-color: #aaa}

        
        >   
        > Die Textfarbe der Elemente der Klasse foo soll mit der Rahmenfarbe der Elemente der Klasse bar übereinstimmen. Wir nehmen mal an, es gäbe noch mehr solcher Elemente und unterschiedliche Eigenschaften mit diesem Farbwert.  
        >   
        > Willst du diese Farbe ändern, bleibt dir nur dateiweites Suchen & Ersetzen; evtl. nicht mal das, wenn es noch andere Dinge der Farbe #aaa gibt, die du aber nicht ändern willst.  
          
          ja, okay kapiert :) trennung in einzelne stylesheets für einzelne seiten, bzw, wer braucht so viele definitionen, dass es unwartbar wird?  
          
          fallen mir fast nur blogs oder "portale" ein, wie z.b. [n24](http://n24.de/css/style.css) (css), die so [vollgeballert](http://n24.de) sind mit zeuch, das es schon eh nicht mehr erfassbar ist.  
          
          aber natürlich wäre es einfacher mit css "-makros" oder "-variablen"  
          
        gruss
        
        -- 
        no strict;  
        no warnings;  
          
        "May I introduce you to OSX. It even runs on cheap intel hardware."  
          
        "I doubt that. It could run on cheap intel hardware, but Apple will restrict to expensive Apple hardware, which consists of cheap Intel hardware."  
        
        
    2. Hallo,

      ~~~css

      .hell {background:#fff}
        .mittel {background:#aaa}
        .dunkel {background:black}
        ...

        
      Ei, wenns so einfach wär!  
      Aber die Farben gelten ja immer für was anderes.  
      Mal für den Hintergrund, mal für den Text, mal für den Rahmen, ...  
      Außerdem benutze ich ja bereits Klassen in den Tags, d.h. man kann zwar mehrere Klassen auf ein Tag anwenden, aber ich vermute da schon Probleme, bei wiedersprüchlichen Angaben  
        
      z.B.  
      #Typ1 {  
        color:#ff0000;  
        border-color:#B0E0E6;  
        background-color:#dff2f4;}  
        
      \*.Klasse1 {  
        color:#B0E0E6;  
        border-color:#ff0000;  
        background-color:#dff2f4;}  
        
      \*Klasse2 {  
        background-color:#dff2f4;}  
        
      <span id="Typ1" class="Klasse1 Klasse2">irgendwas</span>  
        
      Na wenn das mal kein Chaos gibt!  
        
      Man kann zwar bis zu einem gewissen Grade mit Id's und Klassen experimentieren, aber je mehr Farben / Rahmendicken / sonstige Angaben man pro Id / class vergeben möchte umso unübersichtlicher und akrobatischer muss soetwas ausfallen - irgendwann sind selbst die trickreichsten Kombinatinen erschöpft. (In meinem Quelltext mache ich bereits das, was Du mir vorschlägst, in der trickreichsten Variation, die ich finden konnte, um mit möglichst wenigen Farbangaben auszukommen)  
        
      Wie Grundanders wäre es doch, wenn man einfach Konstanten vergeben könnte!!!  
        
      \--> Ich bleibe bei meiner Meinung: HIER FEHLT CSS ETWAS ENTSCHEIDENDES!  
        
      Trotzdem Danke für Deinen netten Beitrag!  
      Ich mag dieses Forum.  
        
        
      
      
  2. Hi Alex,

    wieso geht das nicht

    Weil CSS keine Programmiersprache ist.

    das wäre doch so ungeheuer nützlich!!!

    Ja. (Naja, _so_ nützlich, dass 3 Ausrufezeichen gerechtfertigt wären, nun auch wieder nicht.)

    Die Idee, das mit einer serverseitigen Programmiersprache zu lösen, hattest du ja schon angesprochen.

    Live long and prosper,
    Gunnar

    --
    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
    1. Hallo Gunnar

      Hatte Deine Beiträge vom Januar auch schon eifrig studiert (ich glaube die php-Idee war Deine: Danke, dass Du mich darauf gebracht hast! Allerdings ist das echt eine Notlösung).

      wieso geht das nicht

      Weil CSS keine Programmiersprache ist.

      »»

      Nein, CSS ist keine Programmiersprache und muss deshalb auch keine VARIABLEN verarbeiten können. Aber doch wohl Konstanten, sämtlich Id's und Klassen sind ja auch Konstanten.

      das wäre doch so ungeheuer nützlich!!!

      Ja. (Naja, _so_ nützlich, dass 3 Ausrufezeichen gerechtfertigt wären, nun auch wieder nicht.)

      Siehste das sehe ich anders - ich wäre schon versucht, noch ein viertes Ausrufezeichen dranzuhängen ;)))

      Liebe Grüße
         Alex

      1. Hatte Deine Beiträge vom Januar auch schon eifrig studiert

        Hm, keinen Schimmer mehr daran.

        ich wäre schon versucht, noch ein viertes Ausrufezeichen dranzuhängen ;)))

        Nein, nein, nein, nach dreien geht’s mit Einsen weiter!!!11

        Live long and prosper,
        Gunnar

        --
        „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
      2. Hallo,

        Nein, CSS ist keine Programmiersprache und muss deshalb auch keine VARIABLEN verarbeiten können. Aber doch wohl Konstanten, sämtlich Id's und Klassen sind ja auch Konstanten.

        Warum (konstantent)?
        Kannst du das bitte begründen?
        (bzw. wenn du Klassennamen und IDs Konstanten nennst, dann kann das CSS sehr wohl. Schließlich kannst du auf eine definierte Klasse immer verweisen.)

        Grüße
        Thomas

        --
        Surftip: kennen Sie schon Pipolino's Clowntheater?
        http://www.clowntheater-pipolino.net/
      3. Hi,

        Nein, CSS ist keine Programmiersprache und muss deshalb auch keine VARIABLEN verarbeiten können. Aber doch wohl Konstanten,

        nö, wieso?

        sämtlich Id's und Klassen sind ja auch Konstanten.

        Klar doch. Und "#FF0000" ist ebenfalls eine Konstante, die Du exakt so verwenden kannst wie IDs und Klassen: indem Du sie angibst.

        Ja, ich fände ein Konzept von selbstdefinierbaren Platzhaltern in CSS ebenfalls hilfreich. Ein solches Konzept müsste aber erst einmal geschrieben werden - und glaube mir, das ist nicht so leicht, wie es auf den ersten Blick erscheinen mag.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  3. Hi Alex,

    Bis jetzt habe ich mit suchen/ersetzen, das Farbschema jeweils geändert,

    Du kannst ja die Farben getrennt von anderen Angaben notieren. Wobei du immer die Elemente zusammenfasst, denen du die gleiche Farbe geben willst:

    /* Farben */  
    foo, bar, baz {color: #aaa}  
    quz {color: #bbb}  
      
    foo {border-color: #aaa}  
    baz {border-color: #bbb}  
      
    quz {background-color: #aaa}  
    foo, bar {background-color: #bbb}  
      
    /* andere Formatierungen */  
    foo, quz {padding: 1em}
    

    So dürften Änderungen überschaubarer durchführbar sein.

    Live long and prosper,
    Gunnar

    --
    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
  4. Hi,
    machs doch einfach in php.

      
    // farbschema1.php  
    $dunkel = "#36a4af";  
    $mittel = "#B0E0E6";  
    $hell = "#dff2f4";  
    
    

    -------------------------------

      
    // farbschema2.php  
    $dunkel = "#000";  
    $mittel = "#aaa";  
    $hell = "#fff";  
    
    

    -------------------------------

      
    // css.php  
    header("Content-Type: text/css");  
    // auswahl eines farbschemas und einbinden  
    echo ".haupthinter {  
         text-align:center;  
         background-color:$hell;  
         border-color:$dunkel;  
         border-width:0px 0px 2px 0px;  
         border-style:solid;}";  
    
    

    -------------------------------

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

    MfG

    1. Hallo Daniel

      GEIL!!!
      Ich bin überhaupt nicht auf die Idee gekommen, ein php-script mit
       header("Content-Type: text/css");
      die css-Anfrage beantworen zu lassen und hatte stattdessen ein script zur bequemen administrativien Modifikation der css-Dateien durch ein php-script in Arbeit.
      (Das baue ich jetzt trotzdem weiter zur zentralen Farbschemataverwaltung, der css.php's ;))))

      Aber Dein Tipp war äußerst hilfreich für mich.

      Danke

      Alex

      1. Hi,

        GEIL!!!
        Ich bin überhaupt nicht auf die Idee gekommen, ein php-script mit
        header("Content-Type: text/css");
        die css-Anfrage beantworen zu lassen

        wenn Du das so einfach machst, sorgst Du für unnötig Traffic - denke auch ans Datum für den Browsercache.

        freundliche Grüße
        Ingo

  5. Hallo Alex,

    Theoretisch (und in einigen Browsern auch praktisch) kann man zumindest bei eingebetetem CSS so etwas machen:

    <?xml version="1.0" encoding="utf-8" ?>
    <!DOCTYPE html [
      <!ENTITY bla "#ff0000">
    ]>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>test</title>
    <style type="text/css">
      p {color: &bla;}
    </style>
    </head>
    <body>
    <p>asd</p>
    </body>
    </html>

    Praktisch einsetzbar dürfte die Lösung allerdings nicht sein ;-)

    Grüße

    Daniel

    1. <!DOCTYPE html [
        <!ENTITY bla "#ff0000">
      ]>

      Daniel,
      Da fehlt einiges, z.B.

      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" [
        <!ENTITY bla "#ff0000">
      ]>

      Dazu muss das Dokument aber als XML (application/xhtml+xml) verarbeitet werden.

      Live long and prosper,
      Gunnar

      --
      „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
      1. Hallo,

        <!DOCTYPE html
        Da fehlt einiges, z.B.

        Um mal wieder spitzfindig zu sein – es gibt da Leutchen, die an einer HTML-Spezifikation arbeiten, in der steht, das mit text/html versandte Dokumente mit dem minimalen Prolog <!DOCTYPE html> ausgestattet werden müssen. Ist aber nur eine Spitzfindigkeit. ;)

        Tim

      2. Hallo Gunnar,

        Da fehlt einiges, z.B.

        Nun gut, das Dokument ist nicht "strictly conforming" nach der HTML-Spezifikation. Aber da der Namespace angegeben ist, muss ein Browser damit auch klar kommen können. Für Dokumente mit gemischten Namespaces kann und muss man ja auch keine DTD angeben. Mir kam es sowieso auch nicht darauf an, "strictly conforming" HTML zu schreiben, und es war mir zu blöd, die Ids anzugeben. Ein gültiges XML-Dokument ist das ja auch so.

        Dazu muss das Dokument aber als XML (application/xhtml+xml) verarbeitet werden.

        Da bin ich mir gar nicht so sicher. Im SGML-Standard sollte so etwas auch vorgesehen sein. Ich wüsste allerdings auch nicht, welcher Browser das implementiert.

        Grüße

        Daniel

        1. Hi Daniel,

          Aber da der Namespace angegeben ist, muss ein Browser damit auch klar kommen können.

          Was hat der Namensraum damit zu tun?

          Für Dokumente mit gemischten Namespaces kann und muss man ja auch keine DTD angeben.

          http://www.w3.org/TR/XHTMLplusMathMLplusSVG/

          Ein gültiges XML-Dokument ist das ja auch so.

          Nein. Es ist wohlgeformt, aber nicht gültig (valide). Gegen was sollte es denn validiert werden? Ein valides XHTML-Dokument verlangt die Angabe der DTD.

          Live long and prosper,
          Gunnar

          --
          „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
          1. Hallo Gunnar,

            Was hat der Namensraum damit zu tun?

            Der macht für den Browser erkennbar, dass es sich bei den XML-Elementen um solche aus dem HTML-Namensraum handelt und er folglich deren Semantik kennt. Mozilla richtet sich z.B. genau da nach.

            Nein. Es ist wohlgeformt, aber nicht gültig (valide). Gegen was sollte es denn validiert werden?

            Nun, ich bin mir zugegebenermaßen nicht 100%ig sicher, ob die XML-Spec das noch irgendwo einschränkt. Aber im Prinzip ist ein XML-Dokument valide gdw es wohlgeformt ist und die angegebene DTD nicht verletzt. Eine DTD kann auch nur aus dem (bei mir vorhandenen) internal Subset bestehen.
            Davon, dass da eine Element-Declaration für das Root-Element angegeben sein müsste o.ä. steht da nix so weit ich das sehe.
            Demnach wäre das eine valide _XML_-Datei ;-)

            Grüße

            Daniel

            1. Hi Daniel,

              Der [Namensraum] macht für den Browser erkennbar, dass es sich bei den XML-Elementen um solche aus dem HTML-Namensraum handelt und er folglich deren Semantik kennt.

              Aber der Agent kennt mit dem Namensraum nicht die Syntax. Die steht in der DTD (bzw. in einem XML-Schema).

              Und Validität meint korrekte Syntax.

              Eine DTD kann auch nur aus dem (bei mir vorhandenen) internal Subset bestehen.

              In welchem du kein einziges Element angegeben hattest. Deine XML-Datei dürfte, um valide zu sein, also nicht einmal ein Wurzelelement beïnhalten. Was ein Widerspruch ist, denn wenigstens dieses muss vorhanden sein.

              Davon, dass da eine Element-Declaration für das Root-Element angegeben sein müsste o.ä. steht da nix so weit ich das sehe.

              „Ein Element ist gültig, wenn es eine Deklaration gibt […]“ [XML]

              Demnach wäre das eine valide _XML_-Datei ;-)

              Immer noch dieser Meinung? ;-)

              Live long and prosper,
              Gunnar

              --
              „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
              1. Hallo Gunnar,

                Aber der Agent kennt mit dem Namensraum nicht die Syntax.

                Ja, er kennt die Bedeutung der Tags, aber im prinzip nicht, wie sie verschachtelt sein dürfen.
                Das ist bei HTML aber auch irgendwie inkonsistent.
                Einerseits werden (von DTDs nicht unterstüzte) Namesnräume verwendet, andererseits gibt es kein Schema, dass man stattdessen verwenden könnte oder wenn es doch irgendwo eines gibt, so fällt die Verwendendung desselben nicht unter "strictly conforming" was etwas eigenartig ist.

                „Ein Element ist gültig, wenn es eine Deklaration gibt […]“ [XML]

                Ok, den Absatz hab ich gestern abend nicht mehr gefunden. Damit ist die Datei wohl tatsächlich nicht gültig.

                Grüße

                Daniel