Iframe HTML: deshabilitar el desplazamiento

84

Tengo el siguiente iframe en mi sitio:

<iframe src="<<URL>>" height="800" width="800" sandbox="allow-same-origin allow-scripts allow-forms" scrolling="no" style="overflow: hidden"></iframe>

Y tiene barras de desplazamiento.
¿Cómo deshacerse de ellos?

Michał Herman
fuente
5
Herman: creo que scrolling="no"debería funcionar, es un trabajo para mí. ¿está en HTML5?
Yagnesh Agola
@Yagnesh He publicado una muestra de mi iframe y no está funcionando.
Michał Herman
Lo he intentado con su código y funciona bien sin desplazamiento. Por favor, compruebe si el iframe está debajo de cualquier div.
Yagnesh Agola
¿Quizás el <body> dentro del iframe está agregando las barras de desplazamiento, y no el <iframe>?
Oriadam

Respuestas:

162

Desafortunadamente, no creo que sea posible en HTML5 totalmente conforme con solo propiedades HTML y CSS. Sin embargo, afortunadamente, la mayoría de los navegadores aún admiten la scrollingpropiedad (que se eliminó de la especificación HTML5 ).

overflowno es una solución para HTML5, ya que el único navegador moderno que lo admite incorrectamente es Firefox.

Una solución actual sería combinar los dos:

<iframe src="" scrolling="no"></iframe>
iframe {
  overflow: hidden;
}

Pero esto podría volverse obsoleto a medida que se actualicen los navegadores. Es posible que desee comprobar esto para obtener una solución de JavaScript: http://www.christersvensson.com/html-tool/iframe.htm

Editar: lo he comprobado y scrolling="no"funcionaré en IE10, Chrome 25 y Opera 12.12.

James Donnelly
fuente
1
El atributo de desplazamiento <iframe> no es compatible con HTML5. Utilice CSS en su lugar. Fuente: w3schools.com/tags/att_iframe_scrolling.asp
Linus
4
@LinusAn esto es lo que dice la primera línea de mi respuesta. Sin embargo, el problema es que los navegadores no pueden eliminarlo por completo, ya que rompería los sitios web HTML4, por lo que el scrollingatributo sigue siendo una opción viable, aunque no válida.
James Donnelly
Esto es correcto, pero en Chrome esto rompe el scrollIntoView en elementos dentro del iframe. Ver code.google.com/p/chromium/issues/detail?id=137214
Peter Brand
@Linus: desafortunadamente, eso no debería funcionar, y los navegadores en los que funciona no son compatibles: el desbordamiento no debe aplicarse a elementos reemplazados como botones, elementos de formulario e iframes.
Jimmy Breck-McKye
3
@DaniSpringer Se SUPONE que esta solución recorta el contenido. Cargar un iframe sin la capacidad de desplazarse no cambia automáticamente el tamaño de toda la página secundaria para que se ajuste a las dimensiones del iframe designadas.
Nate
20

Resolví el mismo problema con este css:

    pointer-events:none;
John Smith
fuente
8
Parece bloquear el intento físico de desplazarse, pero no las barras de desplazamiento visuales ...
LWC
6
Esto evitará que los eventos del mouse se activen en el iframe, incluido el desplazamiento. Demasiado amplio para ser una solución sólida
Tom McKenzie
Tuve que usar esto para evitar el desplazamiento en un iframe que está incrustado en una foreignobjectimagen SVG (simplemente overflow: hiddenno funcionó)
Tim
Esto no detiene el desplazamiento a través de la rueda de desplazamiento del mouse (en Chromium). También creo que el OP quiere ocultar las barras de desplazamiento; debe mover su respuesta a stackoverflow.com/questions/2712034 ya que creo que esto resuelve parcialmente esa pregunta.
EoghanM
Gracias, al menos el desplazamiento de iframe está desactivado.
Sören
11

Parece funcionar usando

html, body { overflow: hidden; }

dentro del IFrame

editar: Por supuesto, esto solo funciona, si tiene acceso al contenido del Iframe (que tengo en mi caso)

Alex
fuente
1
Sin embargo, cuando usa un iframe, generalmente no puede acceder a lo que contiene, porque a menudo es para incluir contenido en otro dominio.
Tim Malone
2

Establezca todo el contenido en:

#yourContent{
 width:100%;
height:100%;  // in you csss
}

