2012-05-02 32 views
11

Lấy cảm hứng từ this question, trong đó áp phích tình cờ thực tế là <object> nên được sử dụng thay vì <img> để nhúng hình ảnh trong tài liệu HTML.Có hợp lệ để bao gồm hình ảnh với <object> thay vì <img> không?

Tôi đang phát triển một ứng dụng web vào lúc này và, là một người cầu toàn, tôi cố gắng làm cho nó sáng bóng và tuân thủ tất cả các tiêu chuẩn. Theo như tôi biết, thẻ <img> sẽ không được chấp nhận trong các tiêu chuẩn sắp tới cho xHTML và vì ngày nay, ngay cả IE có thể xử lý <object> đúng cách, tôi muốn sử dụng thẻ <object> cho tất cả hình ảnh trên trang web của tôi

Nó trở nên rõ ràng rằng "tiêu chuẩn sắp tới" áp phích được nói đến là thông số kỹ thuật bị bỏ rơi XHTML2, thậm chí không chính thức từ chối <img>. (Mặc dù có vẻ rõ ràng là rumors đối với hiệu ứng đó.)

Theo hiểu biết tốt nhất của tôi, tôi đã không thấy bất kỳ ai trong cộng đồng phát triển web ủng hộ việc sử dụng thẻ chung <object> qua ngữ nghĩa được cho là nhiều hơn và chắc chắn tương thích hơn <img> thẻ.

Có lý do chính đáng để sử dụng <object> thay vì <img> không? Nên <object> thậm chí có thể được sử dụng ở tất cả thay cho <img> – điều này có thể phá vỡ điều gì không?

Trả lời

6

Lần duy nhất tôi từng thấy một đối tượng được sử dụng để hiển thị hình ảnh là tạo một "dự phòng" khi đối tượng dự định không thể tải được vì bất kỳ lý do gì. Thực hiện việc này example from the W3 specs:

<OBJECT title="The Earth as seen from space" classid="http://www.observer.mars/TheEarth.py"> 
    <!-- Else, try the MPEG video --> 
    <OBJECT data="TheEarth.mpeg" type="application/mpeg"> 
     <!-- Else, try the GIF image --> 
     <OBJECT data="TheEarth.gif" type="image/gif"> 
      <!-- Else render the text --> 
      The <STRONG>Earth</STRONG> as seen from space. 
     </OBJECT> 
    </OBJECT> 
</OBJECT> 

Chỉ bao giờ cố gắng để tải một hình ảnh thông qua một đối tượng được về cơ bản loại bỏ các ý nghĩa ngữ nghĩa tắt của hình ảnh, mà tôi sẽ xem xét thực tế rất xấu.

+0

Tôi đã thấy điều tương tự khi sử dụng đối tượng để nhúng pdf với dự phòng img – albert

4

Không có tốt thực tế lý do sử dụng object thay vì img. object luôn được hỗ trợ không nhất quán và lộn xộn. Sử dụng img cho hình ảnh, embed cho nội dung flash và video hoặc audio cho nội dung đa phương tiện. Về cơ bản, chỉ sử dụng object để gọi các plugin cụ thể.

Điều đó nói rằng, vị trí triết học cho sự tồn tại của object vẫn rất tốt. Nó có nghĩa là một yếu tố chung cho bất kỳ loại nội dung nào có thể chứa nội dung dự phòng lồng nhau. W3C/XHTML2 có lộ trình rất lý tưởng cho html, nhấn mạnh cú pháp và ngữ nghĩa ngữ nghĩa và muốn làm những việc như cho phép href trên bất kỳ phần tử nào (loại bỏ a) và loại bỏ img có lợi cho object. Tuy nhiên, các trình duyệt không bao giờ có thể nhận được object ngay theo cách hoàn toàn chung chung. Ngoài ra, rất khó để xác định API js cho phần tử chung object. Đó là lý do chính khiến tại sao videoaudio riêng biệt-- object phân phối video sẽ không hiển thị API video js.

Tuy nhiên, XHTML2 bị mất và HTML5 giành được và ưu đãi HTML5 img, vì vậy hãy sử dụng img.

+0

Tôi cho rằng bạn có nghĩa là XHTML2 bị mất? Ngoài ra, không phải là triết lý của XHTML2 về việc ưu tiên một phần tử '' chung trong sự phản đối trực tiếp về độ tinh khiết của ngữ nghĩa? '' nghĩa là không có gì; '' có nghĩa là hình ảnh. – josh3736

