2009-02-16 5 views

Répondre

7

Il s'agit d'un bogue bien connu avec IE6 qui tente de positionner les divs de manière absolue au-dessus de certains contrôles.

Il existe des solutions de contournement impliquant des cales d'iframe, mais il n'y a pas de bonne réponse. La réponse d'iframe shim est de placer un iframe sous n'importe quel div que vous essayez de placer au-dessus d'un select, avec l'iframe étant la même taille. Malheureusement, c'est une énorme douleur dans le cul.

Je suggère d'utiliser un système de menu javascript qui utilise déjà des cales iframe, telles que YUI menus (et je suppose que jQuery).

2

Le problème est que SELECT sont des éléments "fenêtrés" dans IE6, et leur index z est au-dessus de tous les autres composants non "fenêtrés". Si vous devez absolument avoir quelque chose au-dessus d'une combox, vous pouvez le placer dans un autre composant fenêtré, tel qu'un IFRAME, et définir l'index z du composant pour qu'il soit supérieur à celui de la combobox.

Je dois admettre que ce n'est pas une belle solution.

7

La plupart des principales bibliothèques javascript ont des solutions faciles à mettre en œuvre pour résoudre ce problème. Nous utilisons jQuery, et le bgiframe plugin est très facile à utiliser et résout le problème.

+1

@jonstjohn - Génial! Cela a plutôt bien fonctionné - le seul problème restant avec l'utilisation du plugin bgiframe est que la bordure de la DIV que je possède est encore recouverte par les listes déroulantes. Ainsi, la partie principale du DIV apparaît au-dessus des listes déroulantes, mais la bordure noire (CSS - frontière: 2 px solid #cecece;) apparaît toujours sous les listes déroulantes. Avez-vous déjà rencontré ça? –

+0

Oops - Nevermind. Je RTFM et vu le "haut", "gauche", etc. –

+0

On dirait que "Top", "Left", etc. ne font rien. –

3

Daniel a certainement raison. C'est un problème moche.

Cependant, il peut y avoir une autre solution. Si vous utilisez des menus à plusieurs niveaux qui s'ouvrent et se ferment, il est possible d'écrire du code JavaScript qui cache littéralement les éléments SELECT problématiques lorsque le popup est ouvert (style l'élément pour avoir une visibilité de hidden). Ensuite, lorsque le menu se ferme, vous pouvez afficher le même contrôle SELECT.

Ensuite, il vous suffit d'écrire du code qui détecte quels objets SELECT obtiennent un menu particulier avant de s'ouvrir. Ce n'est pas un code trivial, mais c'est certainement possible d'écrire. Ensuite, je voudrais juste emballer le morceau entier de code dans un conditionnel qui vérifie pour voir si l'utilisateur est sur IE car il n'est pas nécessaire d'exécuter ceci sur Firefox ou Safari.