Bộ tạo biểu mẫu CSS

Kết quả

Biểu mẫu là phần được người dùng tương tác nhiều nhất trên hầu hết các trang web, nhưng cũng là phần ít được trau chuốt nhất ở nhiều trang. Bộ tạo này xuất ra CSS cho một biểu mẫu hoàn chỉnh có kiểu dáng: lưới biểu mẫu tương thích nhiều kích thước màn hình, các cặp nhãn và trường nhập liệu, vùng văn bản, danh sách chọn và trạng thái tiêu điểm dễ thấy, tất cả theo một phong cách thống nhất. Đặt màu nhấn, bán kính bo góc và khoảng cách, rồi sao chép biểu định kiểu. CSS giữ nguyên ngữ nghĩa gốc của biểu mẫu, nhờ đó việc xác thực, thao tác bằng bàn phím và trình đọc màn hình đều hoạt động tốt.

Cách sử dụng bộ tạo

  1. 1

    Đặt màu nhấn

    Màu nhấn quyết định vòng tiêu điểm và màu viền của từng trường.

  2. 2

    Chọn bán kính bo góc

    Bán kính áp dụng cho trường nhập liệu, vùng văn bản và danh sách chọn để mọi trường có chung hình dạng.

  3. 3

    Đặt khoảng cách

    Khoảng cách kiểm soát không gian dọc giữa các trường trong lưới biểu mẫu.

  4. 4

    Sao chép CSS

    Một biểu định kiểu hoàn chỉnh bạn có thể dán và điều chỉnh mà không cần đụng đến HTML của mình.

Biểu mẫu cơ sở

<form class="form">
  <label class="field">
    <span class="field-label">Email</span>
    <input type="email" required>
    <span class="field-error">Please enter a valid email.</span>
  </label>

  <label class="field">
    <span class="field-label">Password</span>
    <input type="password" minlength="8" required>
  </label>

  <button type="submit" class="button">Sign up</button>
