Làm thế nào để đóng thẻ <img> đúng cách?


122
<img src='stackoverflow.png'>
<img src='stackoverflow.png'></img>
<img src='stackoverflow.png' />

(Những) cái nào trong số chúng là đúng?


6
Câu hỏi đặt ra là "Làm thế nào để đóng thẻ <img> đúng cách?" đó là một câu hỏi thực sự và câu trả lời rất hữu ích. Câu hỏi này không nên được đóng lại.

3
Câu hỏi, hiện tại, là ổn. Nó không mơ hồ, mơ hồ, không đầy đủ, quá rộng hoặc khoa trương. Có một câu trả lời tuyệt vời bên dưới là tốt.
David J.

Tôi không biết câu trả lời nào sau đây là đúng, nhưng thật thú vị, Trình kiểm tra mã của Firefox sẽ thêm </img> vào cuối thẻ nếu bạn không đặt nó ở đó. Và IE thì không. Điều này rất quan trọng trong vũ trụ của tôi.
Chiwda

PS Dreamweaver chèn thẻ /> XHTML.
Chiwda

Câu trả lời:


50
<img src='stackoverflow.png' />

Hoạt động tốt và đóng thẻ đúng cách. Tốt nhất nên thêm altthuộc tính dành cho người khiếm thị.


4
Đúng là <img />hợp lệ trong [X] HTML / XML, mặc dù việc sử dụng XHTML ngày nay rất hiếm và nếu máy chủ của bạn đang cung cấp các trang thì text/htmltất cả những gì bạn phải lo lắng là viết HTML hợp lệ. Khả năng phải chuyển một ứng dụng HTML sang XHTML gần bằng không.
Fabrício Matté

1
Câu trả lời ở trên sẽ không thể xác thực bằng trình kiểm tra HTML của W3C nếu nhắm mục tiêu 4.01 Chuyển tiếp trở lên. Cũng xem Dịch vụ xác thực đánh dấu W3C . Tôi tin rằng câu trả lời ở trên yêu cầu HTML5 hoặc XHTML. Để tránh những thất bại trong quá trình xác thực, bạn cần sử dụng cái này <img src='stackoverflow.png'>(nếu nó quan trọng với bạn).
jww

1
@ FabrícioMatté Bạn đánh giá thấp xhtml trong việc sử dụng thực tế. Công ty càng lớn, họ càng có nhiều khả năng làm việc với xhtml trên html hoặc html5 được định dạng như xhtml (để phân tích cú pháp dễ dàng / nhanh hơn), hoặc bạn làm việc với những thứ khác như vi dữ liệu hoặc đánh dấu nâng cao như ixbrl.
Robert McKee

Có một sự khác biệt lớn giữa "hoạt động tốt" và "được chỉ định" và bạn sẽ không bao giờ tìm thấy bất kỳ đặc tả HTML nào yêu cầu việc sử dụng dấu gạch chéo đóng trên thẻ đó. Như những người khác đã đề cập, được phép không phá vỡ các trang web được viết ban đầu để sử dụng XHTML / XML nhưng bạn sẽ không tìm thấy bất kỳ từ ngữ hoặc ví dụ nào nêu rõ việc sử dụng nó là cần thiết. Trên thực tế, bạn SẼ thấy từ ngữ nói rằng nó không có nghĩa và các trình duyệt được hướng dẫn để bỏ qua nó!
Rob

Rob - 6 năm trước có một vấn đề. Điều này đã sửa chữa nó. Đoán bây giờ các trình duyệt tốt hơn
Ed Heal

163

Đây là HTML5 hợp lệ và nó hoàn toàn ổn mà không cần đóng nó. Nó là một phần tử được gọi là void:

<img src='stackoverflow.png'>

Sau đây là các thẻ XHTML hợp lệ. Chúng phải được đóng lại. Cái sau cũng tốt trong HTML 5:

<img src='stackoverflow.png'></img>
<img src='stackoverflow.png' />

5
Nó không chỉ là HTML5 hợp lệ, mà còn hợp lệ trong HTML4. HTML không yêu cầu các phần tử "void" tự đóng như bạn đã nói. +1 cho câu trả lời mạch lạc.
Fabrício Matté

