# مشروع التيراريوم الجزء الأول: مقدمة إلى HTML ```mermaid journey title Your HTML Learning Journey section Foundation Create HTML file: 3: Student Add DOCTYPE: 4: Student Structure document: 5: Student section Content Add metadata: 4: Student Include images: 5: Student Organize layout: 5: Student section Semantics Use proper tags: 4: Student Enhance accessibility: 5: Student Build terrarium: 5: Student ``` ![مقدمة إلى HTML](../../../../translated_images/webdev101-html.4389c2067af68e98280c1bde52b6c6269f399eaae3659b7c846018d8a7b0bbd9.ar.png) > رسم توضيحي بواسطة [Tomomi Imura](https://twitter.com/girlie_mac) HTML، أو لغة ترميز النص التشعبي، هي الأساس لكل موقع ويب قمت بزيارته. فكر في HTML كهيكل عظمي يمنح الصفحات الإلكترونية بنيتها – فهو يحدد مكان المحتوى، وكيف يتم تنظيمه، وما الذي يمثله كل جزء. بينما ستقوم CSS لاحقًا "بتزيين" HTML بالألوان والتصميمات، وستجعل JavaScript الصفحات تفاعلية، فإن HTML يوفر الهيكل الأساسي الذي يجعل كل شيء ممكنًا. في هذا الدرس، ستقوم بإنشاء هيكل HTML لواجهة تيراريوم افتراضية. هذا المشروع العملي سيعلمك مفاهيم HTML الأساسية أثناء بناء شيء جذاب بصريًا. ستتعلم كيفية تنظيم المحتوى باستخدام العناصر الدلالية، والعمل مع الصور، وإنشاء الأساس لتطبيق ويب تفاعلي. بنهاية هذا الدرس، سيكون لديك صفحة HTML تعمل وتعرض صور النباتات في أعمدة منظمة، جاهزة للتصميم في الدرس التالي. لا تقلق إذا بدا الأمر بسيطًا في البداية – هذا بالضبط ما يجب أن يكون عليه HTML قبل أن تضيف CSS اللمسات الجمالية. ```mermaid mindmap root((HTML Fundamentals)) Structure DOCTYPE Declaration HTML Element Head Section Body Content Elements Tags & Attributes Self-closing Tags Nested Elements Block vs Inline Content Text Elements Images Containers (div) Lists Semantics Meaningful Tags Accessibility Screen Readers SEO Benefits Best Practices Proper Nesting Valid Markup Descriptive Alt Text Organized Structure ``` ## اختبار ما قبل المحاضرة [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/web/quiz/15) > 📺 **شاهد وتعلم**: تحقق من هذا الفيديو المفيد > > [![فيديو أساسيات HTML](https://img.youtube.com/vi/1TvxJKBzhyQ/0.jpg)](https://www.youtube.com/watch?v=1TvxJKBzhyQ) ## إعداد مشروعك قبل أن نبدأ في كتابة كود HTML، دعنا نُعد مساحة عمل مناسبة لمشروع التيراريوم الخاص بك. إنشاء هيكل ملفات منظم منذ البداية هو عادة مهمة ستفيدك طوال رحلتك في تطوير الويب. ### المهمة: إنشاء هيكل مشروعك ستقوم بإنشاء مجلد مخصص لمشروع التيراريوم الخاص بك وإضافة أول ملف HTML. إليك طريقتان يمكنك استخدامهما: **الخيار الأول: باستخدام Visual Studio Code** 1. افتح Visual Studio Code 2. انقر على "File" → "Open Folder" أو استخدم `Ctrl+K, Ctrl+O` (Windows/Linux) أو `Cmd+K, Cmd+O` (Mac) 3. قم بإنشاء مجلد جديد باسم `terrarium` واختره 4. في لوحة Explorer، انقر على أيقونة "New File" 5. قم بتسمية ملفك `index.html` ![مستكشف VS Code يظهر إنشاء ملف جديد](../../../../translated_images/vs-code-index.e2986cf919471eb984a0afef231380c8b132b000635105f2397bd2754d1b689c.ar.png) **الخيار الثاني: باستخدام أوامر الطرفية** ```bash mkdir terrarium cd terrarium touch index.html code index.html ``` **ما الذي تقوم به هذه الأوامر:** - **إنشاء** مجلد جديد باسم `terrarium` لمشروعك - **التنقل** داخل مجلد التيراريوم - **إنشاء** ملف فارغ باسم `index.html` - **فتح** الملف في Visual Studio Code للتعديل > 💡 **نصيحة احترافية**: اسم الملف `index.html` له أهمية خاصة في تطوير الويب. عندما يزور شخص ما موقعًا إلكترونيًا، تبحث المتصفحات تلقائيًا عن `index.html` كصفحة افتراضية للعرض. هذا يعني أن عنوان URL مثل `https://mysite.com/projects/` سيعرض تلقائيًا ملف `index.html` من مجلد `projects` دون الحاجة إلى تحديد اسم الملف في عنوان URL. ## فهم هيكل مستند HTML يتبع كل مستند HTML هيكلًا محددًا تحتاجه المتصفحات لفهمه وعرضه بشكل صحيح. فكر في هذا الهيكل كرسالة رسمية – تحتوي على عناصر مطلوبة بترتيب معين تساعد المتصفح (المستلم في هذه الحالة) على معالجة المحتوى بشكل صحيح. ```mermaid flowchart TD A[""] --> B[""] B --> C[""] C --> D[""] C --> E["<meta charset>"] C --> F["<meta viewport>"] B --> G["<body>"] G --> H["<h1> Heading"] G --> I["<div> Containers"] G --> J["<img> Images"] style A fill:#e1f5fe style B fill:#f3e5f5 style C fill:#fff3e0 style G fill:#e8f5e8 ``` لنبدأ بإضافة الأساس الضروري الذي يحتاجه كل مستند HTML. ### إعلان DOCTYPE والعنصر الجذر أول سطرين في أي ملف HTML يعملان كـ "مقدمة" للمستند للمتصفح: ```html <!DOCTYPE html> <html></html> ``` **فهم ما يفعله هذا الكود:** - **يعلن** نوع المستند كـ HTML5 باستخدام `<!DOCTYPE html>` - **ينشئ** العنصر الجذر `<html>` الذي سيحتوي على كل محتوى الصفحة - **يحدد** معايير الويب الحديثة لعرض المتصفح بشكل صحيح - **يضمن** عرضًا متسقًا عبر المتصفحات والأجهزة المختلفة > 💡 **نصيحة VS Code**: قم بالمرور فوق أي علامة HTML في VS Code لرؤية معلومات مفيدة من MDN Web Docs، بما في ذلك أمثلة الاستخدام وتفاصيل توافق المتصفح. > 📚 **تعلم المزيد**: إعلان DOCTYPE يمنع المتصفحات من الدخول في "وضع quirks"، الذي كان يُستخدم لدعم مواقع الويب القديمة جدًا. يستخدم تطوير الويب الحديث الإعلان البسيط `<!DOCTYPE html>` لضمان [عرض متوافق مع المعايير](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode). ### 🔄 **توقف تربوي** **توقف وتأمل**: قبل المتابعة، تأكد من أنك تفهم: - ✅ لماذا يحتاج كل مستند HTML إلى إعلان DOCTYPE - ✅ ما الذي يحتويه العنصر الجذر `<html>` - ✅ كيف يساعد هذا الهيكل المتصفحات على عرض الصفحات بشكل صحيح **اختبار ذاتي سريع**: هل يمكنك شرح ما يعنيه "عرض متوافق مع المعايير" بكلماتك الخاصة؟ ## إضافة بيانات وصفية أساسية للمستند قسم `<head>` في مستند HTML يحتوي على معلومات مهمة تحتاجها المتصفحات ومحركات البحث، ولكن لا يراها الزوار مباشرة على الصفحة. فكر فيه كـ "معلومات خلف الكواليس" التي تساعد صفحتك على العمل بشكل صحيح والظهور بشكل صحيح عبر الأجهزة والمنصات المختلفة. تخبر هذه البيانات الوصفية المتصفحات كيفية عرض صفحتك، وما هي ترميز الأحرف التي يجب استخدامها، وكيفية التعامل مع أحجام الشاشات المختلفة – كل ذلك ضروري لإنشاء صفحات ويب احترافية وسهلة الوصول. ### المهمة: إضافة رأس المستند أضف قسم `<head>` هذا بين علامات الفتح والإغلاق `<html>`: ```html <head> <title>Welcome to my Virtual Terrarium ``` **تفصيل ما يحققه كل عنصر:** - **يحدد** عنوان الصفحة الذي يظهر في علامات تبويب المتصفح ونتائج البحث - **يحدد** ترميز الأحرف UTF-8 لعرض النص بشكل صحيح عالميًا - **يضمن** التوافق مع الإصدارات الحديثة من Internet Explorer - **يُعد** التصميم المتجاوب من خلال ضبط نافذة العرض لتتناسب مع عرض الجهاز - **يتحكم** في مستوى التكبير الأولي لعرض المحتوى بالحجم الطبيعي > 🤔 **فكر في هذا**: ماذا سيحدث إذا قمت بتعيين علامة meta للنافذة مثل هذه: ``؟ سيؤدي ذلك إلى إجبار الصفحة على أن تكون دائمًا بعرض 600 بكسل، مما يفسد التصميم المتجاوب! تعرف على المزيد حول [تكوين النافذة بشكل صحيح](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag). ## بناء جسم المستند عنصر `` يحتوي على كل المحتوى المرئي لصفحتك – كل ما سيراه المستخدمون ويتفاعلون معه. بينما قدم قسم `` تعليمات للمتصفح، يحتوي قسم `` على المحتوى الفعلي: النصوص، الصور، الأزرار، والعناصر الأخرى التي تشكل واجهة المستخدم الخاصة بك. دعنا نضيف هيكل الجسم ونفهم كيف تعمل علامات HTML معًا لإنشاء محتوى ذو معنى. ### فهم هيكل علامات HTML تستخدم HTML علامات مزدوجة لتعريف العناصر. تحتوي معظم العلامات على علامة فتح مثل `

