Bug : Marquee et display none

HTML5, CSS3, Javascript, support des mobiles... Que penser de votre site ? Vous manquez d'informations pour la construction d'un site qui puisse s'afficher correctement partout ? C'est un problème simple, un peu complexe ? Venez ici !
Thierry.l

Bug : Marquee et display none

Message par Thierry.l »

Bonjour,
il y a un problème avec Firefox, lorsqu'un marquee se trouve dans un bloc 'display: none' ou un iframe 'display: none', lorsqu'un javascript transforme ce bloc en 'display: block', le marquee ne démarre pas.
Exemple : le site http://www.accueil-paysan-dordogne.com utilise la thickbox avec un iframe (défini en display:none au départ), lorsque la page du iframe est chargée et devient visible, le marquee ne démarrerait pas si il n'y avait pas un changement de 'location' après l'événement onload.

La même chose se passe avec un <div id='test' style="display: none; ..."><marquee ...></marquee></div>
qui deviendrait actif par un évènement onMouseOver, onClick, ...
La ruse est dans ce cas de laisser le bloc en "visibility: hidden; display: block" le temps du chargement de la page, puis d'utiliser un timeout lors du onload pour basculer tous les blocs en "display: none" (le timeout est obligatoire car l'événement onload arrive trop tôt par rapport à la gestion de firefox sur cette partie), exemple http://www.paysdeneuvic24.com
L'inconvénient, c'est qu'un bloc 'display: block; visibility: hidden' prend toujours de la place dans une page et que si on utilise pas un 'position: absolute' pour le mettre à un endroit particulier, on obtient un ascenseur inutile.


Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13
Avatar de l’utilisateur
jpj
Animal mythique
Messages : 25261
Inscription : 01 août 2005, 15:38

Message par jpj »

Bonsoir,

Je suppose qu'il s'agit de tes sites. Je déplace dans "Développement web".
► Si votre problème est [Résolu], svp, marquez-le.
► Pas de support par mp, l’aide se fait sur le forum.
Thierry.l

Message par Thierry.l »

oui et non, mes sites fonctionnent sur IE6/7 et Firefox,
le problème n'est pas lié à mes sites, mais bien à Firefox.
Si j'ai cité ces sites, c'était essentiellement pour donner de la matière aux experts de Firefox, bien que le principe soit simple.
L'usage de CSS dans les javascript est de plus en plus commun, or dans le cas où un 'marquee' apparait dans un bloc 'display: none' au chargement de la page et que l'on souhaite le faire apparaitre sur un événement particulier, le 'marquee' ne fonctionne pas avec Firefox, alors qu'il fonctionne avec d'autres navigateurs.
C'est donc bien l'interprétation que fait Firefox de cette combinaison, qui est un problème et qui aujourd'hui oblige à bidouiller.
Il n'y a aucun problème de fonctionnement si il n'y a pas de marquee ou que le bloc est 'normal', même si celui-ci devient 'display: none' après le chargement de la page.
A moins qu'il ne s'agissent d'un paramètre de configuration de Firefox, qui positionné pour optimiser la CPU désactive un marquee si il ne peut être visualisé, mais le problème reste entier, le fonctionnement n'est pas conforme à ce que l'on attend (notez que le fait d'agir sur scrollamount ou scrolldelay est sans effet dans le cas pré-cité, le marquee ne déroule rien).


Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13
Benoit
Administrateur
Messages : 4894
Inscription : 19 juil. 2003, 10:59

Message par Benoit »

Attention, le fait même d'utiliser marquee est un bidouillage, c'est un élément dont le comportement n'est spécifié nulle part, même pas dans le brouillon de HTML5 (il est juste précisé que les navigateurs doivent s'attendre à tomber dessus sur certaines pages).
♫ Li tens s'en veit, je n'ai riens fais ;
Li tens revient, je ne fais riens. ♪
Thierry.l

Message par Thierry.l »

Sans doute, sans doute (W3C - developer.mozilla.org),
mais bon, c'est quand même galère d'avoir tout le temps des différences.
Cependant, en utilisant start() et stop(), ça fonctionne sans se prendre la tête, donc je vais en rester là pour mon cas personnel, il me semble cependant qu'il y a un truc à voir pour les développeurs de Firefox.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13
Invité

Message par Invité »

Thierry.l a écrit : Cependant, en utilisant start() et stop(), ça fonctionne sans se prendre la tête
Heu, en fait non, si pour le second site, cela fonctionne sans problème,
pour le premier cela ne fonctionne que avec l'utilisation d'un timeout, c'est assez curieux.

Code : Tout sélectionner

 function recharge()   
 { 
   obj=cbeGetElementById("diapo")
   if (obj)
     {    	
     obj.scrollAmount = 3;    	
     obj.start();    	
     }
 }
 window.onload=recharge; 
...
</head>   
...
<marquee id="diapo" scrollamount=3 ...
...
plante avec 'obj.start is not a function'
alors que

Code : Tout sélectionner

function demarre()
  { 
  timeoutID = window.setTimeout("recharge()",1);
  }
  
 function recharge()   
 { 
   obj=cbeGetElementById("diapo")
   if (obj)
     {    	
     obj.scrollAmount = 3;    	
     obj.start();    	
     }
 }
 window.onload=demarre;
fonctionne parfaitement.
C'est comme si la construction de l'objet marquee ne se terminait que après l'événement onload.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.0; fr; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14
Invité

Message par Invité »

Anonymous a écrit :C'est comme si la construction de l'objet marquee ne se terminait que après l'événement onload
C'est probablement exact, étant donné que le comportement de l'élément est défini via XBL.
Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 4 invités