Các phương pháp hay nhất về biểu mẫu đăng nhập

Sử dụng các tính năng của trình duyệt đa nền tảng để tạo biểu mẫu đăng nhập an toàn, dễ sử dụng và hỗ trợ tiếp cận.

Nếu người dùng cần đăng nhập vào trang web của bạn, thì thiết kế biểu mẫu đăng nhập tốt là điều quan trọng. Điều này đặc biệt đúng với những người có kết nối kém, dùng thiết bị di động, đang vội hoặc đang căng thẳng. Biểu mẫu đăng nhập được thiết kế kém sẽ có tỷ lệ thoát cao. Mỗi lần bị từ chối có thể đồng nghĩa với việc bạn mất đi một người dùng không hài lòng, chứ không chỉ là bỏ lỡ cơ hội đăng nhập.

Sau đây là ví dụ về một biểu mẫu đăng nhập đơn giản minh hoạ tất cả các phương pháp hay nhất:

Danh sách kiểm tra

Sử dụng HTML có ý nghĩa

Sử dụng các phần tử được tạo cho công việc: <form>, <label><button>. Những thuộc tính này cho phép chức năng trình duyệt tích hợp sẵn, cải thiện khả năng hỗ trợ tiếp cận và thêm ý nghĩa vào mã đánh dấu của bạn.

Sử dụng <form>

Bạn có thể muốn gói các đầu vào trong một <div> và xử lý việc gửi dữ liệu đầu vào hoàn toàn bằng JavaScript. Thông thường, bạn nên sử dụng một phần tử <form> thông thường. Điều này giúp các trình đọc màn hình và thiết bị hỗ trợ khác truy cập vào trang web của bạn, cho phép một loạt các tính năng tích hợp của trình duyệt, giúp bạn dễ dàng tạo tính năng đăng nhập cơ bản cho các trình duyệt cũ và vẫn có thể hoạt động ngay cả khi JavaScript gặp lỗi.

Sử dụng <label>

Để gắn nhãn cho một đầu vào, hãy dùng <label>!

<label for="email">Email</label>
<input id="email" …>

Có 2 lý do:

  • Khi bạn nhấn hoặc nhấp vào một nhãn, tiêu điểm sẽ di chuyển đến nội dung đầu vào của nhãn đó. Liên kết nhãn với một dữ liệu đầu vào bằng cách sử dụng thuộc tính for của nhãn với name hoặc id của dữ liệu đầu vào.
  • Trình đọc màn hình sẽ thông báo văn bản nhãn khi nhãn hoặc dữ liệu đầu vào của nhãn được lấy tiêu điểm.

Đừng sử dụng phần giữ chỗ làm nhãn đầu vào. Mọi người có thể quên mục đích của thông tin đầu vào sau khi bắt đầu nhập văn bản, đặc biệt là nếu họ bị phân tâm ("Tôi đang nhập địa chỉ email, số điện thoại hay mã nhận dạng tài khoản?"). Có rất nhiều vấn đề tiềm ẩn khác với phần giữ chỗ: hãy xem bài viết Không sử dụng thuộc tính phần giữ chỗPhần giữ chỗ trong các trường biểu mẫu gây hại nếu bạn chưa tin.

Tốt nhất là bạn nên đặt nhãn ở phía trên các thành phần đầu vào. Điều này giúp thiết kế nhất quán trên thiết bị di động và máy tính, đồng thời theo nghiên cứu của AI của Google, giúp người dùng quét nhanh hơn. Bạn sẽ nhận được nhãn và dữ liệu đầu vào có chiều rộng đầy đủ, đồng thời không cần điều chỉnh chiều rộng của nhãn và dữ liệu đầu vào cho phù hợp với văn bản nhãn.

Ảnh chụp màn hình cho thấy vị trí nhãn đầu vào của biểu mẫu trên thiết bị di động: bên cạnh đầu vào và phía trên đầu vào.
Chiều rộng của nhãn và dữ liệu đầu vào bị giới hạn khi cả hai đều nằm trên cùng một dòng.

Mở bản minh hoạ label-position trên thiết bị di động để tự mình xem.

Sử dụng <button>

