Emmet: Lorem Ipsum وتفاصيل الوسوم الضمنية
خلال الدروس التسعة الأولى، أتقنت جميع عوامل تشغيل هيكل HTML + النص + الترقيم في Emmet، وأصبحت قادرًا على كتابة HTML بتداخل عشوائي، وسمات عشوائية، وترقيم عشوائي، ومحتوى عشوائي. لكن هناك أداتين قويتين "لتوفير ضغطات المفاتيح" لم تستخدمهما بعد — توليد نصوص Lorem Ipsum التلقائي وقواعد أسماء الوسوم الضمنية الكاملة. الأولى تتيح لك توليد 30 كلمة من Lorem في ثانية واحدة (بدون كتابة يدوية)، بينما الثانية تتيح لك حذف أسماء وسوم li/tr/td/option في سياقات الوالدين ul/table/select. يشرح هذا الدرس كلا الآليتين بالتفصيل، ليكون خاتمة المرح��ة 3.
1. ما ستتعلمه
- مولد Lorem Ipsum:
loremالافتراضي 30 كلمة،loremNيحدد N كلمة - Lorem متعدد الفقرات:
p*3>loremيولد 3 فقرات، كل منها بنص مستقل - أسماء الوسوم الضمنية: التبديل التلقائي في سياقات الوالدين ul/ol/table/tr/select/dl
- التضمين + class + id:
ul>.item←<li class="item">،table>#row1>.cell←<tr id="row1"><td class="cell"> - حدود قواعد التضمين: عندما لا يكون الوالد في القائمة البيضاء، يبقى الافتراضي div (يشمل مفهوم تخصيص snippets.json)
2. قصة حقيقية لمطور واجهة أمامية
(1) نقطة الألم: النصوص النائبة + أسماء الوسوم المتكررة تبطئ التطوير
كانت أليس تنفذ نم��ذج تصميم لقالب مدونة. احتاجت عرض "صفحة مقال مدونة" قياسية — عنوان، معلومات الكاتب، 3 فقرات من النص الأساسي، وسحابة وسوم في الشريط الجانبي. لكنها لم تعرف ما المحتوى الذي ستكتبه (مرحلة التصميم لم يكن فيها محتوى حقيقي بعد)، ولم ترغب في ملئه بنصوص عشوائية (تبدو مزيفة).
جربت أولاً نسخ 30 كلمة من نص Lorem Ipsum من lipsum.com ولصقها في أول <p>. ثم نسخت كتلة أخرى (محتوى مختلف) للثاني <p>، ولصقتها. 3 فقرات تعني 3 جولات نسخ-لصق، أهدرت 3 دقائق. الأسوأ: في اليوم التالي احتاجت فعل الشيء نفسه مرة أخرى — عمل متكرر بحت.
والأسوأ كان "سحابة الوسوم" في الشريط الجانبي — 15 رابط <a>، كل منها يشير إلى #tag-design، #tag-css، وهكذا. كتبت يدويًا:
<a href="" id="tag-design">#design</a>
<a href="" id="tag-css">#css</a>
<!-- ... 13 سطرًا آخر -->
15 سطرًا من HTML استغرقت 5 دقائق.
أخيرًا، كان هناك قسم الجدول — "جدول عرض بيانات" بـ 5 صفوف × 4 أعمدة. فكرت: كل صف وعمود في الجدول يبدو متطابقًا �� هل يمكنني فقط كتابة أسماء الفئات (مثل .row، .cell) وجعل Emmet يملأ <tr>، <td> تلقائيًا؟ الجواب نعم (الدرس 06 غطى هذا)، لكنها أرادت أيضًا "داخل select، فقط اكتب .opt ويتحول تلقائيًا إلى <option>"، و"داخل dl، فقط اكتب .term ويتحول تلقائيًا إلى <dt>" — سيناريوهات لم تدرسها بشكل منهجي بعد.
(2) كيف يحل Lorem + الوسوم الضمنية المشكلة
يوفر Emmet آليتين متكاملتين:
مولد Lorem Ipsum: اكتب lorem أو loremN في اختصار، ويوسعه Emmet تلقائيًا إلى 30 كلمة (أو N كلمة) من Lorem Ipsum. يمكن كتابة فقرات أليس الثلاث الأساسية كالتالي:
article>(p>lorem)*3
ثلاثة عناصر <p>، كل منها بـ 30 كلمة من نص Lorem مستقل (غير متكرر).
قواعد أسماء الوسوم الضمنية الكاملة: في سياقات عناصر وليدة محددة، يؤدي حذف اسم الوسم إلى تبديل Emmet تلقائيًا إلى عنصر وليد معقول — داخل ul/ol يفترض li، داخل table يفترض tr، داخل tr يفترض td، داخل select يفترض option، وداخل dl يفترض dt/dd. يمكن كتابة سحابة وسوم أليس كالتالي:
ul.tag-cloud>(li.tag*3>a{#tag-$})
الوسوم الضمنية تلغي الحاجة لكتابة 70% من أسماء الوسوم بشكل متكرر.
أعادت أليس كتابة صفحة مقال المدونة بالكامل باستخدام Lorem + الوسوم الضمنية:
section.blog>(header>h1{Blog Title: Emmet Boosts Speed 5x}+p.meta{By Alice · 2026-07-30})+(article>(p>lorem)*3)+(aside>ul.tag-cloud>(li.tag*3>a{#tag-$}))
تحققت أليس وقالت باندهاش: "3 فقرات Lorem من 3 دقائق إلى ثانية واحدة، 15 رابط وسم من 5 دقائق إلى 3 ثوانٍ، وكتابة أسماء الوسوم انخفضت بنسبة 70%. تعزيز كفاءة Emmet في سيناريوهات النصوص النائبة + الوسوم الدلالية يصل إلى 50 ضعفًا أو أكثر."
(3) الفوائد
Lorem Ipsum وقواعد الوسوم الضمنية هما "جوهر توفير ضغطات المفاتيح" في Emmet. الأولى تتيح لك تخطي خطوة "نسخ-لصق النص النائب"، بينما الثانية تتيح لك تخطي "كتابة أسماء الوسوم الشائعة بشكل متكرر". بعد هذا الدرس، تستطيع أليس كتابة 3 فقرات Lorem في ثانية واحدة و15 رابط وسم في 3 ثوانٍ. هذا الدرس هو أيضًا خاتمة المرحلة 3 — المرحلة التالية (المرحلة 4) تنتقل إلى اختصارات CSS، ممتدة قدرات Emmet من HTML إلى CSS.
3. مولد نصوص Lorem Ipsum النائبة
Lorem Ipsum هو النص النائب القياسي في صناعة الطباعة، استخدم لعروض التخطيط منذ القرن السادس عشر. يحتوي Emmet على مولد Lorem مدمج، يمكن الوصول إليه باستخدام lorem أو lipsum ككلمة مفتاحية (هما متطابقان وظيفيًا).
(1) اختصار lorem و loremN
| الاختصار | عدد الكلمات | التوسيع |
|---|---|---|
lorem |
30 | 30 كلمة من Lorem Ipsum (الطول الافتراضي) |
lorem5 |
5 | 5 كلمات من Lorem Ipsum |
lorem50 |
50 | 50 كلمة من Lorem Ipsum |
lorem100 |
100 | 100 كلمة من Lorem Ipsum |
نقطة أساسية: الرقم الذي يلي
loremمباشرة يستخدم كمعامل عدد الكلمات (مثال:lorem5= 5 كلمات). إذا لم يُعطَ رقم، الافتراضي هو 30 كلمة. عدد الكلمات يقاس بوحدات مفصولة بمسافات، وليس بعدد الأحرف. قد يختلف المحتوى الموسع الفعلي قليلاً عبر المحررات (VSCode و WebStorm يستخدمان نفس الفقرة الأساسية المكونة من 30 كلمة)، لكن عدد الكلمات يلتزم بدقة.
(2) دمج Lorem مع عوامل التشغيل الأخرى
| الاختصار | الهيكل الموسع | حالة الاستخدام |
|---|---|---|
p>lorem |
عنصر <p> واحد بـ 30 كلمة Lorem |
فقرة نائبة واحدة |
p>lorem5 |
عنصر <p> واحد بـ 5 كلمات Lorem |
نص نائب لوصف قصير |
(p>lorem)*3 |
3 عناصر <p>، كل منها بـ 30 كلمة مستقلة |
نص نائب لجسم مدونة |
p*3>lorem |
3 عناصر <p>، كل منها بـ 30 كلمة مستقلة (مكافئ لما سبق) |
نص نائب متعدد الفقرات |
ul.generic-list>lorem10.item*4 |
4 عناصر <li class="item">، كل منها بـ 10 كلمات |
نص نائب لقائمة (مثال رسمي) |
article>section*3>p>lorem |
3 عناصر <section>، كل منها بفقرة Lorem واحدة |
نص نائب للفصول |
4. أسماء الوسوم الضمنية: ملخص القواعد الكاملة
قدم الدرسان 03 و06 بالفعل مفهوم أسماء الوسوم الضمنية. ينظم هذا الدرس مجموعة القواعد بالكامل ويملأ جميع السيناريوهات الشائعة.
(1) مرجع سريع للوسوم الضمنية
| سياق الوالد | الوسم الضمني | مثال |
|---|---|---|
| بدون والد (HTML) | div |
.item ← <div class="item"> |
داخل ul، ol |
li |
ul>.item ← <ul><li class="item"> |
داخل table، tbody، thead، tfoot |
tr |
table>.row ← <table><tr class="row"> |
داخل thead، tbody، tfoot |
th / td (يعتمد على السياق) |
table>thead>.cell ← <th class="cell"> |
داخل tr |
td |
table>tr>.cell ← <td class="cell"> |
داخل select، optgroup |
option |
select>.opt ← <option class="opt"> |
داخل dl |
dt / dd (يعتمد على الموضع) |
dl>.term ← <dt class="term"> |
| بدون والد (سياق CSS) | استدلال ذكي (حسب اسم الخاصية) | fz16 ← font-size: 16px |
نقطة أساسية: الجدول أعلاه هو المجموعة الكاملة لقواعد التضمين الرسمية لـ Emmet. خارج هذه القواعد الصريحة، حذف اسم الوسم في أي سياق والد آخر يفترض دائمًا
div. هذه هي القاعدة الثنائية "التضمين السياقي مقابل div الافتراضي".
(2) مقارنة سيناريوهات قواعد التضمين الشائعة
| الاختصار | التوسيع | ملاحظات |
|---|---|---|
.item (مجرد) |
<div class="item"> |
بدون والد ← div |
ul>.item |
<ul><li class="item"></li></ul> |
سياق ul ← li |
table>.row |
<table><tr class="row"></tr></table> |
سياق table ← tr |
table>tr>.cell |
<table><tr><td class="cell"></td></tr></table> |
سياق tr ← td |
select>.opt |
<select><option class="opt"></option></select> |
سياق select ← option |
dl>.term+.def |
<dl><dt class="term"></dt><dd class="def"></dd></dl> |
سياق dl ← dt / dd |
div>.item |
<div><div class="item"></div></div> |
div ليس والد قائمة، لا يزال يفترض div |
(3) مجموعات التضمين + class + id
يمكن دمج الوسوم الضمنية بحرية مع .class و #id و [attr]:
| الاختصار | التوسيع | ملاحظات |
|---|---|---|
ul>.item*3 |
3 عناصر <li class="item"> |
تضمين + class + ضرب |
table>#row1>.cell |
<table><tr id="row1"><td class="cell"></td></tr></table> |
تضمين + id + class عبر المستويات |
select>#pick>.opt*3 |
<select id="pick"><option class="opt"></option>...</select> |
تضمين + id + عبر المستويات |
dl>.term*3 |
3 عناصر <dt class="term"> |
سياق dl + class |
ملاحظة: الوسوم الضمنية لا تعمل إلا عند حذف اسم الوسم في الاختصار. إذا كتبت اسم وسم بشكل صريح (مثال:
div.item)، لا تنطبق قاعدة التضمين — ستكون دائمًا<div class="item">. تم التأكيد على هذا في الأسئلة الشائعة للدرس 03.
5. أمثلة عملية
تغطي الأمثلة الخمسة التالي�� السيناريوهات الأساسية لـ Lorem والوسوم الضمنية — من Lorem الأساسي إلى عدد كلمات محدد، ومن متعدد الفقرات إلى التضمين + class.
▶ مثال: Lorem أساسي p>lorem (الصعوبة ⭐)
فقرة واحدة، 30 كلمة من Lorem Ipsum — النص النائب الأكثر استخدامًا من قبل المصممين.
الاختصار:
p>lorem
التوسيع:
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eligendi non quis exercitationem culpa nesciunt nihil aut nostrum explicabo reprehenderit optio amet ab temporibus asperiores quasi cupiditate. Voluptatum ducimus voluptates voluptas?</p>
الناتج:
TEXT 📖 للعرض فقطالتحليل: lorem هي الكلمة المفتاحية لمولد النصوص النائبة في Emmet. الناتج الافتراضي هو 30 كلمة (مفصولة بمسافات) من Lorem Ipsum. p>lorem يضع lorem داخل p، منتجًا فقرة نائبة واحدة بـ 30 كلمة. قد يختلف عدد الكلمات الفعلي قليلاً حسب تنفيذ المحرر (VSCode/WebStorm يستخدمان نفس الفقرة الأساسية المكونة من 30 كلمة). للأطوال الأخرى، استخدم صيغة loremN (مثال: lorem5 = 5 كلمات).
▶ مثال: عدد كلمات محدد p>lorem5 (الصعوبة ⭐)
5 كلمات من Lorem — مناسبة للنصوص النائبة للوصف القصير (عناوين فرعية للبطاقات، تلميحات الأزرار).
الاختصار:
p>lorem5
التوسيع:
<p>Lorem ipsum dolor sit amet.</p>
الناتج:
TEXT 📖 للعرض فقطالتحليل: الرقم 5 في lorem5 هو معامل عدد الكلمات. يخرج Emmet بالضبط 5 كلمات من Lorem (وهي "Lorem ipsum dolor sit amet." — أول 5 كلمات من Lorem Ipsum). هذا الطول يناسب سيناريوهات الوصف القصير: عناوين فرعية للبطاقات، تلميحات الأزرار، الشعارات. لنص أطول ولكن أقل من 30 كلمة، استخدم lorem10، lorem20، إلخ. لا يوجد حد أعلى صارم لعدد الكلمات (lorem1000 سيتوسع أيضًا)، لكن توليد كميات هائلة من النص سيبطئ استجابة المحرر.
▶ مثال: Lorem متعدد الفقرات (p>lorem)*3 (الصعوبة ⭐⭐)
ثلاثة عناصر <p>، كل منها بـ 30 كلمة مستقلة من Lorem — نص نائب لجسم مقال مدونة.
الاختصار:
(p>lorem)*3
التوسيع (مقتطف):
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Qui dicta minus molestiae vel beatae natus eveniet ratione temporibus aperiam harum alias officiis assumenda officia quibusdam deleniti eos cupiditate dolore doloribus!</p>
<p>Ad dolore dignissimos asperiores dicta facere optio quod commodi nam tempore recusandae. Rerum sed nulla eum vero expedita ex delectus voluptates rem at neque quos facere sequi unde optio aliquam!</p>
<p>Tenetur quod quidem in voluptatem corporis dolorum dicta sit pariatur porro quaerat autem ipsam odit quam beatae tempora quibusdam illum! Modi velit odio nam nulla unde amet odit pariatur at!</p>
الناتج:
TEXT 📖 للعرض فقطالتحليل: (p>lorem)*3 يكرر قالب p>lorem ثلاث مرات، كل مرة يولد نص Lorem مستقل بـ 30 كلمة (مولد lorem في Emmet ليس نصًا ثابتًا). الفقرات الثلاث تستمد كل منها من فقرات مختلفة في مكتبة Lorem Ipsum، لذا المحتوى غير متكرر. هذا مكافئ لـ p*3>lorem — تحليل Emmet لـ p*3>lorem يكرر أيضًا p ثلاث مرات، ويدرج lorem مستقل في كل مرة. الأقواس تجعل الدلالة أوضح: كرر قالب الفقرة بالكامل 3 مرات داخل المجموعة.
▶ مثال: ملخص التضمين + class ul>.item*3 + table>(.row>.cell*3)*2 + select>option*3 (الصعوبة ⭐⭐)
ثلاثة سيناريوهات للوسوم الضمنية جنبًا إلى جنب — عرض قواعد التضمين لوالدي ul و table و select في مجموعة أمثلة واحدة.
الاختصار (3 توسيعات مستقلة):
ul>.item*3
التوسيع:
<ul>
<li class="item"></li>
<li class="item"></li>
<li class="item"></li>
</ul>
الاختصار:
table>(.row>.cell*3)*2
التوسيع:
<table>
<tr class="row">
<td class="cell"></td>
<td class="cell"></td>
<td class="cell"></td>
</tr>
<tr class="row">
<td class="cell"></td>
<td class="cell"></td>
<td class="cell"></td>
</tr>
</table>
الاختصار:
select>option*3
التوسيع:
<select name="" id="">
<option value=""></option>
<option value=""></option>
<option value=""></option>
</select>
الناتج:
TEXT 📖 للعرض فقطالتحليل: ثلاثة اختصارات تعرض ساحات القتال الرئيسية الثلاث للوسوم الضمنية. ul>.item*3: ul هو والد قائمة؛ حذف اسم الوسم يستدل تلقائيًا على li، و3 عناصر li تشترك في class="item". table>(.row>.cell*3)*2: في سياق table، .row ضمنيًا tr، و .cell ضمنيًا td — جدول 2 صف × 3 أعمدة بدون كتابة أي tr/td صراحة. select>option*3: في سياق select، حذف اسم ا��وسم يستدل تلقائيًا على option. ملاحظة: select يفترض name="" و id="" (إعدادات Emnet المسبقة)، و option يفترض value="" — هذه هي السمات الدنيا لوسوم HTML5.
▶ مثال: نموذج + تضمين form#login>(input[type=text name=user]+input[type=password name=pwd]+button{Login}) (الصعوبة ⭐⭐)
نموذج تسجيل دخول مكتوب في سطر واحد — مزيج من التضمين + class + id + السمات + محتوى النص.
الاختصار:
form#login>(input[type=text name=user]+input[type=password name=pwd]+button{Login})
التوسيع:
<form id="login" action="">
<input type="text" name="user">
<input type="password" name="pwd">
<button>Login</button>
</form>
الناتج:
TEXT 📖 للعرض فقطالتحليل: يجمع هذا المثال جميع عوامل المراحل 1–3 — # (id)، > (تداخل)، + (شقيق)، . (class)، [attr] (سمات)، {} (محتوى نصي)، () (تجميع). form#login يضيف id="login" إلى form (form يفترض action="")؛ داخل الأقواس 3 عناصر شقيقة: input[type=text name=user]، input[type=password name=pwd]، button{Login}. button يفترض بدون سمة type (أزرار HTML5 تفترض سلوك submit، رغم أن type الصريح أوضح). هذا هو المثال الشامل القياسي للمرحلة 3، موضحًا جميع قدرات Emmet في سيناريوهات النماذج.
6. مثال كامل: صفحة مقال مدونة + Lorem + تضمين + ترقيم
دمج Lorem، الوسوم الضمنية، {text}، وترقيم $ — هيكل "صفحة مقال مدونة" كامل مكتوب في سطر واحد.
▶ مثال: هيكل صفحة مقال مدونة (الصعوبة ⭐⭐)
الاختصار:
section.blog>(header>h1{Blog Title: Emmet Boosts Speed 5x}+p.meta{By Alice · 2026-07-30})+(article>(p>lorem)*3)+(aside>ul.tag-cloud>(li.tag*5>a{#tag-$}))
التوسيع:
<section class="blog">
<header>
<h1>Blog Title: Emmet Boosts Speed 5x</h1>
<p class="meta">By Alice · 2026-07-30</p>
</header>
<article>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Qui dicta minus molestiae vel beatae natus eveniet ratione temporibus aperiam harum alias officiis assumenda officia quibusdam deleniti eos cupiditate dolore doloribus!</p>
<p>Ad dolore dignissimos asperiores dicta facere optio quod commodi nam tempore recusandae. Rerum sed nulla eum vero expedita ex delectus voluptates rem at neque quos facere sequi unde optio aliquam!</p>
<p>Tenetur quod quidem in voluptatem corporis dolorum dicta sit pariatur porro quaerat autem ipsam odit quam beatae tempora quibusdam illum! Modi velit odio nam nulla unde amet odit pariatur at!</p>
</article>
<aside>
<ul class="tag-cloud">
<li class="tag"><a href="" id="tag-1">#tag-1</a></li>
<li class="tag"><a href="" id="tag-2">#tag-2</a></li>
<li class="tag"><a href="" id="tag-3">#tag-3</a></li>
<li class="tag"><a href="" id="tag-4">#tag-4</a></li>
<li class="tag"><a href="" id="tag-5">#tag-5</a></li>
</ul>
</aside>
</section>
الناتج:
TEXT 📖 للعرض فقطالتحليل: هذا المثال هو المثال الشامل الكامل للمرحلة 3 — يستدعي في آن واحد مولد Lorem، الوسوم الضمنية (ul←li)، المحتوى النصي {Blog Title: Emmet Boosts Speed 5x}، والترقيم $ (tag-1 إلى tag-5). الأقواس متداخلة 3 مستويات: الخارجي (header>...) + (article>...) + (aside>...) يجعل الكتل الثلاث شقيقة داخل section؛ الداخلي (p>lorem)*3 يعطي article ثلاث فقرات Lorem مستقلة؛ الأعمق (li.tag*5>a{#tag-$}) يعطي كل li عنصر a يحمل وسما id ونصًا كلاهما يحمل ترقيم $. صفحة مقال المدونة بالكامل تنتقل من 30+ سطر HTML مكتوب يدويًا إلى سطر Emmet واحد.
❓ أسئلة شائعة
lorem و lipsum؟lorem و lipsum ككلمات مفتاحية لنقطة دخول مولد Lorem Ipsum، منتجين نفس النص النائب. هذه بقايا تاريخية — lipsum هو اختصار موقع lipsum.com، بينما lorem هو الاسم القياسي في الصناعة. الاثنان قابلان للتبديل، بدون اختلاف عبر المحررات أو الإصدارات. يوصى باستخدام lorem (أقصر وأكثر عالمية).lorem5 حقًا 5 كلمات بالضبط؟ أم هو عدد أحرف؟lorem5 يتوسع إلى 5 كلمات إنجليزية: Lorem ipsum dolor sit amet. إذا تضمنت الكلمات علامات ترقيم (مثال: Lorem, ipsum.)، يعد Emmet بالرموز المفصولة بمسافات، ولا يزال 5 كلمات. وحدة عدد الكلمات لا تعتمد على طول الأحرف، لذا فرق الطول البصري بين lorem5 و lorem50 كبير — الأول حوالي 28 حرفًا لـ 5 كلمات، بينما الثاني حوالي 280 حرفًا لـ 50 كلمة.fz16 يستدل ذكيًا على font-size: 16px، و m10 على margin: 10px. "التضمين" في CSS ليس "حذف أسماء الوسوم" بل "حذف أسماء الخصائص، استدلالها من القيم". هذه هي الآلية الأساسية لـ Emmet في اختصارات CSS وستغطى بشكل منهجي في المرحلة 4 (أساسيات اختصارات CSS)..item داخل nav يصبح ضمنيًا a؟snippets.json. ملف snippets.json الخاص بـ Emmet هو ملف تكوين امتداد بصيغة JSON يتيح للمستخدمين تجاوز توسيعات الوسوم الافتراضية (مثال: جعل select يفترض multiple) وتعريف اختصارات جديدة (مثال: vue ← <div data-vue>). ومع ذلك، يتطلب توسيع قواعد الوسوم الضمنية تكوينًا على مستوى المحرر (مثال: إعدادات Emmet في VSCode)، ويختلف مسار التنفيذ حسب المحرر. هذا الدرس يقدم المفهوم فقط؛ المرحلة 5 (إجراءات ال��حرر) ستغطي snippets.json بإيجاز.form#login أعلاه يتوسع فقط بـ action="" وبدون method="". هل تم حذفه عن طريق الخطأ؟<form action="" method=""></form> (كلا السمتين الفارغتين مضمنتان). لكن المحررات الرئيسية (VSCode، WebStorm) لديها طبقات إضافة Emmet تحذف method="" الفارغ في الناتج — لأن method فارغ في HTML5 مكافئ لـ "get" (الافتراضي)، مما يجعله زائدًا عن الحاجة. لذا ما تراه هو النتيجة المعروضة الفعلية، وليس ناتج مواصفة Emmet الخام. إذا شغلت نفس الاختصار في بيئة سطر أوامر نقية (مثال: emmet-cli)، ستحصل على النسخة الكاملة مع method="". تذكر هذا الفرق — يساعدك في استكشاف "لماذا يتوسع نفس الاختصار بشكل مختلف في محررات مختلفة".📖 ملخص
loremالافتراضي 30 كلمة؛loremNيحدد N كلمة (مثال:p>lorem5= 5 كلمات Lorem)loremمولد:(p>lorem)*3يتوسع إلى 3 فقرات مستقلة، ويمكن دمجه مع{text}+$في سطر واحد لصفحة كاملة- الوسوم الضمنية تتبدل تلقائيًا حسب العنصر الوالد:
ul←li،table←tr،tr←td،select←option،dl←dt/dd(الوالدين خارج القائمة البيضاء يفترضون div) - قواعد التضمين لا تعمل إلا عند حذف اسم الوسم؛ كتابة اسم الوسم صراحة لها الأولوية دائمًا
- التضمين + class/id:
ul>.item←<li class="item">،table>#row1>.cell←<tr id="row1"><td class="cell">
📝 تمارين
- أساسي (الصعوبة ⭐): اكتب اختصارات Emmet في سطر واحد تتوسع إلى: (أ) فقرة
p>lorem(30 كلمة Lorem)؛ (ب) فقرة 8 كلماتp>lorem8؛ (ج) قائمة منسدلةselect>option*5(5 خيارات، للتحقق من سلوك التضمين). - متوسط (الصعوبة ⭐⭐): اكتب "شبكة بطاقات" — عنصر
sectionيحتوي 6 بطاقات، كل منها بعنوان ووصف 3 كلمات وزر. المتطلبات: (أ) الوصف مولّد بـlorem3؛ (ب) العنوان يستخدم محتوى نصي{Card $}+ ترقيم؛ (ج) الزر يستخدم وسومًا ضمنية +{Details}. اكتبها كلها في سطر Emmet واحد، واشرح لماذا لا يتداخلlorem3و{Card $}مع بعضهما. - متقدم (الصعوبة ⭐⭐⭐): اكتب هيكل "صفحة رئيسية لمدونة" كامل يحتوي: (أ) عنصر
headerبشعار + 3 روابط تنقل (باستخدامnav>ul>li*3>a{Nav $})؛ (ب) عنصرmainبـ 3 بطاقات مقال، كل منها بعنوان وكاتب و3 فقرات Lorem؛ (ج) عنصرasideبسحابة وسوم (5 وسوم، باستخدامul.tag-cloud>li.tag*5>a{#tag-$})؛ (د) عنصرfooterبحقوق النشر{© 2026 web-tutorial.com}. اكتبها كلها في سطر Emmet واحد (باستخدام+لربط الكتل، أو الأقواس للتجميع)، وتحقق من التوسيع، وقارن فرق الوقت بين كتابة 50+ سطر HTML يدويًا مقابل سطر Emmet واحد.