Dans IE, la liste déroulante prend la même largeur que la dropbox (j'espère avoir du sens) alors que dans Firefox, la largeur de la liste déroulante varie en fonction du contenu.
Cela signifie essentiellement que je dois m'assurer que la boîte de dépôt est suffisamment large pour afficher la sélection la plus longue possible. Cela rend ma page très moche :(
Existe-t-il une solution de contournement pour ce problème? Comment puis-je utiliser CSS pour définir différentes largeurs pour la boîte de dépôt et la liste déroulante?
la source
width: auto !important;
Créer votre propre liste déroulante est plus pénible que cela ne vaut la peine. Vous pouvez utiliser du JavaScript pour faire fonctionner la liste déroulante IE.
Il utilise un peu de la bibliothèque YUI et une extension spéciale pour réparer les boîtes de sélection IE.
Vous devrez inclure les éléments suivants et envelopper vos
<select>
éléments dans un<span class="select-box">
Mettez-les avant la balise body de votre page:
Modification de l'acceptation de la publication:
Vous pouvez également le faire sans la bibliothèque YUI et le contrôle Hack. Tout ce que vous avez vraiment à faire est de mettre un onmouseover = "this.style.width = 'auto'" onmouseout = "this.style.width = '100px'" (ou ce que vous voulez) sur l'élément select. Le contrôle YUI lui donne cette belle animation mais ce n'est pas nécessaire. Cette tâche peut également être accomplie avec jquery et d'autres bibliothèques (bien que je n'ai pas trouvé de documentation explicite pour cela)
- amendement à l'édition:
IE a un problème avec le onmouseout pour les contrôles de sélection (il ne considère pas que le survol de la souris sur les options est un survol de la souris sur la sélection). Cela rend l'utilisation d'une sortie de souris très délicate. La première solution est la meilleure que j'ai trouvée jusqu'à présent.
la source
vous pouvez simplement essayer ce qui suit ...
J'ai essayé et ça marche pour moi. Rien d'autre n'est requis.
la source
J'ai utilisé la solution suivante et elle semble bien fonctionner dans la plupart des situations.
Remarque: le $ .browser.msie nécessite jquery.
la source
@Thad vous devez également ajouter un gestionnaire d'événements de flou
Cependant, cela élargira toujours la boîte de sélection au clic, au lieu de seulement les éléments. (et cela semble échouer dans IE6, mais fonctionne parfaitement dans Chrome et IE7)
la source
Il n'y a aucun moyen de le faire dans IE6 / IE7 / IE8. Le contrôle est dessiné par l'application et IE ne le dessine tout simplement pas de cette façon. Votre meilleur pari est d'implémenter votre propre liste déroulante via un simple HTML / CSS / JavaScript s'il est si important d'avoir la liste déroulante d'une largeur et la liste d'une autre largeur.
la source
Si vous utilisez jQuery, essayez ce plugin IE select width:
http://www.jainaewen.com/files/javascript/jquery/ie-select-style/
L'application de ce plugin donne l'impression que la boîte de sélection dans Internet Explorer fonctionne comme elle le ferait dans Firefox, Opera, etc. en permettant aux éléments d'option de s'ouvrir en pleine largeur sans perdre l'apparence et le style de la largeur fixe. Il ajoute également la prise en charge du remplissage et des bordures sur la zone de sélection dans Internet Explorer 6 et 7.
la source
Dans jQuery, cela fonctionne assez bien. Supposons que la liste déroulante a id = "dropdown".
la source
Voici la solution la plus simple.
Avant de commencer, je dois vous dire que la boîte de sélection déroulante se développera automatiquement dans presque tous les navigateurs sauf IE6. Donc, je ferais une vérification du navigateur (c'est-à-dire IE6) et n'écrirais ce qui suit que dans ce navigateur. Voilà. Vérifiez d'abord le navigateur.
Le code élargit comme par magie la zone de sélection déroulante. Le seul problème avec la solution est que sur la souris, la liste déroulante sera étendue à 420px, et parce que le débordement = hidden, nous masquons la taille de la liste déroulante étendue et l'afficherons comme 170px; ainsi, la flèche sur le côté droit du ddl sera masquée et ne pourra pas être vue. mais la boîte de sélection sera étendue à 420px; c'est ce que nous voulons vraiment. Essayez simplement le code ci-dessous et utilisez-le si vous l'aimez.
Ce qui précède est le CSS IE6. Le CSS commun pour tous les autres navigateurs doit être comme ci-dessous.
la source
si vous voulez un menu déroulant et / ou volant simple sans effets de transition, utilisez simplement CSS ... vous pouvez forcer IE6 à prendre en charge: survolez tous les éléments à l'aide d'un fichier .htc (css3hover?) avec un comportement (propriété IE6 uniquement) défini dans le fichier CSS attaché conditionnellement.
la source
Vérifiez ceci .. ce n'est pas parfait mais cela fonctionne et c'est pour IE seulement et n'affecte pas FF. J'ai utilisé le javascript normal pour onmousedown pour établir IE only fix .. mais le msie de jquery pourrait également être utilisé dans onmousedown .. l'idée principale est le "onchange" et le flou pour que la boîte de sélection revienne à la normale .. Décidez de votre propre largeur pour ceux-ci. J'avais besoin de 35%.
la source
La réponse de BalusC ci-dessus fonctionne très bien, mais il y a un petit correctif que j'ajouterais si le contenu de votre liste déroulante a une largeur plus petite que ce que vous définissez dans votre CSS select.expand, ajoutez ceci à la liaison mouseover:
la source
C'est quelque chose que j'ai fait en prenant des morceaux de trucs d'autres personnes.
où cboEthnicity et cboDisability sont des listes déroulantes avec un texte d'option plus large que la largeur de la sélection elle-même.
Comme vous pouvez le voir, j'ai spécifié document.all car cela ne fonctionne que dans IE. De plus, j'ai enfermé les listes déroulantes dans des éléments div comme ceci:
Cela prend en charge le déplacement des autres éléments lorsque votre liste déroulante se développe. Le seul inconvénient ici est que le visuel de la menuliste disparaît lorsque vous sélectionnez, mais revient dès que vous avez sélectionné.
J'espère que cela aide quelqu'un.
la source
c'est la meilleure façon de procéder:
c'est exactement la même chose que la solution BalusC. Seulement cela est plus facile. ;)
la source
Un plugin jQuery complet est disponible. Il prend en charge la disposition et les interactions clavier sans rupture, consultez la page de démonstration: http://powerkiki.github.com/ie_expand_select_width/
avertissement: j'ai codé cette chose, les correctifs sont les bienvenus
la source
http://developer.yahoo.com/yui/examples/button/button-menu-select.html#
la source
La solution de jquery BalusC a été améliorée par moi. Utilisé aussi: commentaire de Brad Robertson ici .
Mettez simplement ceci dans un .js, utilisez la classe large pour vos combos désirés et ne forgez pas pour lui donner un identifiant. Appelez la fonction dans le onload (ou documentReady ou autre).
Aussi simple que ça :)
Il utilisera la largeur que vous avez définie pour le combo comme longueur minimale.
la source
Vous pouvez ajouter un style directement à l'élément de sélection:
<select name="foo" style="width: 200px">
Ainsi, cet élément sélectionné aura une largeur de 200 pixels.
Vous pouvez également appliquer une classe ou un identifiant à l'élément et le référencer dans une feuille de style
la source
Jusqu'à présent, il n'y en a pas. Je ne sais pas pour IE8, mais cela ne peut pas être fait dans IE6 et IE7, sauf si vous implémentez votre propre fonctionnalité de liste déroulante avec javascript. Il existe des exemples sur la façon de le faire sur le Web, bien que je ne vois pas beaucoup d'avantages à dupliquer les fonctionnalités existantes.
la source
Nous avons la même chose sur un asp: liste déroulante:
Dans Firefox (3.0.5), la liste déroulante correspond à la largeur de l'élément le plus long de la liste déroulante, soit 600 pixels de large ou quelque chose du genre.
la source
Cela semble fonctionner avec IE6 et ne semble pas en briser les autres. L'autre chose intéressante est qu'il change le menu automatiquement dès que vous modifiez votre sélection déroulante.
la source
Le lien hedgerwow (le contournement de l'animation YUI) dans la première meilleure réponse est rompu, je suppose que le domaine a expiré. J'ai copié le code avant qu'il n'expire, vous pouvez donc le trouver ici (le propriétaire du code peut me faire savoir si je viole les droits d'auteur en le téléversant à nouveau)
http://ciitronian.com/blog/programming/yui-button-mimicking-native-select-dropdown-avoid-width-problem/
Dans le même article de blog, j'ai écrit sur la création d'un élément SELECT identique à celui normal en utilisant le menu Bouton YUI. Jetez un œil et faites-moi savoir si cela vous aide!
la source
Basé sur la solution publiée par Sai , voici comment le faire avec jQuery.
la source
Je pensais jeter mon chapeau dans le ring. Je crée une application SaaS et j'avais un menu de sélection intégré dans un tableau. Cette méthode a fonctionné, mais elle a tout biaisé dans le tableau.
Donc, ce que j'ai fait pour améliorer tout cela a été de jeter le select dans un div z-indexé.
la source
J'ai dû contourner ce problème et une fois est venu avec une solution assez complète et évolutive fonctionnant pour IE6, 7 et 8 (et compatible avec d'autres navigateurs évidemment). J'ai écrit tout un article à ce sujet ici: http://www.edgeoftheworld.fr/wp/work/dealing-with-fixed-sized-dropdown-lists-in-internet-explorer
Je pensais que je partagerais cela pour les personnes qui rencontrent toujours ce problème, car aucune des solutions ci-dessus ne fonctionne dans tous les cas (à mon avis).
la source
J'ai essayé toutes ces solutions et aucune n'a fonctionné complètement pour moi. C'est ce que j'ai trouvé
Assurez-vous d'ajouter une classe déroulante à chaque liste déroulante dans votre html
L'astuce ici consiste à utiliser la fonction de clic spécialisée (je l'ai trouvée ici Événement d'incendie chaque fois qu'un élément DropDownList est sélectionné avec jQuery ). La plupart des autres solutions ici utilisent le changement de gestionnaire d'événements, qui fonctionne bien mais ne se déclenchera pas si l'utilisateur sélectionne la même option que celle précédemment sélectionnée.
Comme beaucoup d'autres solutions, la mise au point et la descente de la souris concernent lorsque l'utilisateur met la liste déroulante au point, le flou est utilisé lorsqu'il clique.
Vous pouvez également utiliser une sorte de détection de navigateur pour que cela n'affecte que par exemple. Cela n'a pas l'air mal dans les autres navigateurs
la source
Il est testé dans toutes les versions d'IE, Chrome, FF et Safari
Code JavaScript:
Code HTML:
la source