التخطيط (Layout)
امنح نماذجك بعض الهيكلية—من النماذج المضمنة (inline) إلى الأفقية (horizontal) وصولاً إلى تطبيقات الشبكة (grid) المخصصة—باستخدام خيارات تخطيط النماذج لدينا.
النماذج (Forms)
يجب أن تقع كل مجموعة من حقول النموذج داخل عنصر <form>. لا يوفر الـ Bootstrap أي تنسيق افتراضي لعنصر <form>، ولكن هناك بعض ميزات المتصفح القوية التي يتم توفيرها بشكل افتراضي.
- هل أنت جديد في نماذج المتصفح؟ فكر في مراجعة مستندات نماذج MDN للحصول على نظرة عامة وقائمة كاملة بالسمات المتاحة.
- عناصر
<button>داخل<form>تكون افتراضياً من نوعtype="submit"، لذا احرص على أن تكون محدداً وقم بتضمينtypeدائماً.
بما أن الـ Bootstrap يطبق display: block و width: 100% على جميع عناصر التحكم في النماذج لدينا تقريباً، فإن النماذج ستتكدس عمودياً بشكل افتراضي. يمكن استخدام الفئات (classes) الإضافية لتغيير هذا التخطيط على أساس كل نموذج.
الأدوات المساعدة (Utilities)
تعد أدوات الهوامش المساعدة (Margin utilities) أسهل طريقة لإضافة بعض الهيكلية إلى النماذج. فهي توفر تجميعاً أساسياً للتسميات، وعناصر التحكم، ونصوص النماذج الاختيارية، ورسائل التحقق من صحة النموذج. نوصي بالالتزام بأدوات margin-bottom المساعدة، واستخدام اتجاه واحد في جميع أنحاء النموذج من أجل الاتساق.
لا تتردد في بناء نماذجك بالطريقة التي تفضلها، باستخدام <fieldset> أو <div> أو أي عنصر آخر تقريباً.
<div class="mb-3">
<label for="formGroupExampleInput" class="form-label">Example label</label>
<input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input placeholder">
</div>
<div class="mb-3">
<label for="formGroupExampleInput2" class="form-label">Another label</label>
<input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input placeholder">
</div> شبكة النماذج (Form grid)
يمكن بناء نماذج أكثر تعقيداً باستخدام فئات الشبكة (grid classes) الخاصة بنا. استخدم هذه الفئات لتخطيطات النماذج التي تتطلب أعمدة متعددة، وعروضاً متنوعة، وخيارات محاذاة إضافية. يتطلب ذلك تفعيل متغير $enable-grid-classes في Sass (مفعل افتراضياً).
<div class="row">
<div class="col">
<input type="text" class="form-control" placeholder="First name" aria-label="First name">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Last name" aria-label="Last name">
</div>
</div> الفراغات الفاصلة (Gutters)
من خلال إضافة فئات تعديل الفراغات الفاصلة، يمكنك التحكم في عرض الفراغات الفاصلة في كل من الاتجاهين الأفقي والرأسي. يتطلب ذلك أيضاً تفعيل متغير $enable-grid-classes في Sass (مفعل افتراضياً).
<div class="row g-3">
<div class="col">
<input type="text" class="form-control" placeholder="First name" aria-label="First name">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Last name" aria-label="Last name">
</div>
</div> يمكن أيضاً إنشاء تخطيطات أكثر تعقيداً باستخدام نظام الشبكة (grid system).
<form class="row g-3">
<div class="col-md-6">
<label for="inputEmail4" class="form-label">Email</label>
<input type="email" class="form-control" id="inputEmail4">
</div>
<div class="col-md-6">
<label for="inputPassword4" class="form-label">Password</label>
<input type="password" class="form-control" id="inputPassword4">
</div>
<div class="col-12">
<label for="inputAddress" class="form-label">Address</label>
<input type="text" class="form-control" id="inputAddress" placeholder="1234 Main St">
</div>
<div class="col-12">
<label for="inputAddress2" class="form-label">Address 2</label>
<input type="text" class="form-control" id="inputAddress2" placeholder="Apartment, studio, or floor">
</div>
<div class="col-md-6">
<label for="inputCity" class="form-label">City</label>
<input type="text" class="form-control" id="inputCity">
</div>
<div class="col-md-4">
<label for="inputState" class="form-label">State</label>
<select id="inputState" class="form-select">
<option selected>Choose...</option>
<option>...</option>
</select>
</div>
<div class="col-md-2">
<label for="inputZip" class="form-label">Zip</label>
<input type="text" class="form-control" id="inputZip">
</div>
<div class="col-12">
<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>
<div class="col-12">
<button type="submit" class="btn btn-primary">Sign in</button>
</div>
</form> النماذج الأفقية (Horizontal form)
قم بإنشاء نماذج أفقية باستخدام الشبكة عن طريق إضافة الفئة .row إلى مجموعات النماذج واستخدام الفئات .col-*-* لتحديد عرض التسميات وعناصر التحكم. تأكد من إضافة .col-form-label إلى عناصر <label> أيضاً بحيث تكون متمركزة عمودياً مع عناصر التحكم في النماذج المرتبطة بها.
في بعض الأحيان، قد تحتاج إلى استخدام أدوات الهوامش المساعدة (margin) أو الهوامش الداخلية (padding) لإنشاء المحاذاة المثالية التي تحتاجها. على سبيل المثال، قمنا بإزالة padding-top من تسمية مدخلات الراديو المكدسة لمحاذاة خط الأساس للنص بشكل أفضل.
<form>
<div class="row mb-3">
<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="row mb-3">
<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="row mb-3">
<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>
</fieldset>
<div class="row mb-3">
<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>
<button type="submit" class="btn btn-primary">Sign in</button>
</form> تحديد حجم تسمية النموذج الأفقي
تأكد من استخدام .col-form-label-sm أو .col-form-label-lg في عناصر <label> أو <legend> الخاصة بك لاتباع حجم .form-control-lg و .form-control-sm بشكل صحيح.
<div class="row mb-3">
<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="row mb-3">
<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="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> تحديد حجم الأعمدة
كما هو موضح في الأمثلة السابقة، يتيح لك نظام الشبكة (grid system) الخاص بنا وضع أي عدد من الـ .cols داخل .row. حيث سيتم تقسيم العرض المتاح بينهم بالتساوي. يمكنك أيضاً اختيار مجموعة فرعية من أعمدتك لتشغل مساحة أكبر أو أقل، بينما تقوم الـ .cols المتبقية بتقسيم الباقي بالتساوي، وذلك باستخدام فئات أعمدة محددة مثل .col-sm-7.
<div class="row g-3">
<div class="col-sm-7">
<input type="text" class="form-control" placeholder="City" aria-label="City">
</div>
<div class="col-sm">
<input type="text" class="form-control" placeholder="State" aria-label="State">
</div>
<div class="col-sm">
<input type="text" class="form-control" placeholder="Zip" aria-label="Zip">
</div>
</div> التحديد التلقائي للحجم
يستخدم المثال أدناه أداة مساعدة من الـ flexbox لتوسيط المحتويات عمودياً ويغير .col إلى .col-auto بحيث تشغل الأعمدة فقط المساحة المطلوبة. وبعبارة أخرى، يتم تحديد حجم العمود بناءً على المحتويات.
<form class="row gy-2 gx-3 align-items-center">
<div class="col-auto">
<label class="visually-hidden" for="autoSizingInput">Name</label>
<input type="text" class="form-control" id="autoSizingInput" placeholder="Jane Doe">
</div>
<div class="col-auto">
<label class="visually-hidden" for="autoSizingInputGroup">Username</label>
<div class="input-group">
<div class="input-group-text">@</div>
<input type="text" class="form-control" id="autoSizingInputGroup" placeholder="Username">
</div>
</div>
<div class="col-auto">
<label class="visually-hidden" for="autoSizingSelect">Preference</label>
<select class="form-select" id="autoSizingSelect">
<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">
<div class="form-check">
<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">Submit</button>
</div>
</form> يمكنك بعد ذلك إعادة صياغة ذلك مرة أخرى باستخدام فئات أعمدة محددة الحجم.
<form class="row gx-3 gy-2 align-items-center">
<div class="col-sm-3">
<label class="visually-hidden" for="specificSizeInputName">Name</label>
<input type="text" class="form-control" id="specificSizeInputName" placeholder="Jane Doe">
</div>
<div class="col-sm-3">
<label class="visually-hidden" for="specificSizeInputGroupUsername">Username</label>
<div class="input-group">
<div class="input-group-text">@</div>
<input type="text" class="form-control" id="specificSizeInputGroupUsername" placeholder="Username">
</div>
</div>
<div class="col-sm-3">
<label class="visually-hidden" for="specificSizeSelect">Preference</label>
<select class="form-select" id="specificSizeSelect">
<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">
<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">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form> النماذج المضمنة (Inline forms)
استخدم الفئات .row-cols-* لإنشاء تخطيطات أفقية متوافقة مع الشاشات (Responsive). ومن خلال إضافة فئات تعديل الفراغات الفاصلة، سيكون لدينا فراغات فاصلة في الاتجاهين الأفقي والرأسي. وفي منافذ عرض الهاتف المحمول الضيقة، تساعد الفئة .col-12 في تكدّس عناصر التحكم في النماذج وغيرها. وتقوم الفئة .align-items-center بمحاذاة عناصر النموذج إلى المنتصف، مما يجعل .form-check يتم محاذاتها بشكل صحيح.
<form class="row row-cols-lg-auto g-3 align-items-center">
<div class="col-12">
<label class="visually-hidden" for="inlineFormInputGroupUsername">Username</label>
<div class="input-group">
<div class="input-group-text">@</div>
<input type="text" class="form-control" id="inlineFormInputGroupUsername" placeholder="Username">
</div>
</div>
<div class="col-12">
<label class="visually-hidden" for="inlineFormSelectPref">Preference</label>
<select class="form-select" id="inlineFormSelectPref">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
</div>
<div class="col-12">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="inlineFormCheck">
<label class="form-check-label" for="inlineFormCheck">
Remember me
</label>
</div>
</div>
<div class="col-12">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>