# پروژه تراریوم بخش ۱: معرفی HTML

> طراحی توسط [Tomomi Imura](https://twitter.com/girlie_mac)
## آزمون پیش از درس
[آزمون پیش از درس](https://ff-quizzes.netlify.app/web/quiz/15)
> مشاهده ویدیو
>
> [](https://www.youtube.com/watch?v=1TvxJKBzhyQ)
### معرفی
HTML یا زبان نشانهگذاری فرامتن، «اسکلت» وب است. اگر CSS ظاهر HTML شما را زیبا کند و JavaScript به آن جان ببخشد، HTML بدنه برنامه وب شماست. حتی نحو HTML این ایده را منعکس میکند، زیرا شامل تگهای "head"، "body" و "footer" است.
در این درس، از HTML برای طراحی «اسکلت» رابط تراریوم مجازی خود استفاده خواهیم کرد. این رابط شامل یک عنوان و سه ستون خواهد بود: یک ستون سمت راست و یک ستون سمت چپ که گیاهان قابل کشیدن در آن قرار دارند، و یک ناحیه مرکزی که تراریوم شیشهای واقعی خواهد بود. تا پایان این درس، میتوانید گیاهان را در ستونها ببینید، اما رابط کمی عجیب به نظر خواهد رسید؛ نگران نباشید، در بخش بعدی با اضافه کردن سبکهای CSS به رابط، ظاهر آن را بهتر خواهید کرد.
### وظیفه
در کامپیوتر خود، یک پوشه به نام 'terrarium' ایجاد کنید و داخل آن یک فایل به نام 'index.html' بسازید. میتوانید این کار را در Visual Studio Code انجام دهید. پس از ایجاد پوشه تراریوم، یک پنجره جدید در VS Code باز کنید، روی 'open folder' کلیک کنید و به پوشه جدید خود بروید. سپس در پنل Explorer روی دکمه کوچک 'file' کلیک کنید و فایل جدید را ایجاد کنید:

یا
از این دستورات در git bash استفاده کنید:
* `mkdir terrarium`
* `cd terrarium`
* `touch index.html`
* `code index.html` یا `nano index.html`
> فایلهای index.html به مرورگر نشان میدهند که این فایل پیشفرض در یک پوشه است؛ URLهایی مانند `https://anysite.com/test` ممکن است با استفاده از ساختار پوشهای شامل یک پوشه به نام `test` و فایل `index.html` داخل آن ساخته شوند؛ نیازی نیست که `index.html` در URL نمایش داده شود.
---
## DocType و تگهای html
اولین خط یک فایل HTML، DocType آن است. کمی عجیب است که باید این خط را در بالای فایل قرار دهید، اما این خط به مرورگرهای قدیمی میگوید که صفحه باید در حالت استاندارد و مطابق با مشخصات فعلی HTML رندر شود.
> نکته: در VS Code، میتوانید روی یک تگ حرکت کنید و اطلاعاتی درباره استفاده از آن را از راهنمای مرجع MDN دریافت کنید.
خط دوم باید تگ باز `` باشد که در حال حاضر با تگ بسته آن `` دنبال میشود. این تگها عناصر ریشه رابط شما هستند.
### وظیفه
این خطوط را در بالای فایل `index.html` خود اضافه کنید:
```HTML
```
✅ حالتهای مختلفی وجود دارد که میتوان با تنظیم DocType و یک رشته پرسوجو تعیین کرد: [حالت Quirks و حالت استاندارد](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode). این حالتها برای پشتیبانی از مرورگرهای بسیار قدیمی که امروزه معمولاً استفاده نمیشوند (مانند Netscape Navigator 4 و Internet Explorer 5) طراحی شدهاند. شما میتوانید به اعلامیه استاندارد DocType پایبند باشید.
---
## 'head' سند
ناحیه 'head' سند HTML شامل اطلاعات مهمی درباره صفحه وب شماست که به عنوان [metadata](https://developer.mozilla.org/docs/Web/HTML/Element/meta) شناخته میشود. در مورد ما، این اطلاعات شامل چهار مورد زیر است:
- عنوان صفحه
- metadata صفحه شامل:
- 'مجموعه کاراکتر' که نشان میدهد چه نوع رمزگذاری کاراکتر در صفحه استفاده شده است
- اطلاعات مرورگر، از جمله `x-ua-compatible` که نشان میدهد مرورگر IE=edge پشتیبانی میشود
- اطلاعاتی درباره نحوه رفتار viewport هنگام بارگذاری. تنظیم viewport با مقیاس اولیه ۱، سطح زوم را هنگام بارگذاری اولیه صفحه کنترل میکند.
### وظیفه
یک بلوک 'head' به سند خود اضافه کنید، بین تگهای باز و بسته ``.
```html
Welcome to my Virtual Terrarium
```
✅ اگر یک تگ meta viewport مانند این تنظیم کنید: `` چه اتفاقی میافتد؟ درباره [viewport](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag) بیشتر بخوانید.
---
## 'body' سند
### تگهای HTML
در HTML، شما تگهایی به فایل .html خود اضافه میکنید تا عناصر یک صفحه وب را ایجاد کنید. هر تگ معمولاً دارای یک تگ باز و بسته است، مانند این: `
hello
` برای نشان دادن یک پاراگراف. رابط خود را با اضافه کردن مجموعهای از تگهای `` داخل جفت تگهای `` ایجاد کنید؛ اکنون نشانهگذاری شما به این شکل است:
### وظیفه
```html
Welcome to my Virtual Terrarium
```
اکنون میتوانید شروع به ساختن صفحه خود کنید. معمولاً از تگهای `
` برای ایجاد عناصر جداگانه در یک صفحه استفاده میشود. ما مجموعهای از عناصر `
` ایجاد خواهیم کرد که تصاویر را در خود جای میدهند.
### تصاویر
یک تگ HTML که نیازی به تگ بسته ندارد، تگ `` است، زیرا دارای یک عنصر `src` است که تمام اطلاعات مورد نیاز صفحه برای رندر کردن آیتم را در خود دارد.
یک پوشه در برنامه خود به نام `images` ایجاد کنید و تمام تصاویر موجود در [پوشه کد منبع](../../../../3-terrarium/solution/images) را در آن قرار دهید؛ (۱۴ تصویر از گیاهان وجود دارد).
### وظیفه
تصاویر گیاهان را بین تگهای `` در دو ستون اضافه کنید:
```html
```
> توجه: Divها در مقابل Spanها. Divها به عنوان عناصر 'بلوک' در نظر گرفته میشوند و Spanها 'خطی' هستند. اگر این divها را به span تبدیل کنید، چه اتفاقی میافتد؟
با این نشانهگذاری، گیاهان اکنون روی صفحه نمایش داده میشوند. ظاهر آن خیلی خوب نیست، زیرا هنوز با استفاده از CSS سبکدهی نشدهاند، و این کار را در درس بعدی انجام خواهیم داد.
هر تصویر دارای متن جایگزین (alt text) است که حتی اگر نتوانید تصویر را ببینید یا رندر کنید، ظاهر میشود. این یک ویژگی مهم برای دسترسی است. در درسهای آینده درباره دسترسی بیشتر یاد خواهید گرفت؛ فعلاً به یاد داشته باشید که ویژگی alt اطلاعات جایگزین برای یک تصویر ارائه میدهد اگر کاربر به دلایلی نتواند آن را مشاهده کند (به دلیل اتصال کند، خطا در ویژگی src، یا اگر کاربر از صفحهخوان استفاده کند).
✅ آیا متوجه شدید که هر تصویر دارای همان متن جایگزین است؟ آیا این کار خوب است؟ چرا یا چرا نه؟ آیا میتوانید این کد را بهبود دهید؟
---
## نشانهگذاری معنایی
به طور کلی، بهتر است هنگام نوشتن HTML از 'معنا' استفاده کنید. این به چه معناست؟ یعنی از تگهای HTML برای نشان دادن نوع داده یا تعاملی که برای آن طراحی شدهاند استفاده کنید. به عنوان مثال، متن عنوان اصلی در یک صفحه باید از تگ `
` استفاده کند.
این خط را درست زیر تگ باز `` اضافه کنید:
```html
My Terrarium
```
استفاده از نشانهگذاری معنایی مانند داشتن هدرها به صورت `
` و لیستهای نامرتب به صورت `
` به صفحهخوانها کمک میکند تا در یک صفحه حرکت کنند. به طور کلی، دکمهها باید به صورت `
` اضافه کنید:
```html
```
✅ حتی اگر این نشانهگذاری را به صفحه اضافه کردهاید، هیچ چیزی رندر نمیشود. چرا؟
---
## 🚀چالش
برخی از تگهای 'قدیمی' HTML وجود دارند که هنوز هم بازی با آنها جالب است، اگرچه نباید از تگهای منسوخ شده مانند [این تگها](https://developer.mozilla.org/docs/Web/HTML/Element#Obsolete_and_deprecated_elements) در نشانهگذاری خود استفاده کنید. با این حال، آیا میتوانید از تگ قدیمی `