HTML5 ve çerçeve sıralaması


83

Bir HTML5 belgesinde bir iframe var. Doğruladığımda, üzerindeki özniteliğin iframe frameBordereski olduğunu ve bunun yerine CSS'yi kullanmam gerektiğini söyleyen bir hata alıyorum .

frameBorder="0"Burada bu niteliğe sahibim çünkü IE'de sınırdan nasıl kurtulacağımı bulabilmemin tek yolu buydu border:none;, CSS'de şanssız olarak denedim . Bunu düzeltmenin uyumlu bir yolu var mı?

Teşekkürler.

Yanıtlar:


60

HTML 5, çerçeve sıralaması, kaydırma, marginwidth ve marginheight (HTML 4.01'de desteklenen) gibi nitelikleri desteklemez. Bunun yerine, HTML 5 spesifikasyonu kusursuz niteliği getirmiştir. Seamless özelliği, satır içi çerçevenin, içeren belgenin bir parçası olarak işleniyormuş gibi görünmesini sağlar. Örneğin, kenarlıklar ve kaydırma çubukları görünmeyecektir.

MDN'ye göre

frameborder HTML5'ten beri kullanılmıyor

Değer 1(varsayılan) bu çerçevenin etrafına bir sınır çizer. Değer 0, bu çerçevenin etrafındaki sınırı kaldırır, ancak bunun yerine kenarlıkları kontrol etmek için CSS özellik kenarlığını kullanmalısınız.

Yukarıdaki alıntı diyor gibi, gereken CSS ile sınır kaldırmak;
ya satır içi ( style="border: none;") ya da stil sayfanızda ( iframe { border: none; }).

Bununla birlikte, kullanmayan tek bir iframe sağlayıcısı yok gibi görünüyor frameborder="0". YouTube bile bu özelliği kullanmaya devam ediyor ve çerçeve sıralaması artık desteklenmediğinde iframe'leri geriye dönük uyumlu hale getirmek için bir stil özelliği bile sağlamıyor. Özniteliğin yakında hiçbir yere gitmeyeceğini söylemek güvenlidir. Bu size 3 seçenek bırakır:

  1. frameborderSadece çalıştığından emin olmak için kullanmaya devam et (şimdilik)
  2. "Doğru" olanı yapmak için CSS kullanın
  3. İkisini de kullan. Bu, uyumsuzluk sorununu çözmese de (tıpkı 1. seçenek gibi), geçmiş ve olacak her tarayıcıda çalışır ve çalışır.

Bu on yıllık cevabın önceki durumuna gelince:

seamlessNitelik MDN bile kullanımdan kaldırılmış özellik olarak listelemelisiniz etmediğini, (ya da değil bazı tarayıcılar tarafından hiç) bu kadar kısa bir süre için desteklenmiştir. Kullanmayın ve aşağıdaki yorumlarla kafanızı karıştırmayın.


31
Peki, CSS'de frameBorder = 0 oluşturmanın bir yolu var mı?
JD Isaacks

1
Bu gerçekten can sıkıcı, en son Chrome'u kullanıyorum ve çalışmıyor. Frameborder = "0" olmasına rağmen.
RGBK

1
Bunu tekrar gözden geçiren seamless, chrome ff ve safari üzerinde çalışıyor. Bunu iframe'e şu şekilde yerleştirin: <iframe sorunsuz
RGBK

9
Kullanmanız gerekiyordu border-width: 0px;, ancak korkarım bu da tarayıcılar arası uyumlu değil iframes. seamlesshala tüm tarayıcılar tarafından desteklenmemektedir! Bu, kabul etmeniz gereken birkaç HTML5 sorunundan biridir. frameborder="0"Doğrulamayı kullanın ve cehenneme!
Solomon Closson

2
seamlessHTML5 spesifikasyonundan kaldırıldığı için hiçbir zaman desteklenmeyecektir. @ ForTheWatch'ın cevabı artık en iyisi.
rvighne

48

Buradaki diğer gönderilere göre , en iyi çözüm, CSS girişini kullanmaktır.

style="border:0;"

6
Bence öneriyorlar: border-width: 0pxTBH. border: none;çalışmayacak.
Solomon Closson

5
@ cnotethegr8 - IE ve Opera'da (mevcut sürüm) çalışmıyor, Chrome, Safari ve / veya Firefox'ta test edilmedi. Berbat tarayıcıları test ediyorum, çünkü onlarda çalışıyorsa, diğerlerinde çalışacağından neredeyse kesin.
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.Tanrım bu naif. Uygulamanızın bir tarayıcıda çalıştığından emin olmak istiyorsanız, o tarayıcıda basit ve basit bir şekilde test etmeniz gerekir . Garantisi yok, sadece tuhaflıklar var.
Jonathan Dumanie'nin

1
Hızlı not, 0px'deki birimin gereksiz olduğudur. Kenar boşluğunu tercih ederim: 0; veya border: 0; Çünkü 0px == 0em == 0% == 0 CSS söz konusu olduğunda.
csharpforevermore

1
Şimdi bu seamlessteknik özelliklerden çıkarıldı, tek doğru cevap bu
rvighne

17

Yana framebordernitelik IE için gereklidir, doğrulayıcı etrafında almak için başka bir yolu yoktur. Bu, Javascript veya herhangi bir DOM değişikliği gerektirmeyen hafif bir yoldur.

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

3
Sorulan sorunun en iyi cevabı bu. Ancak, HTML5'e uyumluluk hedefi (devam etmekte olan ve önceden haber verilmeksizin değişebilir ve değişecektir), özellikle bu tür uyumluluktan başka bir amaca hizmet etmeyen ve kodu daha karmaşık hale getiren hileler kullanmanıza neden olduğunda yararlı değildir. . frameBorder="0"Satır içi çerçevenin etrafında kenarlık istemiyorsanız kullanmaya devam etmek en iyisidir .
Jukka K. Korpela

Kesinlikle doğru. Sadece çerçeve düzeni özelliği tamamen sunum amaçlı olduğundan, standart ne kadar değişse de HTML standardına geri dönme şansı çok fazla değildir.
Bay Lister

Nitelik olduğu HTML5'teki “standart”: w3.org/TR/html5/rendering.html#frames-and-framesets
Jukka K. Korpela

@ JukkaK.Korpela Bekle, ne var? Öyleyse OP neden bir doğrulama hatası alsın? Maalesef bağlantı verdiğiniz sayfa ile ilgili frameve framesetdeğil iframe. Özelliği, bir ilgili eski iframeelemanı; bkz. w3.org/TR/html5/obsolete.html#attr-iframe-frameborder
Mr Lister

Doğrulama hatası, özelliğin eski ilan edilmesi nedeniyle verilir, bu gerçekten mesajı vermekten çok daha fazlası anlamına gelmez. Özellik hala HTML5'te tanımlanmıştır ve HTML5 CR'ye göre tarayıcıların onu desteklemeye devam etmesi beklenmektedir.
Jukka K. Korpela


2

XHTML'de bir hedef niteliği yapıştırarak doğrulayıcıyı Javascript ile "kandırmak" için aynı yöntemi kullanmaya ne dersiniz <a onclick="this.target='_blank'">?

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

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

Veya getElementsByTagName]("iframe")1 sayfadaki tüm iframe'lerde için bu özellik ekleyerek?

Bunu test etmedim çünkü bir şey yaptım, bu da IE'de hiçbir şeyin 9'dan az çalışmadığı anlamına geliyor ! :) Yani ben bunu çözerken ... :)


0

Burada IE7'de çalışmasına izin verecek güzel bir çalışma buldum . FrameBorder özniteliği için doğrulayıcıyı atlar, ancak gönderide açıklandığı gibi gelecekteki tarayıcılar için css'i tutar.


iframe oluşturmak için JavaScript kullanıyor musunuz? bir CSS uyarı mesajını ortadan kaldırmak için iframe içeriğinin yükleme süresini daha da erteleyecektir. Kabul edilen yanıtın dediği gibi, seamlessbunun yerine özniteliğin kullanılması önerilir .
Raptor

Evet, ne kadar sorunsuz olursa olsun IE7'de benim için çalışmıyordu, bu nedenle yazım.
2014

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

11
Değeri ne olursa olsun: bu geçersiz koddur. scrolling, frameborder, marginheight / width css özellikleri değildir.
Patrik Affentranger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.