Comment puis-je l'échelle le contenu d'une iframe?
Comment puis-je l'échelle le contenu d'une iframe (dans mon exemple c'est une page HTML, et n'est pas un popup) dans une page de mon site web?
Par exemple, je veux afficher le contenu qui apparaît dans l'iframe à 80% de la taille originale.
- Question de grattage de bonnes pratiques? Je ne le pense pas.
- Cas d'utilisation typique : l'aperçu de la page/site en ligne de l'éditeur wysiwyg
Vous devez vous connecter pour publier un commentaire.
De Kip solution doit travailler sur Opera et Safari si vous modifiez le fichier CSS pour:
Vous pouvez également spécifier overflow: hidden sur le #cadre pour éviter les barres de défilement.
body
est contenue dans#viewport
.width: calc(600px / 0.75); height: calc(390px / 0.75);
pour l'iframe de dimensionnement.J'ai trouvé une solution qui fonctionne sous IE et Firefox (au moins sur les versions actuelles). Sur Safari/Chrome, l'iframe est réduite à 75% de sa taille d'origine, mais le contenu de l'iframe n'est pas mis à l'échelle à tous. À l'Opéra, cela ne semble pas fonctionner. Cela se sent un peu ésotérique, donc si il ya une meilleure façon que j'avais ouvert aux suggestions.
Note: j'ai dû utiliser la
wrap
élément pour Firefox. Pour quelque raison, dans Firefox lorsque vous redimensionnez l'objet vers le bas de 75%, il utilise toujours la taille originale de l'image pour des raisons de mise en page. (Essayez de supprimer la div à partir de l'exemple de code ci-dessus et vous verrez ce que je veux dire.)J'ai trouvé quelques de cette de cette question.
Après avoir lutté avec pendant des heures à essayer de le faire fonctionner dans IE8, 9, et 10, voici ce qui a fonctionné pour moi.
Ce stripped-down CSS à l'œuvre dans FF 26, Chrome 32, Opéra de 18 ans, et IE9 -11 que de 1/7/2014:
Pour IE8, définissez la largeur/hauteur pour correspondre à l'iframe, et ajoutez -ms-zoom .envelopper div conteneur:
Suffit d'utiliser votre méthode préférée pour la détection de browser conditionnelle, d'inclure les CSS, voir Est-il un moyen de faire de navigateur conditionnelle CSS à l'intérieur d'un *.fichier css? pour quelques idées.
IE7 était une cause perdue depuis -ms-zoom n'existait pas jusqu'à IE8.
Voici le HTML j'ai testé avec:
http://jsfiddle.net/esassaman/PnWFY/
Suivi lxs réponse: j'ai remarqué un problème où le fait d'avoir à la fois la
zoom
et--webkit-transform
balises en même temps, semble confondre Chrome (version 15.0.874.15) en faisant un double-zoom espèce d'effet. J'ai pu contourner le problème en remplaçantzoom
avec-ms-zoom
(uniquement ciblé sur IE), en laissant de Chrome à faire usage de seulement la--webkit-transform
tag, et que clarifier les choses.Vous n'avez pas besoin d'envelopper l'iframe avec un autre tag. Assurez-vous simplement d'augmenter la largeur et la hauteur de l'iframe par le même montant que vous réduisez la taille de l'iframe.
par exemple, à l'échelle le contenu de l'iframe à 80% :
Fondamentalement, pour obtenir la même taille de l'iframe, vous devez adapter les dimensions.
J'ai pensé partager ce que j'ai trouvé, en utilisant une grande partie de ce qui a été donné ci-dessus. Je n'ai pas vérifié, google Chrome, mais il fonctionne dans internet explorer, Firefox et Safari, pour autant que je peux dire.
Les spécificités des décalages et facteur de zoom dans cet exemple travaillé pour la réduction et le centrage de deux sites web dans des iframes pour Facebook onglets (810px largeur).
Les deux sites ont un site wordpress et un réseau ning. Je ne suis pas très bon avec le html, cela peut sans doute pu faire mieux, mais le résultat semble bon.
Je viens de tester et pour moi, aucune des autres solutions n'a fonctionné.
J'ai simplement essayé et cela a fonctionné parfaitement sur Firefox et Chrome, comme je l'avais prévu:
et le css:
Ce balances tout le contenu de 30%. La largeur/hauteur des pourcentages de cours doivent être adaptés en conséquence (1/scale_factor).
overflow: hidden;
à la.wrap
élément. Lorsque vous utiliseziframe { width: 200%; height: 200%; transform: scale(0.5); }
iframe commence à déborder.html{zoom:0.4;} ?-)
Si vous voulez l'iframe et son contenu à l'échelle lorsque la fenêtre est redimensionnée, vous pouvez définir les options suivantes pour la fenêtre de redimensionnement de l'événement ainsi que les iframes événement onload.
Cela fera l'iframe et de son contenu à l'échelle 100% de la largeur de l'écharpe div (ou quelle que soit, en pourcentage, que vous voulez). Comme un bonus supplémentaire, vous n'avez pas à mettre le css de l'image pour codés en dur valeurs, car ils vont tous être défini de façon dynamique, vous aurez juste besoin de vous soucier de comment vous voulez que le wrap div à afficher.
Je l'ai testé et ça marche sur chrome, IE11, firefox et internet explorer.
Je pense que vous pouvez le faire par le calcul de la hauteur et la largeur que vous voulez avec javascript (via document.corps.clientWidth etc.) et puis d'injecter de l'iframe dans votre code HTML comme ceci:
Je n'ai pas tester cette dans IE6, mais il semble fonctionner avec les bons 🙂
Pour ceux d'entre vous de la difficulté à obtenir que cela fonctionne sous IE, il est utile d'utiliser
-ms-zoom
comme suggéré ci-dessous et utilisez la fonction de zoom sur la#wrap
div, pas laiframe
id. Dans mon expérience, avec lazoom
fonction essayant à l'échelle de l'iframe div de#frame
, il serait échelle de la taille de l'iframe et non pas le contenu à l'intérieur (qui est ce que vous allez pour).Ressemble à ceci. Fonctionne pour moi sur IE8, Chrome et FF.
zoom
dans IE8 Normes de la Mode, de l'utilisation-ms-zoom
en mode quirks.C'était ma solution sur une page avec 890px largeur
La #écharpe #cadre de la solution fonctionne très bien, aussi longtemps que les numéros #wrap est #frame fois le facteur d'échelle. Il montre que la partie de l'échelle réduite du cadre. Vous pouvez le voir ici mise à l'échelle vers le bas des sites web et de le mettre dans un pinterest comme la forme (avec la woodmark plugin jQuery):
http://www.genautica.com/sandbox/woodmark-index.html
Donc probablement pas la meilleure solution, mais semble fonctionner OK.
Évidemment pas de tenter de réparer le parent, tout en ajoutant le "zoom:50%" le style pour le corps de l'enfant avec un peu de javascript.
Peut-être pourrait définir le style de la "HTML" de l'élément, mais n'essayez pas que.
Si votre code html est de style avec css, vous pouvez probablement lier des feuilles de style différentes pour différentes tailles.
Je ne pense pas que le HTML est une telle fonctionnalité. La seule chose que je peux imaginer faire l'affaire: effectuer un traitement côté serveur. Vous pourriez peut-être obtenir une image instantanée de la page web que vous voulez servir, mise à l'échelle sur le serveur et de le servir au client. Ce serait un non-interactive page, cependant. (peut-être une image map pourrait avoir le lien, mais quand même.)
Une autre idée serait d'avoir un composant côté serveur qui serait de modifier le code HTML. Un peu comme le firefox 2.0 fonction de zoom. bien sûr, cela n'est pas parfait, le zoom, mais c'est mieux que rien.
Autre que cela, je suis à court d'idées.
Comme dit, je doute que vous pouvez faire.
Peut-être que vous pouvez mettre à l'échelle au moins le texte lui-même, en définissant un style
font-size: 80%;
.Pas testé, pas sûr qu'il fonctionne, et de ne pas redimensionner des boîtes ou des images.