لفترة طويلة، كان مصممو المواقع الإلكترونية مضطرين إلى إنشاء التصاميم ضمن قيود المستطيل. لا يزال معظم المحتوى على الويب محصورًا في مربّعات بسيطة لأنّ معظم تصميمات الإعلانات التي تعتمد على تنسيقات غير مستطيلة تنتهي بخيبة أمل. ستتغيّر هذه الطريقة قريبًا مع طرح أشكال CSS، والتي أصبحت متاحة اعتبارًا من الإصدار 37 من Chrome.
تسمح أشكال CSS لمصممي الويب بالتفاف المحتوى حول المسارات المخصصة، مثل الدوائر والقطع الناقص والمضلعات، وبالتالي التحرر من قيود المستطيل.
يمكن تحديد الأشكال يدويًا أو يمكن استنتاجها من الصور.
لنلقِ نظرة على مثال بسيط للغاية.
ربما كنت على ما يرام في اللحظة الأولى التي كانت فيها عائمة لصورة بها أجزاء شفافة تتوقع أن يلتف المحتوى ويملأ الفجوات، ويشعر بالخيبة الأمل بسبب شكل الالتفاف المستطيل الذي يستمر حول العنصر. يمكن استخدام أشكال CSS لحلّ هذه المشكلة.
يطلب بيان CSS shape-outside: url(image.png) من المتصفّح استخراج شكل من الصورة.
تحدّد السمة shape-image-threshold الحد الأدنى لمستوى التعتيم للبكسل التي سيتم استخدامها لإنشاء الشكل. يجب أن تتراوح قيمته بين 0.0 (شفافة بالكامل) و1.0 (غير شفافة بالكامل). لذلك، تعني shape-image-threshold: 0.5 أنه لن يتم استخدام سوى وحدات البكسل ذات مستوى الشفافية 50% وما فوق لإنشاء الشكل.
إنّ سمة float هي المفتاح هنا. تحدّد السمة shape-outside شكل المنطقة التي يلتف حولها المحتوى، ولكن بدون العائم، لن تظهر لك تأثيرات الشكل.
تحتوي العناصر على مساحة تطفو على الجانب المقابل لقيمة float. على سبيل المثال، إذا تمّ عرض عنصر يتضمّن صورة فنجان قهوة على يمين الصفحة، سيتمّ إنشاء منطقة العرض على يسار الفنجان. على الرغم من أنه يمكنك تصميم صورة بها فجوات على كلا الجانبين، لن يلتف المحتوى حول الشكل على الجانب الآخر الذي تحدده الخاصية العائمة، لليسار أو اليمين، وليس كليهما.
في المستقبل، سيكون من الممكن استخدام shape-outside على العناصر التي لا يتم عرضها مع تقديم استبعادات CSS.
إنشاء أشكال يدويًا
بالإضافة إلى استخراج الأشكال من الصور، يمكنك أيضًا ترميزها يدويًا. يمكنك الاختيار من بين بعض القيم الوظيفية لإنشاء الأشكال: circle() وellipse() وinset() وpolygon(). تقبل كل دالة شكل مجموعة من الإحداثيات ويتم إقرانها بمربّع مرجعي يحدِّد نظام الإحداثيات. سنقدّم المزيد من المعلومات حول مربّعات الإحالات في وقت لاحق.
الدالةCircle()
يُعرَف الرمز الكامل لقيمة شكل الدائرة باسم circle(r at cx cy) حيث يكون r هو نصف قطر الدائرة، في حين أنّ cx وcy هما إحداثيات مركز الدائرة على محورَي X وY. إنّ إحداثيات مركز الدائرة اختيارية. وفي حال حذفهما، سيتم استخدام مركز العنصر (تقاطع قطريه) كنقطة مرجعية تلقائية.
في المثال أعلاه، سوف يلتف المحتوى حول الجزء الخارجي من مسار دائري. تحدد الوسيطة الفردية 50% نصف قطر الدائرة، والذي يساوي في هذه الحالة نصف عرض العنصر أو ارتفاعه. سيؤثر تغيير أبعاد العنصر على نصف قطر شكل الدائرة. هذا مثال أساسي على كيفية استجابة أشكال CSS.
قبل المتابعة، نريد أن نشير إلى أنّه من المهم تذكُّر أنّ أشكال CSS لا تؤثّر إلا في شكل منطقة التعويم حول العنصر. إذا كان العنصر له خلفية، فلن يتم اقتصاصه بواسطة الشكل. لتحقيق هذا التأثير، يجب استخدام سمات من تظليل CSS، إما clip-path أو mask-image. وتكون السمة clip-path مفيدة جدًا لأنّها تتبع الترميز نفسه لأشكال CSS، وبالتالي يمكنك إعادة استخدام القيم.
تستخدِم الرسوم التوضيحية في هذا المستند ميزة الاقتصاص لتسليط الضوء على الشكل ومساعدتك في فهم التأثيرات.
الرجوع إلى شكل الدائرة.
عند استخدام النسب المئوية لنصف قطر الدائرة، يتم احتساب القيمة باستخدام صيغة أكثر تعقيدًا قليلاً: sqrt(width^2 + height^2) / sqrt(2). من المفيد فهم ذلك لأنّه سيساعدك في تخيل شكل الدائرة الناتجة إذا لم تكن أبعاد العنصر متساوية.
يمكن استخدام جميع أنواع وحدات CSS في إحداثيات دالة الشكل، مثل px وem وrem وvw وvh وما إلى ذلك. يمكنك اختيار الأسلوب المرن أو الأسلوب الصارِم بما يكفي لتلبية احتياجاتك.
يمكنك تعديل موضع الدائرة من خلال ضبط قيم صريحة لإحداثيات مركزها.
.element{shape-outside:circle(50%at00);}
يؤدي ذلك إلى وضع مركز الدائرة في نقطة الأصل لنظام الإحداثيات. ما هو نظام التنسيق؟ هذا هو المكان الذي نقدّم فيه مربّعات الإحالات.
مربّعات مرجعية لأشكال CSS
المربّع المرجعي هو مربّع افتراضي حول العنصر، والذي يحدِّد نظام الإحداثيات المستخدَم لرسم الشكل وتحديد موضعه. يقع أصل نظام الإحداثيات في الزاوية العلوية اليسرى مع توجيه المحور س إلى اليمين بينما يشير المحور ص لأسفل.
تذكَّر أنّ الرمز shape-outside يغيّر شكل منطقة العرض التي سيتم عرض المحتوى حولها. تمتد المساحة العائمة إلى الحواف الخارجية للمربّع الذي تحدّده السمة margin. ويُطلق على هذا العنصر اسم margin-box، وهو مربّع مرجع تلقائي للشكل إذا لم يتم ذكر أي مربّع مرجع صراحةً.
تؤدي تعريفات CSS التالية إلى نتائج متطابقة:
.element{shape-outside:circle(50%at00);/* identical to: */shape-outside:circle(50%at00)margin-box;}
لم نضبط هامشًا على العنصر بعد. في هذه المرحلة، من الآمن افتراض أنّ نقطة الأصل لنظام الإحداثيات ومركز الدائرة يقعان في أعلى يمين منطقة محتوى العنصر. يتغير هذا عند تعيين هامش:
يقع الآن أصل نظام الإحداثيات خارج منطقة محتوى العنصر (100 بكسل للأعلى و100 بكسل إلى اليسار)، كما هو الحال مع مركز الدائرة. تزداد القيمة المحسوبة نصف قطر الدائرة أيضًا لتفسير السطح المتزايد لنظام الإحداثيات الذي أنشأه المربع المرجعي margin-box.