Vererbung & Klassen
Viennamade
- css
0 Axel Richter0 MudGuard0 Viennamade
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
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
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
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
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
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
Danke Axel & Andreas! (Klassennamen dürfen nicht mit Ziffern beginnen.)
Viennamade