Attribute selectors gebruiken
Volgens het W3
CSS 2.1 allows authors to specify rules that match elements which have certain attributes defined in the source document.
Met andere woorden: Aan de hand van het gebruikte element attribute zal een bepaalde CSS worden toegepast op een element.
En wat kunnen we ermee
Veel, heel veel, maar ik zal het even handig en eenvoudig houden.
Zoals je waarschijnlijk reeds op vele websites gezien hebt, gebruiken webmasters een icoontje om duidelijk te maken dat een URI naar een externe website gaat :
of
.
class, id of attribute selectors
Je hebt natuurlijk de keuze welke manier je kunt/gaat gebruiken, maar laat ik je even zeggen dat als je class, id of attribute selectors gaat gebruiken, je ook je HTML moet gaan aanpassen..
Voor class
a.extern {
padding-right: 18px;
background: transparent url(external.gif) no-repeat center right;
}
Heeft ook nodig:
<a href="#" class=”extern” title=”#”>foo</a>
Idem voor id
a#extern {
padding-right: 18px;
background: transparent url(external.gif) no-repeat center right;
}
Heeft ook nodig:
<a href="#" id=”extern” title=”#”>foo</a>
Dit is een slecht voorbeeld, je kan id maar één keer per document gebruiken, dus maar één link stylen. Echt afgeraden het via id te doen.
Terwijl dan met attribute selectors
a[rel*="follow"] {
padding-right: 20px;
background: transparent url(external.gif) no-repeat center right;
}
Heeft ook nodig:
<a href="#" rel=”nofollow” title=”#”>foo</a>
De CSS regel: rel*="follow", dit wil zeggen:
Style elke link <a> waarvan de attribute rel is, en in de value ergens follow in voorkomt - in nofollow zit ook follow - met een icoontje.
Het kan ook voor bestands extensies
Voor PDF bestanden:
a[href$=".pdf"] {
padding-right: 18px;
background: transparent url(icon_pdf.gif) no-repeat center right;
}
Voor TXT bestanden:
a[href$=".txt"] {
padding-right: 18px;
background: transparent url(icon_txt.gif) no-repeat center right;
}
Voor EXE bestanden:
a[href$=".exe"] {
padding-right: 18px;
background: transparent url(icon_exe.gif) no-repeat center right;
}
Om er maar een paar te tonen, je kan er vele kanten mee uit, maar rekening houdend met volgende regels:
[foo]
Heeft een attribute genaamd “foo”[foo="bar"]
Heeft een attribute genaamd “foo” met een value “bar”[foo~="bar"]
Value heeft het woord “bar” in zich ergens (”sex bar drank”)[foo^="bar"]
Value gegint met “bar” (”barkruk”)[foo$="bar"]
Value eindigt met “bar” (”Drank staat achter de bar”)[foo*="bar"]
Value heeft “bar” ergens (”Een sexbar is wat ik zoek”)
Nog iets
Zoals je wel of niet weet, maar IE7 ondersteunt deze manier van CSS schrijven wel, maar je HTML document moet voorzien zijn van een DOCTYPE ( klik hier voor een opfrissing omtrent DOCTYPE ), om uit de quirksmode gehaald te worden.
Natuurlijk kan je op W3C terecht voor meer engelstalige info.
Gelezen: 1306 | Styling, CSS, Tutorials
Trackback/Pingbacks
- » Attribute Selectors, hoe werken zij - Gigadesign, XHTML-CSS website maken
Reacties op: Attribute selectors gebruiken
-
Dat wist ik nu eens ni se, thx Mark!
-
Mooi samenvattend artikel Mark
.
Een andere nuttige toepassing hiervoor is bvb het aanduiden van externe links, maar hetgeen ik me bij deze (css3 specificatie-)toepassingen steeds harder afvraag (eerder een puristenkwestie dan een probleem) is in hoeverre we dan nog kunnen spreken van een scheiding tussen opmaak en gedrag.
Nu niet persé bij het voorbeeld in dit artikel (off-topic iemand?
), maar de mogelijkheden zijn er wel naar.Want zoiets kan in principe de onderhoudbaarheid van een website niet ten goede komen, wat toch vooral bij de grotere/betere webapplicaties wel belangrijk is.
-
Misschien leuk om te weten dat er in de volgende versie van CSS veel meer van dit soort methoden toegepast kunnen worden.
Kijk eens naar de selectors test…
-
Mooie samenvatting Mark, nu maar hopen dat iedereen vlug op IE7 of - beter nog - Firefox zit!
Waar heb je trouwens die info over $, ^ en * vandaan? Deze vond ik niet terug in de specificaties van de W3C.
-
Interessant. Ik ben al een tijdje op zoek naar iets gelijkaardigs om duidelijk te maken dat een link naar bvb. Wikipedia of YouTube gaat. Liefst een automatische plugin, maar als het op deze manier ook lukt wil ik daar wel eens mee experimenteren.
-
Interessante post.
@Stijn: Voor Wordpress is er alleszinds ‘n handige plugin die al dat automatisch werk voor jou doet:Link Indication 3.0.
Die doet het met class- en dus niet met attribute selectors.Had hem op een vorige versie van mijn blog staan, maar na een update naar Wordpress 2.0 ging er ergens iets mis en dat heb ik nog niet proberen herstellen. Ik duid nu enkel de links naar Technorati aan via eigen CSS code.
Ben ook wel aan het experimenteren om de bezochte posts op een originele manier aan te duiden via CSS.
-
@ Cubus: Bedankt voor die tip. Ik zal die naam dadelijk eens googlen.
Wat betreft jouw experiment met bezochte posts: kan je daarvoor niet de “(post) a:visited” gebruiken voor het eigen domein alleen? Een beetje zoals Mark hierboven toont, maar dan enkel voor intern gebruik?
Ik ben ooit nog een plugin tegengekomen die een cookie aanmaakte om al dan niet nieuwe posts aan te duiden. Aha, “WP Since Last Visit”, te vinden bij Alex King dot org. Kan misschien als alternatief dienen.
-
@ Stijn link indication plugin
Ik had hem nochtans in mijn post gestoken dacht ik.
Ga die tip van jou ook zeker eens bekijken. Merci.
-
- “Waar heb je trouwens die info over $, ^ en * vandaan? Deze vond ik niet terug in de specificaties van de W3C.”
Regular Expressions
- Waar dit ook (naar mijn mening) erg handig voor is, is voor het stylen van het input element, zo kan je onderscheid maken tussen een text een submit een reset en een button. Ook ik het mogelijk readonly elementen een andere opmaak te geven.
-
Jammer dan ons aller machtige IE6 en lager het niet ondersteund.
Daarom heb ik een klein scriptje geschreven die er gewoon een class aan gooit met de waarde van het rel attribuut

-
@Danielpunt: deel het script met ons ?
-
Beetje laat antwoord, maar misschien hebben jullie er wat aan!
Verbeteringen zijn altijd welkom!
function getRel(attr, value, parent) {
(parent == null) ? parent = document : parent = document.getElementById(parent);
var a = parent.getElementsByTagName('a');
for(var i=0; i
Het derde argument is optioneel, die kun je gebruiken als je bv alleen de links wilt pakken uit een bepaalde div oid met een ID.Een voorbeeld kun je bekijken op www.danielpunt.nl/getRel.html
-
hm, dat ging niet goed. Kijk maar gewoon op de link die ik gaf.







