Attributbedingte Selektoren - Workaround für IE?
Stefan Kremer
- css
Hallo,
bekanntermassen unterstützt IE ja keine attributbedingten Selektoren. Nun habe ich aber genau so einen Anwendungsfall, wo ich lediglich mit einem solchen Selektor arbeiten kann.
Konkret: es geht um einen einzelnen Menüeintrag, der optisch hervorgehoben werden soll. Das Menü wird in TYPO3 automatisch erzeugt, die Bereitstellung einer einzelnen Klasse für diesen Menüpunkt wäre also entsprechend umfänglich (wenn alle Stricke reissen, wird's allerdings darauf hinauslaufen).
In standardkonformen Browsern gelingt es mir diesen einzelnen Menüpunkt per CSS-Anweisung a[ href=linkname] anzusprechen. Was ich nun suche, wäre ein Möglichkeit das für den IE zugänglich zu machen. Meine ersten Überlegungen zielen auf JavaScript, bzw. auf die Möglichkeit JS per behavior einzubinden.
Wenn ich http://www.xs4all.nl/~peterned/csshover.html aber richtig verstehe wird das nicht ganz einfach, weil entgegen dem :hover der Selektor nur als "unknown" rückgemeldet wird - korrekt?
Weiters: da ich absolut nicht der Crack in JS bin, wäre ich an etwas Hilfe diesbezüglich interessiert. Ich habe bereits unter http://disneyworld.disney.go.com/wdw/common/javascript/getElementsBySelector ein Script gefunden, das den Kommentierungen nach auf etwas ähnliches abzielt, aber da die Attribut-Selektoren nicht ausdrücklich erwähnt sind, stehe ich da noch vor einem Rätsel, ob mir das Teil weiterhilft.
Bevor ein falscher Eindruck entsteht: Ich bin weiß Gott kein großer Freund von IE. Aber solange es Marktrealitäten gibt mag ich mich mit der gängigen Antwort "das kann der IE nicht, nimm einen richtigen Browser" einfach nicht abfinden.
Gruß Stefan
Hi,
bekanntermassen unterstützt IE ja keine attributbedingten Selektoren.
bis auf den Klassenselektor, und auch den nur gemäß CSS/1.0 (lies: nur eine Klasse pro Element).
Konkret: es geht um einen einzelnen Menüeintrag, der optisch hervorgehoben werden soll. Das Menü wird in TYPO3 automatisch erzeugt, die Bereitstellung einer einzelnen Klasse für diesen Menüpunkt wäre also entsprechend umfänglich (wenn alle Stricke reissen, wird's allerdings darauf hinauslaufen).
Wenn man auch den IE mit einem bestimmten Effekt versorgen will, läuft es in der Tat üblicherweise darauf hinaus, irgend welche Klassen in den Code zu zimmern.
Meine ersten Überlegungen zielen auf JavaScript, bzw. auf die Möglichkeit JS per behavior einzubinden.
Dir ist klar, dass viele IE-User dann den Effekt nicht sehen werden? Wenn Du Dich hiermit abfinden kannst, solltest Du Dich vielleicht mit den IE7-Stylesheets von Dean Edwards beschäftigen.
Bevor ein falscher Eindruck entsteht: Ich bin weiß Gott kein großer Freund von IE. Aber solange es Marktrealitäten gibt mag ich mich mit der gängigen Antwort "das kann der IE nicht, nimm einen richtigen Browser" einfach nicht abfinden.
Wie wäre es mit "ignoriere, dass ein einzelner Browser mit einem speziellen Effekt nicht versorgt werden kann"? Du musst eh Abstriche machen, und auf eine CSS-Angabe kann per definitionem verzichtet werden: CSS ist optional.
Cheatah
Moin,
Dir ist klar, dass viele IE-User dann den Effekt nicht sehen werden? Wenn Du Dich hiermit abfinden kannst, solltest Du Dich vielleicht mit den IE7-Stylesheets von Dean Edwards beschäftigen.
thx für den Link - schau ich mir mal in Ruhe an
Wie wäre es mit "ignoriere, dass ein einzelner Browser mit einem speziellen Effekt nicht versorgt werden kann"?
Ich kann das locker (na ja, fast). Aber versuch das einem Kunden zu erklären der ausschliesslich mit dem IE in die Welt rausschaut :-o.
Gruß Stefan
Hi,
Ich kann das locker (na ja, fast). Aber versuch das einem Kunden zu erklären der ausschliesslich mit dem IE in die Welt rausschaut :-o.
sag ihm, ob er auch annimmt, für einen 1928er Ford noch passende Tankstellen zu finden. Sag ihm anschließend, dass er diese bei Dir bekommt - der Treibstoff hat nur halt nicht die selbe Qualität wie der für solche Wagen, die nach dem zweiten Weltkrieg gebaut wurden.
Cheatah
Moin,
sag ihm, ob er auch annimmt, für einen 1928er Ford noch passende Tankstellen zu finden. Sag ihm anschließend, dass er diese bei Dir bekommt - der Treibstoff hat nur halt nicht die selbe Qualität wie der für solche Wagen, die nach dem zweiten Weltkrieg gebaut wurden.
Hmm, der Verbreitungsgrad von IE6 dürfte nach einer ersten groben Schätzung doch noch etwas über dem von 1928er Fords liegen.
Schlimmer noch: mein Kunde rüstet Motoren für Rapsöleinsatz um - mit der Analogie brauch ich ihm gar nicht kommen. ;-)
Spaß beiseite - ich hab mir mal die erwähnten Scripts von Dean Edwards angeschaut. Alles was ich verstehe ist: IE7 wird das wohl können, IE6 braucht Scripts, die aber (hier kommt volle Breitseite meine Verständnislücke von JS :-/)offenbar nicht über den Attributselektor getriggert werden (können?).
Gruß Stefan
Hi,
Hmm, der Verbreitungsgrad von IE6 dürfte nach einer ersten groben Schätzung doch noch etwas über dem von 1928er Fords liegen.
das kommt darauf an, wie nah der lokale Oldtimer-Club ist.
Schlimmer noch: mein Kunde rüstet Motoren für Rapsöleinsatz um - mit der Analogie brauch ich ihm gar nicht kommen. ;-)
Doch dann wird er die Analogie nämlich um so besser verstehen. Du kannst sie auch gerne auf eine andere Ebene heben, indem Du von verbleitem Sprit redest.
Spaß beiseite - ich hab mir mal die erwähnten Scripts von Dean Edwards angeschaut. Alles was ich verstehe ist: IE7 wird das wohl können,
Der IE 7 wird nach meinem Kenntnisstand keine Attributselektoren beherrschen.
IE6 braucht Scripts, die aber (hier kommt volle Breitseite meine Verständnislücke von JS :-/)offenbar nicht über den Attributselektor getriggert werden (können?).
Die Scripts von Dean Edwards verarbeiten den CSS-Code der Seiten, so dass ein IE 6 CSS sogar besser beherrscht, als jeder andere mir bekannte Browser. Selbst :nth-child() wird unterstützt. Aber: Es erfordert halt JavaScript.
Cheatah
hi,
Hmm, der Verbreitungsgrad von IE6 dürfte nach einer ersten groben Schätzung doch noch etwas über dem von 1928er Fords liegen.
Ihm heute noch einzusetzen, muss ähnliche Gründe haben wie das Fahren eines solchen Oldtimers: Man möchte ab und zu daran erinnert werden, wie sehr sich die Technik doch weiterentwickelt hat.
Schlimmer noch: mein Kunde rüstet Motoren für Rapsöleinsatz um - mit der Analogie brauch ich ihm gar nicht kommen. ;-)
Und trotzdem benutzt er für's Web noch immer so einen stinkenden, rußenden und die Umwelt verpestenden Motor?
scnr,
wahsaga
Hi,
bekanntermassen unterstützt IE ja keine attributbedingten Selektoren.
bis auf den Klassenselektor, und auch den nur gemäß CSS/1.0 (lies: nur eine Klasse pro Element).
Wobei ich nicht wirklich verstehe, wieso der class-Selektor bei den "Attribute selectors" eingeordnet ist, der id-Selektor aber nicht.
Insbesondere wo der Abschnitt über den id-Selektor mit den Worten
"Document languages may contain attributes that are declared to be of type ID."
beginnt und auch im weiteren Text immer wieder vom Attribut id geschrieben wird.
Nur wegen "ID selectors have a higher specificity than attribute selectors." kann es ja kaum sein, denn das hätte man durch minimale Umformulierung zu "ID selectors have a higher specificity than _the other_ attribute selectors." regeln können.
cu,
Andreas
Hi,
Wobei ich nicht wirklich verstehe, wieso der class-Selektor bei den "Attribute selectors" eingeordnet ist, der id-Selektor aber nicht.
wegen der Spezifität und der Eindeutigkeit des Elements, würde ich sagen.
Nur wegen "ID selectors have a higher specificity than attribute selectors." kann es ja kaum sein, denn das hätte man durch minimale Umformulierung zu "ID selectors have a higher specificity than _the other_ attribute selectors." regeln können.
Hätte man. Ich sehe in ID-Selektoren aber eine völlig andere Bedeutung als in Attributselektoren - und auch eine völlig andere Implementierungsaufgabe.
Cheatah
Hallo Cheatah,
der IE unterstüzt nur eine Klasse pro Element?
Da verstehe ich jetzt bestimmt etwas nicht ...
denn <p class="klasse1 klasse2"</p>
wird ja akzeptiert.
Liebe Grüße Bernd
Hi,
der IE unterstüzt nur eine Klasse pro Element?
bei CSS schon.
Da verstehe ich jetzt bestimmt etwas nicht ...
denn <p class="klasse1 klasse2"</p>
wird ja akzeptiert.
Ja, und
p.dieseKlasseIstNichtDa.klasse1
selektiert das Element.
Cheatah
Danke für den Hinweis,
muß ich mir mal an kleinen Dummy's anschauen.
Glaube ich habe es aber kapiert.
Danke.
Bernd
Hi,
der IE unterstüzt nur eine Klasse pro Element?
bei CSS schon.
Da verstehe ich jetzt bestimmt etwas nicht ...
denn <p class="klasse1 klasse2"</p>
wird ja akzeptiert.Ja, und
p.dieseKlasseIstNichtDa.klasse1
selektiert das Element.
ich will das nur mal für Dummys wie mich etwas ausführlicher formulieren.
Der IE Win ab Version 5 aufwärts versteht mehrere Klassenzuweisungen.
Also um bei dem Beispiel zu bleiben:
HTML
<p class="klasse1 klasse2">
und CSS
.klasse1 {...}
.klasse2 {...}
In diesem Fall wendet er alle angegebenen Regeln auf das Element an.
Was der IE nicht versteht ist:
CSS
.klasse1.klasse2 {...}
.klasse2.klasse1 {...}
In diesem Fall dürften die Regeln aus .klasse1.klasse2, bzw. .klasse2.klasse1 (Reihenfolge ist egal) ja nur auf Elemente angewendet werden, die_beide_Klassen enthalten.
Der IE wendet aber in diesem Fall nur die Klasse an, die als letzte in der Reihe der Selektoren steht (die Reihenfolge im HTML ist dagegen egal), unabhängig davon, ob das HTML Element die anderen Klassen überhaupt zugewiesen bekommen hat.
Gruß Gunther