¿Cómo detectar la resolución de pantalla con JavaScript?


196

¿Hay alguna manera que funcione para todos los navegadores?

Respuestas:


296

respuesta original

Si.

window.screen.availHeight
window.screen.availWidth

actualizar 2017-11-10

De Tsunamis en los comentarios:

Para obtener la resolución nativa de, es decir, un dispositivo móvil, debe multiplicar con la relación de píxeles del dispositivo: window.screen.width * window.devicePixelRatioy window.screen.height * window.devicePixelRatio. Esto también funcionará en equipos de escritorio, que tendrán una proporción de 1.

Y de Ben en otra respuesta:

En JavaScript vainilla, esto le dará el ancho / alto DISPONIBLE:

window.screen.availHeight
window.screen.availWidth

Para el ancho / alto absoluto, use:

window.screen.height
window.screen.width

16
No es del todo correcto ahora. No considera el posible cambio del zoom de la página.
sergzach

77
@sergzach - En ese caso, usaría jQuery's $(window).width()en su lugar, vea la respuesta de
chaim.dev

3
Use window.screen.height y window.screen.width para obtener el tamaño exacto de la pantalla (como se sugiere en la siguiente respuesta). La razón por la que no está obteniendo el tamaño exacto es porque está verificando el ancho y la altura disponibles, esto significa que restará la altura de la barra de herramientas (que es exactamente 40px en Windows 7/8)
Jaruba

44
¿No sería mejor para la resolución de pantalla ir con window.screen.height y width? ¿Por qué availHeight? mi availWidth, por ejemplo, devuelve 1050, cuando en realidad es 1080.
Malavos

55
@eckes con los que tienes que multiplicar window.devicePixelRatio. Consulte mi comentario sobre la respuesta de Alessandros.
Tsunamis

49
var width = screen.width;
var height = screen.height;

1
Esto es equivalente a window.screen. Debería agregarlo a la respuesta existente.
Gajus

3
En realidad esta es la respuesta correcta. screen.availHeightsolo da la altura disponible en la ventana del navegador mientras screen.heightda la altura exacta de la pantalla.
apnerve

Esto devuelve la resolución escalada de dpi, no la resolución de pantalla nativa.
Dominic Cerisano

44
Para obtener la resolución nativa de, es decir, un dispositivo móvil, debe multiplicar con la relación de píxeles del dispositivo: window.screen.width * window.devicePixelRatioy window.screen.height * window.devicePixelRatio. Esto también funcionará en equipos de escritorio, que tendrán una proporción de 1.
Tsunamis

Las computadoras de escritorio no necesariamente tendrán una proporción de 1.
12Me21

34

En JavaScript vainilla, esto le dará el ancho / alto DISPONIBLE :

window.screen.availHeight
window.screen.availWidth

Para el ancho / alto absoluto, use:

window.screen.height
window.screen.width

Ambos de los anteriores se pueden escribir sin el prefijo de la ventana.

¿Te gusta jQuery? Esto funciona en todos los navegadores, pero cada navegador proporciona valores diferentes.

$(window).width()
$(window).height()

19

¿Te refieres a la resolución de pantalla (por ejemplo, 72 puntos por pulgada) o dimensiones de píxeles (la ventana del navegador es actualmente de 1000 x 800 píxeles)?

La resolución de pantalla le permite saber qué tan gruesa será una línea de 10 píxeles en pulgadas. Las dimensiones en píxeles le indican qué porcentaje de la altura de pantalla disponible ocupará una línea horizontal de 10 píxeles de ancho.

No hay forma de conocer la resolución de pantalla solo desde Javascript, ya que la computadora en sí misma generalmente no conoce las dimensiones reales de la pantalla, solo la cantidad de píxeles. 72 ppp es la suposición habitual ...

Tenga en cuenta que hay mucha confusión sobre la resolución de pantalla, a menudo las personas usan el término en lugar de la resolución de píxeles, pero los dos son bastante diferentes. Ver Wikipedia

Por supuesto, también puede medir la resolución en puntos por cm. También está el oscuro tema de los puntos no cuadrados. Pero yo divago.


