CSS kann HTML-Elemente basierend auf einem ihrer Attribute ansprechen. Wahrscheinlich kennen Sie Klassen und IDs bereits. Schauen Sie sich diesen HTML-Code an
<h2 id="title" class="magic" rel="friend">David Walsh</h2>
Dieses einzelne Element hat drei Attribute: ID, Klasse und rel. Um das Element in CSS auszuwählen, könnten Sie einen ID-Selektor (.magic) verwenden. Aber wussten Sie, dass Sie es auch basierend auf dem rel-Attribut auswählen können? Das ist, was als Attributselektor bekannt ist.
h2[rel="friend"] {
/* woohoo! */
}
Es gibt jedoch noch viel mehr zu Attributselektoren, also schauen wir uns alle verschiedenen Optionen genauer an und versuchen, einige "reale" Szenarien abzudecken, wann sie nützlich sein könnten.
Attribut entspricht exakt einem bestimmten Wert

Im obigen Beispiel war das Attribut des h2-Elements „friend“. Der von uns geschriebene CSS-Selektor zielte auf dieses h2-Element ab, da sein rel-Attribut genau „friend“ war. Mit anderen Worten, das Gleichheitszeichen bedeutet genau das, was Sie denken… eine exakte Übereinstimmung. Sehen Sie ein weiteres einfaches Beispiel
<h1 rel="external">Attribute Equals</h1>
h1[rel="external"] { color: red; }
Ein großartiges reales Beispiel dafür ist die Gestaltung einer Blogroll. Nehmen wir an, Sie haben eine Liste von Links zu Freundesseiten wie diese
<a href="http://perishablepress.com">Jeff Starr</a>
<a href="http://davidwalsh.name">David Walsh</a>
<a href="http://accidentalninja.net/">Richard Felix</a>
Dann wollten Sie jeden Link etwas anders gestalten. Der traditionelle Weg wäre wahrscheinlich, jedem Link einen Klassennamen zu geben, auf den man abzielen kann, aber das erfordert zusätzlichen Markup, was immer eine schöne Sache ist, die man vermeiden kann (Semantik und so). Ein anderer Weg könnte sein, :nth-child zu verwenden, aber das erfordert, dass sich ihre Reihenfolge nie ändert. Dies ist die perfekte Verwendung für Attributselektoren… die Links haben bereits ein eindeutiges Attribut, auf das man abzielen kann!
a[href="http://perishablepress.com"] { color: red; }
Ich glaube, die häufigste Verwendung von regulären Attributselektoren sind bei Eingaben. Es gibt Text, Button, Checkbox, Datei, Versteckt, Bild, Passwort, Radio, Zurücksetzen und Senden (habe ich etwas vergessen?). Alle sind <input>, und alle sind sehr unterschiedlich. Daher ist es meistens eine schlechte Idee, so etwas zu tuninput { padding: 10px; }ist meistens eine schlechte Idee. Es ist sehr üblich, Dinge wie diese zu sehen
input[type="text"] { padding: 3px; }
input[type="radio"] { float: left; }
Es ist wirklich der einzige Weg, um bestimmte Arten von Eingaben zu erhalten, ohne die anderen zu verderben und ohne zusätzlichen Markup hinzuzufügen.
Hinweis zu Anführungszeichen: Sie kommen normalerweise ohne Anführungszeichen in Attributselektoren aus, wie [type=radio], aber die Regeln für das Weglassen von Anführungszeichen sind seltsam und inkonsistent über tatsächliche Browserimplementierungen hinweg. Daher ist es eine bewährte Methode, einfach Anführungszeichen zu verwenden, wie [type="radio"]. Es ist sicherer und funktioniert immer.
Attribut enthält einen bestimmten Wert irgendwo

Hier wird es interessanter. Das Gleichheitszeichen in Attributselektoren kann durch andere Zeichen vorangestellt werden, die die Bedeutung leicht verändern. Zum Beispiel bedeutet „*=” „den folgenden Wert *irgendwo im Attributwert* abgleichen“. Sehen Sie sich dieses Beispiel an
<h1 rel="xxxexternalxxx">Attribute Contains</h1>
h1[rel*="external"] { color: red; }
Denken Sie daran, dass Klassen und IDs auch Attribute sind und mit Attributselektoren verwendet werden können. Nehmen wir an, Sie schreiben CSS für eine Website, bei der Sie den Markup nicht kontrollieren können, und ein schlampiger Entwickler hat drei DIVs, die Sie ansprechen müssen
<div id="post_1"></div>
<div id="post_two"></div>
<div id="third_post"></div>
Sie können sie alle mit auswählen
div[id*="post"] { color: red; }
Attribut beginnt mit einem bestimmten Wert

