iframe con altura autoajustable
12 seguidores
Buenas...
Tengo una tabla en la que quiero colocar un iframe que contenga un htm externo y tal... El ancho del htm externo es siempre el mismo (300 px), así que le he puesto al iframe y a la celda de la tabla ese ancho... pero la altura del htm externo es variable, y me gustaría que no me salga scrollbar, sino que el iframe autoajuste su altura según la altura del htm externo.... ¿me explico?
Todo lo que he hecho y visto siempre consiste en iframes con anchura y altura fijados, pero no se si podemos dejar la altura como autoajustable de alguna manera....
Graaaacias de nuevo
CarlosJ
los iframes no son autoajustables, así que será complicado....lo único que se me ocurre, pero que nunca he intentado es variar la altura del frame dinámicamente con js, de igual manera que varías la altura de una capa.
No se si se podrá hacer, pero se puede intentar.,.,.a ver que tal. De cualquier manera aunque se pudiera hacer supongo que no será algo muy compatible con todos los navegadores.
Alter Ebro
Si pones la altura del iframe en porcentaje a 100% se ajustara al tamaño de la celda en la que esta contenido, y si le pones el overflow en hidden no te aparecera el scroll, o el atributo scrolling="no".
saludos!
CarlosJ
uummm...vaya, eso no lo sabía, muy bueno.
txuma Plus
Se me ocurre una posibilidad, pero habría que pulirla y ver bien cómo hacerla. Consistiría en tener un frame oculto para poder almacenar una variable con la altura. Esa variable se la pasamos desde el documento que tiene el contenido, porque hemos metido todo ese contenido en un div y hemos calculado su tamaño. Sería algo así:
top.nameframoculto.variable = document.getElementById('capa').offsetHeight;
Y en el documento que contiene el IFRAME 'pintamos' ese iframe usando el valor que extraemos de esa variable.
Tal vez por aquí puedan ir los tiros.
Un abrazo
meddle
billy, asumiendo como has dicho que el externo tiene siempre 350px de ancho y añadiendo dos supuestos mas (no padding y no margin en el externo), tenemos lo siguiente:
PRINCIPAL:
(mejorado)
<code><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test IFRAME</title>
<script type="text/javascript">
// <![CDATA[
function recalcula(){
var daH = (document.body && document.body.clientHeight)?parent.interior.document.body.clientHeight: 0;
daH = (document.addBinding)?daH+20:daH+5;
//alert(daH);
document.getElementById("elIframe").style.height = daH + "px";
}
function cargar(url){
parent.interior.location.href=url;
}
// ]]>
</script>
<style type="text/css">
iframe {
width : 350px;
overflow : hidden;
}
</style>
</head>
<body>
<a href="cargada.html" onclick="cargar(this.href);return false;">cargada</a> |
<a href="cargada2.html" onclick="cargar(this.href);return false;">cargada2.html</a> |
<a href="cargada3.html" onclick="cargar(this.href);return false;">cargada3.html</a><br />
<iframe id="elIframe" name="interior" scrolling="no" src ="cargada.html" onload="recalcula()"></iframe>
</body>
</html></code>
EXTERNO/S:
<code><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test Externa</title>
<style type="text/css">
html, body {
padding : 0;
margin : 0;
width : 350px;
}
</style>
</head>
<body>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras vitae neque ac massa porttitor pretium. Ut iaculis, lacus sit amet blandit interdum, arcu ipsum mollis felis, sed cursus elit purus vel ligula. Maecenas turpis libero, bibendum vitae, vehicula eu, dignissim non, urna. Sed sagittis. Cras eu augue vel nunc congue rutrum. Vestibulum adipiscing, justo sit amet vehicula tincidunt, turpis nulla tincidunt sem, sit amet volutpat odio felis sed ante. Sed tincidunt. Etiam ac leo. Donec leo neque, luctus id, mattis nec, aliquet vitae, magna. Nam et nulla ut odio molestie semper. Sed aliquam enim sed nunc. Nulla egestas pretium wisi. Nam vitae dui. Phasellus consectetuer. Nulla nulla ante, porta a, facilisis et, venenatis et, turpis. Sed condimentum, felis et fermentum dictum, quam velit consectetuer risus, in posuere nunc arcu quis magna. Aenean ultrices sollicitudin ipsum. Maecenas quam arcu, vestibulum vel, ultrices eget, auctor sit amet, ante. Donec aliquet, tortor at condimentum tempus, dolor lectus interdum odio, at vulputate risus lectus eu eros.</p>
<p>Aenean tincidunt pellentesque lorem. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nullam leo. Vestibulum hendrerit. Nullam a enim sit amet neque rhoncus euismod. Aliquam adipiscing. Quisque rutrum vulputate nibh. Integer venenatis commodo orci. Donec feugiat, turpis eu malesuada sagittis, tortor sapien mollis nibh, vel mollis leo neque in magna. Etiam in elit. Cras posuere mauris ac felis.</p>
</body>
</html></code>
txuma Plus
no sé por qué, pero suponía que meddle tenía la solución !!!! ;)
meddle
jeje ;)
de todas maneras no deja de ser un apaño y no he probado demasidaos documentos, asi que podria fallar. a ver que tal le va a billy y ya veremos.
meddle
he modificdo un poco la principal para probar distintos tamaños de pagina e incluso paginas con solamente imagenes.
Funciona ok en Mozilla/IE6.
billy
Alter Ebro: si le pongo la altura al 100% el iframe no se autoajusta a la altura del contenido, sino que se queda en 150 pixels de alto (no me preguntes por qué...)
El lunes a primera hora pruebo lo tuyo meddle.
Muchas gracias a todos
Alter Ebro
pos nose, a mi se me adapta al tamaño.
ejemplo aqui
de todas maneras el ejemplo de meddle funciona muy bien.
Un Saludo!
meddle
por si alguien quiere probar, paso un link con el codigo de arriba en funcionamiento (pa los mas perros, vamos, que hasta os cuesta copiar y pegar, jaja): http://meddle.dzygn.com/others/iframe/
Alter Ebro, tu codigo necesita tablas, aunque parece que funciona. No es nada personal contra ti, sino mas bien de mi contra las tablas, soy muy cerrado con eso ;-)
Alter Ebro
jeje, no problem
loopecio
AL PELO!.. justo lo que necesitaba!!
Es curioso, ir al foro a postear un problema y encontrarte con que ya está puesto y con buenas soluciones.
ME ENCANTA DMSTK! :mrgreen: gracias, por la parte que me toca.
elbirretnafn
¿Sabéis cómo hacer que funcione lo de meddle en Opera?
Mil gracias a los valientes.
elbirretnafn
¿Nadie tiene alguna solución...?
damianmuti
Sres, revivo este tema con una consultilla bastante simple quizá, pero q no sé cómo solucionar.
meddle, en su genial respuesta, dejó a cada enlance con el sig code q pueden checkear viendo el code source del siguiente enlace
http://meddle.dzygn.com/others/iframe/
Ahora bien, como se lo aplico a un on(release) en flash?
Sé q con un getURL("javascript:blahblahblah;"); se podría, pero me pierdo al no saber donde ubicar el html q debería cargar dentro del iframe.
Alguna sugerencia?
Muchas gracias :)
PD: saque la "i" del onclick xq el foro me oculta el evento :)
damianmuti
oops :(
Nadie sabe nada al respecto, mis queridos?
socebi2
Meddle: tu respuesta de hace años solucionó mis dolores de cabeza. Graaaaacias!!!! Y gracias al que tuvo la misma duda que yo, pero en el 2003.
hartum
De hecho meddle ahora es Zigotica ;-)
plat_du_jour
Muchas gracias Meddle, Zigotica o como sea tu nick actuelmente...
Tu solución del 2003 sigue calmando dolores de cabeza!!!
Grande!!!
pablobrei
hola, que tal? soy nuevo por aqui.
el ejemplo de meddle me ha servido y funciona lo más bien, pero tengo un pequeño inconveniente que si no lo resuelvo, de nada me habra servido copiar ese codigo, y aqui solicito vuestra ayuda.
Si pruebo el ejemplo funciona lo más bien, cada solapa abre un archivo aparte en el iframe, y la altura se ajusta sin problema.
Pero... este html en realidad se carga dentro de otor iframe, es decir:
tengo index.html, que tiene un cabezal y un iframe llamado "contenedor", en el cual se abren todas las ventanas del sitio.
Una de las que se abre, se llama "pruebaframe" (que es el ejemplo de middle).
Cuando voy a dicha ventana, y aprieto alguna de las solapas, el contenido, o sea, la pagina externa, me la abre fuera de "contenedor".
Me explico?
Es como si a "pruebaform.html" tendria que decirle que cuando abra esas paginas, en lugar de decirle parent.interior (interior es el nombre del otro iframe) tuviera que decirle que "interior" está cargado dentro de "contenedor".
Espero haber sido mas o menos claro, y que alguien pueda tener una solucion.
MUCHAS GRACIAS
PABLO