Avatar billede kryderbolle Nybegynder
09. november 2010 - 12:07 Der er 13 kommentarer og
1 løsning

Forklaring på problem med at overstyre css

Jeg har lidt problemer med at forstå hvorfor nogle af mine styles ikke bliver påført. Jeg har lavet dette lille eks:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
<style type="text/css">
.boxtxt, .boxtxt a:link, .boxtxt a:visited, .boxtxt a:active, boxtxt a:hover{
  font-size:11px;
  font-family: Verdana, arial, helvetica, sans-serif;
  font-style: normal;
  line-height: 13pt;
  font-weight:normal;
  text-transform: normal;
  text-decoration: none;
  color:#595f5d;
}
.boxtxt a:hover{
  text-decoration: underline;
}
.linkStyle1{
  font-size:20px;
}
.linkStyle2{
  font-size:24px !important;
}
</style>

</head>
<body>
<div class="boxtxt">
Her er noget tekst!!<br>
<a href="/side.htm">link 1</a><br>
<a href="/side.htm" class="linkStyle1">link 2</a><br>
<a href="/side.htm" class="linkStyle2">link 3</a><br>
<a href="/side.htm" class="linkStyle2" style="font-size:30px ;">link 4</a><br>
<a href="/side.htm" class="linkStyle2" style="font-size:30px !important;">link 5</a><br>
</div>

</body>
</html>

For at tage dem en af gangen:
Link 1: er som jeg havde forventet.
Link 2: har classen linkStyle1 (med size 20px), men den bliver ikke påført. Istedet bibeholder den stylen som sættes via parent elementet (boxtxt a:link)
Link 3: er som Link 2 men dennes class har !important på size og derfor virker den.
Link 4: er som link 3, men med inline style. Men inline style bliver ikke påført fordi classen er !important. Jeg ville mene at inline var vigtigere uanset hvad classen er sat til. Men jeg kan god lidt forstå hvorfor classen bliver påført og ikke inline.
Link 5: som Link 4 men med !important på inline style og derfor virker den.

Mit problem ligger i at forstå hvorfor Link 2 ikke fungere. Den har en class, men får stadig påført det der er sat via parent.

At jeg så kan løse det med !important er fint, men har jeg en untagelse til reglen, og vil påføre den inline skal man huske !important her også. Men det er selvfølgelig noget man bare må huske.

Men som sagt. Er der nogen der kan forklare mig hvorfor Link 2 ikke virker, og kan man få den til det UDEN brug af !important?
Avatar billede webweaver Praktikant
09. november 2010 - 12:45 #1
Fordi at du laver din CSS forkert.

Når du skal påvirke et link, ser det således ud;

div.boxtxt, a:link, a:visited, a:active, a:hover {
Det påvirker alle a tags uden en class.

Hvis du vil have en class med, ser det således ud,
div.boxtxt, a.boxtxt:link, a.boxtxt:visited, og så videre ..{

For at få din style til at virke på link 2, skal du vise at du vil have den på a elementet.

.linkStyle1{
  font-size:20px;
}

rettes til

a.linkStyle1{
  font-size:20px;
}
Avatar billede Springform Nybegynder
09. november 2010 - 12:46 #2
Problemet ligger i at links ikke helt opføre sig som alm. text, prøv istedet at skrive

a.linkStyle2, du kan også definere de forskellige "version" af dit link ved at bruge følgende:

a:link.linkStyle
a:active.linkStyle
a:visited.linkStyle
a:hover.linkStyle
Avatar billede Springform Nybegynder
09. november 2010 - 12:49 #3
Som oven over:

.linkStyle a:link{}
.linkStyle a:active{}
.linkStyle a:visited{}
.linkStyle a:hover{}
Avatar billede kryderbolle Nybegynder
09. november 2010 - 13:26 #4
Det ser sku konge ud. Tak for den afklaring :)

Et lille bemærkning til A tags. Nu har jeg kun lavet dette style i min test:
a.linkStyle3:link {
  font-size:20px;
}

Og det påføre fint den rigtige størrelse, MEN da jeg ikke har active/hover/visited med, så forventede jeg faktisk at den ville falde tilbage til størrelse 11px når jeg holdt musen over linket, men det gør den ikke. Den bibeholder størrelse 20, som jeg selvfølgelig også ønsker den skal.

Er :link en global angivelse, og behøver man kun active/hover/visited, hvis man ønsker at ændre stylen for dem?

Jeg kan jo spare meget tekst, da stylen er ens for alle, bortset fra :hover, der skal have underline på. Men det klares nemt med en global:
a:hover{
  text-decoration: underline;
}

Du må gerne smide et svar webweaver.
Avatar billede webweaver Praktikant
09. november 2010 - 13:54 #5
Hvis du har samme style på link, active, visited, kan du nøjes med bare at skrive a.

a.boxtxt {
...
}

a.boxtxt:hover {
...
}

Tak for point :)
Avatar billede kryderbolle Nybegynder
09. november 2010 - 13:58 #6
... Lige meget med :link spørgsmålet. Fandt selv ud af det.
Jeg sad i FF og den påfører åbentbart :link på alle "niveauer" (:link,:active,:hover:visited), men det gør IE ikke.

