Menu

HTML doctype: מה עושה <!DOCTYPE html> ואיפה הוא נכתב

<!DOCTYPE html> היא השורה הראשונה בכל מסמך HTML. היא אומרת לדפדפן להציג את העמוד במצב תקני (standards mode) ולא במצב quirks. למדו את התחביר, מה מפעילים doctypes ישנים, ואיך בודקים את המצב.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

מה זה <!DOCTYPE html>

<!DOCTYPE html> היא הצהרת ה-doctype: השורה הראשונה בקובץ HTML, לפני התגית <html>. היא אומרת לדפדפן "זה מסמך HTML מודרני", והדפדפן מגיב בהצגת העמוד במצב תקני (standards mode), לפי המפרטים הנוכחיים של HTML ו-CSS.

השורה האחת הזו היא כל ה-doctype של HTML5. אין לה תגית סגירה ושום דבר אחר לא נכנס לתוכה.

כללי תחביר

  • היא באה ראשונה. רק רווחים לבנים והערות יכולים להופיע לפניה. כל טקסט או תגית לפני ה-doctype גורמים לדפדפן להתעלם ממנה.
  • היא לא תלויה ברישיות. <!DOCTYPE html> ו-<!doctype html> זהים. בחרו סגנון אחד ושמרו עליו.
  • היא לא אלמנט. אין </!DOCTYPE>, ואי אפשר להוסיף לה class או מאפיינים אחרים.
  • המילה שאחרי DOCTYPE חייבת להיות html. <!DOCTYPE html5> אינה גרסה חדשה יותר; הדפדפן מתייחס לעמוד כזה כאילו אין לו doctype תקין.
  • אחת לכל מסמך. עמודים שנבנים מכמה קבצים (תבניות, includes) עדיין מוציאים doctype אחד בראש ה-HTML הסופי.

מצב תקני ומצב quirks

לדפדפנים יש שלושה מצבי תצוגה, וה-doctype בוחר אחד מהם:

מצבמה מפעיל אותומה משתנה
מצב תקני (standards)<!DOCTYPE html> ו-doctypes מודרניים אחריםהכל עוקב אחרי המפרטים הנוכחיים
מצב quirks מוגבל (limited quirks)HTML 4.01 Transitional או Frameset עם URL, XHTML 1.0 Transitional או Framesetכמעט תקני: רק כלל אחד של גובה שורה שונה, כך שלתמונה לבדה בשורה (בדרך כלל בתא טבלה) אין רווח מתחתיה
מצב quirksבלי doctype, doctype עם שגיאת כתיב, או כמה ישנים כמו HTML 4.01 Transitional בלי URLמחקה דפדפנים משנות ה-90: גבהים באחוזים, גודל טקסט בטבלאות וגובה שורות מתנהגים אחרת

מצב quirks קיים כדי שעמודים שנכתבו לפני תקני הרשת עדיין ייראו כמו שהכותבים שלהם ראו אותם. בעמודים חדשים הוא רק גורם לצרות: height: 100% שעובד בעמוד אחד ולא בשני, או טבלאות שמתעלמות מגודל הגופן שלכם, הם תסמינים קלאסיים של doctype חסר.

התצוגות המקדימות של העורך בעמוד הזה תמיד מוצגות במצב תקני, כך שמחיקת doctype שם לא תראה לכם את מצב quirks. הבודק שלמטה משתמש ב-DOMParser, שמחיל את אותם כללים שדפדפנים משתמשים בהם כשהם טוענים קובץ. ערכו את ה-doctype בתיבת הטקסט והמצב יתעדכן:

נסו למחוק את השורה, להקליד <!DOCTYPE html5>, או לשים מילה לפני ה-doctype: כל אחד מאלה מעביר את התוצאה ל-quirks.

doctypes ישנים: HTML 4.01 ו-XHTML

לפני HTML5, doctype ציין קובץ DTD עם מזהה ציבורי ארוך. עדיין תמצאו אותם בראש אתרים ישנים:

<!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 XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

