Come posso ottenere un'interruzione di linea fluida sui browser mobili anche quando si esegue lo zoom?Come posso ottenere un'interruzione di linea fluida sui browser mobili anche quando si esegue lo zoom?
Ho una pagina Web molto semplice con una sola colonna di testo. Qui ci sono le parti pertinenti del CSS:
/* ✂---------------- */
body {
/* To avoid problems with some older browsers, that do not calculate
* relative values correctly without this statement. */
font-size: 100%;
/* ✂---------------- */
/* Center the content and leave a margin at the left and at the right. */
margin-left: auto;
margin-right: auto;
/* ✂---------------- */
}
/* ✂---------------- */
@media not print {
body {
/* ✂---------------- */
/* Do not put too many words in a single line: */
width: 41em;
/* Avoid horizontal scrolling, and leave a small margi
* at the left and at the right. */
max-width: 90%;
}
/* ✂---------------- */
}
/* ✂---------------- */
L'obiettivo è:
Non utilizzare le dimensioni dei caratteri fissi, ma rispettare la dimensione del font di default che l'utente ha scelto nelle impostazioni del proprio browser
Se la larghezza della finestra del browser è molto grande, non rendere le linee troppo larghe (troppi caratteri). Invece, lascia spazio a sinistra e a destra.
Se la larghezza della finestra del browser è ridotta (= spazio insufficiente per mostrare 41em di testo nella dimensione del carattere corrente al livello di zoom corrente), quindi utilizzare un'interruzione di riga esattamente per l'intera larghezza della finestra del browser (con un piccolo margine di (100% -90%) ÷ 2 = 5% a sinistra e a destra), evitando lo scorrimento orizzontale.
Se l'utente esegue lo zoom avanti o lo zoom indietro, l'interruzione di riga viene adattata correttamente. Pertanto, anche quando l'utente esegue lo zoom in modo eccessivo, non è necessario lo scorrimento orizzontale perché la lunghezza della linea non è più ampia della finestra del browser.
Questo funziona perfettamente sui browser desktop. Ma i browser mobili giacciono sul panorama. Sostengono di avere un viewport di circa ottocento pixel invece della reale larghezza della finestra del browser (questa è la "finestra di layout" - diversa dalla vera "vista visiva" - vedi http://www.quirksmode.org/mobile/viewports2.html per i dettagli). Così, per i browser mobili, ho aggiunto <"viewport" content="width=device-width, initial-scale=1"/>
nel codice HTML e
@viewport {
/* 100% of viewport’s width */
width: 100vw;
zoom: 1.0;
}
nel CSS. Ora, gli obiettivi n. 1, 2 e 3 funzionano anche su Firefox Mobile. Ma l'obiettivo n. 4 no. L'interruzione di riga non cambia sul recente Firefox Mobile durante l'ingrandimento o lo zoom. (Fatto curioso: sul mio vecchio browser standard Android 2.3.6, funziona.) Suppongo che la larghezza della vista del layout sui browser mobili sia determinata una volta che il tag <meta>
è stato letto e la larghezza del pixel CSS della finestra di layout non cambia più quando l'utente ingrandisce o ingrandisce (in contrasto con i browser desktop, che adottano il loro viewport durante lo zoom). Poiché lo max-width: 90%;
è relativo al viewport (poiché questo è il contenitore circostante), l'interruzione di riga non cambia più quando si effettua lo zoom in avvicinamento o lo zoom. Prova a http://ryanve.com/lab/dimensions/ che visualizza alcuni valori DOM utilizzando JavaScript. Quando si esegue questo sito su un browser desktop, si vede che window.innerWidth
cambia quando si ingrandisce o quando si riduce lo zoom. Se si esegue la stessa operazione sui browser per dispositivi mobili, il valore di window.innerWidth
non cambia durante l'ingrandimento o la riduzione. Per quanto vedo, questo comportamento sembra essere anche il comportamento standard sui moderni browser mobili e le pagine Web mobili in generale. Questa sembra essere una scelta deliberata degli sviluppatori dei brower mobili (vogliono essere in grado di mostrare anche vecchie pagine web non responsive ottimizzate per il desktop), ma il lato negativo è che si può lavorare solo con la finestra di layout virtuale ”.
E per quanto ne so, non ci sono unità di misura nel CSS che sono relative alla reale dimensione della "visualizzazione visiva" invece della "vista di layout" virtuale.
Quindi le mie domande sono:
Mi chiedo se c'è qualche pulito e standard di conformarsi possibilità a tutti per una pagina web per ottenere questo (zoom + interruzione di linea del fluido) a lavorare su browser per dispositivi mobili proprio come sulla versione desktop?
Se esiste una tale possibilità, in che modo esattamente potrebbe funzionare (preferibile senza JavaScript)? È l'unica possibilità di un attacco sporco che stima il fattore di zoom (che per quanto ne so non è accessibile da browser cross-browser in JS) sui browser mobili calcolando "larghezza vista visuale" ÷ "larghezza schermo" e adotta la viewport di conseguenza?
Anche questo non funziona. Stesso risultato del mio codice: funziona bene sui browser desktop, ma l'interruzione di linea non funziona su Firefox Mobile. –