@lxs, überhaupt nicht. Ich habe es geliebt und es mit +1 bewertet. Gut gemacht.
Jonathan M
7
Ich habe festgestellt, dass auf Chrome sowohl der Zoom als auch die Webkit-Transformation angewendet werden, wodurch die Skalierung zweimal angewendet wird.
Da alle modernen Browser Transform schon seit einiger Zeit unterstützen, würde ich die Verwendung der nicht festgelegten Version in Betracht ziehen (zumindest als Alternative).
Wortwart
55
Ich habe eine Lösung gefunden, die in IE und Firefox funktioniert (zumindest in den aktuellen Versionen). In Safari / Chrome wird die Größe des Iframes auf 75% seiner ursprünglichen Größe geändert, aber der Inhalt des Iframes wird überhaupt nicht skaliert. In Opera scheint dies nicht zu funktionieren. Das fühlt sich ein bisschen esoterisch an. Wenn es also einen besseren Weg gibt, würde ich Vorschläge begrüßen.
<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>
Hinweis: Ich musste das wrapElement für Firefox verwenden. Aus irgendeinem Grund wird in Firefox, wenn Sie das Objekt um 75% verkleinern, aus Layoutgründen immer noch die Originalgröße des Bildes verwendet. (Versuchen Sie, das div aus dem obigen Beispielcode zu entfernen, und Sie werden sehen, was ich meine.)
Ich habe gerade getestet und für mich hat keine der anderen Lösungen funktioniert. Ich habe es einfach versucht und es funktionierte perfekt auf Firefox und Chrome, genau wie ich erwartet hatte:
Sie möchten overflow: hidden;dem .wrapElement auch etwas hinzufügen . Wenn Sie iframe { width: 200%; height: 200%; transform: scale(0.5); }iframe verwenden, läuft es über.
Ozgrozer
Dies ist der Ansatz auf dem neuesten Stand der Technik. Vielen Dank!
Fuggi
10
Follow-up zu der Antwort von lxs : Ich habe ein Problem festgestellt, bei dem sowohl das zoomals auch das --webkit-transformTags gleichzeitig Chrome (Version 15.0.874.15) durch einen Doppelzoom-Effekt zu verwirren scheinen. Ich war in der Lage , das Problem zu umgehen , durch den Austausch zoommit -ms-zoom(gezielten nur bei IE), Chrome verläßt Verwendung von nur das machen --webkit-transformTag, und die gelöschte Dinge.
Sie müssen den Iframe nicht mit einem zusätzlichen Tag versehen. Stellen Sie einfach sicher, dass Sie die Breite und Höhe des Iframes um den gleichen Betrag erhöhen, um den Sie den Iframe verkleinern.
zB um den Iframe-Inhalt auf 80% zu skalieren:
#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;}
Grundsätzlich müssen Sie die Abmessungen skalieren, um die gleiche Größe des Iframes zu erhalten.
Es wäre 0,8 für 80%, aber das ist ein proprietärer Microsoftismus, also wahrscheinlich nicht geeignet. Es würde auch nur funktionieren, wenn das in den Rahmen geladene Dokument bearbeitet werden könnte, was unwahrscheinlich ist.
Quentin
7
Ich dachte, ich würde teilen, was ich mir ausgedacht habe, und dabei viel von dem verwenden, was oben angegeben wurde. Ich habe Chrome nicht überprüft, aber es funktioniert in IE, Firefox und Safari, soweit ich das beurteilen kann.
Die spezifischen Offsets und der Zoomfaktor in diesem Beispiel haben zum Verkleinern und Zentrieren von zwei Websites in Iframes für Facebook-Registerkarten (810 Pixel Breite) verwendet.
Die beiden verwendeten Sites waren eine WordPress-Site und ein Ning-Netzwerk. Ich bin nicht sehr gut mit HTML, also hätte dies wahrscheinlich besser gemacht werden können, aber das Ergebnis scheint gut zu sein.
Wenn Sie möchten, dass der Iframe und sein Inhalt beim Ändern der Fenstergröße skaliert werden, können Sie Folgendes auf das Größenänderungsereignis des Fensters sowie auf das Ereignis zum Laden der Iframes festlegen.
Dadurch werden der Iframe und sein Inhalt auf 100% Breite des Wrap-Divs skaliert (oder wie viel Prozent Sie möchten). Als zusätzlichen Bonus müssen Sie das CSS des Frames nicht auf fest codierte Werte einstellen, da alle dynamisch festgelegt werden. Sie müssen sich nur darum kümmern, wie das Wrap-Div angezeigt werden soll.
Ich habe dies getestet und es funktioniert auf Chrome, IE11 und Firefox.
Ich denke, Sie können dies tun, indem Sie die gewünschte Höhe und Breite mit Javascript berechnen (über document.body.clientWidth usw.) und dann den Iframe wie folgt in Ihren HTML-Code einfügen:
Entschuldigen Sie meine Unwissenheit, aber würde das nicht den Iframe zu 80% der Quellseite machen, anstatt die Quellseite selbst herauszuzoomen?
Phill Healey
3
Für diejenigen unter Ihnen, die Probleme haben, dies im IE zum Laufen zu bringen, ist es hilfreich, -ms-zoomwie unten vorgeschlagen zu verwenden und die Zoomfunktion für das #wrapdiv und nicht für die iframeID zu verwenden. Nach meiner Erfahrung würde mit der zoomFunktion, die versucht, das iframe-Div von #framezu skalieren, die iframe-Größe und nicht der darin enthaltene Inhalt skaliert (was Sie anstreben).
Sieht aus wie das. Funktioniert für mich unter IE8, Chrome und FF.
Die # wrap # frame-Lösung funktioniert einwandfrei, solange die Zahlen in #wrap #frame mal dem Skalierungsfaktor sind. Es wird nur der Teil des verkleinerten Frames angezeigt. Sie können es hier sehen, indem Sie Websites verkleinern und in eine interessante Form bringen (mit dem Woodmark-jQuery-Plugin):
Offensichtlich versuchen Sie nicht, das Elternteil zu reparieren, sondern fügen dem Körper des Kindes nur den Stil "Zoom: 50%" mit etwas Javascript hinzu.
Vielleicht könnte man den Stil des "HTML" -Elements festlegen, habe das aber nicht versucht.
Tu das nicht. Von developer.mozilla.org/en-US/docs/Web/CSS/zoom : "Diese Funktion ist nicht Standard und befindet sich nicht auf einer Standardspur. Verwenden Sie sie nicht auf Produktionsstandorten mit Blick auf das Web: Sie funktioniert nicht für Jeder Benutzer. Es kann auch große Inkompatibilitäten zwischen Implementierungen geben, und das Verhalten kann sich in Zukunft ändern. "
Hackel
+1 Dies (Ändern des Inhalts des Iframes, nicht des Iframes selbst) scheint eine bessere Idee zu sein. Ich brauchte eine Möglichkeit, eine Seite zu verkleinern und als Vorschau dieser Seite anzuzeigen, und dieser Ansatz löste das Problem.
Akinuri
@akinuri Ja genau dafür habe ich es benutzt. Ich habe eine Reihe von Lösungen durchgearbeitet, aber dies schien die einfachste zu sein. Ich habe gerade die Iframes durchlaufen und sie alle verkleinert, um eine Seite mit Miniaturansichten zu erhalten. Es sind keine Änderungen an den untergeordneten Seiten erforderlich.
Graham
1
Wenn Ihr HTML-Code mit CSS gestaltet ist, können Sie wahrscheinlich verschiedene Stylesheets für verschiedene Größen verknüpfen.
Ich glaube nicht, dass HTML eine solche Funktionalität hat. Das einzige, was ich mir vorstellen kann, ist eine serverseitige Verarbeitung. Vielleicht können Sie einen Bild-Snapshot der Webseite erhalten, die Sie bereitstellen möchten, ihn auf dem Server skalieren und dem Client bereitstellen. Dies wäre jedoch eine nicht interaktive Seite. (Vielleicht könnte eine Imagemap den Link haben, aber immer noch.)
Eine andere Idee wäre, eine serverseitige Komponente zu haben, die den HTML-Code ändert. So ähnlich wie die Firefox 2.0-Zoomfunktion. Dies ist natürlich kein perfektes Zoomen, aber es ist besser als nichts.
Wie gesagt, ich bezweifle, dass Sie es schaffen können.
Vielleicht können Sie zumindest den Text selbst skalieren, indem Sie einen Stil festlegen font-size: 80%;.
Ungetestet, nicht sicher, ob es funktioniert, und die Größe von Boxen oder Bildern wird nicht geändert.
Antworten:
Die Lösung von Kip sollte unter Opera und Safari funktionieren, wenn Sie das CSS in Folgendes ändern:
Möglicherweise möchten Sie auch einen Überlauf angeben: versteckt in #frame, um Bildlaufleisten zu vermeiden.
quelle
Ich habe eine Lösung gefunden, die in IE und Firefox funktioniert (zumindest in den aktuellen Versionen). In Safari / Chrome wird die Größe des Iframes auf 75% seiner ursprünglichen Größe geändert, aber der Inhalt des Iframes wird überhaupt nicht skaliert. In Opera scheint dies nicht zu funktionieren. Das fühlt sich ein bisschen esoterisch an. Wenn es also einen besseren Weg gibt, würde ich Vorschläge begrüßen.
Hinweis: Ich musste das
wrap
Element für Firefox verwenden. Aus irgendeinem Grund wird in Firefox, wenn Sie das Objekt um 75% verkleinern, aus Layoutgründen immer noch die Originalgröße des Bildes verwendet. (Versuchen Sie, das div aus dem obigen Beispielcode zu entfernen, und Sie werden sehen, was ich meine.)Ich habe etwas davon aus dieser Frage herausgefunden .
quelle
Nachdem ich stundenlang damit zu kämpfen hatte und versuchte, es in IE8, 9 und 10 zum Laufen zu bringen, funktionierte Folgendes für mich.
Dieses abgespeckte CSS funktioniert ab dem 07.01.2014 in FF 26, Chrome 32, Opera 18 und IE9 -11:
Stellen Sie für IE8 die Breite / Höhe so ein, dass sie mit dem Iframe übereinstimmt, und fügen Sie -ms-zoom zum .wrap-Container div hinzu:
Verwenden Sie einfach Ihre bevorzugte Methode für das Browser-Sniffing, um das entsprechende CSS bedingt einzuschließen. Siehe Gibt es eine Möglichkeit, browserspezifisches bedingtes CSS in einer * .css-Datei auszuführen? für einige Ideen.
IE7 war eine verlorene Ursache, da -ms-zoom erst in IE8 existierte.
Hier ist der aktuelle HTML-Code, mit dem ich getestet habe:
http://jsfiddle.net/esassaman/PnWFY/
quelle
Ich habe gerade getestet und für mich hat keine der anderen Lösungen funktioniert. Ich habe es einfach versucht und es funktionierte perfekt auf Firefox und Chrome, genau wie ich erwartet hatte:
und die CSS:
Dies skaliert den gesamten Inhalt um 30%. Die Breiten- / Höhenprozentsätze müssen natürlich entsprechend angepasst werden (1 / scale_factor).
quelle
overflow: hidden;
dem.wrap
Element auch etwas hinzufügen . Wenn Sieiframe { width: 200%; height: 200%; transform: scale(0.5); }
iframe verwenden, läuft es über.Follow-up zu der Antwort von lxs : Ich habe ein Problem festgestellt, bei dem sowohl das
zoom
als auch das--webkit-transform
Tags gleichzeitig Chrome (Version 15.0.874.15) durch einen Doppelzoom-Effekt zu verwirren scheinen. Ich war in der Lage , das Problem zu umgehen , durch den Austauschzoom
mit-ms-zoom
(gezielten nur bei IE), Chrome verläßt Verwendung von nur das machen--webkit-transform
Tag, und die gelöschte Dinge.quelle
Sie müssen den Iframe nicht mit einem zusätzlichen Tag versehen. Stellen Sie einfach sicher, dass Sie die Breite und Höhe des Iframes um den gleichen Betrag erhöhen, um den Sie den Iframe verkleinern.
zB um den Iframe-Inhalt auf 80% zu skalieren:
Grundsätzlich müssen Sie die Abmessungen skalieren, um die gleiche Größe des Iframes zu erhalten.
quelle
html {zoom: 0.4;}? -)
quelle
Ich dachte, ich würde teilen, was ich mir ausgedacht habe, und dabei viel von dem verwenden, was oben angegeben wurde. Ich habe Chrome nicht überprüft, aber es funktioniert in IE, Firefox und Safari, soweit ich das beurteilen kann.
Die spezifischen Offsets und der Zoomfaktor in diesem Beispiel haben zum Verkleinern und Zentrieren von zwei Websites in Iframes für Facebook-Registerkarten (810 Pixel Breite) verwendet.
Die beiden verwendeten Sites waren eine WordPress-Site und ein Ning-Netzwerk. Ich bin nicht sehr gut mit HTML, also hätte dies wahrscheinlich besser gemacht werden können, aber das Ergebnis scheint gut zu sein.
quelle
Wenn Sie möchten, dass der Iframe und sein Inhalt beim Ändern der Fenstergröße skaliert werden, können Sie Folgendes auf das Größenänderungsereignis des Fensters sowie auf das Ereignis zum Laden der Iframes festlegen.
Dadurch werden der Iframe und sein Inhalt auf 100% Breite des Wrap-Divs skaliert (oder wie viel Prozent Sie möchten). Als zusätzlichen Bonus müssen Sie das CSS des Frames nicht auf fest codierte Werte einstellen, da alle dynamisch festgelegt werden. Sie müssen sich nur darum kümmern, wie das Wrap-Div angezeigt werden soll.
Ich habe dies getestet und es funktioniert auf Chrome, IE11 und Firefox.
quelle
Ich denke, Sie können dies tun, indem Sie die gewünschte Höhe und Breite mit Javascript berechnen (über document.body.clientWidth usw.) und dann den Iframe wie folgt in Ihren HTML-Code einfügen:
Ich habe dies nicht in IE6 getestet, aber es scheint mit den guten zu funktionieren :)
quelle
Für diejenigen unter Ihnen, die Probleme haben, dies im IE zum Laufen zu bringen, ist es hilfreich,
-ms-zoom
wie unten vorgeschlagen zu verwenden und die Zoomfunktion für das#wrap
div und nicht für dieiframe
ID zu verwenden. Nach meiner Erfahrung würde mit derzoom
Funktion, die versucht, das iframe-Div von#frame
zu skalieren, die iframe-Größe und nicht der darin enthaltene Inhalt skaliert (was Sie anstreben).Sieht aus wie das. Funktioniert für mich unter IE8, Chrome und FF.
quelle
zoom
im IE8-Standardmodus, Verwendung-ms-zoom
im Mackenmodus.Dies war meine Lösung auf einer Seite mit 890px Breite
quelle
Die # wrap # frame-Lösung funktioniert einwandfrei, solange die Zahlen in #wrap #frame mal dem Skalierungsfaktor sind. Es wird nur der Teil des verkleinerten Frames angezeigt. Sie können es hier sehen, indem Sie Websites verkleinern und in eine interessante Form bringen (mit dem Woodmark-jQuery-Plugin):
http://www.genautica.com/sandbox/woodmark-index.html
quelle
Also wahrscheinlich nicht die beste Lösung, scheint aber OK zu funktionieren.
Offensichtlich versuchen Sie nicht, das Elternteil zu reparieren, sondern fügen dem Körper des Kindes nur den Stil "Zoom: 50%" mit etwas Javascript hinzu.
Vielleicht könnte man den Stil des "HTML" -Elements festlegen, habe das aber nicht versucht.
quelle
Wenn Ihr HTML-Code mit CSS gestaltet ist, können Sie wahrscheinlich verschiedene Stylesheets für verschiedene Größen verknüpfen.
quelle
Ich glaube nicht, dass HTML eine solche Funktionalität hat. Das einzige, was ich mir vorstellen kann, ist eine serverseitige Verarbeitung. Vielleicht können Sie einen Bild-Snapshot der Webseite erhalten, die Sie bereitstellen möchten, ihn auf dem Server skalieren und dem Client bereitstellen. Dies wäre jedoch eine nicht interaktive Seite. (Vielleicht könnte eine Imagemap den Link haben, aber immer noch.)
Eine andere Idee wäre, eine serverseitige Komponente zu haben, die den HTML-Code ändert. So ähnlich wie die Firefox 2.0-Zoomfunktion. Dies ist natürlich kein perfektes Zoomen, aber es ist besser als nichts.
Davon abgesehen habe ich keine Ideen mehr.
quelle
Wie gesagt, ich bezweifle, dass Sie es schaffen können.
Vielleicht können Sie zumindest den Text selbst skalieren, indem Sie einen Stil festlegen
font-size: 80%;
.Ungetestet, nicht sicher, ob es funktioniert, und die Größe von Boxen oder Bildern wird nicht geändert.
quelle