DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!
Es gibt viele Möglichkeiten, Elemente in CSS auszuwählen. Die grundlegendste Auswahl erfolgt nach Tag-Namen, wie p { }. Fast alles Spezifischere als ein Tag-Selektor verwendet Attribute – Klasse und ID wählen beide auf diesen Attributen von HTML-Elementen aus. Aber Klasse und ID sind nicht die einzigen Attribute, nach denen Entwickler auswählen können. Wir können *jedes* Attribut eines Elements als Selektor verwenden.
Attributauswahl hat eine spezielle Syntax. Hier ist ein Beispiel
a[href="https://css-tricks.de"] {
color: #E18728;
}
Das ist ein Exakter Treffer-Selektor, der nur Links mit dem exakten href-Attributwert „https://css-tricks.de“ auswählt.
Die sieben verschiedenen Typen
Attributselektoren sind standardmäßig Groß-/Kleinschreibung-sensitiv (siehe Groß-/Kleinschreibung-unabhängige Übereinstimmung unten) und werden in Klammern [] geschrieben.
Es gibt sieben verschiedene Arten von Übereinstimmungen, die Sie mit einem Attributselektor finden können, und die Syntax ist für jede unterschiedlich. Jeder der komplexeren Attributselektoren baut auf der Syntax des Selektors für exakte Übereinstimmung auf – sie alle beginnen mit dem Attributnamen und enden mit einem Gleichheitszeichen gefolgt von den Attributwert(en), normalerweise in Anführungszeichen. Was zwischen dem Attributnamen und dem Gleichheitszeichen steht, macht den Unterschied zwischen den Selektoren aus.
[data-value] {
/* Attribute exists */
}
[data-value="foo"] {
/* Attribute has this exact value */
}
[data-value*="foo"] {
/* Attribute value contains this value somewhere in it */
}
[data-value~="foo"] {
/* Attribute has this value in a space-separated list somewhere */
}
[data-value^="foo"] {
/* Attribute value starts with this */
}
[data-value|="foo"] {
/* Attribute value starts with this in a dash-separated list */
}
[data-value$="foo"] {
/* Attribute value ends with this */
}
Wert enthält: Der Attributwert enthält einen Begriff als einzigen Wert, als Wert in einer Liste von Werten oder als Teil eines anderen Werts. Um diesen Selektor zu verwenden, fügen Sie einen Stern (*) vor dem Gleichheitszeichen ein. Zum Beispiel wählt img[alt*="kunst"] Bilder mit dem alternativen Text „abstrakte Kunst“ und „Athlet beginnt einen neuen Sport“ aus, da der Wert „Kunst“ im Wort „beginnt“ enthalten ist.
Wert ist in einer durch Leerzeichen getrennten Liste: Der Wert ist entweder der einzige Attributwert oder ein vollständiger Wert in einer durch Leerzeichen getrennten Menge von Werten. Im Gegensatz zum „enthält“-Selektor sucht dieser Selektor nicht nach dem Wert als Wortfragment. Um diesen Selektor zu verwenden, fügen Sie eine Tilde (~) vor das Gleichheitszeichen ein. Zum Beispiel wählt img[alt~="kunst"] Bilder mit dem alternativen Text „abstrakte Kunst“ und „Kunstausstellung“ aus, aber nicht das Bild „Athlet beginnt einen neuen Sport“ (das der „enthält“-Selektor auswählen *würde*).
Wert beginnt mit: Der Attributwert beginnt mit dem ausgewählten Begriff. Um diesen Selektor zu verwenden, fügen Sie ein Caret-Zeichen (^) vor das Gleichheitszeichen ein. Vergessen Sie nicht, dass die Groß-/Kleinschreibung wichtig ist. Zum Beispiel wählt img[alt^=”kunst”] Bilder mit dem alternativen Text „Kunstausstellung“ und „künstlerisches Muster“ aus, aber kein Bild mit dem alternativen Text „Arthur Miller“, da „Arthur“ mit einem Großbuchstaben beginnt.
Wert ist der erste in einer durch Bindestriche getrennten Liste: Dieser Selektor ist dem „beginnt mit“-Selektor sehr ähnlich. Hier passt der Selektor auf einen Wert, der entweder der einzige Wert ist oder der *erste* in einer durch Bindestriche getrennten Liste von Werten ist. Um diesen Selektor zu verwenden, fügen Sie ein Pipe-Zeichen (|) vor das Gleichheitszeichen ein. Zum Beispiel wählt li[data-jahre|="1900"] Listenelemente mit einem data-jahre-Wert von „1900-2000“ aus, aber nicht das Listenelement mit einem data-jahre-Wert von „1800-1900“.
Wert endet mit: Der Attributwert endet mit dem ausgewählten Begriff. Um diesen Selektor zu verwenden, fügen Sie ein Dollarzeichen ($) vor das Gleichheitszeichen ein. Zum Beispiel wählt a[href$="pdf"] jeden Link aus, der mit .pdf endet.
Ein Hinweis zu Anführungszeichen: Sie können unter bestimmten Umständen auf Anführungszeichen um den Wert verzichten, aber die Regeln für die Auswahl ohne Anführungszeichen sind browserübergreifend inkonsistent. Anführungszeichen funktionieren immer, sodass Sie sicher sein können, dass Ihr Selektor funktioniert, wenn Sie sie verwenden.
Siehe den Pen Attributselektoren von CSS-Tricks (@css-tricks) auf CodePen.
Spaßfakt: Die Werte werden als Zeichenketten behandelt, sodass Sie keine ausgefallenen Maskierungen von Zeichen vornehmen müssen, um sie abzugleichen, wie Sie es bei ungewöhnlichen Zeichen in einem Klassen- oder ID-Selektor tun würden.
[class="(╯°□°)╯︵ ┻━┻"]{
color: red;
font-weight: bold;
}
Groß-/Kleinschreibung-unabhängige Übereinstimmung
Attributselektoren, die Groß-/Kleinschreibung nicht beachten, sind Teil der Selectors Level 4-Spezifikation der CSS Working Group. Wie oben erwähnt, sind Zeichenketten von Attributwerten standardmäßig Groß-/Kleinschreibung-sensitiv, können aber durch Hinzufügen von i direkt vor der schließenden Klammer Groß-/Kleinschreibung-unabhängig gemacht werden.
[attribute="value" i] {
/* Styles here will apply to elements with:
attribute="value"
attribute="VaLuE"
attribute="VALUE"
...etc
*/
}
Groß-/Kleinschreibung-unabhängige Übereinstimmungen können sehr nützlich sein, um Attribute zu adressieren, die unvorhersehbare, von Menschen geschriebene Texte enthalten. Angenommen, Sie würden zum Beispiel eine Sprechblase in einer Chat-App gestalten und zu jeder Nachricht, die den Text „Hallo“ in irgendeiner Form enthält, eine „winkende Hand“ hinzufügen wollen. Sie könnten dies nur mit CSS tun, indem Sie einen Groß-/Kleinschreibung-unabhängigen Abgleich verwenden, um alle möglichen Variationen zu erfassen.
Siehe den Pen Groß-/Kleinschreibung-unabhängige CSS-Attributübereinstimmung von CSS-Tricks (@css-tricks) auf CodePen.
Kombinieren
Sie können einen Attributselektor mit anderen Selektoren kombinieren, z. B. Tag, Klasse oder ID.
div[attribute="value"] {
/* style rules here */
}
.module[attribute="value"] {
/* style rules here */
}
#header[attribute="value"] {
/* style rules here */
}
Oder sogar mehrere Attributselektoren kombinieren. Dieses Beispiel wählt Bilder mit alternativer Textur aus, die das Wort „Person“ als einzigen Wert oder als Wert in einer durch Leerzeichen getrennten Liste enthalten, und einen src-Wert, der den Wert „lorem“ enthält.
img[alt~="person"][src*="lorem"] {
/* style rules here */
}
Siehe den Pen Kombinierte Attribute und nur Attributauswahl von CSS-Tricks (@css-tricks) auf CodePen.
Attributselektoren in JavaScript und jQuery
Attributselektoren können in jQuery genauso verwendet werden wie jeder andere CSS-Selektor. In JavaScript können Sie Attributselektoren mit document.querySelector() und document.querySelectorAll() verwenden.
Siehe den Pen Attributselektoren in JS und jQuery von CSS-Tricks (@css-tricks) auf CodePen.
Verwandt
Weitere Informationen
- Das Wichtigste über Attributselektoren
- Attributselektoren bei MDN
- Attributselektoren in der W3C CSS-Spezifikation
Browser-Unterstützung
| Chrome | Safari | Firefox | Opera | IE | Android | iOS |
|---|---|---|---|---|---|---|
| Alle | Alle | Alle | Alle | 7+ | Alle | Alle |
Zur Verwendung von
[rel$=external], könnten Sie es mit einem:after-Selektor auf Links verwenden, die auf „.pdf“ enden, um ein Symbol am Ende zu haben.Funktionieren mehrere Attribute in allen Browsern?
danke
Obwohl ich die Leistungsfähigkeit dieser nutze, bin ich regelmäßig frustriert, dass sie scheinbar nicht dynamisch sind
Ich hoffe immer noch, dass sich die CSS basierend auf dem Umschalten der „checked“-Eigenschaft ein- und ausschaltet. Leider nicht.
input:checked:after{}
meinst du so…
Entschuldigung, „checked“ war vielleicht ein schlechtes Beispiel, da
:checkedausreichen würde. Ein besseres Beispiel wäre der.valueeiner Auswahlliste.Soweit ich weiß, gibt es in reinem CSS keine Möglichkeit, das Layout basierend auf dem Wert einer Dropdown-Auswahl oder dem Textwert eines Eingabefeldes zu ändern. Wenn ich also mein
anderesTexteingabefeld nur anzeigen lassen möchte, wenn „Andere“ ausgewählt ist, erfordert dies derzeit JavaScript.Eingabe und Auswahl
Ich löse das, indem ich meinen Start-JS-Code den
input- undselect-Elementen mit dem Attributdata-valueeinen „onchange“-Handler (oder „change“-Event-Listener) gebe, derthis.dataset.value=this.valueausführt (denken Sie daran, .bind(elm) oder eine Factory-Funktion zu verwenden). Obwohl diese Lösung *kein* reines CSS ist, ist sie nur ein Hauch von Boilerplate-JS-Code, um CSS die abhängige Anzeige von Elementen wie Magie in fast jedem Projekt behandeln zu lassen (passen Sie es an, um die Selektorfunktion und den Iterator Ihres Frameworks zu verwenden).Dann müsste das CSS für @Gumnos‘ Beitrag nur geringfügig geändert werden, um „data-“ im Attributselektor voranzustellen.
Zu einem ähnlichen Thema…
Für eine Checkbox (und Radiobutton)-Lösung setze ich spezifische Klassen auf die steuernden und Ziel-Elemente und erstelle CSS, um eine Elementhierarchie von sowohl Kindern als auch nachfolgenden Geschwistern zu behandeln. Die CSS-Selektoren für die steuernden Klassen werden nach Bedarf mit
:checkedoder:not(:checked)kombiniert.Diese Lösung *ist* reines CSS, plus die Beziehung zwischen den Elementen wird explizit in der Markup-Struktur angegeben, sodass sie für den Designer leicht zu verstehen und zu verwalten ist.
Abhängig von Ihrem Projekt können Sie sich auf ein paar einfache Selektoren beschränken, wie
.controlFollowing:checkedund.targetFollowing(vorausgesetzt, Sie setzen jede Gruppe in ein Wrapper-Element), oder Sie können unglaublich detaillierte mehrstufige Steuerung durch Selektoren wie.controlFollowing1:checked .targetFollowing1und.controlFollowing1:not(:checked) .targetFollowing1erhalten und die Zahlen nach Bedarf erweitern. Ich habe eine Bibliotheksdatei aufgebaut, die ich verlinke, wenn ich diese Funktion benötige, aber ich rate Ihnen, die Idee nicht mehr als für ein Projekt erforderlich zu erweitern.In Live-Code reicht meist ein kleiner, einfacher Stylesatz aus.
Das würde funktionieren
Danke @Chris, du bist ‚Superman‘
Wie würde ich das CSS dafür schreiben?
<option data-hidden="true" value="">[Lieferant]</option>Ich habe versucht
alles, aber ohne Erfolg.
Vielen Dank im Voraus
Ich habe ein ähnliches Problem. Es scheint nicht bei Elementselektoren zu funktionieren (ich habe es auf ).
Sie könnten Ihrer Element eine Klasse hinzufügen und den Attributselektor auf die Klasse anwenden. Das funktioniert bei mir.
Ich meinte, ich hätte es auf
<button>versucht ;)Wie wähle ich eine Liste in CSS aus.main bitte sag etwas über den Code, ist es so oder sollte li anstelle von a verwendet werden
Was ist, wenn ich den Wert eines Datenattributs mit CSS ändern möchte. Zum Beispiel
Ich weiß, dass dies einfach mit JavaScript gemacht werden kann, aber was ist mit reinem CSS?
Unterscheiden Browser zwischen Standard-HTML-Attributen (wie href oder class) und benutzerdefinierten?
Ich sehe, dass Sie in Ihren Beispielen viel „data-value“ verwendet haben, aber kann ich benutzerdefinierte Attribute ohne „data-*“ am Ende verwenden und sie mit CSS auswählen (zum Beispiel [tricks=’attr’]{})?
Danke für Ihre Hilfe.
Hat jemand Probleme damit, dass das iPhone 5 etwas wie das hier ignoriert/nicht sieht?
[class^=”ad3″]
Das iPhone 6 scheint keine Probleme zu haben, aber das iPhone 5 ignoriert alle verwandten Stile.
Welche Software sollte ich zum Erlernen von CSS verwenden, bitte antworten Sie so schnell wie möglich
Wow! Danke für diese Erklärung, nach sorgfältigem wiederholtem Lesen konnte ich es auf eine komplexe Herausforderung anwenden und es hat funktioniert.
Nochmal vielen Dank
Wenn ich viele Symbole für img[icone] auswählen möchte, die Klasse hinzufügen, wäre es dann img[icone][class^=”icosv-“]:before?
Wow! Warum bin ich nicht vorher darauf gekommen, einfach fabelhaft leistungsfähig und praktisch!
Ist es irgendwie möglich, den Inhalt von Meta-Tags zu extrahieren?
Nehmen wir dieses Beispiel
…
Nehmen wir an, ich möchte alle DIVs auswählen, die mit diesen „data“-Attributen beginnen.
Ich begann mit div[attr^=”data”] ohne Erfolg natürlich.
Irgendeine Hilfe?
div[data]Sie können den
:checked-Selektor verwenden.Ich frage mich nach einem relevanten Anwendungsfall für den |= Selektor, ich habe gelernt, dass er oft verwendet wird, um Sprachcodes abzugleichen, wobei [lang|=”en”] sowohl „en-US“ als auch „en-UK“ abgleicht.
Hallo! Ich verstehe den 3. Satz in diesem Artikel nicht. Es scheint, als ob es einen Grammatikfehler gibt, oder ich verstehe die Botschaft nicht. Bitte überprüfen Sie das.. Danke
Wie finde ich dieses Element:
<p data-title=" ">Hallo</p>?mit
p[data-title=" "](was nicht funktioniert)