Codelab นี้จะสอนวิธีสร้างแบบฟอร์มลงชื่อเข้าใช้ที่ปลอดภัย เข้าถึงได้ง่าย และใช้งานง่าย
1. ใช้ HTML ที่มีความหมาย
ใช้องค์ประกอบเหล่านี้ที่สร้างขึ้นสำหรับงาน
<form>
<section>
<label>
<button>
คุณจะเห็นว่าองค์ประกอบเหล่านี้เปิดใช้งานฟังก์ชันของเบราว์เซอร์ในตัว ปรับปรุงการช่วยเหลือพิเศษ และเพิ่มความหมายให้กับมาร์กอัปของคุณ
คลิกรีมิกซ์เพื่อแก้ไขเพื่อทำให้โปรเจ็กต์แก้ไขได้
เพิ่มโค้ดต่อไปนี้ในองค์ประกอบ
<body>
<form action="#" method="post"> <h1>Sign in</h1> <section> <label>Email</label> <input> </section> <section> <label>Password</label> <input> </section> <button>Sign in</button> </form>
ไฟล์
index.html
ควรมีลักษณะดังนี้คลิกดูแอปเพื่อดูตัวอย่างแบบฟอร์มลงชื่อเข้าใช้ HTML ที่คุณเพิ่มถูกต้องและใช้ได้ แต่การจัดรูปแบบเบราว์เซอร์เริ่มต้นทำให้ดูแย่และใช้งานยาก โดยเฉพาะบนอุปกรณ์เคลื่อนที่
คลิกดูซอร์สโค้ดเพื่อกลับไปยังซอร์สโค้ด
2. ออกแบบสำหรับนิ้วมือและนิ้วโป้ง
ปรับระยะห่างจากขอบ ระยะขอบ และขนาดแบบอักษร เพื่อให้แน่ใจว่าข้อมูลที่คุณป้อนจะทํางานได้ดีบนอุปกรณ์เคลื่อนที่
คัดลอก CSS ต่อไปนี้และวางลงในไฟล์
style.css
คลิกดูแอปเพื่อดูแบบฟอร์มการลงชื่อเข้าใช้ที่ปรับปรุงใหม่
คลิก View Source เพื่อกลับไปยังไฟล์
style.css
โค้ดเยอะมาก สิ่งสำคัญที่ควรทราบคือการเปลี่ยนแปลงขนาด:
- ระบบจะเพิ่ม
padding
และmargin
ลงในอินพุต font-size
นั้นแตกต่างกันสำหรับอุปกรณ์เคลื่อนที่และเดสก์ท็อป
ตัวเลือก :invalid
จะใช้เพื่อระบุเมื่ออินพุตมีค่าที่ไม่ถูกต้อง
วิธีนี้ยังใช้ไม่ได้
เลย์เอาต์ของ CSS ให้ความสำคัญกับอุปกรณ์เคลื่อนที่เป็นอันดับแรก
- CSS เริ่มต้นมีไว้สำหรับวิวพอร์ตที่มีความกว้างน้อยกว่า 450 พิกเซล
- ส่วนคิวรี่สื่อจะตั้งค่าการลบล้างสำหรับวิวพอร์ตที่กว้างอย่างน้อย 450 พิกเซล
เมื่อสร้างแบบฟอร์มของคุณเองแบบนี้ จะต้องทดสอบโค้ดบนอุปกรณ์จริงบนเดสก์ท็อปและอุปกรณ์เคลื่อนที่ในขั้นนี้
- ป้ายกำกับและข้อความที่ป้อนสามารถอ่านได้ โดยเฉพาะสำหรับผู้ที่สายตาเลือนรางไหม
- อินพุตและปุ่มลงชื่อเข้าใช้มีขนาดใหญ่พอที่จะใช้เป็นเป้าหมายการสัมผัสสำหรับนิ้วโป้งไหม
3. เพิ่มแอตทริบิวต์อินพุตเพื่อเปิดใช้ฟีเจอร์เบราว์เซอร์ในตัว
เปิดใช้เบราว์เซอร์เพื่อจัดเก็บและป้อนข้อความอัตโนมัติ รวมถึงให้สิทธิ์เข้าถึงฟีเจอร์การจัดการรหัสผ่านในตัว
เพิ่มแอตทริบิวต์ลงใน HTML ของแบบฟอร์มให้มีลักษณะดังนี้
<form action="#" method="post"> <h1>Sign in</h1> <section> <label for="email">Email</label> <input id="email" name="email" type="email" autocomplete="username" required autofocus> </section> <section> <label for="password">Password</label> <input id="password" name="password" type="password" autocomplete="current-password" required> </section> <button id="sign-in">Sign in</button> </form>
ดูแอปของคุณอีกครั้ง แล้วคลิกอีเมล
สังเกตลักษณะการย้ายโฟกัสไปยังอินพุตอีเมล เนื่องจากป้ายกำกับเชื่อมโยงกับอินพุตผ่านแอตทริบิวต์
for="email"
โปรแกรมอ่านหน้าจอยังอ่าน ข้อความของป้ายกำกับเมื่อโฟกัสอยู่ที่ป้ายกำกับหรืออินพุตที่เกี่ยวข้องของป้ายกำกับโฟกัสอินพุตอีเมลบนอุปกรณ์เคลื่อนที่
โปรดสังเกตวิธีปรับแป้นพิมพ์ให้เหมาะกับการพิมพ์อีเมล เช่น อักขระ
@
และ.
อาจแสดงบนแป้นพิมพ์หลัก และระบบปฏิบัติการอาจแสดงอีเมลที่จัดเก็บไว้เหนือแป้นพิมพ์ ทั้งหมดนี้เกิดขึ้นเนื่องจากมีการใช้แอตทริบิวต์type="email"
กับองค์ประกอบ<input>
พิมพ์ข้อความบางอย่างในการป้อนข้อมูลรหัสผ่าน
ข้อความถูกซ่อนไว้โดยค่าเริ่มต้นเนื่องจากมีการใช้แอตทริบิวต์
type="password"
กับองค์ประกอบ
- แอตทริบิวต์
autocomplete
,name
,id
และtype
ช่วยให้เบราว์เซอร์เข้าใจ บทบาทของอินพุตเพื่อเก็บข้อมูลที่สามารถใช้ในการป้อนข้อความอัตโนมัติได้ในภายหลัง
- โฟกัสอินพุตอีเมลบนอุปกรณ์เดสก์ท็อปแล้วพิมพ์ข้อความ
คุณจะเห็น URL ของแอปเมื่อคลิกเต็มหน้าจอ หากคุณเก็บที่อยู่อีเมลใดๆ ไว้ในเบราว์เซอร์
คุณอาจเห็นกล่องโต้ตอบที่ให้คุณสามารถเลือกจากอีเมลที่จัดเก็บไว้เหล่านั้น กรณีนี้เกิดขึ้นเนื่องจากแอตทริบิวต์
autocomplete="username"
ที่ใช้กับอินพุตอีเมล
autocomplete="username"
และautocomplete="current-password"
จะช่วยให้เบราว์เซอร์ใช้ ค่าที่จัดเก็บไว้เพื่อป้อนข้อความอัตโนมัติ
เบราว์เซอร์ต่างๆ ใช้เทคนิคที่ไม่เหมือนกัน ในการกำหนดบทบาทของการป้อนข้อมูลในแบบฟอร์มและป้อนข้อความอัตโนมัติสำหรับเว็บไซต์ต่างๆ
เพิ่มและนําแอตทริบิวต์ออกเพื่อลองใช้ด้วยตัวเอง
การทดสอบพฤติกรรมในแพลตฟอร์มต่างๆ เป็นสิ่งสำคัญอย่างยิ่ง คุณควรป้อนค่าและส่งแบบฟอร์มในเบราว์เซอร์ต่างๆ บนอุปกรณ์ที่แตกต่างกัน การทดสอบบนแพลตฟอร์มต่างๆ นั้นทำได้ง่ายๆ ด้วย BrowserStack ซึ่งใช้ได้ฟรีสำหรับโปรเจ็กต์โอเพนซอร์ส ลองใช้เลย
ไฟล์ index.html
ควรมีลักษณะดังนี้
4. เพิ่ม UI เพื่อเปิด/ปิดการแสดงรหัสผ่าน
ผู้เชี่ยวชาญด้านความสามารถในการใช้งานแนะนำอย่างยิ่งให้เพิ่มไอคอนหรือปุ่มที่ช่วยให้ผู้ใช้เห็นข้อความที่ป้อนในช่องรหัสผ่าน ซึ่งยังไม่มีวิธีการในตัว จึงต้องติดตั้งใช้งาน JavaScript ด้วยตัวเอง
โค้ดสำหรับเพิ่มฟังก์ชันนี้ไม่ซับซ้อน ตัวอย่างนี้ใช้ข้อความ ไม่ใช่ไอคอน
อัปเดตไฟล์ index.html
, style.css
และ script.js
ดังนี้
เพิ่มปุ่มเปิด/ปิดในส่วนรหัสผ่านในไฟล์
index.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>
เพิ่ม CSS ต่อไปนี้ที่ด้านล่างของไฟล์
style.css
button#toggle-password { background: none; border: none; cursor: pointer; font-weight: 300; padding: 0; position: absolute; top: -4px; right: -2px; }
ทำให้ปุ่มแสดงรหัสผ่านมีลักษณะเหมือนข้อความธรรมดา และแสดงที่มุมบนขวาของส่วนรหัสผ่าน
เพิ่ม JavaScript ต่อไปนี้ลงในไฟล์
script.js
เพื่อสลับการแสดงรหัสผ่านและตั้งค่าaria-label
ที่เหมาะสม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.'); } }
ลองใช้ตรรกะแสดงรหัสผ่านเลย
- ดูแอปของคุณ
- ป้อนข้อความในช่องรหัสผ่าน
- คลิกแสดงรหัสผ่าน
ทำขั้นตอนที่ 4 ซ้ำในเบราว์เซอร์หลายๆ แบบในระบบปฏิบัติการที่ต่างกัน
ลองนึกถึงการออกแบบ UX ผู้ใช้จะสังเกตเห็นแสดงรหัสผ่านและเข้าใจหรือไม่ มีวิธีที่ดีกว่านี้ในการให้บริการฟังก์ชันนี้ไหม นี่คือช่วงเวลาที่ดีในการลองทดสอบความสามารถในการใช้งานส่วนลดกับเพื่อนหรือเพื่อนร่วมงานกลุ่มเล็กๆ
หากต้องการทำความเข้าใจวิธีการทำงานของฟังก์ชันนี้สำหรับโปรแกรมอ่านหน้าจอ ให้ติดตั้งส่วนขยาย ChromeVox แบบคลาสสิก และไปยังแบบฟอร์มต่างๆ ค่า aria-label
ทํางานตามที่ต้องการไหม
บางเว็บไซต์ เช่น Gmail ใช้ในการสลับการแสดงรหัสผ่าน ไม่ใช่ข้อความ เมื่อเสร็จแล้ว ให้ใช้ Codelab นี้กับรูปภาพ SVG Material Design มีไอคอนคุณภาพสูงที่คุณดาวน์โหลดได้ฟรี
โค้ดของคุณควรมีลักษณะดังนี้
5. เพิ่มการตรวจสอบความถูกต้องของแบบฟอร์ม
คุณจะช่วยให้ผู้ใช้ป้อนข้อมูลได้อย่างถูกต้องเมื่ออนุญาตให้ผู้ใช้ตรวจสอบข้อมูลก่อนส่งแบบฟอร์มและแสดงสิ่งที่ต้องเปลี่ยนแปลง
องค์ประกอบและแอตทริบิวต์ของแบบฟอร์ม HTML มีฟีเจอร์ในตัวสำหรับการตรวจสอบขั้นพื้นฐาน แต่คุณควรใช้ JavaScript ด้วยเพื่อตรวจสอบความถูกต้องที่มีประสิทธิภาพมากขึ้นในขณะที่ผู้ใช้ป้อนข้อมูลและเมื่อพยายามส่งแบบฟอร์ม
ขั้นตอนนี้จะใช้ Constraint Validation API (ซึ่งรองรับในวงกว้าง) เพื่อเพิ่มการตรวจสอบที่กำหนดเองด้วย UI ของเบราว์เซอร์ในตัวที่ตั้งค่าโฟกัสและแสดงข้อความแจ้ง
แจ้งให้ผู้ใช้ทราบถึงข้อจำกัดสำหรับรหัสผ่านและอินพุตอื่นๆ อย่าทำให้พวกเขาต้องเดา!
อัปเดตส่วนรหัสผ่านของไฟล์
index.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" aria-describedby="password-constraints" required> <div id="password-constraints">At least eight characters, with at least one lowercase and one uppercase letter.</div> </section>
โดยจะมีฟีเจอร์ใหม่ 2 รายการดังนี้
- ข้อมูลเกี่ยวกับข้อจำกัดของรหัสผ่าน
- แอตทริบิวต์
aria-describedby
สำหรับการป้อนรหัสผ่าน (โปรแกรมอ่านหน้าจอจะอ่านข้อความของป้ายกำกับ ประเภทการป้อนข้อมูล (รหัสผ่าน) และคำอธิบาย)
เพิ่ม CSS ต่อไปนี้ที่ด้านล่างของไฟล์
style.css
div#password-constraints { margin: 5px 0 0 0; font-size: 16px; }
เพิ่ม JavaScript ต่อไปนี้ลงในไฟล์
script.js
:passwordInput.addEventListener('input', resetCustomValidity); function resetCustomValidity() { passwordInput.setCustomValidity(''); } // A production site would use more stringent password testing. function validatePassword() { let message= ''; if (!/.{8,}/.test(passwordInput.value)) { message = 'At least eight characters. '; } if (!/.*[A-Z].*/.test(passwordInput.value)) { message += 'At least one uppercase letter. '; } if (!/.*[a-z].*/.test(passwordInput.value)) { message += 'At least one lowercase letter.'; } passwordInput.setCustomValidity(message); } const form = document.querySelector('form'); const signinButton = document.querySelector('button#sign-in'); form.addEventListener('submit', handleFormSubmission); function handleFormSubmission(event) { event.preventDefault(); validatePassword(); form.reportValidity(); if (form.checkValidity() === false) { } else { // On a production site do form submission. alert('Logging in!') signinButton.disabled = 'true'; } }
ลองใช้เลย
เบราว์เซอร์ล่าสุดทั้งหมดมีฟีเจอร์ในตัวสำหรับการตรวจสอบแบบฟอร์มและ รองรับการตรวจสอบด้วย JavaScript
- ป้อนอีเมลที่ไม่ถูกต้องแล้วคลิกลงชื่อเข้าใช้ เบราว์เซอร์จะแสดงคำเตือน (ไม่จำเป็นต้องใช้ JavaScript!)
- ป้อนอีเมลที่ถูกต้อง แล้วคลิกลงชื่อเข้าใช้โดยไม่ต้องใส่รหัสผ่าน เบราว์เซอร์จะเตือนว่าคุณไม่ได้ใส่ค่าที่จำเป็น และโฟกัสไปที่การป้อนรหัสผ่าน
- ป้อนรหัสผ่านที่ไม่ถูกต้องแล้วคลิกลงชื่อเข้าใช้ ขณะนี้คุณจะเห็นข้อความต่างๆ ขึ้นอยู่กับว่าปัญหาใดไม่ถูกต้อง
ลองใช้วิธีอื่นเพื่อช่วยให้ผู้ใช้ป้อนอีเมลและรหัสผ่านได้ ช่องแบบฟอร์มรหัสผ่านที่ดีกว่า ให้คำแนะนำที่ชาญฉลาด
โค้ดของคุณควรมีลักษณะดังนี้
ไปให้ไกลกว่าเดิม
ถึงจะไม่แสดงใน Codelab นี้ แต่คุณยังต้องใช้ฟีเจอร์ฟอร์มลงชื่อเข้าใช้ที่สำคัญ 4 อย่างต่อไปนี้
ให้เพิ่มหากลืมรหัสผ่าน ซึ่งเป็นปุ่มที่ช่วยให้ผู้ใช้รีเซ็ตรหัสผ่านได้ง่ายๆ
ลิงก์ไปยังข้อกำหนดในการให้บริการและเอกสารนโยบายความเป็นส่วนตัวของคุณ เพื่อให้ผู้ใช้ทราบว่าคุณปกป้องข้อมูลของพวกเขาอย่างไร
คำนึงถึงสไตล์และการสร้างแบรนด์ และตรวจสอบว่าฟีเจอร์เพิ่มเติมเหล่านี้ตรงกับส่วนที่เหลือของเว็บไซต์
เพิ่ม Analytics และ RUM เพื่อให้คุณทดสอบและตรวจสอบประสิทธิภาพและความสามารถในการใช้งานการออกแบบแบบฟอร์มได้