Bonjour à tous,
aujourd'hui c'est le javascript qui me donne des cheveux blancs (ou les fait tomber, c'est selon...). ^^
Voici le problème : sur une page de mon site j'affiche des cadres en CSS (des div) à l'aide du code JS suivant :
Code : Tout sélectionner
function affichEtudes() {
document.getElementById('etudes1').style.visibility='visible';
document.getElementById('etudes1').style.marginBottom=15;
document.getElementById('etudes1').style.height=140;
i=2;
while (i<6) {
document.getElementById('etudes'+i).style.visibility='hidden';
document.getElementById('etudes'+i).style.height=1;
document.getElementById('etudes'+i).style.marginBottom=0;
i++;
}
}
function affichExper() {
document.getElementById('etudes2').style.visibility='visible';
document.getElementById('etudes2').style.marginBottom=15;
document.getElementById('etudes2').style.height=140;
i=1;
while (1<6) {
if (i == 2){
i++;
continue;
}
document.getElementById('etudes'+i).style.visibility='hidden';
document.getElementById('etudes'+i).style.height=1;
document.getElementById('etudes'+i).style.marginBottom=0;
i++;
}
}
Différents liens permettent d'afficher ou masquer ces cadres :
echo ' <a href="#" class="cv" onclick="affichEtudes();">'
.' Etudes'
.' </a>'
.'<div id="etudes1" style="position:relative;'
.' left:10px; top:10px;'
.' width:480px; height:1px; text-align:center; vertical-align:middle;'
.' background-color:#d6e4eb; margin-left:0; margin-bottom:0px;'
.' padding:auto; visibility:hidden; overflow:hidden;'
.' border:1px solid #637a84; z-index:2;">'
.' <p>'.$etude_txt.'<p>'
.'</div>'
.' <a href="#" class="cv" onclick="affichExper();">'
.' Expérience'
.' </a>'
.'<div id="etudes2" style="position:relative;'
.' left:10px; top:10px;'
.' width:480px; height:1px; text-align:center; vertical-align:middle;'
.' background-color:#d6e4eb; margin-left:0; margin-bottom:0;'
.' padding:auto; visibility:hidden; overflow:hidden;'
.' border:1px solid #637a84; z-index:3;">'
.' <p>'$exp_txt.'</p>'
.'</div>';
Pour condenser je n'ai mis en exemple que deux liens (il y en a cinq au total sur mon script d'origine), mais ça n'a pas d'incidence sur le résultat...
Bref, en l'état ce code fonctionne bien sur IE6 et 7, à savoir que les cadres s'intercalent entre les liens lorsqu'on clique sur ces derniers, avec le texte qui correspond à l'intérieur.
Par contre sur Firefox les cadres ne sont pas redimensionnés (ils gardent en hauteur la valeur indiquée dans la définition du calque, à savoir 1 pixel), comme cela devrait être le cas lorsqu'on clique sur un lien, ce qui fait que les textes à l'intérieur ne sont pas visibles (évidemment l'attribut overflow n'y est pas étranger, mais je ne veux pas qu'apparaissent dans les cadres des barres de défilement). Est-ce que la fonction "height" en javascript serait incompatible avec ce navigateur ?
Par ailleurs les cadres s'affichent bel et bien sous les liens, mais lorsqu'un cadre apparaît il se superpose aux liens qui sont en dessous, alors que l'effet souhaité serait de décaler les liens en dessous du cadre affiché (ce qui est effectivement le cas sur IE).
Ensuite j'ai encore un soucis, mais cette fois avec Opera. En effet ce dernier affiche correctement les cadres, de la même façon que IE, à la différence près que ceux-ci ne sont pas visible plus d'une seconde, après quoi ils disparaissent à nouveau. En fait j'ai l'impression qu'Opera rafraîchit les pages en continu et par conséquent réinitialise à l'état d'affichage par défaut, donc en "visible:hidden;". Est-ce en effet un comportement normal de ce navigateur ? Et si oui est-il possible de désactiver cela ?
Voilà, je bénis le jour qui verra naître des navigateurs capables d'interprêter uniformément le code, qu'il soit JavaScript, CSS ou autres...
Merci à vous pour tout renseignement susceptible de m'aider (ou non).
