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?


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.


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;

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)


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


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>

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;

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.


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>

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


-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;
    }

-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


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.


3
¿Es margin-downuna propiedad nueva o quiso decir margin-bottom?
Bjørn-Roger Kringsjå
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.