Så der skal fuld liste for at det virker i alle browsers.

Så min kode blev til:

a.linkStyle3:link, a.linkStyle3:visited , a.linkStyle3:hover , a.linkStyle3:active{
...
}
Avatar billede webweaver Praktikant
09. november 2010 - 14:02 #7
Hvis du nøjes med at skrive a.boxtxt virker det fint i alle browsere :)

a:link bør kun give style på en af dem, som I IE, da du jo kun refererer til den ene. :)
Avatar billede kryderbolle Nybegynder
09. november 2010 - 14:30 #8
webweaver

Nope. Det virker ikke i mine :(

Jeg lavet denne test:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
<style type="text/css">
.boxtxt, a.boxtxt{
  font-size:11px;
  font-family: Verdana, arial, helvetica, sans-serif;
  font-style: normal;
  line-height: 13pt;
  font-weight:normal;
  text-transform: normal;
  text-decoration: none;
  color:red;
}
a:hover{
  text-decoration: underline;
}
a.linkStyle1{
  font-size:20px;
}
a.linkStyle2{
  font-size:25px;
}
a.linkStyle3{
  font-size:30px;
}
</style>
</head>
<body>
<div class="boxtxt">
Her er noget tekst!!<br>
<a href="/side.htm">link 1</a><br>
<a href="/side.htm" class="linkStyle1">link 2</a><br>
<a href="/side.htm" class="linkStyle1">link 3</a><br>
<a href="/side.htm" class="linkStyle2">link 3</a><br>
<a href="/side.htm" class="linkStyle3">link 3</a><br>
</div>

</body>
</html>

Links skifter fint størrelse (pga. a.linkStyle3), men alle links er blå (som jo er default farve), og har derfor ikke arvet boxtxt stylen.
Avatar billede kryderbolle Nybegynder
09. november 2010 - 14:36 #9
Det er måske det med at jeg har en div med class'en boxtxt, som har links, som har classes.

Så det burde vel være .boxtxt.a (men det virker heller ikke)
Avatar billede webweaver Praktikant
09. november 2010 - 14:39 #10
Det virker fint i dine browsere også. :)
Det er klart at det ikke virker hos dig.
Du giver den jo en class?

.boxtxt, a.boxtxt{


betyder du skal skrive <a class="boxtxt" for at bruge den style.

Hvis du skriver den uden class hos dig, virker det fint som det skal.

.boxtxt, a {
Avatar billede webweaver Praktikant
09. november 2010 - 14:44 #11
"Så det burde vel være .boxtxt.a (men det virker heller ikke)"

Nej. Det er dine egne metoder du opfinder. Det er gætværk. Hold dig til hvad jeg fortæller dig, og så vil det også virke :-)
Avatar billede kryderbolle Nybegynder
09. november 2010 - 14:55 #12
Skulle måske lige sige det er til en tag-cloud :)