+0

Lỗi đánh máy - xhtml2 bị mất. Các kiểu 'object' được cho là được phân biệt bởi thuộc tính' type'. Về mặt ngữ nghĩa, họ đã cố gắng thống nhất các phương pháp nhúng không phù hợp khác nhau. Vì vậy, 'đối tượng' chứa' iframe', 'embed',' applet', 'img', v.v. Họ không thấy loại mime như ý nghĩa ngữ nghĩa. Điều này phù hợp với phân biệt tài nguyên-đại diện của html, trong đó cùng một url có khả năng có thể phản hồi bằng hình ảnh hoặc video (trong bất kỳ số định dạng nào khác nhau) tùy thuộc vào thỏa thuận loại nội dung. Tôi nghĩ cách suy nghĩ này đã trở nên quá tinh khiết để thực tế. –

+0

XHTML2 không loại bỏ 'img' có lợi cho' đối tượng'. Phần tử 'img' nằm trong XHTML2 cho đến cuối. Nhưng XHTML2 cho phép thuộc tính 'src' trên bất kỳ phần tử nào, mà sẽ làm cho nó hoạt động như một phần tử' img', do đó phần tử 'img' phần lớn không cần thiết trong XHTML2. – Alohci

11

Để trả lời câu hỏi trong nhóm: vâng, nó là hợp lệ, tất nhiên. Hiệu lực của phần tử object thậm chí không phụ thuộc vào loại dữ liệu được nhúng. Nếu bạn muốn hỏi xem đó có phải là chính xác, thì câu trả lời là có, không có gì trong thông số sẽ cấm hoặc đề xuất chống lại nó.

Trong số các lý do có thể sử dụng object để nhúng hình ảnh, thực tế nhất là nó cho phép nội dung dự phòng chứa đánh dấu HTML, chẳng hạn như tiêu đề, danh sách, bảng và đánh dấu cụm từ. Phần tử img cho phép bạn chỉ định văn bản thuần túy làm nội dung dự phòng — thậm chí không thể chỉ định ngắt đoạn.

Vì lý do trợ năng, mọi hình ảnh phải có nội dung dự phòng được hiển thị, ví dụ: khi tài liệu được sử dụng trong trình duyệt không thường xuyên (trình đọc màn hình, chữ nổi, vv) hoặc hình ảnh không được hiển thị vì một lý do nào đó hoặc hình ảnh khác. Đối với bất kỳ hình ảnh giàu nội dung nào (ví dụ: biểu đồ tổ chức hoặc bản vẽ mô tả một quy trình phức tạp), nội dung dự phòng cần phải dài và cần phải có một số cấu trúc.

Tuy nhiên, hiếm khi sử dụng object để nhúng hình ảnh. Tầm quan trọng của nội dung dự phòng không được hiểu rộng rãi và các cân nhắc kỹ thuật và kinh tế thực tế thường gây ra các vấn đề dự phòng bị bỏ qua. Hơn nữa, object có lịch sử lâu dài về việc triển khai chậm, lỗi và chất lượng kém trong trình duyệt. Chỉ gần đây mới có khả năng sử dụng object khá an toàn để đưa vào hình ảnh.

Câu hỏi mà phần tử ngữ nghĩa hơn chủ yếu là vô ích và câu trả lời thường chỉ phản ánh các cách khác nhau để hiểu sai khái niệm “ngữ nghĩa”. Phần tử img về nguyên tắc bao gồm hình ảnh, điều đó có nghĩa là, mặc dù nó cũng đã được sử dụng để bao gồm video. Đối với phần tử object, thuộc tính type có thể được sử dụng để chỉ định loại nội dung được nhúng, theo loại hình ảnh cụ thể, ví dụ: type=image/gif hoặc có thể được mở.

Điều này ngụ ý rằng phần tử object linh hoạt hơn: bạn có thể để loại không xác định, cho phép nó được chỉ định trong tiêu đề HTTP. Bằng cách này, loại dữ liệu được nhúng có thể được thay đổi mà không thay đổi phần tử object hoặc tài liệu nhúng nói chung; ví dụ: bạn có thể bắt đầu bằng phiên bản đơn giản nơi nội dung được nhúng là hình ảnh, sau đó thay thế nó bằng một tài liệu HTML (có chứa hình ảnh và văn bản).

Các vấn đề liên quan