HTML5 und Frameborder

83

Ich habe einen Iframe für ein HTML5-Dokument. Wenn ich validiere, erhalte ich eine Fehlermeldung, dass das Attribut auf iframe frameBorderveraltet ist und stattdessen CSS verwendet werden soll.

Ich habe dieses Attribut frameBorder="0"hier, weil es die einzige Möglichkeit war, herauszufinden, wie ich die Grenze im IE entfernen kann. Ich habe es border:none;in CSS ohne Glück versucht . Gibt es eine konforme Möglichkeit, dies zu beheben?

Vielen Dank.

JD Isaacks
quelle

Antworten:

59

HTML 5 unterstützt keine Attribute wie Frameborder, Scrolling, Marginwidth und Marginheight (die in HTML 4.01 unterstützt wurden). Stattdessen hat die HTML 5-Spezifikation das nahtlose Attribut eingeführt. Mit dem nahtlosen Attribut kann der Inline-Rahmen so angezeigt werden, als würde er als Teil des enthaltenen Dokuments gerendert. Beispielsweise werden Rahmen und Bildlaufleisten nicht angezeigt.

Laut MDN

frameborder Veraltet seit HTML5

Der Wert 1(Standard) zeichnet einen Rahmen um diesen Rahmen. Der Wert 0entfernt den Rahmen um diesen Rahmen. Sie sollten jedoch stattdessen den Rand der CSS-Eigenschaft verwenden, um die Rahmen zu steuern.

Wie im obigen Zitat angegeben, sollten Sie den Rand mit CSS entfernen.
entweder inline ( style="border: none;") oder in Ihrem Stylesheet ( iframe { border: none; }).

Davon abgesehen scheint es keinen einzigen Iframe-Anbieter zu geben, der diesen nicht verwendet frameborder="0". Selbst YouTube verwendet das Attribut weiterhin und bietet nicht einmal ein Stilattribut, um iframes abwärtskompatibel zu machen, wenn Frameborder nicht mehr unterstützt wird. Man kann mit Sicherheit sagen, dass das Attribut nicht bald irgendwohin geht. Damit haben Sie 3 Möglichkeiten:

  1. Verwenden Sie weiter frameborder, nur um sicherzugehen, dass es funktioniert (vorerst)
  2. Verwenden Sie CSS, um das "Richtige" zu tun
  3. Verwende beide. Obwohl dies das Inkompatibilitätsproblem nicht löst (genau wie Option 1), funktioniert es in jedem Browser, der es war und sein wird

Was den vorherigen Stand dieser zehn Jahre alten Antwort betrifft:

Das seamlessAttribut wurde für eine so kurze Zeit (oder von einigen Browsern überhaupt nicht) unterstützt, dass MDN es nicht einmal als veraltete Funktion auflistet. Verwenden Sie es nicht und lassen Sie sich von den Kommentaren unten nicht verwirren.

Sotiris
quelle
31
Gibt es also eine Möglichkeit, frameBorder = 0 in CSS zu erzeugen?
JD Isaacks
1
Das ist wirklich ärgerlich, ich verwende das neueste Chrome und es funktioniert einfach nicht. Obwohl Frameborder = "0" tut.
RGBK
1
Wenn Sie dies noch einmal überprüfen, funktioniert nahtlos auf Chrome ff und Safari. Setzen Sie es wie
folgt
9
Sie sollten verwenden border-width: 0px;, aber ich befürchte, dass dies auch nicht browserübergreifend kompatibel ist iframes. seamlesswird immer noch nicht von allen Browsern unterstützt! Dies ist eines der wenigen HTML5-Probleme, die Sie nur akzeptieren müssen. Verwenden Sie frameborder="0"und zum Teufel mit der Validierung!
Solomon Closson
2
seamlesswurde aus der HTML5-Spezifikation entfernt, daher wird dies niemals unterstützt. Die Antwort von @ ForTheWatch ist jetzt die beste.
Rvighne
48

Wie im anderen Beitrag hier ist die beste Lösung die Verwendung des CSS-Eintrags von

