Questo suona esattamente come il problema che stavo avendo. Non sono riuscito a trovare una risposta consolidata, quindi ho dovuto crearne uno insieme.
In primo luogo, qualsiasi CSS che appariva diverso su verticale e orizzontale doveva essere inserito nel proprio tag @media. È importante distribuire l'intera classe in ciascun selettore @media, non solo i bit che sono diversi. I CSS comuni a entrambe le visualizzazioni possono essere visualizzati in alto. La larghezza del mio dispositivo era pari a 580, quindi ho impostato il limite a 600: è possibile impostarlo su ciò che ritieni sia giusto per te.
// 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
}
Avanti erano le impostazioni di visualizzazione. Ho inserito questo codice come standard in ciascuna delle mie teste di pagina (la dimensione è la dimensione del mio cellulare). Ha bisogno del meta lì in modo che il javascript possa arrivarci più tardi.
<meta name="viewport" id="viewport" content="width=480, initial-scale=0.25, maximum-scale=1.0;" />
alla fine ho dovuto usare un po 'di Javascript per riscrivere le impostazioni del riquadro di visualizzazione quando la pagina ha rilevato una rotazione del telefono (grazie 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);
}
Dopo ore di provare cose fuori, questo è quello che ha funzionato per me. Per qualche ragione sul mio telefono, la scala iniziale = 1 ha rovinato tutto ma 0,25 ha funzionato ?! Spero che funzioni per te o almeno offra un buon punto di partenza.
ma quando utilizzo la larghezza del dispositivo, la pagina non viene visualizzata correttamente la prima volta. la casella 590px appare più grande della larghezza del dispositivo –
oh, vedo, si desidera ridimensionare il contenuto per adattarlo allo schermo. Hai qualcosa di più grande della scatola 590px sulla tua pagina? Prova a non utilizzare il meta tag viewport, ma rimuovilo. – gabitzish
sì, questo è quello che voglio. tutto quello che ho è 590px div. provato senza finestra - la casella non riempie tutta la larghezza –