</form>
.field {
  display: block;
  margin-bottom: 1.25rem;
}
.field-label {
  display: block;
  font-weight: 500;
  margin-bottom: .25rem;
}
.field input {
  width: 100%;
  padding: .5rem .75rem;
  font: inherit;
  border: 1px solid #d1d5db;
  border-radius: 6px;
  background: #fff;
  transition: border-color 120ms, box-shadow 120ms;
}
.field input:focus-visible {
  outline: none;
  border-color: #2563eb;
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.15);
}
.field input:invalid:not(:placeholder-shown) {
  border-color: #dc2626;
}
.field-error { display: none; color: #dc2626; font-size: .875rem; margin-top: .25rem; }
.field input:invalid:not(:placeholder-shown) ~ .field-error { display: block; }

Bốn phong cách phổ biến

Phong cách Là gì Phù hợp nhất cho
Có viền Đường viền quanh trường nhập liệu, nền trong suốt Biểu mẫu trên máy tính để bàn, bố cục dày đặc
Gạch chân Chỉ có đường viền phía dưới Giao diện tối giản / dành cho mục đích biên tập
Nền được tô Nền xám, không viền Giao diện lấy cảm hứng từ Material Design
Nhãn nổi Nhãn nằm bên trong và di chuyển lên trên khi được lấy nét hoặc khi nhập giá trị Ưu tiên thiết bị di động, trang đích

Nhãn nổi đẹp nhất, nhưng cần thêm mã đánh dấu hoặc JavaScript để phát hiện trạng thái trống. Kiểu có viền lại là phương án phổ biến và phù hợp nhất với hầu hết trường hợp.

Danh sách kiểm tra khả năng truy cập

  • Nhãn hiển thị rõ ràng cho từng trường nhập liệu. Không bao giờ dùng placeholder làm nhãn duy nhất – nó sẽ biến mất khi được lấy nét và không đạt yêu cầu về độ tương phản.
  • <label for> hoặc thẻ <label> bao quanh. Cả hai đều hợp lệ; cách bao quanh dễ thực hiện hơn một chút.
  • Chỉ báo lấy nét: Không bao giờ dùng outline: none mà không có phương án thay thế; người dùng bàn phím rất cần nó.
  • Thông báo lỗi: liên kết chúng qua aria-describedby trên trường nhập liệu. Không chỉ dùng màu sắc để đánh dấu lỗi; hãy kèm theo một thông điệp văn bản hoặc biểu tượng.
  • Các trường bắt buộc: dùng thuộc tính required; thêm dấu sao (*) vào nhãn cho người dùng nhìn thấy được.
  • Loại trường nhập: dùng type="email", type="tel", type="url", type="number"; bàn phím di động sẽ tự thích ứng.
  • Các thuộc tính autocomplete: autocomplete="email", autocomplete="current-password", v.v., giúp người dùng tiết kiệm đáng kể thời gian nhập liệu.

Các trạng thái xác thực gốc

CSS sử dụng các lớp giả để kiểm tra tính hợp lệ của biểu mẫu:

  • :required / :optional
  • :valid / :invalid
  • :in-range / :out-of-range (dùng cho các giá trị số có giá trị tối thiểu và tối đa)
  • :placeholder-shown (trống, placeholder hiển thị)
  • :user-invalid (không hợp lệ người dùng đã tương tác, phù hợp với các kiểu lỗi)

Lớp giả :user-invalid là cách hiệu quả nhất để hiển thị lỗi chỉ sau khi người dùng thực hiện thao tác, giúp tránh các đường viền đỏ xuất hiện trước khi tương tác diễn ra. Tính năng này đã được triển khai trên tất cả các phiên bản chính vào khoảng năm 2023.

Trạng thái bị vô hiệu hóa

.field input:disabled {
  background: #f3f4f6;
  color: #9ca3af;
  cursor: not-allowed;
}

Các trường nhập liệu bị vô hiệu hóa không thể được lấy nét hay gửi đi. Nếu bạn muốn chúng vẫn có thể được lấy nét để phục vụ trình đọc màn hình, hãy dùng readonly – biểu mẫu vẫn gửi giá trị nhưng người dùng không thể chỉnh sửa nó.

Câu hỏi thường gặp

Không. Placeholder sẽ biến mất ngay khi người dùng bắt đầu gõ, do đó không thể dùng làm nhãn. Ngoài ra, văn bản placeholder thường có độ tương phản thấp và không đáp ứng yêu cầu WCAG. Hãy dùng một nhãn hiển thị rõ ràng kết hợp với một placeholder tùy chọn để gợi ý về định dạng.

:invalid áp dụng ngay lập tức cho các trường bắt buộc trống, nên hãy sử dụng :user-invalid (có khả năng xử lý tương tác) hoặc kết hợp :invalid:not(:placeholder-shown) như một giải pháp tạm thời trên các trình duyệt cũ.

Thay đổi giá trị của appearance: none: loại bỏ mũi tên mặc định và thêm mũi tên tùy chỉnh bằng cách sử dụng hình ảnh nền hoặc đoạn văn bản bao quanh kèm mũi tên tạo bằng pseudo-element. Các danh sách tùy chọn bên trong vẫn giữ giao diện theo thiết kế hệ điều hành và không thể tùy chỉnh bằng CSS.

Cả hai đều cần được thực hiện. Kiểm tra hợp lệ của HTML (required, type, pattern) dùng để xử lý các trường hợp đơn giản mà không cần JavaScript; JavaScript thì chịu trách nhiệm xử lý các quy tắc phức tạp (như độ mạnh của mật khẩu, sự phụ thuộc giữa các trường dữ liệu). Luôn thực hiện kiểm tra hợp lệ trên phía máy chủ – việc kiểm tra từ phía khách hàng chỉ nhằm cải thiện trải nghiệm người dùng chứ không phải đảm bảo an ninh.

Công cụ liên quan