HTML · Advanced HTML Concepts · Lesson 28 of 32

Advanced HTML Concepts

Advanced HTML Concepts

Advanced HTML goes beyond basic elements such as headings, paragraphs, links, images, tables, and forms. It introduces features that help developers build more interactive, reusable, accessible, and maintainable webpages.

Many advanced HTML features work together with CSS and JavaScript. HTML provides the document structure and semantics, CSS controls presentation, and JavaScript provides behavior where required.

Key Principle:

Use HTML for structure and meaning first. Add CSS for presentation and JavaScript for behavior.

1. Custom Data Attributes

HTML provides data-* attributes for storing custom information on elements.

Syntax

<element data-name="value">
    Content
</element>

Example

<article
    class="course-card"
    data-course-id="HTML101"
    data-level="beginner">

    <h2>HTML Fundamentals</h2>

</article>

The browser stores these values as custom data associated with the element.

Accessing Data with JavaScript

const course = document.querySelector(".course-card");

console.log(course.dataset.courseId);
console.log(course.dataset.level);
Tip:

Use data attributes for information that belongs to an element and may need to be accessed by scripts. Do not use them as a replacement for meaningful semantic HTML.

2. The <details> and <summary> Elements

HTML provides built-in elements for creating expandable sections without requiring JavaScript.

Example

<details>

    <summary>
        What is HTML?
    </summary>

    <p>
        HTML is the standard markup language used
        to structure webpages.
    </p>

</details>

The user can expand or collapse the content.

Initially Open

<details open>

    <summary>
        Course Information
    </summary>

    <p>
        This section is visible initially.
    </p>

</details>
Advantage:

This is preferable to creating a custom expandable widget from scratch when the required behavior matches the native HTML element.

3. The <dialog> Element

The <dialog> element represents a dialog or modal-like interactive component.

Basic Example

<dialog id="courseDialog">

    <h2>Course Information</h2>

    <p>
        HTML Fundamentals is a beginner-level course.
    </p>

    <button type="button">
        Close
    </button>

</dialog>

JavaScript can control the dialog's interactive behavior.

const dialog = document.querySelector("#courseDialog");

dialog.showModal();

A modal dialog can be closed through JavaScript:

dialog.close();
Accessibility Consideration:

Dialogs should have a clear purpose, meaningful headings, accessible controls, and a predictable keyboard interaction. Do not use dialogs for information that could simply be displayed on the page.

4. Editable Content with contenteditable

The contenteditable global attribute allows an element's content to be edited by the user.

Example

<p contenteditable="true">
    Click here and edit this text.
</p>

This can be useful for prototypes, editors, notes, and interactive interfaces.

Important:

contenteditable does not automatically provide a complete document editor. Saving, sanitizing, formatting, validation, and security must be handled appropriately.

5. The hidden Attribute

The hidden attribute indicates that an element is not currently relevant or should not be presented.

<p hidden>
    This content is currently hidden.
</p>

JavaScript can remove or add the attribute:

element.hidden = false;

This makes the element available for display again.

Tip:

Use hidden for content that is intentionally not currently relevant. Do not use it merely as a general substitute for CSS visibility techniques.

6. The <template> Element

The <template> element contains HTML that is not rendered immediately. JavaScript can later clone its contents and insert them into the document.

Example

<template id="courseTemplate">

    <article class="course-card">

        <h2 class="course-title"></h2>

        <p class="course-description"></p>

    </article>

</template>

JavaScript can access the template:

const template =
    document.querySelector("#courseTemplate");

const clone =
    template.content.cloneNode(true);

The cloned content can then be modified and inserted into the document.

Why use templates?

Templates are useful when the same HTML structure must be generated repeatedly, such as course cards, product cards, notifications, or table rows.

7. The <slot> Element

The <slot> element is associated with Web Components and Shadow DOM. It provides a placeholder where content supplied by the component user can be inserted.

Conceptual Example

<slot name="title">
    Default Title
</slot>

A component user can provide content for the named slot.

<span slot="title">
    HTML Fundamentals
</span>
Remember:

Slots are primarily encountered when working with Web Components and Shadow DOM.

8. Web Components

Web Components are browser technologies that allow developers to create reusable custom HTML elements.

The main technologies commonly associated with Web Components are:

  1. Custom Elements
  2. Shadow DOM
  3. HTML Templates
  4. Slots

Example Custom Element

<course-card></course-card>

JavaScript can define what this custom element does.