El caso es que el desplazamiento del iframe lo establece el contenido, NO el iframe por sí mismo.

configura el contenido al 100% en el interior con CSS y el deseado para el iframe en HTML

Verde Mc
fuente
1

Intenté scrolling = "no" en mi navegador actual (versión de Google Chrome 60.0.3112.113 (compilación oficial) (64 bits)) y no funcionó. Sin embargo, scroll = "no" funcionó. Podría valer la pena intentarlo

<iframe src="<<URL>>" height="800" width="800" sandbox="allow-same-origin allow-scripts allow-forms" scroll="no" style="overflow: hidden"></iframe>
Zach Imholte
fuente
1
en realidad, profundizando un poco más en esto, creo que la causa fue que yo solo cambié el height = "" para que sea más largo que el iFrame real que estoy tratando de cargar. Entonces, hacer que la altura sea lo suficientemente larga como para que el desplazamiento sea absurdo en realidad hizo que la barra de desplazamiento desapareciera para mí. Sin embargo, estoy tratando de mostrar la página completa, que podría ser diferente de lo que está tratando de lograr.
Zach Imholte
Esto parece más un comentario que una respuesta real a la pregunta.
1
¡Gracias JDV! Soy nuevo en StackOverflow, así que intenté comentar pero no tenía suficientes puntos de reputación o como se llame. Así que estoy de acuerdo, debería haber sido un comentario. ¡Apreciamos tu orientación!
Zach Imholte
Hay formas en las que puede contribuir hasta obtener la reputación necesaria. stackoverflow.com/help/whats-reputation
0

Agregue estos estilos ... para su etiqueta iframe ...

overflow-x:hidden;
overflow-y:hidden;
Sasi
fuente
8
Overflowno funciona en iFrames HTML5. El único navegador que lo admite incorrectamente es Firefox.
James Donnelly
1
@JamesDonnelly En realidad, no especificó que sea html5, por eso usamos overflow
sasi
0

Dado que el "desbordamiento: oculto"; La propiedad no funciona correctamente en el iFrame, pero parece dar resultados cuando se aplica al cuerpo de la página dentro del iFrame, intenté esto:

iframe body { overflow:hidden; }

Que sorprendentemente hizo el trabajo con Firefox, la eliminación de esas barras de desplazamiento molestos.

Sin embargo, en Safari, ha aparecido una extraña línea transparente de 2 píxeles de ancho en el lado derecho del iframe, entre su contenido y su borde. Extraño.

Seb Zaremba
fuente
0

Simplemente agregue un iframe con el estilo de cualquiera de las opciones siguientes. Espero que esto resuelva el problema.

1ª opción:

<iframe src="https://www.skyhub.ca/featured-listing" style="position: absolute; visibility: hidden;" onload="this.style.position='static'; this.style.visibility='visible';" scrolling="no" frameborder="0" marginheight="0px" marginwidth="0px" height="400px" width="1200px" allowfullscreen></iframe>

2da opción:

<iframe src="https://www.skyhub.ca/featured-listing" style="display: none;" onload="this.style.display='block';" scrolling="no" frameborder="0" marginheight="0px" marginwidth="0px" height="400px" width="1200px" allowfullscreen></iframe>
Arshadul Hossain
fuente
0

Esto funciona para mi:

<style>
*{overflow:hidden!important;}
html{overflow:scroll!important;}
</style>

Nota: si necesita barra de desplazamiento en cualquier otro elemento, agregue también css {overflow:scroll!important;}a ese elemento

Fuego negro
fuente
-1

Para este marco:

    <iframe src="" name="" id=""></iframe>

Intenté esto en mi código css:

    iframe#put the value of id here::-webkit-scrollbar {
         display: none;
    }
Lucas Santos
fuente
-1

debajo de las versiones html5

iframe {
    overflow:hidden;
}

En html5

<iframe seamless="seamless"  ....>


iframe[seamless]{

   overflow: hidden;
}

pero aún no es compatible correctamente

Prashobh
fuente
2
Según esto y esto , el seamlessatributo se ha eliminado de la especificación.
Tim Malone
-5

Puede utilizar el siguiente código CSS:

margin-top: -145px; 
margin-left: -80px;
margin-bottom: -650px;

Para limitar la vista del iframe.

jean nouvellet
fuente
3
¿Es margin-downuna propiedad nueva o quiso decir margin-bottom?
Bjørn-Roger Kringsjå