Vì onClick chỉ mang lại hành vi chuột. <button> là phần tử tương tác dựng sẵn, kèm theo cả một tập hành vi mà div không có:
- Focus được bằng bàn phím (nằm trong tab order tự nhiên).
- Kích hoạt bằng
EntervàSpace— trình duyệt tự chuyển thành sự kiện click. - Role
buttontrong accessibility tree, nên screen reader đọc "nút, Lưu" thay vì đọc trơ nội dung. - Trạng thái
disabledchặn cả click lẫn focus. - Nằm trong
<form>thìtype="submit"submit form, kể cả khi nhấnEnterở ô input.
Muốn div tương đương thì phải tự làm lại tất cả:
html
<div role="button" tabindex="0" onclick="save()"
onkeydown="if (event.key === 'Enter' || event.key === ' ') save()">Save</div>Vẫn còn thiếu disabled, submit form, và hành vi mặc định theo từng nền tảng.
- Nguyên tắc: dùng phần tử gốc trước, chỉ dựng lại bằng ARIA khi thật sự không có phần tử phù hợp.
- Lý do thường gặp khiến người ta chọn
divlà "khó style" — có thể xử lý bằngall: unsethoặc reset border/background trên chính<button>.