Esto suena exactamente igual que el problema que tenía. No pude encontrar una respuesta consolidada, así que tuve que juntar una.
primer lugar, cualquier CSS que apareció diferente en vertical y horizontal, tuvo que ser puesto en su propia etiqueta @media. Es importante alinear toda la clase en cada selector de @media, no solo los bits que son diferentes. CSS que es común a ambas vistas puede llegar a la cima. El ancho de mi dispositivo se muestra en 580, por lo que configuro el límite en 600; puede configurarlo para lo que considere adecuado para usted.
// All CSS that is common to both
@media all and (min-device-width:601px)and (orientation:landscape){
// All CSS for Landscape and Desktop
}
@media only screen and (max-device-width:600px)and (orientation:portrait){
// All CSS for Portrait view
}
Siguiente era la configuración de la ventana gráfica. Puse este código como estándar en cada uno de los encabezados de mi página (el tamaño es el tamaño de mi retrato de teléfono móvil). Necesita el meta para que el javascript pueda acceder a él más tarde.
<meta name="viewport" id="viewport" content="width=480, initial-scale=0.25, maximum-scale=1.0;" />
Finalmente, tuvimos que utilizar un poco de Javascript para volver a escribir la configuración de ventana gráfica cuando la página detecta una rotación del teléfono (gracias a Vinayak.B Original Article)
//Code to display on mobiles
//========================================
var swidth = window.screen.width;
//These were the values of my website CSS container for portrait and landscape
var vpwidth = 480;
var vlwidth = 960;
updateOrientation();
window.addEventListener('orientationchange', updateOrientation, false);
function updateOrientation() {
var viewport = document.querySelector("meta[name=viewport]");
switch (window.orientation) {
case 0: //portrait
//set the viewport attributes to whatever you want!
viewport.setAttribute('content', 'width=' + vpwidth + ', initial-scale=0.25, maximum-scale=1.0;')
break;
case 90: case -90: //landscape
//set the viewport attributes to whatever you want!
viewport.setAttribute('content', 'width=' + vlwidth + ', initial-scale=0.25, maximum-scale=1.0;')
break;
default:
//set the viewport attributes to whatever you want!
viewport.setAttribute('content', 'width=' + vpwidth + ', initial-scale=0.25, maximum-scale=1.0;')
break;
}
//alert(swidth + ' lead to an initial width of ' + vpwidth + ' and a rotate width of ' + vlwidth);
}
después de horas de probar cosas fuera, esto es lo que funcionó para mí. Por alguna razón en mi teléfono, la escala inicial = 1 lo estropeó pero 0.25 funcionó? Espero que funcione para usted o al menos ofrezca un buen punto de partida.
pero cuando uso el ancho del dispositivo, la página no se muestra correctamente la primera vez. el cuadro de 590px parece más grande que el ancho del dispositivo –
oh, ya veo, quiere escalar el contenido para que quepa en su pantalla. ¿Tiene algo más grande que el cuadro de 590px en su página? Intente no usar la metaetiqueta de la ventana gráfica, simplemente elimínela. – gabitzish
sí, eso es lo que quiero. todo lo que tengo es 590px div. intentado sin ventana gráfica - la caja no llena todo el ancho –