Jeg vil jo netop giver hvert link sin selvstændige størrelse, hvorfor hvert link skal have en style (via class). Så derfor kan jeg ikke undvære min class på links :(

Så det jeg vil, er at have en container (min div), hvor jeg viser 10 links. 2 af dem skal have størrelse 20. 3 skal have størrelse 16, og de sidste 5 størrelse 13.

Så min kode er:
<div class="tagCloud">
  <a href="sideXX.htm" class="tagCloudSize1">Tag 1</a>
  <a href="sideXX.htm" class="tagCloudSize3">Tag 2</a>
  <a href="sideXX.htm" class="tagCloudSize2">Tag 3</a>
  <a href="sideXX.htm" class="tagCloudSize1">Tag 4</a>
  ...
</div>

Så via tagCloud klassen, vil jeg definere alle under-links style (font type, farve...). Også kun styre størrelsen via classen på linket.

Altså noget ala:
.tagCloud.a {color:red;font-weight:normal ... osv...}
a.tagCloudSize1{ font-size: 20px; }
a.tagCloudSize1{ font-size: 16px; }
a.tagCloudSize1{ font-size: 13px; }

Men det er jeg så nød til at skrive på denne måde:
.tagCloud a:link, .tagCloud a:hover, .tagCloud a:active, .tagCloud a:visited{color:red;font-weight:normal ... osv...}
Avatar billede webweaver Praktikant
09. november 2010 - 15:07 #13
Jeg kan nu ikke se hvorfor du ikke kan bruge det andet, som jeg vist før. Det virker fint hos mig. Samme style, men forskellige størrelser på hvert link.

Du skal jo ikke undvære den class som angiver størrelsen, men den class som angiver farve, font og så videre ...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Untitled</title>
<style type="text/css">
.boxtxt, a {
  font-size:11px;
  font-family: Verdana, arial, helvetica, sans-serif;
  font-style: normal;
  line-height: 13pt;
  font-weight:normal;
  text-transform: normal;
  text-decoration: none;
  color:red;
}
a:hover{
  text-decoration: underline;
}
a.linkStyle1{
  font-size:20px;
}
a.linkStyle2{
  font-size:25px;
}
a.linkStyle3{
  font-size:30px;
}
</style>
</head>
<body>
<div class="boxtxt">
Her er noget tekst!!<br>
<a href="/side.htm">link 1</a><br>
<a href="/side.htm" class="linkStyle1">link 2</a><br>
<a href="/side.htm" class="linkStyle1">link 3</a><br>
<a href="/side.htm" class="linkStyle2">link 3</a><br>
<a href="/side.htm" class="linkStyle3">link 3</a><br>
</div>

</body>
</html>


Giver det ikke det resultat du søger? Ellers har jeg misforstået noget.
Avatar billede kryderbolle Nybegynder
10. november 2010 - 09:06 #14
Kan godt se hvad du gør der...

Du sætter stylet til boxtxt OG a (global). Men jeg har mange andre links på siden, som ikke skal have det style.

Så det den skal, er at alle <a> i div'en, som har class="boxtxt", skal have sat stylet.

Men... jeg tror jeg har fundet ud af det. Jeg var på rette vej med .tagCloud.a. Der skal bare ikke punktum før "a". Det er jo standard i programmering at man skriver funk.funk.funk(), hvis man vil til "under elementer", så jeg regnede med det også var sådan i CSS. Men det er det åbentbart ikke altid. Så det skal bare være .tagCloud a. Så det lader til at virke:

.boxtxt, .boxtxt a { .. }

Personlig synes jeg så det er forvirrende at man kan bruger:
HTMLElement.className{}

Men ikke:
.ClassName.HTMLElement (det skal være .ClassName(space)HTMLElement)

Jeg skal vist have fundet en dybdegående artikkel om hvordan man travasere elementer i CSS, for det virker forvirende på mig lige nu :(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester