Общие сведения об элементе
Плавающий фрейм представляет собой встроенную прямоугольную область (окно), в которой может отображаться содержимое любого независимого документа или даже другого веб-сайта в ограниченном пространстве на текущей веб-странице. Фреймы используются, например, для отображения видео с YouTube, для вставки на страницу карт Google, всевозможных рекламных разделов и т.п.
Создаётся такая область с помощью парного тега <iframe>
, причём закрывающий тег является обязательным. Внутри контейнера IFRAME, то есть между открывающим и закрывающим тегами, могут размещаться элементы разметки и какой-то альтернативный текст (см. пример ниже), который будет отображаться на экране в том случае, если браузер не поддерживает фреймы.
<iframe src="news.html"> <p>Извините, но Ваш браузер не поддерживает фреймы.</p> </iframe>
Атрибуты элемента <iframe>
Открывающий тег <iframe>
может содержать собственные и универсальные атрибуты, а также атрибуты событий.
Из собственных атрибутов наиболее важным (хотя и необязательным) является атрибут src
(сокр. от англ. source — «источник»), который содержит URL-адрес документа для загрузки во встроенную область. В качестве значения атрибута указывается полный или относительный путь к файлу, либо имя функции JavaScript, возвращающей это значение.
Пример использования атрибута src
для вставки карты OpenStreetMap:
<iframe width="300" height="200" src="https://www.openstreetmap.org/export/embed.html?bbox=-0.004017949104309083%2C51.47612752641776%2C0.00030577182769775396%2C51.478569861898606&layer=mapnik"> <p>Извините, но Ваш браузер не поддерживает фреймы.</p> </iframe>
Результат в браузере:
Примечание: Для вставки во фрейм пустой страницы в качестве значения атрибута src
можно использовать строку «about:blank
». Спецификацией HTML данное значение рекомендовано для атрибута src
как значение по умолчанию, а потому во многих браузерах программное удаление у фрейма атрибута src
(например, методом Element.removeAttribute()
) вызывает загрузку во фрейм пустой страницы или, как её ещё принято называть, страницы about:blank.
Ещё одним атрибутом, который может определять содержимое фрейма, является необязательный атрибут srcdoc
. В качестве значения данного атрибута может использоваться HTML-код содержимого, включающий необходимые теги и даже комментарии, например:
<iframe srcdoc="<html><body><h1>Lorem dolor</h1><p>Lorem ipsum dolor sit amet.</p></body></html>"> <p>Ваш браузер не поддерживает фреймы</p> </iframe>
Результат в браузере:
При одновременном использовании атрибутов src
и srcdoc
, атрибут src
игнорируется. Однако для старых браузеров, не поддерживающих атрибут srcdoc
(а он был введён в стандарт сравнительно недавно), наличие атрибута src
гарантирует загрузку во фрейм альтернативного содержимого, URL-адрес которого указан в этом атрибуте.
Установить высоту и ширину встроенной области позволяют соответствующие атрибуты height
и width
. Значением этих атрибутов может быть любое целое положительное число. Допускается использовать значения в пикселах (без указания единицы измерения) или в процентах.
Когда установлена процентная запись, размеры фрейма вычисляются относительно родительского элемента — контейнера, в котором находится элемент <iframe>
. Если родительским элементом является <body>
, то запись width="100%"
означает, что фрейм будет занимать всю ширину страницы.
Если же значение высоты и ширины фрейма не заданы явно, то фрейм обычно имеет размер 300×150 пикселов — значение по умолчанию, принятое в большинстве браузеров.
Задать имя фрейму позволяет атрибут name
. Это имя может быть использовано в сценариях на языке JavaScript, а также в качестве значения для атрибута target
элементов <a>
, <base>
и <form>
, либо в качестве значения для атрибута formtarget
элементов <button>
и <input>
.
Для указания имени фрейма используется набор символов, включая числа и буквы. При обращении к фрейму по имени необходимо соблюдать то же написание, что и в атрибуте name
.
Простейший пример использования имени фрейма в атрибутах target
для загрузки фотографий во фрейм:
<iframe name="myframe" src="files/paris.jpg"></iframe> <p><a target="myframe" href="files/paris.jpg">Париж</a> <a target="myframe" href="files/rome.jpg">Рим</a> <a target="myframe" href="files/berlin.jpg">Берлин</a> <a target="myframe" href="files/vienna.jpg">Вена</a> <a target="myframe" href="files/moskau.jpg">Москва</a></p>
Результат в браузере:
Для определения стиля встраиваемой области до недавнего времени можно было использовать атрибуты align
(задавал выравнивание фрейма относительно окружающего контекста), frameborder
(определял наличие рамки у встроенной области), scrolling
(задавал режим вывода полос прокрутки во фрейме), marginheight
и marginwidth
(определяли внешние отступы от окружающего содержания до границы фрейма). Все эти атрибуты были рекомендованы спецификацией HTML 4.01, но впоследствии признаны нежелательными.
Для стилизации фреймов в настоящее время следует использовать средства CSS. Так, например, изменить внешний вид рамки фрейма или отменить её вывод можно с помощью стилевого свойства border
. Отменить вывод полос прокрутки можно с помощью свойства overflow
. Для определения внешних отступов используется свойство margin
. Выравнивание и масштабирование встроенного документа внутри элемента <iframe>
можно настроить с помощью свойств object-position
и object-fit
.
Пример использования стилей:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example</title> <style> iframe { display: block; border: none; /* Убираем рамку */ overflow: hidden; /* Скрываем полосы прокрутки */ margin: 0 auto; /* Размещаем по центру */ } </style> </head> <body> ... <iframe src="news.html"> <p>Извините, но Ваш браузер не поддерживает фреймы. </p> </iframe> ... </body> </html>
Чтобы фрейм не замедлял загрузку и работу самой родительской страницы, можно воспользоваться атрибутом loading
, позволяющим установить режим так называемой «ленивой загрузки» фрейма (см. спецификацию). Значениями атрибута могут быть ключевые слова:
deager
— загрузить содержимое во фрейм немедленно;lazy
— отложить загрузку содержимого во фрейм до тех пор, пока пользователь, прокручивая страницу, не приблизится к месту, где находится этот фрейм.
Пример записи атрибута:
<iframe src="https://logrocket.com/" loading="lazy"></iframe>
Примечание: На сегодняшний день атрибут loading
пока ещё считается экспериментальным и поддерживается лишь последними версиями браузеров.
Чтобы вставленный на страницу фрейм не стал причиной неприятных сюрпризов, в спецификацию HTML5 были добавлены специальные атрибуты allow
, referrerpolicy
и sandbox
, позволяющие ввести некоторые ограничения для загружаемого во фрейм контента. Так, например, атрибут allow
позволяет определить, какие конкретно функции доступны для содержимого фрейма. Атрибут может принимать значения:
accelerometer
— разрешить доступ к интерфейсу акселерометра;ambient-light-sensor
— разрешить доступ к интерфейсу AmbientLightSensor;autoplay
— позволить автоматически воспроизводить видео и аудио файлы;battery
— разрешить доступ к API состояния батареи;camera
— разрешить доступ к камере компьютера;fullscreen
— разрешить использовать полноэкранный режим;geolocation
— разрешить использование API геолокации для получения доступа к местоположению пользователя;gyroscope
— разрешить доступ к интерфейсу Sensors API Gyroscope;magnetometer
— разрешить доступ к интерфейсу магнитометра API датчиков;microphone
— разрешить доступ к микрофону компьютера;midi
— разрешить доступ к веб-MIDI API;payment
— разрешить вызывать API запроса оплаты;usb
— разрешить доступ к API WebUSB;vibrate
— разрешить доступ к Vibration API.
После ключевого слова, описывающего разрешённую функцию, можно указать ресурс, конкретно для которого данная функция разрешена:
<!-- Разрешить использование микрофона для указанного ресурса --> <iframe src="https://logrocket.com/" allow="microphone https://logrocket.com/"></iframe> <!-- Разрешить использование микрофона для ресурса, указанного в атрибуте SRC --> <iframe src="https://logrocket.com/" allow="microphone 'src'"></iframe> <!-- Запретить использование микрофона для всех ресурсов --> <iframe src="https://logrocket.com/" allow="microphone 'none'"></iframe>
При необходимости в атрибуте allow
допускается указывать несколько значений в любом порядке, разделяя их точкой с запятой.
<!-- Запретить использование микрофона и камеры для всех ресурсов --> <iframe src="https://logrocket.com/" allow="microphone 'none'; camera 'none'"></iframe>
Примечание: Ранее спецификацией HTML5 были введены атрибут allowfullscreen
, разрешающий содержимому фрейма активировать полноэкранный режим, и атрибут allowpaymentrequest
, разрешающий вызывать API запроса оплаты. Это атрибуты булева типа, и для включения/выключения соответствующей функции в них используются значения true
и false
. В настоящее время атрибуты уже признаны устаревшими, и вместо них рекомендуется использовать обобщённый атрибут allow
с соответствующими значениями.
Атрибут sandbox
даёт возможность установить набор ограничений или разрешений для содержимого встроенной области в качестве меры безопасности в случае, если в ней отображается ненадежный веб-сайт. Вот некоторые из значений атрибута:
""
(пустая строка) — применяются все возможные ограничения;allow-downloads
— содержимому фрейма разрешается выполнять загрузки по команде пользователя;allow-forms
— содержимому фрейма разрешается отправлять формы;allow-modals
— содержимому фрейма разрешается открывать модальные окна;allow-presentation
— содержимому фрейма разрешается начать сеанс презентации;allow-scripts
— содержимому фрейма разрешается запуск и выполнение скриптов (но не создавать всплывающие окна).
При необходимости в атрибуте sandbox
допускается указывать несколько значений в любом порядке через пробел. Полный список значений можно найти в соответствующем разделе спецификации языка HTML. Но, надо заметить, что список этот постоянно пополняется, и все новые значения необходимо проверять на предмет поддержки их браузерами. Кстати, в браузере Internet Explorer версии 9.0 и ниже атрибут sandbox
не поддерживается вообще.
Пример записи атрибута:
<iframe src="https://logrocket.com/" sandbox="allow-forms allow-modals"></iframe>
Атрибут referrerpolicy
позволяет управлять формированием заголовка запроса клиента, а точнее, той его части, которую принято называть referer. Некоторые из значений, которые может принимать атрибут, приведены ниже.
no-referrer
— referer не будет отправляться;no-referrer-when-downgrade
— referer не будет отправляться в источники без TLS (HTTPS). Данное значение является значением по умолчанию;origin
— referer будет отправляться для всех нормальных запросов, но значение будет усечено до домена;origin-when-cross-origin
— referer будет отправляться для всех нормальных запросов, но значение будет усечено до домена, если ссылка идёт от одного домена к другому. Ссылки в пределах Вашего собственного сайта включают полный referrer (то есть с указанием полного пути);
Полный список значений атрибута referrerpolicy
можно найти в спецификации Referrer Policy.
Другие статьи по схожей тематике