in English

تشکیل می دهد

مثال‌ها و دستورالعمل‌های استفاده برای سبک‌های کنترل فرم، گزینه‌های طرح‌بندی، و اجزای سفارشی برای ایجاد طیف گسترده‌ای از فرم‌ها.

بررسی اجمالی

کنترل‌های فرم 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">
    <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">
  </div>
  <div class="form-group 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><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">
    </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-control-range.

<form>
  <div class="form-group">
    <label for="formControlRange">Example Range input</label>
    <input type="range" class="form-control-range" id="formControlRange">
  </div>
</form>

چک باکس ها و رادیوها

.form-checkچک باکس های پیش فرض و رادیوها با کمک یک کلاس واحد برای هر دو نوع ورودی بهبود می یابند که چیدمان و رفتار عناصر HTML آنها را بهبود می بخشد . چک باکس ها برای انتخاب یک یا چند گزینه در یک لیست هستند، در حالی که رادیوها برای انتخاب یک گزینه از بسیاری از گزینه ها هستند.

چک باکس های غیرفعال و رادیوها پشتیبانی می شوند. این disabledویژگی برای کمک به نشان دادن وضعیت ورودی، رنگ روشن تری اعمال می کند.

چک باکس ها و دکمه های رادیویی از اعتبار سنجی فرم مبتنی بر 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">
  <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><div>s یا تقریباً هر عنصر دیگری استفاده کنید.

<form>
  <div class="form-group">
    <label for="formGroupExampleInput">Example label</label>
    <input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input placeholder">
  </div>
  <div class="form-group">
    <label for="formGroupExampleInput2">Another label</label>
    <input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input placeholder">
  </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">
    </div>
    <div class="form-group col-md-6">
      <label for="inputPassword4">Password</label>
      <input type="password" class="form-control" id="inputPassword4">
    </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">
    </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">
    </div>
  </div>
  <fieldset class="form-group row">
    <legend class="col-form-label col-sm-2 float-sm-left 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>
  </fieldset>
  <div class="form-group row">
    <div class="col-sm-10 offset-sm-2">
      <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>

اندازه ستون

همانطور که در مثال های قبلی نشان داده شد، سیستم شبکه ما به شما امکان می دهد هر تعداد .cols را در یک .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 sr-only" 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و اضافه کردن حاشیه بالا برای فاصله آسان از ورودی های بالا.

رمز عبور شما باید 8 تا 20 کاراکتر باشد، حروف و اعداد داشته باشد و نباید دارای فاصله، کاراکترهای خاص یا ایموجی باشد.
<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>یا چیز دیگری) با چیزی بیشتر از یک کلاس کاربردی استفاده کند.

باید 8-20 کاراکتر باشد.
<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>
    <legend>Disabled fieldset example</legend>
    <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-group">
      <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>
اخطار با لنگرها

مرورگرها همه کنترل‌های فرم بومی ( <input>، <select>و <button>عناصر) داخل a <fieldset disabled>را غیرفعال می‌کنند و از تعاملات صفحه‌کلید و ماوس روی آن‌ها جلوگیری می‌کنند.

با این حال، اگر فرم شما شامل عناصر دکمه مانند سفارشی نیز باشد <a ... class="btn btn-*">، به آنها فقط سبکی از pointer-events: none. همانطور که در بخش مربوط به حالت غیرفعال برای دکمه‌ها (و به طور خاص در بخش فرعی عناصر لنگر) ذکر شد، این ویژگی CSS هنوز استاندارد نشده است و به طور کامل در اینترنت اکسپلورر 10 پشتیبانی نمی‌شود. کنترل‌های مبتنی بر لنگر نیز همچنان وجود خواهند داشت. قابل تمرکز و قابل اجرا با استفاده از صفحه کلید. شما باید این کنترل‌ها را به‌صورت دستی با افزودن تغییر دهید tabindex="-1"تا از دریافت فوکوس جلوگیری کنید و aria-disabled="disabled"وضعیت آنها را به فناوری‌های کمکی نشان دهید.

