Skip to content

CButton

Nút hành động chuẩn của framework. Bọc a-button của Ant Design Vue, thêm bộ biến thể bám design token nên màu và trạng thái luôn khớp theme, kể cả chế độ tối.

Dùng khi: người dùng cần thực hiện một hành động — lưu, xoá, mở drawer, tải xuống, gửi duyệt.

Không dùng khi: chỉ điều hướng sang trang khác và không có tác dụng phụ — dùng variant="link" hoặc thẻ liên kết thật để trình duyệt mở tab mới, bookmark được.

vue
<!-- Đăng ký toàn cục qua layer, không cần import -->
<CButton variant="primary">Lưu</CButton>

Biến thể

Chọn theo vai trò của hành động, không theo màu muốn nhìn thấy.

Biến thểDùng choSố lượng trong một khu vực
primaryHành động chính của màn hìnhMột
secondary / outlineHành động phụ ngang hàng nhauVài cái
ghostHành động phụ trong toolbar, nền mờVài cái
dangerHành động phá huỷ: xoá, huỷ đơn, thu hồiMột, tách khỏi nhóm khác
linkĐiều hướng trong ngữ cảnh văn bảnKhông giới hạn
textHành động nhẹ nhất: Huỷ, Đóng, Bỏ quaVài cái

Cỡ nút

sm cho toolbar và ô hành động trong bảng; md là mặc định; lg cho nút chính ở cuối form dài. block giãn nút hết chiều ngang phần tử cha — hay dùng trong form đăng nhập và khung hẹp.

Kèm icon

Icon đặt trong slot #icon để antd canh khoảng cách với nhãn; đặt vào slot mặc định sẽ lệch. Nút chỉ có icon phảiaria-label, nếu không người dùng trình đọc màn hình không biết nút làm gì.

Trạng thái

loadingdisabled là thuộc tính gốc của antd, CButton chuyển tiếp nguyên vẹn cùng mọi thuộc tính khác (html-type, href, title…). Trong lúc gửi dữ liệu thì bật loading thay vì tự khoá bằng disabled — antd đã chặn click sẵn, và người dùng thấy được là hệ thống đang xử lý.

Nhóm hành động

Thứ tự đọc từ trái sang phải là thứ tự tăng dần mức độ cam kết: hành động rút lui (text) đứng trước, hành động chính (primary) đứng cuối cùng bên phải.

API

Props

TênKiểuMặc địnhMô tả
variant"primary" | "secondary" | "outline" | "ghost" | "danger" | "link" | "text"'primary'Kiểu nút: primary là hành động chính của màn hình, danger cho hành động phá huỷ.
size"md" | "sm" | "lg"'md'Cỡ nút; `sm` dùng cho toolbar và trong bảng.
blockbooleanfalseGiãn hết chiều ngang của phần tử cha.

Slot

TênProps của slotMô tả
#defaultanyNhãn nút.
#iconanyIcon đặt trước nhãn (khuyến nghị

Giao diện

Biến thểNềnChữ
primary--tasco-gradient-primary#fff
secondary, outline--tasco-color-surface, viền --tasco-color-border-strong--tasco-color-primary
ghost--tasco-color-primary-soft--tasco-color-primary
danger--tasco-gradient-danger#fff
link, texttrong suốt--tasco-color-primary, --tasco-color-text
BiếnSángTối Tương phản
--tasco-color-primary#203368#7090dc12.10:1 / 5.21:1
--tasco-color-primary-hover#2f4b8f#94ade68.32:1 / 7.28:1
--tasco-color-primary-active#182544#35549e15.14:1 / 2.26:1
--tasco-color-primary-soft#eef3fb#1a27401.11:1 / 1.09:1

Cần chỉnh khoảng cách hay bo góc: ghi đè class BEM c-btn, c-btn--<variant>, c-btn--<size>, c-btn--block. Không hardcode mã màu — xem Viết CSS trong dự án.

Khả năng tiếp cận

  • Phần tử render ra là <button> thật: focus được bằng Tab, kích hoạt bằng Enter/Space.
  • Nút chỉ có icon bắt buộc có aria-label mô tả hành động.
  • Nhãn nói rõ hành động ("Xoá đơn hàng") thay vì chung chung ("OK") — nhãn còn được đọc lên khi người dùng duyệt danh sách nút.
  • Đừng dùng màu làm kênh thông tin duy nhất: hành động phá huỷ nên có cả nhãn nói rõ lẫn danger.

Lưu ý

  • Một nhóm hành động chỉ nên có một nút primary; nhiều nút primary làm mất trọng tâm.
  • Hành động không thể hoàn tác thì hỏi lại trước khi chạy — xem useConfirm.
  • Chặn quyền bằng v-can thay vì tự viết v-if rải rác: v-can để ẩn, v-can:disable để khoá.
  • Nút gửi form đặt html-type="submit" nếu muốn Enter trong ô nhập cũng gửi được.

Liên quan