Bạn không cần JavaScript cho việc đó
(htmhell.dev)- Khi triển khai tính năng web, sẽ có lợi hơn nếu trước tiên cân nhắc các công nghệ ít mạnh hơn theo thứ tự HTML, CSS, rồi JavaScript để giảm lỗi tải và vấn đề về khả năng truy cập
- JavaScript có thể điều khiển trực tiếp hành vi của trình duyệt, nhưng vì cần thêm tài nguyên và có khả năng phát sinh lỗi nên rất dễ loại trừ người dùng bàn phím và công nghệ hỗ trợ
- Những tính năng trước đây cần JavaScript như công tắc checkbox,
datalist,input type="color",details/summary,dialoggiờ đây phần lớn đã có thể thực hiện bằng tính năng sẵn có của HTML/CSS - Các tính năng khai báo của HTML và CSS cho phép trình duyệt đảm nhiệm hành vi native, tùy chọn môi trường người dùng và hỗ trợ khả năng truy cập, nhờ đó cung cấp mặc định tốt hơn
- Ngay cả khi cách triển khai JavaScript quen thuộc vẫn tiếp tục hoạt động, bạn vẫn nên định kỳ kiểm tra các lựa chọn thay thế HTML/CSS hiện đại, và khi thay đổi thì cần kiểm thử khả năng truy cập cùng lúc
Quy tắc đặc quyền tối thiểu
- Quy tắc đặc quyền tối thiểu là nguyên tắc phát triển web khuyên chọn ngôn ngữ ít mạnh nhất nhưng vẫn đạt được mục tiêu
- Trên web, nguyên tắc này thường được áp dụng bằng cách ưu tiên cân nhắc HTML trước CSS, và CSS trước JavaScript
- JavaScript là công nghệ đa năng nhất trong ba công nghệ, nhưng cũng đi kèm nhiều gánh nặng hơn
- Có thể bị hỏng
- Có thể tải thất bại
- Cần thêm tài nguyên để tải xuống, phân tích và thực thi
- Dễ loại trừ người dùng bàn phím và người dùng công nghệ hỗ trợ
- Khác với JavaScript mang tính mệnh lệnh, HTML và CSS hoạt động theo kiểu khai báo
- Nhà phát triển cho trình duyệt biết mình muốn gì, còn cách triển khai sẽ do trình duyệt chọn
- Trình duyệt có thể chọn cách xử lý hiệu quả hơn
- Khi trình duyệt xử lý các tính năng HTML/CSS, điều đó có thể có lợi hơn về hiệu năng, hành vi native, phản hồi theo thiết lập người dùng và khả năng truy cập
- Tuy vậy, khả năng truy cập không phải lúc nào cũng tự động được đảm bảo
Những tính năng trước đây cần JavaScript
- Các nhà sản xuất trình duyệt và người viết đặc tả đã dần chuyển những tính năng từng cần JavaScript sang CSS và HTML trong vài năm qua
- Web duy trì khả năng tương thích ngược, nên một cách triển khai đã học từ trước rất dễ ở lại trong hộp công cụ và được tái sử dụng lặp lại
- Ngay cả khi bạn biết một tính năng nào đó cần JavaScript, thỉnh thoảng vẫn nên kiểm tra xem hiện tại có còn như vậy không để tạo ra website tốt hơn
Công tắc tùy biến tạo bằng checkbox
- Công tắc tùy biến có thể được triển khai bằng checkbox mặc định và CSS thay vì
div, trình xử lýonclickvà trạng thái nội bộ - Khi đặt
<input type="checkbox">bên trong<label>, trình duyệt sẽ liên kết hai phần tử này- Nhấp vào bất kỳ đâu trên nhãn cũng sẽ bật/tắt checkbox
- Không cần trình xử lý
onclickriêng
appearance: nonedừng việc trình duyệt render control form mặc định và cho phép tự tạo kiểu- Có thể trang trí chính
inputnhư nền của công tắc - Có thể dùng
::beforelàm chấm bên trong chuyển trạng thái
- Có thể trang trí chính
- Pseudo-class
:checkedcho phép thay đổi màu nền và vị trí của::beforetheo trạng thái đã chọn - Với người dùng bàn phím, cần có chỉ báo focus
- Không nên ẩn focus bằng
outline: none :focus-visiblecó thể hiển thị vòng focus đẹp mắt chỉ khi tương tác bằng bàn phímoutline-offsetcho phép điều chỉnh viền focus ra ngoài hoặc vào trong phần tử
- Không nên ẩn focus bằng
input:focus { outline-color: transparent; }có thể làm viền trong suốt ở tình huống thông thường, nhưng trong chế độ tương phản cao sẽ lại hiển thị theo màu người dùng chọn- Có thể xem thêm về chế độ màu cưỡng bức tại forced colors explained
Tự động hoàn thành native với datalist
datalistlà tính năng gợi ý tự động tích hợp sẵn trong trình duyệt, hiển thị danh sách tùy chọn khi người dùng nhập liệu- Cấu hình rất đơn giản
- Đặt
idvà nhiềuoptiontrong phần tửdatalist - Liên kết nó với
datalisttương ứng bằng thuộc tínhlistcủainput
- Đặt
- Khi người dùng nhập, trình duyệt sẽ hiển thị dropdown và tự động lọc các tùy chọn phù hợp với nội dung nhập
- Vì đây là trường nhập liệu cơ bản, người dùng vẫn có thể nhập trực tiếp giá trị không có trong danh sách
- Sau khi chọn trường nhập, có thể duyệt danh sách bằng phím mũi tên hoặc nhấp vào biểu tượng dropdown mà trình duyệt thêm vào để xem toàn bộ tùy chọn
Bộ chọn màu mặc định của input type="color"
- Chỉ với một dòng
<input type="color">, bạn có thể dùng bộ chọn màu native của trình duyệt - Nó có thể thay thế nhiều UI canvas và slider được tạo bằng JavaScript
- Bộ chọn màu native của các trình duyệt Chromium cho phép chọn màu không chỉ trong trang mà còn ở bất kỳ đâu trên màn hình
- Vì không phải mọi người dùng đều có thể sử dụng bộ chọn màu của trình duyệt, tốt hơn là nên cung cấp thêm cách chọn màu khác, chẳng hạn như nhập văn bản thông thường
Accordion với details và summary
- Các phần tử
detailsvàsummarycung cấp accordion thu gọn/mở rộng nội dung như một tính năng mặc định của trình duyệt - Hành vi mặc định rất đơn giản
- Nội dung bên trong
details, trừsummary, sẽ bị ẩn - Khi người dùng nhấp vào
summary, phần nội dung còn lại sẽ được hiển thị
- Nội dung bên trong
- Thuộc tính
openxác định trạng thái mở ban đầu- Đây không phải giá trị cố định sau khi người dùng tương tác; nếu người dùng mở hoặc đóng thì trạng thái sẽ thay đổi
- Có thể tạo kiểu marker tam giác mặc định bằng
summary::marker- Có thể thay nội dung bằng emoji hoặc thành phần khác tương tự
- Có thể điều chỉnh màu nền, ảnh nền, cỡ chữ, v.v.
- Nhiều thuộc tính CSS sẽ không hoạt động, và việc tạo kiểu theo kiểu đặt nó ở vị trí hoàn toàn khác thì bị hạn chế
- Trên Safari cần pseudo-element
::-webkit-details-marker - Việc thay đổi nội dung marker có thể ảnh hưởng đến cách công nghệ hỗ trợ thông báo accordion, nên có thể tham khảo details/summary inconsistencies
summarycó thể nhấp được, nhưng mặc định không hiện con trỏ pointer như liên kết và cũng không trông như nút, nên cần thêm trạng thái hover và focus để thể hiện khả năng nhấp
Modal với dialog
alert(),prompt(),confirm()có thể dùng để thông báo hoặc lấy xác nhận từ người dùng, nhưng chúng chặn main thread và khó tạo kiểu theo thiết kế- Nếu tự làm dialog thì việc xử lý khả năng truy cập sẽ trở nên phức tạp
- Cần giữ focus bên trong dialog
- Cần thông báo rằng đây là modal
- Cần ngăn người dùng vô tình thoát ra ngoài
- Có thể xung đột với widget có
z-indexrất cao
- Phần tử
dialogcủa trình duyệt cung cấp dialog native - Hiện tại vẫn cần JavaScript để mở dialog
- Đã có thay đổi đang được tiến hành để mở mà không cần JavaScript, nhưng vẫn chưa được đặc tả hoặc triển khai đầy đủ
- Có thể mở dialog bằng hàm
showModal()
dialogmở trong top layer- Top layer là một lớp mới tách biệt khỏi HTML
- Các phần tử trong lớp này luôn hiển thị phía trên, bất kể
z-indexhay việc lồng các stacking context - Có thể tham khảo giải thích khái niệm tại Top layer của MDN
dialogkhông cung cấp UI đóng mặc định, nên bạn phải tự thêm UI- Khi
form method="dialog"được submit, trình duyệt sẽ đóng dialog - Nếu đặt
valuekhác nhau cho hai nút submit, có thể dùng nó như một dialog xác nhận - Trong sự kiện
close, có thể đọcdialog.returnValueđể biết giá trị nút mà người dùng đã nhấn - Dữ liệu form bổ sung có thể đọc bằng FormData
- Khi
dialog::backdroplà lớp nằm giữa dialog và phần còn lại của trang- Có thể làm tối hoặc làm mờ nền để hướng sự chú ý của người dùng vào dialog
- Vì trình duyệt tự bố trí lớp này, bạn không cần tự xử lý cuộn trang, phần tử cố định hay thay đổi kích thước trình duyệt
Những tính năng có thể làm với ít JavaScript hơn
- Còn nhiều tính năng khác có thể giảm dùng JavaScript
- Cuộn mượt native với
scroll-behavior: smooth- Nên kèm điều kiện chỉ dùng khi
prefers-reduced-motion: no preferencephù hợp
- Nên kèm điều kiện chỉ dùng khi
- Carousel native với
scroll-snap - Phần tử “in-view” với
position: sticky - Container query
- Cuộn mượt native với
- Trong tương lai cũng sẽ có thêm tính năng mới
- Animation dựa trên cuộn
- Bố cục Masonry với
grid-template-rows: masonrymà không cầnmasonry.js selectcó thể tạo kiểu hoàn toàn thông qua phần tửselectlistmới- Bộ chọn
:has()có thể giảm một nhóm mã chọn phần tử bằng JavaScript
- Có thể xem thêm nội dung liên quan trong video thuyết trình Stop Using JavaScript for That: Moving Features from JS to CSS and HTML.
- Khi thay một cách triển khai hiện có đã được kiểm chứng bằng cách mới, đặc biệt cần kiểm thử khả năng truy cập để không loại trừ bất kỳ ai
1 bình luận
Ý kiến trên Hacker News
Điểm bài viết này bỏ sót là lý do dùng JavaScript ở những chỗ như vậy là vì khả năng tương thích tốt hơn
JavaScript mới có thể được transpile, nhưng polyfill cho các tính năng CSS hay HTML còn thiếu thì khó hơn nhiều, và trong một số trường hợp là không thể. Hơn nữa, các polyfill đó rốt cuộc cũng dùng JavaScript
Ngay cả MDN cũng có nhiều cảnh báo với
appearance, thậm chíappearance: none, rằng cần kiểm thử thật kỹ. Nếu chỉ hỗ trợ trình duyệt mới nhất thì có thể ít quan trọng hơn, nhưng các phiên bản Safari cũ tồn tại lâu hơn ta tưởngdatalistkhông làm gì trên Firefox Android, và với tôi nó chỉ hiện như một ô nhập không có cả gợi ýTrình chọn màu thì hay, nhưng cực kỳ không chuẩn nên là vấn đề nghiêm trọng với phần lớn doanh nghiệp. Không chỉ nhà thiết kế phàn nàn, mà bộ phận hỗ trợ khách hàng cũng khó giúp người dùng hơn. Chromium còn cho phép lấy màu từ trang hoặc chọn màu tùy ý, nhưng Firefox Android chỉ cho khoảng cầu vồng, xám, đen trắng
Bản thân bài viết cũng thừa nhận sự không nhất quán của
detailsvàdialog. Hy vọng một ngày nào đó các trình duyệt không hỗ trợ những tính năng này, hoặc không hỗ trợ nhất quán với nhau, sẽ không còn được dùng nữa; nhưng trong thời gian tới, có lẽ những phần tử này chỉ nên dùng trong các side project nơi có thể kiểm soát hoàn toàn trình duyệt được hỗ trợKhi nhấn nút trên iPhone, trình chọn màu native thật của hệ thống sẽ hiện ra. Đó chính là control do OS cung cấp, xuất hiện trong nhiều ứng dụng, và tôi thích nó hơn hẳn so với thứ tự chế
Tôi thích web không JavaScript hơn nhiều, và nó còn ảnh hưởng đến thời lượng pin laptop ở mức vài giờ. Một số trang không tương thích với kiểu đó nên chỉ render trang trắng, hoặc phàn nàn rằng cần JavaScript để hiển thị văn bản
Ngược lại, Amazon còn có một bản sao trang thương mại điện tử không JavaScript, cho thấy ngay cả việc khổng lồ như vậy cũng có thể làm mà không cần JavaScript
dialoggiờ đã có phạm vi hỗ trợ khá sâu, và polyfill dành cho vài phần trăm người dùng Firefox hay Safari đời 2021 cũng đủ ổnNếu làm modal thì tôi rất khuyến nghị, cải thiện về khả năng truy cập là rất tốt
Ở công ty cũ chúng tôi đã chủ động thảo luận vấn đề này, và quyết định dùng triển khai bằng JS thay cho những thứ như
datalist. Đặc biệtdatalistthì đã thử, nhưng kết quả quá thiếu nhất quán nên phải bỏCuối cùng do sự không nhất quán giữa các trình duyệt, chúng tôi thậm chí đã ngừng hỗ trợ ngoài Chrome
Các ví dụ HTML có thể trông sai trên trình duyệt cũ, nhưng nội dung thực vẫn còn đó. JS thì đơn giản là không có gì cả. Nó phá vỡ hoàn toàn khả năng truy cập
Với HTML, trình đọc màn hình ít nhất còn có thể đọc được, nhưng nội dung tạo bằng JS lại ngăn điều đó. Khi JS không thể chạy JS, không polyfill hay JS nào khác có thể cứu JS. Nó phải “hoạt động” ngay từ đầu thì mới ổn cho khả năng truy cập, và trong trường hợp đó thì luận điểm ban đầu trở nên vô nghĩa
Tôi không biết
Datalist, nhưng ít nhất trên Chrome Android có vẻ nó không hoạt động đúngCác tùy chọn có hiện trong vùng bàn phím nơi gợi ý tự động hoàn thành xuất hiện: https://imgur.com/a/Ecb4503
Đây là lần đầu tôi thấy cách đó trong control biểu mẫu của UI web di động, và ngoài trường hợp ứng dụng tự động điền mật khẩu dùng cùng không gian này thì tôi chưa từng thấy
Không tệ. Nó tốt hơn nhiều so với việc cuộn một dropdown JS tùy biến làm vụng về, nhưng tôi không chắc người dùng phổ thông sẽ tự tìm ra cách dùng nó. Vì vậy trên di động, tôi cho là về cơ bản không có hy vọng
Trên Firefox Android thì hoàn toàn không được hỗ trợ: https://caniuse.com/?search=datalist
datalistđược sao?Tham khảo: https://adrianroselli.com/2023/06/under-engineered-comboboxe...
JavaScript được chuẩn hóa khá tốt, còn HTML và CSS thì tương đối kém hơn
autocomplete="off"vào phần tửinputcó làm hành vi thay đổi khôngDù sao thì để dùng
datalistcho đúng cũng cần làm vậy. Nếu không, lịch sử các giá trị đã chọn sẽ bị thêm vào danh sách dropdown. Tôi quan sát thấy điều này trên ChromiumNgoài ra, trong một số tình huống như khi có giá trị mặc định được đặt,
datalistvẫn cần JS. Tôi đã ghi lại các cách vòng tránh và ghi chú về hành vi đặc thù theo trình duyệt trong mã của website LibreOffice mới: https://git.libreoffice.org/infra/libreofficeorg/+/835a5cc59...Tin tốt là một lập trình viên Firefox dự định xem xét cải thiện hành vi của
datalist, nên có thể danh sách sẽ hiển thị chỉ với một cú nhấpTrường hợp của tôi thì các tùy chọn hiện ở vùng phía trên bàn phím, nơi thường hiển thị gợi ý từ
datalisthiện bên trong bàn phím là thay đổi mới xuất hiện trong vài tháng gần đâyTrước đây nó “bình thường”, nhưng có vẻ ai đó muốn thay đổi chỉ để thay đổi
Dùng cuộn mượt gốc bằng
scroll-behavior: smooththì làm ơn chỉ nên dùng có giới hạnThực ra trong hầu hết trường hợp sử dụng, đây không phải ý hay và thường có tác dụng phụ không mong muốn
Người ta nói có thể tạo carousel gốc bằng
scroll-snap, nhưng carousel vẫn là một ý tưởng tệ nên phạm vi sử dụng chính đáng củascroll-snapcực kỳ hạn chếCác trang dùng hoạt ảnh dựa trên cuộn thường sẽ tốt hơn nếu bỏ nó đi
Cuộn mượt là ví dụ điển hình. API gốc cho phép người dùng dừng bất cứ lúc nào. Phần lớn cách triển khai bằng JS thì giật lag khủng khiếp và khiến người dùng khổ sở
Bạn hoàn toàn có thể chỉ trích lựa chọn thiết kế, nhưng nếu không đưa ra lý do thực tế cho câu “carousel vẫn tệ” thì khó mà mong người khác lắng nghe
Nhưng trang chủ Amazon dùng carousel rất nổi bật, và tôi biết Amazon A/B test các biến thể trang chủ rất quyết liệt. Vậy có khả năng carousel cho kết quả tốt trong thử nghiệm, và khá khó để nói nó thật sự “tệ” theo một nghĩa phổ quát, khách quan nào đó
Thường thì ngay sau khi triển khai anchor kiểu mục lục, ít nhất tôi cũng thêm nó vào
Thật ngạc nhiên là đến năm 2023 mà chúng ta vẫn còn tranh cãi về form và UX thông thường khi người dùng nhập dữ liệu
Chỉ cần nhìn các bình luận liên quan đến
datalistvà bộ chọn màu là thấy, tôi không hiểu vì sao đây vẫn chưa phải một lĩnh vực đã được giải quyếtTrước đây từng có nỗ lực giải quyết một lần bằng XForms, nhưng nó không được triển khai trong trình duyệt
Thay vào đó, gần như mọi framework component CSS/JS đều tự cung cấp một bộ phần tử form hạn chế với ngữ nghĩa khác nhau
Có vẻ chúng ta sẽ phải tự triển khai các control UI cơ bản suốt đời
Việc “chưa được giải quyết” chỉ trông như vậy vì một số người có nỗi ám ảnh kỳ lạ với việc tránh JavaScript nên cố nhồi nhét các phương án thay thế nửa vời
Nếu bạn chịu dừng ở công nghệ cơ bản và nhàm chán thì nó đã được giải quyết rồi. Nhưng nếu cứ khăng khăng giải lại bằng React, rồi lại giải bằng React hooks, rồi giải lại vô tận, thì nó thành chưa được giải quyết
Ý định không phải thứ có thể được chương trình xác định, nên trong một số tình huống không thể có các tính năng hay ho
Ở form phức tạp gần nhất tôi làm, tôi đã phải khiến sự kiện click kích hoạt việc submit form khá trực tiếp để trình duyệt cho phép
Tôi chưa từng yêu cầu cách gửi màu sắc qua trang web
Nếu dùng
detailsthay cho JavaScript, Ctrl+F có thể tìm kiếm bên trong nó và mở nó raAccordion bằng JavaScript thì không mở được như vậy
hidden="until-found"thì accordion dựa trên JS hoặc nội dung ẩn khác cũng có thể làm được, nhưng tiếc là hiện giờ chỉ có trên trình duyệt dựa trên Chromium: https://developer.chrome.com/articles/hidden-until-found/Tôi đồng ý với phần lớn, nhưng chưa dùng
dialogđủ nhiều nên không có ý kiến, còndatalistthì tôi cho là không phải lựa chọn hợp lệ nếu không phải công cụ nội bộNó xấu, những gì làm được bị hạn chế và cũng không tùy biến style được. Đây là vấn đề của phần lớn lập luận “cứ dùng chức năng tích hợp sẵn”.
date pickercũng vậyKhông chỉ giá trị mặc định không tốt, mà dù muốn đổi cũng không đổi được. Khi bạn đụng một trong vô số bức tường về thay đổi style hoặc hành vi, chẳng hạn muốn tuần bắt đầu từ thứ Hai cũng không được. Khi đó lựa chọn thường chỉ còn là thư viện thay thế hoàn toàn dùng JS
Tôi ủng hộ dùng lựa chọn nhẹ hơn và cũng đồng ý với phân tầng HTML > CSS > JS, nhưng để có UI đẹp và đủ chức năng mong muốn, đôi khi JS là câu trả lời duy nhất
datalistcó thể hữu íchNó hoạt động tốt cho đến thời điểm bạn muốn hiển thị các tùy chọn không bắt đầu đúng bằng nội dung đã nhập. Ví dụ nếu trong input có lỗi chính tả thì tùy chọn sẽ không hiện
Không có cách nào buộc hiển thị tất cả mục, nên cuối cùng tôi chọn danh sách có thứ tự
Khi tôi bắt đầu làm web, thay đổi có thể mất tới 10 năm. IE6 cũng níu chân tất cả chúng ta, nhưng khi đó w3c cũng khá yếu. Giờ thì thay đổi nhanh hơn
Năm sau, việc tùy biến style cho
datalistcó thể sẽ khả dụng không cần tiền tố trên ba trình duyệt lớn, nhưng nếu bị khóa vào giải pháp JS tùy chỉnh thì doanh nghiệp sẽ không trả chi phí xây dựng lạiNếu mở rộng tính năng gốc bằng JS, khi hỗ trợ đã đủ tốt, bạn có thể gỡ JS với chi phí thấp. Ở đâu control gốc chấp nhận được thì dùng ngay bây giờ, còn JS áp dụng như polyfill
input[type=date], phần lớn tùy chỉnh thường được đề xuất thực ra tốt hơn là không do lập trình viên kiểm soátLịch phù hợp để hiển thị nên phụ thuộc vào locale. Nền tảng của người dùng đã có khả năng thiết lập và hiển thị theo cách mà người dùng nhiều khả năng sử dụng hiệu quả nhất
Bộ chọn ngày của nền tảng tốt hơn thứ kỳ quặc tự làm
Nút chuyển đổi đó thật sự rất hay
Có vẻ các lập trình viên meme frontend đang nổi giận với bài viết này, nhưng ý chính thì đúng. Tại sao lại làm quá nhiều trang web ngớ ngẩn bằng JS như vậy? Nếu mọi người chỉ tuân theo một chuẩn như HTML thì mọi thứ có thể nhất quán, và những thứ như khả năng truy cập hay dịch thuật cũng có thể được hỗ trợ dễ dàng
Dạo này vào các trang web thì vì mọi thứ đều được tải động trong một trang duy nhất nên ngay cả nút quay lại cũng không hoạt động
Và vẫn còn vấn đề “chờ mọi người cập nhật”: sau khi một tính năng mới được đưa vào, có thể mất nhiều năm cho đến khi nó được hỗ trợ đủ rộng để trở nên hữu ích
Nhìn chung tôi đồng ý rằng có rất nhiều cách triển khai tệ và các cơ chế JavaScript phức tạp. Có khá nhiều giải pháp chuẩn hóa để duy trì chức năng quay lại ngay cả với nội dung động, và theo tôi biết các web framework phổ biến hỗ trợ mặc định
Tôi đã đọc các bình luận hàng đầu nhưng không thấy mấy thứ có thể gọi là giận dữ, chỉ thấy mọi người nêu những điểm hợp lý về hỗ trợ trình duyệt
Đây đúng là một bước đi đúng hướng, nhưng CSS cũng là một công cụ khác mà những “artistes” theo cách nói của Philip Greenspun lạm dụng để tạo ra các trang khó đọc
Tôi không phải người ủng hộ Gemini, nhưng về cơ bản mọi khía cạnh của layout và typography nên được trả lại cho trình duyệt và do người dùng kiểm soát. Các nhà thiết kế đã liên tục chứng minh rằng không thể tin tưởng giao việc đó cho họ
Tôi thích tinh thần của nó, công tắc cũng đẹp, và
summary/detailsđôi khi cũng hữu íchNhưng phần tử
datalistgần như không phải lựa chọn thực tế cho các mục đích vượt ra ngoài đồ chơi hay prototypeNhững thứ “không cần JS, chỉ CSS là đủ” mà tôi thích là sidebar drawer và carousel
Thư viện component TailwindCSS tên DaisyUI cũng có các component dùng được ngay
https://daisyui.com/components/drawer/
https://daisyui.com/components/carousel/
Drawer và các nội dung khác xuất hiện trên trang cần được thông báo, và bên cạnh đối tượng điều khiển phải có trạng thái
aria-expandedĐây vẫn là một câu hỏi thật sự. Có thể có cách, hoặc các lập trình viên collectively cho rằng nó không quan trọng. Nhưng các kiểm toán viên có lẽ sẽ không đồng ý
Có vẻ tác giả của các framework này đánh giá quá thấp lượng kiểm thử cần thiết để khiến chúng thực sự hoạt động trên nhiều trình duyệt
Khi có nhiều component như vậy, lại còn hỗ trợ theme, thì cũng khó đảm bảo có thể sửa mà không phá các theme và ứng dụng hiện có
components/carousel/là lần đầu tôi thấyRốt cuộc snap là gì và hoạt động thế nào? Màn hình của tôi không phản hồi với thao tác nhấn bằng ngón tay
Tôi không nghĩ một kiểu tương tác chưa được biết đến là cơ sở tốt để khuyến nghị một thư viện phần tử UI