سازگاری بین مرورگرها

در حالی که بوت استرپ این سبک‌ها را در همه مرورگرها اعمال می‌کند، اینترنت اکسپلورر 11 و پایین‌تر به طور کامل از disabledویژگی روی یک پشتیبانی نمی‌کند <fieldset>. از جاوا اسکریپت سفارشی برای غیرفعال کردن مجموعه فیلدها در این مرورگرها استفاده کنید.

اعتبار سنجی

با اعتبارسنجی فرم HTML5 بازخورد ارزشمند و قابل اجرا را به کاربران خود ارائه دهید - در همه مرورگرهای پشتیبانی شده ما موجود است. بازخورد اعتبارسنجی پیش‌فرض مرورگر را انتخاب کنید یا پیام‌های سفارشی را با کلاس‌های داخلی و جاوا اسکریپت شروع‌کننده پیاده‌سازی کنید.

ما می‌دانیم که در حال حاضر سبک‌های اعتبارسنجی سفارشی و راهنمایی‌های ابزار سمت مشتری در دسترس نیستند، زیرا در معرض فناوری‌های کمکی نیستند. در حالی که ما روی یک راه حل کار می کنیم، توصیه می کنیم از گزینه سمت سرور یا روش اعتبارسنجی مرورگر پیش فرض استفاده کنید.

چگونه کار می کند

در اینجا نحوه عملکرد اعتبار فرم با بوت استرپ آمده است:

  • اعتبار سنجی فرم HTML از طریق دو کلاس شبه CSS :invalidو :valid. برای عناصر <input>،، <select>و کاربرد <textarea>دارد.
  • بوت استرپ دامنه :invalidو :validاستایل ها را به کلاس والد .was-validated، که معمولاً برای کلاس اعمال می شود، اعمال می کند <form>. در غیر این صورت، هر فیلد الزامی بدون مقدار در بارگذاری صفحه نامعتبر نشان داده می شود. به این ترتیب، می توانید انتخاب کنید که چه زمانی آنها را فعال کنید (معمولاً پس از ارسال فرم).
  • برای بازنشانی ظاهر فرم (به عنوان مثال، در مورد ارسال‌های فرم پویا با استفاده از AJAX)، پس از ارسال دوباره .was-validatedکلاس را از کلاس حذف کنید.<form>
  • به عنوان یک بازگشت، .is-invalidو .is-validکلاس ها ممکن است به جای شبه کلاس ها برای اعتبارسنجی سمت سرور استفاده شوند. آنها نیازی به .was-validatedکلاس والدین ندارند.
  • به دلیل محدودیت‌هایی که در نحوه عملکرد CSS وجود دارد، ما نمی‌توانیم (در حال حاضر) سبک‌هایی را <label>که قبل از کنترل فرم در DOM قرار می‌گیرد بدون کمک جاوا اسکریپت سفارشی اعمال کنیم.
  • همه مرورگرهای مدرن از API اعتبارسنجی محدودیت پشتیبانی می‌کنند، مجموعه‌ای از روش‌های جاوا اسکریپت برای اعتبارسنجی کنترل‌های فرم.
  • پیام‌های بازخورد ممکن است از پیش‌فرض‌های مرورگر (برای هر مرورگر متفاوت، و از طریق CSS غیرقابل استایل) یا سبک‌های بازخورد سفارشی ما با HTML و CSS اضافی استفاده کنند.
  • می توانید پیام های اعتبار سفارشی را setCustomValidityدر جاوا اسکریپت ارائه دهید.

با در نظر گرفتن این موضوع، دموهای زیر را برای سبک‌های اعتبارسنجی فرم سفارشی، کلاس‌های سمت سرور اختیاری و پیش‌فرض‌های مرورگر در نظر بگیرید.

سبک های سفارشی

