Element iframe HTML - wyłącz przewijanie

86

Mam następujący element iframe w mojej witrynie:

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

I ma paski przewijania.
Jak się ich pozbyć?

Michał Herman
źródło
6
Herman - myślę, że scrolling="no"powinno działać, to działa dla mnie. czy to jest w HTML5?
Yagnesh Agola
@Yagnesh Wysłałem ci próbkę mojego iframe i nie działa.
Michał Herman
Próbowałem z twoim kodem i działa dobrze bez przewijania. Pls sprawdź, czy iframe jest pod jakimkolwiek div.
Yagnesh Agola
Być może <body> wewnątrz iframe dodaje paski przewijania, a nie <iframe>?
oriadam

Odpowiedzi:

166

Niestety nie wierzę, że jest to możliwe w pełnej zgodności HTML5 z tylko właściwościami HTML i CSS. Na szczęście jednak większość przeglądarek nadal obsługuje tę scrollingwłaściwość (która została usunięta ze specyfikacji HTML5 ).

overflownie jest rozwiązaniem dla HTML5, ponieważ jedyną nowoczesną przeglądarką, która błędnie to obsługuje, jest Firefox.

Obecnym rozwiązaniem byłoby połączenie tych dwóch:

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

Ale może to stać się przestarzałe w miarę aktualizacji przeglądarek. Możesz to sprawdzić, aby uzyskać rozwiązanie JavaScript: http://www.christersvensson.com/html-tool/iframe.htm

Edycja: sprawdziłem i scrolling="no"będę działać w IE10, Chrome 25 i Opera 12.12.

James Donnelly
źródło
1
Atrybut przewijania <iframe> nie jest obsługiwany w HTML5. Zamiast tego użyj CSS. Źródło: w3schools.com/tags/att_iframe_scrolling.asp
Linus,
4
@LinusTo właśnie stwierdza pierwsza linia mojej odpowiedzi. Problem polega jednak na tym, że przeglądarki nie mogą po prostu całkowicie go porzucić, ponieważ spowodowałoby to uszkodzenie witryn HTML4, więc scrollingatrybut nadal jest realną, aczkolwiek nieprawidłową opcją.
James Donnelly
To jest poprawne, ale w Chrome przerywa scrollIntoView elementów w ramce iframe. Zobacz code.google.com/p/chromium/issues/detail?id=137214
Peter Brand
@Linus - niestety to nie powinno działać, a przeglądarki, w których to działa, są niezgodne: przepełnienia nie należy stosować do zastępowanych elementów, takich jak przyciski, elementy formularzy i ramki iframe.
Jimmy Breck-McKye,
3
@DaniSpringer To rozwiązanie ma na celu wycięcie treści. Załadowanie elementu iframe bez możliwości przewijania nie powoduje automatycznej zmiany rozmiaru całej strony podrzędnej w celu dopasowania do wyznaczonych wymiarów elementu iframe.
Nate,
21

Rozwiązałem ten sam problem z tym css:

    pointer-events:none;
John Smith
źródło
8
Wygląda na to, że blokuje fizyczną próbę przewijania, ale nie wizualne paski przewijania ...
LWC
6
Zapobiegnie to uruchamianiu zdarzeń myszy w elemencie iframe, w tym przewijaniu. Zbyt szerokie, aby było solidnym rozwiązaniem
Tom McKenzie
Musiałem tego użyć, aby zapobiec przewijaniu w ramce iframe osadzonej w foreignobjectobrazie SVG (po prostu overflow: hiddennie działała)
Tim
Nie zatrzymuje to przewijania za pomocą kółka myszy (w Chromium). Uważam również, że OP chce faktycznie ukryć paski przewijania; powinieneś przenieść swoją odpowiedź na stackoverflow.com/questions/2712034, ponieważ uważam, że to częściowo rozwiązuje to pytanie.
EoghanM
Dzięki, przynajmniej przewijanie iframe jest wyłączone.
Sören
11

Wydaje się, że działa przy użyciu

html, body { overflow: hidden; }

wewnątrz ramki iFrame

edycja: Oczywiście to działa tylko wtedy, gdy masz dostęp do zawartości iframe (co mam w moim przypadku)

Alex
źródło
1
Jednak podczas korzystania z elementu iframe zwykle nie można uzyskać dostępu do jego zawartości, ponieważ często służy to do umieszczania treści w innej domenie.
Tim Malone
2

Ustaw całą zawartość na:

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

Chodzi o to, że przewijanie elementu iframe jest ustawiane przez treść, a NIE przez sam element iframe.

ustaw zawartość na 100% we wnętrzu za pomocą CSS i żądaną dla elementu iframe w HTML

Verde Mc
źródło
1

Próbowałem przewijać = „nie” w mojej obecnej przeglądarce (Google Chrome w wersji 60.0.3112.113 (oficjalna kompilacja) (64-bit)) i to nie zadziałało. Jednak scroll = "no" zadziałało. Może warto spróbować

<iframe src="<<URL>>" height="800" width="800" sandbox="allow-same-origin allow-scripts allow-forms" scroll="no" style="overflow: hidden"></iframe>
Zach Imholte
źródło
1
właściwie, zagłębiając się w to nieco dalej, myślę, że przyczyną była po prostu zmiana wysokości = "" na dłuższą niż rzeczywista ramka iFrame, którą próbuję załadować. Tak więc wydłużenie wysokości na tyle, by przewijanie było bezsensowne, sprawiło, że pasek przewijania zniknął. Próbuję jednak wyświetlić całą stronę, co może różnić się od tego, co próbujesz osiągnąć.
Zach Imholte,
To bardziej komentarz niż rzeczywista odpowiedź na pytanie.
1
Dzięki JDV! Jestem nowy w StackOverflow, więc próbowałem komentować, ale nie miałem wystarczającej liczby punktów reputacji lub jak to się nazywa. Więc zgadzam się, powinien to być komentarz. Doceń twoje wskazówki!
Zach Imholte
Istnieją sposoby, aby pomóc, dopóki nie zdobędziesz niezbędnego przedstawiciela. stackoverflow.com/help/whats-reputation
0

Dodaj te style… do tagu iframe…

overflow-x:hidden;
overflow-y:hidden;
sasi
źródło
8
Overflownie działa na elementach iframe HTML5. Jedyną przeglądarką, która błędnie to obsługuje, jest Firefox.
James Donnelly,
1
@JamesDonnelly Właściwie nie określił, że to html5, dlatego użyliśmy przepełnienia
sasi
0

Ponieważ "overflow: hidden;" właściwość nie działa poprawnie w samym elemencie iFrame, ale wydaje się dawać wyniki po zastosowaniu do treści strony wewnątrz elementu iFrame, próbowałem tego:

iframe body { overflow:hidden; }

Który niespodziewanie zrobił z Firefoksem, usunięcie tych irytujących przewijania.

Jednak w Safari dziwna, przezroczysta linia o szerokości 2 pikseli pojawiła się po prawej stronie elementu iframe, między jego zawartością a obramowaniem. Dziwne.

Seb Zaremba
źródło
0

Po prostu dodaj element iframe w stylu dowolnej z poniższych opcji. Mam nadzieję, że to rozwiązuje problem.

1 opcja:

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

2. opcja:

<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
źródło
0

To działa dla mnie:

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

Uwaga: jeśli potrzebujesz paska przewijania w jakimkolwiek innym elemencie, dodaj również css {overflow:scroll!important;}do tego elementu

Czarny ogień
źródło
-1

W przypadku tej ramy:

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

Wypróbowałem to na moim kodzie CSS:

    iframe#put the value of id here::-webkit-scrollbar {
         display: none;
    }
Lucas Santos
źródło
-1

poniżej wersji html5

iframe {
    overflow:hidden;
}

W html5

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


iframe[seamless]{

   overflow: hidden;
}

ale nie jest jeszcze obsługiwany poprawnie

Prashobh
źródło
2
Zgodnie z tym i tego The seamlessatrybut został usunięty z spec.
Tim Malone,
-5

Możesz użyć następującego kodu CSS:

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

Aby ograniczyć widok elementu iframe.

jean nouvellet
źródło
3
Czy margin-downto nowa nieruchomość, czy miałeś na myśli margin-bottom?
Bjørn-Roger Kringsjå