Come posso ridimensionare un'intera pagina Web con CSS?


153

Utilizzando Firefox, è possibile ingrandire un'intera pagina Web semplicemente premendo CTRL +. Ciò che fa è ingrandire proporzionalmente l'intera pagina Web (caratteri, immagini, ecc.).

Come posso replicare la stessa funzionalità usando semplicemente CSS?

Esiste qualcosa del tipo page-size: 150%(che aumenterebbe le parti dell'intera pagina di x%?)


7
La funzione di zoom della pagina di Firefox appare in ogni browser moderno: replicarla sembra piuttosto inutile.
Quentin,

1
Sono d'accordo con David. Sembra quasi inutile replicarlo dal momento che i browser oggi hanno questa funzione integrata ....
utente

5
questa sarebbe effettivamente una funzione incredibilmente utile per i dispositivi mobili. Molti telefoni stanno ora aumentando il loro PPI senza tener conto della differenza (a parte iPhone4, ovviamente).
DA.

38
Non lo sta replicando. Potrebbe essere utile per qualcosa di simile a un'anteprima di pagina / elemento in un div incorporato.
RichieHH,

3
Il progettista della pagina dovrebbe essere in grado di impostare uno zoom predefinito per la sua pagina. Ho una pagina che era grande quando l'ho fatta, ma piccola ora a causa di schermi ad alta risoluzione: lonniebest.com/CardTrick Invece di rifare la pagina, vorrei essere ingrandito per impostazione predefinita.
Lonnie Best

Risposte:


182

Potresti essere in grado di utilizzare la zoomproprietà CSS - supportata in IE 5.5+, Opera e Safari 4 e Chrome

Posso usare: css Zoom

Firefox è l'unico browser principale che non supporta Zoom ( elemento bugzilla qui ) ma è possibile utilizzare la proprietà "proprietaria" -moz-transform in Firefox 3.5 .

Quindi puoi usare:

div.zoomed { 
    zoom: 3; 
    -moz-transform: scale(3); 
    -moz-transform-origin: 0 0;
} 

1
La proprietà di zoom proprietaria è supportata solo da IE. reference.sitepoint.com/css/zoom#compatibilitysection
Quentin,

15
David, quel riferimento è molto obsoleto - guarda le versioni del browser che elenca. Zoom CSS è supportato in tutti i principali browser attuali ad eccezione di Firefox. E non è più proprietario di nessuna delle estensioni CSS -moz-.
Jon Galloway,

3
Nota: penso che le altre soluzioni che sono state proposte - come em e il ridimensionamento basato su% - sono più "pure", ma non sono necessariamente pratiche sulla maggior parte dei layout web a meno che non siano state costruite in questo modo da zero.
Jon Galloway,

1
Ho testato Opera 10b2 e non sembra supportarlo. Firefox si comporta di notte in modo strano (il frammento ingrandito scompare). IE5 / 6 sono buggy. Funziona bene solo in WebKit.
Kornel,

2
grazie jon, ottime informazioni! in firefox -moz-transform scale funziona davvero, ma a seconda del tuo caso d'uso potresti dover correggere la posizione dell'elemento usando -moz-transform-origin (cfr. developer.mozilla.org/En/CSS/-moz-transform -origin )
futtta il

81

Questa è una risposta piuttosto tardiva, ma puoi usarla

body {
   transform: scale(1.1);
   transform-origin: 0 0;
   // add prefixed versions too.
}

per ingrandire la pagina del 110%. Sebbene lo zoomstile sia presente, Firefox non lo supporta ancora tristemente.

Inoltre, questo è leggermente diverso dallo zoom. Il css transformfunziona come uno zoom dell'immagine, ti allargare la vostra pagina, ma non è la causa di riflusso, etc.


Modifica ha aggiornato l'origine della trasformazione.


1
Grazie per questo, ma hai bisogno di alcuni punti e virgola tra le dichiarazioni. Inoltre, quando ho provato questo, la pagina si è spostata a sinistra, oltre il margine sinistro, in modo che la parte sinistra della pagina non fosse più visibile. L'aggiunta delle varie dichiarazioni "... transform-origin: 0 0" corrispondenti ha risolto il problema.
Dave Burton,

sì, avrei dovuto menzionare che il contenuto è troncato transform. Grazie per il commento.
Kumarharsh,

1
Sono d'accordo con @Dave Burton: usare transform-origin: 0 0;fa quello che voglio. Ad esempio, per ingrandire la pagina al 150%: transform: scale(1.5); transform-origin: 0 0;. Credo che la buona risposta di @kumar_harsh dovrebbe essere corretta.
Kai Carver,

@KaiCarver se usi questo metodo, si tradurrà sempre in ritaglio. Non importa per quale punto usi transform-origin. Quello che ho scritto è solo un esempio di quale valore usare. Ovviamente sei libero di usare transform-origin: 0 0se si adatta al tuo caso d'uso (o se non ti interessa cosa c'è nell'angolo in basso a destra)
kumarharsh

@AngularM puoi condividere uno snippet di codice per mostrare il comportamento? Sono sicuro che ci sono altri motivi per questo.
Kumarharsh,

18

Se il tuo CSS è costruito completamente intorno exo emunità, questo potrebbe essere possibile e fattibile. Dovresti solo dichiarare font-size: 150%nel tuo stile per bodyo html. Ciò dovrebbe causare un ridimensionamento proporzionale di ogni altra lunghezza. Tuttavia, non puoi ridimensionare le immagini in questo modo, a meno che non abbiano anche uno stile.

Ma questo è un grande se sulla maggior parte dei siti, in ogni caso.


3
Ciò cambierebbe solo la dimensione dei miei caratteri. CTRL + propone anche larghezze, altezze e dimensioni dell'immagine fisse.

2
Lo so, ma è il più vicino possibile con CSS puro. Inoltre, non cambiano solo i caratteri, ma tutto ciò in cui le dimensioni sono specificate come multipli della dimensione del carattere. Significato, tutto quello in cui si è utilizzato %, emo di exunità.
Joey,

1
Questo non è corretto. Ho testato la soluzione che ho elencato di seguito (zoom + -moz-transform properties) e funziona su FF3.5, IE6 +, Safari e Opera. Ridimensiona immagini e testo. Puoi ridimensionare le pagine nei CSS.
Jon Galloway,

6

Come dice Johannes - non abbastanza rappresentante per commentare direttamente la sua risposta - puoi davvero farlo fintanto che tutte le dimensioni degli elementi sono specificate come un multiplo della dimensione del carattere. Significato, tutto ciò in cui hai usato%, em o ex unità". Anche se penso che% sia basato sul contenere l'elemento, non sulla dimensione del carattere.

E normalmente non useresti queste unità relative per le immagini, dato che sono composte da pixel, ma c'è un trucco che lo rende molto più pratico.

Se lo definisci, body{font-size: 62.5%};1em sarà equivalente a 10px. Per quanto ne so, questo funziona su tutti i principali browser.

Quindi puoi specificare le tue immagini quadrate (ad esempio) 100px con width: 10em; height: 10em;e supponendo che il ridimensionamento di Firefox sia impostato sul valore predefinito, le immagini avranno la loro dimensione naturale.

La marca body{font-size: 125%};e tutto, comprese le immagini, avranno una dimensione originale doppia.


Non capisco, se dico body {font-size: 62.5%; font-size: 125%} - come definirebbe 1em come 10px. Il browser potrebbe semplicemente ignorare la prima dichiarazione sulla dimensione del carattere e quindi semplicemente fare il 125% = 10px?

Penso che tu abbia frainteso. non faresti entrambi allo stesso tempo. 62,5 x2 = 125 ... per mostrare come puoi ridimensionare le cose regolando il valore.
Ape-inago,

Sì. Avrei dovuto dire 'allora se usi Javascript per impostare body {font-size: 125%} tutti gli elementi della pagina raddoppieranno'.
e100

3

Con questo codice 1em o 100% sarà uguale all'1% dell'altezza del corpo

document.body.style.fontSize = ((window.innerHeight/100)*6.25)+"%"

2
 * {
transform: scale(1.1, 1.1)
}

questo trasformerà ogni elemento nella pagina


1

Jon Tan ha fatto questo con il suo sito - http://jontangerine.com/ Tutto ciò che include le immagini è stato dichiarato in ems. Qualunque cosa. Ecco come si ottiene l'effetto desiderato. Lo zoom del testo e lo zoom dello schermo producono quasi lo stesso risultato.


1

I CSS non saranno in grado di eseguire lo zoom su richiesta, ma se si accoppiano i CSS con JS, è possibile modificare alcuni valori per ingrandire una pagina. Tuttavia, come è stato detto, questa funzionalità è standard al giorno d'oggi nei browser moderni: non è necessario replicarla. È un dato di fatto, replicarlo rallenterà il tuo sito Web (più cose da caricare, più JS o CSS da analizzare o eseguire e applicare, ecc.)


È una funzionalità standard del browser, ma l'aggiunta della funzione direttamente al sito significa che non è necessario fare affidamento sull'esperienza (1) dell'utente con il browser scelto e (2) istruzioni specifiche del browser
Ags1

1

Ho il seguente codice che ridimensiona l'intera pagina attraverso le proprietà CSS. L'importante è impostare body.style.width sull'inverso dello zoom per evitare lo scorrimento orizzontale. È inoltre necessario impostare transform-origin in alto a sinistra per mantenere la parte in alto a sinistra del documento nella parte in alto a sinistra della finestra.

        var zoom = 1;
        var width = 100;

        function bigger() {
            zoom = zoom + 0.1;
            width = 100 / zoom;
            document.body.style.transformOrigin = "left top";
            document.body.style.transform = "scale(" + zoom + ")";
            document.body.style.width = width + "%";
        }
        function smaller() {
            zoom = zoom - 0.1;
            width = 100 / zoom;
            document.body.style.transformOrigin = "left top";
            document.body.style.transform = "scale(" + zoom + ")";
            document.body.style.width = width + "%";
        }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.