[css] pseudo-classes en cascading

Pagina: 1
Acties:

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:28

crisp

Devver

Pixelated

Topicstarter
Het probleem waar ik nu tegenaan loop; stel ik heb de volgende css:

HTML:
1
2
3
4
5
6
7
a, a:link, a:visited, a:active {
  color: #ffffff;
  text-decoration: none;
}
a:hover {
  color: #ffc119;
}

nu wil ik echter met behulp van scripting de kleur van een link wijzigen; hetzij door een style-attribuut te zetten, hetzij door een classname toe te kennen aan de link.
In beide gevallen is echter het effect hetzelfde: de hover functioneert niet meer, en ik wil juist dat de hover wel blijft functioneren.
Blijkbaar is de generieke pseudo-class voor het <a> element hier ondergeschikt aan een class of een inline style, tenzij je bij het gebruik van een class expliciet voor de class een hover definieerd:

HTML:
1
2
3
a:hover, a.myclass:hover {
  color: #ffc119;
}

da's leuk en aardig, en ergens ook wel begrijpelijk, dus ben ik de recs eens gaan doornemen en kwam uit op het volgende:

HTML:
1
2
3
a:hover, a[class]:hover {
  color: #ffc119;
}


Dit betekent dat elk <a> element, of elk <a> element met een class-attribuut deze pseudo-class krijgt toegewezen.
Je snapt het natuurlijk al: IE kan hier helemaal niet tegen en past de pseudo-class op geen enkel <a> element meer toe; Mozilla snapt het al wat beter en past de pseudo-class toe totdat ik mbv scripting de classname wijzig.

Nu kan ik 2 dingen doen in mijn ogen:

-classes opnemen voor elke mogelijke kleur, en voor elke class ook de :hover pseudo-class definieren (let wel, ik praat over zo'n 35 verschillende kleuren, dus dat wordt dan een forse css)
-de hovers voor elke link met javascript gaan afhandelen

Beide situaties zijn imho verre van ideaal; het liefst wil ik gewoon de color style-attribuut met script kunnen toekennen, en een simpele hover pseudo-class, maar ik krijg dat dus niet voor elkaar; iemand nog een briljant idee?

Intentionally left blank


Verwijderd

Na wat rommelen en wat babbelen op irc, bleek de oplossing erg eenvoudig te zijn.
Zet ! important achter de :hover regel, zodat die niet 'overruled' wordt door later gedefinieerde styles.

Styles met een ! important rule kunnen blijkbaar alleen worden overschreven als die rule ook ! important bevat. :)

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:28

crisp

Devver

Pixelated

Topicstarter
Verwijderd schreef op 10 oktober 2002 @ 00:49:
Na wat rommelen en wat babbelen op irc, bleek de oplossing erg eenvoudig te zijn.
Zet ! important achter de :hover regel, zodat die niet 'overruled' wordt door later gedefinieerde styles.

Styles met een ! important rule kunnen blijkbaar alleen worden overschreven als die rule ook ! important bevat. :)
even voor de verduidelijking:
HTML:
1
2
3
a:hover {
  color: #ffc119 !important;
}

als ik nu een kleur toewijs aan een link mbv scripting wordt de pseudo-class niet overschreven! :)
Met :* voor Cheatah ;)

Intentionally left blank


  • wicher|IA
  • Registratie: November 2000
  • Laatst online: 10-04-2023
Verwijderd schreef op 10 oktober 2002 @ 00:49:
Na wat rommelen en wat babbelen op irc, bleek de oplossing erg eenvoudig te zijn.
Zet ! important achter de :hover regel, zodat die niet 'overruled' wordt door later gedefinieerde styles.

Styles met een ! important rule kunnen blijkbaar alleen worden overschreven als die rule ook ! important bevat. :)
! important? :?
H'm weer wat geleerd, ik zag (vooral zag) mezelf toch meestal als een aardig CSS-kenner, maar hier heb ik nog nooit van gehoord.
Eens even nazoeken...

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:28

crisp

Devver

Pixelated

Topicstarter
wicher schreef op 10 oktober 2002 @ 00:58:
[...]

! important? :?
H'm weer wat geleerd, ik zag (vooral zag) mezelf toch meestal als een aardig CSS-kenner, maar hier heb ik nog nooit van gehoord.
Eens even nazoeken...
http://www.w3.org/TR/REC-CSS2/cascade.html#important-rules

Het is dus in dit geval het laatste:
Also, the third author rule will lose to the second author rule since the second rule is "!important". This shows that "!important" declarations have a function also within author style sheets.
Doordat de :hover een !important krijgt is hij belangrijker dan een inline style of een class die gezet of gewijzigd wordt.

Intentionally left blank


  • wicher|IA
  • Registratie: November 2000
  • Laatst online: 10-04-2023
Bedankt, alleen was ik via Google op exact hetzelfde adres terecht gekomen. :P

H'm interessant, zo'n !important.

Ik hoop ook dat het niet al te lang meer duurt voordat genoeg browsers dit soort spul snappen:
td > a[href] {
bla: nix;
}

Wat ik trouwens niet helemaal snap, is waarom die W3C-mensen in hun HTML-voorbeelden in de CSS2-uitleg niet even netjes XHTML aanhouden:
HTML:
1
2
3
4
5
6
7
8
9
<HEAD>
  <TITLE>Match H1 only</TITLE>
  <STYLE type="text/css">
    H1#z98y { letter-spacing: 0.5em }
  </STYLE>
</HEAD>
<BODY>
   <P id=z98y>Wide text</P>
</BODY>

Verwijderd

wicher schreef op 10 oktober 2002 @ 01:07:

Wat ik trouwens niet helemaal snap, is waarom die W3C-mensen in hun HTML-voorbeelden in de CSS2-uitleg niet even netjes XHTML aanhouden:
Omdat...
Cascading Style Sheets, level 1 (CSS1) became a W3C Recommendation in December 1996. It describes the CSS language as well as a simple visual formatting model. CSS2, which became a W3C Recommendation in May 1998....
....en XHTML was er pas een jaar later.

  • wicher|IA
  • Registratie: November 2000
  • Laatst online: 10-04-2023
Verwijderd schreef op 10 oktober 2002 @ 09:29:
[...]

Omdat...

[...]

....en XHTML was er pas een jaar later.
Okee, maar als ze nu tenminste consequent hoofd- of kleine letters hadden gebruikt...

Ik pas mijn pagina's echter (soms) aan aan een nieuwe standaard, maar zelfs de W3C zelf doet dat blijkbaar niet...

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

wicher schreef op 10 oktober 2002 @ 17:34:
Ik pas mijn pagina's echter (soms) aan aan een nieuwe standaard, maar zelfs de W3C zelf doet dat blijkbaar niet...
Denk dat dat een beetje veel werk is :)

Today's subliminal thought is:

Pagina: 1