2014-11-25 24 views
5

Abbiamo uno strano problema qui. Abbiamo un sito web che ha funzionato bene da alcuni anni. Un paio di mesi fa, Firefox ha iniziato a ridimensionare la pagina in base alle impostazioni DPI dell'utente sul suo sistema operativo.Forza il livello di zoom/DPI-Scala con CSS, Header-Tag o JavaScript

Il problema è, per impostazione predefinita, la scala DPI è impostata su 125% (nel nostro paese) in Windows 7 e ogni visitatore che utilizza Firefox vede la pagina ridimensionata. Comunque, Internet Explorer e Safari ora fanno lo stesso, e credo che Chrome seguirà.

La parte difficile è: quando apro la pagina vedo il layout corretto. Se controllo il livello di zoom del browser, mi dice 100%: quando apro la stessa pagina con Firefox o Internet Explorer, tutto viene ridimensionato (ingrandito) del 25%. Se controllo il livello di zoom nelle impostazioni del browser, dice 100%. Se faccio lo zoom indietro due volte (all'80%) vedo il layout originale.

C'è un modo semplice per impostare il livello di scala/zoom dpi predefinito da CSS, JavaScript o forse un tag di intestazione?

Ecco alcuni screenshot per spiegare un po 'il mio problema.

The "right" layout Questo è il layout corretto utilizzato negli ultimi anni. La pagina è centrata e sul lato sinistro e destro è un po 'di sfondo

the "zoomed" in Su Firefox, IE e Safari la stessa pagina sullo stesso computer appare così. Viene ingrandito, non si vede lo sfondo e si vede un po 'meno del contenuto totale.

Quindi ora la mia domanda: cosa posso fare, per far apparire la stessa pagina allo stesso modo su diversi computer che vengono al ridimensionamento. So che molte cose differiscono sempre ma la scala dovrebbe essere la stessa.

Edit:

scala sempre la pagina con transform: scala (.75); transfor-origine: 100%; 0; non è sempre adatto, perché se un utente con l'impostazione del 100% DPI visita la pagina, tutto è minimizzato per lui. Non riesco sempre a ridimensionare la pagina. Devo in qualche modo identificare se l'utente ha impostato il suo sistema operativo su 100% o 125% di ridimensionamento DPI.

Edit:

sì, c'è un'opzione per determinare il fattore di scala impostato. Almeno per il mio setup funziona ora. Aggiungo uno screenshot con due browser aperto sulla stessa macchina (in alto a Chrome, Firefox basso) per vedere la differenza (e il problema che ha bisogno seriamente per ottenere fisso da qualcuno)

device pixel ratio differnce from browser to browser on the same machine<code>enter code here</code>

+0

Wel Immagino che si possa ridimensionare il corpo per adattarlo sempre a 'width: 100vw' e quindi usare'% 'per ridimensionare gli elementi in modo che il browser sia sempre uguale a tutti. Ma immagino che sia molto lavoro su un sito già codificato. – Persijn

+1

@Persijn Sì, questo è vero, sarebbe molto lavoro. Io elogio il signore quando finalmente decidiamo di emigrare in un nuovo sistema di negozi e rilasciamo questo demone autocostruito a cui appartiene, la parte più profonda dell'inferno: – Ello

+0

http://stackoverflow.com/questions/995914/catch-browsers -zoom-event-in-javascript Spiacente, non è possibile – Persijn

risposta

6

È possibile controllare il livello dpi browser con javascript e ingrandire il contenuto della pagina di conseguenza con i CSS (se necessario).

if(window.devicePixelRatio == 1) 
    $("body").addClass("zoom2x") 

Dove zoom2x è una classe CSS.

.zoom2x{ 
     zoom: 200%; /* all browsers */ 
    -moz-transform: scale(2); /* Firefox */ 
} 

Potrebbe essere un controllo incrociato i tuoi dpi attuali impostazione here e verificare i risultati.

+1

grazie a questo ha funzionato. Ho modificato la mia domanda e aggiunto uno screenshot – Ello

0

Non sembra per essere una correzione di codice per questo, ma può essere risolto modificando le impostazioni del browser. Vedi link qui sotto:

https://support.mozilla.org/en-US/questions/962979 Stop Firefox DPI Scaling (when Windows setting is at 125%)

+1

Grazie per la risposta, ma non posso accettare questa soluzione perché ho bisogno di qualcosa che funzioni sul computer degli utenti, non sul mio. Non ci si può aspettare che un utente debba modificare le impostazioni perché alcuni produttori di browser sono impazziti cambiando politica in modo non ridondante. Se ogni browser trattasse questo problema allo stesso modo, potrei adattarmi ad esso. Inoltre, ogni browser serio implementerebbe una sorta di fallback prima del cambiamento, una bandiera o qualcosa del genere. Ma il modo in cui Mozilla è andato è molto più che giusto. Cambia le funzioni di ridimensionamento fondamentali senza una spiegazione e ignorando i hundrets ofusercomplaints – Ello