دروس متقدمة في CSS

الخاصية transform في CSS

الحصول على أشكال مختلفة للعناصر بتحويلها من شكل لآخر

تقديم

كتب هذا المقال أشرف عبدالدايم مطور واجهة المستخدم في TieLabs سابقاً، 95% من كود CSS الموجود في قالب جنة من كتابة أشرف :)

الآن وبعد أن تعرفنا على الخاصية transition وكيفية إنتقال العناصر تدريجياً من حالة لأخرى بطريقة سلسة، دعنا نلقي نظرة على خاصية تحويل العنصر transfrom وكيف يمكنك تحويل العنصر من حالة لأخرى، بإستخدام الخاصية transfrom يمكنك تدوير العنصر، أو تحريكه، أو تعديل زاوية انحرافه، أو إعادة تحجيمه.

في هذا المقال سنقوم بشرح القيم المتعلقة بالإتجاه الثنائي فقط (2D) للخاصيةtransfrom وسنترك قيم الإتجاه الثلاثي (3D) لمقال آخر لاحق إن شاء الله.

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

القيمة scale

تسمح لك القيمة scale بالتحكم في حجم العنصر، بتقليص حجمه أو زيادته نسبة للحجم الأصلي له، على سبيل المثال إذا كنت تريد مضاعفة حجم العنصر:

أي مرتين من الحجم الإصلي للعنصر، وعلى هذا القيمة scale(0.5) تقوم بتقليص حجم العنصر إلى النصف.

إليك المثال التالي:

See the Pen Transform #1 by Ashraf Reda (@ashrafreda) on CodePen.

نستخدم الخاصية transition مع الخاصية transform ليتم الإنتقال بطريقة سلسلة من الحجم الإصلي للعنصر إلى الحجم الجديد.

يمكنك إعادة تحجيم عرض العنصر بإستخدام القيمة scaleY() أو طوله بإستخدام القيمة scaleX() أو استخدام القيمة المختصرة scale() لتحجيم الطول والعرض معاً هكذا:

هنا يقوم بمضاعفة طول وعرض العنصر.

هنا يقوم بمضاعفة عرض العنصر، وزيادة طوله بنسبة ١.٥ أو بنسبة ١٥٠٪

يمكنك أيضاً استخدام القيم السالبة للحصول على الصورة المقلوبة للعنصر في أي الإتجاهين أو الإثنين معاً، هكذا:

الصورة التالي توضح ذلك:

أمثلة على استخدام القيمة scale:

القيمة rotate

بإستخدام القيمة rotate يمكنك تدوير العنصر في إتجاه عقارب الساعة أو في عكس إتجاه عقارب الساعة، بإستخدام رقم محدد من الدراجات الزاوية degrees. القيمة الموجبة مثل rotate(90deg) يقوم بتدوير العنصر في اتجاه عقارب الساعة بزاوية ٩٠ درجة،  القيمة السالبة rotate(-90) تقوم بتدوير العنصر في عكس اتجاه عقارب الساعة بزاوية ٩٠ درجة.

See the Pen Transform #2 by Ashraf Reda (@ashrafreda) on CodePen.

يمكنك أيضاً تدوير العنصر أكثر من دورة كاملة بإستخدام مضافات الزاوية 360deg أي أن الزاوية 1080deg يسقوم بتدوير العنصر ثلاثة مرات:

See the Pen Transform #3 by Ashraf Reda (@ashrafreda) on CodePen.

أمثلة على استخدام القيمة rotate:

القيمة translate

تستخدم القيمة translate لتحريك العنصر في الإتجاهات الأربعة (يمين، يسار، أعلى، أسفل)، الحركة تعتمد على المحاور الأفقية X والعمودية Y.

القيم الموجبة للمحور الأفقي (مثال: translateX(20px)) تحرك العنصر اتجاه اليمين، والقيم السالبة (مثال: translateX(-20px)) تحركه اتجاه اليسار.

القيم الموجبة للمحور الرأسي (مثال: translateY(20px)) تحرك العنصر لأسفل، والقيم السالبة (مثال: translateY(-20px)) تحركه لأعلى.

في المثال التالي سنقوم بتحريك العنصر 20px في اتجاه اليمين، و 20px لاسفل:

See the Pen Transform #3 by Ashraf Reda (@ashrafreda) on CodePen.

أمثلة على استخدام القيمة translate:

القيمة skew

تستخدم القيمة skew مع الخاصية transfrom لإمالة/إنحراف العنصر أفقياً أو رأسياً على حسب القيم المُعطاه.

إليك المثال التالي:

See the Pen Transform #4 by Ashraf Reda (@ashrafreda) on CodePen.

القيم الموجبة للمحور X تقوم بإمالة العنصر ناحية اليسار، والقيم السالبة تقوم بإمالته ناحية اليمين، أيضاً القيم الموجبة للمحور Y تقوم بإمالة العنصر لأسفل، والقيم السالبة تقوم بإمالته لأعلى.

