Thuộc tính HTML là gì
Thuộc tính (attribute) bổ sung thông tin cho một phần tử (element). Nó nằm bên trong thẻ (tag) mở, viết theo dạng tên, dấu bằng và giá trị trong ngoặc kép: name="value". Một phần tử có thể có bao nhiêu thuộc tính cũng được, cách nhau bằng dấu cách.
href cho link biết cần đi tới đâu, src và alt mô tả ảnh, còn type, placeholder và required cấu hình ô nhập liệu. Mỗi phần tử có bộ thuộc tính riêng, và một số thuộc tính (các thuộc tính toàn cục ở bên dưới) dùng được trên mọi phần tử.
Quy tắc cú pháp
<input type="text" name="city" value="Paris" disabled>
- Tên, dấu bằng, giá trị trong ngoặc kép. Ngoặc kép là quy ước chung; ngoặc đơn cũng được (
title='Say "hi"'là cách đặt dấu ngoặc kép vào trong một giá trị). - Tên không phân biệt hoa thường.
CLASSvàclasslà cùng một thuộc tính. Giá trị thì có phân biệt:class="Box"vàclass="box"là hai class khác nhau. - Không có dấu cách thì ngoặc kép là tùy chọn, nhưng vẫn nên dùng.
class=big boxcho phần tử classbigvà một thuộc tính thứ hai vô nghĩa tên làbox. - Thứ tự không quan trọng.
<img alt="" src="a.png">giống hệt<img src="a.png" alt="">. - Mỗi tên chỉ một lần trên một phần tử. Nếu một thuộc tính xuất hiện hai lần, trình duyệt giữ cái đầu và lặng lẽ bỏ cái thứ hai.
Thuộc tính boolean
Một số thuộc tính chỉ có bật hoặc tắt. Với những thuộc tính này, có mặt nghĩa là true, và giá trị bị bỏ qua. disabled, checked, required, readonly, hidden, multiple, autofocus và open đều hoạt động như vậy.
Nút thứ ba vẫn bị vô hiệu hóa dù giá trị ghi là false, vì trình duyệt chỉ kiểm tra xem thuộc tính có mặt hay không. Muốn tắt một thuộc tính boolean, hãy xóa nó. Trong JavaScript, button.disabled = false làm đúng việc đó.
Thuộc tính class
class đặt cho phần tử một hoặc nhiều tên để CSS và JavaScript tìm thấy nó. Nhiều phần tử có thể dùng chung một class, và một phần tử có thể có nhiều class, cách nhau bằng dấu cách:
Mỗi class thêm vào sẽ cộng quy tắc của nó lên trên. Trong CSS, class được chọn bằng dấu chấm (.card); trong JavaScript, element.classList.add('featured') và classList.remove thay đổi chúng. Class là cách thông thường để định dạng: phần lớn CSS bạn viết sẽ nhắm vào class.
Thuộc tính id
id đặt cho phần tử một tên phải duy nhất trên trang. Dùng nó khi bạn cần đúng một phần tử: đích của một link, một <label for>, hoặc document.getElementById.
Nhấn vào nhãn sẽ đưa con trỏ vào ô nhập, vì for="email" trỏ tới id="email". Link cuộn tới #pricing vì phần fragment trong href khớp với id.
class | id | |
|---|---|---|
| Bao nhiêu phần tử dùng chung được | Không giới hạn | Một (duy nhất) |
| Số giá trị trên một phần tử | Nhiều, cách nhau bằng dấu cách | Một |
| Bộ chọn CSS | .name | #name |
| Cách dùng thường gặp | Định dạng nhóm phần tử | Đích của link, nhãn, một phần tử cụ thể trong JavaScript |
Id không được chứa dấu cách. Hãy bắt đầu bằng một chữ cái để dễ dùng trong CSS: #2col không phải bộ chọn CSS hợp lệ nếu không escape.
Thuộc tính toàn cục
Các thuộc tính này dùng được trên mọi phần tử:
| Thuộc tính | Tác dụng |
|---|---|
id | Tên duy nhất của phần tử |
class | Danh sách tên class, cách nhau bằng dấu cách |
style | CSS nội tuyến, ví dụ style="color: red" |
title | Chú thích hiện ra khi rê chuột |
lang | Ngôn ngữ của nội dung, ví dụ lang="fr" |
dir | Hướng văn bản: ltr, rtl hoặc auto |
hidden | Ẩn phần tử (boolean) |
tabindex | Cho phần tử nhận focus bằng Tab, hoặc đặt thứ tự focus |
contenteditable | Cho người dùng sửa chữ của phần tử |
data-* | Dữ liệu riêng của bạn, đọc bằng JavaScript |
Thuộc tính lang có trang riêng vì nó ảnh hưởng tới trình đọc màn hình, dịch tự động và công cụ tìm kiếm.
Thuộc tính data-*
Khi cần lưu giá trị riêng trên một phần tử, hãy thêm tiền tố data- vào tên. Sau tiền tố đặt tên gì cũng được, và JavaScript đọc giá trị qua element.dataset, với dấu gạch nối được đổi sang camelCase:
data-product-id trở thành dataset.productId. Giá trị luôn trả về dạng chuỗi, nên hãy chuyển bằng Number() trước khi tính toán. CSS cũng chọn được theo chúng: [data-price="4.50"].
Lỗi thường gặp
- Viết
classhai lần.<div class="a" class="b">chỉ giữa. Đặt cả hai vào một thuộc tính:class="a b". - Dùng lại một id. Hai phần tử trùng id làm hỏng
#links, nhãn vàgetElementById, hàm này chỉ trả về phần tử đầu tiên. Dùng class cho những gì lặp lại. disabled="false"hoặcchecked="false". Thuộc tính vẫn có mặt nên vẫn bật. Hãy xóa nó.- Giá trị có dấu cách mà không có ngoặc kép.
alt=My photođặtaltthànhMy. Hãy đặt mọi giá trị trong ngoặc kép. - Tự đặt thuộc tính không có
data-.<div price="4">là HTML không hợp lệ và có thể trùng với một thuộc tính chuẩn trong tương lai. Hãy dùngdata-price.
Câu hỏi thường gặp
Thuộc tính HTML là gì?
Thuộc tính (attribute) là thông tin bổ sung được viết bên trong thẻ mở theo dạng name="value". Nó cấu hình cho phần tử: href cho biết link dẫn tới đâu, src và alt mô tả ảnh, class và id giúp CSS và JavaScript tìm thấy phần tử.
class và id trong HTML khác nhau thế nào?
Một id phải là duy nhất trên trang và xác định đúng một phần tử, dùng cho link #fragment, <label for> và getElementById. Một class có thể dùng chung cho nhiều phần tử, và một phần tử có thể có nhiều class cách nhau bằng dấu cách. Hãy dùng class để định dạng.
Làm sao thêm nhiều class cho một phần tử HTML?
Viết tất cả trong một thuộc tính class, cách nhau bằng dấu cách: <div class="card featured dark">. Viết class hai lần sẽ không có tác dụng: trình duyệt chỉ giữ cái đầu tiên.
Giá trị thuộc tính HTML có cần dấu ngoặc kép không?
Dấu ngoặc kép có thể bỏ khi giá trị không chứa dấu cách hay ký tự đặc biệt, nhưng luôn đặt trong ngoặc kép là thói quen an toàn. class=big box cho phần tử class big cộng thêm một thuộc tính riêng tên là box.
Tại sao nút của tôi vẫn bị vô hiệu hóa khi viết disabled="false"?
disabled là thuộc tính boolean: chỉ cần có mặt là mang giá trị true, bất kể giá trị ghi gì. Để bật lại phần tử, hãy xóa thuộc tính đó, hoặc đặt button.disabled = false trong JavaScript, lệnh này sẽ xóa thuộc tính.
Tôi có thể tự đặt ra thuộc tính HTML không?
Hãy dùng tiền tố data-: data-price="12" hay data-user-id="7" hợp lệ trên mọi phần tử và đọc được trong JavaScript qua element.dataset. Những tên tự đặt không có tiền tố này là HTML không hợp lệ.