<h1 rel="external-link yep">Attribute Begins</h1>
h1[rel^="external"] { color: red; }
Ein reales Beispiel dafür wäre, sagen wir, Sie möchten jeden Link zu Ihrer Freundesseite anders gestalten als andere Links. Es spielt keine Rolle, ob Sie auf ihre Homepage oder eine Unterseite verlinken, alle Links zu ihnen möchten Sie gestalten.
a[href^="http://perishablepress.com"] { color: red; }
Das stimmt mit einem Link zu ihrer Homepage überein, aber auch mit allen anderen Unterseiten.
Attribut endet mit einem bestimmten Wert

Wir können auswählen, basierend darauf, wie Attributwerte *beginnen*, warum nicht *enden*?
<h1 rel="friend external">Attribute Ends</h1>
h1[rel$="external"] { color: red; }
Ein guter Anwendungsfall dafür ist die Kennzeichnung von Download-Links mit Symbolen basierend auf dem Dateityp. Zum Beispiel erhalten PDFs ein PDF-Symbol und Word-Dokumente ein Word-Symbol
a[href$=".pdf"] { background: url(icon-pdf.png) left center no-repeat; padding-left: 30px; }
a[href$=".doc"] { background: url(icon-doc.png) left center no-repeat; padding-left: 30px; }
Attribut ist Teil einer Leerzeichen-getrennten Liste

Sie wussten wahrscheinlich bereits, dass Sie Elementen mehrere Klassen zuweisen können, richtig? Wenn Sie das tun, können Sie immer noch .klassenname in CSS verwenden, um eine davon anzusprechen. Attributselektoren sind nicht so einfach. Wenn Ihr rel-Attribut mehrere Werte hat (z. B. Werte in einer Leerzeichen-getrennten Liste), müssen Sie „~=“ verwenden.
<h1 rel="friend external sandwich">Attribute Space Separated</h1>
h1[rel~="external"] { color: red; }
Sie denken vielleicht, warum sollte ich das verwenden, wenn *= dies auch abdecken würde und vielseitiger wäre? Tatsächlich ist es vielseitiger, aber es kann zu vielseitig sein. Dieser Selektor erfordert die Leerzeichen um den Wert herum, wo *= dies nicht tun würde. Wenn Sie also zwei Elemente hätten, eines mitrel=home friend-linkund eines mitrel=home friend linkwerden Sie den Leerzeichen-getrennten Selektor benötigen, um den zweiten richtig anzusprechen.
Attribut ist der Anfang einer Bindestrich-getrennten Liste

Dies wählt aus, wenn der *Anfang* einer Bindestrich-getrennten Liste von Attributwerten mit dem Selektor übereinstimmt.
<h1 rel="friend-external-sandwich">Attribute Dash Separated</h1>
h1[rel|="friend"] { color: red; }
Beachten Sie, dass, obwohl es auf der Grundlage des Anfangs des Selektors übereinstimmt, der gesamte erste Teil des Strings vor dem ersten Bindestrich übereinstimmen muss. Im obigen Beispiel würde es also keine Übereinstimmung geben, wenn das rel-Attribut friend2-external-sandwich wäre, während der ^=-Attributselektor dies getan hätte.
Mehrere Attribut-Übereinstimmungen

