2012-01-20 9 views
11

IE 9 se comporta de manera bastante extraña para mí. Tengo un control de cambio de tamaño de fuente de página que guarda la configuración de los usuarios y luego, en el documento listo, establece el tamaño de fuente del cuerpo para ese tamaño. Funciona bien, el problema es que cuando se carga una página con menús desplegables, en IE 9, a veces el texto se corta.Seleccionar el cuadro que trunca el texto cuando el tamaño de la fuente del cuerpo cambió mediante javascript en el documento preparado en IE 9

He simplificado el código hasta este jsfiddle para demostrar. http://jsfiddle.net/z6Paz/3/

el html:

<select id="theSelect" name="theSelect" >     
    <option value="2" >Letter (8.5 x 11&quot;)</option>  
    <option value="3" selected='selected'>A4 (8.27 x 11.69&quot;)</option> 
</select> 

el css:

select 
{ 
    font-size:1em; 
    width:240px; 
} 

y la javascript:

var userPrefSizeOffset = 2; 
$(function(){ 
    var currentFontSize = $('body').css('font-size'); 
    var currentFontSizeNum = parseFloat(currentFontSize); 
    $('body').css('font-size', currentFontSizeNum + userPrefSizeOffset); 

}); 

alguien ha llegado a través de este extraño comportamiento? ¿hay una solución simple?

No ocurre en IE 8, ni en firefox, ni en safari, ni en cromo.

+0

está dispuesto a ser un tamaño relativo de su etiqueta

+0

no hay estilos que afecten a las etiquetas '

+0

Esto parece funcionar bien cuando lo probé en IE9, ¿puede proporcionar una captura de pantalla de lo que está viendo? ¿Es posible que no hayas especificado un doctype en tu original o un doctype no estándar y haya causado que tu navegador esté en modo peculiar? – PriorityMark

Respuesta

22

Las cajas de selección en IE sufren de una larga y desafortunada historia de errores extraordinarios.

En los días de IE6, el cuadro de selección era un control de OS ventana-a wrapper for the Windows Shell ListBox que existía en a separate MSHTML plane de la mayoría de otros contenidos.

En IE 7, el control era rewritten from scratch como un elemento intrínseco prestado directamente por el motor MSHTML. Esto ayudó con algunos de los errores más prominentes, pero parte de este desafortunado legado permanece. En particular: después de dibujar un cuadro de selección, los cambios a través del DOM no siempre se propagan como uno podría esperar.

Aquí, cada opción en la lista de selección se dibuja exactamente con el ancho correcto para el texto que contiene cuando se representa por primera vez el control. Cuando aumenta el tamaño del texto de la página, IE se propaga correctamente el cambio en el control de sí mismo, pero no ajusta el ancho de las opciones, por lo que el texto comienza overflowing to the next line:

Select box overflowing to the next line in IE9.

Puedes solucionar este problema forzando una volver a pintar el cuadro de selección.Una forma de hacerlo es append a single space character to the select element:

$('select').append(' '); 

Alternativamente, usted podría change the style attribute:

$('select').attr('style', ''); 

De éstos, la estrategia .append() tiene los efectos secundarios potenciales menor cantidad y hace cumplir mejor separación de estilo y comportamiento. (Su impacto esencial en DOM es nulo.)

+0

gracias Jordan, esto resuelve él también. ¡SOLO le di la recompensa a Bharath hace 2 segundos! así que te daré un voto positivo. – Patricia

+0

No hay problema, me alegra contribuir a este pequeño misterio. :) Gracias por el voto popular! –

+0

@Patricia FYI-No podía simplemente dejarlo en "hay un error de renderizado", así que actualicé mi respuesta con algunos detalles más que podrían ser útiles. –

1

Parece que expresar el tamaño de fuente en EMs es la causa. cambiar a píxeles y está bien. Probablemente esto sea un error en IE 9.

+0

tiene que ser em porque es relativo al tamaño del cuerpo. ese es el objetivo del control de cambio de fuente. – Patricia

+0

OK - parece que Microsoft jodió, así que va ese plan. –

2

Intente usar el% para la escalabilidad. Consulte aquí para obtener documentación de em frente a %: http://kyleschaeffer.com/best-practices/css-font-size-em-vs-px-vs-pt-vs/

+0

mismo problema que em. – Patricia

+0

en este caso la mejor solución IMO es que debe hacer un controlador JS para la fuente en relación con la proporción ancho/alto de la pantalla para que pueda verificar si el usuario minimiza o cambia el tamaño del navegador que puede controlar para ver qué tamaño la ventana tiene para que pueda cambiar el tamaño de la fuente en función de eso. No puedo pensar en otra alternativa. – khael

+0

no tiene nada que ver con el tamaño de la ventana del navegador. – Patricia

5

Parece un problema de IE9. Como solución alternativa, puede actualizar el tamaño de fuente css de select.

if(jQuery.browser.msie) 
$("select").css("font-size", "1em") 

Ejemplo. http://jsfiddle.net/z6Paz/16/

+0

esto destruye por completo la separación de la presentación y la lógica, pero resuelve el problema. a diferencia de cualquiera de las otras respuestas. mi recompensa expira en 5 minutos, así que te la daré. – Patricia

+0

Gracias :). Para salvaguardar sus lógicas, puede usar cualquier tipo de CSS no utilizado para actualizarlo. como si (jQuery.browser.msie) $ ("SELECT"). Css ("dirección", "heredar") Esperanza esta ayuda – Bharath

1

Esta es mi primera respuesta a una pregunta, pero encontré esta página porque he tenido el mismo problema.

Me di cuenta de que con solo agregar algo al valor en la barra de herramientas Dev, aparecía el texto, entonces lo que hacíamos era agregar y luego eliminar un poco de espacio en blanco, lo que está funcionando perfectamente.

Aquí está el área de nuestro código que hizo el trabajo:

$('select').children().each(function() { 
    $(this).html($(this).html() +'&nbsp;&nbsp;'); 
    $(this).html($(this).html()); 
}); 

espero que ayuda a alguien en el futuro

Cuestiones relacionadas