2
HTML5 hoặc XHTML sẽ không thể xác thực bằng trình kiểm tra HTML của W3C nếu nhắm mục tiêu 4.01 Chuyển tiếp trở lên. Cũng xem Dịch vụ xác thực đánh dấu W3C . Bạn cần sử dụng cái này <img src='stackoverflow.png'>(nếu nó quan trọng với bạn).
jww

Nhận xét sau nhiều năm ... Đã bối rối khi nhìn thấy <img src="about:logo" alt="about:logo">thẻ trong about:logotrang 76 của firefox ! Mặc dù document.body.innerHTMLcho thấy <img src=\"about:logo\" alt=\"about:logo\">... Câu trả lời rất hay ...
S.Goswami

4

Trên thực tế, chỉ cái đầu tiên hợp lệ trong HTML5

<img src='stackoverflow.png'>  

Chỉ hai cuối cùng hợp lệ trong XHTML

<img src='stackoverflow.png'></img>  
<img src='stackoverflow.png' />

(Mặc dù không bắt buộc nghiêm ngặt, nhưng một altthuộc tính _usently_ cũng nên được bao gồm).

Điều đó nói rằng, trang HTML5 của bạn có thể sẽ hiển thị như dự định vì các trình duyệt sẽ viết lại hoặc diễn giải html của bạn theo ý bạn. Điều đó có thể có nghĩa là nó biến một thẻ, ví dụ, từ
<div />thành <div></div>. Hoặc có thể nó chỉ bỏ qua dấu gạch chéo cuối cùng trên <img ... />.
xem năm 2016: Cung cấp HTML5 dưới dạng XHTML 5.0 để xác thực kế thừa.
xem: thảo luận năm 2011 và các liên kết bổ sung ở đây, mặc dù theo thời gian một số bit có thể đã thay đổi

Điều này một phần là do các trình duyệt rất cố gắng sửa lỗi. Ngoài ra, vì có nhiều nhầm lẫn về thẻ tự đóng và thẻ vô hiệu. Cuối cùng, Thông số kỹ thuật đã thay đổi, hoặc không phải lúc nào cũng rõ ràng và các trình duyệt cố gắng tương thích ngược.

Vì vậy, mặc dù bạn có thể bỏ qua bất kỳ tùy chọn nào trong ba tùy chọn, nhưng
chỉ tùy chọn đầu tiên tuân thủ tiêu chuẩn HTML5 và được đảm bảo vượt qua trình xác thực HTML5.

Một chiến lược hợp lý có thể là:

  • Viết mã mới mà không có dấu gạch chéo đóng.
  • Khi tính toán lại mã, hãy cập nhật các thẻ hình ảnh gần đó, khi bạn chạy qua chúng.
  • Đừng quá lo lắng về các thẻ trong tệp kế thừa mà bạn không chạm vào, trừ khi có nhu cầu cụ thể.

Dưới đây là danh sách các thẻ không nên đóng trong HTML5 :

 <br>    <hr>    <input>       
 <img>  <link>   <source>  
 <col>  <area>   <base>
 <meta> <embed>  <param>  
<track>  <wbr>   <keygen> (HTML 5.2 Draft removed)

1
Điều này không chính xác về mặt kỹ thuật. Một khoảng trống yếu tố tự đóng là hoàn toàn hợp lệ trong html 5. Xem html.spec.whatwg.org/#start-tags mà sẽ làm cho <img src='stackoverflow.png' />giá trị trong bất kỳ phiên bản của XHTML và HTML 5.
Robert McKee

1
@RobertMcKee Không, nó đúng về mặt kỹ thuật. Mặc dù việc sử dụng dấu gạch chéo đóng được cho phép và sẽ không bị gắn cờ là lỗi, nhưng không ở đâu trong bất kỳ đặc tả HTML nào bạn sẽ thấy rằng nó được chỉ định là được sử dụng. Được phép không phá vỡ các trang web cũ hơn dựa trên XHTML / XML nhưng bạn sẽ không bao giờ tìm thấy bất kỳ thông số HTML nào hiển thị, bằng từ ngữ hoặc ví dụ, việc sử dụng dấu gạch chéo trên các thẻ đó mà chúng được chỉ định bởi W3C hoặc CÁI GÌ.
Rob

@Rob Theo tài liệu WHATWG tôi đã liên kết ở trên trong phần 12.1.2.1.6 - Then, if the element is one of the void elements, or if the element is a foreign element, then there may be a single U+002F SOLIDUS character (/). This character has no effect on void elements, but on foreign elements it marks the start tag as self-closing.img là một phần tử void trên phần 12.1.2
Robert McKee

