Як я можу масштабувати всю веб-сторінку за допомогою CSS?


153

За допомогою Firefox ви можете збільшити всю веб-сторінку, просто натиснувши її CTRL +. Це робить пропорційно збільшити всю веб-сторінку (шрифти, зображення тощо).

Як я можу повторити ту саму функціональність, використовуючи просто CSS?

Чи є щось на зразок page-size: 150%(що збільшило б усі частини сторінки на x%?)


7
Функція масштабування сторінки Firefox з'являється в кожному сучасному браузері - копіювати це здається досить безглуздо.
Квентін

1
Я згоден з Девідом. Здається, безглуздо повторювати це, оскільки в браузерах зараз існують такі функції ...
користувач

5
це насправді було б неймовірно корисною функцією для мобільних пристроїв. Зараз багато телефонів збільшують ІРЦ, не враховуючи різниці (звичайно, крім iPhone4).
DA.

38
Це не повторює його. Це може бути корисно для чогось на зразок попереднього перегляду сторінки / елементів у вбудованому розділі.
RichieHH

3
Дизайнер сторінки повинен мати можливість встановити масштаб за замовчуванням для своєї сторінки. У мене є сторінка, яка була великою, коли я її робив, але зараз невеликою через дисплеї з високою роздільною здатністю: lonniebest.com/CardTrick Замість того, щоб переробляти сторінку, я хотів би бути збільшеним за замовчуванням.
Lonnie Best

Відповіді:


182

Можливо, ви зможете використовувати zoomвластивість CSS - підтримується в IE 5.5+, Opera та Safari 4 та Chrome

Чи можу я використовувати: css Збільшити

Firefox - єдиний головний браузер, який не підтримує масштабування ( тут використовується елемент bugzilla ), але ви можете використовувати "власницьку" властивість -moz-перетворення у Firefox 3.5 .

Отже, ви можете використовувати:

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

1
Власне властивість масштабування підтримується лише IE. reference.sitepoint.com/css/zoom#compatibilitysection
Квентін

15
Девіде, ця посилання дуже застаріла - подивіться у списках браузерних версій. CSS Zoom підтримується у всіх поточних основних браузерах, крім Firefox. І це не більш власницько, ніж будь-яке розширення -moz- CSS.
Джон Галлоуей

3
Примітка: Я думаю, що інші запропоновані рішення - такі як масштабування на основі em та% - є більш "чистими", але не обов'язково практичні для більшості макетів Інтернету, якщо ви не будували це з нуля.
Джон Галлоуей

1
Я тестував Opera 10b2, і, схоже, це не підтримує. Firefox вночі поводиться дивно (зникаючий фрагмент зникає). IE5 / 6 - баггі. Відмінно працює лише в WebKit.
Корнель

2
дякую Джон, чудова інформація! в масштабі firefox -moz-перетворення дійсно працює, але залежно від випадку використання вам може знадобитися виправити положення елемента за допомогою -moz-transform-origin (cfr. developer.mozilla.org/En/CSS/-moz-transform -origin )
футтта

81

Це досить пізня відповідь, але ви можете скористатися

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

щоб збільшити масштаб сторінки на 110%. Хоча zoomстиль є, Firefox все ще не підтримує його на жаль.

Також це трохи відрізняється від вашого масштабування. Це css transformпрацює як масштабування зображення, тому воно збільшить вашу сторінку, але не спричинить поповнення тощо.


Редагування оновило походження трансформації.


1
Дякую за це, але вам потрібні певні крапки з комою між деклараціями. Крім того, коли я спробував це, сторінка змістилася вліво, повз лівий край, так що ліва частина сторінки більше не була видно. Додаючи різні відповідні декларації "... transform-origin: 0 0", це виправлено.
Дейв Бертон

так, я мав би зазначити, що вміст вирізано transform. Дякуємо за коментар
кумархарш

1
Я згоден з @Dave Burton: використання transform-origin: 0 0;робить те, що я хочу. Наприклад, щоб збільшити сторінку до 150%: transform: scale(1.5); transform-origin: 0 0;. Я вважаю, що в іншому випадку хорошу відповідь слід виправити.
Кай Карвер

@KaiCarver, якщо ви використовуєте цей метод, це завжди призведе до відсікання. Незалежно від того, для якого пункту ви використовуєте transform-origin. Те, що я написав, - лише один приклад того, яке значення слід використовувати. Ви, звичайно, вільні в користуванні, transform-origin: 0 0якщо це відповідає вашому випадку використання (або якщо вам не байдуже, що там знаходиться в правому нижньому куті)
kumarharsh

