الفرق بين المراجعتين لصفحة: «Bootstrap/migration»

من موسوعة حسوب
لا ملخص تعديل
ط مراجعة وتدقيق
 
(مراجعتان متوسطتان بواسطة مستخدم واحد آخر غير معروضتين)
سطر 1: سطر 1:
<noinclude>{{DISPLAYTITLE: الهجرة إلى الإصدار 4 من Bootstrap }}</noinclude>
<noinclude>{{DISPLAYTITLE: الهجرة إلى الإصدار 4 من Bootstrap }}</noinclude>
الإصدار الرابع من Bootstrap  هو إعادة كتابة جذرية للمشروع بأكمله. سنلخّص في هذه الصفحة أبرز التغييرات التي أتى بها هذا الإصدار، ثمّ سنسردا التغييرات بحسب كل مكونة على حدة.
الإصدار الرابع من Bootstrap  هو إعادة كتابة جذرية للمشروع بأكمله. سنلخّص في هذه الصفحة أبرز التغييرات التي أتى بها هذا الإصدار، ثمّ سنسرد التغييرات بحسب كل مكونة على حدة.


== التغييرات المستقرة ==
== التغييرات المستقرة ==
بالنسبة لمن يريد الانتقال من الإصدار بيتا 3 إلى أيّ من الإصدارات ‎4.x‎ المستقرة، فلا توجد تغييرات كاسرة للتوافق، بيد أنّ هناك بعض التغييرات التي يجدر الانتباه إليها.
بالنسبة لمن يريد الانتقال من الإصدار بيتا 3 إلى أيّ من إصدارات ‎4.x‎ المستقرة، فلا توجد تغييرات جذرية (breaking changes) للتوافق، بيد أنّ هناك بعض التغييرات التي يجدر الانتباه إليها.


=== الطباعة ===
=== الطباعة ===
سطر 11: سطر 11:


== تغييرات بيتا 3 ==
== تغييرات بيتا 3 ==
شهد الإصدار بيتا 2 الجزء الأكبر من التغييرات الكاسرة للتوافق خلال مرحلة التطوير بيتا، إلا أنه لا تزال هناك بعض التغييرات التي يجب معالجتها في الإصدار بيتا 3. يجدر أخذ هذه التغييرات بالحسبان إن كنت تريد التحديث إلى الإصدار بيتا 3 من الإصدار بيتا 2 أو أيّ إصدار أقدم.
شهد الإصدار بيتا 2 الجزء الأكبر من التغييرات الجذرية للتوافق خلال مرحلة التطوير بيتا، إلا أنه لا تزال هناك بعض التغييرات التي يجب معالجتها في الإصدار بيتا 3. يجدر أخذ هذه التغييرات بالحسبان إن كنت تريد التحديث إلى الإصدار بيتا 3 من الإصدار بيتا 2 أو أيّ إصدار أقدم.


=== معلومات متنوعة ===
=== معلومات متنوعة ===
* إزالة المتغير غير المستخدم ‎<code>$thumbnail-transition</code>. لم نكن ننقل أي شيء، لذلك لم تكن هناك حاجة إلى هذا المتغير.
* إزالة المتغير ‎<code>$thumbnail-transition</code>. لم نكن ننقل أي شيء، لذلك لم تكن هناك حاجة إلى هذا المتغير.
* لم تعد حزمة npm تتضمن أي ملفات بخلاف ملفات المصدر  source والمورد dist؛ إذا كنت تعتمد عليها وكنت تشغّل برامجنا النصية عبر المجلد <code>node_modules</code>، فعليك تعديل سير عملك.
* لم تعد حزمة npm تتضمن أي ملفات بخلاف ملفات المصدر  source والمورد dist؛ إذا كنت تعتمد عليها وكنت تشغّل برامجنا النصية عبر المجلد <code>node_modules</code>، فعليك تعديل سير عملك.


=== الاستمارات ===
=== الاستمارات ===
* أعدنا كتابة مربعات التأخير وأزرار الانتقاء المخصصة والابتدائية. أصبح لكليهما الآن بنية HTML متطابقة (وسوم خارجية <code><nowiki><div></nowiki></code> مع إخوة <code><input></code> و <code><label></code>) ونفس أنماط التخطيط (مكدّسة ابتداء، ومضمّنة مع صنف مُعدِّل modifier class). يتيح لنا هذا تصميم اللاصقات بناءً على حالة الإدخال، وكذلك تبسيط دعم الخاصية <code>disabled</code> (التي كانت تتطلب في السابق صنفا أبويا) ودعم تصديق الاستمارات. رافق هذا تغيير أنماط CSS لإدارة صور الخلفية المتعددة على مربعات التأشير والانتقاء المخصصة. سابقًا، كان لعنصر <code>‎.custom-control-indicator</code>- المحذوف حاليا - لون خلفية متدرج وأيقونة SVG. تخصيص تدرج الخلفية يعني ضرورة استبدال كل تلك العناصر في كل مرة تحتاج فيها إلى تغيير أحدها. أصبحنا الآن نستخدم ‎<code>.custom-control-label::before</code> لأجل التعبئة والتلوين المتدرج، فيما يتكفل <code>‎.custom-control-label::after</code> بالأيقونة. إن أردت جعل مربع التأشير ضمنيا، فأضف الصنف ‎<code>.custom-control-inline</code>.
* أعدنا كتابة مربعات التأشير وأزرار الانتقاء المخصصة والابتدائية. أصبح لكليهما الآن بنية HTML متطابقة (وسوم خارجية <code><nowiki><div></nowiki></code> مع إخوة <code><input></code> و <code><label></code>) ونفس أنماط التخطيط (مكدّسة ابتداء، ومضمّنة مع صنف مُعدِّل modifier class). يتيح لنا هذا تصميم اللاصقات بناءً على حالة الإدخال، وكذلك تبسيط دعم الخاصية <code>disabled</code> (التي كانت تتطلب في السابق صنفا أبويا) ودعم تصديق الاستمارات. رافق هذا تغيير أنماط CSS لإدارة صور الخلفية المتعددة على مربعات التأشير والانتقاء المخصصة. كان لعنصر <code>‎.custom-control-indicator</code>- المحذوف حاليا - لون خلفية متدرج وأيقونة SVG. تخصيص تدرج الخلفية يعني ضرورة استبدال كل تلك العناصر في كل مرة تحتاج فيها إلى تغيير أحدها. أما الآن فأصبحنا نستخدم ‎<code>.custom-control-label::before</code> لأجل التعبئة والتلوين المتدرج، فيما يتكفل <code>‎.custom-control-label::after</code> بالأيقونة. إن أردت جعل مربع التأشير ضمنيا، فأضف الصنف ‎<code>.custom-control-inline</code>.
* تحديث محدّدات [[Bootstrap/button group|مجموعات الأزرار]] الخاصة بالمدخلات. بدلاً من استخدام <code>‎[data-toggle = "button"] {}</code>‎ للتحكم في التنسيق والسلوك، ولا نستخدم خاصية البيانات  <code>data</code>  إلا لسلوكات جافا سكربت، فيما نعتمد على الصنف الجديد <code>‎.btn-group-togg</code> لأجل التنسيق.
* تحديث محدّدات [[Bootstrap/button group|مجموعات الأزرار]] الخاصة بالمدخلات. فبدلًا من استخدام <code>‎[data-toggle = "button"] {}</code>‎ للتحكم في التنسيق والسلوك، أصبحنا نستخدم خاصية البيانات  <code>data</code> حصرًا لأجل التحكم في سلوكات [[JavaScript|جافاسكربت]]، فيما نعتمد على الصنف الجديد <code>‎.btn-group-togg</code> لأجل التنسيق.
* إزالة <code>‎.col-form-legend</code> وتعويضه بصنف مُحسّن <code>‎.col-form-label</code>، بهذه الطريقة يمكن استخدام <code>‎.col-form-label-sm</code> و  <code>‎.col-form-label-lg</code> على عناصر  <code><legend></code> بكل سهولة.
* إزالة <code>‎.col-form-legend</code> وتعويضه بصنف مُحسّن <code>‎.col-form-label</code>، بهذه الطريقة يمكن استخدام <code>‎.col-form-label-sm</code> و  <code>‎.col-form-label-lg</code> على عناصر  <code><legend></code> بكل سهولة.


* تغيير متغير عناصر إدخال الملفات المخصصة <code>‎$custom-file-text</code>. فلم يعد عبارة عن قاموس Sass متشعب، وهو الآن يعمل حصرا على سلسلة نصية واحدة فقط — زر التصفح <code>Browse</code> الذي أصبح الآن العنصر الزائف الوحيد الذي يُنشأ عبر Sass. يأتي نص اختيار الملف <code>Choose file</code> من اللاصقة <code>‎.custom-file-label</code>.
* تغيير متغير عناصر إدخال الملفات المخصصة <code>‎$custom-file-text</code>. فلم يعد قاموسا متشعبا في [[Sass]]، وهو الآن يعمل حصرا على سلسلة نصية واحدة فقط — زر التصفح <code>Browse</code> الذي أصبح الآن العنصر الزائف الوحيد الذي يُنشأ عبر [[Sass]]. يأتي نص اختيار الملف <code>Choose file</code> من اللاصقة <code>‎.custom-file-label</code>.


=== مجموعات الإدخال ===
=== مجموعات الإدخال ===
سطر 30: سطر 30:


