HTML-фрейм - вимкнути прокрутку


84

На моєму сайті є такий iframe:

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

І в ньому є смуги прокрутки.
Як від них позбутися?


5
Герман - я думаю, це scrolling="no"має спрацювати, це працює на мене. це в HTML5?
Ягнеш Агола,

@Yagnesh Я опублікував вам зразок мого iframe, і він не працює.
Міхал Герман

Я спробував з вашим кодом, і він чудово працює без прокрутки. Будь ласка, перевірте, чи є iframe під яким-небудь div.
Ягнеш Агола

Можливо, <body> всередині iframe додає смуги прокрутки, а не <iframe>?
оріадам

Відповіді:


162

На жаль, я не вірю, що це можливо в повністю відповідних HTML5 лише з властивостями HTML і CSS. На щастя, однак, більшість браузерів все ще підтримують scrollingвластивість (яку було вилучено зі специфікації HTML5 ).

overflowне є рішенням для HTML5, оскільки єдиним сучасним браузером, який неправильно підтримує це, є Firefox.

Поточним рішенням буде поєднання двох:

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

Але це може бути застарілим, оскільки браузери оновлюються. Можливо, ви захочете перевірити це на рішення JavaScript: http://www.christersvensson.com/html-tool/iframe.htm

Редагувати: Я перевірив і scrolling="no"працюватиму в IE10, Chrome 25 та Opera 12.12.


1
Атрибут прокрутки <iframe> не підтримується в HTML5. Замість цього використовуйте CSS. Джерело: w3schools.com/tags/att_iframe_scrolling.asp
Лінус

4
@LinusА ось про що йдеться в першому рядку моєї відповіді. Проблема в тому, що браузери не можуть насправді просто скинути його взагалі, оскільки це зламає веб-сайти HTML4, тому scrollingатрибут все ще є життєздатним, хоча і недійсним варіантом.
Джеймс Доннеллі,

Це правильно, але в Chrome це порушує scrollIntoView для елементів всередині iframe. Див. Code.google.com/p/chromium/issues/detail?id=137214
Пітер Бренд,

@Linus - на жаль, це не повинно працювати, і будь-який браузер, в якому він працює, є невідповідним: переповнення не повинно застосовуватися до замінених елементів, таких як кнопки, елементи форми та фрейми.
Jimmy Breck-McKye

3
@DaniSpringer Це рішення ВИНАЖЛЕНО для вирізання вмісту. Завантаження iframe без можливості прокручування автоматично не змінює розмір усієї дочірньої сторінки, щоб вона відповідала призначеним розмірам iframe.
Нейт

20

Я вирішив ту ж проблему з цим css:

    pointer-events:none;

8
Здається, це блокує фізичну спробу прокрутки, лише не візуальні смуги прокрутки ...
LWC,

6
Це запобіжить запуск будь-яких подій миші на вбудовану рамку, включаючи прокрутку. Занадто широке, щоб бути надійним рішенням
Том Маккензі

Мені довелося використовувати це, щоб запобігти прокрутці в iframe, який вбудований у foreignobjectзображення SVG (просто overflow: hiddenне спрацював)
Тім

Це не зупиняє прокрутку за допомогою колеса прокрутки миші (у Chromium). Також я вважаю, що ОП хоче насправді приховати смуги прокрутки; Вам слід перенести свою відповідь на stackoverflow.com/questions/2712034, оскільки я вважаю, що це частково вирішує це питання.
EoghanM

Дякую, принаймні прокрутка iframe відключена.
Sören

11

Здається, це працює за допомогою

html, body { overflow: hidden; }

всередині IFrame

редагувати: Звичайно, це працює лише в тому випадку, якщо у вас є доступ до вмісту Iframe (який у мене є у моєму випадку)


1
Однак, використовуючи iframe, ви зазвичай не можете отримати доступ до того, що в ньому, оскільки це часто для включення вмісту в інший домен.
Тім Малоун

2

Встановіть для всього вмісту:

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

Річ у тому, що прокрутка iframe встановлюється вмістом, а НЕ iframe самою собою.

встановіть вміст на 100% в інтер’єрі за допомогою CSS і бажаний для iframe в HTML


1

Я спробував прокрутити = "ні" у моєму поточному браузері (Google Chrome Версія 60.0.3112.113 (Офіційна збірка) (64-розрядна версія)), і це не спрацювало. Однак scroll = "no" не спрацював. Можливо, варто спробувати

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

1
насправді, копаючись у цьому трохи далі, я думаю, що причиною було просто те, що я змінив висоту = "", щоб бути довшим від фактичного iFrame, який я намагаюся завантажити. Тож, зробивши висоту достатньо довгою, щоб зробити прокрутку безглуздою, насправді змусило смугу прокрутки піти для мене. Однак я намагаюся відобразити всю сторінку, що може відрізнятися від того, що ви намагаєтесь досягти.
Зак Імгольте,

Це більше нагадує коментар, а не фактичну відповідь на запитання.

1
Дякую JDV! Я новачок у StackOverflow, тому я намагався коментувати, але не мав достатньо очок репутації або як би там ще не називалося. Тож я згоден, це мав бути коментар. Цінуйте ваші поради!
Зак Імгольте,

Є способи внести свій внесок, поки не отримаєте необхідну репутацію. stackoverflow.com/help/whats-reputation

0

Додайте цей стиль для тегу iframe ..

overflow-x:hidden;
overflow-y:hidden;

8
Overflowне працює на iFrames HTML5. Єдиним браузером, який неправильно підтримує це, є Firefox.
Джеймс Доннеллі,

1
@JamesDonnelly Насправді він не вказав, що це html5, ось чому ми використовували переповнення
sasi

0

Оскільки "overflow: hidden;" властивість не працює належним чином на самому iFrame, але, здається, дає результати при застосуванні до тіла сторінки всередині iFrame, я спробував це:

iframe body { overflow:hidden; }

Що дивно зробив роботу з Firefox, видаленням цих дратівливих скроллбар.

Однак у Safari з правого боку iframe, між його вмістом та межею, з’явилася дивна прозора лінія шириною 2 пікселі. Дивно.


0

Просто додайте iframe у стилі, наведеному нижче. Сподіваюся, це вирішить проблему.

1-й варіант:

<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-й варіант:

<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

Це працює для мене:

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

Примітка: якщо вам потрібна смуга прокрутки в будь-якому іншому елементі, також додайте css {overflow:scroll!important;}до цього елемента


-1

Для цього кадру:

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

Я спробував це на своєму css-коді:

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

-1

нижче версії html5

iframe {
    overflow:hidden;
}

У html5

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


iframe[seamless]{

   overflow: hidden;
}

але ще не підтримується правильно


2
Відповідно з цим і це , то seamlessатрибут був видалений з специфікації.
Тім Малоун

-5

Ви можете використовувати наступний код CSS:

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

Для того, щоб обмежити огляд iframe.


3
Це margin-downнове майно чи ви мали на увазі margin-bottom?
Bjørn-Roger Kringsjå
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.