` وعلامة إغلاق مثل `

`، مع محتوى بينهما: `

مرحبًا، العالم!

`. هذا ينشئ عنصر فقرة يحتوي على النص "مرحبًا، العالم!". ### المهمة: إضافة عنصر الجسم قم بتحديث ملف HTML الخاص بك ليشمل عنصر ``: ```html Welcome to my Virtual Terrarium ``` **ما الذي يوفره هذا الهيكل الكامل:** - **يُنشئ** إطار عمل مستند HTML5 الأساسي - **يتضمن** بيانات وصفية أساسية لعرض المتصفح بشكل صحيح - **يُنشئ** جسمًا فارغًا جاهزًا لمحتواك المرئي - **يتبع** أفضل الممارسات الحديثة لتطوير الويب الآن أنت جاهز لإضافة العناصر المرئية للتيراريوم الخاص بك. سنستخدم عناصر `
` كحاويات لتنظيم أقسام المحتوى المختلفة، وعناصر `` لعرض صور النباتات. ### العمل مع الصور وحاويات التخطيط الصور لها خصوصية في HTML لأنها تستخدم علامات "مغلقة ذاتيًا". على عكس العناصر مثل `

` التي تحيط بالمحتوى، تحتوي علامة `` على كل المعلومات التي تحتاجها داخل العلامة نفسها باستخدام سمات مثل `src` لمسار ملف الصورة و`alt` لإمكانية الوصول. قبل إضافة الصور إلى HTML الخاص بك، ستحتاج إلى تنظيم ملفات مشروعك بشكل صحيح عن طريق إنشاء مجلد للصور وإضافة الرسومات النباتية. **أولاً، قم بإعداد الصور:** 1. قم بإنشاء مجلد باسم `images` داخل مجلد مشروع التيراريوم الخاص بك 2. قم بتنزيل صور النباتات من [مجلد الحل](../../../../3-terrarium/solution/images) (14 صورة نباتية إجمالاً) 3. انسخ جميع صور النباتات إلى مجلد `images` الجديد الخاص بك ### المهمة: إنشاء تخطيط عرض النباتات الآن أضف صور النباتات منظمة في عمودين بين علامات ``: ```html
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
plant
``` **خطوة بخطوة، ما الذي يحدث في هذا الكود:** - **يُنشئ** حاوية الصفحة الرئيسية بـ `id="page"` لاحتواء كل المحتوى - **يُنشئ** حاويتين للعمودين: `left-container` و`right-container` - **ينظم** 7 نباتات في العمود الأيسر و7 نباتات في العمود الأيمن - **يُغلف** كل صورة نباتية في div باسم `plant-holder` لتحديد موضعها الفردي - **يُطبق** أسماء فئات متسقة لتصميم CSS في الدرس التالي - **يُعين** معرفات فريدة لكل صورة نباتية لتفاعل JavaScript لاحقًا - **يتضمن** مسارات ملفات صحيحة تشير إلى مجلد الصور > 🤔 **فكر في هذا**: لاحظ أن جميع الصور حاليًا تحتوي على نفس النص البديل "plant". هذا ليس مثاليًا لإمكانية الوصول. سيستمع مستخدمو قارئات الشاشة إلى "plant" مكررًا 14 مرة دون معرفة أي نبات يظهر كل صورة. هل يمكنك التفكير في نص بديل أفضل وأكثر وصفًا لكل صورة؟ > 📝 **أنواع عناصر HTML**: عناصر `
` هي "مستوى الكتلة" وتشغل العرض الكامل، بينما عناصر `` هي "مستوى السطر" وتشغل العرض اللازم فقط. ماذا تعتقد سيحدث إذا قمت بتغيير جميع علامات `
` إلى علامات ``؟ ### 🔄 **توقف تربوي** **فهم الهيكل**: خذ لحظة لمراجعة هيكل HTML الخاص بك: - ✅ هل يمكنك تحديد الحاويات الرئيسية في تخطيطك؟ - ✅ هل تفهم لماذا تحتوي كل صورة على معرف فريد؟ - ✅ كيف تصف الغرض من divs `plant-holder`؟ **فحص بصري**: افتح ملف HTML الخاص بك في المتصفح. يجب أن ترى: - قائمة أساسية لصور النباتات - صور منظمة في عمودين - تخطيط بسيط وغير مصمم **تذكر**: هذا المظهر البسيط هو بالضبط ما يجب أن يبدو عليه HTML قبل تصميم CSS! مع إضافة هذا الترميز، ستظهر النباتات على الشاشة، على الرغم من أنها لن تبدو مصقولة بعد – هذا ما ستفعله CSS في الدرس التالي! في الوقت الحالي، لديك أساس HTML قوي ينظم المحتوى بشكل صحيح ويتبع أفضل ممارسات إمكانية الوصول. ## استخدام HTML الدلالي لإمكانية الوصول HTML الدلالي يعني اختيار عناصر HTML بناءً على معناها وغرضها، وليس فقط مظهرها. عندما تستخدم الترميز الدلالي، فإنك توصل هيكل ومعنى المحتوى الخاص بك إلى المتصفحات ومحركات البحث والتقنيات المساعدة مثل قارئات الشاشة. ```mermaid flowchart TD A[Need to add content?] --> B{What type?} B -->|Main heading| C["

"] B -->|Subheading| D["

,

, etc."] B -->|Paragraph| E["

"] B -->|List| F["

    ,
      "] B -->|Navigation| G["