Để các tài liệu HTML có khả năng bảo trì và mở rộng.
Chung chung
Bắt đầu với DOCTYPE
DOCTYPE là bắt buộc để kích hoạt chế độ no-quirks.
Tồi:
html
<html>
...
</html>
Tốt:
html
<!doctype html>
<html>
...
</html>
Đừng sử dụng các khai báo DOCTYPE cũ hoặc đã lỗi thời
DOCTYPE không dành cho bất kỳ DTD (Document Type Declaration) nữa, hãy đơn giản sử dụng:
Tồi:
html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
Tốt:
html
<!doctype html>
Đừng sử dụng XML trong khai báo
Bạn có chắc chắn mình muốn viết XHTML?
Tồi:
html
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!doctype html>
Tốt:
html
<!doctype html>
Đừng sử dụng các tham chiếu ký tự càng nhiều càng tốt
Nếu bạn viết một tài liệu HTML với định dạng UTF-8, hầu hết tất cả các ký tự
(bao gồm cả Emoji) có thể được viết trực tiếp.
Tồi:
html
<p>
<small>Copyright © 2014 W3C<sup>®</sup></small>
</p>
Tốt:
html
<p>
<small>Copyright © 2014 W3C<sup>®</sup></small>
</p>
Những ký tự &, <, >, " và ' với tên tham chiếu ký tự
Những ký tự này nên được viết bằng các tham chiếu ký tự để không xảy ra lỗi ở tài liệu HTML.
Tồi:
html
<h1>The "&" character</h1>
Tốt:
html
<h1>The "&" character</h1>
Sử dụng tham chiếu ký tự số cho những ký tự điều khiển hoặc những ký tự vô hình
Những ký tự này dễ bị hiểu sai thành ký tự khác. Và thông số kỹ thuật
cũng không đảm bảo rằng một người có thể đọc được tên cho các ký tự này.
Tồi:
html
<p>This book can read in 1 hour.</p>
Tốt:
html
<p>This book can read in 1 hour.</p>
Thêm khoảng trắng xung quanh nội dung ghi chú
Một số ký tự không thể được sử dụng ngay lập tức sau khi ghi chú được mở
hoặc được đóng lại.
Tồi:
html
<!--This section is non-normative-->
Tốt:
html
<!-- This section is non-normative -->
Đừng bỏ qua thẻ đóng
Tôi nghĩ bạn không biết một quy tắc của việc bỏ qua thẻ đóng.
Tồi:
html
<html>
<body>
...
</body>
</html>
Tốt:
html
<html>
<body>
...
</body>
</html>
Đừng trộn lẫn định dạng phần tử trống
Tính nhất quán là chìa khóa cho việc dễ đọc.
Tồi:
html
<img alt="HTML Best Practices" src="/img/logo.png" />
<hr />
Tốt:
html
<img alt="HTML Best Practices" src="/img/logo.png" />
<hr />
Đừng thêm khoảng trắng vào xung quanh các thẻ và giá trị của các thuộc tính
Không có lý do gì để làm điều này.
Tồi:
html
<h1 class=" title ">HTML Best Practices</h1>
Tốt:
html
<h1 class="title">HTML Best Practices</h1>
Đừng trộn lẫn chữ hoa và chữ thường
Nó cũng mang lại một sự nhất quán.
Tồi:
html
<a href="#general">General</a>
Tốt:
html
<a href="#general">General</a>
Cũng được:
html
<a href="#general">General</a>
Đừng trộn lẫn các dấu ngoặc kép
Giống như trên.
Tồi:
html
<img alt="HTML Best Practices" src="/img/logo.jpg" />
Tốt:
html
<img alt="HTML Best Practices" src="/img/logo.jpg" />
Đừng phân tách các thuộc tính bằng hai hoặc nhiều khoảng trắng
Các quy tắc định dạng kỳ dị của bạn sẽ làm người đọc bối rối.
Tồi:
html
<input name="q" type="search" />
Tốt:
html
<input name="q" type="search" />
Bỏ qua giá trị thuộc tính boolean
Nó thật dễ dàng để viêt, phải không?
Tồi:
html
<audio autoplay="autoplay" src="/audio/theme.mp3"></audio>
Tốt:
html
<audio autoplay src="/audio/theme.mp3"></audio>
Bỏ qua namespaces
SVG và MathML có thể được sử dụng trực tiếp trong một tài liệu HTML.
Tồi:
html
<svg xmlns="http://www.w3.org/2000/svg">...</svg>
Tốt:
html
<svg>...</svg>
Đừng sử dụng các thuộc tính XML
Chúng tôi viết một tài liệu HTML.
Tồi:
html
<span lang="ja" xml:lang="ja">...</span>
Tốt:
html
<span lang="ja">...</span>
Đừng trộn lẫn thuộc tính data-*, Microdata và RDFa Lite với các thuộc tính chung khác
Một thẻ dài có thể rất phức tạp. Quy tắc đơn giản này sẽ giúp đọc một thẻ dài dễ dàng hơn.
Tồi:
html
<img
alt="HTML Best Practices"
data-height="31"
data-width="88"
itemprop="image"
src="/img/logo.png"
/>
Tốt:
html
<img
alt="HTML Best Practices"
src="/img/logo.png"
data-width="88"
data-height="31"
itemprop="image"
/>
Ưu tiên các ngữ nghĩa ARIA mặc định ngầm
Một số phần tử có một ARIA role ngầm định trong một tài liệu HTML,
đừng chỉ định lại chúng.
Tồi:
html
<nav role="navigation">...</nav>
<hr role="separator" />
Tốt:
html
<nav>...</nav>
<hr />
Phần tử root
### Thêm một thuộc tính `lang`
Thuộc tính `lang` sẽ giúp phiên dịch một tài liệu HTML.
Tồi:
```html
<html>
Tốt:
html
<html lang="en-US"></html>
Giữ thuộc tính lang càng ngắn càng tốt
Tiếng Nhật chỉ sử dụng ở Nhật bản. Vì thế mã quốc gia là không cần thiết.
Tồi:
html
<html lang="ja-JP"></html>
Tốt:
html
<html lang="ja"></html>
Tránh sử dụng data-* càng nhiều càng tốt
Một thuộc tính thích hợp có thể được trình duyệt xử lý đúng cách.
Tồi:
html
<span data-language="french">chemises</span>
...
<strong data-type="warning">Do not wash!</strong>
Tốt:
html
<span title="French"><span lang="fr">chemises</span></span>
...
<strong class="warning">Do not wash!</strong>
## Document metadata
Thêm phần tử title
Giá trị của phần tử title được sử dụng bởi nhiều ứng dụng khác nhau
không chỉ là trình duyệt.
Tồi:
html
<head>
<meta charset="UTF-8" />
</head>
Tốt:
html
<head>
<meta charset="UTF-8" />
<title>HTML Best Practices</title>
</head>
Đừng sử dụng thuộc tính base
Một đường dẫn tương đối hoặc URL là an toàn hơn cho lập trình viên và người dùng.
Tồi:
html
<head>
...
<base href="/blog/" />
<link href="hello-world" rel="canonical" />
...
</head>
Tốt:
html
<head>
...
<link href="/blog/hello-world" rel="canonical" />
...
</head>
Chỉnh định kiểu MIME hoặc các tài nguyên liên kết phụ
Đây là một gợi ý về cách ứng dụng xử lý tài nguyên này.
Tồi:
html
<link href="/pdf" rel="alternate" />
<link href="/feed" rel="alternate" />
<link href="/css/screen.css" rel="stylesheet" />
Tốt:
html
<link href="/pdf" rel="alternate" type="application/pdf" />
<link href="/feed" rel="alternate" type="application/rss+xml" />
<link href="/css/screen.css" rel="stylesheet" />
Đừng liên kết đến favico.ico
Hầu hết các trình duyệt nạp /favicon.ico tự động và không đồng bộ.
Tồi:
html
<link href="/favicon.ico" rel="icon" type="image/vnd.microsoft.icon" />
Tốt:
html
<!-- Place `favicon.ico` in the root directory. -->
Thêm liên kết apple-touch-icon
Một đường dẫn yêu cầu mặc định cho biểu tượng cảm ứng đã bị thay đổi đột ngột.
Tồi:
html
<!-- Hey Apple! Please download `/apple-touch-icon.png`! -->
Tốt:
html
<link href="/apple-touch-icon.png" rel="apple-touch-icon" />
Thêm thuộc tính title cho định dạng kiểu luân phiên
Một nhãn có thể đọc được bởi con người có thể giúp mọi người lựa chọn định dạng kiểu phù hợp.
Tồi:
html
<link href="/css/screen.css" rel="stylesheet" />
<link href="/css/high-contrast.css" rel="alternate stylesheet" />
Tốt:
html
<link href="/css/screen.css" rel="stylesheet" />
<link
href="/css/high-contrast.css"
rel="alternate stylesheet"
title="High contrast"
/>
Với URL, sử dụng phần tử link
Giá trị của thuộc tính href có thể được phân giải như một URL.
Tồi:
html
<section itemscope itemtype="http://schema.org/BlogPosting">
<meta content="https://example.com/blog/hello" itemprop="url" />
...
</section>
Tốt:
html
<section itemscope itemtype="http://schema.org/BlogPosting">
<link href="/blog/hello" itemprop="url" />
...
</section>
Chỉ định mã hóa ký tự của tài liệu
UTF-8 chưa phải là mặc định trên tất cả các trình duyệt.
Tồi:
html
<head>
<title>HTML Best Practices</title>
</head>
Tốt:
html
<head>
<meta charset="UTF-8" />
<title>HTML Best Practices</title>
</head>
Đừng sử dụng định dạng mã hóa ký tự cũ
HTTP headers được chỉnh định bởi một máy chủ, hãy giữ nó đơn giản.
Tồi:
html
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Tốt:
html
<meta charset="UTF-8" />
Chỉ định mã hóa ký tự vào đầu tài liệu
Đặc tả yêu cầu mã hóa ký tự được chỉ định trong 1024 bytes đầu tiên của tài liệu.
Tồi:
html
<head>
<meta content="width=device-width" name="viewport" />
<meta charset="UTF-8" />
...
</head>
Tốt:
html
<head>
<meta charset="UTF-8" />
<meta content="width=device-width" name="viewport" />
...
</head>
Sử dụng UTF-8
Với UTF-8, bạn sử dụng Emoji miễn phí.
Tồi:
html
<meta charset="Shift_JIS" />
Tốt:
html
<meta charset="UTF-8" />
Bỏ qua thuộc tính type cho CSS
Trong HTML, giá trị mặc định của thuộc tính type của style là text/css.
Tồi:
html
<style type="text/css">
...
</style>
Tốt:
html
<style>
...
</style>
Đừng ghi chú trong nội dung của phần tử style
Cách này dành cho các trình duyệt cũ.
Tồi:
html
<style>
<!--
...
-->
</style>
Tốt:
html
<style>
...
</style>
Đừng trộn lẫn thẻ cho CSS và JavaScript
Đội khi phần tử script chặn việc dựng DOM.
Tồi:
html
<script src="/js/jquery.min.js"></script>
<link href="/css/screen.css" rel="stylesheet" />
<script src="/js/main.js"></script>
Tốt:
html
<link href="/css/screen.css" rel="stylesheet" />
<script src="/js/jquery.min.js"></script>
<script src="/js/main.js"></script>
Cũng tốt:
<script src="/js/jquery.min.js"></script>
<script src="/js/main.js"></script>
<link href="/css/screen.css" rel="stylesheet" />
## Sections
Thêm thuộc tính body
Đôi khi phần tử body được trình duyệt bổ sung ở vị trí không mong muốn.
Tồi:
html
<html>
<head>
...
</head>
...
</html>
Tốt:
html
<html>
<head>
...
</head>
<body>
...
</body>
</html>
Quên phần tử hgroup đi
Phần tử này không được sử dụng quá nhiều.
Tồi:
html
<hgroup>
<h1>HTML Best Practices</h1>
<h2>For writing maintainable and scalable HTML documents.</h2>
</hgroup>
Tốt:
html
<h1>HTML Best Practices</h1>
<p>For writing maintainable and scalable HTML documents.</p>
Chỉ sử dụng phần tử address cho thông tin liên lạc
Phần tử address là dành cho địa chỉ email, tài khoản mạng xã hôi, địa chỉ đường,
số điện thoại, hoặc cái gì đó mà bạn có thể liên lạc.
Tồi:
html
<address>No rights reserved.</address>
Tốt:
html
<address>
Contact: <a href="https://twitter.com/hail2u_">Kyo Nagashima</a>
</address>
## Nhóm nội dung
Đừng quên bắt đầu với dòng mới trong phần tử pre
Dòng mới đầu tiên sẽ bị trình duyệt bỏ qua, nhưng dòng thứ hai trở đi sẽ được
hiển thị.
Tồi:
html
<pre>
<!DOCTYPE html>
</pre
>
Tốt:
html
<pre>
<!DOCTYPE html>
</pre
>
Sử dụng phần tử phù hợp trong blockquote
Nội dung của phần tử blockquote là một trích dẫn, không phải một đoạn ký tự.
Tồi:
html
<blockquote>For writing maintainable and scalable HTML documents.</blockquote>
Tốt:
html
<blockquote>
<p>For writing maintainable and scalable HTML documents.</p>
</blockquote>
Đừng bao gồm sự chỉ định trong phần tử blockquote
Nội dung của phần tử blockquote là một trích dẫn.
Tồi:
html
<blockquote>
<p>For writing maintainable and scalable HTML documents.</p>
<p>— HTML Best Practices</p>
</blockquote>
Tốt:
html
<blockquote>
<p>For writing maintainable and scalable HTML documents.</p>
</blockquote>
<p>— HTML Best Practices</p>
Cũng tốt:
<figure>
<blockquote>
<p>For writing maintainable and scalable HTML documents.</p>
</blockquote>
<figcaption>— HTML Best Practices</figcaption>
</figure>
Viết một danh sách trên mỗi dòng
Dònnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn
dài thì quuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuá khó đọc.
Tồi:
html
<ul>
<li>General</li>
<li>The root Element</li>
<li>Sections</li>
...
</ul>
Tốt:
html
<ul>
<li>General</li>
<li>The root Element</li>
<li>Sections</li>
...
</ul>
Sử dụng thuộc tính type cho phần tử ol
Đôi khi những điểm đánh dấu được tham chiếu bởi nội dung ở gần. Nếu bạn thay đổi
điểm đánh dấu với thuộc tính type, bạn sẽ an toàn khi tham chiếu.
Tồi:
html
<head>
<style>
.toc {
list-style-type: upper-roman;
}
</style>
</head>
<body>
<ol class="toc">
<li>General</li>
<li>The root Element</li>
<li>Sections</li>
...
</ol>
</body>
Tốt:
html
<body>
<ol type="I">
<li>General</li>
<li>The root Element</li>
<li>Sections</li>
...
</ol>
</body>
Đừng sử dụng dl cho đoạn hội thoại
Phần tử dl bị giới hạn vào một danh sách liên kết trong HTML.
Tồi:
html
<dl>
<dt>Costello</dt>
<dd>Look, you gotta first baseman?</dd>
<dt>Abbott</dt>
<dd>Certainly.</dd>
<dt>Costello</dt>
<dd>Who’s playing first?</dd>
<dt>Abbott</dt>
<dd>That’s right.</dd>
<dt>Costello becomes exasperated.</dd>
<dt>Costello</dt>
<dd>When you pay off the first baseman every month, who gets the money?</dd>
<dt>Abbott</dt>
<dd>Every dollar of it.</dd>
</dl>
Tốt:
html
<p>Costello: Look, you gotta first baseman?</p>
<p>Abbott: Certainly.</p>
<p>Costello: Who’s playing first?</p>
<p>Abbott: That’s right.</p>
<p>Costello becomes exasperated.</p>
<p>
Costello: When you pay off the first baseman every month, who gets the money?
</p>
<p>Abbott: Every dollar of it.</p>
Đặt phần tử figcaption là phần tử đầu hoặc cuối của phần tử figure
Tài liệu không cho phép phần tử figcaption ở giữa phần tử figure.
Tồi:
html
<figure>
<img
alt="Front cover of the “HTML Best Practices” book"
src="/img/front-cover.png"
/>
<figcaption>“HTML Best Practices” Cover Art</figcaption>
<img
alt="Back cover of the “HTML Best Practices” book"
src="/img/back-cover.png"
/>
</figure>
Tốt:
html
<figure>
<img
alt="Front cover of the “HTML Best Practices” book"
src="/img/front-cover.png"
/>
<img
alt="Back cover of the “HTML Best Practices” book"
src="/img/back-cover.png"
/>
<figcaption>“HTML Best Practices” Cover Art</figcaption>
</figure>
Sử dụng phần tử main
Phần tử main có thể được sử dụng để bọc nội dung.
Tồi:
html
<div id="content">...</div>
Tốt:
html
<main>...</main>
Tránh sử dụng phần tử div càng nhiều càng tốt
Phần tử div là sự lựa chọn cuối cùng.
Tồi:
html
<div class="chapter">...</div>
Tốt:
html
<section>...</section>
## Ngữ nghĩa cấp độ văn bản
Đừng chia thành nhiều liên kết giống nhau mà có thể nhóm lại
Phần tử a có thể bao bọc hầu hết tất cả các phần tử (ngoại trừ các phần tử
tương tác như biểu mẫu và chính nó).
Tồi:
html
<h1><a href="https://whatwg.org/">WHATWG</a></h1>
<p>
<a href="https://whatwg.org/"
>A community maintaining and evolving HTML since 2004.</a
>
</p>
Tốt:
html
<a href="https://whatwg.org/">
<h1>WHATWG</h1>
<p>A community maintaining and evolving HTML since 2004.</p>
</a>
Sử dụng thuộc tính download cho việc tải một tài nguyên
Nó sẽ buộc các trình duyệt tải xuống tài nguyên được liên kết vào bộ nhớ.
Tồi:
html
<a href="/downloads/offline.zip">offline version</a>
Tốt:
html
<a download href="/downloads/offline.zip">offline version</a>
Sử dụng thuộc tính rel, hreflang và type nếu cần
Những gợi ý này giúp ứng dụng biết cách xử lý các liên kết đến tài nguyên.
Tồi:
html
<a href="/ja/pdf">Japanese PDF version</a>
Tốt:
html
<a href="/ja/pdf" hreflang="ja" rel="alternate" type="application/pdf"
>Japanese PDF version</a
>
Làm sạch văn bản liên kết
Văn bản liên kết nên là nhãn nếu nó liên kết đến tài nguyên.
Tồi:
html
<p>
<a href="/pdf" rel="alternate" type="application/pdf">Click here</a> to view
PDF version.
</p>
Tốt:
html
<p>
<a href="/pdf" rel="alternate" type="application/pdf">PDF version</a> is also
available.
</p>
Đừng sử dụng thuộc tính em cho cảnh báo hoặc thận trọng
Đây là sự nghiêm túc. Vì vậy, phần tử strong thích hợp hơn.
Tồi:
html
<em>Caution!</em>
Tốt:
html
<strong>Caution!</strong>
Tránh phần tử s, i, b và u càng nhiều càng tốt
Những ngữ nghĩa của các phần tử này thì quá khó cho con người.
Tồi:
html
<i class="icon-search"></i>
Tốt:
html
<span class="icon-search" aria-hidden="true"></span>
Đừng thêm dấu ngoặc kép trong phần tử q
Những dấu ngoặc kép được cung cấp bởi trình duyệt.
Tồi:
html
<q>“For writing maintainable and scalable HTML documents”</q>
Tốt:
html
<q>For writing maintainable and scalable HTML documents</q>
Cũng tốt: “For writing maintainable and scalable HTML documents”
Thêm thuộc tính title cho phần từ abbr
Không có cách nào khác để thể hiện sự mở rộng của nó.
Tồi:
html
<abbr>HBP</abbr>
Tốt:
html
<abbr title="HTML Best Practices">HBP</abbr>
Đánh dấu phần tử ruby dài dòng
Phần tử ruby không được hỗ trợ hoàn toàn trên các trình duyệt hiện đại.
Tồi:
html
<ruby>HTML<rt>えいちてぃーえむえる</rt></ruby>
Tốt:
html
<ruby>HTML<rp>(</rp><rt>えいちてぃーえむえる</rt><rp>)</rp></ruby>
Thêm thuộc tính datetime vào phần từ time không thể đọc được bằng máy
Khi thuộc tính datetime không hiển thị, định dạng nội dung của các phần tử time bị hạn chế.
Tồi:
html
<time>Dec 19, 2014</time>
Tốt:
html
<time datetime="2014-12-19">Dec 19, 2014</time>
Chỉ định code languge với thuộc tính class có tiền tố language-
Đây không phải là một cách chính thức, nhưng thông số kỹ thuật đề cập đến nó.
Tồi:
html
<code><!DOCTYPE html></code>
Tốt:
html
<code class="language-html"><!DOCTYPE html></code>
Giữ phần tử kbd càng đơn giản càng tốt
Việc lồng phần tử kdb là quá khó đối với con người.
Tồi:
html
<kbd><kbd>Ctrl</kbd>+<kbd>F5</kbd></kbd>
Tốt:
html
<kbd>Ctrl+F5</kbd>
Tránh sử dụng phần tử span càng nhiều càng tốt
Phần tử span là sự lựa chọn cuối cùng.
Tồi:
html
HTML <span class="best">Best</span> Practices
Tốt:
html
HTML <em>Best</em> Practices
Xuống dòng sau phần tử br
Cần ngắt dòng nơi phần tử br được sử dụng.
Tồi:
html
<p>HTML<br />Best<br />Practices</p>
Tốt:
html
<p>
HTML<br />
Best<br />
Practices
</p>
Đừng sử dụng phần tử br cho mục đích trình bày
Phần tử br không được sử dụng cho ngắt dòng, nó dùng để ngắt dòng nội dung.
Tồi:
html
<p>
<label>Rule name: <input name="rule-name" type="text" /></label><br />
<label
>Rule description:<br />
<textarea name="rule-description"></textarea>
</label>
</p>
Tốt:
html
<p>
<label>Rule name: <input name="rule-name" type="text" /></label>
</p>
<p>
<label
>Rule description:<br />
<textarea name="rule-description"></textarea>
</label>
</p>
## Chỉnh sửa
Không lấn phần tử ins và del lên các phần tử khác
Các phần tử không thể bị tràn bởi các phần tử khác.
Tồi:
html
<p>For writing maintainable and scalable HTML documents.<del> And for mental stability.</p>
<p>Don’t trust!</p></del>
Tốt:
html
<p>
For writing maintainable and scalable HTML documents.<del>
And for mental stability.</del
>
</p>
<del><p>Don’t trust!</p></del>
## Nội dung được nhúng
Cung cấp phần tử img dự phòng cho phần tử picture
Sự hỗ trợ cho phần tử picture là chưa tốt.
Tồi:
html
<picture>
<source srcset="/img/logo.webp" type="image/webp" />
<source srcset="/img/logo.hdp" type="image/vnd.ms-photo" />
<source srcset="/img/logo.jp2" type="image/jp2" />
<source srcset="/img/logo.jpg" type="image/jpg" />
</picture>
Tốt:
html
<picture>
<source srcset="/img/logo.webp" type="image/webp" />
<source srcset="/img/logo.hdp" type="image/vnd.ms-photo" />
<source srcset="/img/logo.jp2" type="image/jp2" />
<img src="/img/logo.jpg" />
</picture>
Thêm thuộc tính alt cho phần tử img nếu cần thiết
Thuộc tính alt sẽ giúp cho những ai không thể xử lý hình ảnh hoặc việc tải hình ảnh bị vô hiệu hóa
Tồi:
html
<img src="/img/logo.png" />
Tốt:
html
<img alt="HTML Best Practices" src="/img/logo.png" />
Thuộc tính alt để trống nếu có thể
Nếu hình ảnh là bổ sung, có tương tự nội dung tương tự ở gần đó.
Tồi:
html
<img alt="Question mark icon" src="/img/icon/help.png" /> Help
Tốt:
html
<img alt="" src="/img/icon/help.png" /> Help
Bỏ qua thuộc tính alt nếu có thể
Đôi khi bạn không biết văn bản nào là phù hợp với thuộc tính alt.
Tồi:
html
<img alt="CAPTCHA" src="captcha.cgi?id=82174" />
Tốt:
html
<img src="captcha.cgi?id=82174" title="CAPTCHA" /> (If you cannot see the image,
you can use an <a href="?audio">audio</a> test instead.)
Phần tử iframe rỗng
Ở đây có một số hạn chế trong nội dung của nó. Nên để trống thì luôn an toàn.
Tồi:
html
<iframe src="/ads/default.html">
<p>If your browser support inline frame, ads are displayed here.</p>
</iframe>
Tốt:
html
<iframe src="/ads/default.html"></iframe>
Đánh dấu nội dung phần tử map
Đây là nội dung được trình bày với trình đọc màn hình.
Tồi:
html
<map name="toc">
<a href="#general">General</a>
<area alt="General" coords="0, 0, 40, 40" href="#General" /> |
<a href="#the_root_element">The root element</a>
<area
alt="The root element"
coords="50, 0, 90, 40"
href="#the_root_element"
/>
|
<a href="#sections">Sections</a>
<area alt="Sections" coords="100, 0, 140, 40" href="#sections" />
</map>
Tốt:
html
<map name="toc">
<p>
<a href="#general">General</a>
<area alt="General" coords="0, 0, 40, 40" href="#General" /> |
<a href="#the_root_element">The root element</a>
<area
alt="The root element"
coords="50, 0, 90, 40"
href="#the_root_element"
/>
|
<a href="#sections">Sections</a>
<area alt="Sections" coords="100, 0, 140, 40" href="#sections" />
</p>
</map>
Cung cấp nội dung dự phòng cho phần tử audio hoặc video
Nội dung dự phòng là cần thiết cho những phần tử mới được giới thiệu trong HTML.
Tồi:
html
<video>
<source src="/mov/theme.mp4" type="video/mp4" />
<source src="/mov/theme.ogv" type="video/ogg" />
...
</video>
Tốt:
html
<video>
<source src="/mov/theme.mp4" type="video/mp4" />
<source src="/mov/theme.ogv" type="video/ogg" />
...
<iframe src="//www.youtube.com/embed/..." allowfullscreen></iframe>
</video>
## Dữ liệu dạng bảng
Viết một ô trên một dòng
Những dòng dài thì khó cho việc quét.
Tồi:
html
<tr>
<td>General</td>
<td>The root Element</td>
<td>Sections</td>
</tr>
Tốt:
html
<tr>
<td>General</td>
<td>The root Element</td>
<td>Sections</td>
</tr>
Sử dụng phần tử th cho ô tiêu đề
Ở đây không có lý do gì để không làm điều đó.
Tồi:
html
<table>
<thead>
<tr>
<td><strong>Element</strong></td>
<td><strong>Empty</strong></td>
<td><strong>Tag omission</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td>
<strong><code>pre</code></strong>
</td>
<td>No</td>
<td>Neither tag is omissible</td>
</tr>
<tr>
<td>
<strong><code>img</code></strong>
</td>
<td>Yes</td>
<td>No end tag</td>
</tr>
</tbody>
</table>
Tốt:
html
<table>
<thead>
<tr>
<th>Element</th>
<th>Empty</th>
<th>Tag omission</th>
</tr>
</thead>
<tbody>
<tr>
<th><code>pre</code></th>
<td>No</td>
<td>Neither tag is omissible</td>
</tr>
<tr>
<th><code>img</code></th>
<td>Yes</td>
<td>No end tag</td>
</tr>
</tbody>
</table>
## Biểu mẫu
Bao bọc biểu mẫu điều khiển với phần tử label
Phần tử label giúp tập trung vào phần tử biểu mẫu.
Tồi:
html
<p>Query: <input name="q" type="text" /></p>
Tốt:
html
<p>
<label>Query: <input name="q" type="text" /></label>
</p>
Bỏ qua thuộc tính for nếu có thể
Phần tử label có thể chứa một số phần tử biểu mẫu.
Tồi:
html
<label for="q">Query: </label><input id="q" name="q" type="text" />
Tốt:
html
<label>Query: <input name="q" type="text" /></label>
Sử dụng thích hợp thuộc tính type cho phần tử input
Với type thích hợp, một trình duyệt cung cấp những tính năng nhỏ cho phần tử input.
Tồi:
html
<label>Search keyword: <input name="q" type="text" /></label>
Tốt:
html
<label>Search keyword: <input name="q" type="search" /></label>
Thêm thuộc tính value cho input type="submit
Nhãn mặc định cho nút gởi là không tiêu chuẩn hóa trên trình duyệt và ngôn ngữ.
Tồi:
html
<input type="submit" />
Tốt:
html
<input type="submit" value="Search" />
Thêm thuộc tính title cho phần tử input khi có thuộc tính pattern
Nếu văn bản đầu vào không khớp cho thuộc tính parttern, thì giá trị của
thuộc tính title sẽ được hiển thị như một gợi ý.
Tồi:
html
<input name="security-code" pattern="[0-9]{3}" type="text" />
Tốt:
html
<input
name="security-code"
pattern="[0-9]{3}"
title="A security code is a number in three figures."
type="text"
/>
Don’t use placeholder attribute for labeling Đừng sử dụng thuộc tính placeholder để gắn nhãn
Phần tử label là dành cho một nhãn, thuộc tính placeholder là dành cho một gợi ý ngắn.
Tồi:
html
<input name="email" placeholder="Email" type="text" />
Tốt:
html
<label
>Email: <input name="email" placeholder="john.doe@example.com" type="text"
/></label>
Viết một phần tử option trên một dòng
Dòng dài thì khó cho việc quét.
Tồi:
html
<datalist id="toc">
<option label="General"></option>
<option label="The root element"></option>
<option label="Sections"></option>
</datalist>
Tốt:
html
<datalist id="toc">
<option label="General"></option>
<option label="The root element"></option>
<option label="Sections"></option>
</datalist>
Thêm thuộc tính max cho phần tử progress
Với thuộc tính max, thuộc tính value có thể được viết ở định dạng dễ hiểu.
Tồi:
html
<progress value="0.5">50%</progress>
Tốt:
html
<progress max="100" value="50">50%</progress>
Thêm thuộc tính min và max cho phần tử meter
Với thuộc tính min và max, thuộc tính value có thể được viết ở một
định dạng dễ hiểu.
Tồi:
html
<meter value="0.5">512GB used (1024GB total)</meter>
Tốt:
html
<meter min="0" max="1024" value="512">512GB used (1024GB total)</meter>
Đặt phần tử legend như một phần tử con đầu tiên của phần tử fieldset
Thông số kỹ thuật yêu cầu điều này.
Tồi:
html
<fieldset>
<p>
<label
>Is this section useful?:
<input name="usefulness-general" type="checkbox"
/></label>
</p>
...
<legend>About "General"</legend>
</fieldset>
Tốt:
html
<fieldset>
<legend>About "General"</legend>
<p>
<label
>Is this section useful?:
<input name="usefulness-general" type="checkbox"
/></label>
</p>
...
</fieldset>
## Viết kịch bản
Bỏ qua thuộc tính type cho JavaScript
Trong HTML, giá trị mặc định của thuộc tính type của phần tử script
là text/javascript.
Tồi:
html
<script type="text/javascript">
...
</script>
Tốt:
html
<script>
...
</script>
Đừng ghi chú trong nôi dung của phần tử script
Cách này dành cho các trình duyệt cũ.
Tồi:
html
<script>
/*<![CDATA[*/
...
/*]]>*/
</script>
Cũng tồi:
<script>
<!--
...
// -->
</script>
Tốt:
html
<script>
...
</script>
Không sử dụng tập lệnh chèn cho phần tử script
Thuộc tính async là tốt nhất cho cả tính đơn giản và hiệu suất.
Tồi:
html
<script>
var script = document.createElement('script')
script.async = true
script.src = '//example.com/widget.js'
document.getElementsByTagName('head')[0].appendChild(script)
</script>
Tốt:
html
<script async defer src="https://example.com/widget.js"></script>
## Khác
Thụt lề một cách nhất quán
Thụt lề là quan trọng để dễ đọc.
Tồi:
html
<html>
<head>
...
</head>
<body>
...
</body>
</html>
Tốt:
html
<html>
<head>
...
</head>
<body>
...
</body>
</html>
Sử dụng đường dẫn tuyệt đối cho các liên kết nội bộ
Một đường dẫn tuyệt đối làm việc tốt hơn trên máy chủ cục bộ của bạn mà
không cần kết nối internet.
Tồi:
html
<link
rel="apple-touch-icon"
href="http://you.example.com/apple-touch-icon-precomposed.png"
/>
...
<p>
You can find more at
<a href="//you.example.com/contact.html">contact page</a>.
</p>
Tốt:
html
<link rel="apple-touch-icon" href="/apple-touch-icon-precomposed.png" />
...
<p>You can find more at <a href="/contact.html">contact page</a>.</p>
Đừng sử dụng URL tương đối cho các tài nguyên bên ngoài
Với giao thức, bạn có thể tải tài nguyên bên ngoài một cách tin cậy và an toàn.
Tồi:
html
<script src="//example.com/js/library.js">
Tốt:
html
<script src="https://example.com/js/library.js">
source: viblo