Viennamade: Vererbung & Klassen

Liebes Forum!
Ich hab ein CSS das schaut in etwa so aus:

ul.list{...}
ul.list ul{...}
ul.list li a{
 display:block;
 width:140px;
        ...
        }
Bis hier her versteht HTML was ich will.
Nun wollte ich aber zusätzliche a-Elemente auszeichnen, die sollen 200px breit sind und ich habs so probiert:

ul.list li a.1st{
 width:550px;
 }

bzw. <a class="1st" ...> Aber da spielt nur der IE mit (wahrscheinlich ist's ein Bug), Opera und Mozilla ignorieren mich. Wie geht's richtig?
Danke
Viennamade

  1. Hallo,

    Ich hab ein CSS das schaut in etwa so aus:

    ul.list{...}
    ul.list ul{...}
    ul.list li a{
     display:block;
     width:140px;
            ...
            }
    Bis hier her versteht HTML was ich will.
    Nun wollte ich aber zusätzliche a-Elemente auszeichnen, die sollen 200px breit sind und ich habs so probiert:

    ul.list li a.1st{
    width:550px;
    }

    bzw. <a class="1st" ...> Aber da spielt nur der IE mit (wahrscheinlich ist's ein Bug), Opera und Mozilla ignorieren mich. Wie geht's richtig?

    Das ist eigentlich schon vollkommen korrekt so. Allerdings mögen die Browser keine Klassen, deren Bezeichner mit einer Ziffer beginnen. Ändere es also wie folgt:

    ul.list li a.nr1{
      width:550px;
    }
    ...<a class="nr1" ...>

    Dieses Verhalten der Browser ist aber, man möge mich korrigieren, durch keinerlei Vorschrift begründet. Das Attribut class hat nämlich Inhalt vom Typ CDATA http://www.w3.org/TR/html4/struct/global.html#h-7.5.2 und für diesen Datentyp gibt es eine solche Beschränkung nicht http://www.w3.org/TR/html4/types.html#type-cdata. Die Beschränkung existiert für den Datentyp NAME http://www.w3.org/TR/html4/types.html#type-name, also eigentlich nur für ID-Attribute.

    viele Grüße

    Axel

    1. Hallo,

      Dieses Verhalten der Browser ist aber, man möge mich korrigieren, durch keinerlei Vorschrift begründet. Das Attribut class hat nämlich Inhalt vom Typ CDATA http://www.w3.org/TR/html4/struct/global.html#h-7.5.2 und für diesen Datentyp gibt es eine solche Beschränkung nicht http://www.w3.org/TR/html4/types.html#type-cdata. Die Beschränkung existiert für den Datentyp NAME http://www.w3.org/TR/html4/types.html#type-name, also eigentlich nur für ID-Attribute.

      Du zitierst hier die HTML-4-Specification.

      Es geht aber um CSS.

      <zitat src="http://www.w3.org/TR/REC-CSS2/syndata.html#q4">
      In CSS2, identifiers (including element names, classes, and IDs in selectors) can contain only the characters [A-Za-z0-9] and ISO 10646 characters 161 and higher, plus the hyphen (-); they cannot start with a hyphen or a digit.
      </zitat>

      IMHO verhalten sich also die Browser korrekt, wenn sie
      bei der Anwendung von CSS die Klassennamen, die mit
      Zahlen beginnen, ignorieren.

      Gruesse,

      Thomas

      1. Hallo Thomas,

        Du zitierst hier die HTML-4-Specification.

        Es geht aber um CSS.

        Ja, da hatte ich auch gesucht, allerdings nichts gefunden. Andererseits sollte man bei w3 dann die HTML-Spezifikation auch mal überdenken. Was für einen Sinn hat es, im HTML, welches die Klasse _definiert_, im Attribut class locker CDATA zu erlauben und im CSS, welches das HTML-Attribut ja eigentlich nur als Selector _nutzt_, dann einzuschränken?

        http://www.w3.org/TR/REC-CSS2/syndata.html#q4
        IMHO verhalten sich also die Browser korrekt, wenn sie
        bei der Anwendung von CSS die Klassennamen, die mit
        Zahlen beginnen, ignorieren.

        Ja, danke, das hatte ich nicht gefunden.

        viele Grüße

        Axel

        1. Hi,

          Ja, da hatte ich auch gesucht, allerdings nichts gefunden. Andererseits sollte man bei w3 dann die HTML-Spezifikation auch mal überdenken. Was für einen Sinn hat es, im HTML, welches die Klasse _definiert_, im Attribut class locker CDATA zu erlauben und im CSS, welches das HTML-Attribut ja eigentlich nur als Selector _nutzt_, dann einzuschränken?

          Das Problem ist, daß eine DTD nur sehr eingeschränkte Möglichkeiten bietet, Attributwerte einzuschränken.
          Das class-Attribut enthält nicht einen Klassennamen, sondern eine Liste von Klassennamen.

          Welche Datentypen funktionieren also nicht?

          ID: kann nur einen Wert enthalten + ID darf nur für EIN Attribut pro Element genutzt werden, ist schon das id-Attribut.
          IDREF: kann nur einen Wert enthalten + darf nur Wert enthalten, der im Dokument als ID benutzt wird.
          IDREFS: darf nur Werte enthalten, die im Dokument auch als ID benutzt werden.
          NMTOKEN: darf nur einen Wert enthalten + erlaubt auch . und - und  _ und : als erstes Zeichen
          NMTOKENS: erlaubt auch . und - und  _ und : als erstes Zeichen
          NOTATION: erlaubt auch _ und : als erstes Zeichen + nur einen Wert
          ENTITY: erlaubt auch _ und : als erstes Zeichen + nur einen Wert
          ENTITIES: erlaubt auch _ und : als erstes Zeichen
          Enumeration: kann nur einen Wert haben, ist auch nicht flexibel genug

          Bleiben noch andere Datentypen übrig außer CDATA?
          Ich wüßte keinen.

          Außerdem: auch wenn CSS in sehr vielen Fällen für HTML benutzt wird: CSS ist für beliebige andere Sprachen nutzbar.

          cu,
          Andreas

          --
          Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
          http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
  2. Hi,

    ul.list li a.1st{

    CSS-Klassennamen dürfen nicht mit einer Ziffer beginnen.

    bzw. <a class="1st" ...> Aber da spielt nur der IE mit (wahrscheinlich ist's ein Bug), Opera und Mozilla ignorieren mich.

    IE hat da tatsächlich einen Bug.
    Opera und Mozilla erkennen den nicht-korrekten Klassennamen, also ignorieren sie standardkonform den kompletten Regelsatz.

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
  3. Danke Axel & Andreas! (Klassennamen dürfen nicht mit Ziffern beginnen.)
    Viennamade