تشکیل می دهد
مثالها و دستورالعملهای استفاده برای سبکهای کنترل فرم، گزینههای طرحبندی، و اجزای سفارشی برای ایجاد طیف گستردهای از فرمها.
کنترلهای فرم Bootstrap در سبکهای فرم Rebooted ما با کلاسها گسترش مییابد. از این کلاسها برای انتخاب نمایشگرهای سفارشیشده آنها برای رندر سازگارتر در مرورگرها و دستگاهها استفاده کنید.
مطمئن شوید که از یک type
ویژگی مناسب در همه ورودیها استفاده میکنید (مثلاً email
برای آدرس ایمیل یا number
اطلاعات عددی) تا از کنترلهای ورودی جدیدتر مانند تأیید ایمیل، انتخاب شماره و موارد دیگر استفاده کنید.
در اینجا یک مثال سریع برای نشان دادن سبک های فرم بوت استرپ آورده شده است. برای مستندات مربوط به کلاس های مورد نیاز، طرح بندی فرم و موارد دیگر به خواندن ادامه دهید.
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
<small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
<div class="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>
کنترلهای فرم متنی - مانند <input>
s، <select>
s و <textarea>
s - با .form-control
کلاس استایلبندی میشوند. شامل سبک هایی برای ظاهر کلی، حالت فوکوس، اندازه و موارد دیگر است.
حتماً فرمهای سفارشی ما را برای استایل بیشتر بررسی <select>
کنید.
<form>
<div class="form-group">
<label for="exampleFormControlInput1">Email address</label>
<input type="email" class="form-control" id="exampleFormControlInput1" placeholder="[email protected]">
</div>
<div class="form-group">
<label for="exampleFormControlSelect1">Example select</label>
<select class="form-control" id="exampleFormControlSelect1">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
<div class="form-group">
<label for="exampleFormControlSelect2">Example multiple select</label>
<select multiple class="form-control" id="exampleFormControlSelect2">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
<div class="form-group">
<label for="exampleFormControlTextarea1">Example textarea</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
</div>
</form>
برای ورودی فایل، آن را .form-control
با .form-control-file
.
<form>
<div class="form-group">
<label for="exampleFormControlFile1">Example file input</label>
<input type="file" class="form-control-file" id="exampleFormControlFile1">
</div>
</form>
با استفاده از کلاس هایی مانند .form-control-lg
و ارتفاع را تنظیم کنید .form-control-sm
.
<input class="form-control form-control-lg" type="text" placeholder=".form-control-lg">
<input class="form-control" type="text" placeholder="Default input">
<input class="form-control form-control-sm" type="text" placeholder=".form-control-sm">
<select class="form-control form-control-lg">
<option>Large select</option>
</select>
<select class="form-control">
<option>Default select</option>
</select>
<select class="form-control form-control-sm">
<option>Small select</option>
</select>
readonly
برای جلوگیری از تغییر مقدار ورودی، ویژگی بولی را روی یک ورودی اضافه کنید . ورودیهای فقط خواندنی سبکتر به نظر میرسند (درست مانند ورودیهای غیرفعال)، اما مکاننمای استاندارد را حفظ میکنند.
<input class="form-control" type="text" placeholder="Readonly input here…" readonly>
اگر میخواهید <input readonly>
عناصری در فرم خود بهصورت متن ساده استایلبندی شده باشند، از .form-control-plaintext
کلاس برای حذف استایل پیشفرض فیلد فرم و حفظ حاشیه و بالشتک صحیح استفاده کنید.
<form>
<div class="form-group row">
<label for="staticEmail" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="text" readonly class="form-control-plaintext" id="staticEmail" value="[email protected]">
</div>
</div>
<div class="form-group row">
<label for="inputPassword" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword" placeholder="Password">
</div>
</div>
</form>
<form class="form-inline">
<div class="form-group mb-2">
<label for="staticEmail2" class="sr-only">Email</label>
<input type="text" readonly class="form-control-plaintext" id="staticEmail2" value="[email protected]">
</div>
<div class="form-group mx-sm-3 mb-2">
<label for="inputPassword2" class="sr-only">Password</label>
<input type="password" class="form-control" id="inputPassword2" placeholder="Password">
</div>
<button type="submit" class="btn btn-primary mb-2">Confirm identity</button>
</form>
.form-check
چک باکس های پیش فرض و رادیوها با کمک یک کلاس واحد برای هر دو نوع ورودی بهبود می یابند که چیدمان و رفتار عناصر HTML آنها را بهبود می بخشد . چک باکس ها برای انتخاب یک یا چند گزینه در یک لیست هستند، در حالی که رادیوها برای انتخاب یک گزینه از بسیاری از گزینه ها هستند.
چک باکسها و رادیوهای غیرفعال پشتیبانی میشوند، اما برای ارائه not-allowed
مکاننما در شناور والد <label>
، باید disabled
ویژگی را به آن اضافه کنید .form-check-input
. مشخصه غیرفعال رنگ روشن تری اعمال می کند تا به نشان دادن وضعیت ورودی کمک کند.
چک باکس ها و رادیوها برای پشتیبانی از اعتبارسنجی فرم مبتنی بر HTML و ارائه برچسب های مختصر و قابل دسترس ساخته شده اند. به این ترتیب، <input>
s و <label>
s ما عناصر خواهر و برادر هستند در مقابل یک <input>
درون یک <label>
. این کمی پرمخاطب تر است زیرا باید مشخص کنید id
و for
ویژگی هایی را برای مرتبط کردن <input>
و <label>
.
بهطور پیشفرض، هر تعدادی از چک باکسها و رادیوهایی که خواهر و برادر فوری هستند به صورت عمودی روی هم قرار میگیرند و با فاصله مناسب با هم قرار .form-check
میگیرند.
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
<label class="form-check-label" for="defaultCheck1">
Default checkbox
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="defaultCheck2" disabled>
<label class="form-check-label" for="defaultCheck2">
Disabled checkbox
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1" value="option1" checked>
<label class="form-check-label" for="exampleRadios1">
Default radio
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios2" value="option2">
<label class="form-check-label" for="exampleRadios2">
Second default radio
</label>
</div>
<div class="form-check disabled">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios3" value="option3" disabled>
<label class="form-check-label" for="exampleRadios3">
Disabled radio
</label>
</div>
کادرهای انتخاب یا رادیوها را در همان ردیف افقی با افزودن .form-check-inline
به هر یک گروه بندی کنید .form-check
.
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1">
<label class="form-check-label" for="inlineCheckbox1">1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2">
<label class="form-check-label" for="inlineCheckbox2">2</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox3" value="option3" disabled>
<label class="form-check-label" for="inlineCheckbox3">3 (disabled)</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1">
<label class="form-check-label" for="inlineRadio1">1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2">
<label class="form-check-label" for="inlineRadio2">2</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3" disabled>
<label class="form-check-label" for="inlineRadio3">3 (disabled)</label>
</div>
.position-static
به ورودیهایی اضافه کنید .form-check
که متن برچسبی ندارند. به یاد داشته باشید که هنوز نوعی برچسب برای فناوری های کمکی ارائه دهید (به عنوان مثال، استفاده از aria-label
).
<div class="form-check">
<input class="form-check-input position-static" type="checkbox" id="blankCheckbox" value="option1" aria-label="...">
</div>
<div class="form-check">
<input class="form-check-input position-static" type="radio" name="blankRadio" id="blankRadio1" value="option1" aria-label="...">
</div>
از آنجایی که Bootstrap display: block
و width: 100%
تقریباً برای همه کنترلهای فرم ما اعمال میشود، فرمها بهطور پیشفرض به صورت عمودی قرار میگیرند. می توان از کلاس های اضافی برای تغییر این طرح بر اساس هر فرم استفاده کرد.
کلاس .form-group
ساده ترین راه برای افزودن ساختار به فرم ها است. یک کلاس منعطف ارائه میکند که گروهبندی مناسب برچسبها، کنترلها، متن راهنما اختیاری و پیامهای تایید فرم را تشویق میکند. به طور پیشفرض فقط اعمال margin-bottom
میشود، اما در .form-inline
صورت نیاز، سبکهای اضافی را انتخاب میکند. از آن با <fieldset>
s، <div>
s یا تقریباً هر عنصر دیگری استفاده کنید.
<form>
<div class="form-group">
<label for="formGroupExampleInput">Example label</label>
<input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input">
</div>
<div class="form-group">
<label for="formGroupExampleInput2">Another label</label>
<input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input">
</div>
</form>
فرم های پیچیده تری را می توان با استفاده از کلاس های گرید ما ساخت. از این ها برای طرح بندی فرم هایی که نیاز به ستون های متعدد، عرض های متنوع و گزینه های تراز اضافی دارند استفاده کنید.
<form>
<div class="row">
<div class="col">
<input type="text" class="form-control" placeholder="First name">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Last name">
</div>
</div>
</form>
همچنین میتوانید با .row
، .form-row
تغییری از ردیف شبکه استاندارد ما که ناودان ستونهای پیشفرض را برای طرحبندیهای فشردهتر و فشردهتر جایگزین میکند.
<form>
<div class="form-row">
<div class="col">
<input type="text" class="form-control" placeholder="First name">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Last name">
</div>
</div>
</form>
طرحبندیهای پیچیدهتری را نیز میتوان با سیستم شبکه ایجاد کرد.
<form>
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputEmail4">Email</label>
<input type="email" class="form-control" id="inputEmail4" placeholder="Email">
</div>
<div class="form-group col-md-6">
<label for="inputPassword4">Password</label>
<input type="password" class="form-control" id="inputPassword4" placeholder="Password">
</div>
</div>
<div class="form-group">
<label for="inputAddress">Address</label>
<input type="text" class="form-control" id="inputAddress" placeholder="1234 Main St">
</div>
<div class="form-group">
<label for="inputAddress2">Address 2</label>
<input type="text" class="form-control" id="inputAddress2" placeholder="Apartment, studio, or floor">
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputCity">City</label>
<input type="text" class="form-control" id="inputCity">
</div>
<div class="form-group col-md-4">
<label for="inputState">State</label>
<select id="inputState" class="form-control">
<option selected>Choose...</option>
<option>...</option>
</select>
</div>
<div class="form-group col-md-2">
<label for="inputZip">Zip</label>
<input type="text" class="form-control" id="inputZip">
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="gridCheck">
<label class="form-check-label" for="gridCheck">
Check me out
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
.row
با افزودن کلاس برای تشکیل گروه ها و استفاده از .col-*-*
کلاس ها برای تعیین عرض برچسب ها و کنترل های خود، فرم های افقی را با شبکه ایجاد کنید. حتماً به s .col-form-label
خود <label>
نیز اضافه کنید تا به صورت عمودی با کنترلهای فرم مرتبط خود در مرکز قرار گیرند.
گاهی اوقات، ممکن است لازم باشد از ابزارهای حاشیه یا padding استفاده کنید تا تراز کامل مورد نیاز خود را ایجاد کنید. به عنوان مثال، ما padding-top
برچسب ورودی های رادیویی انباشته خود را حذف کرده ایم تا خط پایه متن را بهتر تراز کنیم.
<form>
<div class="form-group row">
<label for="inputEmail3" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
<div class="form-group row">
<label for="inputPassword3" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword3" placeholder="Password">
</div>
</div>
<fieldset class="form-group">
<div class="row">
<legend class="col-form-label col-sm-2 pt-0">Radios</legend>
<div class="col-sm-10">
<div class="form-check">
<input class="form-check-input" type="radio" name="gridRadios" id="gridRadios1" value="option1" checked>
<label class="form-check-label" for="gridRadios1">
First radio
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="gridRadios" id="gridRadios2" value="option2">
<label class="form-check-label" for="gridRadios2">
Second radio
</label>
</div>
<div class="form-check disabled">
<input class="form-check-input" type="radio" name="gridRadios" id="gridRadios3" value="option3" disabled>
<label class="form-check-label" for="gridRadios3">
Third disabled radio
</label>
</div>
</div>
</div>
</fieldset>
<div class="form-group row">
<div class="col-sm-2">Checkbox</div>
<div class="col-sm-10">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="gridCheck1">
<label class="form-check-label" for="gridCheck1">
Example checkbox
</label>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">Sign in</button>
</div>
</div>
</form>
حتماً از .col-form-label-sm
یا .col-form-label-lg
به <label>
s یا s خود استفاده کنید تا اندازه و <legend>
را به درستی دنبال کنید ..form-control-lg
.form-control-sm
<form>
<div class="form-group row">
<label for="colFormLabelSm" class="col-sm-2 col-form-label col-form-label-sm">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-sm" id="colFormLabelSm" placeholder="col-form-label-sm">
</div>
</div>
<div class="form-group row">
<label for="colFormLabel" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="colFormLabel" placeholder="col-form-label">
</div>
</div>
<div class="form-group row">
<label for="colFormLabelLg" class="col-sm-2 col-form-label col-form-label-lg">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-lg" id="colFormLabelLg" placeholder="col-form-label-lg">
</div>
</div>
</form>
همانطور که در مثال های قبلی نشان داده شد، سیستم شبکه ما به شما امکان می دهد هر تعداد .col
s را در یک .row
یا قرار دهید .form-row
. آنها عرض موجود را به طور مساوی بین خود تقسیم می کنند. همچنین میتوانید زیرمجموعهای از ستونهای خود را انتخاب کنید تا فضای کمتر یا بیشتر را اشغال کند، در حالی که باقیماندهها .col
بقیه را با کلاسهای ستونی خاص مانند .col-7
.
<form>
<div class="form-row">
<div class="col-7">
<input type="text" class="form-control" placeholder="City">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="State">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Zip">
</div>
</div>
</form>
مثال زیر از یک ابزار flexbox استفاده میکند تا محتویات را به صورت عمودی در مرکز قرار دهد و آن را تغییر دهد .col
تا .col-auto
ستونهای شما فقط به اندازهای که فضای لازم را اشغال کنند. به عبارت دیگر، ستون خود را بر اساس محتویات اندازه می گیرد.
<form>
<div class="form-row align-items-center">
<div class="col-auto">
<label class="sr-only" for="inlineFormInput">Name</label>
<input type="text" class="form-control mb-2" id="inlineFormInput" placeholder="Jane Doe">
</div>
<div class="col-auto">
<label class="sr-only" for="inlineFormInputGroup">Username</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="inlineFormInputGroup" placeholder="Username">
</div>
</div>
<div class="col-auto">
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" id="autoSizingCheck">
<label class="form-check-label" for="autoSizingCheck">
Remember me
</label>
</div>
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary mb-2">Submit</button>
</div>
</div>
</form>
سپس میتوانید آن را یک بار دیگر با کلاسهای ستونی با اندازه خاص، مجدداً مخلوط کنید.
<form>
<div class="form-row align-items-center">
<div class="col-sm-3 my-1">
<label class="sr-only" for="inlineFormInputName">Name</label>
<input type="text" class="form-control" id="inlineFormInputName" placeholder="Jane Doe">
</div>
<div class="col-sm-3 my-1">
<label class="sr-only" for="inlineFormInputGroupUsername">Username</label>
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="inlineFormInputGroupUsername" placeholder="Username">
</div>
</div>
<div class="col-auto my-1">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="autoSizingCheck2">
<label class="form-check-label" for="autoSizingCheck2">
Remember me
</label>
</div>
</div>
<div class="col-auto my-1">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
و البته کنترل های فرم سفارشی پشتیبانی می شوند.
<form>
<div class="form-row align-items-center">
<div class="col-auto my-1">
<label class="mr-sm-2" for="inlineFormCustomSelect">Preference</label>
<select class="custom-select mr-sm-2" id="inlineFormCustomSelect">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
</div>
<div class="col-auto my-1">
<div class="custom-control custom-checkbox mr-sm-2">
<input type="checkbox" class="custom-control-input" id="customControlAutosizing">
<label class="custom-control-label" for="customControlAutosizing">Remember my preference</label>
</div>
</div>
<div class="col-auto my-1">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
از .form-inline
کلاس برای نمایش مجموعه ای از برچسب ها، کنترل های فرم و دکمه ها در یک ردیف افقی استفاده کنید. کنترلهای فرم در فرمهای درون خطی کمی از حالتهای پیشفرض آنها متفاوت است.
- کنترلها عبارتند از
display: flex
، هر فضای سفید HTML را جمع میکنند و به شما امکان میدهند کنترل تراز را با ابزارهای فاصله و flexbox ارائه دهید . - کنترلها و گروههای ورودی
width: auto
برای لغو پیشفرض Bootstrap دریافت میکنندwidth: 100%
. - کنترلها فقط در ویوپورتهایی بهخط ظاهر میشوند که حداقل 576 پیکسل عرض دارند تا درگاههای دید باریک در دستگاههای تلفن همراه را در نظر بگیرند.
ممکن است لازم باشد به صورت دستی عرض و تراز کنترلهای فرم را با ابزارهای فاصله (مانند شکل زیر) بررسی کنید. در نهایت، مطمئن شوید که همیشه یک علامت را <label>
با هر کنترل فرم اضافه کنید، حتی اگر لازم است آن را از بازدیدکنندگان غیرصفحهخوان پنهان کنید .sr-only
.
<form class="form-inline">
<label class="sr-only" for="inlineFormInputName2">Name</label>
<input type="text" class="form-control mb-2 mr-sm-2" id="inlineFormInputName2" placeholder="Jane Doe">
<label class="sr-only" for="inlineFormInputGroupUsername2">Username</label>
<div class="input-group mb-2 mr-sm-2">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="inlineFormInputGroupUsername2" placeholder="Username">
</div>
<div class="form-check mb-2 mr-sm-2">
<input class="form-check-input" type="checkbox" id="inlineFormCheck">
<label class="form-check-label" for="inlineFormCheck">
Remember me
</label>
</div>
<button type="submit" class="btn btn-primary mb-2">Submit</button>
</form>
کنترلها و انتخابهای فرم سفارشی نیز پشتیبانی میشوند.
<form class="form-inline">
<label class="my-1 mr-2" for="inlineFormCustomSelectPref">Preference</label>
<select class="custom-select my-1 mr-sm-2" id="inlineFormCustomSelectPref">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<div class="custom-control custom-checkbox my-1 mr-sm-2">
<input type="checkbox" class="custom-control-input" id="customControlInline">
<label class="custom-control-label" for="customControlInline">Remember my preference</label>
</div>
<button type="submit" class="btn btn-primary my-1">Submit</button>
</form>
جایگزین هایی برای برچسب های پنهان
اگر برای هر ورودی برچسبی وارد نکنید، فناوریهای کمکی مانند صفحهخوانها با فرمهای شما مشکل خواهند داشت. برای این فرمهای درون خطی، میتوانید برچسبها را با استفاده از .sr-only
کلاس پنهان کنید. روشهای جایگزین دیگری برای ارائه برچسب برای فناوریهای کمکی، مانند aria-label
ویژگی aria-labelledby
یا title
ویژگی وجود دارد. اگر هیچ یک از اینها وجود نداشته باشد، فناوری های کمکی ممکن است به استفاده از placeholder
ویژگی متوسل شوند، در صورت وجود، اما توجه داشته باشید که استفاده از آن placeholder
به عنوان جایگزینی برای سایر روش های برچسب گذاری توصیه نمی شود.
متن راهنما در سطح بلوک در فرم ها را می توان با استفاده از .form-text
(که قبلاً در نسخه 3 شناخته می .help-block
شد) ایجاد کرد. متن راهنمای درون خطی را می توان با استفاده از هر عنصر HTML درون خطی و کلاس های کاربردی مانند .text-muted
.
ارتباط متن راهنما با کنترلهای فرم
متن راهنما باید صریحاً با کنترل فرم مربوط به استفاده از aria-describedby
ویژگی مرتبط باشد. این اطمینان حاصل می کند که فناوری های کمکی - مانند صفحه خوان ها - این متن راهنما را هنگامی که کاربر تمرکز می کند یا وارد کنترل می شود، اعلام می کند.
متن راهنما زیر ورودی ها را می توان با استایل دهی کرد .form-text
. این کلاس شامل display: block
و اضافه کردن حاشیه بالا برای فاصله آسان از ورودی های بالا.
<label for="inputPassword5">Password</label>
<input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
<small id="passwordHelpBlock" class="form-text text-muted">
Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
</small>
متن درون خطی می تواند از هر عنصر HTML درون خطی معمولی (خواه یک <small>
, <span>
یا چیز دیگری) با چیزی بیشتر از یک کلاس کاربردی استفاده کند.
<form class="form-inline">
<div class="form-group">
<label for="inputPassword6">Password</label>
<input type="password" id="inputPassword6" class="form-control mx-sm-3" aria-describedby="passwordHelpInline">
<small id="passwordHelpInline" class="text-muted">
Must be 8-20 characters long.
</small>
</div>
</form>
disabled
برای جلوگیری از تعامل کاربر و سبکتر نشان دادن آن، ویژگی بولین را روی ورودی اضافه کنید.
<input class="form-control" id="disabledInput" type="text" placeholder="Disabled input here..." disabled>
برای غیرفعال کردن تمام کنترلهای داخل ، disabled
ویژگی را به a اضافه کنید.<fieldset>
<form>
<fieldset disabled>
<div class="form-group">
<label for="disabledTextInput">Disabled input</label>
<input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">
</div>
<div class="form-group">
<label for="disabledSelect">Disabled select menu</label>
<select id="disabledSelect" class="form-control">
<option>Disabled select</option>
</select>
</div>
<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>
<button type="submit" class="btn btn-primary">Submit</button>
</fieldset>
</form>
اخطار با لنگرها
بهطور پیشفرض، مرورگرها تمام کنترلهای فرم ( <input>
و عناصر) داخل a را غیرفعال میکنند <select>
و از تعاملات صفحهکلید و ماوس روی آنها جلوگیری میکنند. با این حال، اگر فرم شما شامل عناصر نیز باشد، به آنها فقط سبکی از . همانطور که در بخش مربوط به حالت غیرفعال برای دکمه ها (و به طور خاص در بخش فرعی عناصر لنگر) ذکر شد، این ویژگی CSS هنوز استاندارد نشده است و به طور کامل در Opera 18 و پایین تر یا اینترنت اکسپلورر 10 پشتیبانی نمی شود و برنده شده است. از تمرکز یا فعال کردن این پیوندها توسط کاربران صفحه کلید جلوگیری کنید. بنابراین برای ایمن بودن، از جاوا اسکریپت سفارشی برای غیرفعال کردن چنین پیوندهایی استفاده کنید.<button>
<fieldset disabled>
<a ... class="btn btn-*">
pointer-events: none
سازگاری بین مرورگرها
در حالی که بوت استرپ این سبکها را در همه مرورگرها اعمال میکند، اینترنت اکسپلورر 11 و پایینتر به طور کامل از disabled
ویژگی روی یک پشتیبانی نمیکند <fieldset>
. از جاوا اسکریپت سفارشی برای غیرفعال کردن مجموعه فیلدها در این مرورگرها استفاده کنید.
با اعتبارسنجی فرم HTML5 بازخورد ارزشمند و قابل اجرا را به کاربران خود ارائه دهید - در همه مرورگرهای پشتیبانی شده ما موجود است. بازخورد اعتبارسنجی پیشفرض مرورگر را انتخاب کنید یا پیامهای سفارشی را با کلاسهای داخلی و جاوا اسکریپت شروعکننده پیادهسازی کنید.
ما به شدت سبکهای اعتبارسنجی سفارشی را توصیه میکنیم زیرا پیشفرضهای مرورگر بومی به صفحهخوانها اعلام نمیشوند.
در اینجا نحوه عملکرد اعتبار فرم با بوت استرپ آمده است:
- اعتبار سنجی فرم HTML از طریق دو کلاس شبه CSS
:invalid
و:valid
. برای عناصر<input>
،،<select>
و کاربرد<textarea>
دارد. - بوت استرپ دامنه
:invalid
و:valid
استایل ها را به کلاس والد.was-validated
، که معمولاً برای کلاس اعمال می شود، اعمال می کند<form>
. در غیر این صورت، هر فیلد الزامی بدون مقدار در بارگذاری صفحه نامعتبر نشان داده می شود. به این ترتیب، می توانید انتخاب کنید که چه زمانی آنها را فعال کنید (معمولاً پس از ارسال فرم). - به عنوان یک بازگشت،
.is-invalid
و.is-valid
کلاس ها ممکن است به جای شبه کلاس ها برای اعتبارسنجی سمت سرور استفاده شوند. آنها نیازی به.was-validated
کلاس والدین ندارند. - به دلیل محدودیتهایی که در نحوه عملکرد CSS وجود دارد، ما نمیتوانیم (در حال حاضر) سبکهایی را
<label>
که قبل از کنترل فرم در DOM قرار میگیرد بدون کمک جاوا اسکریپت سفارشی اعمال کنیم. - همه مرورگرهای مدرن از API اعتبارسنجی محدودیت پشتیبانی میکنند، مجموعهای از روشهای جاوا اسکریپت برای اعتبارسنجی کنترلهای فرم.
- پیامهای بازخورد ممکن است از پیشفرضهای مرورگر (برای هر مرورگر متفاوت، و از طریق CSS غیرقابل استایل) یا سبکهای بازخورد سفارشی ما با HTML و CSS اضافی استفاده کنند.
- می توانید پیام های اعتبار سفارشی را
setCustomValidity
در جاوا اسکریپت ارائه دهید.
با در نظر گرفتن این موضوع، دموهای زیر را برای سبکهای اعتبارسنجی فرم سفارشی، کلاسهای سمت سرور اختیاری و پیشفرضهای مرورگر در نظر بگیرید.
برای پیامهای اعتبارسنجی فرم بوت استرپ سفارشی، باید novalidate
ویژگی بولین را به خود اضافه کنید <form>
. با این کار نکات ابزار بازخورد پیشفرض مرورگر غیرفعال میشود، اما همچنان دسترسی به APIهای تأیید فرم در جاوا اسکریپت را فراهم میکند. سعی کنید فرم زیر را ارسال کنید؛ جاوا اسکریپت ما دکمه ارسال را قطع می کند و بازخورد را به شما ارسال می کند.
هنگام تلاش برای ارسال، سبکها :invalid
و :valid
سبکهای اعمال شده روی کنترلهای فرم خود را مشاهده خواهید کرد.
<form class="needs-validation" novalidate>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationCustom01">First name</label>
<input type="text" class="form-control" id="validationCustom01" placeholder="First name" value="Mark" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationCustom02">Last name</label>
<input type="text" class="form-control" id="validationCustom02" placeholder="Last name" value="Otto" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationCustomUsername">Username</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroupPrepend">@</span>
</div>
<input type="text" class="form-control" id="validationCustomUsername" placeholder="Username" aria-describedby="inputGroupPrepend" required>
<div class="invalid-feedback">
Please choose a username.
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationCustom03">City</label>
<input type="text" class="form-control" id="validationCustom03" placeholder="City" required>
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationCustom04">State</label>
<input type="text" class="form-control" id="validationCustom04" placeholder="State" required>
<div class="invalid-feedback">
Please provide a valid state.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationCustom05">Zip</label>
<input type="text" class="form-control" id="validationCustom05" placeholder="Zip" required>
<div class="invalid-feedback">
Please provide a valid zip.
</div>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="invalidCheck" required>
<label class="form-check-label" for="invalidCheck">
Agree to terms and conditions
</label>
<div class="invalid-feedback">
You must agree before submitting.
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Submit form</button>
</form>
<script>
// Example starter JavaScript for disabling form submissions if there are invalid fields
(function() {
'use strict';
window.addEventListener('load', function() {
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.getElementsByClassName('needs-validation');
// Loop over them and prevent submission
var validation = Array.prototype.filter.call(forms, function(form) {
form.addEventListener('submit', function(event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
}, false);
});
}, false);
})();
</script>
علاقه ای به پیام های بازخورد تأیید اعتبار سفارشی یا نوشتن جاوا اسکریپت برای تغییر رفتارهای فرم ندارید؟ خیلی خوب است، می توانید از پیش فرض های مرورگر استفاده کنید. سعی کنید فرم زیر را ارسال کنید. بسته به مرورگر و سیستم عامل خود، سبک کمی متفاوت از بازخورد را مشاهده خواهید کرد.
در حالی که این سبکهای بازخورد را نمیتوان با CSS سبکسازی کرد، همچنان میتوانید متن بازخورد را از طریق جاوا اسکریپت سفارشی کنید.
<form>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationDefault01">First name</label>
<input type="text" class="form-control" id="validationDefault01" placeholder="First name" value="Mark" required>
</div>
<div class="col-md-4 mb-3">
<label for="validationDefault02">Last name</label>
<input type="text" class="form-control" id="validationDefault02" placeholder="Last name" value="Otto" required>
</div>
<div class="col-md-4 mb-3">
<label for="validationDefaultUsername">Username</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroupPrepend2">@</span>
</div>
<input type="text" class="form-control" id="validationDefaultUsername" placeholder="Username" aria-describedby="inputGroupPrepend2" required>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationDefault03">City</label>
<input type="text" class="form-control" id="validationDefault03" placeholder="City" required>
</div>
<div class="col-md-3 mb-3">
<label for="validationDefault04">State</label>
<input type="text" class="form-control" id="validationDefault04" placeholder="State" required>
</div>
<div class="col-md-3 mb-3">
<label for="validationDefault05">Zip</label>
<input type="text" class="form-control" id="validationDefault05" placeholder="Zip" required>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="invalidCheck2" required>
<label class="form-check-label" for="invalidCheck2">
Agree to terms and conditions
</label>
</div>
</div>
<button class="btn btn-primary" type="submit">Submit form</button>
</form>
توصیه می کنیم از اعتبار سنجی سمت مشتری استفاده کنید، اما در صورت نیاز به سمت سرور، می توانید فیلدهای فرم نامعتبر و معتبر را با .is-invalid
و نشان دهید .is-valid
. توجه داشته باشید که .invalid-feedback
با این کلاس ها نیز پشتیبانی می شود.
<form>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationServer01">First name</label>
<input type="text" class="form-control is-valid" id="validationServer01" placeholder="First name" value="Mark" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationServer02">Last name</label>
<input type="text" class="form-control is-valid" id="validationServer02" placeholder="Last name" value="Otto" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationServerUsername">Username</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroupPrepend3">@</span>
</div>
<input type="text" class="form-control is-invalid" id="validationServerUsername" placeholder="Username" aria-describedby="inputGroupPrepend3" required>
<div class="invalid-feedback">
Please choose a username.
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationServer03">City</label>
<input type="text" class="form-control is-invalid" id="validationServer03" placeholder="City" required>
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationServer04">State</label>
<input type="text" class="form-control is-invalid" id="validationServer04" placeholder="State" required>
<div class="invalid-feedback">
Please provide a valid state.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationServer05">Zip</label>
<input type="text" class="form-control is-invalid" id="validationServer05" placeholder="Zip" required>
<div class="invalid-feedback">
Please provide a valid zip.
</div>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input is-invalid" type="checkbox" value="" id="invalidCheck3" required>
<label class="form-check-label" for="invalidCheck3">
Agree to terms and conditions
</label>
<div class="invalid-feedback">
You must agree before submitting.
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Submit form</button>
</form>
فرمهای مثال ما s متنی بومی را <input>
در بالا نشان میدهند، اما سبکهای اعتبارسنجی فرم برای کنترلهای فرم سفارشی ما نیز موجود است.
<form class="was-validated">
<div class="custom-control custom-checkbox mb-3">
<input type="checkbox" class="custom-control-input" id="customControlValidation1" required>
<label class="custom-control-label" for="customControlValidation1">Check this custom checkbox</label>
<div class="invalid-feedback">Example invalid feedback text</div>
</div>
<div class="custom-control custom-radio">
<input type="radio" class="custom-control-input" id="customControlValidation2" name="radio-stacked" required>
<label class="custom-control-label" for="customControlValidation2">Toggle this custom radio</label>
</div>
<div class="custom-control custom-radio mb-3">
<input type="radio" class="custom-control-input" id="customControlValidation3" name="radio-stacked" required>
<label class="custom-control-label" for="customControlValidation3">Or toggle this other custom radio</label>
<div class="invalid-feedback">More example invalid feedback text</div>
</div>
<div class="form-group">
<select class="custom-select" required>
<option value="">Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<div class="invalid-feedback">Example invalid custom select feedback</div>
</div>
<div class="custom-file">
<input type="file" class="custom-file-input" id="validatedCustomFile" required>
<label class="custom-file-label" for="validatedCustomFile">Choose file...</label>
<div class="invalid-feedback">Example invalid custom file feedback</div>
</div>
</form>
اگر طرحبندی فرم شما اجازه میدهد، میتوانید کلاسها را با .{valid|invalid}-feedback
کلاسها تعویض کنید .{valid|invalid}-tooltip
تا بازخورد اعتبارسنجی را در یک راهنمای ابزار سبکدهی شده نشان دهید. حتماً یک والد position: relative
برای موقعیتیابی راهنمای ابزار همراه داشته باشید. در مثال زیر، کلاسهای ستون ما قبلاً این مورد را دارند، اما پروژه شما ممکن است به یک راهاندازی جایگزین نیاز داشته باشد.
<form class="needs-validation" novalidate>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationTooltip01">First name</label>
<input type="text" class="form-control" id="validationTooltip01" placeholder="First name" value="Mark" required>
<div class="valid-tooltip">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationTooltip02">Last name</label>
<input type="text" class="form-control" id="validationTooltip02" placeholder="Last name" value="Otto" required>
<div class="valid-tooltip">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationTooltipUsername">Username</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="validationTooltipUsernamePrepend">@</span>
</div>
<input type="text" class="form-control" id="validationTooltipUsername" placeholder="Username" aria-describedby="validationTooltipUsernamePrepend" required>
<div class="invalid-tooltip">
Please choose a unique and valid username.
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationTooltip03">City</label>
<input type="text" class="form-control" id="validationTooltip03" placeholder="City" required>
<div class="invalid-tooltip">
Please provide a valid city.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationTooltip04">State</label>
<input type="text" class="form-control" id="validationTooltip04" placeholder="State" required>
<div class="invalid-tooltip">
Please provide a valid state.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationTooltip05">Zip</label>
<input type="text" class="form-control" id="validationTooltip05" placeholder="Zip" required>
<div class="invalid-tooltip">
Please provide a valid zip.
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Submit form</button>
</form>
برای سفارشی سازی بیشتر و سازگاری بین مرورگرها، از عناصر فرم کاملاً سفارشی ما برای جایگزینی پیش فرض های مرورگر استفاده کنید. آنها بر روی نشانهگذاری معنایی و قابل دسترس ساخته شدهاند، بنابراین جایگزینی محکم برای هر گونه کنترل فرم پیشفرض هستند.
<div>
هر چک باکس و رادیو با یک خواهر یا برادر <span>
برای ایجاد کنترل سفارشی ما و یک علامت <label>
برای متن همراه پیچیده شده است. از نظر ساختاری، این همان رویکرد پیش فرض ما .form-check
است.
ما از انتخابگر خواهر و برادر ( ~
) برای همه <input>
حالت های خود استفاده می کنیم - مانند - تا :checked
به درستی نشانگر فرم سفارشی خود را استایل بندی کنیم. هنگامی که با .custom-control-label
کلاس ترکیب میشویم، میتوانیم متن را برای هر آیتم بر اساس وضعیت <input>
' استایل دهی کنیم.
<input>
پیش فرض را با مخفی می کنیم opacity
و .custom-control-label
برای ساختن یک نشانگر فرم سفارشی جدید در جای خود با ::before
و ::after
استفاده می کنیم. متأسفانه ما نمیتوانیم یک سفارشی فقط از آن بسازیم <input>
زیرا CSS content
روی آن عنصر کار نمیکند.
در حالتهای علامتگذاری شده، از نمادهای SVG تعبیهشده base64 از Open Iconic استفاده میکنیم. این بهترین کنترل را برای استایل و موقعیت یابی در مرورگرها و دستگاه ها در اختیار ما قرار می دهد.
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheck1">
<label class="custom-control-label" for="customCheck1">Check this custom checkbox</label>
</div>
چک باکس های سفارشی همچنین می توانند از :indeterminate
کلاس شبه استفاده کنند که به صورت دستی از طریق جاوا اسکریپت تنظیم شود (هیچ ویژگی HTML موجود برای تعیین آن وجود ندارد).
اگر از jQuery استفاده می کنید، چیزی شبیه به این کافی است:
$('.your-checkbox').prop('indeterminate', true)
<div class="custom-control custom-radio">
<input type="radio" id="customRadio1" name="customRadio" class="custom-control-input">
<label class="custom-control-label" for="customRadio1">Toggle this custom radio</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="customRadio2" name="customRadio" class="custom-control-input">
<label class="custom-control-label" for="customRadio2">Or toggle this other custom radio</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="customRadioInline1" name="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline1">Toggle this custom radio</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="customRadioInline2" name="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline2">Or toggle this other custom radio</label>
</div>
چک باکس های سفارشی و رادیوها نیز می توانند غیرفعال شوند. disabled
ویژگی Boolean را به آن اضافه کنید <input>
و نشانگر سفارشی و توضیحات برچسب به طور خودکار استایل دهی می شود.
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheckDisabled" disabled>
<label class="custom-control-label" for="customCheckDisabled">Check this custom checkbox</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="radio3" name="radioDisabled" id="customRadioDisabled" class="custom-control-input" disabled>
<label class="custom-control-label" for="customRadioDisabled">Toggle this custom radio</label>
</div>
منوهای سفارشی <select>
فقط به یک کلاس سفارشی نیاز دارند .custom-select
تا سبک های سفارشی را فعال کنند.
<select class="custom-select">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
همچنین میتوانید از میان انتخابهای سفارشی کوچک و بزرگ انتخاب کنید تا با ورودیهای متنی با اندازه مشابه مطابقت داشته باشد.
<select class="custom-select custom-select-lg mb-3">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<select class="custom-select custom-select-sm">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
ویژگی multiple
نیز پشتیبانی می شود:
<select class="custom-select" multiple>
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
همانطور که size
ویژگی است:
<select class="custom-select" size="3">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
ورودی فایل در میان دستهای است که به جاوا اسکریپت اضافی نیاز دارد، اگر میخواهید آنها را با انتخاب فایل کاربردی… و متن نام فایل انتخابشده وصل کنید.
<div class="custom-file">
<input type="file" class="custom-file-input" id="customFile">
<label class="custom-file-label" for="customFile">Choose file</label>
</div>
فایل پیش فرض را <input>
از طریق مخفی می کنیم opacity
و به جای آن به آن استایل می دهیم <label>
. دکمه تولید و با ::after
. در نهایت، ما a width
and height
on را <input>
برای فاصله مناسب برای محتوای اطراف اعلام می کنیم.
شبه :lang()
کلاس برای امکان ترجمه متن "مرور" به زبان های دیگر استفاده می شود. با تگ زبان مربوطه و رشته های محلی شده، ورودی ها را به $custom-file-text
متغیر Sass لغو یا اضافه کنید . رشته های انگلیسی را می توان به همان روش سفارشی کرد. به عنوان مثال، در اینجا نحوه اضافه کردن ترجمه اسپانیایی (کد زبان اسپانیایی این است ):es
$custom-file-text: (
en: "Browse",
es: "Elegir"
);
در اینجا lang(es)
در مورد ورودی فایل سفارشی برای ترجمه اسپانیایی آمده است:
<div class="custom-file">
<input type="file" class="custom-file-input" id="customFileLang" lang="es">
<label class="custom-file-label" for="customFileLang">Seleccionar Archivo</label>
</div>
برای اینکه متن صحیح نشان داده شود، باید زبان سند خود (یا زیردرخت آن) را به درستی تنظیم کنید. این را می توان با استفاده از lang
ویژگی روی <html>
عنصر یا Content-Language
هدر HTTP در میان روش های دیگر انجام داد.