Como todos los navegadores modernos han sido compatibles con transform durante bastante tiempo, consideraría usar la versión no prefijada (al menos como alternativa).
wortwart
55
Encontré una solución que funciona en IE y Firefox (al menos en las versiones actuales). En Safari / Chrome, el iframe se redimensiona al 75% de su tamaño original, pero el contenido dentro del iframe no se escala en absoluto. En Opera, esto no parece funcionar. Esto se siente un poco esotérico, así que si hay una mejor manera de hacerlo, agradecería cualquier sugerencia.
<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>
Nota: tuve que usar el wrapelemento para Firefox. Por alguna razón, en Firefox cuando reduce el objeto en un 75%, todavía usa el tamaño original de la imagen por razones de diseño. (Intente eliminar el div del código de muestra anterior y verá lo que quiero decir).
Acabo de probar y para mí, ninguna de las otras soluciones funcionó. Simplemente intenté esto y funcionó perfectamente en Firefox y Chrome, tal como esperaba:
También desea agregar overflow: hidden;al .wrapelemento. Cuando usa iframe { width: 200%; height: 200%; transform: scale(0.5); }iframe comienza a desbordarse.
ozgrozer
Este es el enfoque de vanguardia. ¡Gracias!
Fuggi
10
Seguimiento de la respuesta de lxs : noté un problema en el que tener las etiquetas zoomy --webkit-transformal mismo tiempo parece confundir a Chrome (versión 15.0.874.15) al hacer un efecto de doble zoom. Pude solucionar el problema reemplazándolo zoompor -ms-zoom(dirigido solo a IE), dejando que Chrome use solo la --webkit-transformetiqueta, y eso aclaró las cosas.
No necesita envolver el iframe con una etiqueta adicional. Solo asegúrese de aumentar el ancho y la altura del marco flotante en la misma cantidad que reduce el marco flotante.
por ejemplo, para escalar el contenido del iframe al 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;}
Básicamente, para obtener el mismo tamaño de iframe, debe escalar las dimensiones.
Sería 0.8 para el 80%, pero ese es un Microsoftismo patentado, por lo que probablemente no sea adecuado. También funcionaría si el documento cargado en el marco pudiera editarse, lo cual es poco probable.
Quentin
7
Pensé en compartir lo que se me ocurrió, utilizando gran parte de lo que se dio anteriormente. No he comprobado Chrome, pero por lo que puedo ver funciona en IE, Firefox y Safari.
Las compensaciones específicas y el factor de zoom en este ejemplo funcionaron para reducir y centrar dos sitios web en iframes para pestañas de Facebook (810 px de ancho).
Los dos sitios utilizados fueron un sitio de WordPress y una red de ning. No soy muy bueno con html, por lo que esto probablemente podría haberse hecho mejor, pero el resultado parece bueno.
Si desea que el iframe y su contenido se escalen cuando la ventana cambia de tamaño, puede configurar lo siguiente para el evento de cambio de tamaño de la ventana, así como el evento de carga de iframes.
Esto hará que el iframe y su contenido escalen al 100% del ancho del wrap div (o el porcentaje que desee). Como una ventaja adicional, no tiene que establecer el CSS del marco en valores codificados, ya que todos se configurarán dinámicamente, solo tendrá que preocuparse por cómo desea que se muestre el div.
He probado esto y funciona en Chrome, IE11 y Firefox.
Creo que puede hacer esto calculando la altura y el ancho que desee con javascript (a través de document.body.clientWidth, etc.) y luego inyectando el iframe en su HTML de esta manera:
Disculpe mi ignorancia, pero ¿no sería eso el iframe el 80% de la página de origen, en lugar de alejar la página de origen en sí?
Phill Healey
3
Para aquellos de ustedes que tienen problemas para hacer que esto funcione en IE, es útil usar -ms-zoomcomo se sugiere a continuación y usar la función de zoom en el #wrapdiv, no en la iframeidentificación. En mi experiencia, con la zoomfunción tratando de escalar el iframe div de #frame, escalaría el tamaño del iframe y no el contenido dentro de él (que es lo que está buscando).
Se ve como esto. Funciona para mí en IE8, Chrome y FF.
La solución #wrap #frame funciona bien, siempre que los números en #wrap sean #frame multiplicado por el factor de escala. Solo muestra esa parte del marco reducido. Puede verlo aquí para reducir los sitios web y ponerlo en forma de pinterest (con el complemento jQuery woodmark):
No hagas esto. De developer.mozilla.org/en-US/docs/Web/CSS/zoom : "Esta característica no es estándar y no está en una pista estándar. No la use en sitios de producción que se dirigen a la Web: no funcionará para cada usuario. También puede haber grandes incompatibilidades entre implementaciones y el comportamiento puede cambiar en el futuro ".
Hackel
+1 Esto (modificar el contenido del iframe, no el iframe en sí) parece una mejor idea. Necesitaba una forma de reducir la escala de una página y mostrarla como una vista previa de esa página y este enfoque resolvió el problema.
akinuri
@akinuri Sí, eso es exactamente para lo que lo usé. Revisé varias soluciones, pero esta parecía la más fácil. Simplemente recorrí los iframes y los reduje a todos para obtener una página de miniaturas. No se requieren cambios en las páginas secundarias.
Graham
1
Si su HTML está diseñado con CSS, probablemente pueda vincular diferentes hojas de estilo para diferentes tamaños.
No creo que HTML tenga tal funcionalidad. Lo único que puedo imaginar que haría el truco es hacer un procesamiento del lado del servidor. Tal vez podría obtener una instantánea de la imagen de la página web que desea publicar, escalarla en el servidor y entregarla al cliente. Sin embargo, esta sería una página no interactiva. (tal vez un mapa de imágenes podría tener el enlace, pero aún así).
Otra idea sería tener un componente del lado del servidor que alteraría el HTML. Algo así como la función de zoom firefox 2.0. Por supuesto, esto no es un zoom perfecto, pero es mejor que nada.
Como dije, dudo que puedas hacerlo.
Tal vez pueda escalar al menos el texto en sí, estableciendo un estilo font-size: 80%;.
No probado, no estoy seguro de que funcione, y no cambiará el tamaño de cuadros o imágenes.
Respuestas:
La solución de Kip debería funcionar en Opera y Safari si cambia el CSS a:
También es posible que desee especificar desbordamiento: oculto en #frame para evitar barras de desplazamiento.
fuente
Encontré una solución que funciona en IE y Firefox (al menos en las versiones actuales). En Safari / Chrome, el iframe se redimensiona al 75% de su tamaño original, pero el contenido dentro del iframe no se escala en absoluto. En Opera, esto no parece funcionar. Esto se siente un poco esotérico, así que si hay una mejor manera de hacerlo, agradecería cualquier sugerencia.
Nota: tuve que usar el
wrap
elemento para Firefox. Por alguna razón, en Firefox cuando reduce el objeto en un 75%, todavía usa el tamaño original de la imagen por razones de diseño. (Intente eliminar el div del código de muestra anterior y verá lo que quiero decir).Encontré algo de esto en esta pregunta .
fuente
Después de luchar con esto durante horas tratando de que funcione en IE8, 9 y 10, esto es lo que funcionó para mí.
Este CSS simplificado funciona en FF 26, Chrome 32, Opera 18 e IE9 -11 a partir del 1/7/2014:
Para IE8, establezca el ancho / alto para que coincida con el iframe y agregue -ms-zoom al contenedor .wrap div:
Simplemente use su método favorito para que el buscador de navegador incluya condicionalmente el CSS apropiado, consulte ¿Hay alguna manera de hacer CSS condicional específico del navegador dentro de un archivo * .css? para algunas ideas
IE7 fue una causa perdida ya que -ms-zoom no existía hasta IE8.
Aquí está el HTML real que probé con:
http://jsfiddle.net/esassaman/PnWFY/
fuente
Acabo de probar y para mí, ninguna de las otras soluciones funcionó. Simplemente intenté esto y funcionó perfectamente en Firefox y Chrome, tal como esperaba:
y el css:
Esto escala todo el contenido en un 30%. Los porcentajes de ancho / alto, por supuesto, deben ajustarse en consecuencia (1 / scale_factor).
fuente
overflow: hidden;
al.wrap
elemento. Cuando usaiframe { width: 200%; height: 200%; transform: scale(0.5); }
iframe comienza a desbordarse.Seguimiento de la respuesta de lxs : noté un problema en el que tener las etiquetas
zoom
y--webkit-transform
al mismo tiempo parece confundir a Chrome (versión 15.0.874.15) al hacer un efecto de doble zoom. Pude solucionar el problema reemplazándolozoom
por-ms-zoom
(dirigido solo a IE), dejando que Chrome use solo la--webkit-transform
etiqueta, y eso aclaró las cosas.fuente
No necesita envolver el iframe con una etiqueta adicional. Solo asegúrese de aumentar el ancho y la altura del marco flotante en la misma cantidad que reduce el marco flotante.
por ejemplo, para escalar el contenido del iframe al 80%:
Básicamente, para obtener el mismo tamaño de iframe, debe escalar las dimensiones.
fuente
html {zoom: 0.4;}? -)
fuente
Pensé en compartir lo que se me ocurrió, utilizando gran parte de lo que se dio anteriormente. No he comprobado Chrome, pero por lo que puedo ver funciona en IE, Firefox y Safari.
Las compensaciones específicas y el factor de zoom en este ejemplo funcionaron para reducir y centrar dos sitios web en iframes para pestañas de Facebook (810 px de ancho).
Los dos sitios utilizados fueron un sitio de WordPress y una red de ning. No soy muy bueno con html, por lo que esto probablemente podría haberse hecho mejor, pero el resultado parece bueno.
fuente
Si desea que el iframe y su contenido se escalen cuando la ventana cambia de tamaño, puede configurar lo siguiente para el evento de cambio de tamaño de la ventana, así como el evento de carga de iframes.
Esto hará que el iframe y su contenido escalen al 100% del ancho del wrap div (o el porcentaje que desee). Como una ventaja adicional, no tiene que establecer el CSS del marco en valores codificados, ya que todos se configurarán dinámicamente, solo tendrá que preocuparse por cómo desea que se muestre el div.
He probado esto y funciona en Chrome, IE11 y Firefox.
fuente
Creo que puede hacer esto calculando la altura y el ancho que desee con javascript (a través de document.body.clientWidth, etc.) y luego inyectando el iframe en su HTML de esta manera:
No probé esto en IE6 pero parece funcionar con los buenos :)
fuente
Para aquellos de ustedes que tienen problemas para hacer que esto funcione en IE, es útil usar
-ms-zoom
como se sugiere a continuación y usar la función de zoom en el#wrap
div, no en laiframe
identificación. En mi experiencia, con lazoom
función tratando de escalar el iframe div de#frame
, escalaría el tamaño del iframe y no el contenido dentro de él (que es lo que está buscando).Se ve como esto. Funciona para mí en IE8, Chrome y FF.
fuente
zoom
en el modo de estándares IE8, usar-ms-zoom
en el modo peculiar.Esta fue mi solución en una página con un ancho de 890 px
fuente
La solución #wrap #frame funciona bien, siempre que los números en #wrap sean #frame multiplicado por el factor de escala. Solo muestra esa parte del marco reducido. Puede verlo aquí para reducir los sitios web y ponerlo en forma de pinterest (con el complemento jQuery woodmark):
http://www.genautica.com/sandbox/woodmark-index.html
fuente
Probablemente no sea la mejor solución, pero parece funcionar bien.
Obviamente, no estoy tratando de arreglar al padre, simplemente agregando el estilo "zoom: 50%" al cuerpo del niño con un poco de javascript.
Tal vez podría establecer el estilo del elemento "HTML", pero no lo intenté.
fuente
Si su HTML está diseñado con CSS, probablemente pueda vincular diferentes hojas de estilo para diferentes tamaños.
fuente
No creo que HTML tenga tal funcionalidad. Lo único que puedo imaginar que haría el truco es hacer un procesamiento del lado del servidor. Tal vez podría obtener una instantánea de la imagen de la página web que desea publicar, escalarla en el servidor y entregarla al cliente. Sin embargo, esta sería una página no interactiva. (tal vez un mapa de imágenes podría tener el enlace, pero aún así).
Otra idea sería tener un componente del lado del servidor que alteraría el HTML. Algo así como la función de zoom firefox 2.0. Por supuesto, esto no es un zoom perfecto, pero es mejor que nada.
Aparte de eso, estoy sin ideas.
fuente
Como dije, dudo que puedas hacerlo.
Tal vez pueda escalar al menos el texto en sí, estableciendo un estilo
font-size: 80%;
.No probado, no estoy seguro de que funcione, y no cambiará el tamaño de cuadros o imágenes.
fuente