يتم إنشاء تطبيقات Blockly من عناصر HTML وSVG. يتم تصنيف هذه العناصر باستخدام فئات CSS تحدّد ما تمثّله (مثل blocklyBlock
وblocklyField
) بالإضافة إلى حالتها (مثل blocklyEditing
وblocklySelected
). يوفّر Blockly أيضًا مجموعة تلقائية من قواعد CSS.
يمكنك استخدام CSS لتصميم تطبيقك:
- تجاوز قواعد CSS في Blockly بقواعدك الخاصة.
- أضِف فئات CSS الخاصة بك إلى مكوّنات Blockly للحصول على المزيد من التحديد.
- استخدِم فئات وقواعد CSS لتحديد نمط المكوّنات المخصّصة.
فئات CSS
تستخدم تطبيقات Blockly فئات CSS لتحديد العناصر التي سيتم تصميمها. ويوفّر ذلك تحكّمًا أكثر دقة من أدوات اختيار النوع (العنصر).
فئات CSS في Blockly
تستخدم Blockly فئات CSS لتقديم الأنواع التالية من المعلومات حول عناصر HTML وSVG التي تستخدمها.
النوع: تحدّد معظم فئات CSS في Blockly ما يمثّله العنصر. على سبيل المثال، يتم تصنيف العنصر الجذر الخاص بكتلة على أنّه
blocklyBlock
. يتم تصنيف بعض العناصر باستخدام فئات متعددة، وكل فئة تكون أكثر تحديدًا من الفئة السابقة. على سبيل المثال، يتم تصنيف العنصر الجذر لحقل إدخال النص على أنّهblocklyField
وblocklyInputField
وblocklyTextInputField
. تظل فئات الأنواع كما هي طوال مدة توفّر المكوّن.الولاية: تستخدم Blockly أيضًا فئات CSS لتحديد حالة أحد المكوّنات. على سبيل المثال، عندما يكون المؤشر على حقل إدخال نص، يتم تصنيف العنصر الجذر الخاص به باستخدام الفئة
blocklyEditing
. عندما يتم نقل المؤشر بعيدًا، تتم إزالة هذه الفئة.معلومات إضافية تستخدم Blockly بعض فئات CSS لتقديم معلومات إضافية. على سبيل المثال، يحتوي العنصر الذي تم إدراجه
<div>
على فئات توفّر اسم أداة العرض الحالية ومظهر مساحة العمل. تبقى هذه الفئات بشكل عام كما هي طوال فترة استخدام التطبيق.
أسهل طريقة لمعرفة فئات CSS التي يستخدمها Blockly هي فتح أدوات المطوّرين في المتصفّح وفحص العناصر التي يستخدمها تطبيقك.
فئات CSS المخصّصة
يمكنك استخدام فئات CSS مخصّصة لتوفير المزيد من الخصوصية لمكوّنات Blockly.
مساحات العمل
لإضافة فئة CSS أو إزالتها من عملية إدخال مساحة عمل <div>
، استخدِم WorkspaceSvg.addClass
أو WorkspaceSvg.removeClass
.
مجموعات الأدوات
لإضافة فئة CSS إلى زر أو تصنيف في صندوق أدوات، استخدِم المفتاح web-class
في تعريف JSON الخاص بصندوق الأدوات. لمزيد من المعلومات، يُرجى الاطّلاع على الأزرار والتصنيفات.
لتجاوز فئات CSS المستخدَمة في الأجزاء المختلفة من الفئة، استخدِم المفتاح cssConfig
في تعريف JSON الخاص بالفئة. يتيح لك ذلك
تنسيق فئات فردية. لمزيد من المعلومات، يُرجى الاطّلاع على فئة CSS.
Blocks
لإضافة فئات CSS إلى حظر مخصّص، مرِّر سلسلة أو مجموعة من السلاسل إلى المفتاح classes
.
Blockly.common.defineBlocksWithJsonArray([{
"type": "string_length",
"message0": 'length of %1',
"args0": [
{
"type": "input_value",
"name": "VALUE",
"check": "String",
}
],
"classes": "myStringLengthBlock",
"output": "Number",
"colour": 160,
}]);
يمكنك أيضًا إضافة فئة CSS أو إزالتها من عنصر <g>
في أحد المربّعات من خلال استدعاء BlockSvg.addClass
أو BlockSvg.removeClass
.
حقول التصنيفات
لإضافة أو إزالة فئة CSS من العنصر <text>
المستخدَم من قِبل حقل تصنيف أو حقل تصنيف قابل للتسلسل، استخدِم FieldLabel.setClass
. يمكنك أيضًا تمرير اسم فئة إلى الدالة الإنشائية للتصنيف.
فئات CSS والمكوّنات المخصّصة
عند إنشاء مكوّن مخصّص، استخدِم إحدى الطرق التالية لإضافة فئات CSS مخصّصة:
إذا كان المكوّن فئة فرعية من
Field
أوIcon
، عليك إلغاء طريقةinitView
. على سبيل المثال:class MyCustomField extends Blockly.FieldTextInput { ... initView() { super.initView(); // Add custom CSS class so we can style the field. if (this.fieldGroup_) { Blockly.utils.dom.addClass(this.fieldGroup_, 'myCustomField'); } } }
لمزيد من المعلومات، يُرجى الاطّلاع على تخصيص الحقول باستخدام CSS أو إنشاء طريقة عرض الرمز.
عند إنشاء عنصر SVG، مرِّر صفك إلى
Blockly.utils.dom.createSvgElement
:this.svgRoot = Blockly.utils.dom.createSvgElement(Svg.G, {'class': 'myCustomComponent'});
عند إنشاء عنصر HTML، استخدِم
Blockly.utils.dom.addClass
:const myDiv = document.createElement('div'); Blockly.utils.dom.addClass(myDiv, 'myInformation');
لإضافة صفوف أو إزالتها بعد الإنشاء، استخدِم Blockly.utils.dom.addClass
أو Blockly.utils.dom.removeClass
.
setMyHighlight(highlight) {
if (highlight) {
Blockly.utils.dom.addClass(this.svgRoot, 'myHighlight');
} else {
Blockly.utils.dom.removeClass(this.svgRoot, 'myHighlight');
}
}
خلفية قواعد CSS
إذا كنت على دراية بسمات تصميم SVG وCSS، يمكنك تخطّي هذا القسم.
خصائص تصميم SVG مقارنةً بخصائص CSS
يتم تصميم عناصر SVG باستخدام خصائص تصميم SVG. ويمكن استخدامها كسمات في عناصر SVG (المعروفة أيضًا باسم سمات العرض) أو في قواعد CSS. وبالتالي، فإنّ جميع ما يلي يؤدي الغرض نفسه.
<!-- SVG file with presentation attributes. -->
<circle fill="red" ... />
<!-- SVG file with <style> tag. -->
<style>
circle {fill:red;}
</style>
<circle ... />
/* External CSS file.*/
circle {fill:red;}
<!-- SVG file with inline style. -->
<circle style="fill:red;" ... />
تتعلّق قائمة خصائص تصميم SVG بقائمة خصائص CSS، ولكنّها تختلف عنها:
- المفهوم نفسه، الاسم نفسه على سبيل المثال، تستخدم كل من SVG وCSS السمة
direction
لتحديد ما إذا كان النص مكتوبًا من اليمين إلى اليسار أو من اليسار إلى اليمين. - المفهوم نفسه، ولكن الاسم مختلف على سبيل المثال، تستخدم SVG
fill
لتحديد لون التعبئة، بينما تستخدم CSSbackground-color
. - خدمة CSS فقط تتضمّن CSS العديد من الخصائص غير المتوفّرة في SVG، مثل
margin
وpadding
. - ملفات SVG فقط: تحتوي SVG على بعض الخصائص غير المتوفّرة في CSS، مثل
x
وy
.
لذلك، إذا كنت تريد تصميم عنصر SVG، استخدِم خصائص تصميم SVG. إذا كنت تريد تصميم عنصر HTML، استخدِم سمات CSS.
التتالي في CSS
يحدّد التتالي في CSS الأولويات لقواعد CSS، والتي تحدّد القاعدة التي سيتم استخدامها إذا كانت أكثر من قاعدة واحدة تنطبق على خاصية وعنصر معيّنين. يغطّي التتالي المبسّط التالي أجزاء التتالي الأكثر استخدامًا في Blockly، وقد يساعدك في الإجابة عن السؤال "لماذا لا يعمل CSS؟".
التسلسل الهرمي المبسّط
لتحديد القاعدة التي تنطبق على عنصر وسمة معيّنَين، اتّبِع الخطوات التالية وتوقّف عندما تبقى قاعدة واحدة فقط:
- اجمع كل القواعد التي تنطبق على الموقع والعنصر.
- إذا كانت أي قواعد تتضمّن التعليق التوضيحي
!important
، تجاهِل جميع القواعد التي لا تتضمّن التعليق التوضيحي!important
. اختَر القواعد ذات الدقة الأعلى.
- تكون سمات العرض في SVG ذات مستوى تحديد صفر.
- يتم احتساب درجة التحديد للقواعد في علامة
<style>
أو ورقة أنماط خارجية بشكل طبيعي. - تكون لسمات الأنماط المضمّنة (الأنماط التي يتم ضبطها بواسطة سمة
style
) درجة تحديد أعلى من أي محدّد.
اختَر القاعدة التي تظهر في آخر المستند.
إذا لم تنطبق أي قاعدة، يتم اكتساب قيمة السمة من العنصر الرئيسي للعنصر.
لا تأخذ هذه الخوارزمية في الاعتبار الأجزاء التالية من التتالي:
- السمة
transition
التي لها الأولوية القصوى يستخدم Blockly بعضًا من هذه الأنواع. - قاعدة
@media
at-rule يستخدم Blockly أحد هذه الأنواع. - القواعد التي يحدّدها المتصفّح أو المستخدم
- قواعد
@scope
و@layer
التي تبدأ بعلامة @ والسمةanimation
، وهي غير مستخدَمة في Blockly
قواعد CSS
تحدّد قواعد CSS طريقة تصميم تطبيقك. توفّر Blockly مجموعة تلقائية من القواعد يمكنك استبدالها بقواعدك الخاصة.
قواعد CSS في Blockly
توفّر Blockly مجموعة تلقائية من قواعد CSS. تؤثّر طريقة ومكان إضافة هذه القواعد في أولويتها.
علامات الأنماط
يتم تحديد معظم قواعد CSS في Blockly في علامتَي <style>
. وبما أنّ هذه العلامات تظهر بالقرب من أعلى الصفحة، تكون لقواعدها أولوية أقل من القواعد التي تتضمّن التفاصيل نفسها وتظهر في وقت لاحق من الصفحة.
قواعد Blockly.css.register
عند إدخال Blockly، تتم إضافة العلامة <style>
كعلامة فرعية للعلامة <head>
. تأتي القواعد في هذه العلامة من:
- مساحة الاسم
Blockly.css
للاطّلاع على هذه القواعد، افتح الملف core/css.ts وابحث عنlet content
. - المكوّنات الفردية التي تستدعي
Blockly.css.register
لإضافة قواعد CSS خاصة بالمكوّن بما أنّcss.register
تضيف هذه القواعد إلى نهاية السلسلةcontent
، فإنّ لها أولوية أعلى من القواعد التي لها نفس درجة التحديد والتي تمت إضافتها في وقت سابق. للاطّلاع على هذه القواعد، راجِع المكالمات إلىBlockly.css.register
.
إذا كنت لا تريد استخدام هذه القواعد، اضبط خيار إعدادات css
على false
. في هذه الحالة، تكون أنت المسؤول عن توفير مجموعة بديلة من قواعد CSS.
قواعد العارض
عند إنشاء مثيل لأداة العرض، تتم إضافة علامة <style>
تحتوي على قواعد CSS خاصة بأداة العرض كعنصر ثانوي للعلامة <head>
. يُرجى العِلم أنّه تتم إضافة هذه القواعد دائمًا، ولا تتأثر بخيار الإعداد css
. للاطّلاع على هذه القواعد، ابحث عن طريقة getCss_
في أداة العرض.
الأنماط المضمّنة
يتم تحديد الأنماط المضمّنة باستخدام السمة style
، ويتم إنشاؤها بشكل عام عند إنشاء نموذج المستند (DOM) لأحد المكوّنات. للحصول على قائمة جزئية، يُرجى الاطّلاع على طلب البحث هذا على GitHub.
يتم تطبيق الأنماط المضمّنة مباشرةً على العنصر الذي تظهر فيه، وتكون درجة تحديدها أعلى من أي أداة اختيار. لهذا السبب، يتطلّب إلغاء هذه الإعدادات بشكل عام استخدام !important
تعليق توضيحي.
سمات العرض التقديمي لملفات SVG
سمات العرض في SVG هي خصائص تنسيق SVG تُستخدَم كسمات لعناصر SVG. وتبلغ درجة تحديدها صفرًا، ولا يمكن أن تحتوي على تعليق توضيحي !important
، لذا تكون لها الأولوية الأدنى بين جميع قواعد Blockly. تنشئ Blockly هذه السلاسل بشكل عام من خلال عمليات استدعاء إلى
createSvgElement
.
إضافة قواعد CSS الخاصة بك
يمكنك إضافة قواعد CSS الخاصة بك باستخدام الطرق نفسها التي تستخدمها Blockly:
- اتّصِل بـ
Blockly.css.register
قبل إدخال Blockly. ستتم إضافة قواعدك بعد قواعد Blockly، وستكون لها أولوية أعلى من قواعد Blockly التي تتضمّن التفاصيل نفسها. - أضِف علامة
<style>
أو رابطًا إلى ورقة أنماط خارجية كعنصر فرعي لاحق للعلامة<head>
. بما أنّ Blockly يضيف قواعده كأول عنصرَين ثانويَين للعلامة<head>
، ستكون لقواعدك أولوية أعلى من قواعد Blockly التي تتضمّن التفاصيل نفسها. - استخدِم الأنماط المضمّنة لإضافة أنماط إلى العناصر في مكوّن مخصّص. وستكون هذه القواعد أكثر تحديدًا من أي قواعد تتضمّن محدّدًا.
- استخدِم سمات العرض التقديمي على عناصر SVG في مكوّن مخصّص. وستكون هذه القواعد أقل تحديدًا من أي قواعد تتضمّن محدّدًا.
تحديد المشاكل وحلّها
إذا لم يكن CSS يعمل، إليك بعض الأسباب المحتملة:
أنت تستخدم خصائص CSS على عنصر SVG أو خصائص تصميم SVG على عنصر HTML. اطّلِع على خصائص تصميم SVG مقارنةً بخصائص CSS.
تتمتّع قاعدتك بأولوية أقل من قاعدة أخرى. ويحدث ذلك عادةً بسبب انخفاض مستوى الدقة. في ما يلي بعض الطرق المحتملة لحلّ هذه المشكلة:
- استخدِم محدّد فئة بدلاً من محدّد نوع (عنصر).
- استخدام أدوات اختيار متعددة
- إذا أمكن، أضِف فئة مخصّصة إلى العنصر المستهدَف واستخدِم هذه الفئة في القاعدة.
- كحلّ أخير، أضِف تعليقًا توضيحيًا
!important
إلى القاعدة. هذا هو خيارك الوحيد إذا تم تحديد قاعدة متضاربة باستخدام نمط مضمّن (السمةstyle
).
تتضمّن قاعدتك مستوى التفصيل نفسه الذي تتضمّنه قاعدة أخرى، ولكنّها تظهر في موضع أبكر في الصفحة. إذا لم تتمكّن من زيادة دقة القاعدة، يمكنك نقلها إلى موضع لاحق في الصفحة.
هناك نوعان من قواعد CSS لا يمكنك تجاهلهما:
- السمات التي يتم ضبطها داخل قاعدة
transition
- قواعد
!important
يحدّدها المتصفّح