HTML5 và frameborder


82

Tôi có iframe trên tài liệu HTML5. khi tôi xác thực, tôi gặp lỗi cho tôi biết rằng thuộc tính trên thuộc tính iframe frameBorderđã lỗi thời và hãy sử dụng CSS để thay thế.

Tôi có thuộc tính này frameBorder="0"ở đây vì đó là cách duy nhất tôi có thể tìm ra cách loại bỏ đường viền trong IE, tôi đã thử border:none;trong CSS nhưng không may mắn. Có cách nào phù hợp để khắc phục điều này không?

Cảm ơn.

Câu trả lời:


58

HTML 5 không hỗ trợ các thuộc tính như frameborder, cuộn, độ rộng lề và độ sáng lề (được hỗ trợ trong HTML 4.01). Thay vào đó, đặc tả HTML 5 đã giới thiệu thuộc tính liền mạch. Thuộc tính liền mạch cho phép khung nội tuyến xuất hiện như thể nó đang được hiển thị như một phần của tài liệu chứa. Ví dụ: đường viền và thanh cuộn sẽ không xuất hiện.

Theo MDN

frameborder Đã lỗi thời kể từ HTML5

Giá trị 1(mặc định) vẽ một đường viền xung quanh khung này. Giá trị 0loại bỏ đường viền xung quanh khung này, nhưng thay vào đó bạn nên sử dụng đường viền thuộc tính CSS để kiểm soát đường viền.

Giống như câu trích dẫn ở trên, bạn nên xóa đường viền bằng CSS;
hoặc nội tuyến (style="border: none;" ) hoặc trong biểu định kiểu ( iframe { border: none; }) của bạn .

Điều đó đang được nói, dường như không có một nhà cung cấp iframe nào không sử dụng frameborder="0". Ngay cả YouTube vẫn sử dụng thuộc tính này và thậm chí không cung cấp thuộc tính style để làm cho iframe tương thích ngược khi không hỗ trợ frameborder nữa. Thật an toàn khi nói rằng thuộc tính này sẽ sớm đi đến đâu. Điều này khiến bạn có 3 lựa chọn:

  1. Tiếp tục sử dụng frameborder , chỉ để đảm bảo rằng nó hoạt động (hiện tại)
  2. Sử dụng CSS để làm điều "đúng đắn"
  3. Sử dụng cả hai. Mặc dù cách này không giải quyết được vấn đề không tương thích (giống như tùy chọn 1), nhưng nó sẽ hoạt động trên mọi trình duyệt đã, đang và sẽ

Đối với trạng thái trước đó của câu trả lời đã tồn tại hàng thập kỷ này:

Các seamlessthuộc tính đã được hỗ trợ trong một thời gian ngắn như vậy (hoặc không gì cả bởi một số trình duyệt), đó MDN thậm chí không liệt kê nó như là một tính năng không dùng nữa. Đừng sử dụng nó và đừng bối rối bởi những bình luận bên dưới.


31
Vậy có cách nào để tạo frameBorder = 0 trong CSS không?
JD Isaacks

1
Điều đó thực sự khó chịu, tôi đang sử dụng Chrome mới nhất và nó không hoạt động. Mặc dù frameborder = "0" không.
RGBK

1
xem lại điều này, liền mạch không hoạt động trên chrome ff và safari. Đặt nó vào iframe như vậy: <iframe liền mạch
RGBK

8
Bạn phải sử dụng border-width: 0px;, nhưng tôi e rằng điều này cũng không tương thích với nhiều trình duyệt để sử dụng iframes. seamlessvẫn không được hỗ trợ bởi tất cả các trình duyệt! Đây là một trong số ít vấn đề HTML5 mà bạn phải chấp nhận. Sử dụng frameborder="0"và địa ngục với xác nhận!
Solomon Closson,

2
seamlessđã bị xóa khỏi thông số kỹ thuật HTML5, vì vậy sẽ không bao giờ có hỗ trợ cho nó. Câu trả lời của @ ForTheWatch hiện là tốt nhất.
rvighne 21-07-16

48

Theo bài đăng khác ở đây , giải pháp tốt nhất là sử dụng mục nhập CSS của

style="border:0;"

6
Tôi nghĩ họ đề nghị: border-width: 0pxTBH. border: none;sẽ không làm việc.
Solomon Closson

5
@ cnotethegr8 - Nó không hoạt động trong IE và Opera (phiên bản hiện tại), chưa được thử nghiệm trong Chrome, Safari và / hoặc Firefox. Tôi kiểm tra các trình duyệt tồi tệ, bởi vì nếu nó hoạt động trong chúng, thì gần như chắc chắn nó sẽ hoạt động với các trình duyệt khác.
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.Chúa tôi ngây thơ quá. Nếu bạn muốn đảm bảo ứng dụng của mình hoạt động trên một trình duyệt, bạn phải kiểm tra trong trình duyệt đó , rõ ràng và đơn giản. Không có gì đảm bảo, chỉ có những điều kỳ quặc.
Jonathan Dumaine,

1
Lưu ý nhanh là đơn vị tính bằng 0px là thừa. Tôi thích ký quỹ: 0; hoặc viền: 0; bởi vì 0px == 0em == 0% == 0 khi nói đến CSS.
csharpforevermore

1
Bây giờ seamlessđã được giảm từ spec này là câu trả lời duy nhất đúng
rvighne

17

frameborderthuộc tính chỉ cần thiết cho IE, nên có một cách khác để sử dụng trình xác thực. Đây là một cách gọn nhẹ không yêu cầu Javascript hoặc bất kỳ thao tác DOM nào.

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

3
Đây là câu trả lời tốt nhất cho câu hỏi được hỏi. Tuy nhiên, mục tiêu tuân thủ HTML5 (đang trong quá trình thực hiện và có thể và sẽ thay đổi mà không cần báo trước) không hữu ích, đặc biệt khi nó khiến bạn sử dụng các thủ thuật không phục vụ bất kỳ mục đích nào khác ngoài việc tuân thủ như vậy và điều đó làm cho mã phức tạp hơn . Tốt nhất là tiếp tục sử dụng frameBorder="0"nếu bạn không muốn viền xung quanh khung nội tuyến.
Jukka K. Korpela

Hoàn toàn đúng. Chỉ muốn lưu ý rằng vì tiêu chuẩn của frameborder hoàn toàn là trình bày, nên không có nhiều khả năng nó sẽ quay trở lại tiêu chuẩn HTML, bất kể tiêu chuẩn có thay đổi nhiều như thế nào.
Mr Lister

Thuộc tính này nằm trong "tiêu chuẩn" HTML5: w3.org/TR/html5/rendering.html#frames-and-framesets
Jukka K. Korpela

@ JukkaK.Korpela Chờ đã, cái gì? Sau đó, tại sao OP lại gặp lỗi xác thực? Ồ, xin lỗi, trang bạn liên kết đến là về frameframesetkhông phải iframe. Thuộc tính lỗi thời trên iframeyếu tố; xem w3.org/TR/html5/obsolete.html#attr-iframe-frameborder
Mr Lister

Lỗi xác thực được đưa ra do tính năng được tuyên bố là lỗi thời, điều này thực sự không có ý nghĩa nhiều hơn là phát hành thông báo. Thuộc tính vẫn được xác định trong HTML5 và các trình duyệt được mong đợi, theo HTML5 CR, sẽ tiếp tục hỗ trợ nó.
Jukka K. Korpela


2

Làm thế nào về việc sử dụng cùng một kỹ thuật để "đánh lừa" trình xác thực bằng Javascript bằng cách gắn một thuộc tính đích trong XHTML <a onclick="this.target='_blank'">?

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

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

Hoặc getElementsByTagName]("iframe")1 thêm thuộc tính này cho tất cả các iframe trên trang?

Chưa kiểm tra điều này vì tôi đã làm điều gì đó có nghĩa là không có gì hoạt động trong IE nhỏ hơn 9! :) Vì vậy, trong khi tôi đang phân loại ... :)


0

Tôi đã tìm thấy một tác phẩm hay sẽ cho phép nó hoạt động trong IE7 ở đây . Nó bỏ qua trình xác thực cho thuộc tính frameBorder nhưng vẫn giữ css cho các trình duyệt trong tương lai như được giải thích trong bài viết.


sử dụng JavaScript để tạo iframe? nó sẽ trì hoãn thêm thời gian tải nội dung iframe để loại bỏ thông báo cảnh báo CSS. Giống như câu trả lời được chấp nhận đã nói, bạn nên sử dụng seamlessthuộc tính thay thế.
Raptor

Có, tuy nhiên liền mạch không hoạt động đối với tôi trong IE7 do đó bài đăng của tôi.
sareed

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

11
Đối với giá trị của nó: đây là mã không hợp lệ. cuộn, sắp xếp khung, marginheight / width không phải là thuộc tính css.
Patrik Affentranger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.