== تغييرات الإصدار بيتا 2 ==
== تغييرات الإصدار بيتا 2 ==
نحاول قدر الإمكان تجنب إجراء أيّ تغييرا كاسرة للتوافق في الإصدار التجريبي بيتا. ولكن ليس كل ما يُبتغى يُنال. فيما يلي بعض التغييرات الكاسرة التي يجب أخذها بالحسبان عند الانتقال من الإصدار بيتا 1 إلى بيتا 2.
نحاول قدر الإمكان تجنب إجراء أيّ تغيير جذري للتوافق في الإصدار التجريبي بيتا. ولكن ليس كل ما يُبتغى يُنال. فيما يلي بعض التغييرات الجذرية التي يجب أخذها بالحسبان عند الانتقال من الإصدار بيتا 1 إلى بيتا 2.
* إزالة المتغير ‎<code>$badge-color</code> واستخدامه على عناصر ‎<code>.badge</code>. أصبحنا نستخدم دالة تباين الألوان لاختيار اللون بناءً على لون الخلفية، لذا لم يعد المتغير ضروريا.
* إزالة المتغير ‎<code>$badge-color</code> واستخدامه على عناصر ‎<code>.badge</code>. أصبحنا نستخدم دالة تباين الألوان لاختيار اللون بناءً على لون الخلفية، لذا لم يعد هذا المتغير ضروريا.
* إعادة تسمية الدالة  <code>grayscale()</code>‎ إلى <code>gray()‎</code> لتجنب التعارض مع مرشحات التدرج الرمادي الأصلية في CSS.
* إعادة تسمية الدالة <code>grayscale()</code>‎ إلى <code>gray()‎</code> لتجنب التعارض مع مرشحات التدرج الرمادي الأصلية في CSS.
* إعادة تسمية <code>‎.table-inverse</code> و ‎<code>.thead-inverse</code> و <code>‎.thead-default</code> إلى <code>‎ .*-dark</code> و <code>‎.*-light</code>، وذلك لمطابق مخططات الألوان المستخدمة في المواضع الأخرى.
* إعادة تسمية <code>‎.table-inverse</code> و ‎<code>.thead-inverse</code> و <code>‎.thead-default</code> إلى <code>‎ .*-dark</code> و <code>‎.*-light</code>، وذلك لمطابق مخططات الألوان المستخدمة في المواضع الأخرى.
* تنشئ الجداول المتجاوبة الآن أصنافًا لكل نقطة حدية للشبكة. هذا يكسر التوافق مع الإصدار بيتا 1 من حيث أنّ <code>‎.table-responseive</code> المُستخدم سابقا شبيه  بالصنف <code>‎.table-responseive-md</code>. يمكنك الآن استخدام <code>‎.table-responseive</code> أو <code>‎.table-responseive- {sm، md، lg، xl}‎</code>.
* تنشئ الجداول المتجاوبة الآن أصنافًا لكل نقطة حدية للشبكة. هذا يكسر التوافق مع الإصدار بيتا 1 من حيث أنّ <code>‎.table-responseive</code> المُستخدم سابقا شبيه  بالصنف <code>‎.table-responseive-md</code>. يمكنك الآن استخدام <code>‎.table-responseive</code> أو <code>‎.table-responseive- {sm، md، lg، xl}‎</code>.
* التوقف عن دعم Bower، ذلك أنّ مدير الحزم أصبح مُتجاوزًا موازنة بالبدائل المتاحة (على سبيل المثال، Yarn أو npm). انظر [https://github.com/bower/bower/issues/2298 bower/bower#2298] لمزيد من التفاصيل.
* التوقف عن دعم Bower، ذلك أنّ مدير الحزم هذا أصبح مُتجاوزًا موازنة بالبدائل المتاحة (مثل Yarn أو npm). انظر [https://github.com/bower/bower/issues/2298 bower/bower#2298] لمزيد من التفاصيل.
* ما يزال Bootstrap يتطلب jQuery 1.9.1 أو أعلى، ولكن يُنصح باستخدام الإصدار ‎3.x نظرًا لأن المتصفحات المدعومة من ‎3.x هي التي يدعمها Bootstrap،  علاوة على ذلك فإنّ الإصدار ‎3.x فيه بعض العلل الأمنية.
* ما يزال Bootstrap يتطلب jQuery 1.9.1 أو أعلى، ولكن يُنصح باستخدام الإصدار ‎3.x نظرًا لأن المتصفحات المدعومة من ‎3.x هي التي يدعمها Bootstrap،  علاوة على ذلك فإنّ الإصدار ‎3.x فيه بعض العلل الأمنية.
* إزالة الصنف غير المستخدم ‎<code>.form-control-label</code>. كان هذا الصنف نسخة مكررة من الصنف <code>‎.col-form-label</code> الذي كان يُوسِّط رأسيا عناصر <code><label></code> وعناصر الإدخال المرتبطة بها في خطاطات الاستمارات الأفقية.
* إزالة الصنف غير المستخدم ‎<code>.form-control-label</code>. كان هذا الصنف نسخة مكررة من الصنف <code>‎.col-form-label</code> الذي كان يُوسِّط رأسيا عناصر <code><label></code> وعناصر الإدخال المرتبطة بها في خطاطات الاستمارات الأفقية.
* تحويل <code>color-yiq</code> من مخلوط يتضمن خاصية اللون إلى دالة تعيد قيمة مما يتيح لك استخدامها في جميع خاصيات CSS. على سبيل المثال، بدلاً من كتابة <code>color-yiq (# 000)</code>‎، يمكنك الآن كتابة <code>color: color-yiq (# 000)‎;‎</code>.
* تحويل <code>color-yiq</code> من مخلوط يتضمن خاصية اللون إلى دالة تعيد قيمة، مما يتيح لك استخدامها في جميع خاصيات CSS. على سبيل المثال، بدلاً من كتابة <code>color-yiq (# 000)</code>‎، يمكنك الآن كتابة <code>color: color-yiq (# 000)‎;‎</code>.


=== أبرز النقاط ===
=== أبرز النقاط ===
سطر 47: سطر 47:


=== دعم المتصفح ===
=== دعم المتصفح ===
* إزالة دعم IE8 و IE9 و iOS 6. لا يدعم الإصدار 4 من Bootstrap إلا IE10+‎ و iOS 7+‎. إن كان موقعك يحتاج أيّا منهما، سيكون عليك استخدام الإصدار 3.
* إزالة دعم IE8 و IE9 و iOS 6. لا يدعم الإصدار 4 من Bootstrap إلا IE10+‎ و iOS 7+‎. إن كان موقعك يحتاج أيّا من الإصدارات غير المدعومة، سيكون عليك استخدام Bootstrap 3.
* إضافة دعم رسمي لمتصفح Android v5.0 Lollipop و إطارات العرض WebView. تظل الإصدارات السابقة من متصفح Android و WebView مدعومة، لكن دعمًا غير رسمي.
* إضافة دعم رسمي لمتصفح Android v5.0 Lollipop و إطارات العرض WebView. تظل الإصدارات السابقة من متصفح Android و WebView مدعومة، لكن دعمًا غير رسمي.


=== التغيرات العامة ===
=== التغيرات العامة ===
* أصبح [[Bootstrap/flex|Flexbox]] مُمكَّنا افتراضيا. يعني هذا عموما التحوّل من [[Bootstrap/float|العناصر العائمة]]، والتوجه إلى مكوناتنا.
* أصبحت [[Bootstrap/flex|Flexbox]] مُمكَّنة افتراضيا. يعني هذا عمومًا التحوّل من [[Bootstrap/float|العناصر العائمة]]، والتوجه إلى مكوناتنا.
* استبدلنا Sass بـ Less لكتابة ملفات CSS المصدرية.
* استبدلنا [[Sass]] بـ Less لكتابة ملفات [[CSS]] المصدرية.
* التبديل من الوحدة <code>px</code> إلى الوحدة <code>rem</code> كوحدة أساسية في CSS، بيد أنّ وحدات البكسل ما تزال تستخدم في استعلامات الوسائط وسلوك الشبكة لأنّ إطارات عرض الجهاز لا تتأثر بحجم النوع.
* التبديل من الوحدة <code>px</code> إلى الوحدة <code>rem</code> كوحدة أساسية في CSS، بيد أنّ وحدات البكسل ما تزال تستخدم في استعلامات الوسائط وسلوك الشبكة لأنّ إطارات عرض الجهاز لا تتأثر بحجم النوع.
* زيادة حجم الخط العام من 14 بكسل إلى 16 بكسل.
* زيادة حجم الخط العام من 14 بكسل إلى 16 بكسل.
* إتاحة طبقات شبكة جديدة لإضافة خيار خامس (لمعالجة الأجهزة ذات الحجم 576 بكسل فما دونه) وإزالة <code>‎ -xs</code> من تلك الأصناف. مثل: ‎<code>.col-6 و col-sm-4 و col-md-3</code>.
* إتاحة طبقات شبكة جديدة لإضافة خيار خامس (لمعالجة الأجهزة ذات الحجم 576 بكسل فما دونه) وإزالة <code>‎-xs</code> من تلك الأصناف. مثل: ‎<code>.col-6</code>و <code>col-sm-4</code> و <code>col-md-3</code>.
* استبدال خاصية القالب الاختيارية المنفصلة بخيارات قابلة للإعداد عبر متغيرات SCSS (على سبيل المثال: <code>‎$enable-gradients: true</code>).
* تبديل خاصية القالب الاختيارية المنفصلة مكان خيارات قابلة للإعداد عبر متغيرات SCSS (على سبيل المثال: <code>‎$enable-gradients: true</code>).
* إصلاح نظام البناء لاستخدام سلسلة من برامج npm النصية بدلاً من Grunt. انظر ملف <code>package.json</code> لمطالعة جميع البرامج النصية، أو انظر الملف <code>readme</code> لأغراض التطوير المحلي.
* إصلاح نظام البناء لاستخدام سلسلة من برامج npm النصية بدلاً من Grunt. انظر ملف <code>package.json</code> لمطالعة جميع البرامج النصية، أو انظر الملف <code>readme</code> لأغراض التطوير المحلي.
* لم يعد الاستخدام غير المتجاوب لـ Bootstrap مدعومًا.
* لم يعد الاستخدام غير المتجاوب لـ Bootstrap مدعومًا.
سطر 63: سطر 63:


=== نظام الشبكة ===
=== نظام الشبكة ===
* الانتقال إلى flexbox.
* الانتقال إلى Flexbox.
** إضافة دعم Flexbox في مخلوط الشبكة والأصناف المُعرّفة مسبقًا.
** إضافة دعم Flexbox في مخلوط الشبكة والأصناف المُعرّفة مسبقًا.
*** تضمين دعم أصناف المحاذاة الرأسية والأفقية كجزء من flexbox.
*** تضمين دعم أصناف المحاذاة الرأسية والأفقية كجزء من Flexbox.
* تحديث أسماء أصناف الشبكة وطبقات شبكة جديدة.
* تحديث أسماء أصناف الشبكة وطبقات شبكة جديدة.
** إضافة طبقة شبكة <code>sm</code> جديدة للشبكات ذات الأحجام الأقل من 768 بكسل لمزيد من التحكم. أصبحت لدينا الآن الطبقات <code>xs</code> و <code>sm</code> و <code>md</code> و <code>lg</code> و <code>xl</code>. هذا يعني أيضًا أنه تم رفع كل طبقة بمستوى واحد (لذلك فإنّ <code>‎.col-md-6</code> في الإصدار 3 أصبحت ‎<code>.col-lg-6</code> في الإصدار 4).
** إضافة طبقة شبكة <code>sm</code> جديدة للشبكات ذات الأحجام الأقل من 768 بكسل لمزيد من التحكم. أصبحت لدينا الآن الطبقات <code>xs</code> و <code>sm</code> و <code>md</code> و <code>lg</code> و <code>xl</code>. هذا يعني أيضًا أنه تم رفع كل طبقة بمستوى واحد (لذلك فإنّ <code>‎.col-md-6</code> في الإصدار 3 أصبحت ‎<code>.col-lg-6</code> في الإصدار 4).
** تعديل أصناف الشبكة <code>xs</code> بحيث لا تتطلب استخدام رمز الطبقة ( infix)، وذلك تبيانا لكونها تبدأ في تطبيق الأنماط ابتداء من <code>min-width: 0</code> وليس عند قيمة بكسلية محددة. بدلاً من <code>‎.col-xs-6</code>، استخدم ‎<code>.col-6</code>. بالمقابل، تتطلب جميع طبقات الشبكة الأخرى استخدام رمز الطبقة infix (مثل<code>sm</code>).
** تعديل أصناف الشبكة <code>xs</code> بحيث لا تتطلب استخدام رمز الطبقة ( infix)، وذلك تبيانا لكونها تبدأ في تطبيق الأنماط ابتداء من <code>min-width: 0</code> وليس عند قيمة بكسلية محددة. بدلًا من <code>‎.col-xs-6</code>، استخدم ‎<code>.col-6</code>. تتطلب بالمقابل جميع طبقات الشبكة الأخرى استخدام رمز الطبقة infix (مثل<code>sm</code>).
* تحديث أحجام الشبكة والمخاليط،والمتغيرات.
* تحديث أحجام الشبكة والمخاليط،والمتغيرات.
** أصبح لخنادق الشبكة  الآن قاموس Sass لاستخدامه لتحديد عرض الخنادق في كل نقطة حدية.
** أصبح لخنادق الشبكة الآن قاموس [[Sass]] لاستخدامه لتحديد عرض الخنادق في كل نقطة حدية.
** تحديث مخاليط الشبكة لكي تستخدا المخلوط <code>make-col-ready</code> و <code>make-col</code> لتعيين قيم <code>flex</code> و <code>max-width</code> للأعمدة فرادى.
** تحديث مخاليط الشبكة لكي تستخدم المخلوط <code>make-col-ready</code> و <code>make-col</code> لتعيين قيم <code>flex</code> و <code>max-width</code> للأعمدة الفردية.
** تغيير النقاط الحدية في استعلام الوسائط الخاص بنظام الشبكة وعرض الحاويات لمراعاة طبقات الشبكة الجديدة، والتأكد من أنّ الأعمدة قابلة للقسمة بالتساوي على 12 في عرضها الأقصى.
** تغيير النقاط الحدية في استعلام الوسائط الخاص بنظام الشبكة وعرض الحاويات لمراعاة طبقات الشبكة الجديدة، والتأكد من أنّ الأعمدة قابلة للقسمة بالتساوي على 12 في عرضها الأقصى.
** يُتعامل الآن مع النقاط الحدية للشبكة وعرض الحاويات عبر قواميس Sass‎‎‎‏ (<code>‎$grid-breakpoints</code> و ‎<code>$container-max-widths</code>‎) بدلاً من استخدام متغيرات منفصلة. لقد استُبدِلت المتغيرات <code>‎@screen-*</code>‎، وأصبح بإمكانك تخصيص طبقات الشبكة بالكامل.
** يُتعامل الآن مع النقاط الحدية للشبكة وعرض الحاويات عبر قواميس Sass‎‎‎‏ (<code>‎$grid-breakpoints</code> و ‎<code>$container-max-widths</code>‎) بدلاً من استخدام متغيرات منفصلة. لقد استُبدِلت المتغيرات <code>‎@screen-*</code>‎، وأصبح بإمكانك تخصيص طبقات الشبكة بالكامل.
** تم تغيير استعلامات الوسائط كذلك. بدلاً من تكرار إعلانات استعلام الوسائط بالقيمة نفسها في كل مرة، فقد وفّرنا الآن <code>‎@include media-breakpoint-up/down/only</code> ، فبدلاً من كتابة <code>‎@media (min-width: @screen-sm-min) { ... }‎</code>، يمكنك كتابة <code>‎@include media-breakpoint-up(sm) { ... }‎</code>.
** تم تغيير استعلامات الوسائط كذلك. بدلاً من تكرار إعلانات استعلام الوسائط بالقيمة نفسها في كل مرة، فقد وفّرنا الآن <code>‎@include media-breakpoint-up/down/only</code>، فبدلاً من كتابة <code>‎@media (min-width: @screen-sm-min) { ... }‎</code>، يمكنك كتابة <code>‎@include media-breakpoint-up(sm) { ... }‎</code>.


=== المكونات ===
=== المكونات ===
إزالة الألواح (panels) والصور المصغرة والجدران (wells) وتعويضها بمكون شامل جديد، وهو البطاقات.
* '''إزالة الألواح (panels) والصور المصغرة والجدران (wells)''' وتعويضها بمكون شامل جديد، وهو البطاقات.
* '''إزالة أيقونات الخطوط Glyphicons.''' إذا كنت بحاجة إلى استخدام الأيقونات، فهذه بعض الخيارات المتاحة:
** الإصدار upstream من [https://www.glyphicons.com/ Glyphicons]
** [https://octicons.github.com/ Octicons]
** [https://fontawesome.com/ Font Awesome]
** راجع [[Bootstrap/extend|صفحة التوسيع]] للحصول على قائمة أوسع بالبدائل.
* '''إزالة الملحقة Affix jQuery.'''
** نوصي باستخدام <code>position: sticky</code> بدلاً من ذلك. راجع [https://html5please.com/#sticky هذه الصفحة] لمزيد من التفاصيل وبعض التوصيات الخاصة بالملء. أحد الاقتراحات الممكنة هو استخدام قاعدة <code>‎@supports</code> لتقديمها (على سبيل المثال <code>‎@supports (position: sticky) { ... }‎)</code>)
** إذا كنت تستخدم Affix لتطبيق أنماط إضافية غير موضعية، فقد لا يناسبك شيفرات عشوائية لتعويض نقص الدعم في المتصفحات. أحد الخيارات المتاحة في مثل هذه الحالات هو استخدام المكتبة [https://github.com/acch/scrollpos-styler ScrollPos-Styler].
* '''إزالة مكوّن pager'''، إذ أنّه كان مجرد زرّ مخصّص.
* '''إعادة تصميم جميع المكونات''' تقريبًا بُغية الإكثار من استخدام محددات الأصناف غير المتداخلة بدلاً من استخدام محدّدات الأبناء المخصّصة للغاية.


إزالة أيقونات الخطوط Glyphicons. إذا كنت بحاجة إلى استخدام الأيقونات، فهذه بعض الخيارات المتاحة:
== حسب المكونات ==
تبرز هذه القائمة التغييرات الرئيسية مُرتّبة حسب المكوّنات بين الإصدارين v3.xx و v4.0.0.


الإصدار upstream من Glyphicons
=== Reboot ===
[[Bootstrap/reboot|Reboot]] هي إضافة جديدة إلى Bootstrap 4، وهي ورقة أنماط تعتمد على Normalize وعلى أنماط إعادة التعيين الخاصة بنا. لا تستخدم المحددات التي تظهر في هذا الملف إلا العناصر — إذ لا توجد أصناف هنا. هذا يعزل أنماط إعادة التعيين عن أنماط المكونات الخاصة، وذلك في إطار التوجه نحو مقاربة وحداتية (modular). بعض أبرز عمليات إعادة الضبط المُتضمّنة فيها هي تغيير <code>box-sizing: border-box</code>، والانتقال من وحدات <code>em</code> إلى وحدات <code>rem</code> في العديد من العناصر، وكذلك أنماط الروابط والعديد من عمليات إعادة تعيين عناصر الاستمارة.


Octicons
=== الكتابة ===
* نقل جميع أدوات <code>‎.text-</code> ‎ إلى ملف <code>‎_utilities.scss</code>.
* إزالة <code>‎.page-header</code>، وذلك لأنّه يمكن تطبيق أنماطه عبر الأدوات المساعدة.
* إزالة <code>‎.dl -orizontal</code>. استخدم بدلا منه <code>‎.row</code> على عناصر <code><nowiki><dl></nowiki></code>، واستخدم أصناف أعمدة الشبكة (أو المخاليط) على أبناء <code><nowiki><dt></nowiki></code> و <code><nowiki><dd></nowiki></code>.
* إعادة تصميم الاقتباسات ونقل أنماطها من عنصر <code><nowiki><blockquote></nowiki></code> إلى صنف واحد ‎<code>.blockquote</code>. وإزالة معدّل <code>‎.blockquote-reverse</code>  وتعويضه بأدوات المساعدة النصية.
* يتطلب <code>‎.list-inline</code> الآن أن يُطبّق الصنف ‎<code>.list-inline-item</code> الجديد على عناصر القائمة الفرعية الخاصة به.


Font Awesome
=== صور ===
* إعادة تسمية <code>‎.img-responsive</code> إلى <code>‎.img-fluid</code>
* إعادة تسمية <code>‎.img-rounded</code> تقريب إلى <code>‎.rounded</code>
* إعادة تسمية <code>‎.img-circle</code> إلى <code>‎.rounded-circle</code>


راجع صفحة التوسيع للحصول على قائمة أوسع بالبدائل. هل لديك اقتراحات إضافية؟ يرجى فتح قضية أو PR.
=== الجداول ===
* لقد أُزيلت جميع نسخ محدّدات <code><</code> تقريبًا، مما يعني أن الجداول المتداخلة سوف ترث الأنماط تلقائيًا من آبائها. يبسط هذا المحدّدات والتخصيصات تبسيطًا واضحًا.
* إعادة تسمية <code>‎.table-condensed</code> إلى <code>‎.table-sm</code> لأجل حفظ الاتساق.
* إضافة خيار <code>‎.table-inverse</code> جديد.
* إضافة معدِّلين لترويسات الجدول: وهما <code>‎.thead-default</code> و  ‎<code>.thead-inverse</code>.
* إعادة تسمية الأصناف السياقية لتكون لها بادئة <code>‎.table</code>. وهكذا تحولت ‎<code>.active</code> و <code>‎.success</code> و <code>‎.warning</code> و ‎<code>.danger</code> و <code>.info</code> إلى ‎ <code>.table-active</code>و <code>‎.table-Success</code> و ‎<code>.table-warning</code> و <code>‎ .table-risk</code> و <code>‎.table-info</code>.


إزالة الملحقة Affix jQuery.
=== الاستمارات ===
* أعيد تعيين العنصر المنقول إلى ملف ‎<code>_reboot.scss</code>.
* إعادة تسمية <code>‎.control-label</code> إلى <code>‎.col-form-label</code>.
* إعادة تسمية <code>‎.input-lg</code> و ‎<code>.‎input-sm</code> إلى <code>‎.form-control-lg</code> و ‎<code>.form-control-sm</code> على التوالي.
* إزالة أصناف ‎<code>.form-group-*</code>‎ بُغية التبسيط. استخدم أصناف <code>‎.form-control-*‎</code> بدلاً منها الآن.
* إزالة <code>‎.help-block</code> وتعويضها بـ <code>‎.form-text</code> لأجل نصوص المساعدة الكتلية، أما فيما يخص نصوص المساعدة المضمّنة وغيرها من الخيارات المرنة، استخدم الأصناف المساعدة من قبيل <code>‎.text-muted</code>.
* إزالة <code>‎.radio-inline</code> و ‎<code>.checkbox-inline</code>.
* إدماج <code>‎.checkbox</code> و <code>‎.radio</code> في <code>‎.form-check</code> وكل أصناف <code>‎.form-check-*</code> ‎.
* إصلاح مشكلة الاستمارات الأفقية:
** لم تعد أصناف <code>‎.form-horizontal</code> إجبارية.
** لم تعد <code>‎.form-group</code> تطبق الأنماط من ‎<code>.row</code> عبر المخاليط، لذا أصبحت <code>‎.row</code> ضرورية الآن في خطاطات الشبكة الأفقية (كما في <code><nowiki><div class="form-group row"></nowiki></code>).
** إضافة الصنف <code>‎.col-form-label</code> إلى اللاصقات ذات الصنف <code>‎.form-control</code> المُوسّطة رأسيا.
** إضافة صنف <code>‎.form-row</code> جديد لأجل خطاطات الاستمارات ذات أصناف الشبكة (عوّض <code>‎.row</code> بـ <code>‎.‎form-row</code>).
* إضافة دعم الاستمارات المخصصة (مربعات التأشير وأزرار الانتقاء، وقوائم الاختيار وعناصر إدخال الملفات).
* استبدال الأصناف <code>‎.has-error</code> و <code>‎.has-warning</code> و <code>‎.‎has-Success</code> بالأصناف التي لها ميزة التصديق في HTML5 عبر أصناف CSS الزائفة <code>‎:invalid</code> و <code>‎:valid</code>.
* إعادة تسمية <code>‎.form-control-static</code> إلى ‎<code>.‎form-control-plaintext</code>.


نوصي باستخدام position: sticky بدلاً من ذلك. راجع صفحة HTML5 لمزيد من التفاصيل وبعض التوصيات الخاصة بالملء. أحد الاقتراحات هو استخدام قاعدة @supports لتقديمها (على سبيل المثال @supports (position: sticky) { ... }‎) })
=== الأزرار ===
* إعادة تسمية <code>‎.btn-default</code> إلى<code>‎.btn-secondary</code>.
* إزالة الصنف <code>‎.btn-xs</code> تمامًا، لأنّ <code>‎.btn-sm</code> أصغر نسبيًا من الإصدار الثالث.
* إزالة [https://getbootstrap.com/docs/3.3/javascript/#buttons-stateful ميزة زر الحالة] لملحقة button.js jQuery. يشمل هذا التابعين <code>‎$().button(string)‎</code> و <code>‎$().button('reset')‎</code>. ننصح باستخدام جزء مخصّص صغير من جافا سكربت بدلاً من ذلك للحصول على تحكم أكبر.
** لاحظ أنّنا احتفظنا بميزات الملحقة الأخرى (مثل مربعات التأشير وأزرار الانتقاء، وأزرار التبديل المفردة) في الإصدار 4.
* تغيير <code>[disabled]</code> إلى <code>‎:disabled</code> في الأزرار، لأنّ الإصدارات IE9 +‎ تدعم <code>:disabled</code>. ما تزال <code>fieldset[disabled]</code> ضرورية رغم ذلك، لأنّ [https://developer.mozilla.org/en-US/docs/Web/HTML/Element/fieldset#Browser_compatibility مجموعات الحقول المعطّلة الأصلية معطوبة في IE11].


إذا كنت تستخدم Affix لتطبيق أنماط إضافية غير موضعية، فقد لا يناسبك الملء المتعدد polyfill. أحد الخيارات المتاحة في مثل هذه الحالات هو استخدام مكتبة ScrollPos-Styler.
=== مجموعه الأزرار ===
* إعادة كتابة المكون باستخدام flexbox.
* إزالة <code>‎.btn-group-justified</code>. يمكنك أن  تستخدم بدلها <code><nowiki><div class="btn-group d-flex" role="group"></div></nowiki></code> كغلاف حول عناصر ذات صنف ‎<code>.w-100</code>.
* إزالة الصنف <code>‎.btn-group-xs</code> تماما نتيجة لإزالة <code>‎.btn-xs</code>.
*  إزالة التباعد الصريح بين مجموعات الأزرار في أشرطة أدوات الأزرار؛ استخدم أدوات الهامش بدلها.
* تحسين التوثيق الذي يخصّ استخدامها مع المكونات الأخرى.


إزالة مكوّن pager، إذ أنّه كان مجرد زرّ مخصّص.
=== القائمة المنسدلة ===
* تم التبديل من محددات الأب إلى الأصناف الفردية لكافة المكونات والمُعدِّلات وغيرها.
* تبسيط أنماط القوائم المنسدلة، إذ لم يعد تضاف إليها أسهم متجهة لأعلى أو أسفل.
* يمكن الآن بناء القوائم المنسدلة بواسطة <code><nowiki><div></nowiki></code> أو <code><nowiki><ul></nowiki></code>.
* إعادة تصميم أنماط القوائم المنسدلة وترميزها لتوفر دعما مبسّطا ومُضمّنا لعناصر <code><a></code> و <code><button></code> في القوائم المنسدلة.
* إعادة تسمية <code>‎.divider</code> إلى <code>‎.dropdown-divider</code>.
* تتطلب عناصر القائمة المنسدلة الآن استخدام <code>‎.dropdown-item</code>.
* لم تعد مفاتيح تبديل القوائم المنسدلة تتطلب الاستخدام الصريح لعنصر <code><nowiki><span class="caret"></span></nowiki></code>؛ إذ أنّها تُوفّر الآن تلقائيًا عبر عنصر CSS الزائف <code>‎::after</code> في <code>‎.dropdown-toggle</code>.


إعادة تصميم جميع المكونات تقريبًا لاستخدام المزيد من محددات الأصناف غير المتداخلة بدلاً من استخدام المحددات دقيقة للغاية.
=== نظام الشبكة ===
 
* إضافة نقطة حديثة جديدة إلى الشبكة بحجم 576 بكسل تحت اسم <code>sm</code>، ممّا يعني أن هناك الآن خمسة طبقات إجمالية (<code>xs</code> و <code>sm</code> و <code>md</code> و <code>lg</code> و <code>xl</code>).
حسب المكون
* إعادة تسمية أصناف معدّلات الشبكة المتجاوبة من ‎<code>‎.col-{breakpoint}-{modifier}-{size}‎</code>  إلى <code>‎.{modifier}-{breakpoint}-{size}‎</code>  لتبسيط أصناف الشبكة.
 
* إزالة أصناف أصناف معدلات الدفع push  والسحب pull وتعويضها بأصناف الترتيب <code>order</code>القائمة على Flexbox. على سبيل المثال، بدلًا من <code>‎.col-8.push-4</code> و <code>‎. col-4.pull-8</code>، عليك استخدام <code>‎.col-8.order-2</code> و ‎<code>.col-4.order-1</code>.
تبرز هذه القائمة التغييرات الرئيسية حسب المكوّن بين الإصدارين v3.xx و v4.0.0.
* إضافة أصناف flexbox مساعدة لاستخدامها في نظام الشبكة ومع المكونات.
 
Reboot
 
Reboot هو إضافة جديدة إلى Bootstrap 4، وهو ورقة أنماط جديدة تعتمد على Normalize وكذلك أنماط إعادة التعيين الخاصة بنا. لا تستخدم المحددات التي تظهر في هذا الملف إلا العناصر - فلا توجد أصناف هنا. هذا يعزل أنماط إعادة التعيين عن أنماط المكونات الخاصة، وذلك للتوجه للحصول نحو مقاربة أكثر وحداتية (modular). بعض أبرز عمليات إعادة الضبط المُتضمّنة فيها هي تغيير box-sizing: border-box، والانتقال من وحدات em إلى وحدات rem في العديد من العناصر، وأنماط الروابط والعديد من عمليات إعادة تعيين عناصر الاستمارة.
 
الكتابة
 
نقل جميع أدوات ‎.text- ‎إلى ملف ‎_utilities.scss.
 
إزالة ‎.page-header، وذلك لأنّه يمكن تطبيق أنماطه عبر الأدوات المساعدة.
 
إزالة ‎.dl -orizontal. استخدم بدلا منه ‎.row على <nowiki><dl>، واستخدم أصناف أعمدة الشبكة (أو المخاليط) على أبناء <dt> و <dd>.</nowiki>
 
إعادة تصميم الاقتباسات، ونقل أنماطها من عنصر <nowiki><blockquote> إلى صنف واحد ‎.blockquote. إزالة معدّل ‎.blockquote-reverse لأدوات المساعدة النصية.</nowiki>
 
يتطلب ‎.list-inline الآن أن يُطبّق الصنف ‎.list-inline-item الجديد على عناصر القائمة الفرعية الخاصة به.
 
صور
 
إعادة تسمية ‎.img-responsive إلى ‎.img-fluid.
 
إعادة تسمية ‎.img-rounded تقريب إلى ‎.rounded
 
إعادة تسمية ‎.img-circle إلى ‎.rounded-circle
 
الجداول
 
لقد أُزيلت جميع نسخ محدّدات < تقريبًا، مما يعني أن الجداول المتداخلة سوف ترث الأنماط تلقائيًا من آبائها. يبسط هذا المحدّدات والتخصيصات تبسيطا واضحا.
 
إعادة تسمية ‎.table-condensed إلى ‎.table-sm لأجل حفظ الاتساق.
 
إضافة خيار ‎.table-inverse جديد.
 
إضافة معدِّلين لترويسات الجدول: وهما ‎.thead-default و  ‎.thead-inverse.
 
إعادة تسمية الأصناف السياقية لتكون لها بادئة ‎.table. وهكذا تحولت active و ‎.success و ‎.warning و ‎.danger و .info إلى ‎.table-activeو ‎.table-Success و ‎.table-warning و‎ .table-risk و ‎.table-info.
 
الاستمارات
 
أعيد تعيين العنصر المنقول إلى ملف ‎_reboot.scss.
 
إعادة تسمية ‎.control-label إلى ‎.col-form-label.
 
إعادة تسمية ‎.input-lg و .‎input-sm إلى ‎.form-control-lg و ‎.form-control-sm، على التوالي.
 
إزالة أصناف ‎.form-group-*‎ بُغية التبسيط. استخدام أصناف ‎.form-control-*‎ بدلاً من ذلك الآن.
 
إزالة ‎.help-block وتعويضه بـ ‎.form-text لأجل نصوص المساعدة الكتلية فيما يخص نصوص المساعدة مضمّن وغيرها من الخيارات المرنة، استخدم الأصناف المساعدة من قبيل ‎ .text-muted.
 
إزالة ‎.radio-inline و ‎.checkbox-inline.
 
إدماج ‎.checkbox و ‎.radio في ‎.form-check ومختلف أصناف ‎.form-check-* ‎.
 
إصلاح مشكلة الاستمارات الأفقية:
 
لم تعد أصناف ‎.form-horizontal إجبارية.
 
لم تعد ‎.form-group تطبق الأنماط من ‎.row عبر المخاليط، لذا أصبحت ‎.row ضرورية الآن في خطاطات الشبكة الأفقية (كما في، <nowiki><div class="form-group row">).</nowiki>
 
إضافة الصنف ‎.col-form-label إلى اللاصقات ذات الصنف ‎.form-controls  الموضوعة في المُوسّطة رأسيا.
 
إضافة صنف ‎.form-row جديد لأجل خطاطات الاستمارات ذات أصناف الشبكة (عوض ‎.row بـ ‎.‎form-row الخاص بك).
 
إضافة دعم الاستمارات المخصصة (مربعات التأشير وأزرار الانتقاء، وقوائم الاختيار وعناصر إدخال الملفات).
 
استبدال أصناف ‎.has-error و ‎.has-warning و ‎.‎has-Success بأصناف مع ميزة التصيدق في HTML5 عبر أصناف CSS الزائفة ‎:invalid و ‎:valid.
 
إعادة تسمية ‎.form-control-static إلى .‎form-control-plaintext.
 
الأزرار
 
إعادة تسمية ‎.btn-default إلى‎.btn-secondary.
 
إزالة الصنف ‎.btn-xs تمامًا، لأنّ ‎.btn-sm أصغر نسبيًا من الإصدار الثالث.
 
إزالة ميزة زر الحالة لملحقة button.js jQuery يشمل هذا التابعين ‎$().button(string)‎ و ‎$().button('reset')‎ ننصح باستخدام جزء مخصّص صغير من جافا سكربت بدلاً من ذلك، ميزة هذا الأمر أنّك ستجعله يتصرف بالطريقة التي تريدها بالضبط.
 
لاحظ أنّه احتفظنا بميزات الملحقة الأخرى (مثل مربعات التأشير وأزرار الانتقاء، وأزرار التبديل المفردة) في الإصدار 4.
 
تغيير [disabled] إلى ‎:disabled في الأزرار لأنّ الإصدارات IE9 + تدعم ‎:disabled. ما تزال مع ذلك fieldset[disabled]‎ ضرورية لأن مجموعات الحقول المعطلة الأصلية معطوبة في IE11.
 
مجموعه الأزرار
 
إعادة كتابة المكون باستخدام flexbox.
 
إزالة ‎.btn-group-justified. يمكنك أن  تستخدم بدلها <nowiki><div class="btn-group d-flex" role="group"></div></nowiki> كغلاف حول عناصر ذات صنف .w-100.
 
إزالة الصنف ‎.btn-group-xs تماما نتيجة لإزالة ‎.btn-xs.
 
 إزالة التباعد الصريح بين مجموعات الأزرار في أشرطة أدوات الأزرار ؛ استخدم أدوات الهامش بدلها.
 
تحسين التوثيق الخاص  باستخدامها مع المكونات الأخرى.
 
القائمة المنسدلة
 
تم التبديل من محددات الأب إلى الأصناف الفردية لكافة المكونات والمُعدِّلات وغيرها.
 
تبسيط أنماط القوائم المنسدلة، إذ لم يعد يُربط بها أسهم متجهة لأعلى أو أسفل.
 
يمكن الآن بناء القوائم المنسدلة بواسطة ع <nowiki><div> أو <ul> .</nowiki>
 
إعادة تصميم أنماط القوائم المنسدلة وترميزها لتوفر دعما مبسّطا ومُضمّنا لعناصر <a> و <button> في القوائم المنسدلة.
 
إعادة تسمية ‎.divider إلى ‎.dropdown-divider.
 
تتطلب عناصر القائمة المنسدلة الآن استخدام ‎.dropdown-item.
 
لم تعد مفاتيح تبديل القاوئم المنسدلة المنسدلة تتطلب الاستخدام الصريح لعنصر <nowiki><span class="caret"></span></nowiki>؛ إذ أنّها تُوفّر الآن تلقائيًا عبر عنصر CSSالزائف ‎::after في ‎.dropdown-toggle.
 
نظام الشبكة
 
إضافة نقطة حديثة جديدة إلى الشبكة بحجم 576 بكسل تحت اسم sm، ممّا يعني أن هناك الآن خمسة طبقات إجمالية (xs و sm و md و lg و xl).
 
إعادة تسمية أصناف معدّلات الشبكة المتجاوبة من ‎.col-{breakpoint}-{modifier}-{size}  إلى ‎.{modifier}-{breakpoint}-{size}  لتبسيط أصناف الشبكة.
 
إزالة أصناف أصناف معدلات الدفع push  والسحب pull وتعويضها بأصناف الترتيب orderالقائمة على Flexbox. على سبيل المثال، بدلاً من ‎.col-8.push-4 و ‎. col-4.pull-عليك استخدام ‎.col-8.order-2 و ‎. col-4.order-1.
 
إضافة أصناف flexbox مساعدة لاستخدامها في نظام الشبكة ومع المكونات.
 
مجموعات القوائم
 
إعادة كتابة المكوّن باستخدام flexbox.
 
استبدال العنصر a.list-group بالصنف الصريح ‎.list-group-item-action لتنسيق الروابط وإصدارات الأزرار في عناصر مجموعة القوائم.
 
إضافة الصنف ‎.list-group-flush لاستخدامه مع البطاقات.
 
النوافذ الشرطية
 
إعادة كتابة المكون باستخدام flexbox.
 
نتيجة للانتقال إلى استخدام flexbox، فمن المحتمل أن تنكسر محاذاة أيقونات الاستبعاد في الترويسة، لأنّنا لم نعد نستخدم العناصر العائم. يأتي المحتوى العائم أولاً، ولكنّ هذا لا يحدث مع Flexbox. عليك تحديث أيقونات الاستبعاد حتى تأتي بعد عناوين النافذة الشرطية لإصلاح هذا الخلل.
 
إزالة الخيار remote (الذي يمكن استخدامه لتحميل المحتوى الخارجي وإدخاله تلقائيًا في النافذة الشرطية)، كما أُزيل أيضًا الحدث المقابل له loaded.bs.modal. نوصي أن تستخدم بدلاً منه قوالب من جانب العميل أو إطار عمل لربط البيانات، أو استدعاء jQuery.load بنفسك.
 
عناصر التنقل Navs
 
إعادة كتابة المكوّن باستخدام flexbox.
 
إزالة جميع المحدّدات <  بُغية تبسيط التنسيق عبر الأصناف غير المتداخلة.
 
لقد أصبحنا نستخدم أصناف منفصلة لأجل عناصر ‎.nav و ‎.nav-item و ‎.nav-item  بدلاً  من محدّدات HTML الخاصة من قبيل ‎.nav > li > a، وذا يجعل ترميز HTML أكثر مرونة مع تسهيل إمكانية التوسيع.
 
شرائط التنقل Navbar
 
لقد أعدنا كتابة شرائط التنقل بالكامل باستخدام flexbox، مع تحسين دعم المحاذاة والتجاوب والتخصيص.
 
تُطبَّق سلوكيات شرائط التنقل المتجاوبة على الصنف ‎.navbar عبر الصنف اللازم ‎.navbar-expand- {breakpoint}‎ حيث تريد أن يُطوى شريط التنقل. في السابق كان هذا ممكنا عبر تعديل أحد متغيرات Less، وكان يتطلب إعادة التصريف.
 
أصبحت ‎.navbar-default حاليا ‎.navbar-light، إلا أنّ ‎.navbar-dark ما تزال كما هو. لا بد من إضافة أحدهما إلى أيّ شريط تنقل. لكن اعلم أنّ هذه الأصناف لم تعد تعيّن ألوان الخلفية ؛ وإنّما تؤثّر أساسًا على اللون فقط.
 
تتطلب شرائط التنقل الآن إضافة الخلفية. اختر ما تشاء من ألوان الخلفية عبر أدوات الخلفية (‎.bg-*‎)، أو اختر واحدًا مخصّصا عبر أصناف  light/inverse أعلاه.
 
نتيجة استخدام Flexbox، يمكن لشرائط التنقل الآن استخدام أدوات Flexbox لتسهيل خيارات المحاذاة.
 
لقد غيرنا ‎.navbar-toggle إلى ‎.navbar-toggler، وأصبح لها أنماط تنسيق ووسوم مختلفة (لم تعد هناك 3 عناصر من <nowiki><span>).</nowiki>
 
إزالة الصنف ‎.navbar-form بالكامل. إذ لم يعد ضروريًا. بدلاً من ذلك، ما عليك سوى استخدام ‎.form-inline وتطبيق أدوات الهامش عند الضرورة.
 
لم تعد شرائط التنقل تتضمن margin-bottom أو  border-radius ابتدائيًا. استخدم الأدوات المساعدة وفق ما تمليه الضرورة.
 
تمّ تحديث جميع الأمثلة التي تتضمن أشرطة التنقل لتضمين الترميز جديد.
 
ترقيم الصفحات
 
إعادة كتابة المكوّن باستخدام flexbox.
 
لقد أصبحت الأصناف الصريحة (‎.page-item و ‎.page-link) ضرورية الآن في العناصر الموجود داخل ‎.pagination
 
إزالة المكوّن ‎.pager بشكل كامل، إذ لم تكن إلا أزرارا بدون خلفية مخصصة.
 
عناصر التنقّل Breadcrumb


لقد أصبح من الضروري استخدام صنف ‎.breadcrumb-item  صريح في كل العناصر المُحتواة في ‎.breadcrumbs
=== مجموعات القوائم ===
* إعادة كتابة هذا المكوّن باستخدام flexbox.
* استبدال العنصر <code>a.list-group</code> بالصنف الصريح <code>‎.list-group-item-action</code> لتنسيق الروابط وإصدارات الأزرار في عناصر مجموعة القوائم.
* إضافة الصنف <code>‎.list-group-flush</code> لاستخدامه مع البطاقات.


اللاصقات والشارات
=== النوافذ الشرطية ===
* إعادة كتابة هذا المكون باستخدام flexbox.
* نتيجة للانتقال إلى استخدام flexbox، من المحتمل أن تنكسر محاذاة أيقونات الاستبعاد في الترويسة، لأنّنا لم نعد نستخدم العناصر العائمة. إذ أنّ المحتوى العائم يأتي أولًا، وذلك على خلاف Flexbox. لذا عليك تحديث أيقونات الاستبعاد حتى تأتي بعد عناوين النافذة الشرطية لكي تتجنّب هذا الخلل.
* إزالة الخيار <code>remote</code> (الذي يمكن استخدامه لتحميل المحتويات الخارجية وإدخالها تلقائيًا في النافذة الشرطية)، كما أُزيل أيضًا الحدث المقابل له <code>loaded.bs.modal</code>. نوصي أن تستخدم بدلاً منه قوالب من جانب العميل أو إطار عمل متخصّص في ربط البيانات أو استدعاء [https://api.jquery.com/load/ jQuery.load] بنفسك.


تجميع ‎.label و ‎.badge لتمييزها عن عناصر <label>  وتبسيط المكونات ذات الصلة.
=== عناصر التنقل Navs ===
* إعادة كتابة هذا المكوّن باستخدام flexbox.
* إزالة جميع المحدّدات <code><</code>  بُغية تبسيط التنسيق عبر الأصناف غير المتداخلة.
* لقد أصبحنا نستخدم أصناف منفصلة لعناصر  <code>‎.nav</code> و <code>‎.nav-item</code> و ‎<code>.nav-item</code> بدلاً  من محدّدات HTML الخاصة من قبيل <code>‎.nav > li > a</code>، وهذا يجعل ترميز HTML أكثر مرونة مع تسهيل إمكانية التوسيع.


إضافة ‎.badge-pill كمُعدِّل لمظهر الأقراص المستدير.
=== شرائط التنقل Navbar ===
لقد أعدنا كتابة [[Bootstrap/navbar|شرائط التنقل]] بالكامل باستخدام flexbox، مع تحسين دعم المحاذاة والتجاوب والتخصيص.
* تُطبَّق سلوكيات شرائط التنقل المتجاوبة على الصنف <code>‎.navbar</code> عبر الصنف '''الإجباري''' ‎<code>.navbar-expand- {breakpoint}‎</code> حيث تريد أن يُطوى شريط التنقل. في السابق كان هذا ممكنا عبر تعديل أحد متغيرات Less، لذا كان يتطلب إعادة التصريف.
* أصبحت <code>‎.navbar-default</code> حاليا ‎<code>.navbar-light</code>، إلا أنّ <code>‎.navbar-dark</code> ما تزال كما هي. '''لا بد من إضافة أحدهما إلى شريط التنقل'''. لكن اعلم أنّ هذه الأصناف لم تعد تعيّن ألوان الخلفية؛ وإنّما تؤثّر على اللون فقط.
* تتطلب شرائط التنقل الآن إضافة الخلفية. اختر ما تشاء من ألوان الخلفية عبر أدوات الخلفية (<code>‎.bg-*</code>‎)، أو [[Bootstrap/navbar#.D9.85.D9.8F.D8.AE.D8.B7.D9.8E.D9.91.D8.B7.D8.A7.D8.AA .D8.A7.D9.84.D8.A3.D9.84.D9.88.D8.A7.D9.86|اختر واحدًا مخصّصا عبر أصناف  light/inverse]].
* نتيجة استخدام Flexbox، يمكن لشرائط التنقل الآن استخدام أدوات Flexbox لتسهيل خيارات المحاذاة.
* لقد غيرنا <code>‎.navbar-toggle</code> إلى <code>‎.navbar-toggler،</code> وأصبح لها أنماط تنسيق ووسوم مختلفة (لم تعد هناك 3 عناصر من <code><nowiki><span></nowiki></code>).
* إزالة الصنف <code>‎.navbar-form</code> بالكامل. إذ لم يعد ضروريًا. بدلاً من ذلك، ما عليك سوى استخدام <code>‎.form-inline</code> وتطبيق أدوات الهامش عند الضرورة.
* لم تعد شرائط التنقل تتضمن <code>margin-bottom</code> أو  <code>border-radius</code> ابتدائيًا. استخدم الأدوات المساعدة وفق ما تمليه الضرورة.
* تمّ تحديث جميع الأمثلة التي تتضمن أشرطة التنقل لتضمين الترميز جديد.


لم تعد الشارات عائمة تلقائيًا في مجموعات القوائم والمكونات الأخرى. لأجل ذلك عليك استخدام الأصناف المساعدة.
=== ترقيم الصفحات ===
* إعادة كتابة هذا المكوّن باستخدام flexbox.
* لقد أصبحت الأصناف الصريحة (<code>‎.page-item</code> و <code>‎.page-link</code>) ضرورية الآن في العناصر الموجود داخل <code>‎.pagination</code>
* إزالة المكوّن <code>‎.pager</code> إزالة كاملة، إذ لم تكن إلا أزرارًا بدون خلفية مخصصة.


إزالة ‎.badge-default وإضافة ‎.badge-secondary لمطابقة أصناف التعديل الخاصة بالمكونات المستخدمة في المواضع الأخرى.
=== عناصر التنقل Breadcrumb ===
* لقد أصبح من الضروري استخدام الصنف <code>‎.breadcrumb-item</code> صراحة في كل العناصر المُحتواة في <code>‎.breadcrumbs</code>


اللوحات والصور المصغرة والجدران
=== اللاصقات والشارات ===
* تجميع <code>‎.label</code> و <code>‎.badge</code> لتمييزها عن عناصر <code><label></code> وتبسيط المكونات ذات الصلة.
* إضافة <code>‎.badge-pill</code> كمُعدِّل لمظهر الأقراص المستديرة.
* لم تعد الشارات عائمة تلقائيًا في مجموعات القوائم والمكونات الأخرى. إن أردت ذلك عليك استخدام الأصناف المساعدة.
* إزالة <code>‎.badge-default</code> وإضافة <code>‎.badge-secondary</code> لمطابقة أصناف التعديل الخاصة بالمكونات المستخدمة في المواضع الأخرى.


=== اللوحات والصور المصغرة والجدران ===
تم إزالتها بالكامل وتعويضها بمكون البطاقة الجديد.
تم إزالتها بالكامل وتعويضها بمكون البطاقة الجديد.


اللوحات
=== اللوحات ===
 
* أعدنا بناء العناصر من <code>‎.panel</code> إلى <code>‎.card</code> باستخدام flexbox.
أعدنا بناء العناصر من ‎.panel إلى ‎.card باستخدام flexbox.
* أزلنا <code>‎.panel-default</code> الافتراضي ولم نعوضه.
 
* أزلنا كذلك الصنف <code>‎.panel-group</code> ولم نعوضه. أما الصنف <code>‎.car-group</code> فليس بديلاً لها، فهو مختلف.
أزلنا ‎.panel-default الافتراضي ولم نعوضها.
* تغيير <code>‎.panel-heading</code> إلى ‎<code>.‎card-header</code>
 
* تغيير <code>‎.panel-title</code> إلى ‎<code>.card-title</code>. بناءً على المظهر الذي تريد تصميمه، قد ترغب أيضًا في استخدام عناصر أو أصناف العناوين (على سبيل المثال، <code>‎<nowiki><h3>، .h3</nowiki></code>) أو العناصر أو الأصناف الغليظة (مثل <code><nowiki><strong>، <b></nowiki></code> أو <code>‎.font-weight-bold</code> ). لاحظ أن ‎<code>.card-title</code> تنتج مظهرًا مختلفًا عن <code>‎.panel-title</code> رغم تماثل الأسماء
أزلنا كذلك ‎.panel-group ولم نعوضها. أما ‎.car-group فليست بديلاً لها، فهي مختلفة.
* تغيير <code>‎.panel-body</code> إلى <code>‎.card-body</code>
 
* تغيير <code>‎.panel-footer</code> إلى <code>‎.card-footer</code>
تغيير ‎.panel-heading إلى ‎.‎card-header
* إزالة <code>‎.panel-basic</code> و <code>‎.panel-Success</code> و <code>‎.panel-info</code> و <code>‎.panel-warning</code> و <code>‎.panel-risk</code> وتعويضها بالأصناف <code>‎.bg-‎</code> و <code>‎. text-‎</code> و <code>‎.border</code> المُنشأة من قاموس Sass المُسمّى <code>‎$theme-colors</code>.
 
تغيير ‎.panel-title إلى ‎.card-title. بناءً على المظهر الذي تريد تصميمه، قد ترغب أيضًا في استخدام عناصر أو أصناف العناوين (على سبيل المثال، <nowiki><h3>، .h3) أو العناصر أو الأصناف الغليظة (مثل <strong>، <b> أو ‎.font-weight-bold ). لاحظ أن ‎.card-title تنتج مظهرًا مختلفًا عن ‎.panel-title رغم تماثل الأسماء</nowiki>
 
تغيير ‎.panel-body إلى ‎.card-body
 
تغيير ‎.panel-footer إلى ‎.card-footer
 
إزالة ‎.panel-basic و ‎.panel-Success و ‎.panel-info و ‎.panel-warning و ‎.panel-risk وتعويضها بالأصناف .bg-‎ و ‎. text-‎ و ‎.border المُنشأة من قاموس Sass المُسمّى ‎$theme-colors.
 
شريط التقدم


تعويض الأصناف السياقية ‎.progress-bar-*‎ السياقية بالأصناف ‎.bg-*‎. على سبيل المثال، استخدم ‎class="progress-bar bg-danger"‎ بدلا من class="progress-bar progress-bar-danger"‎
=== شريط التقدم ===
* تعويض الأصناف السياقية ‎<code>.progress-bar-*‎</code> بالأصناف <code>‎.bg-*‎</code>.استخدم مثلًا <code>‎class="progress-bar bg-danger"‎</code> بدلًا من <code>class="progress-bar progress-bar-danger"‎</code>
* تبديل ‎<code>.active</code> في شرائط التقدم المتحركة بالصنف ‎<code>.progress-bar-animated</code>.


تبديل ‎.active في شرائط التقدم المتحركة بالصنف ـ‎ .progress-bar-animated.
=== الدوار Carousel ===
* مراجعة المكوّن بالكامل لتبسيط التصميم والتنسيق. أصبح عدد الأنماط التي يمكنك إعادة كتابتها أقل، علاوة على إضافة مؤشرات وأيقونات جديدة.
* ألغينا التداخل في جميع أنماط CSS وأعدنا تسميتها، وقد أصبحت كل الأصناف مسبوقة بـ. <code>carousel-‎.</code>
** بالنسبة لعناصر الدوار  <code>‎.next</code> و <code>prev.</code> و <code>‎.left</code>  و <code>‎‎. right</code> أصبحت الآن <code>‎. carousel-item-next</code> و <code>‎.carousel-item-prev</code> و <code>‎.carousel-item-left</code> و <code>‎.carousel-item-right</code>.
** كما أصبحت <code>‎.item</code> الآن <code>‎.carousel-item</code>.
** بالنسبة لعناصر التحكم prev/next ، أصبحت <code>‎.carcarel-control.right</code> و <code>‎.carousel-control.left</code> الآن <code>‎.carousel-control-next</code> و <code>‎.carousel-control-prev</code>، مما يعني أنها لم تعد تتطلب صنفا أبًا معيّنا.
* إزالة جميع الأنماط المتجاوبة، والإحالة إلى الأدوات المساعدة (على سبيل المثال، عرض اللاصقات التوضيحية في إطارات عرض معينة) والأنماط المخصصة حسب الحاجة.
* إزالة تجاوز (overrides) الصور  في عناصر الدوار، عليك أن تستخدم بدلها الأدوات المساعدة.
* تعديل مثاال الدوار ليتضمّن الترميز والأنماط الجديدة.


الدوار
=== الجداول ===
* إزالة دعم الجداول المتداخلة المُنسّقة. أصبحت جميع أنماط الجدول موروثة الآن في الإصدار 4 لتسهيل كتابة المحددات.
* إضافة الجداول المعكوسة.


مراجعة المكوّن بالكامل لتبسيط التصميم والتنسيق. أصبح عجد الأنماط التي يمكنك إعادة كتابتها أقل، علاوة على مؤشرات وأيقونات جديدة.
=== الأدوات المساعدة ===
* '''Display و hidden وغيرها:'''
** جعل أدوات العرض متجاوبة (مثل <code>d-none</code> و <code>d-{sm,md,lg,xl}-none</code>).
** إزالة الأصناف <code>‎.hidden-*</code>‎ من الأدوات المساعدة وتعويضها [[Bootstrap/display|بأدوات عرض]] جديدة. على سبيل المثال، بدلًا من <code>‎.hidden-sm-up</code>، استخدم <code>‎.d-sm-none</code>. أعيدت تسمية أدوات <code>‎.hidden-print</code> لاستخدام نظام التسمية المُتّبع في أدوات العرض. يمكنك الاطلاع على مزيد من المعلومات ضمن قسم الأدوات المساعدة المتجاوبة أدناه.
** إضافة الأصناف ‎<code>.float-{sm,md,lg,xl}-{left,right,none}‎</code> لاستخدامها مع العناصر العائمة المتجاوبة، كما أزيلت <code>‎.pull-left</code> و ‎<code>.pull-right</code> لأنها مكررة وتشبه <code>‎.float-left</code> و <code>‎.float-right</code>.
* '''النوع:'''
** إضافة تنوعات متجاوبة إلى أصناف محاذاة النص  <code>‎.text-{sm,md,lg,xl}-{left,center,right}‎</code>
* '''المحاذاة والتباعد:'''
** إضافة أدوات متجاوبة جديدة للهوامش والحواشي لجميع الجوانب، بالإضافة إلى بعض الاختصارات الرأسية والأفقية.
** إضافة العديد من أدوات flexbox .
** إزالة <code>‎.center-block</code>  وتعويضها بالصنف لجديد <code>‎.mx-auto</code>
* تحديث Clearfix لإزالة دعم الإصدارات الأقدم من المتصفحات.


ألغينا التداخل في جميع أنماط CSS وأعدنا تسميتها، وقد أصبحت كل الأصنافمسبوقة بـ. carousel-‎.
=== مخاليط سوابق المتصفحات ===
أزيلت مخاليط [https://www.lifewire.com/css-vendor-prefixes-3466867 بادئات المتصفحات] الخاصة بالإصدار 3 من Bootstrap، إذ أصبحت مُتجاوزة ابتداء من الإصدار 3.2.0، وأزيلت في الإصدار 4. ونظرًا لأننا نستخدم [https://github.com/postcss/autoprefixer Autoprefixer]، فلم تعد ضرورية.


بالنسبة لعناصر الدوار، .next,و ‎.next و prev. و ‎.left  و ‎‎. right أصبحت الآن ‎. carousel-item-next و ‎.carousel-item-prev و ‎.carousel-item-left و ‎.carousel-item-right.
لقد أزلنا المخاليط التالية:
 
* <code>animation</code>
كما أصبحت ‎.item الآن ‎.carousel-item.
* <code>animation-delay</code>
 
* <code>animation-direction</code>
بالنسبة لعناصر التحكم prev/next ، أصبحت ‎.carcarel-control.right و ‎.carousel-control.left الآن ‎.carousel-control-next و ‎.carousel-control-prev، مما يعني أنها لم تعد تتطلب صنفا أبًا معيّنا.
* <code>animation-duration</code>
 
* <code>animation-fill-mode</code>
إزالة جميع الأنماط المتجاوبة، والإحالة إلى الأدوات المساعدة (على سبيل المثال، عرض اللاصقات التوضيحية في إطارات عرض معينة) والأنماط المخصصة حسب الحاجة.
* <code>animation-iteration-count</code>
 
* <code>animation-name</code>
إزالة تجاوز (overrides) الصور  في عناصر الدوار، عليك أن تستخدم بدلها الأدوات المساعدة.
* <code>animation-timing-function</code>
 
* <code>backface-visibility</code>
تعديل مثاال الدوار ليتضمّن الترميز والأنماط الجديدة.
* <code>box-sizing</code>
 
* <code>content-columns</code>
الجداول
* <code>hyphens</code>
 
* <code>opacity</code>
إزالة دعم الجداول المتداخلة المُنسّقة. أصبحت جميع أنماط الجدول موروثة الآن في الإصدار 4 لتسهيل كتابة المحددات.
* <code>perspective</code>
 
* <code>perspective-origin</code>
إضافة الجداول المعكوسة.
* <code>rotate</code>
 
* <code>rotateX</code>
الأدوات المساعدة
* <code>rotateY</code>
 
* <code>scale</code>
Display و hidden وغيرها:
* <code>scaleX</code>
 
* <code>scaleY</code>
جعل أدوات العرض متجاوبة (مثل d-none و d-{sm,md,lg,xl}-none).
* <code>skew</code>
 
* <code>transform-origin</code>
إزالة الأصناف ‎.hidden-*‎ من الأدوات المساعدة وتعويضها بأدوات عرض جديدة. على سبيل المثال، بدلاً من ‎.hidden-sm-up، استخدم ‎.d-sm-none. أعيدت تسمية أدوات ‎.hidden-print لاستخدام نظام التسمية في أدوات العرض. يمكنك الاطلاع على مزيد من المعلومات ضمن قسم الأدوات المساعدة المتجاوبة في هذه الصفحة.
* <code>transition-delay</code>
 
* <code>transition-duration</code>
إضافة الأصناف .float-{sm,md,lg,xl}-{left,right,none} لتاستخدامها مع العناصر العائمة المتجاوبة، كما أزيلت ‎.pull-left و ‎.pull-right لأنها مكررة وتشبه ‎.float-left و ‎.float-right.
* <code>transition-property</code>
 
* <code>transition-timing-function</code>
النوع:
* <code>transition-transform</code>
 
* <code>translate</code>
إضافة تنوعات متجاوبة إلى أصناف محاذاة النص  ‎.text-{sm,md,lg,xl}-{left,center,right}‎
* <code>translate3d</code>
 
* <code>user-select</code>
المحاذاة والتباعد:
 
إضافة أدوات متجاوبة جديدة للهوامش والحواشي لجميع الجوانب، بالإضافة إلى بعض الاختصارات الرأسية والأفقية.
 
إضافة العديد من أدوات flexbox .
 
إزالة ‎.center-block  وتعويضها بالصنف لجديد ‎.mx-auto
 
تم تحديث Clearfix لإزالة دعم الإصدارات الأقدم من المتصفحات.
 
مخاليط سوابق المتصفحات
 
أزيلت مخاليط بادئات المتصفحات الخاصة بالإصدار 3 من Bootstrap، والتي أصبحت مُتجاوزة ابتداء من الإصدار 3.2.0، في Bootstrap 4. نظرًا لأننا نستخدم Autoprefixer، فلم تعد ضرورية.
 
لقد أزلنا المخاليط التالية: animation, animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-timing-function, backface-visibility, box-sizing, content-columns, hyphens, opacity, perspective, perspective-origin, rotate, rotateX, rotateY, scale, scaleX, scaleY, skew, transform-origin, transition-delay, transition-duration, transition-property, transition-timing-function, transition-transform, translate, translate3d, user-select
 
التوثيق


== التوثيق ==
شهد التوثيق تحديثا كذلك. وهذه أهم الترقيات:
شهد التوثيق تحديثا كذلك. وهذه أهم الترقيات:
* ما زلنا نستخدم Jekyll، ولكن أصبحنا نستخدم ملحقات أخرى علاوة عليها:
** يُستخدم <code>bugify.rb</code> لسرد الإدخالات بكفاءة في صفحة [https://getbootstrap.com/docs/4.5/browser-bugs/ أخطاء المتصفح].
** <code>example.rb</code> هو فرع مُخصّص من الملحقة <code>highlight.rb</code> الافتراضية، إذ يسهل معالجة شفرات الأمثلة.
** <code>callout.rb</code> هو فرع مخصص مماثل، ولكنّه مصمّم ليناسب التوثيق خاصتنا.
** يستخدم [https://github.com/toshimaru/jekyll-toc jekyll-toc] لإنشاء جداول المحتويات.
* أعيد كتابة كل محتوى التوثيق بترميز Markdown (بدلاً من HTML) لتسهيل تحريره وتعديله.
* أعيد تنظيم الصفحات لتبسيط المحتوى، وتحسين تنظيم التوثيق.
* انتقلنا من CSS العادي إلى SCSS للاستفادة من المتغيرات والمخاليط وغيرهما من الميزات.


ما زلنا نستخدم Jekyll، ولكن أصبحنا نستخدم ملحقات أخرى علاوة على ذلك:
=== الأدوات المساعدة المتجاوبة ===
 
إزالة جميع المتغيرات <code>‎@screen-</code>‎ من الإصدار 4.0.0. استخدم بدلها  <code>media-breakpoint-up()‎</code> أو <code>media-breakpoint-down()‎</code> أو المخاليط <code>media-breakpoint-only()</code>‎ أو القاموس <code>‎$grid-breakpoints</code>.
يُستخدم bugify.rb لسرد الإدخالات بكفاءة في صفحة أخطاء المتصفح.
 
example.rb هو فرع مُخصّص من الملحقة highlight.rb الافتراضية، إذ يسهل معالجة شفرات الأمثلة.
 
callout.rb هو فرع مخصصة مماثل، ولكنّه مصمّم لأجل لتوضيح مستنداتنا.
 
يستخدم jekyll-toc لإنشاء جداول المحتويات.
 
أعيد كتابة كل محتوى التوثيق بترميز Markdown (بدلاً من HTML) لتسهيل التحرير والتعديل.
 
أعيد تنظيم الصفحات لتبسيط المحتوى، وتحسين التسلسل الهرمي للتوثيق.
 
انتقلنا من CSS العادي إلى SCSS للاستفادة من المتغيرات والمخاليط وغيرهما.
 
الأدوات المساعدة المتجاوبة
 
إزالة جميع المتغيرات ‎@screen-‎ من الإصدار v4.0.0. استخدم بدلها  media-breakpoint-up()‎ أو media-breakpoint-down()‎ أو المخاليط media-breakpoint-only()‎ أو القاموس ‎$grid-breakpoints بدلاً من ذلك.
 
إزالة أصناف الأدوات المساعدة المتجاوبة إلى حد كبير وتعويضها بأدوات عرض صريحة.
 
إزالة الصنفين ‎.hidden و ‎.show بسبب تعارضهما مع التابعين أساليب ‎$(...).hide()‎ و ‎$(...).show()‎ في jQuery. بدلاً منها، حاول تبديل الخاصية [hidden] أو استخدم الأنماط المضمنة، مثل style = "display: none؛"‎‎‎‎‎ و style="display: block;"‎
 
إزالة جميع أصناف ‎.hidden-‎ باستثناء أدوات الطباعة المساعدة التي أعيدت تسميتها.
 
أزيلت هذه الأصناف من الإصدار 3:  .hidden-xs .hidden-sm .hidden-md .hidden-lg .visible-xs-block .visible-xs-inline .visible-xs-inline-block .visible-sm-block .visible-sm-inline .visible-sm-inline-block .visible-md-block .visible-md-inline .visible-md-inline-block .visible-lg-block .visible-lg-inline .visible-lg-inline-block
 
أزيلت هذه الأصناف من الإصدار 4: hidden-xs-up .hidden-xs-down .hidden-sm-up .hidden-sm-down .hidden-md-up .hidden-md-down .hidden-lg-up .hidden-lg-down
 
لم تعد أدوات الطباعة تبدأ بـ ‎.hidden-‎ أو ‎.visible-‎ ولكن بـ ‎.d-print-‎.
 
الأسماء القديمة: .visible-print-block، .visible-print-inline، .visible-print-inline-block، .hidden-print
 
أصناف جديدة: .d-print-block، .d-print-inline، .d-print-inline-block، .d-print-none
 
بدلاً من استخدام الأصناف‎.visible-*‎ الواضحة، يمكنك جعل عنصر ما مرئيًا بعدم إخفائه عند الحجم المعيّن من الشاشة. يمكنك الجمع بين أصناف ‎.d-*-none - مع أحد أصناف ‎.d-*-block لتضمن ألا يظهر العنصر إلا في مجال معيّن من أحجام الشاشة (على سبيل المثال، عند استخدام الصنف ‎.d-none.d-md-block.d-xl-none، لن يظهر العنصر إلا في الأجهزة المتوسطة والكبيرة).
 
لاحظ أنّ التغييرات على نقاط الشبكة الحدية في الإصدار 4 تستوجب زيادة مستوى أعلى في النقاط الحدية لتحقيق النتائج نفسها. لا تحاول أصناف الأدوات المساعدة المتجاوبة الجديدة استيعاب الحالات غير الشائعة حيث يتعذّر التعبير عن منظورية العنصر كمجال واحد متجاور من أحجام إطار العرض ؛ إن أردت تحقيق ذلك عليك  استخدام أنماط CSS مخصصة.


لقد أزلنا أصناف الأدوات المساعدة المتجاوبة وعوضناها بأدوات عرض صريحة.
* إزالة الصنفين <code>‎.hidden</code> و ‎<code>.show</code> بسبب تعارضهما مع التابعين <code>‎$(...).hide()‎</code> و ‎<code>$(...).show()</code>‎ في jQuery. بدل استخدامها، حاول تبديل الخاصية <code>[hidden]</code> أو استخدم الأنماط المضمنة مثل <code>"‎‎‎</code>‎‎‎‎‎‎<code>style = "display: none;‎</code> و <code>style="display: block;"‎</code>
* إزالة جميع أصناف <code>‎.hidden-</code>‎ باستثناء أدوات الطباعة المساعدة، والتي أعيد تسميتها.
** أزيلت هذه الأصناف من الإصدار 3:<syntaxhighlight lang="text">
‎.hidden-xs .hidden-sm .hidden-md .hidden-lg .visible-xs-block .visible-xs-inline .visible-xs-inline-block .visible-sm-block .visible-sm-inline .visible-sm-inline-block .visible-md-block .visible-md-inline .visible-md-inline-block .visible-lg-block .visible-lg-inline .visible-lg-inline-block
</syntaxhighlight>
** أزيلت هذه الأصناف من الإصدار 4:<syntaxhighlight lang="text">
hidden-xs-up .hidden-xs-down .hidden-sm-up .hidden-sm-down .hidden-md-up .hidden-md-down .hidden-lg-up .hidden-lg-down
</syntaxhighlight>
* لم تعد أدوات الطباعة تبدأ بـ <code>‎.hidden-</code>‎ أو <code>‎.visible-‎</code> ولكن بـ <code>‎.d-print-‎</code>.
** الأسماء القديمة: <code>‎.visible-print-block</code> و <code>‎.visible-print-inline</code> و‎ <code>.visible-print-inline-block</code> و<code>‎ .hidden-print</code>
** أصناف جديدة: <code>‎.d-print-block</code> و  <code>‎.d-print-inline</code> و  <code>‎.d-print-inline-block</code> و <code>‎.d-print-none</code>
بدلاً من استخدام الأصناف<code>‎.visible-*</code>‎ صراحة، يمكنك جعل عنصر ما مرئيًا بعدم إخفائه عند حجم معيّن من الشاشة. يمكنك الجمع بين أصناف <code>‎.d-*-none</code> وأحد أصناف <code>‎.d-*-block</code> لتضمن ألا يظهر العنصر إلا في مجال معيّن من أحجام الشاشة (على سبيل المثال، إن استخدمت الصنف <code>‎.d-none.d-md-block.d-xl-none</code>، فلن يظهر العنصر إلا في الأجهزة المتوسطة والكبيرة).


لاحظ أنّ التغييرات على نقاط الشبكة الحدية في الإصدار 4 تستوجب زيادة مستوى الطبقة في النقاط الحدية لتحقيق النتائج نفسها. لا تحاول أصناف الأدوات المساعدة المتجاوبة الجديدة استيعاب الحالات غير الشائعة التي يتعذّر فيها التعبير عن منظورية (visibility) العنصر كمجال واحد متجاور من أحجام إطارات العرض؛ إن أردت تحقيق ذلك عليك استخدام أنماط CSS مخصصة.
== مصادر ==
== مصادر ==
* [https://getbootstrap.com/docs/4.5/components/alerts/ صفحة Alerts في توثيق Bootstrap].
* [https://getbootstrap.com/docs/4.5/migration/ صفحة migration في توثيق Bootstrap].
[[تصنيف:Bootstrap|{{SUBPAGENAME}}]]
[[تصنيف:Bootstrap|{{SUBPAGENAME}}]]

المراجعة الحالية بتاريخ 08:58، 21 يوليو 2020

الإصدار الرابع من Bootstrap  هو إعادة كتابة جذرية للمشروع بأكمله. سنلخّص في هذه الصفحة أبرز التغييرات التي أتى بها هذا الإصدار، ثمّ سنسرد التغييرات بحسب كل مكونة على حدة.

التغييرات المستقرة

بالنسبة لمن يريد الانتقال من الإصدار بيتا 3 إلى أيّ من إصدارات ‎4.x‎ المستقرة، فلا توجد تغييرات جذرية (breaking changes) للتوافق، بيد أنّ هناك بعض التغييرات التي يجدر الانتباه إليها.

الطباعة

  • أدوات إصلاح علل الطباعة. كان استخدام الأصناف ‎.d-print-*‎ يؤدي في السابق إلى إلغاء أصناف ‎.d-* ‎ الأخرى. أما الآن فهي تتطابق مع أدوات العرض الأخرى، كما لا تنطبق إلا على الوسائط المعنية (‎@media print).
  • توسيع أدوات عرض الطباعة المتاحة لتتناسب مع الأدوات المساعدة الأخرى. لم يتوفر الإصدار بيتا 3 وما دونه إلا على inline-block و inline و none. و لقد أضاف الإصدار 4  إلى ذلك flex و inline-flex و table و  table-row و  table-cell.
  • إتاحة معاينة الطباعة الثابتة عبر المتصفحات مع أنماط طباعة جديدة تتيح تحديد حجم الصفحة ‎@page size

تغييرات بيتا 3

شهد الإصدار بيتا 2 الجزء الأكبر من التغييرات الجذرية للتوافق خلال مرحلة التطوير بيتا، إلا أنه لا تزال هناك بعض التغييرات التي يجب معالجتها في الإصدار بيتا 3. يجدر أخذ هذه التغييرات بالحسبان إن كنت تريد التحديث إلى الإصدار بيتا 3 من الإصدار بيتا 2 أو أيّ إصدار أقدم.

معلومات متنوعة

  • إزالة المتغير ‎$thumbnail-transition. لم نكن ننقل أي شيء، لذلك لم تكن هناك حاجة إلى هذا المتغير.
  • لم تعد حزمة npm تتضمن أي ملفات بخلاف ملفات المصدر  source والمورد dist؛ إذا كنت تعتمد عليها وكنت تشغّل برامجنا النصية عبر المجلد node_modules، فعليك تعديل سير عملك.

الاستمارات

  • أعدنا كتابة مربعات التأشير وأزرار الانتقاء المخصصة والابتدائية. أصبح لكليهما الآن بنية HTML متطابقة (وسوم خارجية <div> مع إخوة <input> و <label>) ونفس أنماط التخطيط (مكدّسة ابتداء، ومضمّنة مع صنف مُعدِّل modifier class). يتيح لنا هذا تصميم اللاصقات بناءً على حالة الإدخال، وكذلك تبسيط دعم الخاصية disabled (التي كانت تتطلب في السابق صنفا أبويا) ودعم تصديق الاستمارات. رافق هذا تغيير أنماط CSS لإدارة صور الخلفية المتعددة على مربعات التأشير والانتقاء المخصصة. كان لعنصر ‎.custom-control-indicator- المحذوف حاليا - لون خلفية متدرج وأيقونة SVG. تخصيص تدرج الخلفية يعني ضرورة استبدال كل تلك العناصر في كل مرة تحتاج فيها إلى تغيير أحدها. أما الآن فأصبحنا نستخدم ‎.custom-control-label::before لأجل التعبئة والتلوين المتدرج، فيما يتكفل ‎.custom-control-label::after بالأيقونة. إن أردت جعل مربع التأشير ضمنيا، فأضف الصنف ‎.custom-control-inline.
  • تحديث محدّدات مجموعات الأزرار الخاصة بالمدخلات. فبدلًا من استخدام ‎[data-toggle = "button"] {}‎ للتحكم في التنسيق والسلوك، أصبحنا نستخدم خاصية البيانات data حصرًا لأجل التحكم في سلوكات جافاسكربت، فيما نعتمد على الصنف الجديد ‎.btn-group-togg لأجل التنسيق.
  • إزالة ‎.col-form-legend وتعويضه بصنف مُحسّن ‎.col-form-label، بهذه الطريقة يمكن استخدام ‎.col-form-label-sm و ‎.col-form-label-lg على عناصر <legend> بكل سهولة.
  • تغيير متغير عناصر إدخال الملفات المخصصة ‎$custom-file-text. فلم يعد قاموسا متشعبا في Sass، وهو الآن يعمل حصرا على سلسلة نصية واحدة فقط — زر التصفح Browse الذي أصبح الآن العنصر الزائف الوحيد الذي يُنشأ عبر Sass. يأتي نص اختيار الملف Choose file من اللاصقة ‎.custom-file-label.

مجموعات الإدخال

  • أصبحت إضافات مجموعة الإدخال محدّدة الآن في مواضعها نسبة إلى عنصر الإدخال. لقد أزلنا ‎.input-group-addon و ‎.input-group-btn وعوّضناهما بصنفين جديدين: ‎.input-group-prepend و ‎.input-group-append. يجب عليك أن تستخدم صراحة الإلحاق append  أو الإسباق prepend لتبسيط استخدام CSS. خلال الإلحاق أو الإسباق، ضع الأزرار كما هو معتاد، ولكن مع تغليف النص في عنصر ‎.input-group-text.
  • أصبحت أنماط التصديق مدعومة الآن، وكذلك عناصر الإدخال المتعددة (مع ذلك لا يمكن التصديق إلا على عنصر إدخال واحد فقط في كل مجموعة).
  • يجب أن توضع أصناف الأحجام في الأب ‎.‎input-group‎. وليس في عناصر الاستمارة الفردية.

تغييرات الإصدار بيتا 2

نحاول قدر الإمكان تجنب إجراء أيّ تغيير جذري للتوافق في الإصدار التجريبي بيتا. ولكن ليس كل ما يُبتغى يُنال. فيما يلي بعض التغييرات الجذرية التي يجب أخذها بالحسبان عند الانتقال من الإصدار بيتا 1 إلى بيتا 2.

  • إزالة المتغير ‎$badge-color واستخدامه على عناصر ‎.badge. أصبحنا نستخدم دالة تباين الألوان لاختيار اللون بناءً على لون الخلفية، لذا لم يعد هذا المتغير ضروريا.
  • إعادة تسمية الدالة grayscale()‎ إلى gray()‎ لتجنب التعارض مع مرشحات التدرج الرمادي الأصلية في CSS.
  • إعادة تسمية ‎.table-inverse و ‎.thead-inverse و ‎.thead-default إلى ‎ .*-dark و ‎.*-light، وذلك لمطابق مخططات الألوان المستخدمة في المواضع الأخرى.
  • تنشئ الجداول المتجاوبة الآن أصنافًا لكل نقطة حدية للشبكة. هذا يكسر التوافق مع الإصدار بيتا 1 من حيث أنّ ‎.table-responseive المُستخدم سابقا شبيه  بالصنف ‎.table-responseive-md. يمكنك الآن استخدام ‎.table-responseive أو ‎.table-responseive- {sm، md، lg، xl}‎.
  • التوقف عن دعم Bower، ذلك أنّ مدير الحزم هذا أصبح مُتجاوزًا موازنة بالبدائل المتاحة (مثل Yarn أو npm). انظر bower/bower#2298 لمزيد من التفاصيل.
  • ما يزال Bootstrap يتطلب jQuery 1.9.1 أو أعلى، ولكن يُنصح باستخدام الإصدار ‎3.x نظرًا لأن المتصفحات المدعومة من ‎3.x هي التي يدعمها Bootstrap،  علاوة على ذلك فإنّ الإصدار ‎3.x فيه بعض العلل الأمنية.
  • إزالة الصنف غير المستخدم ‎.form-control-label. كان هذا الصنف نسخة مكررة من الصنف ‎.col-form-label الذي كان يُوسِّط رأسيا عناصر <label> وعناصر الإدخال المرتبطة بها في خطاطات الاستمارات الأفقية.
  • تحويل color-yiq من مخلوط يتضمن خاصية اللون إلى دالة تعيد قيمة، مما يتيح لك استخدامها في جميع خاصيات CSS. على سبيل المثال، بدلاً من كتابة color-yiq (# 000)‎، يمكنك الآن كتابة color: color-yiq (# 000)‎;‎.

أبرز النقاط

  • تقديم استخدام جديد لـ  pointer-events في النوافذ الشرطية. تمرّ النافذة الشرطية ‎.modal-dialog الخارجية عبر الأحداث ذات الخاصية pointer-events: none للتعامل مع النقرات المخصصة (مما يتيح الاكتفاء بالإنصات إلى ‎.modal-backdrop لأي نقرة)، ثم التفاعل معه في عناصر ‎.modal-content ذات الخاصية pointer-events: auto.

ملخص

فيما يلي عناصر التذاكر الأساسية التي يجب أن تأخذها بالحسبان عند الانتقال من الإصدار 3 إلى الإصدار 4.

دعم المتصفح

  • إزالة دعم IE8 و IE9 و iOS 6. لا يدعم الإصدار 4 من Bootstrap إلا IE10+‎ و iOS 7+‎. إن كان موقعك يحتاج أيّا من الإصدارات غير المدعومة، سيكون عليك استخدام Bootstrap 3.
  • إضافة دعم رسمي لمتصفح Android v5.0 Lollipop و إطارات العرض WebView. تظل الإصدارات السابقة من متصفح Android و WebView مدعومة، لكن دعمًا غير رسمي.

التغيرات العامة

  • أصبحت Flexbox مُمكَّنة افتراضيا. يعني هذا عمومًا التحوّل من العناصر العائمة، والتوجه إلى مكوناتنا.
  • استبدلنا Sass بـ Less لكتابة ملفات CSS المصدرية.
  • التبديل من الوحدة px إلى الوحدة rem كوحدة أساسية في CSS، بيد أنّ وحدات البكسل ما تزال تستخدم في استعلامات الوسائط وسلوك الشبكة لأنّ إطارات عرض الجهاز لا تتأثر بحجم النوع.
  • زيادة حجم الخط العام من 14 بكسل إلى 16 بكسل.
  • إتاحة طبقات شبكة جديدة لإضافة خيار خامس (لمعالجة الأجهزة ذات الحجم 576 بكسل فما دونه) وإزالة ‎-xs من تلك الأصناف. مثل: ‎.col-6و col-sm-4 و col-md-3.
  • تبديل خاصية القالب الاختيارية المنفصلة مكان خيارات قابلة للإعداد عبر متغيرات SCSS (على سبيل المثال: ‎$enable-gradients: true).
  • إصلاح نظام البناء لاستخدام سلسلة من برامج npm النصية بدلاً من Grunt. انظر ملف package.json لمطالعة جميع البرامج النصية، أو انظر الملف readme لأغراض التطوير المحلي.
  • لم يعد الاستخدام غير المتجاوب لـ Bootstrap مدعومًا.
  • إزالة أداة التخصيص عبر الإنترنت وتعويضها بتوثيق أكثر شمولًا وبناءات مخصّصة.
  • إضافة العشرات من أصناف الأدوات المساعدة الجديدة لأجل أزواج قيمة خاصيات CSS الشائعة، إضافة إلى اختصارات التباعد الخاصة بالهوامش والحواشي.

نظام الشبكة

  • الانتقال إلى Flexbox.
    • إضافة دعم Flexbox في مخلوط الشبكة والأصناف المُعرّفة مسبقًا.
      • تضمين دعم أصناف المحاذاة الرأسية والأفقية كجزء من Flexbox.
  • تحديث أسماء أصناف الشبكة وطبقات شبكة جديدة.
    • إضافة طبقة شبكة sm جديدة للشبكات ذات الأحجام الأقل من 768 بكسل لمزيد من التحكم. أصبحت لدينا الآن الطبقات xs و sm و md و lg و xl. هذا يعني أيضًا أنه تم رفع كل طبقة بمستوى واحد (لذلك فإنّ ‎.col-md-6 في الإصدار 3 أصبحت ‎.col-lg-6 في الإصدار 4).
    • تعديل أصناف الشبكة xs بحيث لا تتطلب استخدام رمز الطبقة ( infix)، وذلك تبيانا لكونها تبدأ في تطبيق الأنماط ابتداء من min-width: 0 وليس عند قيمة بكسلية محددة. بدلًا من ‎.col-xs-6، استخدم ‎.col-6. تتطلب بالمقابل جميع طبقات الشبكة الأخرى استخدام رمز الطبقة infix (مثلsm).
  • تحديث أحجام الشبكة والمخاليط،والمتغيرات.
    • أصبح لخنادق الشبكة الآن قاموس Sass لاستخدامه لتحديد عرض الخنادق في كل نقطة حدية.
    • تحديث مخاليط الشبكة لكي تستخدم المخلوط make-col-ready و make-col لتعيين قيم flex و max-width للأعمدة الفردية.
    • تغيير النقاط الحدية في استعلام الوسائط الخاص بنظام الشبكة وعرض الحاويات لمراعاة طبقات الشبكة الجديدة، والتأكد من أنّ الأعمدة قابلة للقسمة بالتساوي على 12 في عرضها الأقصى.
    • يُتعامل الآن مع النقاط الحدية للشبكة وعرض الحاويات عبر قواميس Sass‎‎‎‏ (‎$grid-breakpoints و ‎$container-max-widths‎) بدلاً من استخدام متغيرات منفصلة. لقد استُبدِلت المتغيرات ‎@screen-*‎، وأصبح بإمكانك تخصيص طبقات الشبكة بالكامل.
    • تم تغيير استعلامات الوسائط كذلك. بدلاً من تكرار إعلانات استعلام الوسائط بالقيمة نفسها في كل مرة، فقد وفّرنا الآن ‎@include media-breakpoint-up/down/only، فبدلاً من كتابة ‎@media (min-width: @screen-sm-min) { ... }‎، يمكنك كتابة ‎@include media-breakpoint-up(sm) { ... }‎.

المكونات

  • إزالة الألواح (panels) والصور المصغرة والجدران (wells) وتعويضها بمكون شامل جديد، وهو البطاقات.
  • إزالة أيقونات الخطوط Glyphicons. إذا كنت بحاجة إلى استخدام الأيقونات، فهذه بعض الخيارات المتاحة:
  • إزالة الملحقة Affix jQuery.
    • نوصي باستخدام position: sticky بدلاً من ذلك. راجع هذه الصفحة لمزيد من التفاصيل وبعض التوصيات الخاصة بالملء. أحد الاقتراحات الممكنة هو استخدام قاعدة ‎@supports لتقديمها (على سبيل المثال ‎@supports (position: sticky) { ... }‎))
    • إذا كنت تستخدم Affix لتطبيق أنماط إضافية غير موضعية، فقد لا يناسبك شيفرات عشوائية لتعويض نقص الدعم في المتصفحات. أحد الخيارات المتاحة في مثل هذه الحالات هو استخدام المكتبة ScrollPos-Styler.
  • إزالة مكوّن pager، إذ أنّه كان مجرد زرّ مخصّص.
  • إعادة تصميم جميع المكونات تقريبًا بُغية الإكثار من استخدام محددات الأصناف غير المتداخلة بدلاً من استخدام محدّدات الأبناء المخصّصة للغاية.

حسب المكونات

تبرز هذه القائمة التغييرات الرئيسية مُرتّبة حسب المكوّنات بين الإصدارين v3.xx و v4.0.0.

Reboot

Reboot هي إضافة جديدة إلى Bootstrap 4، وهي ورقة أنماط تعتمد على Normalize وعلى أنماط إعادة التعيين الخاصة بنا. لا تستخدم المحددات التي تظهر في هذا الملف إلا العناصر — إذ لا توجد أصناف هنا. هذا يعزل أنماط إعادة التعيين عن أنماط المكونات الخاصة، وذلك في إطار التوجه نحو مقاربة وحداتية (modular). بعض أبرز عمليات إعادة الضبط المُتضمّنة فيها هي تغيير box-sizing: border-box، والانتقال من وحدات em إلى وحدات rem في العديد من العناصر، وكذلك أنماط الروابط والعديد من عمليات إعادة تعيين عناصر الاستمارة.

الكتابة

  • نقل جميع أدوات ‎.text- ‎ إلى ملف ‎_utilities.scss.
  • إزالة ‎.page-header، وذلك لأنّه يمكن تطبيق أنماطه عبر الأدوات المساعدة.
  • إزالة ‎.dl -orizontal. استخدم بدلا منه ‎.row على عناصر <dl>، واستخدم أصناف أعمدة الشبكة (أو المخاليط) على أبناء <dt> و <dd>.
  • إعادة تصميم الاقتباسات ونقل أنماطها من عنصر <blockquote> إلى صنف واحد ‎.blockquote. وإزالة معدّل ‎.blockquote-reverse وتعويضه بأدوات المساعدة النصية.
  • يتطلب ‎.list-inline الآن أن يُطبّق الصنف ‎.list-inline-item الجديد على عناصر القائمة الفرعية الخاصة به.

صور

  • إعادة تسمية ‎.img-responsive إلى ‎.img-fluid
  • إعادة تسمية ‎.img-rounded تقريب إلى ‎.rounded
  • إعادة تسمية ‎.img-circle إلى ‎.rounded-circle

الجداول

  • لقد أُزيلت جميع نسخ محدّدات < تقريبًا، مما يعني أن الجداول المتداخلة سوف ترث الأنماط تلقائيًا من آبائها. يبسط هذا المحدّدات والتخصيصات تبسيطًا واضحًا.
  • إعادة تسمية ‎.table-condensed إلى ‎.table-sm لأجل حفظ الاتساق.
  • إضافة خيار ‎.table-inverse جديد.
  • إضافة معدِّلين لترويسات الجدول: وهما ‎.thead-default و  ‎.thead-inverse.
  • إعادة تسمية الأصناف السياقية لتكون لها بادئة ‎.table. وهكذا تحولت ‎.active و ‎.success و ‎.warning و ‎.danger و .info إلى ‎ .table-activeو ‎.table-Success و ‎.table-warning و ‎ .table-risk و ‎.table-info.

الاستمارات

  • أعيد تعيين العنصر المنقول إلى ملف ‎_reboot.scss.
  • إعادة تسمية ‎.control-label إلى ‎.col-form-label.
  • إعادة تسمية ‎.input-lg و ‎.‎input-sm إلى ‎.form-control-lg و ‎.form-control-sm على التوالي.
  • إزالة أصناف ‎.form-group-*‎ بُغية التبسيط. استخدم أصناف ‎.form-control-*‎ بدلاً منها الآن.
  • إزالة ‎.help-block وتعويضها بـ ‎.form-text لأجل نصوص المساعدة الكتلية، أما فيما يخص نصوص المساعدة المضمّنة وغيرها من الخيارات المرنة، استخدم الأصناف المساعدة من قبيل ‎.text-muted.
  • إزالة ‎.radio-inline و ‎.checkbox-inline.
  • إدماج ‎.checkbox و ‎.radio في ‎.form-check وكل أصناف ‎.form-check-* ‎.
  • إصلاح مشكلة الاستمارات الأفقية:
    • لم تعد أصناف ‎.form-horizontal إجبارية.
    • لم تعد ‎.form-group تطبق الأنماط من ‎.row عبر المخاليط، لذا أصبحت ‎.row ضرورية الآن في خطاطات الشبكة الأفقية (كما في <div class="form-group row">).
    • إضافة الصنف ‎.col-form-label إلى اللاصقات ذات الصنف ‎.form-control المُوسّطة رأسيا.
    • إضافة صنف ‎.form-row جديد لأجل خطاطات الاستمارات ذات أصناف الشبكة (عوّض ‎.row بـ ‎.‎form-row).
  • إضافة دعم الاستمارات المخصصة (مربعات التأشير وأزرار الانتقاء، وقوائم الاختيار وعناصر إدخال الملفات).
  • استبدال الأصناف ‎.has-error و ‎.has-warning و ‎.‎has-Success بالأصناف التي لها ميزة التصديق في HTML5 عبر أصناف CSS الزائفة ‎:invalid و ‎:valid.
  • إعادة تسمية ‎.form-control-static إلى ‎.‎form-control-plaintext.

الأزرار

  • إعادة تسمية ‎.btn-default إلى‎.btn-secondary.
  • إزالة الصنف ‎.btn-xs تمامًا، لأنّ ‎.btn-sm أصغر نسبيًا من الإصدار الثالث.
  • إزالة ميزة زر الحالة لملحقة button.js jQuery. يشمل هذا التابعين ‎$().button(string)‎ و ‎$().button('reset')‎. ننصح باستخدام جزء مخصّص صغير من جافا سكربت بدلاً من ذلك للحصول على تحكم أكبر.
    • لاحظ أنّنا احتفظنا بميزات الملحقة الأخرى (مثل مربعات التأشير وأزرار الانتقاء، وأزرار التبديل المفردة) في الإصدار 4.
  • تغيير [disabled] إلى ‎:disabled في الأزرار، لأنّ الإصدارات IE9 +‎ تدعم ‎:disabled. ما تزال fieldset[disabled]‎ ضرورية رغم ذلك، لأنّ مجموعات الحقول المعطّلة الأصلية معطوبة في IE11.

مجموعه الأزرار

  • إعادة كتابة المكون باستخدام flexbox.
  • إزالة ‎.btn-group-justified. يمكنك أن  تستخدم بدلها <div class="btn-group d-flex" role="group"></div> كغلاف حول عناصر ذات صنف ‎.w-100.
  • إزالة الصنف ‎.btn-group-xs تماما نتيجة لإزالة ‎.btn-xs.
  •  إزالة التباعد الصريح بين مجموعات الأزرار في أشرطة أدوات الأزرار؛ استخدم أدوات الهامش بدلها.
  • تحسين التوثيق الذي يخصّ استخدامها مع المكونات الأخرى.

القائمة المنسدلة

  • تم التبديل من محددات الأب إلى الأصناف الفردية لكافة المكونات والمُعدِّلات وغيرها.
  • تبسيط أنماط القوائم المنسدلة، إذ لم يعد تضاف إليها أسهم متجهة لأعلى أو أسفل.
  • يمكن الآن بناء القوائم المنسدلة بواسطة <div> أو <ul>.
  • إعادة تصميم أنماط القوائم المنسدلة وترميزها لتوفر دعما مبسّطا ومُضمّنا لعناصر <a> و <button> في القوائم المنسدلة.
  • إعادة تسمية ‎.divider إلى ‎.dropdown-divider.
  • تتطلب عناصر القائمة المنسدلة الآن استخدام ‎.dropdown-item.
  • لم تعد مفاتيح تبديل القوائم المنسدلة تتطلب الاستخدام الصريح لعنصر <span class="caret"></span>؛ إذ أنّها تُوفّر الآن تلقائيًا عبر عنصر CSS الزائف ‎::after في ‎.dropdown-toggle.

نظام الشبكة

  • إضافة نقطة حديثة جديدة إلى الشبكة بحجم 576 بكسل تحت اسم sm، ممّا يعني أن هناك الآن خمسة طبقات إجمالية (xs و sm و md و lg و xl).
  • إعادة تسمية أصناف معدّلات الشبكة المتجاوبة من ‎‎.col-{breakpoint}-{modifier}-{size}‎  إلى ‎.{modifier}-{breakpoint}-{size}‎  لتبسيط أصناف الشبكة.
  • إزالة أصناف أصناف معدلات الدفع push  والسحب pull وتعويضها بأصناف الترتيب orderالقائمة على Flexbox. على سبيل المثال، بدلًا من ‎.col-8.push-4 و ‎. col-4.pull-8، عليك استخدام ‎.col-8.order-2 و ‎.col-4.order-1.
  • إضافة أصناف flexbox مساعدة لاستخدامها في نظام الشبكة ومع المكونات.

مجموعات القوائم

  • إعادة كتابة هذا المكوّن باستخدام flexbox.
  • استبدال العنصر a.list-group بالصنف الصريح ‎.list-group-item-action لتنسيق الروابط وإصدارات الأزرار في عناصر مجموعة القوائم.
  • إضافة الصنف ‎.list-group-flush لاستخدامه مع البطاقات.

النوافذ الشرطية

  • إعادة كتابة هذا المكون باستخدام flexbox.
  • نتيجة للانتقال إلى استخدام flexbox، من المحتمل أن تنكسر محاذاة أيقونات الاستبعاد في الترويسة، لأنّنا لم نعد نستخدم العناصر العائمة. إذ أنّ المحتوى العائم يأتي أولًا، وذلك على خلاف Flexbox. لذا عليك تحديث أيقونات الاستبعاد حتى تأتي بعد عناوين النافذة الشرطية لكي تتجنّب هذا الخلل.
  • إزالة الخيار remote (الذي يمكن استخدامه لتحميل المحتويات الخارجية وإدخالها تلقائيًا في النافذة الشرطية)، كما أُزيل أيضًا الحدث المقابل له loaded.bs.modal. نوصي أن تستخدم بدلاً منه قوالب من جانب العميل أو إطار عمل متخصّص في ربط البيانات أو استدعاء jQuery.load بنفسك.

عناصر التنقل Navs

  • إعادة كتابة هذا المكوّن باستخدام flexbox.
  • إزالة جميع المحدّدات <  بُغية تبسيط التنسيق عبر الأصناف غير المتداخلة.
  • لقد أصبحنا نستخدم أصناف منفصلة لعناصر ‎.nav و ‎.nav-item و ‎.nav-item بدلاً  من محدّدات HTML الخاصة من قبيل ‎.nav > li > a، وهذا يجعل ترميز HTML أكثر مرونة مع تسهيل إمكانية التوسيع.

شرائط التنقل Navbar

لقد أعدنا كتابة شرائط التنقل بالكامل باستخدام flexbox، مع تحسين دعم المحاذاة والتجاوب والتخصيص.

  • تُطبَّق سلوكيات شرائط التنقل المتجاوبة على الصنف ‎.navbar عبر الصنف الإجباري.navbar-expand- {breakpoint}‎ حيث تريد أن يُطوى شريط التنقل. في السابق كان هذا ممكنا عبر تعديل أحد متغيرات Less، لذا كان يتطلب إعادة التصريف.
  • أصبحت ‎.navbar-default حاليا ‎.navbar-light، إلا أنّ ‎.navbar-dark ما تزال كما هي. لا بد من إضافة أحدهما إلى شريط التنقل. لكن اعلم أنّ هذه الأصناف لم تعد تعيّن ألوان الخلفية؛ وإنّما تؤثّر على اللون فقط.
  • تتطلب شرائط التنقل الآن إضافة الخلفية. اختر ما تشاء من ألوان الخلفية عبر أدوات الخلفية (‎.bg-*‎)، أو اختر واحدًا مخصّصا عبر أصناف  light/inverse.
  • نتيجة استخدام Flexbox، يمكن لشرائط التنقل الآن استخدام أدوات Flexbox لتسهيل خيارات المحاذاة.
  • لقد غيرنا ‎.navbar-toggle إلى ‎.navbar-toggler، وأصبح لها أنماط تنسيق ووسوم مختلفة (لم تعد هناك 3 عناصر من <span>).
  • إزالة الصنف ‎.navbar-form بالكامل. إذ لم يعد ضروريًا. بدلاً من ذلك، ما عليك سوى استخدام ‎.form-inline وتطبيق أدوات الهامش عند الضرورة.
  • لم تعد شرائط التنقل تتضمن margin-bottom أو  border-radius ابتدائيًا. استخدم الأدوات المساعدة وفق ما تمليه الضرورة.
  • تمّ تحديث جميع الأمثلة التي تتضمن أشرطة التنقل لتضمين الترميز جديد.

ترقيم الصفحات

  • إعادة كتابة هذا المكوّن باستخدام flexbox.
  • لقد أصبحت الأصناف الصريحة (‎.page-item و ‎.page-link) ضرورية الآن في العناصر الموجود داخل ‎.pagination
  • إزالة المكوّن ‎.pager إزالة كاملة، إذ لم تكن إلا أزرارًا بدون خلفية مخصصة.

عناصر التنقل Breadcrumb

  • لقد أصبح من الضروري استخدام الصنف ‎.breadcrumb-item صراحة في كل العناصر المُحتواة في ‎.breadcrumbs

اللاصقات والشارات

  • تجميع ‎.label و ‎.badge لتمييزها عن عناصر <label> وتبسيط المكونات ذات الصلة.
  • إضافة ‎.badge-pill كمُعدِّل لمظهر الأقراص المستديرة.
  • لم تعد الشارات عائمة تلقائيًا في مجموعات القوائم والمكونات الأخرى. إن أردت ذلك عليك استخدام الأصناف المساعدة.
  • إزالة ‎.badge-default وإضافة ‎.badge-secondary لمطابقة أصناف التعديل الخاصة بالمكونات المستخدمة في المواضع الأخرى.

اللوحات والصور المصغرة والجدران

تم إزالتها بالكامل وتعويضها بمكون البطاقة الجديد.

اللوحات

  • أعدنا بناء العناصر من ‎.panel إلى ‎.card باستخدام flexbox.
  • أزلنا ‎.panel-default الافتراضي ولم نعوضه.
  • أزلنا كذلك الصنف ‎.panel-group ولم نعوضه. أما الصنف ‎.car-group فليس بديلاً لها، فهو مختلف.
  • تغيير ‎.panel-heading إلى ‎.‎card-header
  • تغيير ‎.panel-title إلى ‎.card-title. بناءً على المظهر الذي تريد تصميمه، قد ترغب أيضًا في استخدام عناصر أو أصناف العناوين (على سبيل المثال، ‎<h3>، .h3) أو العناصر أو الأصناف الغليظة (مثل <strong>، <b> أو ‎.font-weight-bold ). لاحظ أن ‎.card-title تنتج مظهرًا مختلفًا عن ‎.panel-title رغم تماثل الأسماء
  • تغيير ‎.panel-body إلى ‎.card-body
  • تغيير ‎.panel-footer إلى ‎.card-footer
  • إزالة ‎.panel-basic و ‎.panel-Success و ‎.panel-info و ‎.panel-warning و ‎.panel-risk وتعويضها بالأصناف ‎.bg-‎ و ‎. text-‎ و ‎.border المُنشأة من قاموس Sass المُسمّى ‎$theme-colors.

شريط التقدم

  • تعويض الأصناف السياقية ‎.progress-bar-*‎ بالأصناف ‎.bg-*‎.استخدم مثلًا ‎class="progress-bar bg-danger"‎ بدلًا من class="progress-bar progress-bar-danger"‎
  • تبديل ‎.active في شرائط التقدم المتحركة بالصنف ‎.progress-bar-animated.

الدوار Carousel

  • مراجعة المكوّن بالكامل لتبسيط التصميم والتنسيق. أصبح عدد الأنماط التي يمكنك إعادة كتابتها أقل، علاوة على إضافة مؤشرات وأيقونات جديدة.
  • ألغينا التداخل في جميع أنماط CSS وأعدنا تسميتها، وقد أصبحت كل الأصناف مسبوقة بـ. carousel-‎.
    • بالنسبة لعناصر الدوار ‎.next و prev. و ‎.left  و ‎‎. right أصبحت الآن ‎. carousel-item-next و ‎.carousel-item-prev و ‎.carousel-item-left و ‎.carousel-item-right.
    • كما أصبحت ‎.item الآن ‎.carousel-item.
    • بالنسبة لعناصر التحكم prev/next ، أصبحت ‎.carcarel-control.right و ‎.carousel-control.left الآن ‎.carousel-control-next و ‎.carousel-control-prev، مما يعني أنها لم تعد تتطلب صنفا أبًا معيّنا.
  • إزالة جميع الأنماط المتجاوبة، والإحالة إلى الأدوات المساعدة (على سبيل المثال، عرض اللاصقات التوضيحية في إطارات عرض معينة) والأنماط المخصصة حسب الحاجة.
  • إزالة تجاوز (overrides) الصور  في عناصر الدوار، عليك أن تستخدم بدلها الأدوات المساعدة.
  • تعديل مثاال الدوار ليتضمّن الترميز والأنماط الجديدة.

الجداول

  • إزالة دعم الجداول المتداخلة المُنسّقة. أصبحت جميع أنماط الجدول موروثة الآن في الإصدار 4 لتسهيل كتابة المحددات.
  • إضافة الجداول المعكوسة.

الأدوات المساعدة

  • Display و hidden وغيرها:
    • جعل أدوات العرض متجاوبة (مثل d-none و d-{sm,md,lg,xl}-none).
    • إزالة الأصناف ‎.hidden-*‎ من الأدوات المساعدة وتعويضها بأدوات عرض جديدة. على سبيل المثال، بدلًا من ‎.hidden-sm-up، استخدم ‎.d-sm-none. أعيدت تسمية أدوات ‎.hidden-print لاستخدام نظام التسمية المُتّبع في أدوات العرض. يمكنك الاطلاع على مزيد من المعلومات ضمن قسم الأدوات المساعدة المتجاوبة أدناه.
    • إضافة الأصناف ‎.float-{sm,md,lg,xl}-{left,right,none}‎ لاستخدامها مع العناصر العائمة المتجاوبة، كما أزيلت ‎.pull-left و ‎.pull-right لأنها مكررة وتشبه ‎.float-left و ‎.float-right.
  • النوع:
    • إضافة تنوعات متجاوبة إلى أصناف محاذاة النص  ‎.text-{sm,md,lg,xl}-{left,center,right}‎
  • المحاذاة والتباعد:
    • إضافة أدوات متجاوبة جديدة للهوامش والحواشي لجميع الجوانب، بالإضافة إلى بعض الاختصارات الرأسية والأفقية.
    • إضافة العديد من أدوات flexbox .
    • إزالة ‎.center-block  وتعويضها بالصنف لجديد ‎.mx-auto
  • تحديث Clearfix لإزالة دعم الإصدارات الأقدم من المتصفحات.

مخاليط سوابق المتصفحات

أزيلت مخاليط بادئات المتصفحات الخاصة بالإصدار 3 من Bootstrap، إذ أصبحت مُتجاوزة ابتداء من الإصدار 3.2.0، وأزيلت في الإصدار 4. ونظرًا لأننا نستخدم Autoprefixer، فلم تعد ضرورية.

لقد أزلنا المخاليط التالية:

  • animation
  • animation-delay
  • animation-direction
  • animation-duration
  • animation-fill-mode
  • animation-iteration-count
  • animation-name
  • animation-timing-function
  • backface-visibility
  • box-sizing
  • content-columns
  • hyphens
  • opacity
  • perspective
  • perspective-origin
  • rotate
  • rotateX
  • rotateY
  • scale
  • scaleX
  • scaleY
  • skew
  • transform-origin
  • transition-delay
  • transition-duration
  • transition-property
  • transition-timing-function
  • transition-transform
  • translate
  • translate3d
  • user-select

التوثيق

شهد التوثيق تحديثا كذلك. وهذه أهم الترقيات:

  • ما زلنا نستخدم Jekyll، ولكن أصبحنا نستخدم ملحقات أخرى علاوة عليها:
    • يُستخدم bugify.rb لسرد الإدخالات بكفاءة في صفحة أخطاء المتصفح.
    • example.rb هو فرع مُخصّص من الملحقة highlight.rb الافتراضية، إذ يسهل معالجة شفرات الأمثلة.
    • callout.rb هو فرع مخصص مماثل، ولكنّه مصمّم ليناسب التوثيق خاصتنا.
    • يستخدم jekyll-toc لإنشاء جداول المحتويات.
  • أعيد كتابة كل محتوى التوثيق بترميز Markdown (بدلاً من HTML) لتسهيل تحريره وتعديله.
  • أعيد تنظيم الصفحات لتبسيط المحتوى، وتحسين تنظيم التوثيق.
  • انتقلنا من CSS العادي إلى SCSS للاستفادة من المتغيرات والمخاليط وغيرهما من الميزات.

الأدوات المساعدة المتجاوبة

إزالة جميع المتغيرات ‎@screen-‎ من الإصدار 4.0.0. استخدم بدلها  media-breakpoint-up()‎ أو media-breakpoint-down()‎ أو المخاليط media-breakpoint-only()‎ أو القاموس ‎$grid-breakpoints.

لقد أزلنا أصناف الأدوات المساعدة المتجاوبة وعوضناها بأدوات عرض صريحة.

  • إزالة الصنفين ‎.hidden و ‎.show بسبب تعارضهما مع التابعين ‎$(...).hide()‎ و ‎$(...).show()‎ في jQuery. بدل استخدامها، حاول تبديل الخاصية [hidden] أو استخدم الأنماط المضمنة مثل "‎‎‎‎‎‎‎‎‎style = "display: none;‎ و style="display: block;"‎
  • إزالة جميع أصناف ‎.hidden-‎ باستثناء أدوات الطباعة المساعدة، والتي أعيد تسميتها.
    • أزيلت هذه الأصناف من الإصدار 3:
      ‎.hidden-xs .hidden-sm .hidden-md .hidden-lg .visible-xs-block .visible-xs-inline .visible-xs-inline-block .visible-sm-block .visible-sm-inline .visible-sm-inline-block .visible-md-block .visible-md-inline .visible-md-inline-block .visible-lg-block .visible-lg-inline .visible-lg-inline-block
      
    • أزيلت هذه الأصناف من الإصدار 4:
      hidden-xs-up .hidden-xs-down .hidden-sm-up .hidden-sm-down .hidden-md-up .hidden-md-down .hidden-lg-up .hidden-lg-down
      
  • لم تعد أدوات الطباعة تبدأ بـ ‎.hidden-‎ أو ‎.visible-‎ ولكن بـ ‎.d-print-‎.
    • الأسماء القديمة: ‎.visible-print-block و ‎.visible-print-inline و‎ .visible-print-inline-block و‎ .hidden-print
    • أصناف جديدة: ‎.d-print-block و ‎.d-print-inline و ‎.d-print-inline-block و ‎.d-print-none

بدلاً من استخدام الأصناف‎.visible-*‎ صراحة، يمكنك جعل عنصر ما مرئيًا بعدم إخفائه عند حجم معيّن من الشاشة. يمكنك الجمع بين أصناف ‎.d-*-none وأحد أصناف ‎.d-*-block لتضمن ألا يظهر العنصر إلا في مجال معيّن من أحجام الشاشة (على سبيل المثال، إن استخدمت الصنف ‎.d-none.d-md-block.d-xl-none، فلن يظهر العنصر إلا في الأجهزة المتوسطة والكبيرة).

لاحظ أنّ التغييرات على نقاط الشبكة الحدية في الإصدار 4 تستوجب زيادة مستوى الطبقة في النقاط الحدية لتحقيق النتائج نفسها. لا تحاول أصناف الأدوات المساعدة المتجاوبة الجديدة استيعاب الحالات غير الشائعة التي يتعذّر فيها التعبير عن منظورية (visibility) العنصر كمجال واحد متجاور من أحجام إطارات العرض؛ إن أردت تحقيق ذلك عليك استخدام أنماط CSS مخصصة.

مصادر