class CourseCard extends HTMLElement {

    connectedCallback() {

        this.innerHTML = `
            <article>
                <h2>HTML Fundamentals</h2>
                <p>Beginner course</p>
            </article>
        `;

    }

}

customElements.define("course-card", CourseCard);
Custom Element Naming Rule:

Custom element names must contain a hyphen, such as <course-card>.

9. Shadow DOM

The Shadow DOM provides an encapsulated DOM tree for a Web Component.

This can help prevent component markup and styles from unintentionally interfering with the surrounding document.

Example

class CourseCard extends HTMLElement {

    constructor() {

        super();

        const shadow =
            this.attachShadow({ mode: "open" });

        shadow.innerHTML = `
            <style>
                :host {
                    display: block;
                }
            </style>

            <article>
                <h2>HTML Fundamentals</h2>
            </article>
        `;

    }

}
Important Distinction:

The Shadow DOM is not the same as the regular DOM. It provides a separate DOM boundary associated with a component.

10. Custom Elements

Custom Elements allow developers to define their own HTML elements with custom behavior.

class LearningCard extends HTMLElement {

    connectedCallback() {

        this.innerHTML = `
            <h2>Learning HTML</h2>
            <p>Build webpages using semantic markup.</p>
        `;

    }

}

customElements.define(
    "learning-card",
    LearningCard
);

The custom element can then be used as normal HTML:

<learning-card></learning-card>

11. Custom Element Lifecycle

Custom Elements provide lifecycle callbacks that allow components to respond to changes in their environment.

Callback Purpose
connectedCallback() Runs when the element is connected to the document.
disconnectedCallback() Runs when the element is removed from the document.
attributeChangedCallback() Responds to changes in observed attributes.
adoptedCallback() Runs when the element is moved to a new document.

12. Observed Attributes

A custom element can monitor selected attributes by defining observedAttributes.

class CourseCard extends HTMLElement {

    static observedAttributes = ["level"];

    attributeChangedCallback(
        name,
        oldValue,
        newValue
    ) {

        console.log(
            name,
            oldValue,
            newValue
        );

    }

}

The browser can then notify the component when the observed attribute changes.

13. Global HTML Attributes

Some attributes can be used on many HTML elements.

Attribute Purpose
id Provides a unique identifier.
class Associates an element with one or more classes.
title Provides advisory information.
hidden Indicates that content is currently hidden.
lang Specifies the language of content.
dir Specifies text direction.
contenteditable Allows content editing.
draggable Controls draggable behavior.
spellcheck Indicates whether spelling may be checked.
tabindex Controls keyboard focus behavior.

14. Keyboard Focus with tabindex

The tabindex attribute controls whether an element can receive keyboard focus and its position in sequential keyboard navigation.

Example

<button tabindex="0">
    Continue
</button>
Accessibility Warning:

Avoid using positive tabindex values merely to force a preferred tab order. Poor focus management can make a webpage difficult to navigate using a keyboard.

15. Language and Direction

The lang attribute identifies the language of content.

<html lang="en">

Text direction can be specified using dir.

<p dir="rtl">
    Right-to-left content
</p>

Correct language information improves accessibility, search interpretation, pronunciation and internationalization.

16. Responsive Images with <picture>

The <picture> element allows different image resources to be selected based on conditions such as viewport characteristics.

<picture>

    <source
        media="(max-width: 600px)"
        srcset="images/course-mobile.jpg">

    <source
        media="(min-width: 601px)"
        srcset="images/course-desktop.jpg">

    <img
        src="images/course-default.jpg"
        alt="HTML course">

</picture>
Tip:

Always provide a meaningful alt attribute on the fallback <img> when the image conveys information.

17. Responsive Images with srcset

The srcset attribute allows the browser to choose from multiple image resources.

<img
    src="images/course-800.jpg"
    srcset="
        images/course-400.jpg 400w,
        images/course-800.jpg 800w,
        images/course-1200.jpg 1200w
    "
    sizes="
        (max-width: 600px) 100vw,
        50vw
    "
    alt="HTML course">

This can help browsers select an appropriate image resource based on available conditions.

18. Lazy Loading

The loading attribute can provide a hint that certain resources can be loaded lazily.

<img
    src="images/course.jpg"
    alt="HTML course"
    loading="lazy">

Lazy loading can reduce unnecessary initial resource loading for appropriate content.

Performance Tip:

Do not blindly lazy-load every image. Important above-the- fold content may need to be available immediately.

19. Resource Loading Hints

Modern HTML provides mechanisms that can influence how resources are discovered and loaded.

Examples include:

  • preload
  • prefetch
  • preconnect
  • dns-prefetch

Example

<link
    rel="preconnect"
    href="https://example.com">
Important:

Loading hints should be used based on actual performance requirements. Adding unnecessary hints can increase network overhead instead of improving performance.

20. The download Attribute

The download attribute can indicate that a linked resource is intended to be downloaded rather than navigated to.

<a
    href="resources/html-reference.pdf"
    download>

    Download HTML Reference

</a>

Actual behavior can depend on the browser and resource configuration.

21. The <output> Element

The <output> element represents the result of a calculation or user action.

<form>

    <label for="quantity">
        Quantity
    </label>

    <input
        id="quantity"
        type="number"
        value="2">

    <output>
        20
    </output>

</form>

JavaScript can update the output when the input changes.

22. The <meter> Element

The <meter> element represents a scalar measurement within a known range.

<label for="storage">
    Storage Usage
</label>

<meter
    id="storage"
    min="0"
    max="100"
    value="72">

    72%

</meter>

It is appropriate for measurements such as usage levels or scores when the minimum and maximum values are meaningful.

23. The <progress> Element

The <progress> element represents the completion progress of a task.

<label for="course-progress">
    Course Progress
</label>

<progress
    id="course-progress"
    value="65"
    max="100">

    65%

</progress>
Element Purpose
<progress> Progress toward completion of a task.
<meter> A measurement within a known range.

24. The <datalist> Element

The <datalist> element provides suggested values for an input.

<label for="language">
    Programming Language
</label>

<input
    id="language"
    list="languages"
    name="language">

<datalist id="languages">

    <option value="Python"></option>
    <option value="JavaScript"></option>
    <option value="Java"></option>
    <option value="C++"></option>

</datalist>
Remember:

A datalist provides suggestions; it is not equivalent to a strict selection control such as <select>.

25. Prefer Native HTML When Appropriate

Modern browsers provide many built-in HTML capabilities. Developers should use native elements where they meet the requirement.

Requirement Prefer
Expandable information <details>
Form submission Native <form>
Heading structure <h1><h6>
Navigation <nav>
Page main content <main>
Button interaction <button>
Dialog interface <dialog> where appropriate
Principle:

Do not recreate native HTML behavior with unnecessary div elements and JavaScript.

26. Progressive Enhancement

Progressive enhancement means starting with a solid basic experience and then adding enhanced functionality for browsers or users that support it.

Example

Start with a normal HTML form:

<form action="/search" method="get">

    <label for="query">
        Search
    </label>

    <input
        id="query"
        name="q"
        type="search">

    <button type="submit">
        Search
    </button>

</form>

JavaScript can later enhance the experience with live search or other functionality without making the basic form structure meaningless.

27. Graceful Degradation

Graceful degradation focuses on maintaining a usable experience when advanced features are unavailable or fail.

A professional webpage should not become completely unusable merely because an enhancement fails.

Example:

If JavaScript-enhanced navigation fails, a basic HTML navigation structure should still provide meaningful links wherever practical.

28. Structured Data and Microdata

HTML can contain structured information that describes entities and their properties.

Microdata uses attributes such as:

  • itemscope
  • itemtype
  • itemprop

Conceptual Example

<article
    itemscope
    itemtype="https://schema.org/Course">

    <h2 itemprop="name">
        HTML Fundamentals
    </h2>

    <p itemprop="description">
        Learn modern HTML from fundamentals to advanced concepts.
    </p>

</article>
Note:

Structured data is intended to describe content meaningfully. It should accurately represent the visible content and should not be used to manipulate search results.

29. Custom Element vs <div>

<div> Custom Element
Generic container. Represents a reusable custom component.
Has no inherent semantic meaning. Can encapsulate custom behavior.
Usually relies on classes and scripts. Can have its own component lifecycle.
Useful for generic grouping. Useful for reusable application components.

30. Choosing the Right HTML Feature

Requirement Suitable HTML Feature
Custom information attached to an element data-*
Expandable content <details> + <summary>
Modal dialog <dialog>
Reusable HTML fragment <template>
Custom reusable component Web Components
Component encapsulation Shadow DOM
Suggested input values <datalist>
Task completion <progress>
Measurement within a range <meter>
Responsive image selection <picture> / srcset

