بیشترمون برای یادگیری برنامه نویسی فرانتاند، از آموزش HTML شروع میکنیم و اولین چیزی هم که یاد میگیریم اینه که خط اول یک فایل HTMLای باید بنویسیم: <DOCTYPE html!>، ولی چرا؟ برای جواب دادن به این سوال بهتره یکم برگردیم عقب...
در سال هایی که HTML تازه درحال شکلگیری بود، هنوز استانداردهای مشخص و یکپارچهای برای وب وجود نداشت و کمپانیهای سازنده مرورگرها هرجوری که دلشون میخواست و بدون توجه به رقبا، فیچرهای جدیدی رو به مرورگرهاشون اضافه میکردن!
نتیجه این بیتوجهی سازندگان مرورگرها به رقبا و آشفتگیها چی بود؟!
این بود که دولوپرهای وب باید یک مرورگر رو انتخاب میکردن و وبسایت رو برحسب استانداردهای اون مرورگر پیاده سازی میکردن، درنتیجه ممکن بود وبسایت توسط بعضی از مرورگرها ساپورت نشه و روی اونها درست کار نکنه!
راهحل چی بود؟
این بود که W3C درنهایت یه سری استاندارد تعریف کرد که همه سازندگان مرورگرها و دولوپرها از این استانداردها تبعیت کنن. اینجوری دیگه وبسایتها توی همه مرورگرها ساپورت و render میشدن :)))
ولی داستان به همین سادگیها هم نبود...
مشکل این راهحل چی بود؟
این بود که تا به اون روز کلی وبسایت وجود داشت که با استانداردهای مختلف مرورگرها پیادهسازی شده بودن و سازگار با استانداردهای جدید W3C نبودن. پس با به وجوداومدن استانداردهای جدید، وبسایتهای قدیمی به مشکل خوردن و نیاز به تغییرات گسترده دیده شد!
برای حل این مشکل چه راهکاری پیشنهاد شد؟
این که سازندگان مرورگرها بیان یه سری programming rendering mode برای مرورگرهاشون تعریف کنن.
اینجوری دولوپرها با اضافه کردن یک خط کد به ابتدای کدهاشون به مرورگر میفهموندن که از کدوم render mode برای داکیومنتشون استفاده کنه، این یک خط کد همون DOCTYPE declaration هست!
در اون زمان سه تا render mode برای مرورگرها تعریف شد:
با گذشت زمان، همه مرورگرها این استانداردها رو کاملا پیادهسازی کردن و دولوپرها هم توی پیادهسازی وبسایتها، کاملا اونها رو رعایت کردن، بخاطرهمین دیگه اول هر HTML document میبینیم که نوشته شده <DOCTYPE html!> و این tag به این معنی هست که این render mode موردنیاز برای این داکیومنت full standard render mode هست.
تعریف نوع و ورژن یک HTML document با استفاده از یک تگ در اولین خط اون داکیومنت صورت میگیره و این تعریف، به مرورگرها کمک میکنه که همشون یک داکیومنت رو به روش یکسانی parse کنن.
مثلا صفحاتوب که با HTML4.0.1 پیادهسازی شدن باید دارای DTD (document type definition) DOCTYPE باشند و از اونجایی که خود DTD هم سه نوع مختلف داره، DOCTYPE declaration این داکیومنتها به این سه شکل تعریف میشن:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
ولی برای صفحاتوب که با استفاده از HTML5 پیادهسازی شدن تنها کافیه از <DOCTYPE html!> در ابتدای داکیومنت استفاده کنیم.
درنهایت اینکه تعریف نوع داکیومنت case sensitive نیست و میشه ازش به هرکدوم از شکلهای زیر استفاده کرد:
<!DOCTYPE html>
<!DocType html>
<!Doctype html>
<!doctype html>
منبع این نوشته رو هم براتون میذارم البته سعی کردم چیزی از قلم نیفته.
امیدوارم براتون مفید بوده باشه ;)))
https://www.freecodecamp.org/news/what-is-the-doctype-declaration-in-html/