As a front-end developer, I think this is an excellent, deep-dive curriculum. HTML5 is often rushed through, but truly mastering its semantic tags, accessibility features, and native APIs (like Canvas and Web Storage) is what separates a junior developer from a senior one.
Because a detailed breakdown of all 120 days is too massive for a single response, I will provide Phase 1 (Days 1–30) and Phase 2 (Days 31–60) here.
Phase 1: Foundations (Days 1–30)
Day 1: HTML Document Structure
- Define Goal: Understand the mandatory boilerplate required for a browser to render a modern web page correctly without triggering "quirks mode."
- Instructions: Create an
index.htmlfile. Type<!DOCTYPE html>at the very top. Below it, add an<html>tag enclosing a<head>and a<body>. Open this file in your browser.
Day 2: Head Elements
- Define Goal: Configure the invisible metadata that instructs the browser on how to handle the document, its encoding, and its title.
- Instructions: Inside your
<head>, add<meta charset="UTF-8">(to support all characters),<title>My First Webpage</title>, and link a dummy CSS file using<link rel="stylesheet" href="style.css">.
Day 3: Text Elements
- Define Goal: Establish a semantic typographic hierarchy so search engines and screen readers understand the structure of your content.
- Instructions: Inside the
<body>, write an<h1>tag for the page title. Add an<h2>for a subtitle, and write two paragraphs of text using<p>tags.
Day 4: Inline Elements
- Define Goal: Apply text-level semantics to highlight specific words within a block of text without breaking the document flow.
- Instructions: Inside your paragraphs, wrap a highly important word in
<strong>(bold semantics), an emphasized word in<em>(italic semantics), and a generic word in a<span>(no semantics, used for styling later).
Day 5: Lists
- Define Goal: Group related items together sequentially or non-sequentially.
- Instructions: Create a recipe page. Use an unordered list
<ul>with<li>tags for the ingredients (order doesn't matter) and an ordered list<ol>with<li>tags for the cooking steps (order matters).
Day 6: Links
- Define Goal: Create the fundamental building block of the web: the hyperlink, allowing users to navigate between documents.
- Instructions: Use the anchor tag
<a>. Set thehrefattribute to"[https://google.com](https://google.com)". Addtarget="_blank"so it opens in a new tab.
Day 7: Images
- Define Goal: Embed visual media while ensuring visually impaired users and search engine bots can understand what the image depicts.
- Instructions: Add an
<img>tag. Set thesrcto a local or remote image URL. You must add analt="Description of image"attribute for accessibility.
Day 8: Tables
- Define Goal: Display 2D tabular data using semantic row and column markup.
- Instructions: Build a
<table>. Inside, create a table row<tr>. Inside the row, add table headers<th>(e.g., Name, Age). Create another<tr>below it and fill it with table data<td>(e.g., John, 25).
Day 9: Forms Basics
- Define Goal: Create the UI necessary to collect user input and submit it to a server.
- Instructions: Create a
<form>. Inside, add a text<input>and a submit<button>. Crucially, wrap the input's text description in a<label>tag.
Day 10: Form Attributes
- Define Goal: Implement client-side validation and UX hints without writing JavaScript.
- Instructions: Add the
requiredattribute to your text input so the form cannot submit empty. Addplaceholder="Enter your name"to give the user a hint inside the text box.
Day 11: Semantic Elements
- Define Goal: Move away from "div soup" (using generic
<div>tags for everything) by defining structural zones. - Instructions: Restructure your page. Wrap the top logo/nav in a
<header>, your main content in a<main>, group a topic in a<section>, and wrap the copyright info in a<footer>.
Day 12: Navigation
- Define Goal: Specifically define the main routing block of your website for assistive technologies.
- Instructions: Create a
<nav>element inside your<header>. Inside the<nav>, place a<ul>containing three<li>tags, each containing an<a>link (Home, About, Contact).
Day 13: Block vs Inline
- Define Goal: Understand standard browser document flow (how elements stack vertically vs horizontally).
- Instructions: Place two
<div>elements next to each other in code; observe they stack vertically (Block). Place two<span>elements next to each other; observe they sit side-by-side (Inline).
Day 14: Iframes
- Define Goal: Embed a completely separate HTML document (like a third-party widget or video) inside your current page.
- Instructions: Go to YouTube, click "Share," then "Embed." Copy the
<iframe>code and paste it into your<body>.
Day 15: HTML Entities
- Define Goal: Render characters that are reserved by HTML syntax (like
<or>) or special symbols. - Instructions: In your footer, write
© 2026 My Website. Use<div>if you ever need to display the literal text "" on screen without the browser trying to render it.
Day 16: Forms Advanced Inputs
- Define Goal: Trigger specialized mobile keyboards and native browser UI pickers.
- Instructions: Create a new form. Add
<input type="email">(forces @ symbol on mobile keyboards),<input type="date">(triggers native calendar picker), and<input type="number">.
Day 17–18: Media Elements & Controls
- Define Goal: Embed audio and video natively without requiring third-party plugins (like the old Flash player).
- Instructions: Add an
<audio>tag and a<video>tag. Providesrcattributes pointing to media files. Add thecontrolsattribute (boolean) so the browser renders play/pause/volume buttons. Try addingautoplay mutedto the video.
Day 19: HTML5 Global Attributes
- Define Goal: Attach unique identifiers and categorization tags used by CSS and JavaScript to target elements.
- Instructions: Add an
id="main-heading"to your H1 (IDs must be unique per page). Addclass="text-bold card"to a paragraph (classes can be reused). Addtitle="Tooltip text"to see a native browser tooltip on hover.
Day 20: Data Attributes
- Define Goal: Store custom data directly in the HTML DOM that you can later extract using JavaScript.
- Instructions: On a button element, add
data-product-id="4922"anddata-category="shoes".
Day 21: Forms Validation (Pattern)
- Define Goal: Use Regular Expressions (Regex) directly in HTML to enforce strict formatting rules.
- Instructions: Create an
<input type="text">for a zip code. Addpattern="[0-9]{5}"andtitle="Five digit zip code"to ensure only 5 numbers can be submitted.
Day 22: Fieldset & Legend
- Define Goal: Group related form inputs together visually and semantically (especially useful for groups of radio buttons).
- Instructions: Wrap a group of radio buttons in a
<fieldset>tag. The first child of the fieldset should be a<legend>tag that asks the question (e.g.,<legend>Choose your shipping method</legend>).
Day 23–24: Progress & Meter Elements
- Define Goal: Display native semantic gauges and progress bars.
- Instructions: Add
<progress value="75" max="100"></progress>to show a task is 75% complete. Add<meter value="0.2" min="0" max="1" low="0.3" high="0.8">to show a disk-space warning gauge.
Day 25: HTML5 Accessibility (ARIA)
- Define Goal: Provide context to screen readers when visual context (like icons) is not enough.
- Instructions: Create a button that only contains an "X" icon for closing a modal. Add
aria-label="Close dialog"to the<button>so screen readers announce its purpose.
Day 26: Comments
- Define Goal: Leave notes in the source code that the browser ignores during rendering.
- Instructions: Use
<!-- This section contains the hero banner -->above your main header.
Day 27: Favicon
- Define Goal: Add a brand icon to the browser tab next to the page title.
- Instructions: In the
<head>, add<link rel="icon" type="image/x-icon" href="favicon.ico">.
Day 28: Responsive Basics (Viewport)
- Define Goal: Prevent mobile devices from zooming out and treating your webpage like a tiny desktop screen.
- Instructions: Ensure
<meta name="viewport" content="width=device-width, initial-scale=1.0">is in your<head>. This is mandatory for modern responsive web design.
Day 29: Best Practices
- Define Goal: Ensure your markup conforms strictly to W3C standards.
- Instructions: Copy all your HTML code from the past 28 days and paste it into the W3C Markup Validation Service (validator.w3.org). Fix any missing closing tags or missing
altattributes.
Day 30: Review Phase 1 (Deliverable)
- Define Goal: Synthesize standard document flow, semantics, and forms.
- Instructions: Build a 3-page site (Home, Blog, Contact). Use strict semantic tags (
<nav>,<main>,<article>), include a table of data, a video, and a fully labeled contact form.
Phase 2: Intermediate HTML5 APIs & Media (Days 31–60)
Day 31: Input Types (range, color, file)
- Define Goal: Utilize the browser's native OS-level selection widgets.
- Instructions: Create a form with
<input type="color">(opens the OS color wheel),<input type="range" min="1" max="100">(creates a slider), and<input type="file" accept=".pdf">(opens the file browser).
Day 32: Autocomplete Attribute
- Define Goal: Improve conversion rates by allowing password managers and browsers to auto-fill user data.
- Instructions: Add
autocomplete="shipping street-address"to an address input, andautocomplete="cc-name"to a credit card name input.
Day 33: Datalist Element
- Define Goal: Provide a native auto-suggest dropdown without needing a heavy JavaScript library.
- Instructions: Create an
<input list="browsers">. Below it, create a<datalist id="browsers">containing<option value="Chrome">,<option value="Firefox">, etc.
Day 34: Output Element
- Define Goal: Semantically display the result of a calculation derived from user inputs.
- Instructions: Create a form with a range slider and a number input. Add an
<output name="result">tag. Use inline JS:<form oninput="result.value=parseInt(a.value)+parseInt(b.value)">.
Day 35: Form Validation Attributes (min, max, step)
- Define Goal: Strictly constrain numeric input data.
- Instructions: Create
<input type="number" min="0" max="100" step="10">. Try typing "15" and submitting; observe the native browser error tooltip.
Day 36: Hidden Input
- Define Goal: Pass data to the server that the user doesn't need to see or interact with.
- Instructions: Add
<input type="hidden" name="user_id" value="9948">to a form.
Day 37–38: Drag and Drop Basics
- Define Goal: Understand the HTML5 native DnD attributes before tying them to JS events.
- Instructions: Create an image and a div. Add
draggable="true"to the image. Click and drag the image on the screen. (Note: It will drag, but won't "drop" anywhere until JS listeners are added).
Day 39: Contenteditable Attribute
- Define Goal: Turn any standard HTML element into a rich-text input field.
- Instructions: Create a
<div contenteditable="true">Click here to type!</div>. Click it in the browser and watch it behave like a textarea.
Day 40: Spellcheck Attribute
- Define Goal: Explicitly enable or disable the browser's red-squiggle spelling indicator.
- Instructions: Add
spellcheck="false"to a<textarea>where you expect users to type code or usernames that shouldn't be spell-checked.
Day 41–42: HTML5 Audio API & Formats
- Define Goal: Ensure audio playback works across all browsers by providing fallback file formats.
- Instructions: Create an
<audio controls>tag without asrc. Inside it, nest<source src="audio.ogg" type="audio/ogg">and<source src="audio.mp3" type="audio/mpeg">. The browser will pick the first one it supports.
Day 43–45: Video API & Track Element (Subtitles)
- Define Goal: Create an accessible, professional video player experience.
- Instructions: Add a
<video poster="thumbnail.jpg">. Inside, add<track kind="subtitles" src="subs_en.vtt" srclang="en" label="English">. The poster loads before the user clicks play, and the track provides closed captions.
Day 46–48: Canvas Basics & Rendering
- Define Goal: Utilize the HTML5
<canvas>element for hardware-accelerated 2D bitmap drawing via JavaScript. - Instructions: Add
<canvas id="game" width="400" height="400"></canvas>. In a<script>tag, get the element, call.getContext('2d'), and usectx.fillStyle = "red"followed byctx.fillRect(10, 10, 50, 50)to draw a square.
Day 49–51: SVG Integration & Styling
- Define Goal: Write scalable vector graphics (math-based shapes) directly in HTML that won't lose quality when zoomed in, unlike Canvas.
- Instructions: Write an
<svg width="100" height="100">. Inside, add a<circle cx="50" cy="50" r="40" fill="blue" stroke="black" stroke-width="3" />. Build a basic "Home" icon using<path>coordinates.
Day 52: Accessibility Roles
- Define Goal: Explicitly define the purpose of custom UI components for screen readers.
- Instructions: If you built a custom styled dropdown out of divs, add
role="listbox"to the container androle="option"to the items so a screen reader knows it functions like a<select>menu.
Day 53: Tabindex Attribute
- Define Goal: Manage the sequential focus navigation order for keyboard users.
- Instructions: Add
tabindex="0"to a custom<div>button to make it focusable by the Tab key. (Never use tabindex > 0, as it ruins the natural document flow).
Day 54: Accessible Forms
- Define Goal: Ensure clicking a label focuses its input, which is a massive UX win for checkboxes and radio buttons.
- Instructions: Always assign an
idto your input (e.g.,id="terms"), and ensure the label explicitly targets it:<label for="terms">I agree</label>.
Day 55: Landmark Elements
- Define Goal: Use structural tags to allow screen readers to skip directly to content.
- Instructions: Refactor your page to ensure there is a clear
<header>, exactly one<main>, and an<aside>for related sidebar links.
Day 56–57: Microdata & Schema.org
- Define Goal: Inject machine-readable data into your HTML to generate Google "Rich Snippets" (like star ratings in search results).
- Instructions: Wrap a product page in
<article itemscope itemtype="[https://schema.org/Product](https://schema.org/Product)">. Tag the title with<h1 itemprop="name">and the price with<span itemprop="price">.
Day 58: Responsive Images (srcset & sizes)
- Define Goal: Save bandwidth by letting the browser choose which image file size to download based on the user's screen resolution.
- Instructions: Add
<img srcset="small.jpg 500w, large.jpg 1000w" sizes="(max-width: 600px) 100vw, 50vw" alt="A responsive photo">.
Day 59: Picture Element (Art Direction)
- Define Goal: Force the browser to load a completely different image crop (e.g., a square image on mobile, a wide panorama on desktop).
- Instructions: Use the
<picture>tag. Inside, add<source media="(min-width: 800px)" srcset="wide-shot.jpg">, followed by a fallback<img src="close-up.jpg" alt="...">.
Day 60: Review Phase 2 (Deliverable)
- Define Goal: Prove mastery over rich media, vectors, and advanced accessibility forms.
- Instructions: Build a media-rich landing page. It must include an embedded video with a
.vttsubtitle track, a<canvas>element drawing a simple chart, inline SVG icons, and a highly validated form usingrange,datalist, and schema.org microdata.