31. Interview Questions

1. What are data attributes in HTML?

View Answer

Data attributes are custom data-* attributes used to associate application-specific information with HTML elements.

2. What is the purpose of the <template> element?

View Answer

It stores HTML content that is not rendered immediately and can later be cloned and inserted into the document, commonly through JavaScript.

3. What are Web Components?

View Answer

Web Components are browser technologies for creating reusable custom elements and components using technologies such as Custom Elements, Shadow DOM, templates and slots.

4. What is Shadow DOM?

View Answer

Shadow DOM provides an encapsulated DOM tree associated with a component, helping isolate its internal structure and styles from the surrounding document.

5. What is the difference between <progress> and <meter>?

View Answer

<progress> represents completion of a task, whereas <meter> represents a scalar measurement within a known range.

6. Why should native HTML elements be preferred over custom JavaScript widgets when appropriate?

View Answer

Native elements generally provide built-in browser behavior, semantics, keyboard interaction and accessibility support, reducing unnecessary complexity.

7. What is progressive enhancement?

View Answer

It is an approach in which a functional basic experience is provided first and additional capabilities are added for environments that support them.

8. Why are custom element names required to contain a hyphen?

View Answer

The naming requirement distinguishes custom elements from standard HTML elements and provides a namespace-like convention for custom element names.

32. Exam Questions

Q1. What is the purpose of the data-* attribute?

Answer

It stores custom application-specific information on an HTML element.

Q2. Write an HTML example using <details> and <summary>.

Answer
<details>

    <summary>
        Learn More
    </summary>

    <p>
        Additional information is available here.
    </p>

</details>

Q3. Differentiate between <progress> and <meter>.

Answer

<progress> represents the completion of a task, while <meter> represents a measurement within a known range.

Q4. What are the main technologies used in Web Components?

Answer

Custom Elements, Shadow DOM, HTML Templates and Slots.

Q5. Explain the purpose of the <template> element.

Answer

It defines reusable HTML content that is not rendered immediately. Its contents can be cloned and inserted into the document when required.

33. Practical Activity — Build a Reusable Course Card

Create a reusable custom HTML component representing a course.

HTML

<course-card></course-card>

<course-card></course-card>

JavaScript

class CourseCard extends HTMLElement {

    connectedCallback() {

        const title =
            this.getAttribute("title") ||
            "HTML Fundamentals";

        const level =
            this.getAttribute("level") ||
            "Beginner";

        this.innerHTML = `
            <article class="course-card">

                <h2>${title}</h2>

                <p>
                    Level: ${level}
                </p>

            </article>
        `;

    }

}

customElements.define(
    "course-card",
    CourseCard
);

Use

<course-card
    title="HTML Fundamentals"
    level="Beginner">
</course-card>

<course-card
    title="Advanced HTML"
    level="Advanced">
</course-card>
Learning Outcome:

The activity demonstrates how HTML custom elements can provide reusable structures instead of repeatedly writing the same markup.

34. Advanced HTML Best Practices

  1. Prefer semantic HTML over generic containers.
  2. Use native HTML functionality before creating custom widgets.
  3. Use data-* attributes for appropriate custom data.
  4. Use Web Components when reusable custom components genuinely add value.
  5. Do not use custom elements simply to make ordinary markup look sophisticated.
  6. Keep accessibility in mind when creating custom components.
  7. Provide meaningful keyboard interaction.
  8. Use responsive image techniques where appropriate.
  9. Do not overuse JavaScript for functionality already supported by HTML.
  10. Validate and test advanced markup across relevant browsers.
  11. Keep the DOM understandable and maintainable.
  12. Document complex custom components clearly.

35. Quick Revision

Concept Key Point
data-* Stores custom data on an element.
<details> Creates expandable content.
<dialog> Represents a dialog interface.
contenteditable Makes content editable.
<template> Stores reusable, non-rendered HTML.
Custom Elements Create reusable custom HTML elements.
Shadow DOM Provides DOM encapsulation for components.
<slot> Provides content insertion points in components.
<picture> Supports responsive image selection.
srcset Provides multiple image resources.
<progress> Shows task completion progress.
<meter> Shows a measurement within a known range.
<datalist> Provides suggested input values.
Progressive Enhancement Build a functional base and enhance it progressively.
Golden Rule:

Semantic HTML first → Native HTML features second → CSS for presentation → JavaScript for behavior → Web Components when reusable custom behavior is justified.