Avatar billede mrbs Nybegynder
26. september 2006 - 13:58 Der er 27 kommentarer og
1 løsning

Link skal fylde en hel div

Jeg har en div med dimensionerne 170x169.
I den skal der stå en tekst som fungerer som link.

Hvordan får man hele div'en til at fungere som link - altså at man kan klikke hvor som helst i div-blokken?

Den skal også skifte baggrunds-billede når musen er over.

Her er hvad jeg har lavet hidtil:


.spotsNormal{
width:170px;
height:169px;
float:left;
background-image:url(../images/spot_out.gif);
font-family:verdana, sans-serif;
font-size:9pt;
}

div.spotsNormal:hover{
background-image:url(../images/spot_over.gif);
display:block;
}

.spotsNormal a:link{
color:#616161;
text-decoration:none;
}
.spotsNormal a:visited{
color:#616161;
text-decoration:none;
}
.spotsNormal a:hover{
color:#616161;
text-decoration:none;
}
.spotsNormal a:active{
color:#616161;
text-decoration:none;
}
Avatar billede hmm10 Nybegynder
26. september 2006 - 14:11 #1
Kan du ikke blot tilføjre onclick="location.href='side.htm';" ?
Avatar billede roenving Novice
26. september 2006 - 14:14 #2
:hover virker kun i css2-browsere (hvilket f.eks. ikke omfatter IE !-) på andre elementer end a-tags, så du må over i onmouseover/-out og onclick, som hmm10 skriver !-)
Avatar billede olebole Juniormester
26. september 2006 - 14:20 #3
<ole>

- og ellers er det også muligt at skrive noget à la:

<style type="text/css">
a, a:visited {background: yellow}
a:hover {background: red}
</style>

<div style="width:300px;height:200px">
    <a href="#" style="width:100%;height:100%;display:block">LINK</a>
</div>

Om det så er smart, kommer anpå, hvad du skal lave  :)

/mvh
</bole>
Avatar billede roenving Novice
26. september 2006 - 14:25 #4
-- og det skal så også bemærkes, at den metode kan give problemer, hvis man angiver en højde på div'en, som er større end linkets !-)
Avatar billede Slettet bruger
26. september 2006 - 14:28 #5
Eller blot benytte sig af <a> i stedet for en <div>

<style type="text/css">
a, a:visited {background: yellow}
a:hover {background: red}
</style>

<a style="display:block;width:300px;height:200px" href="#" style="width:100%;height:100%;display:block">LINK</a>
Avatar billede Slettet bruger
26. september 2006 - 14:28 #6
<style type="text/css">
a, a:visited {background: yellow}
a:hover {background: red}
</style>

<a style="display:block;width:300px;height:200px" href="#">LINK</a>

Der var den ;o)
Avatar billede mrbs Nybegynder
26. september 2006 - 14:30 #7
Jeg vender lige tilbage med svar til det der fungerer bedst!
Tak!
Avatar billede karmicmind Nybegynder
26. september 2006 - 14:31 #8
Simpelt...

a {
display:block;
height: 100%
}
Avatar billede olebole Juniormester
26. september 2006 - 14:33 #9
roenving (26/09-2006 14:25:30) >> men gør man da det, hvis linket skal fylde hele div'et?  =)

karmicmind >> Nej, det link fylder ikke hele div'et. Havde du i stedet skrevet hele mit eksempel af, ville det have virket, som ønsket  ;o)
Avatar billede olebole Juniormester
26. september 2006 - 14:35 #10
karmicmind >> doohhhh ... jeg sover. Selvfølgelig er det nok at angive højden  ;o)
Avatar billede karmicmind Nybegynder
26. september 2006 - 14:39 #11
Jeg har skam testet det af før jeg postede det.. ;)
Avatar billede mrbs Nybegynder
26. september 2006 - 14:42 #12
a {
display:block;
height: 100%
}

er godt, men hvordan sørger jeg for at baggrundsbilledet i div'en skifter?
Avatar billede karmicmind Nybegynder
26. september 2006 - 14:45 #13
Det kan du ikke i IE.. Du ka skifte det i linket istedet..

a:hover {
background-image: url('baggrund.jpeg');
}
Avatar billede mrbs Nybegynder
26. september 2006 - 14:57 #14
Det giver imidlertid bare det problem, at jeg ikke kan rykke rundt på teksten (linket) i den pågældende div uafhængigt af baggrunden.
Avatar billede mrbs Nybegynder
26. september 2006 - 14:58 #15
Jeg tror jeg må tilbage til onmouseover/-out og onclick
Avatar billede Slettet bruger
26. september 2006 - 15:02 #16
Du kan da sagtens have en <div> indeni linket, som du rykker rundt med.
Avatar billede karmicmind Nybegynder
26. september 2006 - 15:03 #17
Du ka sætte den omsluttende div's overflow til hidden og bruge padding på linket til at flytte teksten

