The CSS Podcast - 002: Selectors
إذا كان لديك بعض النصوص التي تريد أن تكون أكبر حجمًا وباللون الأحمر فقط إذا كانت الفقرة الأولى من مقالة، كيف يمكنك إجراء ذلك؟
<article>
<p>I want to be red and larger than the other text.</p>
<p>I want to be normal sized and the default color.</p>
</article>
يمكنك استخدام أداة اختيار لغة CSS للعثور على هذا العنصر المحدّد وتطبيق قاعدة CSS، على النحو التالي.
article p:first-of-type {
color: red;
font-size: 1.5em;
}
يوفّر لك CSS الكثير من الخيارات لاختيار العناصر وتطبيق القواعد عليها، بدءًا من الخيارات البسيطة جدًا وصولاً إلى الخيارات المعقّدة جدًا، للمساعدة في حلّ مشاكل مثل هذه.
أجزاء قاعدة CSS
لفهم طريقة عمل أدوات الاختيار ودورها في CSS، من المهم معرفة أجزاء قاعدة CSS. قاعدة CSS هي مجموعة من الرموز البرمجية، التي تحتوي على أداة اختيار واحدة أو أكثر وبيان واحد أو أكثر.
في قاعدة CSS هذه، أداة الاختيار هي .my-css-rule
التي تعثر على جميع العناصر التي تحتوي على فئة my-css-rule
في الصفحة.
هناك ثلاثة تعريفات ضمن الأقواس المتعرجة.
البيان هو زوج من السمة والقيمة يطبّق الأنماط على العناصر التي تتطابق معها المحدّدات.
يمكن أن تحتوي قاعدة CSS على أي عدد تريده من التعريفات وأدوات الاختيار.
أدوات الاختيار البسيطة
تستهدف مجموعة المحدّدات الأكثر بساطة عناصر HTML بالإضافة إلى الفئات والمعرّفات والسمات الأخرى التي يمكن إضافتها إلى علامة HTML.
أداة اختيار جميع أنواع العناصر
يتطابق المحدّد الشامل، المعروف أيضًا باسم العنصر النائب، مع أي عنصر.
* {
color: hotpink;
}
تؤدي هذه القاعدة إلى ظهور نص بلون زهري حار في كل عنصر HTML على الصفحة.
أداة اختيار النوع
تطابق أداة اختيار النوع عنصر HTML مباشرةً.
section {
padding: 2em;
}
تؤدي هذه القاعدة إلى أن يكون لكل عنصر <section>
2em
من padding
على جميع الجوانب.
أداة اختيار الفئة
يمكن أن يحتوي عنصر HTML على عنصر واحد أو أكثر محدّد في سمة class
.
أداة اختيار الفئة: تطابق أي عنصر تم تطبيق هذه الفئة عليه.
<div class="my-class"></div>
<button class="my-class"></button>
<p class="my-class"></p>
سيتم تلوين أي عنصر تم تطبيق الفئة عليه باللون الأحمر:
.my-class {
color: red;
}
لاحظ أنّ الرمز .
يظهر في CSS فقط وليس في HTML.
ويرجع ذلك إلى أنّ الحرف .
يوجّه لغة CSS لمطابقة أعضاء سمة الفئة.
هذا نمط شائع في CSS، حيث يتم استخدام حرف خاص،
أو مجموعة من الأحرف، لتحديد أنواع أدوات الاختيار.
سيظل عنصر HTML الذي يحتوي على فئة .my-class
مطابقًا لقاعدة CSS أعلاه،
حتى إذا كان يحتوي على عدة فئات أخرى، على النحو التالي:
<div class="my-class another-class some-other-class"></div>
ويعود السبب في ذلك إلى أنّ CSS تبحث عن سمة class
تحتوي على الفئة المحدّدة، بدلاً من مطابقة تلك الفئة تمامًا.
أداة اختيار أرقام التعريف
يجب أن يكون عنصر HTML الذي يتضمّن سمة id
هو العنصر الوحيد في الصفحة الذي يتضمّن قيمة المعرّف هذه.
يمكنك اختيار العناصر باستخدام
محدِّد أرقام التعريف على النحو التالي:
#rad {
border: 1px solid blue;
}
سيطبّق ملف CSS هذا حدودًا زرقاء على عنصر HTML الذي يحتوي على id
من rad
، على النحو التالي:
<div id="rad"></div>
على غرار أداة اختيار الفئة .
،
استخدِم الحرف #
لتوجيه CSS للبحث عن عنصر يتطابق مع الحرف id
الذي يليه.
أداة اختيار السمات
يمكنك البحث عن العناصر التي تحتوي على سمة HTML معيّنة،
أو تحتوي على قيمة معيّنة لسمة HTML،
باستخدام أداة اختيار السمات.
اطلب من CSS البحث عن السمات من خلال إحاطة أداة الاختيار بقوسين متعامدين ([ ]
).
[data-type='primary'] {
color: red;
}
تبحث خدمة مقارنة الأسعار (CSS) هذه عن جميع العناصر التي تحتوي على سمة data-type
بقيمة primary
، على النحو التالي:
<div data-type="primary"></div>
بدلاً من البحث عن قيمة معيّنة لسمة data-type
،
يمكنك أيضًا البحث عن العناصر التي تتضمّن السمة، بغض النظر عن قيمتها.
[data-type] {
color: red;
}
<div data-type="primary"></div>
<div data-type="secondary"></div>
سيظهر نص أحمر في كلا عنصرَي <div>
.
يمكنك استخدام أدوات اختيار السمات الحسّاسة لحالة الأحرف
من خلال إضافة عامل التشغيل s
إلى أداة اختيار السمات.
[data-type='primary' s] {
color: red;
}
وهذا يعني أنّه إذا كان عنصر HTML يحتوي على data-type
من Primary
بدلاً من primary
، لن يظهر النص باللون الأحمر.
يمكنك إجراء العكس، أي عدم مراعاة حالة الأحرف، باستخدام عامل التشغيل i
.
إلى جانب عوامل تشغيل حالة الأحرف، يمكنك الوصول إلى عوامل التشغيل التي تتطابق مع أجزاء من السلاسل داخل قيم السمات.
/* A href that contains "example.com" */
[href*='example.com'] {
color: red;
}
/* A href that starts with https */
[href^='https'] {
color: green;
}
/* A href that ends with .com */
[href$='.com'] {
color: blue;
}
أدوات اختيار التجميع
ولا يجب أن يتطابق المحدِّد مع عنصر واحد فقط. يمكنك تجميع عدّة عناصر اختيار من خلال فصلها بفواصل:
strong,
em,
.my-class,
[lang] {
color: red;
}
يطبّق هذا المثال تغيير اللون على كلّ من عناصر <strong>
وعناصر <em>
.
ويتم أيضًا تمديدها إلى فئة باسم .my-class
وعنصر يحتوي على سمة lang
.
التحقّق من فهمك
اختبِر معلوماتك عن أدوات الاختيار البسيطة
* {}
ما هو نوع أداة الاختيار البسيطة المستخدَمة في المقتطف أعلاه؟
[]
لأدوات اختيار السمات البسيطة.#
لأدوات الاختيار البسيطة للمعرّفات.*
هو أداة الاختيار البسيطة العامة..
لأدوات الاختيار البسيطة للصف.div {}
ما هو نوع أداة الاختيار البسيطة المستخدَمة في المقتطف أعلاه؟
.
لأدوات الاختيار البسيطة للصف.element
لأدوات الاختيار البسيطة من النوع type.[]
لأدوات اختيار السمة البسيطة.#
لأدوات الاختيار البسيطة للمعرّفات.الفئات الزائفة والعناصر الزائفة
توفّر لغة CSS أنواعًا مفيدة من المحدّدات التي تركّز على حالة معيّنة للمنصة، مثل الحالات التي يتم فيها تمرير مؤشر الماوس فوق عنصر أو الهياكل داخل عنصر أو أجزاء من عنصر.
الصفوف الزائفة
تتغيّر حالات عناصر HTML، إما بسبب التفاعل معها، أو لأنّ أحد عناصرها الثانوية في حالة معيّنة.
على سبيل المثال، يمكن للمستخدم تمرير مؤشر الماوس فوق عنصر HTML
أو يمكنه أيضًا تمرير مؤشر الماوس فوق عنصر فرعي.
في هذه الحالات، استخدِم الفئة الزائفة :hover
.
/* Our link is hovered */
a:hover {
outline: 1px dotted green;
}
/* Sets all even paragraphs to have a different background */
p:nth-child(even) {
background: floralwhite;
}
يمكنك الاطّلاع على مزيد من المعلومات في وحدة الفئات الزائفة.
عنصر زائف
تختلف العناصر الزائفة عن الفئات الزائفة لأنّها بدلاً من الاستجابة لحالة المنصة،
تتصرف كما لو كانت تُدرج عنصرًا جديدًا باستخدام CSS.
تختلف العناصر الزائفة أيضًا من حيث البنية عن الفئات الزائفة،
لأنّنا نستخدم علامة نقطتَين رأسيتَين (::
) بدلاً من علامة نقطة واحدة (:
).
.my-element::before {
content: 'Prefix - ';
}
كما هو موضّح في العرض الترويجي أعلاه الذي سبقت فيه تسمية الرابط بنوع الملف،
يمكنك استخدام العنصر الاصطناعي ::before
لإدراج محتوى في بداية عنصر،
أو العنصر الاصطناعي ::after
لإدراج محتوى في نهاية عنصر.
لا تقتصر العناصر الزائفة على إدراج المحتوى.
ويمكنك أيضًا استخدامها لاستهداف أجزاء معيّنة من عنصر معيّن.
على سبيل المثال، لنفترض أنّ لديك قائمة.
استخدِم ::marker
لتنسيق كل نقطة (أو رقم) في القائمة.
/* Your list will now either have red dots, or red numbers */
li::marker {
color: red;
}
يمكنك أيضًا استخدام ::selection
لتنسيق المحتوى الذي أبرزه أحد المستخدمين.
::selection {
background: black;
color: white;
}
يمكنك الاطّلاع على مزيد من المعلومات في الوحدة المتعلّقة بالعناصر الزائفة.
التحقّق من فهمك
اختبِر معلوماتك حول أدوات الاختيار الزائفة
كم عدد النقطتَين اللتين تستخدمهما أدوات اختيار العناصر الزائفة؟
:
واحد لاستهداف الفئات الزائفة.::
مرتين لاستهداف العناصر الزائفة.p:hover { background: white; color: black; }
ما هو نوع أداة الاختيار الزائفة المستخدَمة في المقتطف أعلاه؟
:
واحد لاستهداف الفئات الزائفة.::
مرتين لاستهداف العناصر الزائفة.أدوات الاختيار المعقّدة
لقد سبق لك الاطّلاع على مجموعة كبيرة من أدوات الاختيار، ولكن في بعض الأحيان، ستحتاج إلى مزيد من عناصر التحكّم الدقيقة باستخدام CSS. وهنا يأتي دور أدوات الاختيار المعقدة.
من الجدير بالذكر في هذه المرحلة أنّه على الرغم من أنّ أدوات الاختيار التالية تمنحنا مزيدًا من الإمكانيات، لا يمكننا سوى الانتقال من الأعلى إلى الأسفل، واختيار العناصر الفرعية. لا يمكننا الاستهداف للأعلى واختيار عنصر رئيسي. سنتناول في درس لاحق تعريف التسلسل وطريقة عمله.
أدوات الدمج
المجمِّع هو العنصر الذي يقع بين أداتَي اختيار.
على سبيل المثال، إذا كان أداة الاختيار هي p > strong
، يكون المُركِّب هو الحرف >
.
تساعدك أدوات الاختيار التي تستخدم هذه العناصر المركبة في اختيار العناصر استنادًا إلى موضعها في المستند.
عنصر تركيب العناصر المتسلسلة
لفهم أدوات الربط للعناصر اللاحقة، عليك أولاً فهم العناصر الرئيسية والعناصر الفرعية.
<p>A paragraph of text with some <strong>bold text for emphasis</strong>.</p>
العنصر الرئيسي هو <p>
الذي يحتوي على نص.
يتضمّن عنصر <p>
هذا عنصر <strong>
، ما يجعل محتواه غامقًا.
ولأنّه داخل <p>
، فهو عنصر فرعي.
يسمح لنا أسلوب الربط بالعناصر اللاحقة باستهداف عنصر ثانوي.
ويستخدم هذا الإجراء مسافة () لتوجيه المتصفّح للبحث عن العناصر الفرعية:
p strong {
color: blue;
}
يختار هذا المقتطف جميع عناصر <strong>
التي هي عناصر ثانوية لعناصر <p>
فقط، ما يجعلها زرقاء بشكل متكرر.
يمكن الاطّلاع على هذا التأثير بشكل أفضل في المثال أعلاه،
باستخدام أداة اختيار المُركّب .top div
.
تُضيف قاعدة CSS هذه مساحة تملأ اليمين إلى عناصر <div>
هذه.
وبما أنّ المُركّب متكرّر،
سيتم تطبيق الحشو نفسه على جميع عناصر <div>
التي تكون في .top
.
اطّلِع على لوحة HTML في هذا العرض التمهيدي
لمعرفة كيف يتضمّن العنصر .top
عدة عناصر ثانوية من النوع <div>
، والتي تتضمّن بدورها<div>
عناصر ثانوية.
عنصر شقيق تالٍ
يمكنك البحث عن عنصر يلي عنصرًا آخر مباشرةً
باستخدام الحرف +
في أداة الاختيار.
لإضافة مسافة بين العناصر المكدّسة،
استخدِم عنصر الربط "الأخ الشقيق التالي" لإضافة مسافة
فقط إذا كان العنصر هو الأخ الشقيق التالي لعنصر ثانوي من .top
.
يمكنك إضافة هامش إلى جميع العناصر الفرعية للعنصر .top
،
باستخدام المحدّد التالي:
.top * {
margin-top: 1em;
}
تكمن المشكلة في أنّك تختار كل عنصر ثانوي من .top
،
وبذلك قد تُنشئ هذه القاعدة مساحة إضافية غير ضرورية.
لا يتيح لك مُركّب الشقيق التالي،
مختلطًا مع أداة اختيار شاملة، التحكّم في العناصر التي تحصل على مسافة فقط،
بل يتيح لك أيضًا تطبيق المسافة على أي عنصر.
يمنحك ذلك بعض المرونة على المدى الطويل،
بغض النظر عن عناصر HTML التي تظهر في .top
.
عنصر شقيق لاحق
يشبه المُجمِّع اللاحق إلى حدٍ كبير أداة اختيار العنصر التالي.
بدلاً من استخدام الحرف +
،
استخدِم الحرف ~
.
يختلف هذا عن العنصر التالي الذي يتضمّن العنصر الرئيسي نفسه،
بدلاً من العنصر التالي الذي يتضمّن العنصر الرئيسي نفسه.
يقدّم هذا المُركّب اللاحق قدرًا أقل من الثبات،
وهو مفيد في السياقات مثل العيّنة أعلاه،
حيث نغيّر لون مفتاح تبديل مخصّص عندما يكون مربّع الاختيار المرتبط به في الحالة :checked
.
عنصر تركيبي فرعي
يسمح لك المُركّب الفرعي (المعروف أيضًا باسم العنصر المباشر)
بالتحكّم بشكل أكبر في التكرار الذي يأتي مع أدوات اختيار المُركّبات.
باستخدام الحرف >
، يمكنك حصر أداة اختيار المُركّب على تطبيقها فقط على العناصر الثانوية المباشرة.
راجِع المثال السابق لعنصر اختيار الشقيق التالي. تتم إضافة المساحة إلى كل عنصر شقيق تالٍ، ولكن إذا كان أحد هذه العناصر يتضمّن أيضًا عناصر شقيقة تالية كعناصر ثانوية، قد يؤدي ذلك إلى إضافة مسافات إضافية غير مرغوب فيها.
لحلّ هذه المشكلة،
غيِّر أداة اختيار الشقيق التالي لدمج عنصر تركيب فرعي: > * + *
.
ستسري القاعدة الآن فقط على الصفحات الثانوية المباشرة لقناة .top
.
أدوات الاختيار المجمّعة
يمكنك الجمع بين أدوات الاختيار لزيادة التحديد وسهولة القراءة.
على سبيل المثال، لاستهداف عناصر <a>
،
التي لها أيضًا فئة .my-class
، اكتب ما يلي:
a.my-class {
color: red;
}
لن يؤدي ذلك إلى تطبيق اللون الأحمر على جميع الروابط،
ولن يطبّق اللون الأحمر على .my-class
إلا if كان على عنصر <a>
.
لمزيد من المعلومات حول هذا الموضوع، يُرجى الاطّلاع على وحدة تحديد الهوية.
التحقّق من فهمك
اختبِر معلوماتك عن المحدّدات المعقّدة
أيّ من الرموز التالية ليس عنصرًا مركبًا لاختيار العناصر؟
section.awesome { border: 1px solid hotpink; }
أداة الاختيار أعلاه هي مثال على...