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

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
John Weldon
fuente
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;
Alessandro
fuente
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()
Ben
fuente
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.

Larry K
fuente
19

Usando jQuery puedes hacer:

$(window).width()
$(window).height()
chaim.dev
fuente
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.

serfer2
fuente
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;
};
laboratorios positivos
fuente
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;
}
Anabar
fuente
4

solo para referencia futura:

function getscreenresolution()
{
    window.alert("Your screen resolution is: " + screen.height + 'x' + screen.width);
}
daniel
fuente
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}
});
Abram
fuente