اذهب إلى المحتوى

تنسيقات المتصفحات المخصصة ودعمها وأداءها في CSS


أيمن القاضي

تُضيف المتصفحات تلقائيًا بعض الأنماط على عناصر HTML، وتختلف هذه الأنماط باختلاف المتصفح مما يتسبب في ظهور الصفحة بأشكال مختلفة عند عرضها على متصفحات مختلفة، ولتفادي هذا الأمر يجب توحيد أنماط المتصفحات، ومن الشائع استخدام مكتبة normalize.css والتي تضبط بعض الأنماط وتُصحح بعض الأخطاء الشائعة في بعض المتصفحات.

الفرق بين normalize.css و reset.css

الفرق الأساسي بين مكتبة normalize.css ومكتبة reset.css هو أن الأولى تضبط بعض الأنماط لتوحيدها في جميع المتصفحات، بينما تُزيل الثانية جميع الأنماط الافتراضية من العناصر، مما يعني أنك ستضطر لكتابة جميع القواعد من الصفر.

مثال: استخدام Eric Meyer's reset.css

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,GoalKicker.com  CSS Notes for Professionals 224
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}

مزيد من المعلومات حول Eric Meyer's reset.css.

مثال: استخدام normalize.css

/**
* 1. توحيد نوع الخط في جميع المتصفحات
* 2. تصحيح ارتفاع السطر وتوحيده في جميع المتصفحات
* 3. ‫منع تعديل حجم الخط عند تغيير اتجاه العرض في متصفح IE و Safari
*/
/* Document
========================================================================== */
html {
    font-family: sans-serif; /* 1 */
    line-height: 1.15; /* 2 */
    -ms-text-size-adjust: 100%; /* 3 */
    -webkit-text-size-adjust: 100%; /* 3 */
}

/*
========================================================================== */
/**
* إزالة الهوامش
*/
body {
    margin: 0;
}
/**
* تصحيح طريقة العرض
*/
article,
aside,
footer,
header,
nav,
section {
    display: block;
}
/**
* تصحيح حجم الخط والهوامش
*/
h1 {
    font-size: 2em;
    margin: 0.67em 0;
}

التحايل على متصفح Internet Explorer

دعم القاعدة display: inline-block في متصفح IE6 و IE7

القاعدة display: inline-block غير مدعومة في متصفحات IE6 و IE7، ولكن من الممكن الحصول على سلوك مماثل لسلوكها عن طريق تطبيق الشيفرة التالية:

zoom: 1;
*display: inline;
  • تُشغِّل الخاصية zoom ميزة hasLayout للعناصر، وهي متاحة فقط في متصفح Internet Explorer.
  • تُطبق الخاصية display* القاعدة المحددة فقط على المتصفحات التي تتأثر بالخاصية zoom.

وضع التباين العالي

أُضيف محدد الوسائط ms-high-contrast- في متصفحات Internet Explorer ابتداءً من الإصدار العاشر والإصدارات التي تليه، مما يسمح للمبرمج بضبط الأنماط بناءّ على ما إذا كان المستخدم يستخدم وضع التباين العالي أم لا.

للمحدد ms-high-contrast- ثلاث حالات هي: active، وblack-on-white، وwhite-on-black.

مثال

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: black-on-white) {
    .header {
        background: #fff;
        color: #000;
    }
}

في هذا المثال يتغير لون خلفية العنصر header إلى اللون الأبيض ولون الكتابة للون الأسود إذا كان وضع التباين العالي مُفعَّلًا وفي الحالة black-on-white.

مثال

@media screen and (-ms-high-contrast: white-on-black) {
    .header {
        background: #000;
        color: #fff;
    }
}

في هذا المثال يتغير لون خلفية العنصر header إلى اللون الاسود ولون الكتابة للون الأبيض إذا كان وضع التباين العالي مُفعَّلًا وفي الحالة white-on-black.

لمزيد من المعلومات زر توثيق مايكروسوفت.

استهداف متصفحات IE6 و IE7 فقط

لاستهداف متصفحات IE6 و IE7 فقط يجب بدء الخواص بالعلامة (*)

مثال

.hide-on-ie6-and-ie7 {
    *display: none;
}

استهداف متصفح IE8 فقط

لاستهداف متصفح IE8 فقط يجب وضع جميع المُحددات داخل الاستعلام ‎@media \0 screen { }

مثال

@media \0 screen {
    .hide-on-ie8 {
        display: none;
    }
}

أداء المتصفحات

استخدام الخصائص transform و opacity لتجنب تنبيه التخطيط

تغيير بعض الخصائص في CSS يُنبِّه المتصفح لإعاده حساب القيم النهائية للأنماط و التخطيط، مما يتسبب في تبطيء تحميل الصفحة.

مثال: التحريك باستخدام الخواص left و top

#box {
    left: 0;
    top: 0;
    transition: left 0.5s, top 0.5s;
    position: absolute;
    width: 50px;
    height: 50px;
    background-color: gray;
}
#box.active {
    left: 100px;
    top: 100px;
}

اطلع على تجربة حية لهذا المثال على JSFiddle.

تستغرق الصفحة حوالي 11.7 ملي ثانية للتحميل، ومن ثم تستغرق 9.8 ملي ثانية لإعادة رسم الصندوق في الموضع الجديد.

AOima.png

ولتحسين الأداء وتسريع تحميل الصفحة يجب استخدام الخواص transform وopacity للحصول على نفس النتيجة كما هو موضح في المثال التالي:

#box {
    left: 0;
    top: 0;
    position: absolute;
    width: 50px;
    height: 50px;
    background-color: gray;
    transition: transform 0.5s;
    transform: translate3d(0, 0, 0);
}
#box.active 
    transform: translate3d(100px, 100px, 0);
}

اطلع على تجربة حية لهذا المثال على JSFiddle.

تستغرق الصفحة حوالي 1.3 ملي ثانية للتحميل، ومن ثم تستغرق 2.0 ملي ثانية لإعادة رسم الصندوق في الموضع الجديد.

MLTAH.png

ترجمة -وبتصرف- للفصول Browser Support & Prefixes - Normalizing Browser Styles - Internet Explorer Hacks - Performance من كتاب CSS Notes for Professionals


تفاعل الأعضاء

أفضل التعليقات

بتاريخ On 12/15/2020 at 13:59 قال Mhamad:

مقال رائع.
أود الإشارة لخطأ بسيط في فقرة "وضع التباين العالي" المثال الثاني.
يجب وصل النقطة الموضوعة قبل إسم الكلام header فقط.

شكرًا جزيلًا لك، جرى التصحيح. أشجعك على هذا الاهتمام والحرص على التبليغ عن الأخطاء، فلا تكمل المقالات إلا بقرَّائها.

رابط هذا التعليق
شارك على الشبكات الإجتماعية



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...