πŸ“˜ Curriculum β€” Lessons (HTML only)

β¬… Back to Home
Lesson 1: What is HTML? (Concept & role) Lesson 2: HTML vs CSS vs JavaScript Lesson 3: Browsers and how they read HTML Lesson 4: Installing a code editor (VS Code) Lesson 5: Writing your first index.html Lesson 6: The <!DOCTYPE html> declaration Lesson 7: The <html> root element Lesson 8: The <head> section basics Lesson 9: The <body> section basics Lesson 10: The <title> element Lesson 11: Your first heading (<h1>) Lesson 12: Paragraphs (<p>) Lesson 13: Multiple headings (<h2>–<h6>) Lesson 14: Line breaks (<br>) Lesson 15: Horizontal rules (<hr>) Lesson 16: HTML comments (<!-- -->) Lesson 17: Bold text (<b>) Lesson 18: Italics (<i>) Lesson 19: Emphasis (<em>) Lesson 20: Strong importance (<strong>) Lesson 21: Underlined text (<u>) Lesson 22: Highlighting text (<mark>) Lesson 23: Subscript (<sub>) Lesson 24: Superscript (<sup>) Lesson 25: Small text (<small>) Lesson 26: Combining formatting tags Lesson 27: Inline vs block elements Lesson 28: White space & HTML collapsing rules Lesson 29: Semantic vs non-semantic tags Lesson 30: Intro project β€” Build a simple article page Lesson 31: Nesting elements Lesson 32: Proper indentation & clean code Lesson 33: Common beginner mistakes Lesson 34: Using validator (W3C) Lesson 35: HTML entities (&lt;, &amp;, etc.) Lesson 36: Unicode characters Lesson 37: Special symbols Lesson 38: Emoji in HTML Lesson 39: Document language attribute (lang) Lesson 40: Accessibility importance from day 1 Lesson 41: Basic page structure recap Lesson 42: Hands-on quiz β€” identify broken HTML Lesson 43: Debugging in browser dev tools Lesson 44: Live Server setup (instant refresh) Lesson 45: Saving and opening HTML files Lesson 46: Hello World mini-project Lesson 47: Creating your own cheat sheet Lesson 48: First review β€” Build a personal bio page Lesson 49: Practice challenge β€” 5 short exercises Lesson 50: Milestone project β€” My First Homepage Lesson 51: Hyperlinks (<a>) Lesson 52: The href attribute Lesson 53: Linking to external sites Lesson 54: Linking to internal pages Lesson 55: Anchor links (#id) Lesson 56: Target attribute (_blank, _self) Lesson 57: Titles on links Lesson 58: Relative vs absolute URLs Lesson 59: Navigation menus with <a> Lesson 60: Images (<img>) Lesson 61: The src attribute Lesson 62: The alt attribute Lesson 63: Image width & height Lesson 64: Responsive images basics Lesson 65: Linking an image Lesson 66: Image as a button Lesson 67: Adding captions Lesson 68: Audio element basics Lesson 69: Supported formats (mp3, wav, ogg) Lesson 70: Adding controls Lesson 71: Autoplay vs loop Lesson 72: Muted audio Lesson 73: Video element basics Lesson 74: Video formats Lesson 75: Adding poster images Lesson 76: Captions for video Lesson 77: YouTube embedding Lesson 78: Iframes overview Lesson 79: Iframe attributes Lesson 80: Embedding Google Maps Lesson 81: Embedding external widgets Lesson 82: Security with iframes Lesson 83: <object> vs <embed> Lesson 84: Using <source> for multiple formats Lesson 85: Accessibility in media Lesson 86: Lazy loading images Lesson 87: Optimization tips Lesson 88: CDN images Lesson 89: Stock vs self-hosted media Lesson 90: Mini-project β€” image gallery Lesson 91: Mini-project β€” audio player page Lesson 92: Mini-project β€” video showcase Lesson 93: Mini-project β€” embed a Google Map Lesson 94: Quiz β€” media elements Lesson 95: Project β€” Media-rich profile page Lesson 96: Debugging broken media Lesson 97: Common file paths Lesson 98: Organizing media folders Lesson 99: Relative vs absolute file linking Lesson 100: Milestone project β€” Multimedia Portfolio Lesson 101: Ordered lists (<ol>) Lesson 102: Unordered lists (<ul>) Lesson 103: List items (<li>) Lesson 104: Nested lists Lesson 105: Custom list markers Lesson 106: Definition list (<dl>) Lesson 107: <dt> (term) Lesson 108: <dd> (definition) Lesson 109: When to use definition lists Lesson 110: Building a navigation list Lesson 111: Breadcrumbs with lists Lesson 112: Sidebars with lists Lesson 113: Nested menus Lesson 114: Horizontal menus Lesson 115: Dropdown menus (HTML only) Lesson 116: Checklists Lesson 117: Accessible lists Lesson 118: Styling hooks with lists Lesson 119: Avoiding list misuse Lesson 120: Mini-project β€” To-Do list Lesson 121: Mini-project β€” Recipe ingredients Lesson 122: Mini-project β€” Navigation menu Lesson 123: Mini-project β€” Nested navigation Lesson 124: Quiz β€” lists Lesson 125: Challenge β€” Build site navigation Lesson 126: Review exercise Lesson 127: Project β€” Blog structure with lists Lesson 128: Debugging list nesting Lesson 129: Multi-level menu recap Lesson 130: Milestone project β€” Site Navigation System Lesson 131: Case study β€” real site menus Lesson 132: Practice formatting lists Lesson 133: Checklist project Lesson 134: Resume skill list Lesson 135: Ordered steps guide Lesson 136: Product feature list Lesson 137: Milestone project β€” Product Landing List Lesson 138: Lists + media combined Lesson 139: Lists inside tables Lesson 140: Review & reflection Lesson 141: <table> basics Lesson 142: Table rows (<tr>) Lesson 143: Table data (<td>) Lesson 144: Table headers (<th>) Lesson 145: Adding captions Lesson 146: Borders Lesson 147: Cell padding & spacing Lesson 148: Rowspan Lesson 149: Colspan Lesson 150: Table headers (<thead>) Lesson 151: Table body (<tbody>) Lesson 152: Table footer (<tfoot>) Lesson 153: Scope attributes Lesson 154: Accessible tables Lesson 155: Simple data table Lesson 156: Advanced data table Lesson 157: Tables for layout (history) Lesson 158: Why not to use tables for layout Lesson 159: Responsive tables Lesson 160: Scrollable tables Lesson 161: Sorting tables (HTML only) Lesson 162: Mini-project β€” Pricing table Lesson 163: Mini-project β€” Schedule table Lesson 164: Mini-project β€” Student gradebook Lesson 165: Mini-project β€” Leaderboard Lesson 166: Project β€” Sports statistics Lesson 167: Quiz β€” table structure Lesson 168: Debugging table issues Lesson 169: Semantic vs non-semantic tables Lesson 170: Milestone project β€” Company Dashboard Table Lesson 171: Complex nesting Lesson 172: Adding forms into tables Lesson 173: Merging data Lesson 174: Real-world examples Lesson 175: Accessibility checks Lesson 176: Organizing with IDs Lesson 177: Table & CSS recap Lesson 178: Validation & common mistakes Lesson 179: Table best practices Lesson 180: Final recap project Lesson 181: Introduction to forms (<form>) Lesson 182: The action attribute Lesson 183: The method attribute (GET vs POST) Lesson 184: Text input (<input type="text">) Lesson 185: Password input Lesson 186: Email input Lesson 187: Number input Lesson 188: Range slider Lesson 189: Date & time inputs Lesson 190: Color picker Lesson 191: File upload Lesson 192: Checkbox basics Lesson 193: Radio button basics Lesson 194: Grouping radio buttons Lesson 195: Dropdowns (<select>) Lesson 196: Grouped options (<optgroup>) Lesson 197: Multi-select dropdown Lesson 198: <textarea> element Lesson 199: Placeholder text Lesson 200: Labels (<label for>) Lesson 201: Fieldset & legend Lesson 202: Disabled inputs Lesson 203: Read-only inputs Lesson 204: Default values Lesson 205: Required fields Lesson 206: Pattern attribute (regex validation) Lesson 207: Min & max attributes Lesson 208: Step attribute Lesson 209: Autocomplete attribute Lesson 210: Autofocus attribute Lesson 211: Hidden inputs Lesson 212: Submit button Lesson 213: Reset button Lesson 214: Button element vs input button Lesson 215: Custom button text Lesson 216: Image as a submit button Lesson 217: Actionless forms Lesson 218: GET request demo Lesson 219: POST request demo Lesson 220: Form accessibility basics Lesson 221: Grouping inputs with <fieldset> Lesson 222: HTML5 validation (built-in) Lesson 223: Custom validation attributes Lesson 224: Novalidate attribute Lesson 225: Input modes (mobile optimization) Lesson 226: <datalist> element Lesson 227: Search input Lesson 228: URL input Lesson 229: Telephone input Lesson 230: Multiple file uploads Lesson 231: Multiple email entries Lesson 232: Progress element Lesson 233: Meter element Lesson 234: Range vs slider difference Lesson 235: Grouping with divs Lesson 236: Form semantics for screen readers Lesson 237: ARIA roles in forms Lesson 238: Mini-project β€” Contact form Lesson 239: Mini-project β€” Login form Lesson 240: Mini-project β€” Signup form Lesson 241: Mini-project β€” Feedback form Lesson 242: Mini-project β€” Survey form Lesson 243: Mini-project β€” Order form Lesson 244: Mini-project β€” File upload form Lesson 245: Project β€” Newsletter signup Lesson 246: Project β€” Multi-step form Lesson 247: Debugging forms Lesson 248: Common mistakes (missing labels) Lesson 249: Required vs optional fields Lesson 250: Milestone project β€” Full Registration Form Lesson 251: Introduction to semantic HTML Lesson 252: Why semantics matter Lesson 253: <header> element Lesson 254: <footer> element Lesson 255: <main> element Lesson 256: <section> element Lesson 257: <article> element Lesson 258: <aside> element Lesson 259: <nav> element Lesson 260: <figure> element Lesson 261: <figcaption> element Lesson 262: <time> element Lesson 263: <address> element Lesson 264: <mark> revisited Lesson 265: <abbr> element Lesson 266: <cite> element Lesson 267: <q> (inline quotation) Lesson 268: <blockquote> element Lesson 269: <code> inline code Lesson 270: <pre> preformatted text Lesson 271: <kbd> keyboard input Lesson 272: <samp> sample output Lesson 273: <var> variable element Lesson 274: <dfn> definition element Lesson 275: <bdo> element Lesson 276: <ruby> annotations Lesson 277: <rt> ruby text Lesson 278: <rp> ruby parentheses Lesson 279: Landmarks for screen readers Lesson 280: Combining semantics + ARIA Lesson 281: Mini-project β€” Blog layout Lesson 282: Mini-project β€” Article with author info Lesson 283: Mini-project β€” Navigation bar Lesson 284: Project β€” Semantic resume Lesson 285: Accessibility testing with semantic HTML Lesson 286: Case study β€” semantic vs div soup Lesson 287: SEO improvements with semantics Lesson 288: Best practices for modern sites Lesson 289: Debugging semantic structure Lesson 290: Milestone project β€” Semantic Portfolio Page Lesson 291: Document metadata intro Lesson 292: <title> best practices Lesson 293: <meta charset="UTF-8"> Lesson 294: Viewport meta Lesson 295: Description meta tag Lesson 296: Keywords meta tag Lesson 297: Author meta tag Lesson 298: <link> for CSS Lesson 299: <script> basics Lesson 300: Script loading (defer vs async) Lesson 301: Favicon link (rel="icon") Lesson 302: Apple-touch icons Lesson 303: Theme color meta Lesson 304: Robots meta (index, noindex) Lesson 305: Open Graph tags Lesson 306: Twitter cards meta Lesson 307: Schema.org microdata in meta Lesson 308: Charset options Lesson 309: Language meta Lesson 310: Social preview images Lesson 311: SEO best practices with metadata Lesson 312: Validating metadata with tools Lesson 313: Debugging missing metadata Lesson 314: Project β€” SEO-ready webpage head Lesson 315: Quiz β€” metadata tags Lesson 316: Case study β€” real-world head tag examples Lesson 317: Performance optimizations with preload Lesson 318: <noscript> tag Lesson 319: <base> tag (rare use cases) Lesson 320: Milestone project β€” Complete HTML head setup Lesson 321: Introduction to SVGs Lesson 322: Inline SVG vs external SVG Lesson 323: Simple shapes in SVG Lesson 324: Text in SVG Lesson 325: Accessible SVGs Lesson 326: Using <use> for icons Lesson 327: Icon systems with SVG Lesson 328: Canvas basics (<canvas>) Lesson 329: Drawing shapes with JS on canvas Lesson 330: Animating canvas Lesson 331: <picture> element for responsive images Lesson 332: srcset attribute Lesson 333: <source> element in picture Lesson 334: Adaptive images with media queries Lesson 335: Art direction with picture Lesson 336: Video <source> multiple formats Lesson 337: Fallback content for media Lesson 338: <embed> element Lesson 339: <object> element Lesson 340: Differences between embed and object Lesson 341: Embedding PDFs Lesson 342: Embedding flash (legacy) Lesson 343: Third-party embeds (social media posts) Lesson 344: Security implications of embeds Lesson 345: Sandboxing iframes Lesson 346: Allowing features in embeds Lesson 347: Mini-project β€” Responsive image demo Lesson 348: Mini-project β€” Video player with sources Lesson 349: Mini-project β€” Embed social media post Lesson 350: Project β€” Multimedia article page Lesson 351: Debugging media issues Lesson 352: File format compatibility Lesson 353: Optimization for performance Lesson 354: Lazy loading media Lesson 355: Case study β€” responsive design with picture Lesson 356: Accessibility audit for embeds Lesson 357: Modern media strategies Lesson 358: Best practices recap Lesson 359: Tools for image optimization Lesson 360: Milestone project β€” Responsive Media Portfolio Lesson 361: Purpose of accessibility & assistive tech Lesson 362: Alt text β€” when to write it Lesson 363: Decorative images (empty alt) Lesson 364: Complex images with figure + figcaption Lesson 365: Meaningful link text Lesson 366: Keyboard navigation basics Lesson 367: Natural tab order Lesson 368: Tabindex best practices Lesson 369: Focusable skip links Lesson 370: β€œSkip to content” implementation Lesson 371: Focus states & :focus-visible Lesson 372: Outlines and focus indicators Lesson 373: Landmarks (main, nav, footer) Lesson 374: Roles on non-semantic containers Lesson 375: aria-label vs aria-labelledby Lesson 376: aria-describedby Lesson 377: Marking required fields accessibly Lesson 378: Error message patterns Lesson 379: Validation messaging dos and don’ts Lesson 380: Grouping with fieldset + legend Lesson 381: Proper input labeling Lesson 382: Placeholders vs labels Lesson 383: Autocomplete tokens Lesson 384: Input types that aid accessibility Lesson 385: Accessible tables overview Lesson 386: Scope on th Lesson 387: Headers/id technique Lesson 388: Table captions Lesson 389: Accessible abbreviations Lesson 390: Document language attribute Lesson 391: Inline language changes Lesson 392: Directionality (dir) for RTL Lesson 393: Isolating bidi text (bdi) Lesson 394: Media captions via track Lesson 395: Audio transcripts Lesson 396: Descriptive destinations for links Lesson 397: Avoiding duplicate link text Lesson 398: Accessible icons Lesson 399: Accessible SVGs Lesson 400: Icon fonts pitfalls Lesson 401: Semantics for dialogs (<dialog>) Lesson 402: Preventing keyboard traps Lesson 403: Roving tabindex pattern Lesson 404: Disclosure state with aria-expanded Lesson 405: <details> + <summary> for FAQs Lesson 406: Live regions (aria-live) Lesson 407: Announcing async states Lesson 408: Iframes with title Lesson 409: Avoiding auto-play audio Lesson 410: Managing focus in modals Lesson 411: Accessible breadcrumbs Lesson 412: Accessible pagination Lesson 413: Testing with screen readers Lesson 414: Lighthouse accessibility audits Lesson 415: Mapping WCAG to HTML techniques Lesson 416: Accessibility checklist for reviews Lesson 417: HTML style guide Lesson 418: Boolean attributes Lesson 419: Prefer semantic elements over div soup Lesson 420: Avoid inline event handlers Lesson 421: Defer/async for scripts Lesson 422: Module scripts Lesson 423: Preload critical assets Lesson 424: Preconnect/DNS prefetch Lesson 425: Referrer policy Lesson 426: Subresource Integrity (SRI) Lesson 427: Crossorigin attribute Lesson 428: fetchpriority for images/resources Lesson 429: Native lazy loading Lesson 430: Image decoding options Lesson 431: <base> usage & pitfalls Lesson 432: Anchor IDs vs fragment links Lesson 433: Avoid deprecated tags Lesson 434: Escaping entities properly Lesson 435: Safe external links Lesson 436: Link types (nofollow, ugc, sponsored) Lesson 437: Microdata vs RDFa vs JSON-LD Lesson 438: Breadcrumb structured data Lesson 439: PWA manifest link Lesson 440: <noscript> fallbacks Lesson 441: i18n attributes Lesson 442: contenteditable best practices Lesson 443: HTML drag & drop Lesson 444: Mobile text control attributes Lesson 445: spellcheck attribute Lesson 446: <template> for inert markup Lesson 447: Slots overview Lesson 448: data-* attributes Lesson 449: http-equiv cautions Lesson 450: Avoid duplicate IDs Lesson 451: Logical heading order & outline Lesson 452: Favicon sets & variants Lesson 453: Build-time validation in CI Lesson 454: Versioning generated HTML Lesson 455: Production-ready HTML checklist Lesson 456: Project β€” Hello World page Lesson 457: Project β€” Personal bio page Lesson 458: Project β€” Contact card with microdata Lesson 459: Project β€” Semantic resume Lesson 460: Project β€” Two-column article layout Lesson 461: Project β€” Article with table of contents Lesson 462: Project β€” FAQ with details/summary Lesson 463: Project β€” Pricing table page Lesson 464: Project β€” Product comparison table Lesson 465: Project β€” Product features list page Lesson 466: Project β€” Landing page skeleton Lesson 467: Project β€” Newsletter signup page Lesson 468: Project β€” Login page Lesson 469: Project β€” Registration form Lesson 470: Project β€” Profile settings form Lesson 471: Project β€” Search results markup Lesson 472: Project β€” Blog index (articles list) Lesson 473: Project β€” Blog post template Lesson 474: Project β€” Comments section markup Lesson 475: Project β€” Gallery page Lesson 476: Project β€” Portfolio grid Lesson 477: Project β€” Lightbox skeleton Lesson 478: Project β€” Video page with tracks Lesson 479: Project β€” Podcast episode + transcript Lesson 480: Project β€” Event page + schedule table Lesson 481: Project β€” Restaurant menu Lesson 482: Project β€” Recipe page Lesson 483: Project β€” Documentation page Lesson 484: Project β€” API reference structure Lesson 485: Project β€” E-commerce product page Lesson 486: Project β€” Cart page Lesson 487: Project β€” Checkout form Lesson 488: Project β€” Order confirmation page Lesson 489: Project β€” Email template Lesson 490: Project β€” Invoice template Lesson 491: Project β€” Admin dashboard skeleton Lesson 492: Project β€” Kanban board markup Lesson 493: Project β€” Multilingual page Lesson 494: Project β€” Accessibility statement Lesson 495: Project β€” 404 Not Found page Lesson 496: Project β€” 500 Error page Lesson 497: Project β€” HTML sitemap page Lesson 498: Project β€” Breadcrumb demo Lesson 499: Project β€” Pagination demo Lesson 500: Project β€” Tabs markup (ARIA pattern) Lesson 501: Project β€” Accordion markup (ARIA/disclosure) Lesson 502: Project β€” Modal dialog markup Lesson 503: Project β€” Status/toast live region Lesson 504: Project β€” Skip link implementation Lesson 505: Project β€” Navbar with dropdowns Lesson 506: Project β€” Sidebar navigation tree Lesson 507: Project β€” Mega menu skeleton Lesson 508: Project β€” Header with breadcrumbs + search Lesson 509: Project β€” Footer with site map Lesson 510: Project β€” Contact page + map iframe Lesson 511: Project β€” Unsubscribe form Lesson 512: Project β€” Preferences center Lesson 513: Project β€” Multi-section survey Lesson 514: Project β€” Quiz page Lesson 515: Project β€” Rating widget Lesson 516: Project β€” Audio playlist page Lesson 517: Project β€” Video playlist page Lesson 518: Project β€” Social embeds page Lesson 519: Project β€” Careers listing page Lesson 520: Project β€” Job application page Lesson 521: Project β€” Help center index Lesson 522: Project β€” Knowledge base article Lesson 523: Project β€” Changelog/release notes page Lesson 524: Project β€” Terms of service page Lesson 525: Project β€” Privacy policy page Lesson 526: Project β€” Cookie consent markup Lesson 527: Project β€” RTL section demo Lesson 528: Project β€” A/B variant landing markup Lesson 529: Project β€” Case study template Lesson 530: Project β€” Multi-step breadcrumb form Lesson 531: Project β€” Newsletter archive index Lesson 532: Project β€” Press/media kit page Lesson 533: Project β€” Author profile page Lesson 534: Project β€” Team directory page Lesson 535: Project β€” Conference schedule Lesson 536: Project β€” Complex tables demo Lesson 537: Project β€” Accessibility statement Lesson 538: Project β€” Resume builder Lesson 539: Project β€” Multi-language site Lesson 540: Project β€” Interactive documentation site Lesson 541: Expert HTML β€” WHATWG Living Standard Lesson 542: Reading spec & MDN efficiently Lesson 543: <dialog> deep dive Lesson 544: popover attribute Lesson 545: popovertarget / popovertargetaction Lesson 546: inert attribute Lesson 547: hidden vs aria-hidden vs inert Lesson 548: Advanced <details> usage Lesson 549: Native lazy-loading strategies Lesson 550: fetchpriority for images/links Lesson 551: decoding attribute for images Lesson 552: referrerpolicy on media/iframes Lesson 553: crossorigin on media assets Lesson 554: <source type> & codecs hints Lesson 555: type="module" + nomodule Lesson 556: Module preloading Lesson 557: Prefetch & prerender hints Lesson 558: <template> patterns Lesson 559: Shadow DOM semantics & accessibility Lesson 560: Custom elements lifecycle Lesson 561: Slots & accessible names Lesson 562: Form-associated custom elements Lesson 563: form attribute (controls outside form) Lesson 564: Button overrides (formaction, etc.) Lesson 565: File input advanced usage Lesson 566: enterkeyhint usage Lesson 567: Full autocomplete token set Lesson 568: autocapitalize nuances Lesson 569: Advanced i18n attributes Lesson 570: translate attribute Lesson 571: Microdata β€” itemscope, itemtype, itemprop Lesson 572: RDFa primer Lesson 573: JSON-LD overview Lesson 574: Link types registry deep dive Lesson 575: rel attributes nuances Lesson 576: <base> with SPA/MPA caveats Lesson 577: Accessibility & Shadow DOM Lesson 578: Print-friendly HTML structures Lesson 579: Email HTML constraints Lesson 580: HTML security checklist Lesson 581: Capstone β€” Multipage personal site Lesson 582: Capstone β€” Blog (index, posts, archives) Lesson 583: Capstone β€” Product marketing site Lesson 584: Capstone β€” Documentation site Lesson 585: Capstone β€” E-commerce prototype Lesson 586: Capstone β€” Portfolio site Lesson 587: Capstone β€” Conference/event site Lesson 588: Capstone β€” Accessible component library Lesson 589: Capstone β€” Multilingual + RTL site Lesson 590: Capstone β€” Media-rich site Lesson 591: Assessment β€” Accessibility audit Lesson 592: Assessment β€” SEO & metadata audit Lesson 593: Assessment β€” Performance pass Lesson 594: Assessment β€” Validation & semantics pass Lesson 595: Portfolio assembly Lesson 596: Case-study writeups Lesson 597: Rebuild a public site’s HTML Lesson 598: Contribute to MDN Lesson 599: Interview prep Lesson 600: Graduation checklist & next steps