أصبح من السهل الآن تخصيص اللون أو الحجم أو نوع الرقم أو التعداد النقطي عند استخدام <ul>
أو <ol>
.
بفضل "إيغاليا"، برعاية Bloomberg، تمكّنا أخيرًا من الاستغناء عن أساليب جديدة لتحسين قوائم الأزياء. انظر!
بفضل CSS ::marker
، يمكننا تغيير المحتوى وبعض أنماط التعداد النقطي والأرقام.
توافُق المتصفح
::marker
يتوفر في Firefox لأجهزة سطح المكتب وAndroid، وSafari لأجهزة سطح المكتب وiOS Safari (ولكن فقط في خصائص color
وfont-*
، يمكنك الاطّلاع على Bug 204163) ومتصفحات أجهزة الكمبيوتر المكتبي وAndroid التي تستند إلى Chromium.
العناصر الزائفة
ضع في الاعتبار قائمة HTML الأساسية التالية غير المرتبة:
<ul>
<li>Lorem ipsum dolor sit amet consectetur adipisicing elit</li>
<li>Dolores quaerat illo totam porro</li>
<li>Quidem aliquid perferendis voluptates</li>
<li>Ipsa adipisci fugit assumenda dicta voluptates nihil reprehenderit consequatur alias facilis rem</li>
<li>Fuga</li>
</ul>
ما يؤدي إلى العرض التالي غير المفاجئ:
إنّ النقطة في بداية كل عنصر <li>
مجانية. يرسم المتصفح مربع علامات تم إنشاؤه لك.
يُسعدنا اليوم أن نتحدث عن العنصر الزائف ::marker
الذي يتيح إمكانية تصميم نمط عنصر التعداد النقطي الذي تنشئه المتصفّحات لك.
إنشاء علامة
يتم إنشاء مربّع علامة العنصر الزائف ::marker
تلقائيًا داخل كل عنصر من عناصر القائمة، قبل المحتوى الفعلي والعنصر الزائف ::before
.
li::before {
content: "::before";
background: lightgray;
border-radius: 1ch;
padding-inline: 1ch;
margin-inline-end: 1ch;
}
تكون عناصر القائمة عادةً عبارة عن عناصر HTML <li>
، ولكن يمكن أيضًا أن تصبح العناصر الأخرى عناصر قائمة باستخدام display: list-item
.
<dl>
<dt>Lorem</dt>
<dd>Lorem ipsum dolor sit amet consectetur adipisicing elit</dd>
<dd>Dolores quaerat illo totam porro</dd>
<dt>Ipsum</dt>
<dd>Quidem aliquid perferendis voluptates</dd>
</dl>
dd {
display: list-item;
list-style-type: "🤯";
padding-inline-start: 1ch;
}
تصميم علامة
حتى ::marker
، كان من الممكن تصميم القوائم باستخدام list-style-type
وlist-style-image
لتغيير رمز عنصر القائمة باستخدام سطر واحد من CSS:
li {
list-style-image: url(/right-arrow.svg);
/* OR */
list-style-type: '👉';
padding-inline-start: 1ch;
}
هذا مفيد ولكننا بحاجة إلى المزيد. ماذا عن تغيير اللون والحجم والتباعد وما إلى ذلك!؟ هذا هو المكان الذي يأتي فيه "::marker
" للإنقاذ. يتيح الاستهداف الفردي والعالمي لهذه العناصر الزائفة من CSS:
li::marker {
color: hotpink;
}
li:first-child::marker {
font-size: 5rem;
}
توفّر السمة list-style-type
تصاميم محدودة للغاية. يعني العنصر الزائف ::marker
أنّه يمكنك استهداف العلامة نفسها وتطبيق الأنماط عليها مباشرةً. وهذا يسمح بمزيد من التحكم.
ومع ذلك، لا يمكنك استخدام كل سمة من سمات CSS على ::marker
. تشمل المواصفات بوضوح قائمة السمات المسموح بها وغير المسموح بها. وإذا جربت استخدام هذا العنصر الزائف وتعذّر استخدامه، ستجد في القائمة أدناه دليلك حول الإجراءات التي يمكن تنفيذها وتلك التي لا يمكن تنفيذها باستخدام لغة CSS:
خصائص ::marker
المسموح بها في CSS
animation-*
transition-*
color
direction
font-*
content
unicode-bidi
white-space
يتم تغيير محتوى ::marker
باستخدام content
بدلاً من list-style-type
. في هذا المثال التالي، تم تصميم العنصر الأول باستخدام list-style-type
والعنصر الثاني باستخدام ::marker
. تنطبق الخصائص في الحالة الأولى على عنصر القائمة بالكامل، وليس فقط على العلامة، مما يعني أن النص يتحرك مثلما يتم تطبيق العلامة. عند استخدام ::marker
، يمكننا استهداف مربّع العلامة فقط وليس النص.
لاحِظ أيضًا أنّ سمة background
غير المسموح بها ليس لها أي تأثير.
li:nth-child(1) { list-style-type: '?'; font-size: 2rem; background: hsl(200 20% 88%); animation: color-change 3s ease-in-out infinite; }
li:nth-child(2)::marker { content: '!'; font-size: 2rem; background: hsl(200 20% 88%); animation: color-change 3s ease-in-out infinite; }
تغيير محتوى العلامة
فيما يلي بعض الطرق التي يمكنك من خلالها تصميم علاماتك.
تغيير كل عناصر القائمة
li {
list-style-type: "😍";
}
/* OR */
li::marker {
content: "😍";
}
تغيير عنصر قائمة واحد فقط
li:last-child::marker {
content: "😍";
}
تغيير عنصر قائمة إلى SVG
li::marker {
content: url(/heart.svg);
content: url(#heart);
content: url("data:image/svg+xml;charset=UTF-8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='24' width='24'><path d='M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z' fill='none' stroke='hotpink' stroke-width='3'/></svg>");
}
تغيير القوائم المرقَّمة
ماذا عن <ol>
؟ العلامة على عنصر قائمة مرتَّب هي رقم وليست تعداد نقطي بشكل تلقائي. في CSS، يُطلق على هذه المقاييس اسم العدّادات، وهي قوية إلى حدّ كبير. وتشتمل أيضًا على خصائص لتعيين وإعادة ضبط الرقم من حيث بداية الرقم وانتهائه، أو تبديلها إلى الأرقام الرومانية. هل يمكننا تصميم هذا النمط؟ نعم، ويمكننا حتى استخدام قيمة محتوى العلامة لإنشاء عرض ترقيمنا الخاص.
li::marker {
content: counter(list-item) "› ";
color: hotpink;
}
تصحيح الأخطاء
إنّ "أدوات مطوري البرامج في Chrome" جاهزة لمساعدتك في فحص الأنماط التي يتم تطبيقها على العناصر ::marker
الزائفة وتصحيح الأخطاء فيها وتعديلها.
التصميم المستقبلي للعناصر الزائفة
يمكنك معرفة المزيد عن ::marker
من:
- قوائم CSS والعلامات والعدّادات من Smashing Magazine
- العدّ باستخدام عدّادات CSS وشبكة CSS من CSS-Tricks
- استخدام عدّادات CSS من MDN
من الرائع الوصول إلى محتوى كان من الصعب تصميمه. قد ترغب في إمكانية تصميم عناصر أخرى تم إنشاؤها تلقائيًا. قد تشعر بالإحباط من <details>
أو مؤشر الإكمال التلقائي لإدخالات البحث، وهو العناصر التي لا يتم تنفيذها بالطريقة نفسها على جميع المتصفحات. لمشاركة ما تحتاج إليه، يمكنك إنشاء طلب على https://webwewant.fyi.