HTML5 và XHTML 1.0 Transitional là hai chuẩn markup khác nhau về cú pháp, triết lý và khả năng.
So sánh căn bản
| Tiêu chí | HTML5 | XHTML 1.0 Transitional |
|---|---|---|
| Cơ sở | SGML-inspired (lenient parsing) | XML (strict parsing) |
| Doctype | <!DOCTYPE html> | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| Namespace | Không bắt buộc | Bắt buộc: xmlns="https://www.w3.org/1999/xhtml" |
| Case sensitivity | Không phân biệt (tag/attr) | Phân biệt: chữ thường bắt buộc |
| Closing tags | Tự đóng (<br>, <img>) hoặc không đóng | Bắt buộc đóng tất cả: <br />, <img />, <p>...</p> |
| Attribute values | Có thể không quote: class=example | Bắt buộc quote: class="example" |
| Boolean attributes | <input disabled> | <input disabled="disabled"> |
| New elements | <video>, <audio>, <canvas>, <section>... | Không có (invalid markup) |
| Error handling | Browser tự sửa lỗi (forgiving) | XML parser: lỗi → dừng render (Yellow Screen of Death) |
Chuyển đổi HTML → XHTML 1.0 Transitional (Legacy)
- Thêm Doctype XHTML ở dòng đầu tiên.
- Thêm
xmlns="https://www.w3.org/1999/xhtml"vào thẻ<html>. - Chuyển tất cả tên tag, attribute thành chữ thường.
- Đóng tất cả element rỗng:
<br />,<img />,<input />,<hr />,<meta />,<link />. - Quote tất cả giá trị attribute:
class="box",width="100". - Thuộc tính boolean:
disabled="disabled",checked="checked",selected="selected". - Thay
&trong URL/JS bằng&(XML entity). - Khai báo encoding:
<?xml version="1.0" encoding="UTF-8"?>(tùy chọn, khuyến khích).
Ví dụ chuyển đổi
<!-- HTML5 --> <!DOCTYPE html> <html lang="vi"> <head> <meta charset="UTF-8"> <title>Trang web</title> </head> <body> <img src="logo.png" alt="Logo"> <input type="text" name="email" disabled> <br> <video controls><source src="vid.mp4"></video> </body> </html> <!-- XHTML 1.0 Transitional --> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="https://www.w3.org/1999/xhtml" xml:lang="vi" lang="vi"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Trang web</title> </head> <body> <img src="logo.png" alt="Logo" /> <input type="text" name="email" disabled="disabled" /> <br /> <!-- video không hợp lệ trong XHTML 1.0 --> <object data="vid.mp4" type="video/mp4"></object> </body> </html>
Tại sao KHÔNG nên dùng XHTML 1.0 Transitional ngày nay?
- Đã lỗi thời (>15 năm), không hỗ trợ tính năng web hiện đại.
- XML parsing nghiêm ngặt gây trải nghiệm kém (trang trắng khi lỗi cú pháp nhỏ).
- Không có
<video>,<audio>,<canvas>, semantic elements. - HTML5 là chuẩn sống (Living Standard), được tất cả trình duyệt hỗ trợ.
- Nếu cần XML: dùng XHTML5 (HTML5 serialized as XML) - hiếm khi dùng.
Migrate sang HTML5 (Khuyên dùng)
<!DOCTYPE html> <html lang="vi"> <head> <meta charset="UTF-8"> <title>...</title> </head> <body> <header>...</header> <main>...</main> <footer>...</footer> </body> </html>