Sử dụng <button> cho các nút! Các phần tử nút cung cấp hành vi hỗ trợ tiếp cận và chức năng gửi biểu mẫu tích hợp sẵn, đồng thời bạn có thể dễ dàng tạo kiểu cho các phần tử này. Không có lý do gì để sử dụng <div> hoặc một số phần tử khác giả làm nút.

Đảm bảo nút gửi cho biết chức năng của nút. Ví dụ: Tạo tài khoản hoặc Đăng nhập, chứ không phải Gửi hoặc Bắt đầu.

Đảm bảo gửi biểu mẫu thành công

Giúp trình quản lý mật khẩu hiểu rằng một biểu mẫu đã được gửi. Có hai cách để thực hiện việc này:

  • Chuyển đến một trang khác.
  • Mô phỏng thao tác điều hướng bằng History.pushState() hoặc History.replaceState() và xoá biểu mẫu mật khẩu.

Với yêu cầu XMLHttpRequest hoặc fetch, hãy đảm bảo rằng trạng thái đăng nhập thành công được báo cáo trong phản hồi và được xử lý bằng cách đưa biểu mẫu ra khỏi DOM cũng như cho người dùng biết trạng thái thành công.

Hãy cân nhắc việc tắt nút Đăng nhập sau khi người dùng nhấn hoặc nhấp vào nút này. Nhiều người dùng nhấp vào nút nhiều lần ngay cả trên những trang web nhanh và có tính phản hồi cao. Điều này làm chậm các lượt tương tác và làm tăng tải cho máy chủ.

Ngược lại, đừng tắt tính năng gửi biểu mẫu trong khi chờ người dùng nhập dữ liệu. Ví dụ: đừng tắt nút Đăng nhập nếu người dùng chưa nhập mã PIN của khách hàng. Người dùng có thể bỏ lỡ một nội dung nào đó trong biểu mẫu, sau đó thử nhấn nhiều lần vào nút Đăng nhập (đã tắt) và cho rằng nút này không hoạt động. Ít nhất, nếu bạn phải tắt tính năng gửi biểu mẫu, hãy giải thích cho người dùng biết thông tin còn thiếu khi họ nhấp vào nút bị tắt.

Không nhập dữ liệu trùng lặp

Một số trang web buộc người dùng nhập email hoặc mật khẩu hai lần. Điều đó có thể giảm lỗi cho một số người dùng, nhưng lại gây thêm việc cho tất cả người dùng và làm tăng tỷ lệ bỏ ngang. Việc yêu cầu người dùng nhập hai lần cũng không có ý nghĩa khi trình duyệt tự động điền địa chỉ email hoặc đề xuất mật khẩu mạnh. Bạn nên cho phép người dùng xác nhận địa chỉ email của họ (dù sao thì bạn cũng cần làm việc đó) và giúp họ dễ dàng đặt lại mật khẩu nếu cần.

Khai thác tối đa các thuộc tính của phần tử

Đây mới là lúc điều kỳ diệu thực sự xảy ra! Trình duyệt có nhiều tính năng hữu ích được tích hợp sẵn, sử dụng các thuộc tính của phần tử đầu vào.

Giữ mật khẩu ở chế độ riêng tư nhưng cho phép người dùng xem nếu họ muốn

Đầu vào mật khẩu phải có type="password" để ẩn văn bản mật khẩu và giúp trình duyệt hiểu rằng đầu vào này dành cho mật khẩu. (Xin lưu ý rằng các trình duyệt sử dụng nhiều kỹ thuật để hiểu vai trò đầu vào và quyết định có nên lưu mật khẩu hay không.)

Bạn nên thêm nút bật/tắt Hiện mật khẩu để cho phép người dùng kiểm tra văn bản mà họ đã nhập và đừng quên thêm đường liên kết Quên mật khẩu. Hãy xem phần Bật chế độ hiển thị mật khẩu.

Biểu mẫu đăng nhập bằng Google có biểu tượng Hiện mật khẩu.
Nhập mật khẩu từ biểu mẫu đăng nhập bằng Google: có biểu tượng Hiện mật khẩu và đường liên kết Quên mật khẩu.