div {
  overflow: hidden;
}
div a {
  display:block;
  height: 100%
  padding: 3px 5px;
}
div a:hover {
  background-image: url('baggrund.jpeg');
}
Avatar billede karmicmind Nybegynder
26. september 2006 - 15:04 #18
@wicez > Jeg tror ikke det vil validere..
Avatar billede mrbs Nybegynder
26. september 2006 - 15:11 #19
Sejt! Det virker spm det skal!!

Takker!

Mads
Avatar billede Slettet bruger
26. september 2006 - 15:32 #20
Min vil validere fint. Så længe <a>'en er et block-element, må du smide alle elementer ind i den.
Avatar billede karmicmind Nybegynder
26. september 2006 - 15:43 #21
@wicez > må jeg se den kode du validerer..?
Avatar billede Slettet bruger
26. september 2006 - 20:01 #22
Det er den her kode:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>734738</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
a, a:visited {background: yellow; display: block;}
a:hover {background: red; display: block;}
</style>
</head>

<body>

<a style="width:300px;height:200px" href="#">
  <p style="margin-left: 20px;">LINK</p>
</a>
</body>
</html>


Da <a>  har display: block, vil jeg gå ud fra, at det regnes for et block-element.
Hvis dette ikke er tilfældet beklager jeg min påståelighed. :)
Avatar billede karmicmind Nybegynder
27. september 2006 - 02:28 #23
@wicez > Det undrer mig lidt at du ikke bare selv prøvede at validere den.. Her er hva jeg får fra http://validator.w3.org/

Error  Line 15 column 31: document type does not allow element "P" here; missing one of "APPLET", "OBJECT", "MAP", "IFRAME", "BUTTON" start-tag.

Du ka læse hvorfor på http://www.htmlhelp.com/reference/html40/special/a.html
Avatar billede Slettet bruger
27. september 2006 - 09:44 #24
Jeg prøvede at validere - Det er derfor jeg kommenterede det sidst i min kommentar.

Det ville dog ikke være første gang validatoren ikke validerer korrekt, og ud fra fejlmeddelelsen, ville jeg vurdere at der ikke var noget problem, da <a>-elementet jo netop vises som et block-element.

Alternativt kan man du lave scriptet sådan:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>734738</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style type="text/css">
a, a:visited {background: yellow; display: block;}
a:hover {background: red; display: block;}
</style>
</head>

<body>

<a style="width:300px;height:200px" href="#">
  <span style="display:block;margin-left: 20px;">LINK</span>
</a>
</body>
</html>


Den vil validere, og vil altid vises på præcis sammen måde som ovenstående.
Avatar billede karmicmind Nybegynder
27. september 2006 - 10:01 #25
Det at <a> kun kan indeholde inline-elementer har intet med CSS at gøre.. HTML-koden blir valideret uafhængigt at evt. CSS-kode, og det bør den også.. <a> er pr. definition et inline-element uanset hva CSS-koden siger..

og ja, man ka da også gøre det med et <span> element, men hva er semantikken i det..?
Avatar billede Slettet bruger
27. september 2006 - 10:14 #26
Når <span>'en vises som et block-element, vil det jo fungere præcis som <p>'en, hvilket jo netop er det der er brug for her.
Jeg kan mærke at du sandsynligvis er en del mere kompetent indenfor html og css end jeg er, så jeg vil ikke virke påståelig ;o)
Avatar billede olebole Juniormester
27. september 2006 - 11:19 #27
I princippet er der ikke noget i vejen for at indskrive et block element i et 'inline' element, hvis dette ellers er gjort til et block element. Om løsningen er i stand til at please en 'tilfældig' validator (som i tidens løb har indholdt bunker af fejl), er mindre interessant.
Der er praktiske årsager til, man ikke må anbringe et block element i et inline element. Det er det, man bør forholde sig til ... ikke, hvad et tilfældigt stykke software mener  ;o)

Nu giver det i øvrigt slet ikke mening at validere på eksemplet (27/09-2006 09:44:49), da DTD'en ikke holder vand. Er den mon 'Trans' eller 'Strict' ... hmmmm ...?!??!!!
Hvis validatoren opfattede DTD'en som 'Strict', ville den ikke som det første brokke sig over p-elementet i a-elementet - men derimod fortælle, at et inline-element (a-elementet) ikke kan være child af body-elementet. Det kan kun block elementer  :)
Avatar billede Slettet bruger
27. september 2006 - 12:46 #28
Så jeg var ikke helt forkert på den, selvom jeg har en forkert doctype? ;o)
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