Wichtig ist, dass Sie mehrere Attributselektoren im selben Selektor verwenden können, was erfordert, dass alle übereinstimmen, damit der Selektor selbst übereinstimmt.
<h1 rel="handsome" title="Important note">Multiple Attributes</h1>
h1[rel="handsome"][title^="Important"] { color: red; }
Groß-/Kleinschreibung-unempfindliche Attributselektoren
Standardmäßig sind die Zeichenfolgen innerhalb von Attributselektoren groß-/kleinschreibungsempfindlich, aber anstatt mehrere Permutationen der Groß-/Kleinschreibung abzugleichen, wenn Sie dies tun müssen, können Sie einen Wert übergeben, der sie groß-/kleinschreibungsunempfindlich macht.
/* Will match
<div data-state="open"></div>
<div data-state="Open"></div>
<div data-state="OPEN"></div>
<div data-state="oPeN"></div>
*/
[data-state="open" i] { }
Attribut in CSS verwenden
Sie können nicht nur über Attribute auswählen, sondern auch Attribute im CSS-Inhalt verwenden, wie zum Beispiel…
.el::before {
content: attr(data-prefix) ": ";
}
Hoffentlich erhalten wir eines Tages Unterstützung für Typen und Fallback in der attr()-Funktion in CSS, wie
.el {
/* <div class="el" data-font-size="18"> */
font-size: attr(data-font-size px);
/* <div class="el"> */
font-size: attr(data-font-size px, 18px);
}
Browser-Unterstützung
Jedes einzelne Beispiel oben funktioniert in allen modernen Browsern: Safari, Chrome, Firefox, Opera und IE. Internet Explorer hat perfekte Unterstützung für all diese ab Version 7, aber keine Unterstützung in Version 6. Um in Ihrem Browser zu testen, sehen Sie die Testseite. Wenn der Zeilen-/Selektorstil rot ist, funktioniert er.
Großartig Chris – das wusste ich nicht. Ich werde diese Methode in Zukunft definitiv öfter verwenden! Seltsam, ich habe noch nie eine Website gesehen, die diese Form von Code in Style-Sheets verwendet. Vielleicht ist sie nicht so bekannt, wie wir erwarten.
Das liegt daran, dass viele Leute immer noch alte Browser verwenden…
Okay, jetzt ist das gruselig.
In diesem Moment lese ich Eric Meyers Buch über CSS erneut durch und habe gerade den Teil über Attributselektoren (Seite 38) behandelt…
Uff, schön, es gibt unzählige Anwendungen dafür.
a[href^=http://] { color: red; }
Zielen Sie schnell auf alle externen Links mit CSS. Ich liebe es! Außerdem habe ich heute deinen Namen auf dem Cover von .net gesehen und wäre fast in Ohnmacht gefallen… Ich hätte es gekauft (es ist ein tolles Zine), hatte aber keine Zeit, da ich am Bahnhof war.
Wie immer, mach weiter so!
Es könnte Probleme mit Websites geben, die WordPress und Themes verwenden, die alle internen Links über die Domain referenzieren, sodass rel=”external” in diesem Fall verwendet werden müsste…
Aber ich stimme zu, für die meisten Situationen ist es großartig!
In diesem Fall würden Sie einfach die Kaskade verwenden und den Stil für Links, die mit http://yourdomain.com beginnen, zurücksetzen.
Das ist
a {color: blue; }
a[href^=http://] { color: red; }
a[href^=http://mydomain] { color: blue; }
Oder Sie können :not() verwenden und den zusätzlichen Selektor eliminieren.
a {color: blue; }
a:not([href^=http://mydomain]) { color: red; }
Vielen Dank für diesen Artikel, er hat mir enorm viel Zeit gespart!
Ich habe diese Tipps verwendet, um ein Stylesheet zu erstellen, das <a>-Tag-Attribute anspricht, das ich jetzt auf große Webseiten anwende, die ich markiere. Das CSS wendet unterschiedliche Hintergrundfarben auf Links an, abhängig von einer riesigen Anzahl von Bedingungen, z. B.
Kein ‚title‘-Attribut
Absolute interne Links
404
Nicht-HTML-Links z. B. PDFs
Fragment-Links
Das bedeutet, wenn ich diese riesigen Webdokumente mit dem einfachen Word-Dokument vergleiche, das der Kunde ursprünglich geschickt hat, ist sofort ersichtlich, welche <a>-Tags Aufmerksamkeit erfordern UND was getan werden muss. Sie können die gleiche Technik verwenden, um jedes HTML-Element anzusprechen.
Vielen Dank!
Sie sehen es nicht wegen des Mangels an Unterstützung für ältere Browser.
Sie können die gleichen Ergebnisse mit Klassen für jedes Element erzielen. Ich würde persönlich diesen Weg für Formulare bevorzugen, wenn es möglich wäre, aber Klassen werden wahrscheinlich die De-facto-Wahl bleiben.
„Wenn der Zeilen-/Selektorstil rot ist, funktioniert er.“
Rot zeigt normalerweise an, dass es nicht funktioniert. Ich schlage vor, es stattdessen in grün zu ändern ;)
Wow. Das ist alles, was ich zu sagen habe. Es lässt mich fragen, welche Art von coolen, wenig bekannten Tricks es in CSS3 geben wird, wenn es fertig ist.
Wirklich schöne Zusammenfassung – danke
Erstaunlicher Beitrag Chris… ich kenne jetzt diesen besseren Weg und werde ihn von meinem nächsten Projekt an verwenden…. Danke fürs Teilen!
Für Links zu externen Websites könnten Sie auch das ‚target‘ ansprechen!
Wenn Sie also auf eine externe Website verlinken, werden Sie diese wahrscheinlich in einem neuen Fenster öffnen.
also…
a[target=_blank] { color: red; }
Was meinst du, Chris?
Funktioniert für mich!
Andy
Dagegen ist nichts einzuwenden. Es sind nur Links zu externen Websites, die nicht unbedingt das haben, das ist nur, wenn Sie beabsichtigen, den Link in einem neuen Fenster/Tab zu öffnen.
Wahr – aber ich denke, 9 von 10 Mal wollen meine Kunden, dass externe Links in einem neuen Tab/Fenster geöffnet werden. (richtig oder falsch!)
Ich hoffe, Sie lesen das Chris, aber ich habe das target-Attribut in allen meinen Links hartcodiert. Ich sehe wirklich kein Problem damit und werde nicht in die ganze Debatte einsteigen, aber sollte ich anfangen, rel="external" und so zu verwenden?
Ich denke, die meisten Usability-Ingenieure sind sich einig, dass kein Link jemals ein neues Fenster öffnen sollte, da dies eine Entscheidung ist, die wirklich beim Benutzer liegt und wichtiger ist, weil es die Zurück-Schaltfläche unterbricht.
Andererseits, wenn Ihr Kunde es verlangt und erwartet…
Wahr, ABER in Momenten, in denen Sie etwas einfach nicht auf derselben Seite öffnen können, zum Beispiel, wenn Sie ein Formular ausfüllen und die Bedingungen anzeigen möchten, müssen Sie es auf einer neuen Seite öffnen lassen.
Was ich nicht verstehe, ist, wie rel="external" eine Verbesserung gegenüber target="_blank" darstellt, außer dass es in strict validiert?
„…ABER in Momenten, in denen Sie etwas einfach nicht auf derselben Seite öffnen können, zum Beispiel, wenn Sie ein Formular ausfüllen und die Bedingungen anzeigen möchten, müssen Sie es auf einer neuen Seite öffnen lassen.“
Nicht unbedingt. Es GIBT Optionen, die es einem Benutzer ermöglichen würden, die Bedingungen anzuzeigen, ohne eine neue Seite zu öffnen, wie z. B. modale Boxen/Fenster.
Vergessen Sie nicht, target=“_blank“ ist kein gültiges XHTML. Ich glaube, es ist immer noch gültig für transitional HTML, obwohl ich mich irren könnte.
<a href=”#” rel=”nofollow”>Extern</a>
versuchen Sie es nochmal….. [ onclick = ” this.target=’_blank’ ” ]
Danke für diesen kleinen Schnipsel. Ich benutze ihn nicht oft, aber jetzt benutze ich ihn und validiere ihn.
WOW! Das ist cool! CSS hört nie auf, mich mit seiner reinen Vielfalt zu überraschen.
Danke Chris.
Ich wusste das, aber nicht all die kleinen Dinge dazwischen mit dem | und ~.
Auch da ich sicher bin, dass dies in allen Browsern funktioniert (schade für IE6, oder?) Kann ich dies öfter verwenden.
Schön! Ein schönes reales Beispiel für rel$ ist das Hinzufügen von Symbolen zu Links, zum Beispiel ein PDF-Symbol für jeden Link, der mit .pdf endet.
Danke!
das war gut!!! Gefällt es mir, gefällt es mir..
Oh ja! Sicherlich ist das eine großartige Verwendung. Beispiel für Leute
a[href$=pdf] {background-image: { url(/images/pdf-icon.png) no-repeat; }
padding-left: 30px;
}
Hey Chris, ein Tippfehler im obigen Code ;)
background: url(/images/pdf-icon.png) no-repeat;
Ich konnte es in Firefox nicht zum Laufen bringen, es sei denn, ich habe ‚background-image‘ in nur ‚background‘ geändert.
a[href$=pdf] {
background: url(../img/pdf.png) no-repeat;
padding: 0 0 0 24px;
}
Ich vermute, das liegt daran, dass Sie ‚no-repeat‘ nicht in die background-image-Eigenschaft einfügen können. Ich bin mir ziemlich sicher, dass Chris background meinte, da er no-repeat enthalten hat.
Hey Chris! Toller Beitrag! Ich hatte keine Ahnung, dass CSS so vielseitig ist.
Und es ist auch ermutigend zu sehen, dass sogar verfluchte Genies zu schnell sind und seltsamen Code tippen :)
Mach weiter so, Mann – ich besuche deine Seite jeden Tag!
Gute Arbeit!
Denken Sie daran, nett zu Links zu PDFs zu sein (100%).
<a href="docuemnt.pdf#zoom=100" rel="nofollow">Beide Selektoren verwenden.a[href$=".pdf"], a[href$=".pdf#zoom=100"] { /<em>Ihre schönen Stile hier</em>/ }Danke, Chris, für eine weitere Anwendung von Regex. CSS wird jedes Mal dynamischer, wenn ich nachsehe. Diese Beispiele werden nützlich sein. Meine einzige Kleinigkeit: „Es gibt noch viel mehr zu Attributselektoren“ verwendet das falsche Homophon.
Hey, wie wäre es mit der Verwendung von http://code.google.com/p/ie7-js/? Natürlich könnte es alles verlangsamen, aber das ist der Preis, den IE6-Benutzer zahlen werden :) Und ich denke, diesmal ist es nicht etwas wie abgerundete Ecken, die man weglassen kann, es geht um Benutzerfreundlichkeit, und wir sollten sie auch diesen unwissenden IE-Benutzern zur Verfügung stellen :))
Und wie ich gelesen habe http://www.evotech.net/blog/2007/05/ie7-css-selectors-how-they-fail/, besagt er, dass es einige Probleme mit Selektoren in IE7 gibt, daher denke ich, dass Sie das auch erwähnen sollten.
Vielen Dank! Ich wusste nicht einmal von diesen Pseudo-Regulären Ausdrücken in Selektoren.
Das ist definitiv mächtiges Zeug. Ich mag das wirklich, weil WordPress das ganze rel-Ding für die Blogroll usw. unterstützt.
Es wäre schön, wenn man != für „nicht gleich“ verwenden könnte. Da WordPress die http: für alle Links verwendet, können Sie a[href^=http://] nicht zum Ansprechen externer Links verwenden. Es wäre jedoch schön, wenn Sie etwas wie: a[href!=https://css-tricks.de] stattdessen tun könnten.
Nun, Sie können immer jQuery dafür verwenden. Aber wie der Autor sagte, gibt es dafür rel="external" in WordPress.
Sie können einfach den Attributstil für einen Link setzen, der mit http beginnt.
a[href^=http://] { background: url(extIcon.gif); }
...dann korrigieren Sie den Stil für Links innerhalb Ihrer Domain.
a[href^=https://css-tricks.de] { background: url(none); }
Ein weiterer Hinweis zu Attributselektoren – sie haben weniger Spezifität als reguläre Klassen- oder ID-Selektoren, also
a[id=someID] {color: blue; } wird überschrieben von a#someID { color: red; }
Sie können a[href^=http://]:not([href^=http://yourdomain.com]) verwenden, aber es gibt keine Unterstützung für irgendeine IE-Version.
Ich habe letzte Woche das Buch „Advanced CSS“ gekauft und dort wird viel über diese fortgeschrittenen Selektoren gesprochen, die wir nicht kennen (oder an die wir nicht denken). Es ist erstaunlich, wie mächtig einige dieser Selektoren sind, doch die meisten werden nicht sehr oft irgendwo verwendet.
Tolle Erklärung der verschiedenen CSS-Attributselektoren. Das sind Dinge, die ich in der Vergangenheit aus reiner Unwissenheit, wann oder wie ich sie verwenden soll, nicht genutzt habe. Das ist eine riesige Hilfe und ich sehe, dass ich dies in Zukunft viel mehr nutzen werde.
Ahhhhh… jetzt verstehe ich! Ich habe Bluetrip und H5 verwendet, ohne vollständig zu verstehen, was zwischen den [] geschah.
Danke nochmals, Chris!
Ich habe nie darüber nachgedacht, Dinge so zu machen, es kam mir nie in den Sinn, von der Verwendung von Klassen etc. abzufallen. Ist das browserübergreifend freundlich? Es scheint, einige Leute sagen ja, einige nein! Es wäre interessant, einige Browser-Tester für all die verschiedenen Variationen durchzuführen.
Wirklich gut gefällt mir die Idee, es für den Zweck der Dateierweiterung zu verwenden
„a[href$=pdf] {
background-image { url(/images/pdf-icon.png) no-repeat }
padding-left: 30px;
}”
Schöner Artikel!
Es funktioniert bei mir nicht im Internet Explorer 7. Ich arbeite an einer Website, auf der wir viele Logos zu Informationszwecken anzeigen. Einer der Logo-Besitzer möchte, dass seines entfernt wird, bis wir die Lizenzierung geklärt haben. Anstatt den Backend-Code neu zu schreiben, habe ich versucht, dies nur für diesen Fall zu entfernen.
div.foo .bar[style*=xyz] {
background-image:none !important;
}
Entfernt das Hintergrundbild in IE7 nicht. Ich muss !important verwenden, da es sich um einen Inline-Stil handelt, der den Hintergrund hinzufügt (ich weiß, das trennt keinen Inhalt von Stil, aber es funktionierte auf diese Weise besser für die Programmierung).
CSS-Attributselektoren sind großartig und ich benutze sie täglich, obwohl ich die Varianten „in gestrichelt“ und „in leerzeichengetrennt“ nicht kannte. Danke für die Tipps.
Sie haben jedoch etwas extrem Wichtiges übersehen. IE7 kann mit einem bestimmten Selektor zum Absturz gebracht werden. Ja, Sie haben richtig gehört. Platzieren Sie einfach das folgende CSS entweder auf Ihrer Seite oder in Ihrer Stylesheet-Datei, und es wird IE7 zum Absturz bringen, ohne dass ein Windows-Ereignis bezüglich des Absturzes protokolliert wird.
button[value=””]
oder
button[value=”some value”]
Köstlich nuts and bolts geeky, ganz zu schweigen davon, dass es sehr nützlich ist. Deshalb liebe ich diese Seite.
Hier ist die Art von Code, die ich benutze
a:not([href^="http://www.arpia.be"]):not([href^="#"]):not([href^="/"]):after {content:"\279F";
}
Dies fügt nach jedem externen Link einen kleinen Pfeil hinzu.
Ich stimme vollkommen zu, dass die Verwendung von rel besser ist, als eine neue Klasse einzuführen, aber ich muss ein wenig pingelig sein.
In der realen Welt sparen Sie meistens keinen Markup. Nach meiner Erfahrung haben fast keine Links das rel-Attribut vorhanden. Indem Sie also keine Klassen verwenden und zu rel wechseln, tauschen Sie nur ein Attribut gegen ein anderes aus. Konzeptionell viel besser, aber es gibt meiner Meinung nach keine wirkliche Einsparung.
Durch die Einführung des rel-Attributs schlagen Sie zwei Fliegen mit einer Klappe. Sie können das Target entfernen (vorausgesetzt, Sie verwenden rel=”external”) und Sie stylen externe Links, was viel effizienter ist, als <href=”#” rel=”nofollow”> zu haben. Wiederum vermeiden Sie, eine neue Klasse einzuführen und ermöglichen es Ihnen, das Target-Attribut zu entfernen.
ups,
<a href="#" class="external" target="_blank"Was er meinte, war nicht nur für Links, sondern auch für alles andere wie H1- oder img-Tags. Anstatt class=”” zu verwenden, wechseln Sie im Grunde nur zu rel=””, in diesem Fall ist es redundant, nur um Markup zu reduzieren. Die Verwendung dieser Methode, um bestimmte Tags basierend auf ihren Attributen auszuwählen, ist jedoch das, was Chris angedeutet hat. Besonders gut für Formulare meiner Meinung nach. Anstatt jedem Tag seine eigene Klasse zuzuweisen, um es anzusprechen, können Sie dies tun über input[type=text/submit/button] usw. Hier ist es nützlich.
Sie müssen nicht rel ansprechen, Sie können es mit jedem beliebigen Attribut tun. Zum Beispiel verwende ich
input[type=”submit”]
als Selektor in einer meiner Stylesheets.
Das sind alles sehr interessante Verwendungen von Selektoren. Es macht die Entwicklung von Websites einfacher, wenn man diese im Hinterkopf behält.
Sehr hilfreicher Artikel. Ich wusste kaum etwas über sie, würde sie aber beim Programmieren nie verwenden! Jetzt werde ich das auf jeden Fall tun, besonders da ich IE6 nicht mehr unterstützen werde!
Danke!
Gut, das ist hilfreich. Ich habe versucht, Links Stile von ihrem Container übernehmen zu lassen, wie
#main a:hover {color:red}aber ich habe festgestellt, dass es entweder nicht funktioniert oder nicht auf den Container beschränkt bleibt; d. h. das obige Beispiel färbt alle Links auf der Seite rot. Sollte das funktionieren?
Auf jeden Fall sollte ich wahrscheinlich stattdessen Attributselektoren ausprobieren.
a:link und a:visited müssen sich oberhalb von a:hover in der Stylesheet-Datei befinden, sonst funktioniert es nicht. Ich hatte dieses Problem eine Weile auf einigen Websites, bis ich es herausfand.
Wow! Ich kann nicht glauben, dass ich noch nie davon gehört habe.
Geniale Sache!
Für „Attribut endet mit einem bestimmten Wert“ benutze ich das oft, um bestimmte Links basierend auf ihrem Dateityp zu stylen.
a[href$=pdf] { padding-right:16px; background: url(/images/icon_pdf.gif) top right no-repeat; }Aber das wurde schon mehrmals gesagt. Das lehrt mich, die anderen Kommentare zu lesen, bevor ich kommentiere. Haha.
wow! Fortgeschrittene CSS-Sachen! Gut gemacht
Das war wirklich hilfreich. Vielen Dank!
Damit es als gültiges CSS validiert wird, müssen Sie sicherstellen, dass es element[attr=”value”] ist, beachten Sie die Anführungszeichen.
Außerdem habe ich vergessen zu erwähnen, dass viele davon in IE nicht unterstützt werden, da sie Teil von CSS3 sind. Siehe http://www.css3.info/preview/attribute-selectors/
Gute Zusammenfassung, Chris.
Ich benutze manchmal absichtlich einen Attributselektor für eine Klasse oder ID, die ich vor IE6 verstecken möchte.
Zum Beispiel:
div[class="whatever"] {
background-color: red;
background-image: url(semi-transparent-background.png);
}
Dies spart mir manchmal, eine IE6-Stylesheet erstellen zu müssen, nur um ein Element zu überschreiben.
Das ist vielleicht der falsche Ort, um das zu fragen, aber ich hatte das Gefühl, es wäre nicht zu weit vom Thema entfernt.
Ich habe ein Problem in IE8
Dieses CSS funktioniert nicht
input:active[type=image] {position:relative;top:1px;left:1px;}oder
input:focus[type=image] {position:relative;top:1px;left:1px;}Jede Hilfe wird sehr geschätzt!
Zwei mögliche Antworten, ich bin mir selbst nicht sicher
1) :active und :focus sollten am Ende des Selektors stehen (d. h. input[type=images]:active) und deshalb scheitern.
Aber da Sie sagten, dass es nur für IE8 fehlschlägt,
2)
:hover und :active funktionieren in IE nur für Anker-Elemente () und scheitern deshalb bei Eingabeelementen.
Wow! Geniale Sache! Das wird definitiv nicht oft auf vielen Websites behandelt!
Wie wirkt sich die Verwendung von Attributselektoren auf die Ladezeit der Seite aus? Ist es dasselbe wie die „normale“ Verwendung von CSS oder ist zusätzliche Verarbeitung involviert?
Toller Artikel. Sehr geschätzt!
Danke… das Zeug wusste ich noch nicht…
Siehe auch hier
http://ipinfo.info/netrenderer/index.php?url=http://www.css3.info/preview/attribute-selectors/%23begins
Sie funktionieren im Internet Explorer 7 und höher
wie finden Sie so etwas heraus
Noch ein weiterer gültiger Grund, IE6 zu vergessen, dass es jemals existierte…
Ein perfektes reale Welt Beispiel für ‚h1[rel$=external]‘ (passend zum Ende) ist eines, das ich gerade nach dem Lesen Ihres Beitrags gemacht habe. Ich habe es verwendet, um PDF-Download-Links mit einem PDF-Symbol zu stylen: a[href$=pdf]. Funktioniert absolut super. Danke!
Wirklich gute Sache. Ich vermute auch, dass dies für jQuery-Selektoren wirklich hilfreich wäre.
Weiß jemand, in welchen Browsern das nicht unterstützt wird?
Nützlich wie üblich Chris.
Danke Chris! Habe gerade etwas Neues gelernt.
Wirklich nützlich in der Tat. Vielen Dank für die Tipps.
Hey, das bedeutet, dass Sie Bilder auch unterschiedlich nach ihrem Typ stylen können!
Ich kannte das, aber die gezeigten Beispiele sind etwas seltsam für mich: Ich verstehe, dass nur Link- und a-Elemente das Attribut rel nehmen können.
Das ist so GEWINN! Danke für das Schreiben, Chris. :)
Ich habe herausgefunden, dass der durch Bindestriche getrennte Selektor nicht funktioniert. Er scheint auf Ihrer Testseite zu funktionieren, weil er tatsächlich den „enthält“-Selektor verwendet [rel*=external]
h1[rel|=external] { color: red; }
Attribut Dash Separated
Dies funktioniert nicht korrekt, wie Sie in Firefox v3.6 und Chrome v5 sagten, denn es wird nur rot, wenn ich external nach vorne tausche, so:
Attribut Dash Separated
In Ihrem Beispiel können Sie versuchen, indem Sie rel*=external aus Ihrem CSS-Code entfernen und das Ergebnis sehen.
Fantastisch, vielen Dank! Grüße aus São Paulo, Brasilien.
Gute Arbeit, Chris. Übrigens, wenn Sie sehen möchten, welche Browser diese Selektoren unterstützen, können Sie entweder besuchen
http://www.findmebyip.com/#css3-selectors
oder
http://www.css3.info/selectors-test/
wow, das scheint ein wirklich hilfreicher kleiner Bastard zu sein. Danke für das Teilen!
Ich werde das für zukünftige Projekte im Hinterkopf behalten müssen. Es scheint eine interessante Möglichkeit zu sein, meine CSS noch spezifischer zu gestalten, was immer Spaß macht.
Wenn unsere Benutzer doch nur aufhören würden, IE6 zu benutzen. Sie machen immer noch mindestens ein Viertel unseres Umsatzes aus.
Ich war mir dieser schon seit einer Weile bewusst, aber es waren die Art von CSS-Dingen, die ich im Allgemeinen als nicht browserübergreifend genug ignorierte. Aber ich sehe, dass nur IE6 sie jetzt nicht mehr unterstützt, was ich jetzt zu ignorieren beginne, also muss ich anfangen zu spielen! Danke für den Tritt in den Hintern.
Ich stimme Skilldrick zu… Toller Artikel. Danke für die Erinnerung und den Tritt in den Hintern.
Ich benutze das schon seit einiger Zeit, aber nur in JQuery, wegen der mangelnden Unterstützung in IE6… ja, ich hasse ie(6) genauso wie der Rest von Ihnen, aber ich möchte, dass jeder die gleiche Website sieht…
Hallo Chris,
Ich weiß nicht, ob Sie diese Umfrage bereits hatten, vielleicht wäre dies eine gute
Webentwickler sollten ihre Websites machen …
1. gleich für jeden Browser (Handys ausgenommen)
2. Stürzt auf älteren Browsern schön ab
3. Webentwickler sollten sich einen Dreck um Browser scheren, die von ihren eigenen Entwicklern nicht einmal mehr unterstützt werden (wie IE6)
[edit]
3. Webentwickler sollten sich einen Dreck **nicht** scheren…
[/edit]
Ich verwende derzeit
time[datetime*="01T"]bistime[datetime*="31T"], um diebackground-positioneines Kalendersymbol-Sprite für jeden Beitrag in den David Chambers Design-Archiven festzulegen. Ich liebe es, Attributselektoren zu verwenden, um mein Markup frei von unnötigen Klassennamen zu halten!Das ist großartig, ich wusste das, aber ehrlich gesagt habe ich nie so viel Aufmerksamkeit darauf gerichtet oder nie mehr recherchiert, aber ich frage mich, ob wir sie verwenden können, weil die meisten Benutzer immer noch verdammt IE6 benutzen?
Das Rel$=external könnte sehr nützlich sein, um Dateitypen zu erkennen. Zum Beispiel, wenn Sie Links zu PDFs und normalen Webseiten haben, könnten Sie Symbole vor die Links setzen, um zu zeigen, dass es sich um eine Webseite oder eine PDF handelt, weil Sie wissen, dass der Link auf .pdf endet oder nicht.
Ein ziemlich nützliches Beispiel in der Praxis, nehme ich an.
Wow, ich hätte nie gedacht, dass alle modernen Browser diese Selektoren unterstützen! Würde viele überflüssige Klassennamen sparen – und auch eine IE6-Stylesheet, :P
Grüße aus Deutschland!
Sehr nützlicher Beitrag. Dies würde viele meiner Probleme lösen und ich bin sicher, wir können die CSS-Größe reduzieren.
Hallo zusammen,
Frage
Es ist möglich, mehr als ein „rel“ zu einem Link hinzuzufügen? Wenn ja, wirkt sich das auf SEO aus?
Beispiel
(a href=”www.something.com” rel=”nofollow” rel=”site”)dies ist ein Link (/a)
Ich hatte Grundkenntnisse über Attributselektoren, aber ich wusste nicht, dass sie so umfangreich sind. Das war sehr informativ und wird sich definitiv in Zukunft als nützlich erweisen…
Ich wusste nichts darüber. Das ist großartig, besonders für Eingaben. Ich habe .text- und .button-Klassen für meine Eingaben erstellt, extrem nervig. Das ergibt viel mehr Sinn, vielen Dank!
Wirklich, wirklich hilfreich, besonders mit der automatisch generierten Klasse in WordPress (tag-link-1, tag-link-2, tag-link-7 .. ). Genial. Vielen Dank!
Brillanter Beitrag, Chris! Es ist immer schön, am Anfang meiner Woche etwas Neues zu lernen!
Eigentlich kam mir gerade der Gedanke, dies zu verwenden, um automatisch einen gewissen Abstand um Bilder zu legen, die ich rechts oder links ausrichte.
Zum Beispiel:
<img align="right" src="whatever.jpg" />Und dann mit CSS-Attributselektor
img[align=right] { margin-left:10px; }Das überwindet, was mir immer Magenzerreißen bereitet hat: Benutzer, die Bilder mit align verschieben, aber nicht die entsprechende Klasse hinzufügen, um sicherzustellen, dass ein Rand hinzugefügt wird.
Ausgezeichneter Beitrag, ich habe lange nach einem Beispiel für
a:not([href ^=http://my.domain.com])!gesucht. Ich wusste, dass etwas Eleganteres existiert, und habe endlich die Antwort und noch viel mehr hier gefunden :-)
Alles klar!
Jetzt konnte ich die eingebetteten YouTube-Videos aus meinem @media print Styles herausnehmen
iframe[src*="youtube"] { display: none }Danke für die Veröffentlichung, Chris. Weiß jemand, wie teuer der Teilklassenselektor (class*=”span“, der in Bootstrap für Grids verwendet wird) ist?
Ich würde nicht zu viel Zeit damit verbringen, über die Teuerheit von Selektoren nachzudenken. Es spielt nur in den extremsten Fällen eine geringe Rolle.
Es gibt eine zusätzliche Möglichkeit, Attributselektoren zu verwenden, die hier fehlt. Sie können Elemente auswählen, die einfach ein Attribut vorhanden haben, mit
Wenn Sie zum Beispiel alle Elemente mit
data-kermitauswählen möchten, könnten Sie…Und so weiter und so fort…
Sie leisten großartige Arbeit, Sir, Sie sind unser Fachexperte, ich habe Ihre Tricks viele Male verwendet
Sie sind auch meine Inspiration, Sir
Wenn Sie einen Attributselektor verwenden, um nach Eigenschaften innerhalb eines Style-Attributs zu suchen, und Sie IE8 unterstützen, müssen Sie zwei Selektoren bereitstellen
div[style*="FONT-SIZE"],
div[style*="font-size"]
Warum?? Wenn IE8 die Seite parst, konvertiert es alle Eigenschaftsnamen innerhalb von Style-Attributen in GROSSBUCHSTABEN.
Ooof, das heißt