Поскольку все современные браузеры уже давно поддерживают transform, я бы подумал об использовании версии без префиксов (по крайней мере, в качестве альтернативы).
Ворсварт
55
Я нашел решение, которое работает в IE и Firefox (по крайней мере, в текущих версиях). В Safari / Chrome размер iframe изменяется до 75% от его первоначального размера, но содержимое в iframe вообще не масштабируется. В Opera это не похоже на работу. Это кажется немного эзотерическим, поэтому, если есть лучший способ сделать это, я буду рад предложениям.
<style>#wrap {width:600px;height:390px;padding:0;overflow: hidden;}#frame {width:800px;height:520px;border:1px solid black;}#frame {zoom:0.75;-moz-transform: scale(0.75);-moz-transform-origin:00;}</style>
...
<p>Some text before the frame</p><divid="wrap"><iframeid="frame"src="test2.html"></iframe></div><p>Some text after the frame</p></body>
Примечание: мне пришлось использовать wrapэлемент для Firefox. По какой-то причине в Firefox, когда вы уменьшаете объект на 75%, он по-прежнему использует исходный размер изображения для макета. (Попробуйте удалить div из примера кода выше, и вы поймете, что я имею в виду.)
Я только что проверил и для меня ни одно из других решений не сработало. Я просто попробовал это, и он отлично работал на Firefox и Chrome, как я и ожидал:
Вы также хотите добавить overflow: hidden;к .wrapэлементу. При использовании iframe { width: 200%; height: 200%; transform: scale(0.5); }iframe начинает переполняться.
Озгрозер
Это современный подход. Спасибо!
Фуджи
10
Followup для ответа LXS игровая : я заметил проблему , где наличие как zoomи --webkit-transformтеги , в то же время , кажется, запутать Chrome (версия 15.0.874.15), выполнив двойной масштаба рода эффект. Я был в состоянии работать вокруг этого вопроса путем замены zoomс -ms-zoom(целевой только в IE), в результате чего Chrome использовать только в --webkit-transformтеге, и очищается вещи.
Вам не нужно оборачивать iframe дополнительным тегом. Просто убедитесь, что вы увеличиваете ширину и высоту элемента iframe на ту же величину, что и размер элемента iframe.
например, чтобы увеличить содержание iframe до 80%:
#frame { /* Example size! */
height:400px;/* original height */
width:100%;/* original width */}#frame {
height:500px;/* new height (400 * (1/0.8) ) */
width:125%;/* new width (100 * (1/0.8) )*/
transform: scale(0.8);
transform-origin:00;}
По сути, для получения одинакового размера iframe вам нужно масштабировать размеры.
Было бы 0,8 на 80%, но это проприетарный Microsoftism, поэтому, вероятно, не подходит. Это также будет работать только в том случае, если документ, загруженный во фрейм, можно редактировать, что маловероятно.
Квентин,
7
Думал, что поделюсь тем, что я придумал, используя большую часть того, что было дано выше. Я не проверял Chrome, но, насколько я могу судить, он работает в IE, Firefox и Safari.
Специфические смещения и коэффициент масштабирования в этом примере работали для сокращения и центрирования двух веб-сайтов в фреймах для вкладок Facebook (ширина 810 пикселей).
Использовались два сайта: WordPress и Ning Network. Я не очень хорошо разбираюсь в html, так что, возможно, это можно было бы сделать лучше, но результат кажется хорошим.
Если вы хотите, чтобы iframe и его содержимое масштабировались при изменении размера окна, вы можете установить следующее для события resize окна, а также для события onload iframes.
Это приведет к тому, что iframe и его содержимое масштабируются до 100% ширины div обтекания (или любого другого процента, который вы хотите). В качестве дополнительного бонуса вам не нужно устанавливать css кадра в жестко закодированные значения, так как все они будут установлены динамически, вам просто нужно будет позаботиться о том, как вы хотите, чтобы отображался div Wrap.
Я проверил это, и он работает на Chrome, IE11 и Firefox.
Я думаю, что вы можете сделать это, вычислив желаемую высоту и ширину с помощью javascript (через document.body.clientWidth и т. Д.), А затем вставив iframe в ваш HTML-код следующим образом:
Извините за мое незнание, но не сделает ли это iframe 80% исходной страницы, а не уменьшит масштаб самой исходной страницы?
Фил Хили
3
Для тех из вас, кто испытывает затруднения при работе в IE, полезно использовать, -ms-zoomкак предложено ниже, и использовать функцию масштабирования в #wrapdiv, а не в iframeid. По моему опыту, с zoomфункцией, пытающейся масштабировать div iframe #frame, он будет масштабировать размер iframe, а не содержимое внутри него (что вы и собираетесь).
Похоже на это. У меня работает на IE8, Chrome и FF.
Решение #wrap #frame работает нормально, если числа в #wrap #frame умножены на коэффициент масштабирования. Он показывает только ту часть уменьшенного кадра. Вы можете видеть это здесь, уменьшая количество сайтов и переводя их в форму, похожую на интерес (с плагином woodmark jQuery):
Не делай этого. От developer.mozilla.org/en-US/docs/Web/CSS/zoom : «Эта функция нестандартна и не соответствует стандартам. Не используйте ее на рабочих сайтах, выходящих в Интернет: она не будет работать для каждый пользователь. Также могут быть большие несовместимости между реализациями, и поведение может измениться в будущем. "
хакель
+1 Это (изменение содержимого iframe, а не самого iframe) кажется лучшей идеей. Мне нужен был способ уменьшить страницу и показать ее как предварительный просмотр этой страницы, и этот подход решил проблему.
akinuri
@akinuri Да, именно для этого я и использовал. Я прошел через ряд решений, но это казалось самым простым. Я просто перебрал фреймы и сжал их все, чтобы получить страницу с миниатюрами. Никаких изменений на дочерних страницах не требуется.
Грэм
1
Если ваш html оформлен с помощью CSS, вы можете связать разные таблицы стилей для разных размеров.
Я не думаю, что HTML имеет такую функциональность. Единственное, что я могу себе представить, - это выполнить серверную обработку. Возможно, вы могли бы получить снимок изображения веб-страницы, которую вы хотите обслуживать, масштабировать ее на сервере и предоставить клиенту. Однако это будет неинтерактивная страница. (возможно, изображение может иметь ссылку, но все же.)
Другой идеей было бы иметь серверный компонент, который изменил бы HTML. Еще как функция масштабирования Firefox 2.0. это, конечно, не идеальное масштабирование, но лучше, чем ничего.
Как я уже сказал, я сомневаюсь, что вы можете сделать это.
Может быть, вы можете масштабировать хотя бы сам текст, установив стиль font-size: 80%;.
Не проверенный, не уверен, что это работает, и не будет изменять размеры коробок или изображений.
Ответы:
Решение Кипа должно работать на Opera и Safari, если вы измените CSS на:
Вы также можете указать overflow: hidden для #frame, чтобы предотвратить использование полос прокрутки.
источник
Я нашел решение, которое работает в IE и Firefox (по крайней мере, в текущих версиях). В Safari / Chrome размер iframe изменяется до 75% от его первоначального размера, но содержимое в iframe вообще не масштабируется. В Opera это не похоже на работу. Это кажется немного эзотерическим, поэтому, если есть лучший способ сделать это, я буду рад предложениям.
Примечание: мне пришлось использовать
wrap
элемент для Firefox. По какой-то причине в Firefox, когда вы уменьшаете объект на 75%, он по-прежнему использует исходный размер изображения для макета. (Попробуйте удалить div из примера кода выше, и вы поймете, что я имею в виду.)Я нашел кое-что из этого вопроса .
источник
После нескольких часов борьбы с этим, пытаясь заставить его работать в IE8, 9 и 10, вот что сработало для меня.
Этот урезанный CSS работает в FF 26, Chrome 32, Opera 18 и IE9 -11 с 07.01.2014:
Для IE8, установите ширину / высоту, чтобы соответствовать iframe, и добавьте -ms-zoom к div контейнера .wrap:
Просто используйте ваш любимый метод для анализа в браузере, чтобы условно включить соответствующий CSS, см. Есть ли способ сделать условный CSS для браузера внутри файла * .css? для некоторых идей.
IE7 проиграл, так как -ms-zoom не существовал до IE8.
Вот фактический HTML-код, с которым я тестировал:
http://jsfiddle.net/esassaman/PnWFY/
источник
Я только что проверил и для меня ни одно из других решений не сработало. Я просто попробовал это, и он отлично работал на Firefox и Chrome, как я и ожидал:
и CSS:
Это масштабирует все содержимое на 30%. Процент ширины / высоты, конечно, должен быть соответствующим образом скорректирован (1 / scale_factor).
источник
overflow: hidden;
к.wrap
элементу. При использованииiframe { width: 200%; height: 200%; transform: scale(0.5); }
iframe начинает переполняться.Followup для ответа LXS игровая : я заметил проблему , где наличие как
zoom
и--webkit-transform
теги , в то же время , кажется, запутать Chrome (версия 15.0.874.15), выполнив двойной масштаба рода эффект. Я был в состоянии работать вокруг этого вопроса путем заменыzoom
с-ms-zoom
(целевой только в IE), в результате чего Chrome использовать только в--webkit-transform
теге, и очищается вещи.источник
Вам не нужно оборачивать iframe дополнительным тегом. Просто убедитесь, что вы увеличиваете ширину и высоту элемента iframe на ту же величину, что и размер элемента iframe.
например, чтобы увеличить содержание iframe до 80%:
По сути, для получения одинакового размера iframe вам нужно масштабировать размеры.
источник
html {zoom: 0.4;}? -)
источник
Думал, что поделюсь тем, что я придумал, используя большую часть того, что было дано выше. Я не проверял Chrome, но, насколько я могу судить, он работает в IE, Firefox и Safari.
Специфические смещения и коэффициент масштабирования в этом примере работали для сокращения и центрирования двух веб-сайтов в фреймах для вкладок Facebook (ширина 810 пикселей).
Использовались два сайта: WordPress и Ning Network. Я не очень хорошо разбираюсь в html, так что, возможно, это можно было бы сделать лучше, но результат кажется хорошим.
источник
Если вы хотите, чтобы iframe и его содержимое масштабировались при изменении размера окна, вы можете установить следующее для события resize окна, а также для события onload iframes.
Это приведет к тому, что iframe и его содержимое масштабируются до 100% ширины div обтекания (или любого другого процента, который вы хотите). В качестве дополнительного бонуса вам не нужно устанавливать css кадра в жестко закодированные значения, так как все они будут установлены динамически, вам просто нужно будет позаботиться о том, как вы хотите, чтобы отображался div Wrap.
Я проверил это, и он работает на Chrome, IE11 и Firefox.
источник
Я думаю, что вы можете сделать это, вычислив желаемую высоту и ширину с помощью javascript (через document.body.clientWidth и т. Д.), А затем вставив iframe в ваш HTML-код следующим образом:
Я не проверял это в IE6, но, похоже, работает с хорошими :)
источник
Для тех из вас, кто испытывает затруднения при работе в IE, полезно использовать,
-ms-zoom
как предложено ниже, и использовать функцию масштабирования в#wrap
div, а не вiframe
id. По моему опыту, сzoom
функцией, пытающейся масштабировать div iframe#frame
, он будет масштабировать размер iframe, а не содержимое внутри него (что вы и собираетесь).Похоже на это. У меня работает на IE8, Chrome и FF.
источник
zoom
в режиме стандартов IE8, используйте-ms-zoom
в режиме причуд.Это было мое решение на странице шириной 890 пикселей
источник
Решение #wrap #frame работает нормально, если числа в #wrap #frame умножены на коэффициент масштабирования. Он показывает только ту часть уменьшенного кадра. Вы можете видеть это здесь, уменьшая количество сайтов и переводя их в форму, похожую на интерес (с плагином woodmark jQuery):
http://www.genautica.com/sandbox/woodmark-index.html
источник
Так что, вероятно, не лучшее решение, но, похоже, работает хорошо.
Очевидно, не пытаясь исправить родителя, просто добавив стиль «zoom: 50%» к телу ребенка с небольшим количеством javascript.
Может быть, можно установить стиль элемента «HTML», но не пробовал.
источник
Если ваш html оформлен с помощью CSS, вы можете связать разные таблицы стилей для разных размеров.
источник
Я не думаю, что HTML имеет такую функциональность. Единственное, что я могу себе представить, - это выполнить серверную обработку. Возможно, вы могли бы получить снимок изображения веб-страницы, которую вы хотите обслуживать, масштабировать ее на сервере и предоставить клиенту. Однако это будет неинтерактивная страница. (возможно, изображение может иметь ссылку, но все же.)
Другой идеей было бы иметь серверный компонент, который изменил бы HTML. Еще как функция масштабирования Firefox 2.0. это, конечно, не идеальное масштабирование, но лучше, чем ничего.
Кроме этого, у меня нет идей.
источник
Как я уже сказал, я сомневаюсь, что вы можете сделать это.
Может быть, вы можете масштабировать хотя бы сам текст, установив стиль
font-size: 80%;
.Не проверенный, не уверен, что это работает, и не будет изменять размеры коробок или изображений.
источник