Estoy tratando de colocar un elemento span (llamémoslo "el intervalo de información sobre herramientas") relativo a un campo de entrada. Para hacer esto, estoy envolviendo el tramo de información sobre herramientas y el campo de entrada en otro elemento del tramo (llamémoslo "el tramo de la envoltura") que tiene position: relative
. Luego establecí position: absolute
en el intervalo de información sobre herramientas. Esto hace que la información de la barra espaciadora se ubique en relación con el tramo de la envoltura pero no forme parte del flujo de la página, sin ocupar ningún espacio. Esto es exactamente lo que quiero.Firefox y Chrome dan valores diferentes para offsetTop
Luego, usando javascript, establezco la posición de la información sobre herramientas relativa a la posición del elemento de entrada. Dado que el elemento de entrada se puede configurar de forma diferente en páginas diferentes (la secuencia de comandos debe ser aplicable globalmente), estoy usando sus propiedades offsetTop
y offsetLeft
para calcular su posición relativa al tramo de la envoltura.
Sin embargo, estoy notando inconsistencias entre los navegadores aquí. En Firefox, IE6, 7, 8, funciona como se esperaba. Pero en Chrome y Safari, el informe offsetTop
parece, bueno, incorrecto.
Para probar esto, he creado la página de prueba a continuación:
<html>
<head>
<style type="text/css">
span { font-size: 8px; position: relative; top: 0; left: 0; border: 1px solid red }
</style>
</head>
<body>
<span id="wrapper">
<input id="foo" name="foo" type="text">
</span>
<script type="text/javascript">
document.write("<br>Offset parent: " + document.getElementById("foo").offsetParent.id);
document.write("<br>Offset top: " + document.getElementById("foo").offsetTop);
</script>
</body>
</html>
y se carga en Firefox y Chrome. Ambos navegadores informan que el intervalo de envoltura es offsetParent
, pero para Firefox el offsetTop
es -8 y para Chrome es 2. Visualmente, la página presenta el mismo aspecto en ambos buscadores.
Esto me da un dolor de cabeza, porque no puedo modificar un desplazamiento diferente que siempre aplico cuando alguien usa Chrome, porque si cambio el tamaño de la fuente, el offsetTop
no cambiará y mi script se romperá.
¿Esto es un error? ¿Puedo resolver esto de manera diferente?
Intente esperar hasta que el documento esté listo – Greg
Lo hice en el código "real": no parece importar. He inspeccionado el offsetTop en Firebug y en la ventana del desarrollador de Chrome y los valores son los mismos. – waxwing
He movido etiquetas de etiquetas como esta (mensaje de error de validación: http://d.pr/i/yvGS) haciendo que sean en línea-bloque (junto con la posición: absoluta;) luego usando margen para ubicarlos en relación con su ubicación en HTML, en lugar de las propiedades top/right/bottom/left. Podría entrenar, si lo hace, podría evitar javascript extra. – KruegerDesigns