مثالها و دستورالعملهای استفاده برای سبکهای کنترل فرم، گزینههای طرحبندی، و اجزای سفارشی برای ایجاد طیف گستردهای از فرمها.
بررسی اجمالی
کنترلهای فرم Bootstrap در سبکهای فرم Rebooted ما با کلاسها گسترش مییابد. از این کلاسها برای انتخاب نمایشگرهای سفارشیشده آنها برای رندر سازگارتر در مرورگرها و دستگاهها استفاده کنید.
مطمئن شوید که از یک typeویژگی مناسب در همه ورودیها استفاده میکنید (مثلاً emailبرای آدرس ایمیل یا numberاطلاعات عددی) تا از کنترلهای ورودی جدیدتر مانند تأیید ایمیل، انتخاب شماره و موارد دیگر استفاده کنید.
در اینجا یک مثال سریع برای نشان دادن سبک های فرم بوت استرپ آورده شده است. برای مستندات مربوط به کلاس های مورد نیاز، طرح بندی فرم و موارد دیگر به خواندن ادامه دهید.
کنترل های فرم
کنترلهای فرم متنی - مانند <input>s، <select>s و <textarea>s - با .form-controlکلاس استایلبندی میشوند. شامل سبک هایی برای ظاهر کلی، حالت فوکوس، اندازه و موارد دیگر است.
حتماً فرمهای سفارشی ما را برای استایل بیشتر بررسی <select>کنید.
برای ورودی فایل، آن را .form-controlبا .form-control-file.
سایز بندی
با استفاده از کلاس هایی مانند .form-control-lgو ارتفاع را تنظیم کنید .form-control-sm.
فقط خواندنی
readonlyبرای جلوگیری از تغییر مقدار ورودی�� ویژگی بولی را روی یک ورودی اضافه کنید . ورودیهای فقط خواندنی سبکتر به نظر میرسند (درست مانند ورودیهای غیرفعال)، اما مکاننمای استاندارد را حفظ میکنند.
متن ساده فقط خواندنی
اگر میخواهید <input readonly>عناصری در فرم خود بهصورت متن ساده استایلبندی شده باشند، از .form-control-plaintextکلاس برای حذف استایل پیشفرض فیلد فرم و حفظ حاشیه و بالشتک صحیح استفاده کنید.
ورودی های محدوده
ورودی های محدوده قابل پیمایش افقی را با استفاده از .form-control-range.
چک باکس ها و رادیوها
.form-checkچک باکس های پیش فرض و رادیوها با کمک یک کلاس واحد برای هر دو نوع ورودی بهبود می یابند که چیدمان و رفتار عناصر HTML آنها را بهبود می بخشد . چک باکس ها برای انتخاب یک یا چند گزینه در یک لیست هستند، در حالی که رادیوها برای انتخاب یک گزینه از بسیاری از گزینه ها هستند.
چک باکسها و رادیوهای غیرفعال پشتیبانی میشوند، اما برای ارائه not-allowedمکاننما در شناور والد <label>، باید disabledویژگی را به آن اضافه کنید .form-check-input. مشخصه غیرفعال رنگ روشن تری اعمال می کند تا به نشان دادن وضعیت ورودی کمک کند.
چک باکس ها و رادیوها برای پشتیبانی از اعتبارسنجی فرم مبتنی بر HTML و ارائه برچسب های مختصر و قابل دسترس ساخته شده اند. به این ترتیب، <input>s و <label>s ما عناصر خواهر و برادر هستند در مقابل یک <input>درون یک <label>. این کمی پرمخاطب تر است زیرا باید مشخص کنید idو forویژگی هایی را برای مرتبط کردن <input>و <label>.
پیشفرض (انباشته)
بهطور پیشفرض، هر تعدادی از چک باکسها و رادیوهایی که خواهر و برادر فوری هستند به صورت عمودی روی هم قرار میگیرند و با فاصله مناسب با هم قرار .form-checkمیگیرند.
درون خطی
کادرهای انتخاب یا رادیوها را در همان ردیف افقی با افزودن .form-check-inlineبه هر یک گروه بندی کنید .form-check.
بدون برچسب
.position-staticبه ورودیهایی اضافه کنید .form-checkکه متن برچسبی ندارند. به یاد داشته باشید که هنوز نوعی برچسب برای فناوری های کمکی ارائه دهید (به عنوان مثال، استفاده از aria-label).
چیدمان
از آنجایی که Bootstrap display: blockو width: 100%تقریباً برای همه کنترلهای فرم ما اعمال میشود، فرمها بهطور پیشفرض به صورت عمودی قرار میگیرند. می توان از کلاس های اضافی برای تغییر این طرح بر اساس هر فرم استفاده کرد.
گروه ها را تشکیل دهید
کلاس .form-groupساده ترین راه برای افزودن ساختار به فرم ها است. یک کلاس منعطف ارائه میکند که گروهبندی مناسب برچسبها، کنترلها، متن راهنما اختیاری و پیامهای تایید فرم را تشویق میکند. به طور پیشفرض فقط اعمال margin-bottomمیشود، اما در .form-inlineصورت نیاز، سبکهای اضافی را انتخاب میکند. از آن با <fieldset>s، <div>s یا تقریباً هر عنصر دیگری استفاده کنید.
شبکه فرم
فرم های پیچیده تری را می توان با استفاده از کلاس های گرید ما ساخت. از این ها برای طرح بندی فرم هایی که نیاز به ستون های متعدد، عرض های متنوع و گزینه های تراز اضافی دارند استفاده کنید.
ردیف را تشکیل دهید
همچنین میتوانید با .row، .form-rowتغییری از ردیف شبکه استاندارد ما که ناودان ستونهای پیشفرض را برای طرحبندیهای فشردهتر و فشردهتر جایگزین میکند.
طرحبندیهای پیچیدهتری را نیز میتوان با سیستم شبکه ایجاد کرد.
فرم افقی
.rowبا افزودن کلاس برای تشکیل گروه ها و استفاده از .col-*-*کلاس ها برای تعیین عرض برچسب ها و کنترل های خود، فرم های افقی را با شبکه ایجاد کنید. حتماً به s .col-form-labelخود <label>نیز اضافه کنید تا به صورت عمودی با کنترلهای فرم مرتبط خود در مرکز قرار گیرند.
گاهی اوقات، ممکن است لازم باشد از ابزارهای حاشیه یا padding استفاده کنید تا تراز کامل مورد نیاز خود را ایجاد کنید. به عنوان مثال، ما padding-topبرچسب ورودی های رادیویی انباشته خود را حذف کرده ایم تا خط پایه متن را بهتر تراز کنیم.
اندازه برچسب فرم افقی
حتماً از .col-form-label-smیا .col-form-label-lgبه <label>s یا s خود استفاده کنید تا اندازه و <legend>را به درستی دنبال کنید ..form-control-lg.form-control-sm
اندازه ستون
همانطور که در مثال های قبلی نشان داده شد، سیستم شبکه ما به شما امکان می دهد هر تعداد .cols را در یک .rowیا قرار دهید .form-row. آنها عرض موجود را به طور مساوی بین خود تقسیم می کنند. همچنین میتوانید زیرمجموعهای از ستونهای خود را انتخاب کنید تا فضای کمتر یا بیشتر را اشغال کند، در حالی که باقیماندهها .colبقیه را با کلاسهای ستونی خاص مانند .col-7.
اندازه گیری خودکار
مثال زیر از یک ابزار flexbox استفاده میکند تا محتویات را به صورت عمودی در مرکز قرار دهد و آن را تغییر دهد .colتا .col-autoستونهای شما فقط به اندازهای که فضای لازم را اشغال کنند. به عبارت دیگر، ستون خود را بر اساس محتویات اندازه می گیرد.
سپس میتوانید آن را یک بار دیگر با کلاسهای ستونی با اندازه خاص، مجدداً مخلوط کنید.
از .form-inlineکلاس برای نمایش مجموعه ای از برچسب ها، کنترل های فرم و دکمه ها در یک ردیف افقی استفاده کنید. کنترلهای فرم در فرمهای درون خطی کمی از حالتهای پیشفرض آنها متفاوت است.
کنترلها عبارتند از display: flex، هر فضای سفید HTML را جمع میکنند و به شما امکان میدهند کنترل تراز را با ابزارهای فاصله و flexbox ارائه دهید .
کنترلها و گروههای ورودی width: autoبرای لغو پیشفرض Bootstrap دریافت میکنند width: 100%.
کنترلها فقط در ویوپورتهایی بهخط ظاهر میشوند که حداقل 576 پیکسل عرض دارند تا درگاههای دید باریک در دستگاههای تلفن همراه را در نظر بگیرند.
ممکن است لازم باشد به صورت دستی عرض و تراز کنترلهای فرم را با ابزارهای فاصله (مانند شکل زیر) بررسی کنید. در نهایت، مطمئن شوید که همیشه یک علامت را <label>با هر کنترل فرم اضافه کنید، حتی اگر لازم است آن را از بازدیدکنندگان غیرصفحهخوان پنهان کنید .sr-only.
کنترلها و انتخابهای فرم سفارشی نیز پشتیبانی میشوند.
جایگزین هایی برای برچسب های پنهان
اگر برای هر ورودی برچسبی وارد نکنید، فناوریهای کمکی مانند صفحهخوانها با فرمهای شما مشکل خواهند داشت. برای این فرمهای درون خطی، میتوانید برچسبها را با استفاده از .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 کاراکتر باشد، حروف و اعداد داشته باشد و نباید دارای فاصله، کاراکترهای خاص یا ایموجی باشد.
متن درون خطی می تواند از هر عنصر HTML درون خطی معمولی (خواه یک <small>, <span>یا چیز دیگری) با چیزی بیشتر از یک کلاس کاربردی استفاده کند.
فرم های غیر فعال
disabledبرای جلوگیری از تعامل کاربر و سبکتر نشان دادن آن، ویژگی بولین را روی ورودی اضافه کنید.
برای غیرفعال کردن تمام کنترلهای داخل ، disabledویژگی را به a اضافه کنید.<fieldset>
اخطار با لنگرها
بهطور پیشفرض، مرورگرها تمام کنترلهای فرم ( <input>و عناصر) داخل a را غیرفعال میکنند <select>و از تعاملات صفحهکلید و ماوس روی آنها جلوگیری میکنند. با این حال، اگر فرم شما شامل عناصر نیز باشد، به آنها فقط سبکی از . همانطور که در بخش مربوط به حالت غیرفعال برای دکمهها (و به طور خاص در بخش فرعی عناصر لنگر) ذکر شد، این ویژگی CSS هنوز استاندارد نشده است و به طور کامل در اینترنت اکسپلورر 10 پشتیبانی نمیشود، و مانع از دسترسی کاربران صفحهکلید نمیشود. قادر به تمرکز یا فعال کردن این پیوندها است. بنابراین برای ایمن بودن، از جاوا اسکریپت سفارشی برای غیرفعال کردن چنین پیوندهایی استفاده کنید.<button><fieldset disabled><a ... class="btn btn-*">pointer-events: none
سازگاری بین مرورگرها
در حالی که بوت استرپ این سبکها را در همه مرورگرها اعمال میکند، اینترنت اکسپلورر 11 و پایینتر به طور کامل از disabledویژگی روی یک پشتیبانی نمیکند <fieldset>. از جاوا اسکریپت سفارشی برای غیرفعال کردن مجموعه فیلدها در این مرورگرها استفاده کنید.
اعتبار سنجی
با اعتبارسنجی فرم HTML5 بازخورد ارزشمند و قابل اجرا را به کاربران خود ارائه دهید - در همه مرورگرهای پشتیبانی شده ما موجود است. بازخورد اعتبارسنجی پیشفرض مرورگر را انتخاب کنید یا پیامهای سفارشی را با کلاسهای داخلی و جاوا اسکریپت شروعکننده پیادهسازی کنید.
ما در حال حاضر استفاده از سبکهای اعتبارسنجی سفارشی را توصیه میکنیم، زیرا پیامهای تأیید اعتبار پیشفرض مرورگر بومی به طور مداوم در معرض فناوریهای کمکی در همه مرورگرها (به ویژه Chrome در رایانه رومیزی و تلفن همراه) قرار نمیگیرند.
چگونه کار می کند
در اینجا نحوه عملکرد اعتبار فرم با بوت استرپ آمده است:
اعتبار سنجی فرم 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سبکهای اعمال شده روی کنترلهای فرم خود را مشاهده خواهید کرد.
پیش فرض های مرورگر
علاقه ای به پیام های بازخورد تأیید اعتبار سفارشی یا نوشتن جاوا اسکریپت برای تغییر رفتارهای فرم ندارید؟ خیلی خوب است، می توانید از پیش فرض های مرورگر استفاده کنید. سعی کنید فرم زیر را ارسال کنید. بسته به مرورگر و سیستم عامل خود، سبک کمی متفاوت از بازخورد را مشاهده خواهید کرد.
در حالی که این سبکهای بازخورد را نمیتوان با CSS سبکسازی کرد، همچنان میتوانید متن بازخورد را از طریق جاوا اسکریپت سفارشی کنید.
سمت سرور
توصیه می کنیم از اعتبار سنجی سمت مشتری استفاده کنید، اما در صورت نیاز به سمت سرور، می توانید فیلدهای فرم نامعتبر و معتبر را با .is-invalidو نشان دهید .is-valid. توجه داشته باشید که .invalid-feedbackبا این کلاس ها نیز پشتیبانی می شود.
عناصر پشتیبانی شده
فرمهای مثال ما s متنی بومی را <input>در بالا نشان میدهند، اما سبکهای اعتبارسنجی فرم برای کنترلهای فرم سفارشی ما نیز موجود است.
نکات ابزار
اگر طرحبندی فرم شما اجازه میدهد، میتوانید کلاسها را با .{valid|invalid}-feedbackکلاسها تعویض کنید .{valid|invalid}-tooltipتا بازخورد اعتبارسنجی را در یک راهنمای ابزار سبکدهی شده نشان دهید. حتماً یک والد position: relativeبرای موقعیتیابی راهنمای ابزار همراه داشته باشید. در مثال زیر، کلاسهای ستون ما قبلاً این مورد را دارند، اما پروژه شما ممکن است به یک راهاندازی جایگزین نیاز داشته باشد.
فرم های سفارشی
برای سفارشی سازی بیشتر و سازگاری بین مرورگرها، از عناصر فرم کاملاً سفارشی ما برای جایگزینی پیش فرض های مرورگر استفاده کنید. آنها بر روی نشانهگذاری معنایی و قابل دسترس ساخته شدهاند، بنابراین جایگزینی محکم برای هر گونه کنترل فرم پیشفرض هستند.
چک باکس ها و رادیوها
<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 استفاده میکنیم. این بهترین کنترل را برای استایل و موقعیت یابی در مرورگرها و دستگاه ها در اختیار ما قرار می دهد.
چک باکس ها
چک باکس های سفارشی همچنین می توانند از :indeterminateکلاس شبه استفاده کنند که به صورت دستی از طریق جاوا اسکریپت تنظیم شود (هیچ ویژگی HTML موجود برای تعیین آن وجود ندارد).
اگر از jQuery استفاده می کنید، چیزی شبیه به این کافی است:
رادیوها
درون خطی
معلول
چک باکس های سفارشی و رادیوها نیز می توانند غیرفعال شوند. disabledویژگی Boolean را به آن اضافه کنید <input>و نشانگر سفارشی و توضیحات برچسب به طور خودکار استایل دهی می شود.
منو را انتخاب کنید
منوهای سفارشی <select>فقط به یک کلاس سفارشی نیاز دارند .custom-selectتا سبک های سفارشی را فعال کنند. سبک های سفارشی به <select>ظاهر اولیه محدود می شوند و <option>به دلیل محدودیت های مرورگر نمی توانند s را تغییر دهند.
همچنین میتوانید از میان انتخابهای سفارشی کوچک و بزرگ انتخاب کنید تا با ورودیهای متنی با اندازه مشابه مطابقت داشته باشد.
ویژگی multipleنیز پشتیبانی می شود:
همانطور که sizeویژگی است:
دامنه
<input type="range">ایجاد کنترل های سفارشی .custom-rangeبا آهنگ (پس زمینه) و انگشت شست (مقدار) هر دو به گونه ای طراحی شده اند که در مرورگرها یکسان ظاهر شوند. از آنجایی که فقط اینترنت اکسپلورر و فایرفاکس از "پر کردن" مسیر خود از سمت چپ یا راست انگشت شست به عنوان وسیله ای برای نشان دادن بصری پیشرفت پشتیبانی می کنند، ما در حال حاضر از آن پشتیبانی نمی کنیم.
ورودی های محدوده دارای مقادیر ضمنی برای minو max— 0و 100هستند. شما می توانید مقادیر جدیدی را برای کسانی که از ویژگی های minand استفاده می کنند تعیین کنید max.
به طور پیش فرض، محدوده ورودی "snap" را به مقادیر صحیح وارد می کند. برای تغییر این می توانید stepمقداری را مشخص کنید. در مثال زیر تعداد مراحل را با استفاده از 2 برابر می کنیم step="0.5".
مرورگر فایل
ورودی فایل در میان دستهای است که به جاوا اسکریپت اضافی نیاز دارد، اگر میخواهید آنها را با انتخاب فایل کاربردی… و متن نام فایل انتخابشده وصل کنید.
فایل پیش فرض را <input>از طریق مخفی می کنیم opacityو به جای آن به آن استایل می دهیم <label>. دکمه تولید و با ::after. در نهایت، ما a widthand heighton را <input>برای فاصله مناسب برای محتوای اطراف اعلام می کنیم.
ترجمه یا سفارشی سازی رشته ها
شبه :lang()کلاس برای امکان ترجمه متن "مرور" به زبان های دیگر استفاده می شود. با تگ زبان مربوطه و رشته های محلی شده، ورودی ها را به $custom-file-textمتغیر Sass لغو یا اضافه کنید . رشته های انگلیسی را می توان به همان روش سفارشی کرد. به عنوان مثال، در اینجا نحوه اضافه کردن ترجمه اسپانیایی (کد زبان اسپانیایی این است ):es
در اینجا lang(es)در مورد ورودی فایل سفارشی برای ترجمه اسپانیایی آمده است:
برای اینکه متن صحیح نشان داده شود، باید زبان سند خود (یا زیردرخت آن) را به درستی تنظیم کنید. این را می توان با استفاده از langویژگی روی <html>عنصر یا Content-Languageهدر HTTP در میان روش های دیگر انجام داد.