لأحظ أن استخدام أي قيمة من قيم الخاصية transfrom على العنصر، ستقوم بالتأثير على جيمع العناصر الأبناء (المتواجدة داخل العنصر)، فمثلاً إذا قمت بتطبيق القيمة skew على العنصر الأب، سيتم إمالة العنصر الأب والعناصر الأبناء أيضاً.

أمثلة على استخدام القيمة skew:

الخاصية transform-origin

الخاصية transform-origin تستخدم بشكل منفصل عن باقي قيم الخاصية transform (لاحظ، قلنا خاصية وليست قيمة) ولكنها تستخدم جنباً إلى جنب مع الخاصية transform

تستخدم الخاصية transform-origin لتحديد مبدأ الإحداثيات لعملية التحويل التي ستتم على العنصر، القيمة الإفتراضيه لها: منتصف العنصر أفقياً ورأسياً  50% 50%

على سبيل المثال، إذا كنت تستخدم الإعلان transform: rotate(90deg) لتدوير العنصر ولا تريد أن يدور العنصر حول محوره، بل حول الركن العلوي الأيسر؟ نستخدم الخاصية transform-origin هكذا:

كالمثال التالي:

See the Pen Transform #5 by Ashraf Reda (@ashrafreda) on CodePen.

لاحظ أننا قمنا بوضع الخاصيةtransform-origin  مع الحالة الإفتراضية للعنصر .elem وليس في حالة مرور المؤشر :hover

يمكنك استخدام واحدة من وحدات القياس المختلفة لقيمة الخاصية transform-origin او استخدام الكلمات المفتاحية left  right  top  bottom

المزج بين القيم المختلفة للخاصية transfrom

يمكنك تطبيق العديد من التحويلات على نفس العنصر في آن واحد هكذا:

إليك المثال التالي:

See the Pen Transform #6 by Ashraf Reda (@ashrafreda) on CodePen.

لاحظ أننا استخدمنا الخاصية box-shadow لإضافة ظل للعنصر في حالة مرور المؤشر :hover وقمنا بتطبيق خاصية الإنتقال على جميع العناصر بإستخدام الكلمة المفتاحية all بذلك ظهر الظل تدريجياً بطريقة سلسة مع باقي خصائص التحويل.

الدالة ()matrix

في جميع الأمثلة السابقة قمنا باستخدام قيم الخاصية transfrom ككلمات مفتاحية (scale و rotate و translate و skew هناك طريقة أخرى يمكننا الجمع بين مجموعة من القيم في قيمة واحدة وهي قيمة الدالة highlight color=”gray”]matrix،[/highlight] على سبيل المثال، بدلاً من استخدام إثنين أو أكثر من دوال/قيم التحويل هكذا:

بإستخدام الدالة matrix() يمكننا الجمع بينهم في مصفوفة واحدة هكذا:

كما ترى، فإن حساب قيم المصفوفة ليس سهلاً إذ لم تكن من أهل الذكاء في الرياضيات :D ، وعلى الغالب فإن حسابات هذة المصفوفة لم يُقصد بها أن تكتبها بنفسك هكذا، لكن هذة المصفوفة مفيدة جداً في حالة معالجة التحويلات بإستخدام مكتبات جافاسكربت. على كل حال فهناك بعض الأدوات التي تساعدك في تحويل عمليات التحويل من طريقة الكلمات المفتاحية إلى طريقة المصفوفة، مثل هذة الآداة ، كل ما عليك هو كتابة عملية التحويل ثم الضغط على الرز الأحمر لتحصل على المصفوفة المقابلة.

لمزيد من المعلومات عن المصفوفة، يمكنك تصفح هذا المقال على موقع codrops أو هذا المقال على شبكة مطورين موزيلا MDN

لاحظ أن كثير من الخصائص التي تم إضافتها في الإصدار الثالث من CSS يختلف دعمها من متصفح لآخر، وكل متصفح يستخدم لاحقة Prefix خاصة به، وكي نضمن تطبيق الخاصية على جميع المتصفحات يجب تكررار الخاصية بلاحقة كل متصفح. لكن على سبيل التبسيط سنقوم باستخدام الخاصية القياسية فقط. ويمكنك معرفة، هذة قائمة بلاواحق المتصفحات المختلفة

  • المتصفح Chrome : اللاحقة -webkit-
  • المتصفح Safari : اللاحقة -webkit-
  • المتصفح Firefox : اللاحقة -moz-
  • المتصفح Internet Explorer : اللاحقة -ms-
  • المتصفح Opera : اللاحقة -o-

وتستخدم كالتالي:

هذا الموقع يوضح الخواص التي مازالت تحتاج إلى لواحق والخصائص التي أصبحت قياسية على جميع المتصفحات ويمكنك استخدامها بدون لواحق.

 

أشرف عبدالدايم

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