style="border:0;"
csharpforevermore
quelle
6
Ich denke, sie empfehlen: border-width: 0pxTBH. border: none;wird nicht funktionieren.
Solomon Closson
5
@ cnotethegr8 - Es funktioniert nicht in IE und Opera (aktuelle Version), wurde nicht in Chrome, Safari und / oder Firefox getestet. Ich teste auf die beschissenen Browser, denn wenn es in ihnen funktioniert, ist es fast sicher, dass es in den anderen funktioniert.
Solomon Closson
2
@SolomonClosson I test for the crappy browsers, because if it works in them, than it is almost sure to work in the others.Mein Gott, der naiv ist. Wenn Sie sicherstellen möchten, dass Ihre App in einem Browser funktioniert, müssen Sie in diesem Browser schlicht und einfach testen . Es gibt keine Garantien, nur Macken.
Jonathan Dumaine
1
Kurzer Hinweis ist, dass das Gerät in 0px redundant ist. Ich bevorzuge Rand: 0; oder Rand: 0; weil 0px == 0em == 0% == 0, wenn es um CSS geht.
csharpforevermore
1
Nun, seamlessdas wurde aus der Spezifikation
gestrichen.
17

Da das frameborderAttribut nur für den Internet Explorer erforderlich ist, gibt es eine andere Möglichkeit, den Validator zu umgehen. Dies ist eine einfache Methode, die weder Javascript noch DOM-Manipulationen erfordert.

<!--[if IE]>
   <iframe src="source" frameborder="0">?</iframe>
<![endif]-->
<!--[if !IE]>-->
   <iframe src="source" style="border:none">?</iframe>
<!-- <![endif]-->
Herr Lister
quelle
3
Dies ist die beste Antwort auf die gestellte Frage. Das Ziel der Einhaltung von HTML5 (das derzeit in Arbeit ist und sich ohne vorherige Ankündigung ändern kann und wird) ist jedoch nicht sinnvoll, insbesondere wenn Sie Tricks verwenden, die keinem anderen Zweck als dieser Einhaltung dienen und den Code komplizierter machen . Verwenden frameBorder="0"Sie diese Option am besten weiter, wenn Sie keinen Rahmen um einen Inline-Frame möchten.
Jukka K. Korpela
Absolut wahr. Ich möchte nur darauf hinweisen, dass das Frameborder-Attribut rein präsentativ ist und nicht sehr wahrscheinlich ist, dass es jemals zum HTML-Standard zurückkehren wird, unabhängig davon, wie stark sich der Standard ändert.
Herr Lister
Das Attribut befindet sich im HTML5-Standard: w3.org/TR/html5/rendering.html#frames-and-framesets
Jukka K. Korpela
@ JukkaK.Korpela Warte, was? Warum sollte das OP dann einen Validierungsfehler erhalten? Oh, sorry, die Seite, auf die Sie verlinken, handelt von frameund framesetnicht iframe. Das Attribut ist für das iframeElement veraltet . siehe w3.org/TR/html5/obsolete.html#attr-iframe-frameborder
Mr Lister
Der Validierungsfehler wird ausgegeben, weil die Funktion für veraltet erklärt wurde, was nicht viel mehr bedeutet als das Ausgeben der Nachricht. Das Attribut ist weiterhin in HTML5 definiert, und laut HTML5 CR wird von Browsern erwartet, dass es es weiterhin unterstützt.
Jukka K. Korpela
6

Das funktioniert

iframe{
    border-width: 0px;
}
Harry Bosh
quelle
2

Wie wäre es, wenn Sie dieselbe Technik verwenden, um den Validator mit Javascript zu "täuschen", indem Sie ein Zielattribut in XHTML einfügen <a onclick="this.target='_blank'">?

  • auf etwas = "this.frameborder = '0'"

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

Oder getElementsByTagName]("iframe")1 Hinzufügen dieses Attributs für alle Iframes auf der Seite?

Habe das nicht getestet, weil ich etwas getan habe, was bedeutet, dass im IE weniger als 9 nichts funktioniert! :) Also, während ich das kläre ... :)

Harry Alffa
quelle
0

Ich habe eine schöne Lösung gefunden, mit der es hier in IE7 funktionieren kann . Es umgeht den Validator für das Attribut frameBorder, behält jedoch CSS für zukünftige Browser bei, wie im Beitrag erläutert.

sareed
quelle
Verwenden Sie JavaScript, um den Iframe zu generieren? Dadurch wird die Ladezeit von Iframe-Inhalten weiter verschoben, um nur eine CSS-Warnmeldung zu entfernen. Wie die akzeptierte Antwort sagt, wird empfohlen, seamlessstattdessen ein Attribut zu verwenden.
Raptor
Ja, jedoch funktionierte nahtlos nicht für mich in IE7, daher mein Beitrag.
Sareed
-5
style="border:none; scrolling:no; frameborder:0;  marginheight:0; marginwidth:0; "
Anton Essential
quelle
11
Für das, was es wert ist: Dies ist ungültiger Code. Scrollen, Frameborder, Randhöhe / Breite sind keine CSS-Eigenschaften.
Patrik Affentranger