برای پیام‌های اعتبارسنجی فرم بوت استرپ سفارشی، باید novalidateویژگی بولین را به خود اضافه کنید <form>. با این کار نکات ابزار بازخورد پیش‌فرض مرورگر غیرفعال می‌شود، اما همچنان دسترسی به APIهای تأیید فرم در جاوا اسکریپت را فراهم می‌کند. سعی کنید فرم زیر را ارسال کنید؛ جاوا اسکریپت ما دکمه ارسال را قطع می کند و بازخورد را به شما ارسال می کند. هنگام تلاش برای ارسال، سبک‌ها :invalidو :validسبک‌های اعمال شده روی کنترل‌های فرم خود را مشاهده خواهید کرد.

سبک‌های بازخورد سفارشی، رنگ‌های سفارشی، حاشیه‌ها، سبک‌های فوکوس و نمادهای پس‌زمینه را برای ارتباط بهتر بازخورد اعمال می‌کنند. نمادهای پس‌زمینه برای <select>s فقط با .custom-selectو نه در دسترس هستند .form-control.

به نظر خوب میاد!
به نظر خوب میاد!
لطفا یک شهر معتبر ارائه دهید.
لطفاً یک حالت معتبر انتخاب کنید.
لطفا یک فایل فشرده معتبر ارائه دهید.
قبل از ارسال باید موافقت کنید.
<form class="needs-validation" novalidate>
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="validationCustom01">First name</label>
      <input type="text" class="form-control" id="validationCustom01" value="Mark" required>
      <div class="valid-feedback">
        Looks good!
      </div>
    </div>
    <div class="col-md-6 mb-3">
      <label for="validationCustom02">Last name</label>
      <input type="text" class="form-control" id="validationCustom02" value="Otto" required>
      <div class="valid-feedback">
        Looks good!
      </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" required>
      <div class="invalid-feedback">
        Please provide a valid city.
      </div>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationCustom04">State</label>
      <select class="custom-select" id="validationCustom04" required>
        <option selected disabled value="">Choose...</option>
        <option>...</option>
      </select>
      <div class="invalid-feedback">
        Please select 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" 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-6 mb-3">
      <label for="validationDefault01">First name</label>
      <input type="text" class="form-control" id="validationDefault01" value="Mark" required>
    </div>
    <div class="col-md-6 mb-3">
      <label for="validationDefault02">Last name</label>
      <input type="text" class="form-control" id="validationDefault02" value="Otto" required>
    </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" required>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationDefault04">State</label>
      <select class="custom-select" id="validationDefault04" required>
        <option selected disabled value="">Choose...</option>
        <option>...</option>
      </select>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationDefault05">Zip</label>
      <input type="text" class="form-control" id="validationDefault05" 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با این کلاس ها نیز پشتیبانی می شود.

برای فیلدهای نامعتبر، مطمئن شوید که بازخورد/پیام خطای نامعتبر با فیلد فرم مربوطه با استفاده از aria-describedby. این ویژگی اجازه می دهد تا بیش از یک idمورد ارجاع داده شود، در صورتی که فیلد قبلاً به متن فرم اضافی اشاره کند.

به نظر خوب میاد!
به نظر خوب میاد!
لطفا یک شهر معتبر ارائه دهید.
لطفاً یک حالت معتبر انتخاب کنید.
لطفا یک فایل فشرده معتبر ارائه دهید.
قبل از ارسال باید موافقت کنید.
<form>
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="validationServer01">First name</label>
      <input type="text" class="form-control is-valid" id="validationServer01" value="Mark" required>
      <div class="valid-feedback">
        Looks good!
      </div>
    </div>
    <div class="col-md-6 mb-3">
      <label for="validationServer02">Last name</label>
      <input type="text" class="form-control is-valid" id="validationServer02" value="Otto" required>
      <div class="valid-feedback">
        Looks good!
      </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" aria-describedby="validationServer03Feedback" required>
      <div id="validationServer03Feedback" class="invalid-feedback">
        Please provide a valid city.
      </div>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationServer04">State</label>
      <select class="custom-select is-invalid" id="validationServer04" aria-describedby="validationServer04Feedback" required>
        <option selected disabled value="">Choose...</option>
        <option>...</option>
      </select>
      <div id="validationServer04Feedback" class="invalid-feedback">
        Please select 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" aria-describedby="validationServer05Feedback" required>
      <div id="validationServer05Feedback" 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" aria-describedby="invalidCheck3Feedback" required>
      <label class="form-check-label" for="invalidCheck3">
        Agree to terms and conditions
      </label>
      <div  id="invalidCheck3Feedback" class="invalid-feedback">
        You must agree before submitting.
      </div>
    </div>
  </div>
  <button class="btn btn-primary" type="submit">Submit form</button>