Cung cấp cho người dùng thiết bị di động bàn phím phù hợp

Sử dụng <input type="email"> để cung cấp cho người dùng thiết bị di động một bàn phím phù hợp và bật tính năng xác thực địa chỉ email cơ bản được tích hợp sẵn của trình duyệt… không cần JavaScript!

Nếu bạn cần sử dụng số điện thoại thay vì địa chỉ email, thì <input type="tel"> sẽ bật bàn phím điện thoại trên thiết bị di động. Bạn cũng có thể sử dụng thuộc tính inputmode khi cần: inputmode="numeric" là lựa chọn lý tưởng cho số PIN. Mọi điều bạn từng muốn biết về inputmode có nhiều thông tin chi tiết hơn.

Ngăn bàn phím di động che khuất nút Đăng nhập

Rất tiếc, nếu bạn không cẩn thận, bàn phím trên thiết bị di động có thể che biểu mẫu của bạn hoặc tệ hơn là che một phần nút Đăng nhập. Người dùng có thể bỏ cuộc trước khi nhận ra điều gì đã xảy ra.

Hai ảnh chụp màn hình của một biểu mẫu đăng nhập trên điện thoại Android: một ảnh cho thấy nút Gửi bị bàn phím điện thoại che khuất.
Nút Đăng nhập: lúc xuất hiện, lúc biến mất.

Nếu có thể, hãy tránh điều này bằng cách chỉ hiển thị các trường nhập email (hoặc điện thoại) và mật khẩu, cũng như nút Đăng nhập ở đầu trang đăng nhập. Đặt nội dung khác bên dưới.

Biểu mẫu đăng nhập trên điện thoại Android: nút Đăng nhập không bị bàn phím điện thoại che khuất.
Bàn phím không che khuất nút Đăng nhập.

Kiểm thử trên nhiều thiết bị

Bạn cần kiểm thử trên nhiều thiết bị cho đối tượng mục tiêu của mình và điều chỉnh cho phù hợp. BrowserStack cho phép kiểm thử miễn phí cho các dự án nguồn mở trên nhiều thiết bị thực và trình duyệt.

Ảnh chụp màn hình biểu mẫu đăng nhập trên iPhone 7, 8 và 11. Trên iPhone 7 và 8, nút Đăng nhập bị bàn phím điện thoại che khuất, nhưng trên iPhone 11 thì không
Nút Đăng nhập: bị che khuất trên iPhone 7 và 8, nhưng không bị che khuất trên iPhone 11.

Cân nhắc sử dụng hai trang

Một số trang web (kể cả Amazon và eBay) tránh vấn đề này bằng cách yêu cầu email (hoặc số điện thoại) và mật khẩu trên hai trang. Phương pháp này cũng giúp đơn giản hoá trải nghiệm: người dùng chỉ cần thực hiện một việc tại một thời điểm.

Biểu mẫu đăng nhập trên trang web của Amazon: email/số điện thoại và mật khẩu trên hai &quot;trang&quot; riêng biệt.
Đăng nhập hai bước: email hoặc số điện thoại, sau đó là mật khẩu.

Lý tưởng nhất là bạn nên triển khai việc này bằng một <form>. Sử dụng JavaScript để ban đầu chỉ hiển thị đầu vào email, sau đó ẩn đầu vào này và hiển thị đầu vào mật khẩu. Nếu bạn phải buộc người dùng chuyển đến một trang mới giữa lúc họ nhập email và mật khẩu, thì biểu mẫu trên trang thứ hai phải có một phần tử đầu vào ẩn có giá trị email để giúp trình quản lý mật khẩu lưu trữ giá trị chính xác. Kiểu biểu mẫu mật khẩu mà Chromium hiểu cung cấp một ví dụ về mã.

Giúp người dùng tránh phải nhập lại dữ liệu

Bạn có thể giúp trình duyệt lưu trữ dữ liệu chính xác và tự động điền thông tin đầu vào, nhờ đó người dùng không cần phải nhớ để nhập giá trị email và mật khẩu. Điều này đặc biệt quan trọng trên thiết bị di động và rất cần thiết đối với các trường nhập email, vốn có tỷ lệ bỏ ngang cao.

Có hai phần trong việc này:

  1. Các thuộc tính autocomplete, name, idtype giúp trình duyệt hiểu được vai trò của dữ liệu đầu vào để lưu trữ dữ liệu có thể dùng cho tính năng tự động điền sau này. Để cho phép lưu trữ dữ liệu cho tính năng điền sẵn, các trình duyệt hiện đại cũng yêu cầu các thành phần đầu vào phải có giá trị name hoặc id ổn định (không được tạo ngẫu nhiên trên mỗi lần tải trang hoặc triển khai trang web) và nằm trong một <form> có nút submit.

  2. Thuộc tính autocomplete giúp trình duyệt tự động điền chính xác các dữ liệu đầu vào bằng dữ liệu đã lưu trữ.

Đối với dữ liệu đầu vào email, hãy sử dụng autocomplete="username"username được trình quản lý mật khẩu nhận dạng trong các trình duyệt hiện đại – ngay cả khi bạn nên sử dụng type="email" và có thể muốn sử dụng id="email"name="email".

Đối với dữ liệu đầu vào mật khẩu, hãy sử dụng các giá trị autocompleteid thích hợp để giúp trình duyệt phân biệt giữa mật khẩu mới và mật khẩu hiện tại.

Sử dụng autocomplete="new-password"id="new-password" cho mật khẩu mới

  • Sử dụng autocomplete="new-password"id="new-password" để nhập mật khẩu trong biểu mẫu đăng ký hoặc mật khẩu mới trong biểu mẫu thay đổi mật khẩu.

Sử dụng autocomplete="current-password"id="current-password" cho mật khẩu hiện có

  • Sử dụng autocomplete="current-password"id="current-password" cho dữ liệu đầu vào mật khẩu trong biểu mẫu đăng nhập hoặc dữ liệu đầu vào cho mật khẩu cũ của người dùng trong biểu mẫu thay đổi mật khẩu. Thao tác này cho trình duyệt biết rằng bạn muốn trình duyệt sử dụng mật khẩu hiện tại mà trình duyệt đã lưu trữ cho trang web.

Đối với biểu mẫu đăng ký:

<input type="password" autocomplete="new-password" id="new-password" …>

Đối với hoạt động đăng nhập:

<input type="password" autocomplete="current-password" id="current-password" …>

Hỗ trợ trình quản lý mật khẩu

Các trình duyệt khác nhau xử lý tính năng tự động điền email và đề xuất mật khẩu theo cách hơi khác nhau, nhưng hiệu ứng thì gần như giống nhau. Ví dụ: trên Safari 11 trở lên trên máy tính, trình quản lý mật khẩu sẽ xuất hiện, sau đó hệ thống xác thực bằng sinh trắc học (vân tay hoặc nhận dạng khuôn mặt) sẽ được dùng nếu có.

Ảnh chụp màn hình của 3 giai đoạn trong quy trình đăng nhập trên Safari trên máy tính: trình quản lý mật khẩu, xác thực bằng sinh trắc học, tự động điền.
Đăng nhập bằng tính năng tự động hoàn thành – không cần nhập văn bản!

Chrome trên máy tính hiển thị các đề xuất về email, trình quản lý mật khẩu và tự động điền mật khẩu.

Ảnh chụp màn hình của 4 giai đoạn trong quy trình đăng nhập trong Chrome trên máy tính: hoàn tất email, đề xuất email, trình quản lý mật khẩu, tự động điền khi chọn.
Quy trình đăng nhập tự động hoàn tất trong Chrome 84.

Hệ thống mật khẩu và tự động điền của trình duyệt không đơn giản. Các thuật toán để đoán, lưu trữ và hiển thị giá trị không được chuẩn hoá và khác nhau tuỳ theo từng nền tảng. Ví dụ: theo Hidde de Vries chỉ ra: "Trình quản lý mật khẩu của Firefox bổ sung cho phương pháp phỏng đoán bằng một hệ thống công thức".

Tự động điền: Những điều nhà phát triển web nên biết nhưng không biết có nhiều thông tin hơn về cách sử dụng nameautocomplete. Quy cách HTML liệt kê tất cả 59 giá trị có thể có.

Cho phép trình duyệt đề xuất mật khẩu mạnh

Các trình duyệt hiện đại sử dụng thông tin phỏng đoán để quyết định thời điểm hiển thị giao diện người dùng trình quản lý mật khẩu và đề xuất mật khẩu mạnh.

Sau đây là cách Safari thực hiện trên máy tính.

Trình quản lý mật khẩu của Firefox trên máy tính.
Quy trình đề xuất mật khẩu trong Safari.

(Safari đã có tính năng đề xuất mật khẩu mạnh và duy nhất từ phiên bản 12.0.)

Trình tạo mật khẩu tích hợp trong trình duyệt có nghĩa là người dùng và nhà phát triển không cần phải tìm hiểu xem "mật khẩu mạnh" là gì. Vì trình duyệt có thể lưu trữ mật khẩu một cách an toàn và tự động điền mật khẩu khi cần, nên người dùng không cần phải ghi nhớ hoặc nhập mật khẩu. Việc khuyến khích người dùng tận dụng trình tạo mật khẩu tích hợp sẵn của trình duyệt cũng có nghĩa là họ có nhiều khả năng sử dụng mật khẩu mạnh, duy nhất trên trang web của bạn và ít có khả năng sử dụng lại mật khẩu có thể bị xâm nhập ở nơi khác.

Giúp người dùng tránh vô tình bỏ lỡ thông tin nhập

Thêm thuộc tính required vào cả trường email và mật khẩu. Các trình duyệt hiện đại sẽ tự động nhắc và đặt tiêu điểm cho dữ liệu bị thiếu. Không cần JavaScript!

Firefox và Chrome dành cho máy tính cho Android hiển thị lời nhắc &quot;Vui lòng điền vào trường này&quot; cho dữ liệu bị thiếu.
Nhắc nhở và tập trung vào dữ liệu bị thiếu trên Firefox cho máy tính (phiên bản 76) và Chrome cho Android (phiên bản 83).

Thiết kế cho ngón tay và ngón cái

Kích thước trình duyệt mặc định cho hầu hết mọi thứ liên quan đến các phần tử đầu vào và nút đều quá nhỏ, đặc biệt là trên thiết bị di động. Điều này có vẻ hiển nhiên, nhưng đây là một vấn đề thường gặp với biểu mẫu đăng nhập trên nhiều trang web.

Đảm bảo các nút và thành phần đầu vào có kích thước đủ lớn

Kích thước và khoảng đệm mặc định cho các nút và thành phần đầu vào quá nhỏ trên máy tính và thậm chí còn nhỏ hơn trên thiết bị di động.

Biểu mẫu chưa được tạo kiểu trong Chrome dành cho máy tính và Chrome dành cho Android.

Theo hướng dẫn về khả năng tiếp cận của Android, kích thước mục tiêu đề xuất cho các đối tượng trên màn hình cảm ứng là 7–10 mm. Nguyên tắc về giao diện của Apple đề xuất kích thước 48x48 px và W3C đề xuất ít nhất là 44x44 pixel CSS. Trên cơ sở đó, hãy thêm (ít nhất) khoảng 15 px khoảng đệm vào các phần tử đầu vào và nút cho thiết bị di động, cũng như khoảng 10 px trên máy tính. Hãy thử tính năng này trên một thiết bị di động thực và bằng ngón tay hoặc ngón cái thực. Bạn phải có thể thoải mái nhấn vào từng nút và thao tác nhập.

Các mục tiêu nhấn có kích thước không phù hợp. Thử nghiệm Lighthouse có thể giúp bạn tự động hoá quy trình phát hiện các phần tử đầu vào quá nhỏ.

Thiết kế để dùng ngón tay cái

Tìm kiếm mục tiêu cảm ứng và bạn sẽ thấy rất nhiều hình ảnh về ngón trỏ. Tuy nhiên, trong thực tế, nhiều người dùng ngón tay cái để tương tác với điện thoại. Ngón cái lớn hơn ngón trỏ và khả năng kiểm soát kém chính xác hơn. Đây là lý do chính đáng để có các đích chạm có kích thước phù hợp.

Tăng kích thước văn bản

Giống như kích thước và khoảng đệm, kích thước phông chữ mặc định của trình duyệt cho các phần tử đầu vào và nút quá nhỏ, đặc biệt là trên thiết bị di động.

Biểu mẫu chưa được tạo kiểu trong Chrome trên máy tính và trên Android.
Kiểu mặc định trên máy tính và thiết bị di động: văn bản nhập quá nhỏ nên nhiều người dùng không đọc được.

Các trình duyệt trên nhiều nền tảng có kích thước phông chữ khác nhau, vì vậy, rất khó để chỉ định một kích thước phông chữ cụ thể hoạt động tốt ở mọi nơi. Một cuộc khảo sát nhanh về các trang web phổ biến cho thấy kích thước từ 13 đến 16 pixel trên máy tính: kích thước vật lý tương ứng là kích thước tối thiểu phù hợp cho văn bản trên thiết bị di động.

Điều này có nghĩa là bạn cần sử dụng kích thước pixel lớn hơn trên thiết bị di động: 16px trên Chrome dành cho máy tính rất dễ đọc, nhưng ngay cả khi có thị lực tốt, bạn cũng khó đọc được văn bản 16px trên Chrome dành cho Android. Bạn có thể đặt các kích thước pixel phông chữ khác nhau cho các kích thước khung hiển thị khác nhau bằng cách sử dụng truy vấn nội dung nghe nhìn. 20px là kích thước phù hợp trên thiết bị di động, nhưng bạn nên thử nghiệm kích thước này với bạn bè hoặc đồng nghiệp có thị lực kém.

Thử nghiệm Tài liệu không sử dụng cỡ chữ dễ đọc của Lighthouse có thể giúp bạn tự động hoá quy trình phát hiện văn bản quá nhỏ.

Cung cấp đủ khoảng cách giữa các đầu vào

Thêm đủ khoảng lề để các thành phần đầu vào hoạt động tốt dưới dạng mục tiêu chạm. Nói cách khác, hãy nhắm đến khoảng cách lề bằng chiều rộng của một ngón tay.

Đảm bảo rằng thông tin bạn nhập hiện rõ ràng

Kiểu đường viền mặc định cho các thành phần đầu vào khiến người dùng khó nhìn thấy. Chúng gần như không xuất hiện trên một số nền tảng, chẳng hạn như Chrome cho Android.

Ngoài khoảng đệm, hãy thêm một đường viền: trên nền trắng, quy tắc chung nên áp dụng là sử dụng #ccc hoặc màu tối hơn.

Biểu mẫu có kiểu trong Chrome trên Android.
Văn bản dễ đọc, đường viền đầu vào hiển thị rõ ràng, khoảng đệm và lề đầy đủ.

Sử dụng các tính năng trình duyệt tích hợp sẵn để cảnh báo về các giá trị đầu vào không hợp lệ

Các trình duyệt có các tính năng tích hợp sẵn để thực hiện quy trình xác thực biểu mẫu cơ bản cho các đầu vào có thuộc tính type. Trình duyệt sẽ cảnh báo khi bạn gửi biểu mẫu có giá trị không hợp lệ và đặt tiêu điểm vào đầu vào có vấn đề.

Một biểu mẫu đăng nhập trong Chrome trên máy tính cho thấy lời nhắc của trình duyệt và tiêu điểm cho giá trị email không hợp lệ.
Xác thực cơ bản được trình duyệt tích hợp sẵn.

Bạn có thể sử dụng bộ chọn CSS :invalid để làm nổi bật dữ liệu không hợp lệ. Sử dụng :not(:placeholder-shown) để tránh chọn các đầu vào không có nội dung.

input[type=email]:not(:placeholder-shown):invalid {
  color: red;
  outline-color: red;
}

Hãy thử nhiều cách làm nổi bật các thành phần đầu vào có giá trị không hợp lệ.

Sử dụng JavaScript khi cần

Bật/tắt chế độ hiển thị mật khẩu