דפדפנים אף פעם לא הורידו את קובצי ה-DTD האלה. הם רק קראו את המזהה כדי לבחור מצב: HTML 4.01 Strict ו-XHTML 1.0 Strict נותנים מצב תקני, גרסאות ה-Transitional נותנות מצב quirks מוגבל, ו-HTML 4.01 Transitional בלי ה-URL נותן מצב quirks מלא. הדביקו אחד מהם בבודק שלמעלה כדי לבדוק אותו; שימו לב ש-compatMode מדווח על מצב quirks מוגבל כ-CSS1Compat, אותו ערך כמו מצב תקני, כך שרק מצב quirks מלא מופיע כ-BackCompat.

החלפת doctype ישן ב-<!DOCTYPE html> בטוחה בעמודים שכבר נמצאים במצב תקני. עמוד שהיה במצב quirks יכול לזוז מעט (בדרך כלל גבהים ורווחים מתחת לתמונות), אז עברו עליו אחרי השינוי.

ה-doctype ב-DOM

ה-doctype הופך לצומת DocumentType, נפרד מהאלמנט <html>. סקריפטים קוראים אותו דרך document.doctype, ו-document.compatMode מדווח באיזה מצב העמוד הסתיים:

document.compatMode היא הדרך המהירה ביותר לבדוק כל אתר חי: פתחו את הקונסול של הדפדפן והקלידו אותו. "CSS1Compat" פירושו מצב תקני (או quirks מוגבל), ו-"BackCompat" פירושו מצב quirks.

תבנית פתיחה מלאה של HTML5

ה-doctype הוא חלק אחד מהמסמך המינימלי שכל עמוד צריך להתחיל ממנו. לכל שורה למטה יש תפקיד:

למאפיין lang ולתגית meta viewport יש עמוד משלהם.

טעויות נפוצות

  • משהו לפני ה-doctype. תו תועה, echo של דיבאג מסקריפט בשרת, או תגית HTML מעל <!DOCTYPE html> מכניסים את כל העמוד למצב quirks. הערות ושורות ריקות זה בסדר.
  • המצאת גרסה. <!DOCTYPE html5> או <!DOCTYPE HTML 5> אינם תקינים ומפעילים מצב quirks. ה-doctype של HTML5 הוא פשוט <!DOCTYPE html>.
  • סגירה שלו. <!DOCTYPE html></!DOCTYPE> אינו HTML תקין. להצהרה אין תגית סיום.
  • השמטה שלו מקובצי בדיקה קטנים. באגי פריסה שאתם רודפים אחריהם בקובץ טיוטה בלי doctype עשויים לא להתקיים בעמוד האמיתי, וגם להפך.
  • השארת doctype ישן מסוג Transitional. הוא מכניס את העמוד למצב quirks מוגבל בלי שום תועלת. עברו ל-<!DOCTYPE html>.

שאלות נפוצות

מה עושה <!DOCTYPE html>?

הוא אומר לדפדפן שהעמוד הוא מסמך HTML מודרני, ולכן הוא מוצג במצב תקני. בלעדיו, דפדפנים חוזרים למצב quirks, שמחקה באגים מדפדפנים של סוף שנות ה-90 ומשנה את האופן שבו מחושבים חלק מהפריסות והגבהים.

האם <!DOCTYPE html> חובה?

העמוד עדיין נטען בלעדיו, אבל תקן HTML דורש אותו, ודפדפנים מציגים את העמוד במצב quirks. תמיד שימו <!DOCTYPE html> בשורה הראשונה.

האם doctype תלוי רישיות?

לא. <!DOCTYPE html>, <!doctype html> ו-<!DocType HTML> אומרים כולם אותו דבר. DOCTYPE באותיות גדולות עם html באותיות קטנות הוא הסגנון הנפוץ ביותר.

האם DOCTYPE היא תגית HTML?

לא. זו הצהרה, לא אלמנט: אין לה תגית סגירה, אין מאפיינים שאפשר להוסיף לה, והיא לא מופיעה ב-document.body. ב-DOM היא צומת DocumentType נפרד שזמין דרך document.doctype.

מה ה-doctype של HTML5?

<!DOCTYPE html>. HTML5 ויתר על המזהים הציבוריים הארוכים וכתובות ה-URL של HTML 4.01 ו-XHTML, והצורה הקצרה היא ה-doctype היחיד שצריך בכל עמוד חדש.

איך בודקים אם עמוד נמצא במצב quirks?

פתחו את הקונסול של הדפדפן והריצו document.compatMode. "CSS1Compat" פירושו מצב תקני (או מצב quirks מוגבל), ו-"BackCompat" פירושו מצב quirks.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל