แบบฟอร์ม
ตัวอย่างและแนวทางการใช้งานสำหรับรูปแบบการควบคุมแบบฟอร์ม ตัวเลือกเค้าโครง และส่วนประกอบแบบกำหนดเองสำหรับการสร้างแบบฟอร์มที่หลากหลาย
ภาพรวม
การควบคุมแบบฟอร์มของ Bootstrap ขยายรูปแบบฟอร์มที่รีบูตของเราพร้อมคลาส ใช้คลาสเหล่านี้เพื่อเลือกใช้จอแสดงผลที่ปรับแต่งเองเพื่อการเรนเดอร์ที่สอดคล้องกันมากขึ้นในเบราว์เซอร์และอุปกรณ์
อย่าลืมใช้type
แอตทริบิวต์ที่เหมาะสมกับอินพุตทั้งหมด (เช่นemail
สำหรับที่อยู่อีเมลหรือnumber
ข้อมูลตัวเลข) เพื่อใ���้ประโยชน์จากการควบคุมการป้อนข้อมูลที่ใหม่กว่า เช่น การยืนยันอีเมล การเลือกหมายเลข และอื่นๆ
ต่อไปนี้คือตัวอย่างสั้นๆ ในการสาธิตรูปแบบฟอร์มของ Bootstrap โปรดอ่านเอกสารเกี่ยวกับชั้นเรียนที่จำเป็น เค้าโครงแบบฟอร์ม และอื่นๆ
<form>
<div class="mb-3">
<label for="exampleInputEmail1" class="form-label">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
<div id="emailHelp" class="form-text">We'll never share your email with anyone else.</div>
</div>
<div class="mb-3">
<label for="exampleInputPassword1" class="form-label">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1">
</div>
<div class="mb-3 form-check">
<input type="checkbox" class="form-check-input" id="exampleCheck1">
<label class="form-check-label" for="exampleCheck1">Check me out</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
ข้อความแบบฟอร์ม
สามารถสร้างข้อความฟอร์มระดับบล็อกหรือระดับอินไลน์ได้โดยใช้.form-text
.
การเชื่อมโยงข้อความในแบบฟอร์มกับตัวควบคุมแบบฟอร์ม
ข้อความในแบบฟอร์มควรมีความเกี่ยวข้องอย่างชัดเจนกับตัวควบคุมแบบฟอร์มที่เกี่ยวข้องกับการใช้aria-describedby
แอตทริบิวต์ เพื่อให้แน่ใจว่าเทคโนโลยีอำนวยความสะดวก เช่น โปรแกรมอ่านหน้าจอ จะประกาศข้อความในแบบฟอร์มนี้เมื่อผู้ใช้โฟกัสหรือเข้าสู่ตัวควบคุม
ข้อความแบบฟอร์มด้านล่างอินพุตสามารถจัดรูปแบบ.form-text
ด้วย หากจะใช้องค์ประกอบระดับบล็อก ระยะขอบด้านบนจะถูกเพิ่มเพื่อให้เว้นระยะห่างจากอินพุตด้านบนได้ง่าย
<label for="inputPassword5" class="form-label">Password</label>
<input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
<div id="passwordHelpBlock" class="form-text">
Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
</div>
ข้อความแบบอินไลน์สามารถใช้องค์ประกอบ HTML แบบอินไลน์ทั่วไป (ไม่ว่าจะเป็น<span>
, <small>
หรืออย่างอื่น) โดยไม่มีอะไรมากไปกว่า.form-text
คลาส
<div class="row g-3 align-items-center">
<div class="col-auto">
<label for="inputPassword6" class="col-form-label">Password</label>
</div>
<div class="col-auto">
<input type="password" id="inputPassword6" class="form-control" aria-describedby="passwordHelpInline">
</div>
<div class="col-auto">
<span id="passwordHelpInline" class="form-text">
Must be 8-20 characters long.
</span>
</div>
</div>
แบบฟอร์มคนพิการ
เพิ่มdisabled
แอตทริบิวต์บูลีนบนอินพุตเพื่อป้องกันการโต้ตอบของผู้ใช้และทำให้ดูจางลง
<input class="form-control" id="disabledInput" type="text" placeholder="Disabled input here..." disabled>
เพิ่มdisabled
แอตทริบิวต์เพื่อ<fieldset>
ปิดการควบคุมทั้งหมดภายใน เบราว์เซอร์จะถือว่าตัวควบคุมฟอร์มดั้งเดิมทั้งหมด ( <input>
, <select>
และ<button>
องค์ประกอบ) ภายใน a <fieldset disabled>
ถูกปิดใช้งาน ป้องกันไม่ให้แป้นพิมพ์และเมาส์โต้ตอบกัน
อย่างไรก็ตาม หากแบบฟอร์มของคุณมีองค์ประกอบที่เหมือนปุ่มแบบกำหนดเอง เช่น<a class="btn btn-*">...</a>
สิ่งเหล่านี้จะได้รับสไตล์ของpointer-events: none
เท่านั้น ซึ่งหมายความว่ายังคงโฟกัสได้และใช้งานได้โดยใช้แป้นพิมพ์ ในกรณีนี้ คุณต้องปรับเปลี่ยนการควบคุมเหล่านี้ด้วยตนเองโดยเพิ่มtabindex="-1"
เพื่อป้องกันไม่ให้ได้รับโฟกัสและaria-disabled="disabled"
ส่งสัญญาณสถานะไปยังเทคโนโลยีอำนวยความสะดวก
<form>
<fieldset disabled>
<legend>Disabled fieldset example</legend>
<div class="mb-3">
<label for="disabledTextInput" class="form-label">Disabled input</label>
<input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">
</div>
<div class="mb-3">
<label for="disabledSelect" class="form-label">Disabled select menu</label>
<select id="disabledSelect" class="form-select">
<option>Disabled select</option>
</select>
</div>
<div class="mb-3">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled>
<label class="form-check-label" for="disabledFieldsetCheck">
Can't check this
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</fieldset>
</form>
การเข้าถึง
ตรวจสอบให้แน่ใจว่าการควบคุมแบบฟอร์มทั้งหมดมีชื่อที่สามารถเข้าถึงได้อย่างเหมาะสม เพื่อให้สามารถสื่อถึงจุดประสงค์ไปยังผู้ใช้เทคโนโลยีอำนวยความสะดวก วิธีที่ง่ายที่สุดในการดำเนินการนี้คือการใช้<label>
องค์ประกอบ หรือ—ในกรณีของปุ่ม—เพื่อรวมข้อความอธิบายที่เพียงพอเป็นส่วนหนึ่งของ<button>...</button>
เนื้อหา
สำหรับสถานการณ์ที่ไม่สามารถรวม<label>
เนื้อหาข้อความที่มองเห็นได้หรือเหมาะสม มีวิธีอื่นในการระบุชื่อที่สามารถเข้าถึงได้ เช่น:
<label>
องค์ประกอบที่ซ่อนอยู่โดยใช้.visually-hidden
คลาส- ชี้ไปที่องค์ประกอบที่มีอยู่ซึ่งสามารถทำหน้าที่เป็นป้ายกำกับโดยใช้
aria-labelledby
- ให้
title
แอตทริบิวต์ - การตั้งชื่อที่สามารถเข้าถึงได้อย่างชัดเจนบนองค์ประกอบโดยใช้
aria-label
หากไม่มีสิ่งเหล่านี้ เทคโนโลยีอำนวยความสะดวกอาจหันไปใช้placeholder
แอตทริบิวต์เป็นทางเลือกสำหรับชื่อ<input>
และ<textarea>
องค์ประกอบ ที่สามารถเข้าถึงได้ ตัวอย่างในส่วนนี้จะนำเสนอแนวทางเฉพาะบางกรณีที่แนะนำ
ในขณะที่ใช้เนื้อหาที่มองเห็นได้ ( .visually-hidden
, aria-label
และแม้แต่placeholder
เนื้อหาที่หายไปเมื่อฟิลด์แบบฟอร์มมีเนื้อหา) จะเป็นประโยชน์ต่อผู้ใช้เทคโนโลยีอำนวยความสะดวก การไม่มีข้อความป้ายกำกับที่มองเห็นได้อาจเป็นปัญหาสำหรับผู้ใช้บางคน ฉลากที่มองเห็นได้บางรูปแบบโดยทั่วไปเป็นแนวทางที่ดีที่สุด ทั้งสำหรับการช่วยสำหรับการเข้าถึงและการใช้งาน
ซาส
ตัวแปรแบบฟอร์มจำนวนมากถูกกำหนดไว้ที่ระดับทั่วไปเพื่อนำกลับมาใช้ใหม่และขยายโดยแต่ละองค์ประกอบของแบบฟอร์ม คุณจะเห็นสิ่งเหล่านี้เป็น$btn-input-*
และ$input-*
ตัวแปร บ่อยที่สุด
ตัวแปร
$btn-input-*
ตัวแปรเป็นตัวแปรส่วนกลางที่ใช้ร่วมกันระหว่างปุ่มและส่วนประกอบของแบบฟอร์ม คุณจะพบการกำหนดค่าเหล่านี้บ่อยครั้งเป็นค่าให้กับตัวแปรเฉพาะส่วนประกอบอื่นๆ
$input-btn-padding-y: .375rem;
$input-btn-padding-x: .75rem;
$input-btn-font-family: null;
$input-btn-font-size: $font-size-base;
$input-btn-line-height: $line-height-base;
$input-btn-focus-width: .25rem;
$input-btn-focus-color-opacity: .25;
$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity);
$input-btn-focus-blur: 0;
$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color;
$input-btn-padding-y-sm: .25rem;
$input-btn-padding-x-sm: .5rem;
$input-btn-font-size-sm: $font-size-sm;
$input-btn-padding-y-lg: .5rem;
$input-btn-padding-x-lg: 1rem;
$input-btn-font-size-lg: $font-size-lg;
$input-btn-border-width: $border-width;