<!DOCTYPE html> là gì
<!DOCTYPE html> là khai báo doctype: dòng đầu tiên của một tệp HTML, nằm trước thẻ <html>. Dòng này báo trình duyệt "đây là một tài liệu HTML hiện đại", và trình duyệt đáp lại bằng cách hiển thị trang ở standards mode (chế độ chuẩn), theo đúng đặc tả HTML và CSS hiện hành.
Chỉ một dòng đó là toàn bộ doctype của HTML5. Nó không có thẻ đóng và không chứa gì khác bên trong.
Quy tắc cú pháp
- Doctype đứng đầu tiên. Trước nó chỉ được có khoảng trắng và chú thích. Bất kỳ chữ hay thẻ nào đứng trước doctype đều khiến trình duyệt bỏ qua nó.
- Không phân biệt chữ hoa chữ thường.
<!DOCTYPE html>và<!doctype html>giống hệt nhau. Chọn một kiểu viết và giữ nguyên kiểu đó. - Doctype không phải là phần tử. Không có
</!DOCTYPE>, và bạn không thể thêmclasshay thuộc tính nào khác vào nó. - Từ đứng sau DOCTYPE phải là
html.<!DOCTYPE html5>không phải một phiên bản mới hơn; trình duyệt coi trang đó như không có doctype hợp lệ. - Mỗi tài liệu chỉ có một. Trang được ghép từ nhiều tệp (template, include) vẫn chỉ xuất ra một doctype duy nhất ở đầu tệp HTML cuối cùng.
Standards mode và quirks mode
Trình duyệt có ba chế độ hiển thị, và doctype quyết định chọn chế độ nào:
| Chế độ | Được kích hoạt bởi | Điều gì thay đổi |
|---|---|---|
| Standards mode | <!DOCTYPE html> và các doctype hiện đại khác | Mọi thứ tuân theo đặc tả hiện hành |
| Limited quirks mode | HTML 4.01 Transitional hoặc Frameset có URL, XHTML 1.0 Transitional hoặc Frameset | Gần như chuẩn: chỉ khác một quy tắc về chiều cao dòng, nên một ảnh đứng một mình trên một dòng (thường là trong ô bảng) không có khoảng trống bên dưới |
| Quirks mode | Không có doctype, doctype viết sai, hoặc một số doctype cũ như HTML 4.01 Transitional không có URL | Bắt chước trình duyệt thập niên 1990: chiều cao theo phần trăm, cỡ chữ trong bảng và chiều cao dòng hoạt động khác đi |
Quirks mode tồn tại để những trang viết trước khi có chuẩn web vẫn hiển thị đúng như tác giả của chúng từng thấy. Với trang mới, nó chỉ gây rắc rối: một height: 100% chạy được ở trang này mà không chạy ở trang kia, hay bảng bỏ qua cỡ chữ bạn đặt, là những dấu hiệu kinh điển của việc thiếu doctype.
Các bản xem trước trong trình soạn thảo trên trang này luôn hiển thị ở standards mode, nên xóa doctype ở đó sẽ không cho bạn thấy quirks mode. Công cụ kiểm tra bên dưới dùng DOMParser, áp dụng đúng các quy tắc mà trình duyệt dùng khi tải một tệp. Sửa doctype trong ô văn bản và chế độ sẽ cập nhật theo:
Thử xóa dòng đó, gõ <!DOCTYPE html5>, hoặc đặt một từ trước doctype: mỗi cách đều chuyển kết quả sang quirks.
Doctype cũ: HTML 4.01 và XHTML
Trước HTML5, doctype chỉ tới một tệp DTD kèm một định danh public dài. Bạn vẫn sẽ gặp chúng ở đầu những trang web cũ:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Trình duyệt chưa bao giờ tải các tệp DTD đó. Chúng chỉ đọc định danh để chọn chế độ: HTML 4.01 Strict và XHTML 1.0 Strict cho standards mode, các bản Transitional cho limited quirks mode, còn HTML 4.01 Transitional không có URL cho quirks mode đầy đủ. Dán một doctype vào công cụ kiểm tra ở trên để thử; lưu ý rằng compatMode báo limited quirks mode là CSS1Compat, cùng giá trị với standards mode, nên chỉ quirks mode đầy đủ mới hiện ra là BackCompat.
Thay doctype cũ bằng <!DOCTYPE html> là an toàn với những trang vốn đã ở standards mode. Một trang đang ở quirks mode có thể bị xê dịch đôi chút (thường là chiều cao và khoảng trống dưới ảnh), nên hãy xem lại trang sau khi đổi.
Doctype trong DOM
Doctype trở thành một node DocumentType, tách biệt với phần tử <html>. Script đọc nó qua document.doctype, còn document.compatMode cho biết chế độ cuối cùng mà trang đang dùng:
document.compatMode là cách nhanh nhất để kiểm tra một trang web bất kỳ đang chạy: mở console của trình duyệt và gõ nó vào. "CSS1Compat" nghĩa là standards mode (hoặc limited quirks mode), "BackCompat" nghĩa là quirks mode.
Khung HTML5 đầy đủ để bắt đầu
Doctype là một phần của tài liệu tối thiểu mà mọi trang nên bắt đầu từ đó. Mỗi dòng bên dưới đều có nhiệm vụ riêng:
Thuộc tính lang và thẻ meta viewport đều có trang riêng.
Lỗi thường gặp
- Có thứ gì đó trước doctype. Một ký tự thừa, một lệnh
echogỡ lỗi từ script phía máy chủ, hoặc một thẻ HTML nằm trên<!DOCTYPE html>sẽ đưa cả trang vào quirks mode. Chú thích và dòng trống thì không sao. - Tự đặt ra phiên bản.
<!DOCTYPE html5>hay<!DOCTYPE HTML 5>đều không hợp lệ và kích hoạt quirks mode. Doctype của HTML5 chỉ đơn giản là<!DOCTYPE html>. - Đóng doctype.
<!DOCTYPE html></!DOCTYPE>không phải HTML hợp lệ. Khai báo này không có thẻ đóng. - Bỏ doctype trong các tệp thử nghiệm nhỏ. Lỗi bố cục bạn đang tìm trong một tệp nháp không có doctype có thể không tồn tại trên trang thật, và ngược lại.
- Giữ doctype Transitional cũ. Nó đưa trang vào limited quirks mode mà không mang lại lợi ích gì. Hãy chuyển sang
<!DOCTYPE html>.
Câu hỏi thường gặp
<!DOCTYPE html> có tác dụng gì?
Dòng này báo trình duyệt rằng trang là một tài liệu HTML hiện đại, nên trang được hiển thị ở standards mode. Nếu thiếu nó, trình duyệt quay về quirks mode, chế độ bắt chước lỗi của các trình duyệt cuối thập niên 1990 và thay đổi cách tính một số bố cục và chiều cao.
<!DOCTYPE html> có bắt buộc không?
Trang vẫn tải được khi thiếu nó, nhưng chuẩn HTML yêu cầu phải có, và trình duyệt sẽ hiển thị trang ở quirks mode. Luôn đặt <!DOCTYPE html> ở dòng đầu tiên.
Doctype có phân biệt chữ hoa chữ thường không?
Không. <!DOCTYPE html>, <!doctype html> và <!DocType HTML> đều có nghĩa như nhau. Cách viết phổ biến nhất là DOCTYPE viết hoa đi với html viết thường.
DOCTYPE có phải là thẻ HTML không?
Không. Đây là một khai báo, không phải phần tử: nó không có thẻ đóng, không thêm được thuộc tính nào và không xuất hiện trong document.body. Trong DOM, nó là một node DocumentType riêng, truy cập qua document.doctype.
Doctype của HTML5 là gì?
<!DOCTYPE html>. HTML5 đã bỏ các định danh public và URL dài dòng của HTML 4.01 và XHTML, và dạng ngắn này là doctype duy nhất bạn cần cho mọi trang mới.
Làm sao biết một trang đang ở quirks mode?
Mở console của trình duyệt và chạy document.compatMode. "CSS1Compat" nghĩa là standards mode (hoặc limited quirks mode), "BackCompat" nghĩa là quirks mode.