Es ist nicht machbar mit CSS2.1, aber es ist möglich , mit CSS3 Attributstring-matching Selektoren (das ist in IE7 + unterstützt):
div[class^="status-"], div[class*=" status-"]
Beachten Sie das Leerzeichen in der zweiten Attributauswahl. Dies nimmt div
Elemente auf, deren class
Attribut eine der folgenden Bedingungen erfüllt:
[class^="status-"]
- beginnt mit "status-"
[class*=" status-"]
- enthält die Teilzeichenfolge "status-", die direkt nach einem Leerzeichen steht. Klassennamen werden gemäß der HTML-Spezifikation durch Leerzeichen getrennt , daher das signifikante Leerzeichen. Dies überprüft alle anderen Klassen nach der ersten, wenn mehrere Klassen angegeben sind, und fügt einen Bonus hinzu, wenn die erste Klasse überprüft wird, falls der Attributwert mit Leerzeichen aufgefüllt ist (was bei einigen Anwendungen vorkommen kann, die class
Attribute dynamisch ausgeben ).
Dies funktioniert natürlich auch in jQuery, wie hier gezeigt .
Der Grund, warum Sie zwei Attributselektoren wie oben beschrieben kombinieren müssen, liegt darin, dass ein Attributselektor wie [class*="status-"]
der mit dem folgenden Element übereinstimmt, was unerwünscht sein kann:
<div id='D' class='foo-class foo-status-bar bar-class'></div>
Wenn Sie sicherstellen können, dass ein solches Szenario niemals eintritt, können Sie der Einfachheit halber einen solchen Selektor verwenden. Die obige Kombination ist jedoch viel robuster.
Wenn Sie die Kontrolle über die HTML-Quelle oder die Anwendung haben, die das Markup generiert, ist es möglicherweise einfacher, das status-
Präfix status
stattdessen zu einer eigenen Klasse zu machen, wie Gumbo vorschlägt .
status-
und diese nicht anpassen möchten, wird die Auswahl noch komplizierter:div[class^="status-"]:not(.status-), div[class*=" status-"]:not(.status-)
Außerdem verlieren Sie die IE7 / IE8-Unterstützung. Zum Glück müssen Sie eine solche Klasse nicht ausschließen, wenn Ihr Markup vernünftig ist.[class*=" anim-overlay-"] a:hover:after{...}
. Meine CSS-Klassen sindanim-overlay-1
,anim-overlay-2
.....anim-overlay-8
.anim-overlay-*{...}
?Mit CSS-Attributselektoren können Sie Attribute für eine Zeichenfolge überprüfen. (in diesem Fall - ein Klassenname)
https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors
(sieht so aus, als ob es tatsächlich den Empfehlungsstatus für 2.1 und 3 hat)
Hier ist ein Überblick darüber, wie ich denke, dass es funktioniert:
[ ]
: ist der Container für komplexe Selektoren, wenn Sie so wollen ...class
: 'class' ist das Attribut, das Sie in diesem Fall betrachten.*
: Modifikator (falls vorhanden): In diesem Fall zeigt "Platzhalter" an, dass Sie nach einer Übereinstimmung suchen.test-
: der Wert (vorausgesetzt, es gibt einen) des Attributs - der die Zeichenfolge "test-" enthält (was alles sein kann)Also zum Beispiel:
Sie könnten genauer sein, wenn Sie einen guten Grund haben, auch mit dem Element
ul[class*='test-'] > li { ... }
Ich habe versucht, Randfälle zu finden, aber ich sehe keine Notwendigkeit, eine Kombination von
^
und zu verwenden*
- da * alles bekommt ...Beispiel: http://codepen.io/sheriffderek/pen/MaaBwp
http://caniuse.com/#feat=css-sel2
Alles über IE6 wird gerne gehorchen. :)
beachten Sie, dass:
[class] { ... }
Wählt irgendetwas mit einer Klasse aus ...
quelle
[class*='test-']
passt zu Elementen wie<div class='foo-test-bar'>
. Dies ist der Fall mit einer Kante, bei dem ^ und * kombiniert werden müssen, wie in meiner Antwort beschrieben. Und IE6 unterstützt keine Attributselektoren.Dies ist mit CSS-Selektoren nicht möglich. Sie können jedoch zwei Klassen anstelle einer verwenden, z. B. status und wichtig anstelle von status wichtig .
quelle
Das kannst du nicht machen, nein. Es gibt einen Attributselektor , der bis zum a - Zeichen genau oder teilweise übereinstimmt, aber hier würde er nicht funktionieren, da Sie mehrere Attribute haben. Wenn der gesuchte Klassenname immer an erster Stelle steht, können Sie Folgendes tun:
Beachten Sie, dass dies nur darauf hinweist, welcher CSS-Attributselektor am nächsten ist. Es wird nicht empfohlen anzunehmen, dass Klassennamen immer im Vordergrund stehen, da Javascript das Attribut manipulieren könnte.
quelle