Supongamos que tengo un <div>
que deseo centrar en la pantalla del navegador (ventana gráfica). Para hacerlo, necesito calcular el ancho y la altura del <div>
elemento.
¿Qué debo usar? Incluya información sobre la compatibilidad del navegador.
javascript
html
xhtml
dhtml
snortasprocket
fuente
fuente
Respuestas:
Debe usar las propiedades
.offsetWidth
y.offsetHeight
. Tenga en cuenta que pertenecen al elemento, no.style
.var width = document.getElementById('foo').offsetWidth;
La función
.getBoundingClientRect()
devuelve las dimensiones y la ubicación del elemento como números de punto flotante después de realizar transformaciones CSS.fuente
.offsetWidth
y.offsetHeight
: developer.mozilla.org/en/Determining_the_dimensions_of_elementsoffsetWidth
será 0 si el elemento esdisplay:none
, mientras que el calculadowidth
aún podría tener un valor positivo en este caso.visibility:hidden
no afecta a laoffsetWidth
.offsetWidth
devuelve el cuadro "completo" que incluye contenido, relleno y bordes; whileclientWidth
devuelve solo el tamaño del cuadro de contenido (por lo que tendrá un valor menor siempre que el elemento tenga un relleno o borde diferente de cero). (Mod editado para mayor claridad)Echa un vistazo a
Element.getBoundingClientRect()
.Este método devolverá un objeto que contiene las
width
,height
y algunos otros valores útiles:Por ejemplo:
Creo que esto no tiene los problemas que
.offsetWidth
y a.offsetHeight
veces regresan0
(como se discute en los comentarios aquí )Otra diferencia es que
getBoundingClientRect()
puede devolver píxeles fraccionarios, donde.offsetWidth
y.offsetHeight
se redondeará al entero más cercano.Nota IE8 :
getBoundingClientRect
no devuelve altura y ancho en IE8 y menos. *Si debe admitir IE8, use
.offsetWidth
y.offsetHeight
:Vale la pena señalar que el Objeto devuelto por este método no es realmente un objeto normal . Sus propiedades no son enumerables (así, por ejemplo,
Object.keys
no funciona de forma inmediata).Más información sobre esto aquí: la mejor manera de convertir un ClientRect / DomRect en un objeto simple
Referencia:
.offsetHeight
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight.offsetWidth
: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetWidth.getBoundingClientRect()
: https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRectfuente
offsetHeight
yoffsetWidth
no lo hará.NOTA : esta respuesta se escribió en 2008. En ese momento, la mejor solución para varios navegadores para la mayoría de las personas era usar jQuery. Dejo la respuesta aquí para la posteridad y, si estás usando jQuery, esta es una buena manera de hacerlo. Si está utilizando algún otro marco o JavaScript puro, la respuesta aceptada es probablemente el camino a seguir.
A partir de jQuery 1.2.6 puede usar una de las funciones principales de CSS ,
height
ywidth
(oouterHeight
youterWidth
, según corresponda).fuente
En caso de que sea útil para alguien, pongo un cuadro de texto, un botón y div todo con el mismo CSS:
Lo probé en Chrome, Firefox y ie-edge, probé con jquery y sin él, y lo probé con y sin
box-sizing:border-box
. Siempre con<!DOCTYPE html>
Los resultados:
fuente
Según MDN: determinar las dimensiones de los elementos
offsetWidth
yoffsetHeight
devuelve la "cantidad total de espacio que ocupa un elemento, incluido el ancho del contenido visible, las barras de desplazamiento (si corresponde), el relleno y el borde"clientWidth
yclientHeight
devuelve "cuánto espacio ocupa el contenido visualizado real, incluido el relleno pero sin incluir el borde, los márgenes o las barras de desplazamiento"scrollWidth
yscrollHeight
devuelve el "tamaño real del contenido, independientemente de cuánto esté visible actualmente"Por lo tanto, depende de si se espera que el contenido medido esté fuera del área visible actual.
fuente
Solo necesita calcularlo para IE7 y versiones anteriores (y solo si su contenido no tiene un tamaño fijo). Sugiero usar comentarios condicionales HTML para limitar el hackeo a viejos IE que no admiten CSS2. Para todos los demás navegadores, use esto:
Esta es la solución perfecta. Se centra
<div>
de cualquier tamaño y lo encoge al tamaño de su contenido.fuente
Es fácil modificar los estilos de los elementos, pero es un poco difícil leer el valor.
JavaScript no puede leer ninguna propiedad de estilo de elemento (elem.style) proveniente de css (interno / externo) a menos que use el método incorporado, llame a getComputedStyle en javascript.
Elemento: El elemento para el que se lee el valor.
pseudo: un pseudo-elemento si es necesario, por ejemplo :: antes. Una cadena vacía o sin argumento significa el elemento en sí.
El resultado es un objeto con propiedades de estilo, como elem.style, pero ahora con respecto a todas las clases css.
Por ejemplo, aquí el estilo no ve el margen:
Así que modificó su código javaScript para incluir el getComputedStyle del elemento que desea obtener es ancho / alto u otro atributo
Valores calculados y resueltos
Hay dos conceptos en CSS:
Hace mucho tiempo, getComputedStyle se creó para obtener valores calculados, pero resultó que los valores resueltos son mucho más convenientes y el estándar cambió.
Así que hoy en día getComputedStyle realmente devuelve el valor resuelto de la propiedad.
Tenga en cuenta:
getComputedStyle requiere el nombre completo de la propiedad
Hay otras inconsistencias. Como ejemplo, algunos navegadores (Chrome) muestran 10px en el documento a continuación, y algunos de ellos (Firefox), no:
para más información https://javascript.info/styles-and-classes
fuente
element.offsetWidth y element.offsetHeight deberían hacer, como se sugirió en la publicación anterior.
Sin embargo, si solo desea centrar el contenido, hay una mejor manera de hacerlo. Suponiendo que usa xhtml estricto DOCTYPE. establece el margen: 0, propiedad automática y ancho requerido en px para la etiqueta del cuerpo. El contenido se alinea al centro de la página.
fuente
... parece que CSS ayuda a poner div en el centro ...
fuente
También puedes usar este código:
fuente
si necesita centrarlo en el puerto de visualización del navegador; puedes lograrlo solo con CSS
fuente
Aquí está el código para WKWebView que determina la altura de un elemento Dom específico (no funciona correctamente para toda la página)
fuente
swift
código de iOS , ¿verdad? No es JavaScript Estoy reteniendo un voto negativo (b / c, esto en realidad puede ser bastante útil), pero tenga en cuenta que esto no responde a la pregunta, y probablemente sería más apropiado en otra pregunta específica de iOS. Si ya no existe ninguno, tal vez considere preguntar a uno y responder a sí mismo.Si offsetWidth devuelve 0, puede obtener la propiedad de ancho de estilo del elemento y buscar un número. "100px" -> 100
/\d*/.exec(MyElement.style.width)
fuente