2009-09-20 11 views
14

Creo que he encontrado un error en WebKit. Implica outerWidth (verdadero) (y supongo outerHeight (true)) en jQuery.Creo que encontré un error en WebKit (o jQuery), ¿otros pueden confirmar?

En cada navegador, excepto en Safari y Chrome, el tercer cuadro es 200. En Safari y Chrome, es (casi) el ancho de mi pantalla.

Haga clic here para ver mis resultados: inline image not found. http://x3non.com/image/alec/147/outerWidth%20true%20fail.png

Puede probar es por sí mismo aquí: http://ramblingwood.com/sandbox/webkit-bug/test.html

He utilizado este archivo de prueba:

<!DOCTYPE html> 
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
    <style type="text/css"> 
    input { 
     width: 50%; 
     height: 1em; 
     font-size: 1em; 
    } 
#testBox {margin-left:100px;width:100px;} 
#testBox2 {padding-left:100px;width:100px;} 
#testBox3 {border-left:100px black solid;width:100px;} 
    </style> 
    <script type="text/javascript"> 
    function init(){ 
     $('#w1').val($('#testBox').width()); 
     $('#ow1').val($('#testBox').outerWidth()); 
     $('#owt1').val($('#testBox').outerWidth(true)); 
     $('#w2').val($('#testBox2').width()); 
     $('#ow2').val($('#testBox2').outerWidth()); 
     $('#owt2').val($('#testBox2').outerWidth(true)); 
     $('#w3').val($('#testBox3').width()); 
     $('#ow3').val($('#testBox3').outerWidth()); 
     $('#owt3').val($('#testBox3').outerWidth(true)); 
    } 
    $(document).ready(function(){ 
     init(); 

     $(window).resize(function(){ 
     init(); 
     }); 
    }); 
    </script> 

</head> 
<body> 
<div id="testBox">test</div> 
    <p>width() <input type="text" id="w1" /></p> 
    <p>outerWidth() <input type="text" id="ow1" /></p> 
    <p>outerWidth(true) <input type="text" id="owt1" /></p> 

<div id="testBox2">test2</div> 
    <p>width() <input type="text" id="w2" /></p> 
    <p>outerWidth() <input type="text" id="ow2" /></p> 
    <p>outerWidth(true) <input type="text" id="owt2" /></p> 

<div id="testBox3">test3</div> 
    <p>width() <input type="text" id="w3" /></p> 
    <p>outerWidth() <input type="text" id="ow3" /></p> 
    <p>outerWidth(true) <input type="text" id="owt3" /></p> 
</body> 
</html> 

Respuesta

11

El inspector de DOM de Chrome confirma que se trata de un problema de WebKit; el div obtiene un margen derecho grande, incluso si intenta sobrescribir margin-right. Algunas cosas que fuerzan que el margen se calcule correctamente incluyen float: left y display: inline-block. Además, si coloca el div dentro de otro div de tamaño, su outerWidth(true) dará el innerWidth del div que contiene, lo que podría ser una solución útil en el mundo real; simplemente envuélvalo en un div con margin: 0; padding: 0; width: XXX.

1

No es un error en la búsqueda de la ancho exterior Webkit realmente hace que los divs tengan grandes márgenes derechos. Como el margen derecho se extiende (casi) al borde derecho, obtienes el ancho exterior más grande.

No estoy seguro de si esta es la forma "correcta" de renderizarlo, pero si hay una especificación que diga que el margen derecho no debe extenderse, entonces esto sería un error en WebKit.

+1

en cualquiera de los casos, es muy molesto fricken al escribir código de navegadores. –

0

También puedo confirmar esto.

Es realmente extraño que Webkit haga esto, y no puedo imaginar por qué alguien pensaría que esta es una buena idea.

Me pregunto si Chrome 4 corrige esto.

1

Mis experiencias lo confirman también: es un error de Webkit y debe corregirse.

1

si establece el tamaño decirlo 1 en el campo de entrada se corrige el error - testet en Chrome y Safari

Cuestiones relacionadas