+2

Modal và Dialog: Sự khác biệt và cách sử dụng hiệu quả trong thiết kế UI

Trong thiết kế giao diện người dùng (UI), thuật ngữ "modal" và "dialog" thường được sử dụng thay thế cho nhau. Tuy nhiên, chúng mang những ý nghĩa riêng biệt cần được phân biệt rõ ràng để sử dụng hiệu quả.

Modal

  • Định nghĩa: Modal là một thành phần UI tạo ra một trạng thái tạm thời, gián đoạn trong ứng dụng, yêu cầu người dùng tương tác với nó trước khi họ có thể quay lại nội dung hoặc ứng dụng bên dưới.
  • Đặc điểm chính: Chặn tương tác với phần còn lại của giao diện cho đến khi nó bị đóng hoặc được tương tác. Nó buộc người dùng phải tập trung vào nội dung modal và thực hiện hành động (như xác nhận quyết định hoặc điền vào biểu mẫu).
  • Các trường hợp sử dụng phổ biến:
    • Lời nhắc xác nhận (ví dụ: "Bạn có chắc chắn muốn xóa cái này không?")
    • Cảnh báo hoặc thông báo lỗi
    • Hộp thoại xác thực (ví dụ: màn hình đăng nhập)
    • Lựa chọn các tùy chọn cần thiết trước khi tiếp tục (ví dụ: "Lưu thay đổi?")

Ví dụ: Hộp thoại "Lưu thay đổi?" trong nhiều ứng dụng, nơi bạn phải nhấp vào "Có", "Không" hoặc "Hủy" trước khi tiếp tục với các tác vụ khác.

Dialog

  • Định nghĩa: Dialog là một thuật ngữ rộng hơn cho bất kỳ thành phần UI nào cho phép tương tác với người dùng, thường liên quan đến việc trao đổi thông tin hoặc đưa ra quyết định. Nó có thể là modal hoặc không.
  • Đặc điểm chính: Không nhất thiết phải chặn tương tác với phần còn lại của giao diện. Một dialog có thể là modal, nhưng nó cũng có thể là non-modal, nghĩa là người dùng vẫn có thể tương tác với các phần khác của ứng dụng trong khi dialog đang mở.
  • Các trường hợp sử dụng phổ biến:
    • Yêu cầu người dùng nhập liệu (ví dụ: hộp thoại tìm kiếm hoặc cài đặt)
    • Hiển thị thông tin (ví dụ: thông báo lỗi, cảnh báo)
    • Biểu mẫu phức tạp hoặc quy trình nhiều bước

Ví dụ: Một hộp thoại trong trình xử lý văn bản yêu cầu các thông số cụ thể (ví dụ: cỡ phông chữ hoặc định dạng) nhưng vẫn cho phép bạn tương tác với các thành phần khác trong ứng dụng nếu đó là hộp thoại non-modal.

Sự khác biệt chính giữa Modal và Dialog

1. Chặn tương tác

  • Modal chặn tương tác với giao diện chính cho đến khi nó bị đóng.
  • Dialog có thể chặn hoặc không chặn tương tác; điều này phụ thuộc vào việc đó là dialog modal hay non-modal.

2. Trường hợp sử dụng

  • Modal được sử dụng cho các quyết định quan trọng, cảnh báo hoặc hành động mà bạn cần người dùng tập trung vào nội dung modal trước khi tiếp tục.
  • Dialog có thể được sử dụng cho nhiều loại tương tác, bao gồm thông tin, gửi biểu mẫu hoặc chọn tùy chọn, có hoặc không chặn giao diện chính.

Giới thiệu về phần tử dialog trong HTML

Phần tử dialog trong HTML cung cấp một cách đơn giản và hiệu quả để tạo modal và hộp thoại. Phần tử này khá linh hoạt, cho phép bạn tùy chỉnh cả nội dung và kiểu dáng, đồng thời cũng cung cấp các lợi ích về khả năng truy cập ngay lập tức. Hãy cùng khám phá cách thức hoạt động của nó và cách bạn có thể sử dụng nó để tạo modal hiệu quả trên các trang web của mình.

1. Cấu trúc cơ bản

Phần tử dialog rất đơn giản: nó chỉ là một thẻ HTML với một thuộc tính tùy chọn và một số phương thức JavaScript liên quan. Dưới đây là một ví dụ sử dụng cơ bản:

<dialog>
  <!-- Dialog Content -->
</dialog>

Theo mặc định, một dialog bị ẩn. Để hiển thị nó, bạn có thể thêm thuộc tính open, nhưng nên sử dụng các phương thức JavaScript show() và showModal() để kiểm soát việc mở dialog:

<dialog open>
  <span>You can see me now!</span>
</dialog>

