Menu

Thuộc tính HTML: cú pháp, class, id, data-* và boolean

Thuộc tính bổ sung thông tin cho một phần tử HTML: link dẫn tới đâu, ảnh hiển thị gì, class CSS nào được áp dụng. Tìm hiểu cú pháp, các thuộc tính toàn cục mà mọi phần tử đều nhận, class và id, thuộc tính boolean và thuộc tính data-*.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

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. CLASS và class là 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 box cho phần tử class big và 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.

classid
Bao nhiêu phần tử dùng chung đượcKhông giới hạnMột (duy nhất)
Số giá trị trên một phần tửNhiều, cách nhau bằng dấu cáchMộ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ínhTác dụng
idTên duy nhất của phần tử
classDanh sách tên class, cách nhau bằng dấu cách
styleCSS nội tuyến, ví dụ style="color: red"
titleChú thích hiện ra khi rê chuột
langNgôn ngữ của nội dung, ví dụ lang="fr"
dirHướng văn bản: ltr, rtl hoặc auto
hiddenẨn phần tử (boolean)
tabindexCho phần tử nhận focus bằng Tab, hoặc đặt thứ tự focus
contenteditableCho 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 class hai 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ặc checked="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 đặt alt thành My. 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ùng data-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ệ.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu