الغوص العميق في CSS في التدرجات الشعاعية والمخروطية

نشرت: 2022-03-10
ملخص سريع ↬ في هذه المقالة ، سنلقي نظرة فاحصة على اثنين من التدرجات اللونية: التدرج conic-gradient radial-gradient . سترى كيف يعمل كل واحد منهم بالتفصيل ، وما هي الاختلافات والتشابهات بينهم ، وكيف وأين يتم استخدامها ، وبعض حالات الاستخدام لكل منها.

تدرجات CSS هي ميزة CSS مفيدة يمكن استخدامها لإنشاء تأثيرات واجهة مستخدم مثيرة للاهتمام أو حتى مساعدتنا في رسم شيء ما دون الحاجة إلى إنشاء عناصر HTML لذلك. التدرجان اللذان أود التركيز عليهما في هذه المقالة هما conic-gradient radial-gradient . كل واحد يعمل بشكل مختلف (التدرجات المخروطية منحنية ، بينما التدرجات الشعاعية هي خط مستقيم).

للمتابعة ، لا تحتاج إلى معرفة radial-gradient conic-gradient . سأبذل قصارى جهدي لشرحها بطريقة جيدة.

دعونا نتعمق!

  • ما هو التدرج الشعاعي؟
    • أبسط مثال
    • كيف يعمل التدرج الشعاعي؟
  • ما هو التدرج المخروطي؟
  • حالات الاستخدام للتدرجات الشعاعية
    • radial-gradient في قسم البطل
    • تأثير النمط المنقط
    • تأثيرات الصورة
  • حالات الاستخدام للتدرجات المخروطية
    • الرسوم البيانية الدائرية
    • الخلفيات والأنماط
    • أنماط واجهة المستخدم
    • تحريك التدرجات المخروطية باستخدام @property
    • قطع زوايا بأشكال مخصصة
    • التدرجات المخروطية
    • خلفيات القسم

ما هو التدرج الشعاعي؟

من اسمهم ، يوفر لنا radial-gradient القدرة على رسم عناصر شعاعية مثل دائرة أو قطع ناقص.

لنلقِ نظرة على أبسط بناء الجملة.

أبسط مثال

