Avatar billede nicolailissau Nybegynder
30. november 2009 - 18:08 Der er 3 kommentarer og
1 løsning

Underlig opførsel med z-index

Hej Eksperter.

Jeg har et problem jeg ikke helt kan finde en forklaring på.

Kik på siden: http://www.lissau.org/eksperten/zindex.html

Hvis du klikker på den første stjerne vises der intet, klikker du på stjerne nummer 5, kommer der en advarsel.

Det er opdelt i to billeder, hvor billedet med de grå stjerne ligger nederst med z-index 1 og så ligger billedet med de gule stjerner med z-index 2. På billedet med de gule stjerner har jeg så brugt clip og så har jeg udover det, placeret 5 divs, der skal aktiveres hver for sig. Alle disse divs (som er stjerner) har z-index 3.

På trods af at divsne har højere z-index tal, kommer der ikke nogen advarsel når jeg klikker på stjerne 1 der bliver overlappet af det klippede billede.

Er det bare en dum fejl jeg har lavet eller hvordan?

Her er koden:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
#container {
    background:url(images/unrated.gif) no-repeat;
    z-index:1;
    width:85px;
    height:17px;
    margin:0px auto;
    margin-top:250px;
}
.star {
    width:17px;
    height:17px;
    z-index:3;
    float:left;
}
.clear {
    clear:both;
    width:0px;
    height:0px;
}
.rated {
    background: url(images/rated.jpg) no-repeat;
    position:absolute;
    clip:rect(0px, 50px, 17px, 0px);
      height:170px;
      width:85px;
    z-index:2;
}
</style>
</head>
<body>
<div id="container" onmouseout="resetRating()">
<div id="rated" class="rated"></div>
<div id="x1" class="star" onmouseover="rating(1)" onclick="alert(this.id)"></div>
<div id="x2" class="star" onmouseover="rating(2)"></div>
<div id="x3" class="star" onmouseover="rating(3)"></div>
<div id="x4" class="star" onmouseover="rating(4)"></div>
<div id="x5" class="star" onmouseover="rating(5)" onclick="alert(this.id)"></div>
</div>
<div style="clear:both; height:0px; width:0px;"></div>
</body>
</html>
Avatar billede FrederikBache Nybegynder
30. november 2009 - 22:31 #1
z-index kommer kun i spil hvis det pågældende element har position:absolute. Desuden ville de gule stjerner være usynlige hvis de grå lå over de gule. Du kan ikke både vise de gule øverst og samtidig lytte på click på de grå.

I stedet ville jeg have en class på de stjerner der skulle være gule, og så i css sætte baggrundsbilledet til den gule stjerne for de stjerner der har den class. Så vil dine onclicks også virke.
Avatar billede nicolailissau Nybegynder
01. december 2009 - 12:59 #2
Hej FrederikBache og tak for svar.

Hvis du kigger på min kode, så er de også placeret absolute. Og jeg har heller ikke onclick på de grå stjerner. De grå stjerner er baggrunds billedet for container div'et.

Hvis du kigger på dette lille eksempel:
http://www.lissau.org/eksperten/testZindex.html
Så synes jeg bare at når de divs der bliver til gule stjerner har højere z-index, burde jeg kunne kalde onclick på dem?

Mvh
Avatar billede FrederikBache Nybegynder
01. december 2009 - 17:32 #3
Var nok lidt hurtig der, havde ikke set det med de grå stjerner.

Problemet er dog stadig at de divs med klassen .star ikke er positioneret absolut.
Løsningen er at wrappe de 5 stjerner med en div, der er positioneret absolut og som har z-index 3. Du bør også sætte position relative på div.container. Det burde løse det.

Dvs.


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
#container {
    background:url(images/unrated.gif) no-repeat;
    width:85px;
    height:17px;
    margin:0px auto;
    margin-top:250px;
    position:relative;
}
.stars{
    position:absolute;
    top:0px;
    left:0px;
    z-index:3;
}
.star {
    width:17px;
    height:17px;
    float:left;
}
.clear {
    clear:both;
    width:0px;
    height:0px;
}
.rated {
    background: url(images/rated.jpg) no-repeat;
    position:absolute;
    clip:rect(0px, 50px, 17px, 0px);
      height:170px;
      width:85px;
    z-index:2;
}
</style>
</head>
<body>
<div id="container" onmouseout="resetRating()">
<div id="rated" class="rated"></div>
<div class="stars">
<div id="x1" class="star" onmouseover="rating(1)" onclick="alert(this.id)"></div>
<div id="x2" class="star" onmouseover="rating(2)"></div>
<div id="x3" class="star" onmouseover="rating(3)"></div>
<div id="x4" class="star" onmouseover="rating(4)"></div>
<div id="x5" class="star" onmouseover="rating(5)" onclick="alert(this.id)"></div>
</div>
</div>
<div style="clear:both; height:0px; width:0px;"></div>
</body>
</html>
Avatar billede nicolailissau Nybegynder
02. december 2009 - 22:46 #4
Ah Ja ! Det med en wrapper.. Smart :) Havde jeg ikke lige tænkt på.

Jeg takker mange gange, point på vej :)
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