Bạn nên thêm nút bật/tắt Hiện mật khẩu để cho phép người dùng kiểm tra văn bản mà họ đã nhập. Khả năng sử dụng bị ảnh hưởng khi người dùng không thấy văn bản mà họ đã nhập. Hiện tại, không có cách nào tích hợp sẵn để thực hiện việc này, mặc dù chúng tôi có kế hoạch triển khai. Bạn cần sử dụng JavaScript.

Biểu mẫu đăng nhập bằng Google cho thấy nút bật/tắt Hiển thị mật khẩu và đường liên kết Quên mật khẩu.
Biểu mẫu đăng nhập bằng Google: có nút bật/tắt Hiện mật khẩu và đường liên kết Quên mật khẩu.

Đoạn mã sau đây sử dụng một nút văn bản để thêm chức năng Hiện mật khẩu.

HTML:

<section>
  <label for="password">Password</label>
  <button id="toggle-password" type="button" aria-label="Show password as plain text. Warning: this will display your password on the screen.">Show password</button>
  <input id="password" name="password" type="password" autocomplete="current-password" required>
</section>

Dưới đây là CSS để nút trông giống như văn bản thuần tuý:

button#toggle-password {
  background: none;
  border: none;
  cursor: pointer;
  /* Media query isn't shown here. */
  font-size: var(--mobile-font-size);
  font-weight: 300;
  padding: 0;
  /* Display at the top right of the container */
  position: absolute;
  top: 0;
  right: 0;
}

Và JavaScript để hiện mật khẩu:

const passwordInput = document.getElementById('password');
const togglePasswordButton = document.getElementById('toggle-password');

togglePasswordButton.addEventListener('click', togglePassword);

function togglePassword() {
  if (passwordInput.type === 'password') {
    passwordInput.type = 'text';
    togglePasswordButton.textContent = 'Hide password';
    togglePasswordButton.setAttribute('aria-label',
      'Hide password.');
  } else {
    passwordInput.type = 'password';
    togglePasswordButton.textContent = 'Show password';
    togglePasswordButton.setAttribute('aria-label',
      'Show password as plain text. ' +
      'Warning: this will display your password on the screen.');
  }
}

Sau đây là kết quả cuối cùng:

Ảnh chụp màn hình biểu mẫu đăng nhập có &quot;nút&quot; Hiển thị mật khẩu, trong Safari trên máy Mac và trên iPhone 7.
Biểu mẫu đăng nhập có "nút" văn bản Hiện mật khẩu, trong Safari trên máy Mac và iPhone 7.

Giúp người dùng truy cập được vào các trường nhập mật khẩu

Sử dụng aria-describedby để vạch ra các quy tắc về mật khẩu bằng cách cung cấp mã nhận dạng của phần tử mô tả các ràng buộc. Trình đọc màn hình cung cấp văn bản nhãn, loại dữ liệu đầu vào (mật khẩu), sau đó là nội dung mô tả.

<input type="password" aria-describedby="password-constraints" …>
<div id="password-constraints">Eight or more characters with a mix of letters, numbers and symbols.</div>

Khi bạn thêm chức năng Hiện mật khẩu, hãy nhớ thêm một aria-label để cảnh báo rằng mật khẩu sẽ xuất hiện. Nếu không, người dùng có thể vô tình để lộ mật khẩu.

<button id="toggle-password"
        aria-label="Show password as plain text.
                    Warning: this will display your password on the screen.">
  Show password
</button>

Bạn có thể xem cả hai tính năng ARIA đang hoạt động trong bản minh hoạ sau:

Tạo biểu mẫu hỗ trợ tiếp cận có thêm nhiều mẹo giúp biểu mẫu hỗ trợ tiếp cận.

Xác thực theo thời gian thực và trước khi gửi

Các phần tử và thuộc tính biểu mẫu HTML có các tính năng tích hợp để xác thực cơ bản, nhưng bạn cũng nên sử dụng JavaScript để xác thực mạnh mẽ hơn trong khi người dùng nhập dữ liệu và khi họ cố gắng gửi biểu mẫu.

