- Cách tiếp cận (L)ots of (L)ittle ht(M)l page(s) thay thế tương tác bên trong trang dựa trên JavaScript bằng việc di chuyển giữa nhiều trang HTML nhỏ
- Tương tác được cấu thành bằng điều hướng giữa các trang HTML, được cải thiện trong môi trường hiện đại bằng CSS view transitions, và chỉ thêm một chút JavaScript khi cần
- Menu của blog không phải là UI mở rộng bằng JavaScript, mà hoạt động bằng cách đi theo liên kết
<a href="/menu/"> để chuyển tới một trang dành riêng cho menu
- Việc đóng menu về cơ bản cũng là một liên kết đến
/, nhưng nếu có document.referrer thì JavaScript sẽ chạy history.back() để không làm tích thêm mục mở/đóng menu vào lịch sử duyệt web
- Khi dựa vào điều hướng liên kết, tức tính năng mặc định của trình duyệt, thì nó vẫn hoạt động trên thiết bị cũ, trình duyệt cũ và cả môi trường tắt JavaScript; đồng thời, càng giữ kích thước trang nhỏ thì tương tác càng nhanh và vững chắc
Cách triển khai menu và kết quả thiết kế
-
Cả mở lẫn đóng đều xử lý bằng liên kết
-
Phân biệt truy cập trực tiếp và di chuyển nội bộ
- Dùng
document.referrer để phân biệt người dùng đến trang menu thông qua di chuyển bên trong blog hay truy cập trực tiếp như nhập URL
- Nếu là di chuyển nội bộ thì có thể chạy
history.back() một cách có ý nghĩa, còn nếu là truy cập trực tiếp thì sẽ chuyển tới /
-
Cách tiếp cận định hình thiết kế
- Đây là một lời giải trông có vẻ đơn giản, nhưng cần đồng thời cân nhắc bản chất của điều hướng, tương tác trải dài qua nhiều trang và cách giữ kích thước trang luôn nhỏ
- Cần giữ kích thước trang nhỏ để tương tác luôn nhanh, vững chắc và trực quan
- Nếu nhìn trình duyệt không phải là một runtime để thực thi, tải về, biên dịch rồi hiển thị mã tùy ý, mà là công cụ để duyệt tài liệu, thì có thể tạo ra những website đơn giản hơn rất nhiều so với những gì các công cụ thường dẫn dắt
1 bình luận
Ý kiến trên Lobste.rs
Bình thường tôi luôn thích cách phản hồi bằng HTML mọi lúc, nhưng riêng phần menu thì tôi chưa chắc
Tôi muốn nghe ý kiến của chuyên gia về khả năng truy cập xem giữa phần tử có thể bật/tắt và việc chuyển hẳn sang một trang khác để mở menu thì cái nào tốt hơn
Ở đây Popover API có vẻ là giải pháp tốt hơn. Vì nó có thể cung cấp menu không cần JavaScript mà không phải thực hiện một vòng yêu cầu đầy đủ
Còn lại thì tôi đồng ý rằng phần lớn trường hợp không cần phải sợ chuyển trang. Giờ đây ngay cả kiểu điều hướng như SPA trên site SSR/tĩnh cũng hầu như luôn không khó để làm cho có khả năng truy cập
Chuyển trang sẽ đặt lại vị trí hiện tại, nhưng nếu mục đích là mở menu và thực sự đi tới menu thì hai cách này khá giống nhau
Tuy vậy, giống như cả những người không dùng screen reader, việc mở menu mà lại chuyển sang trang mới vẫn thấy khá kỳ
Ví dụ nếu hỏi nên tạo trạng thái mở/đóng của một component bằng hai trang HTML khác nhau hay dùng thẻ
<details>, thì dĩ nhiên là cách sauTương tự, dùng Popover API cũng hoàn toàn ổn. Ý chính là tránh để tương tác trong trang phải cần JavaScript, chứ không phải khăng khăng dùng điều hướng HTML nhiều trang
Cách được nêu ra tải menu động bằng JavaScript và
onclick, nên phát sinh độ trễ và thêm một điểm dữ liệu nữa vào hành trình người dùngThay vào đó có thể đặt menu ngay trong từng trang và dùng phần tử
<details>hoặc selector CSS:focus-withinđể hiện hoặc ẩn nóhttps://nlnet.nl hoạt động theo cách này
Cách tiếp cận được mô tả thực ra không hoạt động đúng. Nếu tắt JavaScript, mở một bài blog rồi mở và đóng menu, bạn sẽ bị đưa về trang chủ (
/) thay vì bài gốcMuốn đặt liên kết đúng cho nút đóng thì backend bắt buộc phải render menu động, khi đó cách này mới đứng vững
Cá nhân tôi thích Popover API hơn nếu có thể. Như vậy có thể render mọi thứ tĩnh hoàn toàn mà không cần backend
https://blog.jim-nielsen.com/, nhưng khi bật JavaScript thì có vẻ trình xử lýonclicksẽ chặn điều hướng Nó đưa người dùng tới trang khác với nơi ghi tronghref, nên đây là trải nghiệm người dùng tệ. Tôi thường rê chuột lên link để kiểm tra đích đến, nên cảm giác bị đánh lừa như vậy không dễ chịu chút nàoMột mặt thì tôi thật sự rất thích. Chỉ với HTML cũng có thể làm được nhiều việc mượt hơn và đơn giản hơn JavaScript
Mặt khác, cách này có vẻ chủ yếu hợp trên di động. Nếu là trang desktop thì tôi sẽ mong menu luôn hiện hoặc bật ra, chứ không phải yêu cầu chuyển trang
Vậy chẳng lẽ giờ lại cần hai bộ trang cho từng trình duyệt sao
Ma sát tăng gấp đôi
JavaScript gần như là thứ phát sinh ngoài dự tính
Tôi thấy lạ khi cảm giác cách này khó hoặc phức tạp hơn bất kỳ giải pháp JavaScript nào. Đây rõ ràng là cách đơn giản và dễ nhất để làm website
Tôi không thích kiểu điều hướng này, nhưng lại thích hiệu ứng chuyển cảnh, và trước giờ không biết là làm được như vậy
Tôi cũng đã áp dụng nó cho site của mình dùng static generator C++ tự viết và thư viện template: https://vittorioromeo.com/
Tôi nghĩ nó đặc biệt hợp với trình chuyển đổi giao diện tối/sáng
Trên desktop, nhấn “menu” mà lại bị chuyển sang trang khác thì không dễ chịu. Việc tải lại toàn bộ trang xảy ra nên khác kỳ vọng và khá khó chịu
Với tôi thì nó làm đứt mạch đọc và mạch suy nghĩ. Khi nhấn liên kết sang site khác, tôi có cảm giác như rời khỏi căn phòng này để sang chỗ khác nên chấp nhận bỏ lại phòng cũ; nhưng nếu điều đó xảy ra với menu thì giống như đi ra cửa rồi thấy mình đang ở hẳn một căn phòng khác, nên rất khó chịu
Ý tưởng thì thành thật mà nói là hay, nhưng cảm giác sử dụng thực tế lại không tốt
Và tôi cũng không biết đang nói tới hiệu ứng chuyển cảnh nào. Ở môi trường của tôi, nhấn nút Menu chỉ đơn giản là tải trang Menu như bình thường
Có thể cũng không chạy trên các trình duyệt khác, nhưng trình duyệt chính của tôi là Librewolf, một bản fork của Firefox
Trên Chromium thì có thấy hiệu ứng chuyển cảnh
Ý tưởng thú vị, nhưng tôi tự hỏi trên desktop nó sẽ hoạt động thế nào
Menu kiểu nguyên trang có vẻ hơi quá tay, nên cách thay cả trang trông không thật sự phù hợp
Không thấy nhắc tới preload để giảm độ trễ khi tải trang menu
Tôi muốn biết nếu dùng cái này thì sẽ hoạt động tốt tới đâu
Khi đó trình duyệt cũng không cần quay về máy chủ để xác thực trước khi hiển thị, nên sẽ cho cảm giác rất nhanh
Vài năm trước tôi có xem một game văn bản do @misty làm, dùng các liên kết đơn giản như tương tác để tạo ra ảo giác về lựa chọn
HTML đơn giản cùng phần kể chuyện mạnh đã để lại ấn tượng sâu sắc với tôi