19

Usando jQuery puedes hacer:

$(window).width()
$(window).height()

Es la solución cruzada / todo más fácil que he usado. Para ancho del navegador al menos ...
Zarne Dravitzki

34
Esto devuelve el tamaño de la ventana, no la resolución de la pantalla.
Jonas

19

También puede obtener el ancho y la altura de la VENTANA, evitando las barras de herramientas del navegador y ... (no solo el tamaño de la pantalla).

Para hacer esto, use: window.innerWidth y window.innerHeightpropiedades. Véalo en w3schools .

En la mayoría de los casos, será la mejor manera, por ejemplo, de mostrar un diálogo modal flotante perfectamente centrado. Le permite calcular posiciones en la ventana, sin importar qué orientación de resolución o tamaño de ventana esté usando el navegador.


1
Esta es la solución más útil. La propiedad window.screen.availWidth proporciona la PANTALLA, no la ventana gráfica, que puede ser diferente. Es más útil para mí saber cuánto espacio real puedo usar, no cuál podría ser / convertirse en el máximo del navegador.
Mike Mannakee

13

Intentar conseguir esto en un dispositivo móvil requiere algunos pasos más. screen.availWidthpermanece igual independientemente de la orientación del dispositivo.

Aquí está mi solución para dispositivos móviles:

function getOrientation(){
    return Math.abs(window.orientation) - 90 == 0 ? "landscape" : "portrait";
};
function getMobileWidth(){
    return getOrientation() == "landscape" ? screen.availHeight : screen.availWidth;
};
function getMobileHeight(){
    return getOrientation() == "landscape" ? screen.availWidth : screen.availHeight;
};

window.orientationdevuelve indefinido ... (Firefox 49) screen.orientation.angledevuelve un ángulo, pero ya está en 0 para el modo horizontal.
Lambart el


4
function getScreenWidth()
{
   var de = document.body.parentNode;
   var db = document.body;
   if(window.opera)return db.clientWidth;
   if (document.compatMode=='CSS1Compat') return de.clientWidth;
   else return db.clientWidth;
}

4

solo para referencia futura:

function getscreenresolution()
{
    window.alert("Your screen resolution is: " + screen.height + 'x' + screen.width);
}

3

Si desea detectar la resolución de la pantalla, es posible que desee verificar la resolución del complemento . Le permite hacer lo siguiente:

var res = require('res')
res.dppx() // 1
res.dpi() // 96
res.dpcm() // 37.79527559055118

Aquí hay algunas conclusiones excelentes de Ryan Van Etten, el autor del complemento:

  • Existen 2 conjuntos de unidades y difieren en una escala fija: unidades de dispositivo y unidades CSS.
  • La resolución se calcula como el número de puntos que pueden caber a lo largo de una longitud CSS particular.
  • Conversión de unidades: 1⁢in = 2.54⁢cm = 96⁢px = 72⁢pt
  • CSS tiene longitudes relativas y absolutas. En zoom normal: 1⁢em = 16⁢px
  • dppx es equivalente a la relación dispositivo-píxel.
  • La definición de devicePixelRatio difiere según la plataforma.
  • Las consultas de medios pueden apuntar a una resolución mínima. Úselo con cuidado para la velocidad.

Aquí está el código fuente de res, a partir de hoy:

!function(root, name, make) {
  if (typeof module != 'undefined' && module.exports) module.exports = make()
  else root[name] = make()
}(this, 'res', function() {

  var one = {dpi: 96, dpcm: 96 / 2.54}

  function ie() {
    return Math.sqrt(screen.deviceXDPI * screen.deviceYDPI) / one.dpi
  }

  function dppx() {
    // devicePixelRatio: Webkit (Chrome/Android/Safari), Opera (Presto 2.8+), FF 18+
    return typeof window == 'undefined' ? 0 : +window.devicePixelRatio || ie() || 0
  }

  function dpcm() {
    return dppx() * one.dpcm
  }

  function dpi() {
    return dppx() * one.dpi
  }

  return {'dppx': dppx, 'dpi': dpi, 'dpcm': dpcm}
});
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.