Bước 5 của codelab biểu mẫu đăng nhập sử dụng API Xác thực ràng buộc (được hỗ trợ rộng rãi) để thêm quy trình xác thực tuỳ chỉnh bằng cách sử dụng giao diện người dùng trình duyệt tích hợp sẵn để đặt tiêu điểm và hiển thị lời nhắc.

Tìm hiểu thêm: Sử dụng JavaScript để xác thực theo thời gian thực phức tạp hơn.

Số liệu phân tích và RUM

"Bạn không thể cải thiện những gì bạn không đo lường được" là một câu nói đặc biệt đúng với biểu mẫu đăng ký và đăng nhập. Bạn cần đặt mục tiêu, đo lường mức độ thành công, cải thiện trang web và lặp lại quy trình này.

Thử nghiệm khả năng sử dụng chiết khấu có thể hữu ích khi thử các thay đổi, nhưng bạn sẽ cần dữ liệu thực tế để thực sự hiểu được trải nghiệm của người dùng với biểu mẫu đăng ký và đăng nhập của bạn:

  • Số liệu phân tích về trang: số lượt xem trang đăng ký và đăng nhập, tỷ lệ thoát và số lượt thoát.
  • Phân tích mức độ tương tác: phễu mục tiêu (người dùng bỏ ngang ở đâu trong quy trình đăng nhập hoặc đăng ký?) và sự kiện (người dùng thực hiện những hành động nào khi tương tác với biểu mẫu của bạn?)
  • Hiệu suất trang web: các chỉ số tập trung vào người dùng (biểu mẫu đăng ký và đăng nhập của bạn có bị chậm vì lý do nào đó không và nếu có thì nguyên nhân là gì?).

Bạn cũng nên cân nhắc triển khai thử nghiệm A/B để thử các phương pháp đăng ký và đăng nhập khác nhau, cũng như phát hành theo giai đoạn để xác thực các thay đổi trên một nhóm nhỏ người dùng trước khi phát hành cho tất cả người dùng.

Nguyên tắc chung

Giao diện người dùng và trải nghiệm người dùng được thiết kế hợp lý có thể giảm tỷ lệ bỏ dở biểu mẫu đăng nhập:

  • Đừng bắt người dùng phải tìm kiếm nút đăng nhập! Đặt đường liên kết đến biểu mẫu đăng nhập ở đầu trang, sử dụng từ ngữ dễ hiểu như Đăng nhập, Tạo tài khoản hoặc Đăng ký.
  • Hãy tập trung! Biểu mẫu đăng ký không phải là nơi để thu hút sự chú ý của mọi người bằng các ưu đãi và tính năng khác trên trang web.
  • Giảm thiểu độ phức tạp của quy trình đăng ký. Chỉ thu thập dữ liệu khác của người dùng (chẳng hạn như địa chỉ hoặc thông tin thẻ tín dụng) khi người dùng thấy rõ lợi ích từ việc cung cấp dữ liệu đó.
  • Trước khi người dùng bắt đầu điền vào biểu mẫu đăng ký, hãy nêu rõ đề xuất giá trị. Họ sẽ được lợi gì khi đăng nhập? Đưa ra các ưu đãi cụ thể để người dùng hoàn tất quy trình đăng ký.
  • Nếu có thể, hãy cho phép người dùng tự xác định bằng số điện thoại di động thay vì địa chỉ email, vì một số người dùng có thể không sử dụng email.
  • Giúp người dùng dễ dàng đặt lại mật khẩu và làm nổi bật đường liên kết Bạn quên mật khẩu?.
  • Liên kết đến các tài liệu về điều khoản dịch vụ và chính sách quyền riêng tư: ngay từ đầu, hãy cho người dùng biết rõ cách bạn bảo vệ dữ liệu của họ.
  • Thêm biểu trưng và tên công ty hoặc tổ chức của bạn vào trang đăng ký và đăng nhập, đồng thời đảm bảo rằng ngôn ngữ, phông chữ và kiểu chữ khớp với phần còn lại của trang web. Một số biểu mẫu có vẻ không thuộc cùng một trang web với nội dung khác, đặc biệt là nếu chúng có URL khác biệt đáng kể.

Tiếp tục học

Ảnh của Meghan Schiereck trên Unsplash.