HTML5 та фреймбордер


83

У мене є iframe для документа HTML5. коли я перевіряю, я отримую повідомлення про те, що атрибут у iframe frameBorderфайлі застарілий і замість цього використовую CSS.

У мене frameBorder="0"тут є цей атрибут, оскільки це був єдиний спосіб, яким я міг зрозуміти, як позбутися кордону в IE, я спробував border:none;у CSS без удачі. Чи існує відповідний спосіб виправити це?

Дякую.

Відповіді:


60

HTML 5 не підтримує такі атрибути, як рамки рамки, прокрутка, ширина поля та висота поля (які підтримувалися в HTML 4.01). Натомість специфікація HTML 5 представила безшовний атрибут. Безшовний атрибут дозволяє вбудованому фрейму виглядати так, ніби він відображається як частина вміщуючого документа. Наприклад, межі та смуги прокрутки не відображатимуться.

За даними MDN

frameborder Застарілий з HTML5

Значення 1(за замовчуванням) малює межу навколо цього кадру. Значення 0видаляє межу навколо цього кадру, але замість цього ви повинні використовувати межу властивості CSS для контролю меж.

Як сказано в цитаті вище, вам слід видалити межу з CSS;
або в рядку ( style="border: none;"), або у таблиці стилів ( iframe { border: none; }).

З огляду на це, здається, немає жодного постачальника iframe, який не використовував би frameborder="0". Навіть YouTube все ще використовує атрибут і навіть не надає атрибут стилю, щоб зробити iframes зворотно сумісними, коли frameborder більше не підтримується. Можна з упевненістю сказати, що атрибут скоро нікуди не дінеться. У вас залишається 3 варіанти:

  1. Продовжуйте використовувати frameborder, лише щоб переконатися, що це працює (поки що)
  2. Використовуйте CSS, щоб зробити «правильну» справу
  3. Використовуйте обидва. Незважаючи на те, що це не вирішує проблему несумісності (як і варіант 1), це робить і буде працювати в кожному браузері, який був і буде

Що стосується попереднього стану даної відповіді на десятиліття:

seamlessАтрибут був підтриманий за такий короткий проміжок часу (або взагалі деякими браузерами), що MDN навіть не перелічити його як застарілі функції. Не використовуйте його і не бентежте коментарями нижче.


31
Тож чи є спосіб створити frameBorder = 0 у CSS?
JD Isaacks

1
Це справді дратує, я використовую останню версію Chrome, і вона просто не працює. Хоча frameborder = "0" робить.
RGBK

1
переглядаючи це, безшовні працюють над chrome ff та safari. Помістіть це в iframe так: <iframe безшовні
RGBK

9
Ви повинні використовувати border-width: 0px;, але я боюся, що це не сумісно з переглядачами для використання з iframes. seamlessдосі підтримується не всіма браузерами! Це одна з тих небагатьох проблем HTML5, яку просто потрібно прийняти. Використовуйте frameborder="0"і біса з валідацією!
Соломон Клоссон

2
seamlessбуло видалено зі специфікації HTML5, тому підтримка для нього ніколи не буде. Відповідь @ ForTheWatch зараз найкраща.
rvighne

48

Що стосується іншого розміщення тут , найкращим рішенням є використання CSS-запису

style="border:0;"

6
Думаю, вони рекомендують: border-width: 0pxTBH. border: none;НЕ працюватиме.
Соломон Клоссон

5
@ cnotethegr8 - Він не працює в IE та Opera (поточна версія), не тестувався в Chrome, Safari та / або Firefox. Я тестую на безглузді браузери, тому що якщо це працює в них, то майже напевно буде працювати в інших.
Соломон Клоссон

2
@SolomonClosson I test for the crappy browsers, because if it works in them, than it is almost sure to work in the others.Мій боже, що наївний. Якщо ви хочете переконатися, що ваш додаток працює в браузері, вам доведеться протестувати його браузері, просто і просто. Гарантій немає, лише примхи.
Джонатан Дюмен

1
Коротко зауважимо, що одиниця в 0px є зайвою. Я віддаю перевагу маржі: 0; або межа: 0; оскільки 0px == 0em == 0% == 0, коли справа стосується CSS.
csharpforevermore

1
Тепер, seamlessколи виключено зі специфікації, це єдина правильна відповідь
rvighne

17

Так як frameborder атрибут необхідний лише для IE, існує ще один спосіб обійти валідатор. Це легкий спосіб, який не вимагає Javascript або будь-яких маніпуляцій з DOM.

<!--[if IE]>
   <iframe src="source" frameborder="0">?</iframe>
<![endif]-->
<!--[if !IE]>-->
   <iframe src="source" style="border:none">?</iframe>
<!-- <![endif]-->

3
Це найкраща відповідь на поставлене запитання. Однак мета відповідності HTML5 (яка триває і може змінитися без попередження) не є корисною, особливо коли вона змушує використовувати трюки, які не слугують іншим цілям, крім такої відповідності, і ускладнюють код . Найкраще продовжувати використовувати, frameBorder="0"якщо ви не хочете межу навколо вбудованого кадру.
Jukka K. Korpela

Абсолютно вірно. Тільки хочу зазначити, що оскільки frameborder attr є суто презентаційним, мало шансів, що він коли-небудь повернеться до стандарту HTML, незалежно від того, наскільки стандарт змінюється.
Містер Лістер,

Атрибут входить до стандарту HTML5: w3.org/TR/html5/rendering.html#frames-and-framesets
Jukka K. Korpela

@ JukkaK.Korpela Чекай, що? Тоді чому OP отримає помилку перевірки? О, вибачте, сторінка, на яку ви посилаєтесь, стосується frameі framesetні iframe. Атрибут є застарілим на iframeелементі; див. w3.org/TR/html5/obsolete.html#attr-iframe-frameborder
пан Лістер

Помилка перевірки видається, оскільки функція визнана застарілою, що насправді не означає набагато більше, ніж видача повідомлення. Атрибут все ще визначений у HTML5, і, як очікується, браузери, як повідомляє HTML5 CR, продовжуватимуть підтримувати його.
Юкка К. Корпела


2

Як щодо того, щоб використовувати те саме для техніки "обману" валідатора за допомогою Javascript, вставивши цільовий атрибут у XHTML <a onclick="this.target='_blank'">?

  • onsomething = "this.frameborder = '0'"

<iframe onload = " this.frameborder='0' " src="menu.html" id="menu"> </iframe>

Або getElementsByTagName]("iframe")1 додаючи цей атрибут для всіх фреймів на сторінці?

Чи не перевіряв це , тому що я зробив що - то , що означає , що нічого не працює в IE менш ніж на 9! :) Тож поки я це розбираю ... :)


0

Я знайшов хорошу роботу, яка дозволить йому працювати в IE7 тут . Він обходить валідатор для атрибуту frameBorder, але зберігає css для майбутніх браузерів, як пояснюється в повідомленні.


використовувати JavaScript для створення iframe? це додатково відкладе час завантаження вмісту iframe лише для усунення попереджувального повідомлення CSS. Як прийнято відповідь, рекомендується використовувати seamlessзамість цього атрибут.
Raptor

Так, однак безшовні не працювали для мене в IE7, отже, мій пост.
сарід

-5
style="border:none; scrolling:no; frameborder:0;  marginheight:0; marginwidth:0; "

11
Для чого це варто: це недійсний код. прокрутка, рамка рамки, висота / ширина поля не є властивостями css.
Patrik Affentranger
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.