</form>

عناصر پشتیبانی شده

سبک‌های اعتبارسنجی برای کنترل‌ها و مؤلفه‌های فرم زیر در دسترس هستند:

  • <input>s و <textarea>s با.form-control
  • <select>با .form-controlیا.custom-select
  • .form-checkس
  • .custom-checkboxs و .custom-radios
  • .custom-file
لطفاً یک پیام در قسمت متن وارد کنید.
مثال متن بازخورد نامعتبر
نمونه بیشتر متن بازخورد نامعتبر
مثال بازخورد انتخاب سفارشی نامعتبر
مثال بازخورد فایل سفارشی نامعتبر
@
نمونه بازخورد گروه ورودی نامعتبر
نمونه بازخورد گروه ورودی نامعتبر
نمونه بازخورد گروه ورودی نامعتبر
<form class="was-validated">
  <div class="mb-3">
    <label for="validationTextarea">Textarea</label>
    <textarea class="form-control is-invalid" id="validationTextarea" placeholder="Required example textarea" required></textarea>
    <div class="invalid-feedback">
      Please enter a message in the textarea.
    </div>
  </div>

  <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="mb-3">
    <select class="custom-select" required>
      <option value="">Choose...</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 mb-3">
    <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>

  <div class="mb-3">
    <div class="input-group is-invalid">
      <div class="input-group-prepend">
        <span class="input-group-text" id="validatedInputGroupPrepend">@</span>
      </div>
      <input type="text" class="form-control is-invalid" aria-describedby="validatedInputGroupPrepend" required>
    </div>
    <div class="invalid-feedback">
      Example invalid input group feedback
    </div>
  </div>

  <div class="mb-3">
    <div class="input-group is-invalid">
      <div class="input-group-prepend">
        <label class="input-group-text" for="validatedInputGroupSelect">Options</label>
      </div>
      <select class="custom-select" id="validatedInputGroupSelect" required>
        <option value="">Choose...</option>
        <option value="1">One</option>
        <option value="2">Two</option>
        <option value="3">Three</option>
      </select>
    </div>
    <div class="invalid-feedback">
      Example invalid input group feedback
    </div>
  </div>

  <div class="input-group is-invalid">
    <div class="custom-file">
      <input type="file" class="custom-file-input" id="validatedInputGroupCustomFile" required>
      <label class="custom-file-label" for="validatedInputGroupCustomFile">Choose file...</label>
    </div>
    <div class="input-group-append">
       <button class="btn btn-outline-secondary" type="button">Button</button>
    </div>
  </div>
  <div class="invalid-feedback">
    Example invalid input group feedback
  </div>
</form>

نکات ابزار

اگر طرح‌بندی فرم شما اجازه می‌دهد، می‌توانید کلاس‌ها را با .{valid|invalid}-feedbackکلاس‌ها تعویض کنید .{valid|invalid}-tooltipتا بازخورد اعتبارسنجی را در یک راهنمای ابزار سبک‌دهی شده نشان دهید. حتماً یک والد position: relativeبرای موقعیت‌یابی راهنمای ابزار همراه داشته باشید. در مثال زیر، کلاس‌های ستون ما قبلاً این مورد را دارند، اما پروژه شما ممکن است به یک راه‌اندازی جایگزین نیاز داشته باشد.

