Toon posts:

[HTML + JS] dynamisch afbeelding toevoegen aan layer

Pagina: 1
Acties:

Verwijderd

Topicstarter
Edit: laat maar, ik moet de headerbox position:relative meegeven. Dat had ik eigenlijk ook, maar haalde ik voor het voorbeeld eruit. Ook had headerbox een float:left. Hier bleek het aan te liggen. Echter: float:left heb ik wel nodig in mijn website voor deze headerbox. Dus wie kan me toch vertellen waarom het neit werkt als float:left in headerbox is aangezet?!

Oorspronkelijk bericht:
Ik heb de onderstaande code (het is een stukje geript uit een bestaande website, maar voor het gemak kleiner gemaakt).

Wat ik wil:
Je ziet een layer die weer 2 andere layers (top en icons), welke naast elkaar liggen, omsluit: headerbox.
Nu wil ik een afbeelding straks over deze 2 andere layers laten meebewegen als ik over bepaalde menu-items beweeg. (dat menu staat er nu niet bij, maar komt eronder te staan).
Ik dacht dus dat het handig was om na het laden, de afbeelding met createElement te realiseren en toe te kennen aan de omsluitende layer (headerbox) en deze dan absoluut te positioneren t.o.v. de headerbox. M.i. zou de afbeelding dan linksboven moeten komen te staan in de box, boven de andere 2 layers.

Nu werkt dit in Firefox prima, maar in IE 6.x krijg ik de afbeelding maar niet te zien.

Wie kan mij hier mee helpen of heeft de gouden hint?
Z-indexen mochten helaas niet baten.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Testbestand</title>
<script type="text/javascript">
function setArrow(){
    if(document.getElementById){
        var root = document.getElementById('headerbox');
        var el   = document.createElement('img');
        el.setAttribute('name','imgNavArrow');
        el.setAttribute('id','imgNavArrow');
        el.setAttribute('src','img/gif/navigatiepijl.gif');
        el.setAttribute('width','17px');
        el.setAttribute('height','14px');
        el.style.left   = 0+'px';
        el.style.top    = 0+'px';
        root.appendChild(el);
        el = null, root = null;     
    }
}   
</script>
<style type="text/css" media="all">
#headerbox{
    height:             70px;
    width:              747px;
    padding-top:            0px;
    padding-right:          0px;
    padding-bottom:         0px;
    padding-left:           0px;
    background-color:       #2b4d7c;    
    z-index:                8000;
}
#top{
    width:                  400px;
    height:                 70px;
    color:                  inherit;
    z-index:                7000;
}
#icons{
    width:                  202px;
    float:                  right;  
    background-image:       url(img/gif/stripe_bg1.gif);
    background-repeat:      repeat-y; 
    text-align:             right;
    padding-right:          15px;
    height:                 70px;
    z-index:                7000;
}
#imgNavArrow{
    position:               absolute;
    margin-top:             0px;
    margin-right:           0px;
    margin-bottom:          0px;
    margin-left:            1px;    
    padding-top:            0px;
    padding-right:          0px;
    padding-bottom:         0px;
    padding-left:           0px;
    z-index:                90000;
}
</style>
</head>

<body>
  <div id="headerbox">
   <div id="icons">&nbsp;</div>   
   <div id="top">&nbsp;</div>
  </div>
<br style="clear:both;" />
<a href="javascript:void(0);" onclick="setArrow();">pijltje</a>
</body>
</html>

[ Voor 16% gewijzigd door Verwijderd op 21-05-2006 19:47 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:18

crisp

Devver

Pixelated

Omdat een absoluut gepositioneerd element geplaatst wordt tov z'n offsetParent. Een offsetParent is een containing element welke niet static gepositioneerd is, dus een element met position: relative of absolute.
Als je je #headerbox geen position:relative (of absolute) geeft dan wordt je image dus gepositioneerd tov de body en loop je tevens tegen de beruchte IE z-index bug aan (in jouw opzet kan je overigens al die z-index CSS declaraties weglaten).

Verder: die clearing BR hoort m.i. in je #headerbox te staan en niet daarna - mooier is nog om dmv overflow:auto of hidden 'clearing' van je #headerbox te forceren.
name is deprecated voor images en ook overbodig
dit is ook fout; HTML numeric properties kennen geen maataanduiding:
JavaScript:
1
2
el.setAttribute('width','17px');
el.setAttribute('height','14px');

links (anchors) dienen voor navigatie, niet voor het uitvoeren van script. Het javascript: pseudo-protocol is ev0l
en heb je ook al eens aan preloading van je image gedacht?

oh, en dingen als:
Cascading Stylesheet:
1
2
3
4
padding-top:            0px;
padding-right:            0px;
padding-bottom:            0px;
padding-left:             0px;

kan je ook zo schrijven:
Cascading Stylesheet:
1
padding: 0;

maar elementen zoals div's en img's hebben standaard al geen margin of padding

Intentionally left blank


Verwijderd

Topicstarter
ok ok, bedankt voor de uitleg. Maar dit was ff een snel testbestand geript uit een hele site, vandaar dat er ook wat overbodige dingen instaan :) En relative stond al aan, maar doordat ik ook float:left erbij had, werkte het niet.

Die br stond er omdat ik ff op een nieuwe regel die link wilde plaatsen, niet om die div te clearen (ja dat zou ook nog moeten, maar dat doe ik op een andere manier). Bedankt!
links (anchors) dienen voor navigatie, niet voor het uitvoeren van script. Het javascript: pseudo-protocol is ev0l
Wat bedoel je nu precies? Ik snap idd dat een link daar niet voor bedoeld is, maar hoe roep ik dan een javascript aan nav een actie van de gebruiker? (en dit was een TEST).
Vandaar ook de CSS op deze manier.

Nog ff iets over IE 7 dan, ik vernam dat position:absolute niet langer ondersteund wordt, of is dat een fabeltje?

[ Voor 25% gewijzigd door Verwijderd op 21-05-2006 22:33 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:18

crisp

Devver

Pixelated

Verwijderd schreef op zondag 21 mei 2006 @ 22:31:
ok ok, bedankt voor de uitleg. Maar dit was ff een snel testbestand geript uit een hele site, vandaar dat er ook wat overbodige dingen instaan :) En relative stond al aan, maar doordat ik ook float:left erbij had, werkte het niet.
Dat is onzin, je kan een float ook prima een position:relative geven om het expliciet een offsetParent te maken voor eventuele absolute positioned child-elements.
Wat bedoel je nu precies? Ik snap idd dat een link daar niet voor bedoeld is, maar hoe roep ik dan een javascript aan nav een actie van de gebruiker? (en dit was een TEST).
Om de gebruiker duidelijk te maken dat een element een actie omvat anders dan linken naar een ander document dan gebruik je daarvoor doorgaans elementen zoals buttons. Je kan wel een anchor gebruiken maar dan moet je imo de href gebruiken voor een link naar een alternatief document voor non-JS capable/enabled browsers.
Nog ff iets over IE 7 dan, ik vernam dat position:absolute niet langer ondersteund wordt, of is dat een fabeltje?
dikke onzin. Wel is het zo dat de z-index bug in IE7 nog niet gefixed is.

Intentionally left blank


Verwijderd

Topicstarter
ok bedankt voor je informatie en uitleg! :)
vraag me toch af waarom het dan eerst met die float:left erbij niet werkte....