Tuy nhiên, không nên sử dụng trực tiếp thuộc tính open, vì nó tạo ra một dialog non-modal. Thay vào đó, bạn nên sử dụng các phương thức JavaScript:

const dialog = document.querySelector("dialog");
dialog.show(); // Opens a non-modal dialog
dialog.showModal(); // Opens a modal dialog

Phương thức showModal() mở một dialog modal, trong khi show() mở một dialog non-modal (một loại cửa sổ bật lên).

2. Đóng Dialog

Để đóng dialog, bạn có thể sử dụng phương thức close(). Ngoài ra, nếu dialog là modal, nó có thể được đóng bằng cách nhấn phím Esc:

const dialog = document.querySelector("dialog");
dialog.close(); // Closes the dialog

3. Tính năng tự động hỗ trợ khả năng truy cập

Một ưu điểm lớn của phần tử dialog là nó tự động xử lý các tính năng hỗ trợ khả năng truy cập. Nó áp dụng các thuộc tính aria chính xác và quản lý tiêu điểm, giúp việc tạo các ứng dụng dễ truy cập hơn nhiều.

4. Định dạng phần tử dialog

Mặc dù phần tử dialog đi kèm với một số kiểu mặc định được áp dụng bởi trình duyệt, nhưng việc tùy chỉnh nó rất dễ dàng. Dưới đây là một ví dụ về dialog được định dạng bằng cách sử dụng một số thuộc tính CSS cơ bản:

dialog {
  z-index: 10;
  margin-top: 10px;
  background: green;
  border: none;
  border-radius: 1rem;
}

Ngoài ra, bạn có thể định dạng nền của modal bằng cách sử dụng phần tử giả ::backdrop. Để sửa đổi backdrop (khu vực phía sau modal), bạn có thể áp dụng CSS sau:

dialog::backdrop {
  background-color: rgba(250, 100, 250, 0.25); /* Semi-transparent purple */
}

Điều này giúp dễ dàng tạo các modal tùy chỉnh phù hợp với thiết kế trang web của bạn.

Các tính năng nâng cao của phần tử dialog

1. Biểu mẫu bên trong Dialog

Bạn có thể sử dụng biểu mẫu bên trong dialog. Nếu bạn đặt thuộc tính method="dialog" trên biểu mẫu, dialog sẽ tự động đóng khi biểu mẫu được gửi, mà không thực sự gửi dữ liệu biểu mẫu đến máy chủ. Điều thú vị nhất là, khi mở lại dialog, dữ liệu biểu mẫu sẽ vẫn còn đó.

<dialog>
  <form method="dialog">
    <input type="text" />
    <button type="submit">Submit</button>
  </form>
</dialog>

2. Nút Hủy

Bạn có thể thêm nút hủy trong biểu mẫu của mình để đóng dialog mà không gửi biểu mẫu, bằng cách sử dụng thuộc tính formmethod="dialog":

<dialog>
  <form>
    <input type="text" />
    <button formmethod="dialog" type="submit">Cancel</button>
    <button type="submit">Submit</button>
  </form>
</dialog>

3. Đóng khi nhấp vào bên ngoài

Mặc dù phần tử dialog không có hành vi này một cách tự nhiên, nhưng việc thêm trình lắng nghe sự kiện nhấp chuột để đóng dialog khi người dùng nhấp vào bên ngoài nó rất dễ dàng. Dưới đây là một ví dụ đơn giản để thực hiện điều này:

dialog.addEventListener("click", e => {
  const dialogDimensions = dialog.getBoundingClientRect();
  if (
    e.clientX < dialogDimensions.left ||
    e.clientX > dialogDimensions.right ||
    e.clientY < dialogDimensions.top ||
    e.clientY > dialogDimensions.bottom
  ) {
    dialog.close();
  }
});

Giải pháp này cho phép dialog được đóng khi nhấp vào bên ngoài khu vực modal, đây là hành vi phổ biến đối với nhiều modal.

Kết luận

Phần tử dialog trong HTML cung cấp một cách đơn giản nhưng mạnh mẽ để triển khai modal và hộp thoại, với trọng tâm mạnh mẽ vào khả năng truy cập. Nó giúp dễ dàng tạo các modal tùy chỉnh mà không cần thư viện bên ngoài hoặc cấu hình phức tạp. Bằng cách sử dụng các phương thức như show(), showModal() và close(), bạn có thể dễ dàng kiểm soát hành vi của dialog.

Ngoài ra, khả năng định dạng dialog và backdrop của nó bằng CSS làm cho nó có thể tùy chỉnh hơn nữa. Chỉ với một vài tính năng bổ sung như đóng modal khi nhấp vào bên ngoài hoặc tích hợp biểu mẫu, phần tử dialog trở thành một công cụ linh hoạt và hữu ích để tạo các thành phần tương tác trên trang web của bạn.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí