Klammern in css namen
T-Rex
- css
Hoi Leute,
wollte nur mal schnell fragen ob die Validatoren Klammern in CSS Namen aktzeptieren?
also z.B. sowas class='test()'
Danke
Gruß T-Rex
Hi,
wollte nur mal schnell fragen ob die Validatoren Klammern in CSS Namen aktzeptieren?
also z.B. sowas class='test()'
das class-Attribut ist Teil von HTML und hat exakt gar nichts mit CSS zu tun. Die Antwort lautet: Ja, die Klammern sind valide. Der Zusatz lautet: Sie sind aber nicht empfehlenswert, weil HTML-Klassen von vielerlei Systemen und Techniken verwendet werden, die potenziell Probleme damit haben können.
Cheatah
Hi Cheatah
In wie weit kann es Probleme geben? Kannst du da ein wenig konkreter werden?
Danke
T-Rex
Hellihello
In wie weit kann es Probleme geben? Kannst du da ein wenig konkreter werden?
Vielleicht hat es der ein oder andere Browser doch nicht im Spektrum? Oder kapiert das nicht beim Umsetzen des Stylesheets?
Valide ist es, weil beim w3c der Inhalt als CDATA klassifziert ist http://www.w3.org/TR/REC-html40/struct/global.html#h-7.5.2
Dank und Gruß,
Hi,
In wie weit kann es Probleme geben? Kannst du da ein wenig konkreter werden?
Vielleicht hat es der ein oder andere Browser doch nicht im Spektrum? Oder kapiert das nicht beim Umsetzen des Stylesheets?
oder er stolpert beim Auswerten als className-Eigenschaft, oder ein Suchmaschinen-Bot versagt bei dem Versuch, den Bezeichner in seinen Index zu übernehmen, oder ...
Cheatah
Hi,
In wie weit kann es Probleme geben? Kannst du da ein wenig konkreter werden?
Vielleicht hat es der ein oder andere Browser doch nicht im Spektrum? Oder kapiert das nicht beim Umsetzen des Stylesheets?oder er stolpert beim Auswerten als className-Eigenschaft, oder ein Suchmaschinen-Bot versagt bei dem Versuch, den Bezeichner in seinen Index zu übernehmen, oder ...
Cheatah
Also mit anderen Worte:
man darf sich nicht darauf verlassen, dass die css Klasse geladen wird?
wie sieht es mit folgendem Beispiel aus:
class='red_text test()'
kann man davon ausgehen, dass red_text geladen wird?
Gruß
T-Rex
Hi,
man darf sich nicht darauf verlassen, dass die css Klasse geladen wird?
es gibt keine CSS-Klassen. Es sind *HTML*-Klassen. Mache Dir dies bewusst.
wie sieht es mit folgendem Beispiel aus:
class='red_text test()'
Dasselbe Problem, ergänzt durch ein Zusatzproblem mit antiker Software, ergänzt durch das Problem eines grottenschlechten Bezeichners. Was hat "red_text" mit HTML zu tun?
kann man davon ausgehen, dass red_text geladen wird?
Geladen? Nein. Ich wüsste jetzt nichts, was wegen einer HTML-Klasse irgendwas laden würde. Ausgeschlossen ist es natürlich nicht - beziehst Du Dich auf eine spezielle Software?
Cheatah
Hi,
man darf sich nicht darauf verlassen, dass die css Klasse geladen wird?
es gibt keine CSS-Klassen. Es sind *HTML*-Klassen. Mache Dir dies bewusst.
wie sieht es mit folgendem Beispiel aus:
class='red_text test()'Dasselbe Problem, ergänzt durch ein Zusatzproblem mit antiker Software, ergänzt durch das Problem eines grottenschlechten Bezeichners. Was hat "red_text" mit HTML zu tun?
kann man davon ausgehen, dass red_text geladen wird?
Geladen? Nein. Ich wüsste jetzt nichts, was wegen einer HTML-Klasse irgendwas laden würde. Ausgeschlossen ist es natürlich nicht - beziehst Du Dich auf eine spezielle Software?
Cheatah
Hi
nö keine spezielle Software.
Ich möchte einen Text oder ein Inputfeld oder sonst irgendwas mit css stylen und die einfache Frage ist, ob die Klasse "red_text" geladen(oder angezeigt oder was auch immer) wird, wenn dahinter die "unsichere" Klasse test() steht.
<div class='red_text test()'>roter Text</div>
"roter Text" soll einfach rot sein.
Gruß
T-Rex
Hallo T-Rex,
<div class='red_text test()'>roter Text</div>
"roter Text" soll einfach rot sein.
und wenn der Kunde den Text demnächst lieber blau haben will? Benennst du dann die Klasse um?
Gruß aus Köln-Ehrenfeld,
Elya
Hallo T-Rex,
<div class='red_text test()'>roter Text</div>
"roter Text" soll einfach rot sein.
und wenn der Kunde den Text demnächst lieber blau haben will? Benennst du dann die Klasse um?
Gruß aus Köln-Ehrenfeld,
Elya
Hi Elya
In meinem Beispiel gibts keinen Kunden. Es gibt nur ein div und zwei Klassen und die Frage ob der Text trotzdem rot wird obwohl eine "unsichere" Klasse dahinter steht!
Wenn "nein" wäre die nächste Frage wieso der Text nicht rot wird und ob es an "test()" liegt.
Gruß
T-Rex
In meinem Beispiel gibts keinen Kunden. Es gibt nur ein div und zwei Klassen und die Frage ob der Text trotzdem rot wird obwohl eine "unsichere" Klasse dahinter steht!
es gibt kein div und 2 klassen, es gibt ein div-element mit einem class-attribut, welches den wert "red_text test()" enthält
dass ein leerzeichen in einem attribut mit dem namen "class" in css als klasse interpretiert wird, ist eine völlig andere geschichte
genausogut könntest du <div irgendeineerfindung="red_text text()" /> schreiben (sofern das die dtd zulässt) und diese in css mittels dem attribut-selektor ansprechen
Du kannst es meinet wegen auch Div-Wurschtfinger nennen, dass ist mir "Wurscht" :D.
Ich denke das Beispiel ist eindeutig und die Fragestellung auch. In wie weit ich Fachbegriffe benutze oder nicht ist mir egal. Und wenn sich dem einen oder anderen der Gedanke aufdrängt das ich ein Trottel bin weil ich nicht div-Element sage sondern einfach nur div, dann kann er mir gerne eine mail schicken über seine Gedanken (bitte mit "spam" kennzeichnen ;).
Cheatah hat ja schon gesagt dass es im Validator keine Probleme gibt da er das ganze als cdata interpretiert. Jedoch (und das macht mir Angst und ich harke nach) meinte er/sie auch dass es zu eventuellen Problemen führen kann.
In wie weit andere Programme außer den Browsern drauf reagieren ist mir relativ "Wurscht".
Wichtig ist nur, dass neben der künstlichen Klasse "test()" vor allem die Klasse red_text richtig dargestellt wird.
Danke :)
Gruß T-Rex
Ps. Rechtschreibfehler und nicht fachgerechte Ausdrücke sind mein persönliches geistiges Eigentum!
nicht div-Element sage sondern einfach nur div
um das gings nicht - es geht um die unterscheidung zwischen klassen im sinne von css und um html, welches ein attribut kennt, welches zufällt "class" heisst und einen völlig "beliebigen" wert enthalten darf
Cheatah hat ja schon gesagt dass es im Validator keine Probleme gibt da er das ganze als cdata interpretiert. Jedoch (und das macht mir Angst und ich harke nach) meinte er/sie auch dass es zu eventuellen Problemen führen kann.
ja, weil je nach verarbeitungssystem "irgendwas" nicht erlaubt ist
du kannst problemlos <div class="123"> oder <div class="-foo"> schreiben, das ist valide und führt in html zu keinerlei problemen (da sich das class-attribut einen scheiss interessiert, was in css vorsich geht)- in css wirst du damit aber schwierigkeiten haben, da die auswertung des class-attributs zu css klassen führt, die eben so nicht sein dürfen
Wichtig ist nur, dass neben der künstlichen Klasse "test()" vor allem die Klasse red_text richtig dargestellt wird.
obs richtig dargestellt wird oder nicht spielt keine rolle, in html-kontext ist diese schreibweise völlig in ordnung, in css ist sie ein fehler - PUNKT
Yerf!
du kannst problemlos <div class="123"> oder <div class="-foo"> schreiben, das ist valide und führt in html zu keinerlei problemen (da sich das class-attribut einen scheiss interessiert, was in css vorsich geht)- in css wirst du damit aber schwierigkeiten haben, da die auswertung des class-attributs zu css klassen führt, die eben so nicht sein dürfen
Laut dem verlinkten Dokument ist das doch möglich und erlaubt? Man muss im CSS-Selektor nur entsprechend Escapen, aber das sollte doch selbstverständlich sein...
<div class="123">
.\31 23 { }
<div class="-foo">
.\-foo { }
Gruß,
Harlequin
Man muss im CSS-Selektor nur entsprechend Escapen, aber das sollte doch selbstverständlich sein...
das ist denke ich das was cheatah angesprochen hat: es kann je nach system zu problemen führen (er bzeichnet das als stolpern)
lt. spezifikation sind css-selektoren auch case-sensitive
.Warning und .warning sind nicht ident - wenn ich das richtig im kopf hab, nimmt das der ie6 aber nicht so genau
und insbesondere das das escapezeichen wird in vielen css-hacks als mittel zum zweck verwendet - verlassen sollte man sich darauf eben nicht
spontan fällt mir dieser hack ein:
w\idth: 100px;
Yerf!
und insbesondere das das escapezeichen wird in vielen css-hacks als mittel zum zweck verwendet - verlassen sollte man sich darauf eben nicht
Fehlerhafte CSS-Implementierungen sind ein Problem, aber nicht von CSS selbst. Ich könnte mir auch vorstellen, das manche JS-Scripte über solche Klassen stolpern.
Allerdings klangen deine Ausführungen so, als würde die CSS-Spec das nicht erlauben, was so nicht richtig ist.
Gruß,
Harlequin
Allerdings klangen deine Ausführungen so, als würde die CSS-Spec das nicht erlauben, was so nicht richtig ist.
das stimmt natürlich, da hab' ich mich unklar ausgedrückt :)
dennoch bin ich der meinung, dass man bei der benennung von bezeichnern sogut wie möglich vermeiden sollte, viel herumzuescapen
schlichte namen, buchstaben und zahlen
was bringt es mir, wenn ein bezeichner bzw eine klasse "warnung(123)" heisst, wenn ich doch "warnung-123" auch schreiben kann
wenn ich für diesen bezeichner dann noch ein bild brauche, welches zb warnung(123).png heisst, muss ich an allen ecken und enden escapen
ich würde das eben aus purer faulheit/übersichtlichkeit schon nicht machen bzw um flüchtigkeitsfehler zu vermeiden
alles kleinschreiben (man weiss nie ob etwas case-sensitive ist oder nicht), keine sonderzeichen, usw
Hi,
Man muss im CSS-Selektor nur entsprechend Escapen, aber das sollte doch selbstverständlich sein...
das ist denke ich das was cheatah angesprochen hat: es kann je nach system zu problemen führen (er bzeichnet das als stolpern)
jein, an der Stelle meinte ich eigentlich JavaScript-Implementierungen. Aber nur, weil die CSS-Implementierungen schon genannt worden waren ;-)
Cheatah
Hi,
es gibt kein div und 2 klassen, es gibt ein div-element mit einem class-attribut, welches den wert "red_text test()" enthält
mit anderen Worten: ein <div> mit zwei Klassen.
dass ein leerzeichen in einem attribut mit dem namen "class" in css als klasse interpretiert wird, ist eine völlig andere geschichte
Es wird in HTML als Klasse angesehen. Nur dass HTML die daraus resultierenden Erkenntnisse nicht nutzt.
Cheatah
Es wird in HTML als Klasse angesehen. Nur dass HTML die daraus resultierenden Erkenntnisse nicht nutzt.
es stellt keine gültige css-klasse dar - somit keine klasse im css-kontext
"The class attribute, on the other hand, assigns one or more class names to an element; the element may be said to belong to these classes."
dem element werten klassennamen zugewiesen, keine klassen ansich - und der letzte satz: "mann kann sagen, dass sie diesen klassen angehören", dass sie es tatsächlich tun, steht eben nicht da :)
Hi,
es stellt keine gültige css-klasse dar - somit keine klasse im css-kontext
es gibt keine CSS-Klasse, und ein gültiger CSS-Selektor lässt sich ohne Weiteres formulieren.
dem element werten klassennamen zugewiesen, keine klassen ansich
Touché.
Cheatah
Mahlzeit T-Rex,
In meinem Beispiel gibts keinen Kunden. Es gibt nur ein div und zwei Klassen und die Frage ob der Text trotzdem rot wird obwohl eine "unsichere" Klasse dahinter steht!
Wieso probierst Du es nicht einfach aus? Wo ist das Problem, ein entsprechend abgespecktes Beispiel zusammenzuschustern, zwei entsprechende Klassendefinitionen in CSS anzulegen und einfach mal auszuprobieren, was die verschiedenen Browser daraus machen?
MfG,
EKKi
Hi EKKi,
ein guter Vorschlag :).
Das mache ich ja schon die ganze Zeit, dennoch interessiert mich das Thema über den Tellerrand hinaus. Eventuell gibts es Fehler auf einem Gebiet was ich nicht beachte.
Ich wollte z.B. mal ein neues Attribut einführen <div test="irgendwas"></div>. die Browser haben damit kein Problem aber der Validator schon und was Google & Co. so treiben mag ich gar nicht dran denken.
Deshalb denke ich mir, frag ich mal die Profies im Profieforum :).
Gruß
T-Rex
Ich wollte z.B. mal ein neues Attribut einführen <div test="irgendwas"></div>.
neue attribute einzuführen solltest du dem w3c oder den browserherstellern überlassen :)
die Browser haben damit kein Problem aber der Validator schon und was Google & Co. so treiben mag ich gar nicht dran denken.
google & co ist das sicher "scheissegal" da sich die wenigsten webautoren um standards kümmern, bei invalidem code darfst du allerdings keinesfalls von korrekter darstellung ausgehen
Hi,
In meinem Beispiel gibts keinen Kunden. Es gibt nur ein div und zwei Klassen und die Frage ob der Text trotzdem rot wird obwohl eine "unsichere" Klasse dahinter steht!
verwende Bezeichner, die im Sinne von HTML sind. Jedwede darstellerische Information ist somit außen vor. Bevor dies nicht gegeben ist, ist auch Deine Frage irrelevant.
Übrigens schließe ich mich dem allgemeinen Ruf an: Was willst Du eigentlich mit der Klasse test()?
Cheatah
habe d'ehre
also z.B. sowas class='test()'
mich würde mal Dein Ansinnen für test() interessieren.
Wilhelm
Hi,
wollte nur mal schnell fragen ob die Validatoren Klammern in CSS Namen aktzeptieren?
also z.B. sowas class='test()'
Zur HTML-Seite des Themas ist ja mittlerweile alles gesagt.
Für CSS-Syntax gilt (nur relevantes zitiert, in abgeänderter Reihenfolge):
class
: '.' IDENT
;
ident -?{nmstart}{nmchar}*
nmstart [_a-z]|{nonascii}|{escape}
nmchar [_a-z0-9-]|{nonascii}|{escape}
Da () weder in [_a-z] noch in [_a-z0-9-] enthalten sind und auch keine ASCII-Zeichen sind, kann im CSS für den Class-Selector also nicht
.test()
stehen, die Klammern müssen entsprechend escaped werden.
Näheres dazu: http://www.w3.org/TR/CSS21/grammar.html
Auch von mir die Frage: warum willst Du derartige Klassennamen benutzen?
cu,
Andreas
Hallo Andreas.
Da () weder in [_a-z] noch in [_a-z0-9-] enthalten sind und auch keine ASCII-Zeichen sind, kann im CSS für den Class-Selector also nicht
.test()
stehen
Aber sicher doch sind "(" und ")" ASCII-Zeichen.
Schöne Grüße
stefan
Hi,
Aber sicher doch sind "(" und ")" ASCII-Zeichen.
ich kaufe ein non
cu,
Andreas
Hallo.
Aber sicher doch sind "(" und ")" ASCII-Zeichen.
ich kaufe ein non
Versteh ich jetzt nicht, das non für Dich oder für mich?
Hex28 und Hex29
|
v
␣!"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_
`abcdefghijklmnopqrstuvwxyz{|}~
Quelle: wikipedia
Wie auch immer ...
Schönen Gruß
stefan