HTML - Web Components in HTML

Web Components are a set of modern web technologies that allow developers to create reusable, encapsulated, and custom HTML elements. They help developers build modular user interface components that can work independently across different projects and frameworks.

A Web Component behaves like a normal HTML tag but contains its own structure, style, and functionality. For example, instead of repeatedly writing the same navigation bar, card layout, or modal popup code, developers can create a custom element once and reuse it throughout the application.

Web Components are based on four major technologies:

  1. Custom Elements

  2. Shadow DOM

  3. HTML Templates

  4. ES Modules

Together, these technologies provide a powerful way to create reusable and maintainable frontend applications.


Why Web Components Are Important

Traditional web development often leads to repetitive code. Different developers may create the same UI element in different ways, causing inconsistency and maintenance problems.

Web Components solve these issues by:

  • Promoting code reusability

  • Encapsulating styles and behavior

  • Reducing duplication

  • Improving maintainability

  • Allowing framework-independent development

  • Creating scalable UI systems

They work with plain JavaScript and can also integrate with frameworks like React, Angular, Vue, and Svelte.


Main Features of Web Components

1. Reusable Components

A component can be created once and used multiple times across different pages or applications.

Example:

<user-card></user-card>
<user-card></user-card>

Instead of rewriting the same card structure repeatedly, a custom element called user-card is reused.


2. Encapsulation

Each component can have its own styles and scripts without affecting the rest of the webpage.

This prevents CSS conflicts and JavaScript interference.


3. Custom HTML Tags

Developers can create their own HTML elements.

Examples:

<login-form></login-form>
<product-card></product-card>
<weather-widget></weather-widget>

These are not built-in HTML tags but user-defined custom elements.


4. Framework Independence

Web Components are supported by modern browsers and do not depend on any specific framework.

A component created using Web Components can be used in:

  • React

  • Angular

  • Vue

  • Plain HTML projects


Core Technologies of Web Components

1. Custom Elements

Custom Elements allow developers to define new HTML tags.

A custom element must contain a hyphen (-) in its name.

Valid examples:

<user-profile></user-profile>
<app-header></app-header>

Invalid example:

<profile></profile>

Creating a Custom Element

HTML

<hello-user></hello-user>

JavaScript

class HelloUser extends HTMLElement {
    constructor() {
        super();
        this.innerHTML = "<h2>Welcome User</h2>";
    }
}

customElements.define("hello-user", HelloUser);

Explanation

class HelloUser extends HTMLElement

Creates a new class based on the built-in HTMLElement.

super()

Calls the parent constructor.

customElements.define()

Registers the custom tag.

Syntax:

customElements.define(tagName, className);

Lifecycle Methods in Custom Elements

Custom elements have lifecycle callbacks that execute during different stages.

1. connectedCallback()

Runs when the element is added to the document.

connectedCallback() {
    console.log("Element added");
}

2. disconnectedCallback()

Runs when the element is removed.

disconnectedCallback() {
    console.log("Element removed");
}

3. attributeChangedCallback()

Runs when attributes change.

attributeChangedCallback(name, oldValue, newValue) {
    console.log(name);
}

4. adoptedCallback()

Runs when the element moves to another document.


2. Shadow DOM

Shadow DOM provides encapsulation for HTML, CSS, and JavaScript.

It creates a separate hidden DOM tree attached to an element.

This prevents external styles from affecting the component.


Without Shadow DOM

CSS conflicts may occur.

Example:

<style>
h1 {
    color: red;
}
</style>

All <h1> elements become red.


With Shadow DOM

Styles remain isolated.

Example

class MyComponent extends HTMLElement {
    constructor() {
        super();

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

        shadow.innerHTML = `
            <style>
                h1 {
                    color: blue;
                }
            </style>

            <h1>Shadow DOM Heading</h1>
        `;
    }
}

customElements.define("my-component", MyComponent);

Explanation

attachShadow()

Creates a shadow root.

mode: "open"

Allows JavaScript access to the shadow DOM.

There are two modes:

Mode Description
open Accessible from JavaScript
closed Hidden from external access

Advantages of Shadow DOM

  • Prevents CSS leakage

  • Avoids style conflicts

  • Encapsulates functionality

  • Improves component reliability


3. HTML Templates

The <template> element stores reusable HTML code that is not rendered immediately.


Example

<template id="cardTemplate">
    <div class="card">
        <h2>User Name</h2>
    </div>
</template>

The content remains hidden until activated using JavaScript.


Using the Template

const template = document.getElementById("cardTemplate");

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

document.body.appendChild(clone);

Explanation

cloneNode(true)

Copies the entire template content.

appendChild()

Adds the cloned content to the webpage.


Benefits of Templates

  • Reusable UI structures

  • Cleaner HTML

  • Improved performance

  • Dynamic rendering support


4. ES Modules

ES Modules allow JavaScript code to be split into separate reusable files.


Example

component.js

export class MyComponent extends HTMLElement {
}

app.js

import { MyComponent } from "./component.js";

Benefits of ES Modules

  • Better code organization

  • Reusability

  • Easier maintenance

  • Modular architecture


Real-World Applications of Web Components

Web Components are widely used for building reusable UI elements such as:

  • Navigation bars

  • Product cards

  • Chat widgets

  • Modal windows

  • Image sliders

  • Notification systems

  • Dashboards

  • Form controls

Large companies use component-based architectures to maintain consistency across applications.


Advantages of Web Components

Advantage Description
Reusability Write once and use anywhere
Encapsulation Protects styles and scripts
Maintainability Easier to update components
Framework Independent Works with any frontend library
Scalability Suitable for large applications
Cleaner Code Reduces duplication

Limitations of Web Components

Limitation Description
Browser Compatibility Issues Older browsers may need polyfills
Learning Curve Requires understanding of DOM APIs
SEO Concerns Some rendering issues in older systems
Complexity Can become difficult in large-scale applications

Difference Between Traditional HTML and Web Components

Traditional HTML Web Components
Repetitive code Reusable elements
Global CSS conflicts Encapsulated styling
Limited modularity Highly modular
Harder maintenance Easier maintenance
Plain HTML structure Dynamic custom elements

Example of a Complete Web Component

<!DOCTYPE html>
<html>
<head>
    <title>Web Component Example</title>
</head>
<body>

<user-card></user-card>

<script>
class UserCard extends HTMLElement {

    constructor() {
        super();

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

        shadow.innerHTML = `
            <style>
                .card {
                    border: 1px solid gray;
                    padding: 20px;
                    width: 200px;
                    border-radius: 10px;
                }

                h2 {
                    color: blue;
                }
            </style>

            <div class="card">
                <h2>John Doe</h2>
                <p>Frontend Developer</p>
            </div>
        `;
    }
}

customElements.define("user-card", UserCard);
</script>

</body>
</html>

How This Example Works

  1. A custom element named <user-card> is created.

  2. Shadow DOM isolates the component styles.

  3. Internal HTML is inserted dynamically.

  4. The component appears like a regular HTML element.


Browser Support

Modern browsers support Web Components:

  • Google Chrome

  • Microsoft Edge

  • Firefox

  • Safari

Older browsers may require polyfills.


Best Practices for Web Components

  • Use meaningful custom element names

  • Keep components small and focused

  • Avoid deeply nested components

  • Use Shadow DOM for encapsulation

  • Separate logic into modules

  • Reuse templates when possible


Conclusion

Web Components are a modern approach to building reusable and modular web interfaces. They allow developers to create custom HTML elements with isolated styles and behaviors. By combining Custom Elements, Shadow DOM, Templates, and ES Modules, developers can create scalable applications with cleaner and more maintainable code.

They are especially useful in large projects where consistency, reusability, and maintainability are important. As modern web applications continue to grow in complexity, Web Components have become an essential technology in frontend development.