@AngularM Ви можете поділитися фрагментом коду, щоб показати свою поведінку? Я впевнений, що для цього є якась інша причина.
кумархарш

18

Якщо ваш CSS побудований повністю навколо exабо emодиниць, це може бути можливим і здійсненним. Вам просто потрібно заявити font-size: 150%у своєму стилі для bodyабо html. Це повинно спричинити пропорційне масштабування будь-якої іншої довжини. Тим не менше не можеш масштабувати зображення, якщо вони теж не отримають стиль.

Але це дуже важливо, якщо на більшості сайтів так чи інакше.


3
Це змінило б лише розмір моїх шрифтів. CTRL + також розширює фіксовану ширину, висоту та розміри зображень.

2
Я знаю, але це так близько, як ви можете отримати чистий CSS. Крім того, змінюються не лише ваші шрифти, але й усе, де розміри задаються як кратні розміру шрифту. Значить, усе, де ви використовували %, emабо exодиниці.
Joey

1
Це просто не правильно. Я перевірив перелічене нижче рішення (властивості масштабування + -моз-перетворення), і воно працює на FF3.5, IE6 +, Safari та Opera. Він масштабує зображення, а також текст. Ви можете масштабувати сторінки в CSS.
Джон Галлоуей

6

Як каже Йоханнес - недостатньо представника, щоб коментувати його відповідь - ви дійсно можете це робити, доки розміри всіх елементів будуть вказані як кратні розміру шрифту. Значить, усе, де ви використовували%, em або ex одиниці ". Хоча я думаю, що% засновані на вмісті елемента, а не на шрифті.

І ти зазвичай не використовуєш ці відносні одиниці для зображень, враховуючи, що вони складаються з пікселів, але є хитрість, яка робить це набагато більш практичним.

Якщо ви визначите, body{font-size: 62.5%};то 1em буде еквівалентний 10px. Наскільки мені відомо, це працює у всіх основних браузерах.

Тоді ви можете вказати ваші (наприклад) квадратні зображення width: 10em; height: 10em;розміром 100 пікселів та припустити, що масштабування Firefox встановлено за замовчуванням, зображення матимуть їх природний розмір.

Зробити body{font-size: 125%};і все, включаючи зображення - буде подвійним оригінальним розміром.


Я не розумію, якщо скажу body {font-size: 62.5%; розмір шрифту: 125%} - як би це визначило, що 1em буде 10px. Чи може браузер просто ігнорувати першу декларацію розміру шрифту, а потім просто зробити 125% = 10 пікселів?

Я думаю, ти неправильно зрозумів. ви б не робили обох одночасно. 62,5 x2 = 125 ... щоб показати, як ви можете масштабувати речі, регулюючи значення.
Ape-inago

Так. Я повинен був би сказати "тоді, якщо ви використовуєте Javascript для встановлення body {font-size: 125%} всі елементи сторінки збільшаться вдвічі".
e100



1

Джон Тан зробив це зі своїм сайтом - http://jontangerine.com/ Все, включаючи зображення, було задекларовано в ems. Все. Так досягається бажаний ефект. Масштабування тексту та масштабування екрана дають майже такий самий результат.


1

CSS не зможе збільшити масштаб попиту, але якщо ви з'єднаєте CSS з JS, ви можете змінити деякі значення, щоб сторінка виглядала більшою. Однак, як було сказано, ця функція є стандартною в наші дні в сучасних браузерах: не потрібно її копіювати. Власне кажучи, його реплікація сповільнить ваш веб-сайт (більше завантажуваних речей, більше JS або CSS для розбору або виконання та застосування та ін.)


Це стандартна функція браузера, але додавання цієї функції безпосередньо на сайт означає, що вам не доведеться покладатися на (1) досвід користувача з обраним ним браузером та (2) інструкції для браузера
Ags1

1

У мене є такий код, який масштабує всю сторінку за допомогою властивостей CSS. Важливо - встановити body.style.width на зворотному напрямку, щоб уникнути горизонтальної прокрутки. Ви також повинні встановити походження трансформації вгорі ліворуч, щоб зберегти верхній лівий кут документа в лівій верхній частині вікна.

        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 + "%";
        }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.