En IE, la lista desplegable tiene el mismo ancho que el cuadro desplegable (espero tener sentido), mientras que en Firefox el ancho de la lista desplegable varía según el contenido.
Esto básicamente significa que debo asegurarme de que el dropbox sea lo suficientemente ancho para mostrar la selección más larga posible. Esto hace que mi página se vea muy fea :(
¿Existe alguna solución para este problema? ¿Cómo puedo usar CSS para establecer diferentes anchos para Dropbox y la lista desplegable?
fuente
width: auto !important;
Crear su propia lista desplegable es más complicado de lo que vale la pena. Puede usar algo de JavaScript para hacer que el menú desplegable de IE funcione.
Utiliza un poco de la biblioteca YUI y una extensión especial para arreglar los cuadros de selección de IE.
Deberá incluir lo siguiente y envolver sus
<select>
elementos en un<span class="select-box">
Pon estos antes de la etiqueta del cuerpo de tu página:
Publicar aceptación editar:
También puede hacer esto sin la biblioteca YUI y el control Hack. Todo lo que necesitas hacer es poner un onmouseover = "this.style.width = 'auto'" onmouseout = "this.style.width = '100px'" (o lo que quieras) en el elemento seleccionado. El control YUI le da esa bonita animación, pero no es necesario. Esta tarea también se puede realizar con jquery y otras bibliotecas (aunque no he encontrado documentación explícita para esto)
- enmienda a la edición:
IE tiene un problema con la salida del mouse para los controles de selección (no considera que el mouse sobre las opciones sea un mouse sobre la selección). Esto hace que usar un mouseout sea muy complicado. La primera solución es la mejor que he encontrado hasta ahora.
fuente
podría intentar lo siguiente ...
Lo intenté y me funciona. No se requiere nada más.
fuente
Usé la siguiente solución y parece funcionar bien en la mayoría de situaciones.
Nota: $ .browser.msie requiere jquery.
fuente
@Thad también necesita agregar un controlador de eventos de desenfoque
Sin embargo, esto seguirá expandiendo el cuadro de selección al hacer clic, en lugar de solo los elementos. (y parece fallar en IE6, pero funciona perfectamente en Chrome e IE7)
fuente
No hay forma de hacerlo en IE6 / IE7 / IE8. El control lo dibuja la aplicación e IE simplemente no lo dibuja de esa manera. Su mejor opción es implementar su propio menú desplegable a través de HTML / CSS / JavaScript simple si es tan importante que el menú desplegable tenga un ancho y la lista otro ancho.
fuente
Si usa jQuery, pruebe este complemento de ancho de selección de IE:
http://www.jainaewen.com/files/javascript/jquery/ie-select-style/
La aplicación de este complemento hace que el cuadro de selección en Internet Explorer parezca funcionar como funcionaría en Firefox, Opera, etc. al permitir que los elementos de opción se abran en el ancho completo sin perder el aspecto y el estilo del ancho fijo. También agrega soporte para relleno y bordes en el cuadro de selección en Internet Explorer 6 y 7.
fuente
En jQuery esto funciona bastante bien. Suponga que el menú desplegable tiene id = "dropdown".
fuente
Esta es la solución más sencilla.
Antes de comenzar, debo decirle que el cuadro de selección desplegable se expandirá automáticamente en casi todos los navegadores excepto IE6. Por lo tanto, haría una verificación del navegador (es decir, IE6) y escribiría lo siguiente solo en ese navegador. Aquí va. Primero verifique el navegador.
El código expandirá mágicamente el cuadro de selección desplegable. El único problema con la solución es onmouseover el menú desplegable se expandirá a 420px, y debido a que overflow = hidden, estamos ocultando el tamaño del menú desplegable expandido y mostrándolo como 170px; por lo tanto, la flecha del lado derecho del ddl estará oculta y no se podrá ver. pero el cuadro de selección se ampliará a 420px; que es lo que realmente queremos. Simplemente pruebe el siguiente código y utilícelo si le gusta.
Lo anterior es el CSS de IE6. El CSS común para todos los demás navegadores debería ser el siguiente.
fuente
si desea un menú desplegable y / o flotante simple sin efectos de transición, simplemente use CSS ... puede forzar a IE6 a admitir: coloque el cursor sobre todos los elementos usando un archivo .htc (css3hover?) con el comportamiento (solo propiedad de IE6) definido en el archivo CSS adjunto condicionalmente.
fuente
mira esto ... no es perfecto pero funciona y es solo para IE y no afecta a FF. Utilicé el javascript normal para onmousedown para establecer la única solución de IE ... pero el msie de jquery también podría usarse en onmousedown ... la idea principal es "onchange" y en el desenfoque para que el cuadro de selección vuelva a la normalidad ... .decidir su propio ancho para esos. Necesitaba el 35%.
fuente
La respuesta de BalusC anterior funciona muy bien, pero hay una pequeña solución que agregaría si el contenido de su menú desplegable tiene un ancho más pequeño que el que define en su CSS select.expand, agregue esto al enlace del mouseover:
fuente
Esto es algo que he hecho tomando partes de las cosas de otras personas.
donde cboEthnicity y cboDisability son menús desplegables con texto de opción más ancho que el ancho de la selección en sí.
Como puede ver, he especificado document.all ya que esto solo funciona en IE. Además, encerré los menús desplegables dentro de elementos div como este:
Esto se encarga de que los otros elementos se muevan fuera de lugar cuando se expande el menú desplegable. El único inconveniente aquí es que el visual menulista desaparece cuando está seleccionando, pero regresa tan pronto como ha seleccionado.
Espero que esto ayude a alguien.
fuente
esta es la mejor manera de hacer esto:
es exactamente lo mismo que la solución BalusC. Solo que esto es más fácil. ;)
fuente
Está disponible un complemento jQuery completo. Es compatible con el diseño y las interacciones de teclado sin interrupciones, consulte la página de demostración: http://powerkiki.github.com/ie_expand_select_width/
descargo de responsabilidad: codifiqué esa cosa, los parches son bienvenidos
fuente
http://developer.yahoo.com/yui/examples/button/button-menu-select.html#
fuente
La solución de jquery BalusC mejoró por mí. Utilizado también: comentario de Brad Robertson aquí .
Simplemente coloque esto en un .js, use la clase amplia para sus combos deseados y no falsifique para darle una identificación. Llame a la función en la carga (o documentReady o lo que sea).
Tan simple que :)
Utilizará el ancho que definiste para el combo como longitud mínima.
fuente
Puede agregar un estilo directamente al elemento seleccionado:
<select name="foo" style="width: 200px">
Entonces, este elemento seleccionado tendrá 200 píxeles de ancho.
Alternativamente, puede aplicar una clase o identificación al elemento y hacer referencia a él en una hoja de estilo
fuente
Hasta ahora no hay uno. No sé sobre IE8, pero no se puede hacer en IE6 e IE7, a menos que implemente su propia funcionalidad de lista desplegable con javascript. Hay ejemplos de cómo hacerlo en la web, aunque no veo mucho beneficio en duplicar la funcionalidad existente.
fuente
Tenemos lo mismo en un asp: dropdownlist:
En Firefox (3.0.5), el menú desplegable es el ancho del elemento más largo en el menú desplegable, que tiene como 600 píxeles de ancho o algo así.
fuente
Esto parece funcionar con IE6 y no parece romper otros. La otra cosa buena es que cambia el menú automáticamente tan pronto como cambia su selección desplegable.
fuente
El enlace hedgerwow (la solución alternativa de animación de YUI) en la primera mejor respuesta está roto, supongo que el dominio expiró. Copié el código antes de que caducara, por lo que puede encontrarlo aquí (el propietario del código puede avisarme si estoy infringiendo los derechos de autor cargándolo de nuevo)
http://ciitronian.com/blog/programming/yui-button-mimicking-native-select-dropdown-avoid-width-problem/
En la misma publicación del blog escribí sobre cómo hacer exactamente el mismo elemento SELECT como el normal usando el menú del botón YUI. ¡Eche un vistazo y avíseme si esto ayuda!
fuente
Según la solución publicada por Sai , así es como se hace con jQuery.
fuente
Pensé en tirar mi sombrero al ring. Hago una aplicación SaaS y tenía un menú de selección incrustado dentro de una tabla. Este método funcionó, pero sesgó todo en la tabla.
Entonces, lo que hice para mejorarlo fue lanzar la selección dentro de un div indexado en z.
fuente
Tuve que solucionar este problema y una vez se me ocurrió una solución bastante completa y escalable que funcionaba para IE6, 7 y 8 (y, obviamente, compatible con otros navegadores). He escrito un artículo completo al respecto aquí mismo: http://www.edgeoftheworld.fr/wp/work/dealing-with-fixed-sized-dropdown-lists-in-internet-explorer
Pensé en compartir esto con las personas que todavía se encuentran con este problema, ya que ninguna de las soluciones anteriores funciona en todos los casos (en mi opinión).
fuente
Probé todas estas soluciones y ninguna funcionó completamente para mí. Esto es lo que se me ocurrió
Asegúrese de agregar una clase desplegable a cada menú desplegable en su html
El truco aquí es usar la función de clic especializada (lo encontré aquí Fire event cada vez que se selecciona un elemento DropDownList con jQuery ). Muchas de las otras soluciones aquí utilizan el cambio de controlador de eventos, que funciona bien pero no se activará si el usuario selecciona la misma opción que se seleccionó anteriormente.
Al igual que muchas de las otras soluciones, el enfoque y el mousedown es para cuando el usuario enfoca el menú desplegable, el desenfoque es para cuando hace clic.
Es posible que también desee incluir algún tipo de detección del navegador en esto para que solo afecte, es decir. Aunque no se ve mal en otros navegadores
fuente
Está probado en todas las versiones de IE, Chrome, FF y Safari
Código JavaScript:
Código HTML:
fuente