به نظر خوب میاد!
به نظر خوب میاد!
لطفا یک شهر معتبر ارائه دهید.
لطفاً یک حالت معتبر انتخاب کنید.
لطفا یک فایل فشرده معتبر ارائه دهید.
<form class="needs-validation" novalidate>
  <div class="form-row">
    <div class="col-md-6 mb-3">
      <label for="validationTooltip01">First name</label>
      <input type="text" class="form-control" id="validationTooltip01" value="Mark" required>
      <div class="valid-tooltip">
        Looks good!
      </div>
    </div>
    <div class="col-md-6 mb-3">
      <label for="validationTooltip02">Last name</label>
      <input type="text" class="form-control" id="validationTooltip02" value="Otto" required>
      <div class="valid-tooltip">
        Looks good!
      </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" required>
      <div class="invalid-tooltip">
        Please provide a valid city.
      </div>
    </div>
    <div class="col-md-3 mb-3">
      <label for="validationTooltip04">State</label>
      <select class="custom-select" id="validationTooltip04" required>
        <option selected disabled value="">Choose...</option>
        <option>...</option>
      </select>
      <div class="invalid-tooltip">
        Please select 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" required>
      <div class="invalid-tooltip">
        Please provide a valid zip.
      </div>
    </div>
  </div>
  <button class="btn btn-primary" type="submit">Submit form</button>
</form>

سفارشی کردن

حالت های اعتبارسنجی را می توان از طریق Sass با $form-validation-statesنقشه سفارشی کرد. _variables.scssاین نقشه Sass که در فایل ما قرار دارد، برای ایجاد حالت های پیش فرض valid/ invalidاعتبار سنجی حلقه زده می شود. شامل یک نقشه تو در تو برای سفارشی کردن رنگ و نماد هر ایالت است. در حالی که هیچ حالت دیگری توسط مرورگرها پشتیبانی نمی شود، کسانی که از سبک های سفارشی استفاده می کنند می توانند به راحتی بازخورد فرم پیچیده تری را اضافه کنند.

لطفاً توجه داشته باشید که ما سفارشی کردن این مقادیر را بدون تغییر form-validation-statemixin توصیه نمی کنیم.

// Sass map from `_variables.scss`
// Override this and recompile your Sass to generate different states
$form-validation-states: map-merge(
  (
    "valid": (
      "color": $form-feedback-valid-color,
      "icon": $form-feedback-icon-valid
    ),
    "invalid": (
      "color": $form-feedback-invalid-color,
      "icon": $form-feedback-icon-invalid
    )
  ),
  $form-validation-states
);

// Loop from `_forms.scss`
// Any modifications to the above Sass map will be reflected in your compiled
// CSS via this loop.
@each $state, $data in $form-validation-states {
  @include form-validation-state($state, map-get($data, color), map-get($data, icon));
}

اعتبار سنجی گروه ورودی

برای تشخیص اینکه چه عناصری به گوشه های گرد در داخل یک گروه ورودی با اعتبارسنجی نیاز دارند، یک گروه ورودی به یک .has-validationکلاس اضافی نیاز دارد.

<div class="input-group has-validation">
  <div class="input-group-prepend">
    <span class="input-group-text">@</span>
  </div>
  <input type="text" class="form-control" required>
  <div class="invalid-feedback">
    Please choose a username.
  </div>
</div>
@
لطفا یک نام کاربری انتخاب کنید

فرم های سفارشی

برای سفارشی سازی بیشتر و سازگاری بین مرورگرها، از عناصر فرم کاملاً سفارشی ما برای جایگزینی پیش فرض های مرورگر استفاده کنید. آنها بر روی نشانه‌گذاری معنایی و قابل دسترس ساخته شده‌اند، بنابراین جایگزینی محکم برای هر گونه کنترل فرم پیش‌فرض هستند.

چک باکس ها و رادیوها

هر چک باکس و رادیو <input>و <label>جفت شدن در یک علامت پیچیده شده است <div>تا کنترل سفارشی ما ایجاد شود. از نظر ساختاری، این همان رویکرد پیش فرض ما .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="customRadioInline" 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="customRadioInline" 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="customCheckDisabled1" disabled>
  <label class="custom-control-label" for="customCheckDisabled1">Check this custom checkbox</label>