في هذا المثال ، لدينا radial-gradient لونيين. نتج عن ذلك تدرج لوني على شكل قطع ناقص.

 .element { background: radial-gradient(#9c27b0, #ff9800); }
شعاعي التدرج
(معاينة كبيرة)

ما سبق هو radial-gradient الأساسي الذي يمكننا القيام به في CSS. قد تتساءل ، لماذا تخلفت عن القطع الناقص؟ حسنا ، اسمحوا لي أن أشرح.

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

  • لا يوجد حجم محدد.
  • أو هناك قيمتان (للعرض والارتفاع).

كيف يعمل التدرج الشعاعي؟

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

أولاً ، دعنا نعود إلى المثال الأولي.

 .element { background: radial-gradient(#9c27b0, #ff9800); }

عندما يكون هناك لونان بدون تحديد الشكل ، سيتحول التدرج إلى شكل بيضاوي افتراضيًا ، مثل:

تدرج على شكل قطع ناقص
(معاينة كبيرة)

يملأ القطع الناقص عرض وارتفاع الحاوية الخاصة به. يبدو غير واضح لأن المتصفح افترض أن نقطتي البداية والنهاية هي 0% و 100% على التوالي.

إليك كيف يرى المتصفح التدرج اللوني:

 .element { background: radial-gradient(#9c27b0 0%, #ff9800 100%); }

إذا قمنا بإلحاق circle قبل التوقف اللوني الأول ، فهذه هي الطريقة التي تبدو عليها:

 .element { background: radial-gradient(circle, #9c27b0, #ff9800); }
التدرج على شكل دائرة
(معاينة كبيرة)

الآن بعد أن أصبحت لديك فكرة عن شكل الدائرة والقطع الناقص افتراضيًا ، دعنا ندخل في تحديد الموضع .

بشكل افتراضي ، يتم توسيط كلاهما أفقيًا وعموديًا في الحاوية الخاصة بهما. بمعنى آخر ، عند 50% 50% :

تمركز عناصر القطع الناقص والدائرة أفقياً وعمودياً في الحاوية الخاصة بهم
(معاينة كبيرة)

الشيء المهم الذي يجب ملاحظته هنا هو أن الموضع يحدث من مركز الدائرة أو القطع الناقص ، لذلك نضع دائرة في top left ، ما سيتم وضعه هو النقطة المركزية .

دعنا نلقي نظرة فاحصة على بعض الأمثلة.

 .element { background: radial-gradient(circle at top left, #9c27b0, #ff9800); }
شعاعي متدرج مع دائرة في أعلى اليسار
(معاينة كبيرة)

يمكننا أيضًا توسيطه على الجانب الأيمن. ستؤدي إضافة right فقط إلى توسيط الدائرة على right 50% :

 .element { background: radial-gradient(circle at right, #9c27b0, #ff9800); }

هنا هو كيف يبدو:

شعاعي متدرج مع دائرة على اليمين
(معاينة كبيرة)
المزيد بعد القفز! أكمل القراءة أدناه ↓

ما هو التدرج المخروطي؟

تُنشئ وظيفة التدرج conic-gradient() CSS تدرجًا يتم تدويره حول مركز العنصر. دعونا نرى مثالا أساسيا.

 .element { background: conic-gradient(#9c27b0, #ff9800); }
التدرج المخروطي
(معاينة كبيرة)

انظر إلى كيفية بدء التدرج اللوني من النقطة المركزية للعنصر. إنه يدور من 0deg إلى 360 بشكل افتراضي.

دعنا نرى ما يحدث عندما نضيف قيمة توقف ثابتة للون الأول.

 .element { background: conic-gradient(#9c27b0 50%, #ff9800); }
التدرج المخروطي حيث يملأ اللون الأول 50٪ من العنصر ، والثاني يظهر تدريجيًا حتى 100٪
(معاينة كبيرة)

الآن يملأ اللون الأول 50% من العنصر ، بينما سيظهر اللون الثاني تدريجيًا حتى 100% .

ماذا يحدث إذا طبقنا توقفًا شديدًا على اللون الثاني أيضًا؟ في المقتطف أدناه ، سيملأ اللون الأول 50% من العنصر ، وسيبدأ اللون الثاني من 50% حتى النهاية ( 100% ).

 .element { background: conic-gradient(#9c27b0 50%, #ff9800 0); }
التدرج المخروطي حيث يملأ اللون الأول 50٪ من العنصر ، والثاني يبدأ من 50٪ حتى النهاية
(معاينة كبيرة)

ستؤدي زيادة قيمة إيقاف اللون الأول إلى إنشاء تعبئة بزاوية:

 .element { background: conic-gradient(#9c27b0 65%, #ff9800 0); }
تمت زيادة نقطة التوقف اللونية الأولى حتى 65٪ مما يشكل تعبئة بزاوية
(معاينة كبيرة)

ليس ذلك فحسب ، بل يمكننا أيضًا إنشاء تدرج متكرر باستخدام وظيفة CSS repeating-conic-gradient() كما هو موضح أدناه.

 .element { background: repeating-conic-gradient( #9c27b0 0 15deg, #ff9800 15deg 30deg ); }

تملأ المقتطفات أعلاه اللون الأول من 0deg إلى 15deg ، ثم يتم تعبئة اللون الثاني من 15deg إلى 30deg . مع التكرار سيبدو الشكل أدناه:

تكرار التدرج المخروطي
(معاينة كبيرة)

حالات الاستخدام للتدرجات الشعاعية

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

radial-gradient في قسم البطل

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

مثال على حالة استخدام حيث يتداخل المحتوى مع الخلفية
(معاينة كبيرة)

الإصلاح الشائع لذلك هو إضافة شكل بيضاوي بنفس لون الخلفية تحته (لجعله ممتزجًا معه).

هذا هو قسم الأبطال مع القطع الناقص (ملون باللون الرمادي ، فقط للأغراض التجريبية):

قسم البطل مع القطع الناقص ملون باللون الرمادي
(معاينة كبيرة)

إليك كيفية عكس ذلك في CSS:

 .hero { background-color: #fbfafa; background-image: radial-gradient(#fbfafa, rgba(0,0,0,0) center/70% 70% no-repeat, url("hero-bg.svg"); background-position: center; background-size: 70% 70%, cover; background-repeat: no-repeat; }
ومثال لحالة استخدام حيث لم يعد المحتوى متداخلاً مع الخلفية ، بسبب القطع الناقص المضاف بنفس لون الخلفية الموجودة تحته
(معاينة كبيرة)

بهذه الطريقة ، قمنا بتغطية النمط الموجود أسفل المحتوى ، وأصبح من الأسهل قراءته الآن.

تأثير النمط المنقط

من أجل إنشاء تأثير نمط منقط ، يمكننا استخدام radial-gradient . هنا هو كيف يبدو:

نمط منقط
(معاينة كبيرة)

لتحقيق ذلك ، يمكننا إنشاء دائرة صغيرة وستكون بقية التدرج شفافة.

إليك كيف تبدو من تلقاء نفسها:

لون الدائرة وبقية التدرج لون شفاف.
(معاينة كبيرة)

عندما يتكرر هذا النمط ، فإليك كيف يبدو:

نمط متكرر مع لون دائري وبقية التدرج يكون لونًا شفافًا
(معاينة كبيرة)

لنعكس ذلك في CSS ، نحتاج إلى إضافة عرض وارتفاع للتدرج. نظرًا لأن التدرجات تتكرر افتراضيًا ، فسوف ينتج عنها النمط أعلاه.

 .dot-pattern { --color-1: #9c27b0; --color-2: rgba(0,0,0,0); background-image: radial-gradient(circle at 2px 2px, var(--color-1) 1px, var(--color-2) 0); background-size: 15px 15px; }

تأثيرات الصورة

إلى جانب mix-blend-mode ، يمكن للتدرجات اللونية الشعاعية إنشاء بعض تأثيرات واجهة المستخدم المثيرة للاهتمام للصور. في المثال التالي ، لاحظ كيفية وضع الدائرة في الزاوية العلوية اليسرى. يمكننا الاستفادة من ذلك من خلال اللعب بأوضاع المزج لتحقيق تأثير معين.

مثال حيث ينشئ التدرج الشعاعي تأثير واجهة مستخدم مثيرًا للاهتمام لصورة ما. على وجه التحديد ، يتم وضع الدائرة في الزاوية العلوية اليسرى من الصورة مما يؤدي إلى إنشاء التدرج اللوني
(معاينة كبيرة)
 .thumb:after { content: ""; position: absolute; inset: 0; background: radial-gradient(circle at top left, #9c27b0, #ff9800); mix-blend-mode: hard-light; opacity: 0.4; }

حالات الاستخدام للتدرجات المخروطية

الرسوم البيانية الدائرية

حالة الاستخدام الأولى التي يمكنني التفكير فيها للتدرجات المخروطية هي المخططات الدائرية البسيطة. لقد كان شيئًا نريد القيام به في CSS منذ فترة ، والآن أصبح ممكنًا بسهولة.

مخطط دائري
مخطط دائري بسيط (معاينة كبيرة)
 .pie-chart { width: 100px; height: 100px; background: conic-gradient(from 0deg, #b2daf9 128deg, #2096f3 0); border-radius: 50%; }

الخلفيات والأنماط

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

نمط رقعة الشطرنج
تم تحقيق نمط رقعة الشطرنج 2 × 2 باستخدام conic-gradient() . (معاينة كبيرة)

إليك ما يحدث في التدرج اللوني التالي:

  • يغطي اللون #fff 90deg العنصر ؛
  • ثم يتبعه #000 حتى 180deg ؛
  • ثم يتبعها #fff حتى 270deg ؛
  • أخيرًا ، تم ملء #000 حتى زاوية النهاية ( 360deg ).
 .checkerboard { --size: 25px; width: 200px; height: 100px; background-image: conic-gradient(#fff 90deg, #000 0 180deg, #fff 0 270deg, #000 0); background-size: var(--size) var(--size); }

عند التكرار والتحكم background-size ، سيبدو كما يلي:

نمط رقعة الشطرنج المتكرر
معاينة نمط رقعة الشطرنج التي تكررت عدة مرات. (معاينة كبيرة)

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

 .element { background-image: conic-gradient(#fff 90deg, #000 0 136deg, #fff 0 313deg, #000 0); }
نمط رقعة الشطرنج المتكرر المستدير
نفس نمط لوحة الشيكات ، لكنه مختلف. (معاينة كبيرة)

أنماط واجهة المستخدم

في بعض الأحيان ، قد نحتاج إلى إنشاء نمط واجهة مستخدم عشوائي يأخذ أشكالًا مختلفة. يمكننا استخدام conic-gradient لتحقيق ذلك. الفكرة هي أننا نتحكم في حجم التدرج عبر حجم background-size ، ثم نغير زاوية conic-gradient لتحقيق تأثيرات مختلفة.

لدينا عنصر بعرض وارتفاع 200px . ضمن هذا العنصر ، سنكرر الخلفية.

 .element { --size: 20px; width: 200px; height: 200px; background-size: var(--size) var(--size); }

لتخيل ذلك بشكل أفضل ، سيكون لكل خلفية حجم 20px لكل من العرض والارتفاع ، وسيتم تكرارها أفقيًا وعموديًا.

عنصر يبلغ عرضه وارتفاعه 200 بكسل ، وداخل هذا العنصر توجد خلفية متكررة بحجم 20 بكسل
عنصر (200 × 200 بكسل) له خلفية متكررة بحجم 20 بكسل. (معاينة كبيرة)

الآن ، سيحتوي كل مربع تراه على conic-gradient . في الوقت الحالي ، سأضيف ظلالين زرقاء لإظهار المفهوم بشكل أفضل.

 .element { --size: 20px; width: 200px; height: 200px; background: conic-gradient(#2296F3 0.13turn, rgba(255,255,255,0) 0); background-size: var(--size) var(--size); }

هكذا يبدو التدرج اللوني المخروطي دون تكراره:

مربعان بهما تدرجات مخروطية زرقاء على شكل مثلث. المربع الأول له خلفية زرقاء داكنة ، والمربع الثاني له خلفية شفافة
(معاينة كبيرة)

مع التكرار ، يبدو مثل هذا. الآن ، النقطة المهمة هي جعل اللون الثاني شفافًا ، والذي سينتج عنه شكل مثلث.

عنصر بخلفية متكررة بأشكال مثلثة
(معاينة كبيرة)

من خلال الحصول على زاوية مختلفة ، يمكننا ترتيب شكل النمط عشوائيًا للحصول على تأثيرات مثيرة للاهتمام.

أشكال أنماط مختلفة تتكون من زوايا مختلفة: 0،08 دورة ، 0،03 دوران و 0،5 دوران
(معاينة كبيرة)

تحريك التدرجات المخروطية باستخدام @property

يمكننا إنشاء تأثيرات رسوم متحركة مثيرة للاهتمام باستخدام conic-gradient . ومع ذلك ، هذا غير ممكن افتراضيًا. نحتاج إلى استخدام تعريف @property لتحديد خاصية مخصصة سنستخدمها للرسوم المتحركة.

 @property --conic-mask { syntax: '<percentage>'; inherits: false; initial-value: 0%; } .conic-mask { --conic-mask: 0%; -webkit-mask: conic-gradient(from 0deg at 50% 50%, #000 var(--conic-mask), #0000); transition: --conic-mask 1s ease-out; } .conic-mask: hover { --conic-mask: 100%; }
تأثير الرسوم المتحركة مع conic-gradient .

قطع زوايا بأشكال مخصصة

هذا عرض توضيحي لتيماني عفيف. الفكرة هي استخدام conic-gradient كقناع لإنشاء تأثيرات الزوايا المقطوعة:

راجع القلم [قص الزوايا بالشكل المخصص [متشعب]] (https://codepen.io/smashingmag/pen/jOGKjxQ) بواسطة Temani Afif.

شاهد زوايا القطع بالقلم ذات الشكل المخصص [متشعب] بواسطة تيماني عفيف.

التدرجات المخروطية

يمكننا استخدام conic-gradient لإنشاء تأثيرات متدرجة دقيقة لها زوايا أغمق أو أفتح مع ألوان أخرى. Conic.css هي مكتبة CSS صغيرة من تصميم Adam Argyle تتميز بالكثير من التدرجات المخروطية الجميلة.

تدرجات مخروطية بألوان مختلفة
(معاينة كبيرة)

استخدام التدرجات المخروطية لخلفيات القسم

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

 .footer { background: conic-gradient(from 0.25turn at 25% 0%, #FFD9CE, rgba(#FFD9CE, 0) 50%); }
تذييل Typetura مع تدرج مخروطي
(معاينة كبيرة)
  • تحقق من العرض التوضيحي →

خاتمة

كما رأيت ، يمكن أن يؤدي استخدام وظائف التدرج radial-gradient conic-gradient CSS إلى واجهات مستخدم مثيرة جدًا (ومفيدة). ومع ذلك ، لا يوجد أبيض وأسود عندما يتعلق الأمر باستخدام كل منهما. في معظم الأحيان ، يعتمد ذلك على حالة الاستخدام في متناول اليد.

آمل أن تجد المقالة مفيدة. شكرا لقراءتك!

مزيد من القراءة في مجلة Smashing

  • الغوص العميق في object-fit background-size في CSS
  • مشكلات CSS الشائعة لمشاريع الواجهة الأمامية
  • استخدام ألوان HSL في CSS
  • مشاكل تجاوز السعة في CSS