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.