</div>

<div class="custom-control custom-radio">
  <input type="radio" name="radioDisabled" id="customRadioDisabled2" class="custom-control-input" disabled>
  <label class="custom-control-label" for="customRadioDisabled2">Toggle this custom radio</label>
</div>

سوئیچ ها

یک سوئیچ دارای نشانه گذاری یک چک باکس سفارشی است اما از .custom-switchکلاس برای ارائه یک سوئیچ تعویض استفاده می کند. سوئیچ ها نیز از این disabledویژگی پشتیبانی می کنند.

<div class="custom-control custom-switch">
  <input type="checkbox" class="custom-control-input" id="customSwitch1">
  <label class="custom-control-label" for="customSwitch1">Toggle this switch element</label>
</div>
<div class="custom-control custom-switch">
  <input type="checkbox" class="custom-control-input" disabled id="customSwitch2">
  <label class="custom-control-label" for="customSwitch2">Disabled switch element</label>
</div>

منو را انتخاب کنید

منوهای سفارشی <select>فقط به یک کلاس سفارشی نیاز دارند .custom-selectتا سبک های سفارشی را فعال کنند. سبک های سفارشی به <select>ظاهر اولیه محدود می شوند و <option>به دلیل محدودیت های مرورگر نمی توانند s را تغییر دهند.

<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>

دامنه

<input type="range">ایجاد کنترل های سفارشی .custom-rangeبا آهنگ (پس زمینه) و انگشت شست (مقدار) هر دو به گونه ای طراحی شده اند که در مرورگرها یکسان ظاهر شوند. از آنجایی که فقط اینترنت اکسپلورر و فایرفاکس از "پر کردن" مسیر خود از سمت چپ یا راست انگشت شست به عنوان وسیله ای برای نشان دادن بصری پیشرفت پشتیبانی می کنند، ما در حال حاضر از آن پشتیبانی نمی کنیم.

<label for="customRange1">Example range</label>
<input type="range" class="custom-range" id="customRange1">

ورودی های محدوده دارای مقادیر ضمنی برای minو max0و 100هستند. شما می توانید مقادیر جدیدی را برای کسانی که از ویژگی های minand استفاده می کنند تعیین کنید max.

<label for="customRange2">Example range</label>
<input type="range" class="custom-range" min="0" max="5" id="customRange2">

به طور پیش فرض، محدوده ورودی "snap" را به مقادیر صحیح وارد می کند. برای تغییر این می توانید stepمقداری را مشخص کنید. در مثال زیر تعداد مراحل را با استفاده از 2 برابر می کنیم step="0.5".

<label for="customRange3">Example range</label>
<input type="range" class="custom-range" min="0" max="5" step="0.5" id="customRange3">

مرورگر فایل

افزونه توصیه شده برای متحرک سازی ورودی فایل سفارشی: bs-custom-file-input ، این همان چیزی است که ما در حال حاضر اینجا در اسناد خود استفاده می کنیم.

ورودی فایل در میان دسته‌ای است که به جاوا اسکریپت اضافی نیاز دارد، اگر می‌خواهید آن‌ها را با انتخاب فایل کاربردی… و متن نام فایل انتخاب‌شده وصل کنید.

<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 widthand heighton را <input>برای فاصله مناسب برای محتوای اطراف اعلام می کنیم.

ترجمه یا سفارشی کردن رشته ها با SCSS

شبه :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 در میان روش های دیگر انجام داد.

ترجمه یا سفارشی سازی رشته ها با HTML

Bootstrap همچنین راهی برای ترجمه متن «Browse» در HTML با data-browseویژگی‌هایی که می‌تواند به برچسب ورودی سفارشی اضافه شود (به عنوان مثال در هلندی) ارائه می‌کند:

<div class="custom-file">
  <input type="file" class="custom-file-input" id="customFileLangHTML">
  <label class="custom-file-label" for="customFileLangHTML" data-browse="Bestand kiezen">Voeg je document toe</label>
</div>