1
@RobertMcKee Có. Đó là (một phần của) đặc tả nêu rõ lý do tại sao dấu gạch chéo được cho phép (vì những lý do tôi đã đưa ra trong nhận xét trước đây của mình). Tuy nhiên, bạn nên xem thông số kỹ thuật thực tế cho phần tử đó - img trong trường hợp này - cho thấy rõ ràng, bằng các từ và ví dụ, rằng không cần hoặc chỉ định dấu gạch chéo đóng. Trên thực tế, không cần tra cứu, đọc thêm trong phần đó sẽ thấy rằng dấu gạch chéo đóng không có nghĩa, không có tác dụng gì và các trình duyệt buộc phải bỏ qua nó. Vì vậy, nó là vô ích và vô nghĩa và đưa chúng ta trở lại nhận xét ban đầu của tôi: dấu gạch chéo đóng cửa không được sử dụng.
Rob

1
@Rob Có, nó là tùy chọn, nhưng hoàn toàn hợp lệ để làm như vậy. Điều này làm cho tuyên bố Actually, only the first one is valid in HTML5không chính xác về mặt kỹ thuật. Cái thứ hai cũng hợp lệ trong HTML5. Không bắt buộc, nhưng hợp lệ. Không ai tranh cãi rằng nó là bắt buộc. Chỉ điều đó theo thông số kỹ thuật, sử dụng dạng tự đóng của thẻ là hợp lệ trong tất cả các dạng XHTML và HTML hiện tại.
Robert McKee

2

Cách sử dụng thẻ tốt nhất mà bạn nên sử dụng:

<img src="" alt=""/>

Ngoài ra, bạn có thể sử dụng trong HTML5:

<img src="" alt="">

Hai điều này hoàn toàn hợp lệ trong HTML5 Chọn một trong số chúng và gắn bó với điều đó.


Đầu tiên không phải là tốt nhất ở chỗ nó không được chỉ định trong bất kỳ tiêu chuẩn HTML nào trong khi tiêu chuẩn thứ hai thì có. Đầu tiên chỉ được phép vì lý do lịch sử! (Khả năng tương thích với việc sử dụng XHTML / XML trong các trang web cũ hơn sẽ bị hỏng nếu trình duyệt không cho phép.)
Rob

Không chắc Rob đang muốn nói gì ở đây, nhưng thông số kỹ thuật html chỉ rõ rằng cái đầu tiên là hợp lệ.
Robert McKee

2

Cả hai câu trả lời đúng. HTML5 tuân theo các quy tắc nghiêm ngặt và trong HTML5, chúng ta có thể đóng tất cả các thẻ. Vì vậy, tùy thuộc vào bạn sử dụng HTML5 hay HTML và làm theo một câu trả lời thích hợp.

<img src='stackoverflow.png'>
<img src='stackoverflow.png' />

Thuộc tính thứ hai là thích hợp hơn.


Sai. Đầu tiên là cái duy nhất được chỉ định trong bất kỳ đặc tả HTML nào . Thứ hai chỉ được phép vì lý do lịch sử nhưng, một lần nữa, không được chỉ định theo yêu cầu ở bất kỳ đâu.
Rob

1

- Thẻ rỗng và chỉ chứa Thuộc tính. -Kẻ không có thẻ 'Đang đóng'.

Vì thế,

<img src='stackoverflow.png'>
<img src='stackoverflow.png' />

cả hai đều đúng trong HTML5.


Đầu tiên là chính xác! Thứ hai chỉ được phép vì lý do lịch sử. (Khả năng tương thích với việc sử dụng XHTML / XML trong các trang web cũ hơn sẽ bị hỏng nếu trình duyệt không cho phép.)
Rob

1

Sẽ hữu ích khi có thẻ đóng nếu bạn cố gắng đọc nó bằng trình phân tích cú pháp XHTML. Có thể là một trường hợp cạnh nhưng tôi làm điều đó mọi lúc. Không có hại gì khi có nó, và có nghĩa là tôi biết chúng ta có thể sử dụng một loạt các trình đọc XML sẽ không quan tâm khi chúng nhấn vào một thẻ không được đóng chặt.

Nếu bạn không bao giờ cố gắng phân tích cú pháp nội dung, hãy bỏ qua phần kết thúc.

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.