FREE PREVIEW

You're viewing a free preview

This is a sample of 15 questions from our full collection of 37 interview questions.

Unlock all 37 questions with detailed explanations and code examples

Get Full Access

HTML5 Fundamentals

Which new structural content elements were introduced in HTML5 and how do they enhance document semantics?

HTML5 introduced several new structural elements that enhance document semantics:

  • <header> - Represents introductory content or navigation aids
  • <nav> - Defines navigation links
  • <main> - Specifies the main content area of a document
  • <section> - Represents a thematic grouping of content
  • <article> - Defines independent, self-contained content
  • <aside> - Contains content tangentially related to the main content
  • <footer> - Represents footer information for its nearest sectioning content
  • <figure> and <figcaption> - For self-contained content with optional captions
  • <details> and <summary> - For disclosure widgets
  • <time> - Represents dates and times

These elements enhance semantics by providing clear meaning to content sections, making documents more accessible to screen readers, search engines, and other assistive technologies.

References:

↑ Back to top

How does HTML5 provide better compatibility with modern browsers and what backwards compatibility strategies are employed?

HTML5 provides better compatibility through:

Modern Browser Support:

  • Progressive enhancement - core functionality works in all browsers, enhanced features in modern ones
  • Feature detection rather than browser detection
  • Graceful degradation for unsupported features
  • Standardized APIs that work consistently across browsers

Backwards Compatibility Strategies:

  1. Polyfills - JavaScript libraries that implement HTML5 features in older browsers
  2. Modernizr - feature detection library for conditional loading
  3. HTML5 Shiv - enables HTML5 semantic elements in IE8 and below
  4. Fallback content - alternative content for unsupported features
<!-- Example of fallback content -->
<video controls>
  <source src="movie.mp4" type="video/mp4">
  <source src="movie.ogg" type="video/ogg">
  Your browser does not support the video tag.
</video>

References:

↑ Back to top

Semantic Elements

What are the most commonly used semantic elements in HTML5 and what content do they represent?

The most commonly used HTML5 semantic elements include:

<header> - Introductory content, site branding, navigation, or heading information <nav> - Navigation links for the document or section <main> - Primary content area of the document <section> - Thematic grouping of content, typically with a heading <article> - Independent, self-contained content (blog posts, news articles) <aside> - Content tangentially related to main content (sidebars, pull quotes) <footer> - Footer information for document or section <figure> - Self-contained content like images, diagrams, code listings <figcaption> - Caption for figure elements <time> - Dates, times, or time periods

Usage Example:

<header>
  <h1>Site Title</h1>
  <nav>
    <ul>
      <li><a href="#home">Home</a></li>
      <li><a href="#about">About</a></li>
    </ul>
  </nav>
</header>

<main>
  <article>
    <h2>Article Title</h2>
    <time datetime="2023-01-15">January 15, 2023</time>
    <p>Article content...</p>
  </article>
</main>

<aside>
  <h3>Related Links</h3>
  <ul>...</ul>
</aside>

<footer>
  <p>&copy; 2023 Company Name</p>
</footer>

References:

↑ Back to top

Form Enhancements

What new input types were introduced in HTML5 (e.g., mobile-friendly inputs) and how do they improve user experience?

HTML5 introduced several new input types that significantly enhance user experience, particularly on mobile devices:

Mobile-Friendly Input Types:

  • email - Displays email-optimized keyboard with @ symbol
  • tel - Shows numeric keypad for phone numbers
  • url - Provides URL-optimized keyboard with .com shortcuts
  • number - Displays numeric keypad with increment/decrement controls
  • search - Offers search-specific styling and clear button

Date and Time Inputs:

  • date - Native date picker interface
  • time - Time selection widget
  • datetime-local - Combined date and time picker
  • month - Month and year selection
  • week - Week selection

Range and Color:

  • range - Slider control for numeric ranges
  • color - Color picker interface

User Experience Improvements:

  • Mobile keyboards automatically adapt to input type
  • Native validation reduces JavaScript dependencies
  • Accessibility benefits with proper semantic meaning
  • Consistent UI across different browsers and devices
  • Better form completion with appropriate input methods
<input type="email" placeholder="Enter your email">
<input type="tel" placeholder="Phone number">
<input type="date" name="birthday">
<input type="range" min="0" max="100" value="50">

References:

↑ Back to top

How can you implement fallback behavior for browsers that don't support specific HTML5 form features?

Implementing fallback behavior ensures compatibility across all browsers:

Feature Detection:

// Check if browser supports input type
function supportsInputType(type) {
    var input = document.createElement('input');
    input.type = type;
    return input.type === type;
}

if (!supportsInputType('date')) {
    // Load date picker library
    loadDatePicker();
}

Progressive Enhancement Strategies:

1. Modernizr Library:

if (!Modernizr.inputtypes.date) {
    $('input[type="date"]').datepicker();
}

2. CSS Fallbacks:

input[type="range"] {
    /* Fallback styles */
    -webkit-appearance: none;
    width: 100%;
}

/* Style for unsupported browsers */
input[type="range"]::-webkit-slider-thumb {
    -webkit-appearance: none;
    height: 20px;
    width: 20px;
    border-radius: 50%;
    background: #04AA6D;
    cursor: pointer;
}

3. JavaScript Polyfills:

// Date input fallback
if (!supportsInputType('date')) {
    document.querySelectorAll('input[type="date"]').forEach(function(input) {
        input.type = 'text';
        input.placeholder = 'MM/DD/YYYY';
        // Add date validation
        input.addEventListener('blur', validateDate);
    });
}

4. Server-Side Validation: Always implement server-side validation as the ultimate fallback, regardless of client-side capabilities.

References:

↑ Back to top

Offline Mode and Data Storage Mechanisms

What are the differences between localStorage and sessionStorage, and how do they compare to traditional cookies?

Storage Duration:

  • localStorage: Persists until explicitly cleared by user or application
  • sessionStorage: Clears when the browser tab is closed
  • Cookies: Can be session-based or persistent with expiration dates

Storage Capacity:

  • localStorage/sessionStorage: ~5-10MB per origin (browser-dependent)
  • Cookies: Limited to ~4KB per cookie

Scope and Accessibility:

  • localStorage: Shared across all tabs/windows of the same origin
  • sessionStorage: Isolated to the specific tab/window
  • Cookies: Shared across all tabs/windows, sent with HTTP requests

Network Transmission:

  • localStorage/sessionStorage: Client-side only, not sent to server
  • Cookies: Automatically sent with every HTTP request to the domain

API Differences:

// localStorage/sessionStorage - Simple key-value API
localStorage.setItem('key', 'value');
localStorage.getItem('key');
localStorage.removeItem('key');

// Cookies - More complex, often requiring helper functions
document.cookie = "key=value; expires=Thu, 18 Dec 2025 12:00:00 UTC; path=/";

References:

↑ Back to top

In what scenarios might IndexedDB be more advantageous than localStorage?

Large Data Storage:

  • IndexedDB: Can store much larger amounts of data (limited by available disk space)
  • localStorage: Limited to ~5-10MB per origin
  • Scenario: Applications handling large datasets, offline document editing, or media files

Complex Data Structures:

  • IndexedDB: Native support for objects, arrays, and complex data types
  • localStorage: Only stores strings (requires JSON serialization)
  • Scenario: Applications with complex data models, nested objects, or binary data

Asynchronous Operations:

  • IndexedDB: Non-blocking, asynchronous API
  • localStorage: Synchronous, can block the main thread
  • Scenario: Applications requiring smooth user experience without UI freezing

Advanced Querying:

// IndexedDB - Complex queries with indexes
const transaction = db.transaction(['users'], 'readonly');
const store = transaction.objectStore('users');
const index = store.index('email');
const request = index.get('user@example.com');

// localStorage - Manual filtering required
const users = JSON.parse(localStorage.getItem('users') || '[]');
const user = users.find(u => u.email === 'user@example.com');

Transactional Support:

  • IndexedDB: ACID transactions for data integrity
  • localStorage: No transaction support
  • Scenario: Applications requiring data consistency across multiple operations

Better Performance for Large Datasets:

  • IndexedDB: Optimized for large data operations with indexing
  • localStorage: Performance degrades with large JSON serialization/parsing
  • Scenario: Applications with frequent data access patterns or large result sets

Use Cases Where IndexedDB Excels:

  • Offline-first applications
  • Progressive Web Apps (PWAs)
  • Games with save states and progress tracking
  • Document editors with version history
  • Media applications storing metadata
  • E-commerce applications with product catalogs

References:

↑ Back to top

Canvas and Graphics

What is the role of the <canvas> element in HTML5 and what are its primary use cases?

The <canvas> element is a powerful HTML5 feature that provides a drawable region defined in HTML code with height and width attributes. It serves as a container for graphics that are drawn using JavaScript APIs, essentially creating a bitmap drawing surface within web pages.

Primary use cases include:

  • Data visualization: Creating charts, graphs, and interactive dashboards
  • Game development: Building 2D and WebGL-based 3D games
  • Image editing: Developing web-based photo editors and filters
  • Real-time graphics: Drawing animations, particle systems, and dynamic visual effects
  • Digital art applications: Creating drawing and painting tools
  • Scientific simulations: Visualizing mathematical models and scientific data
  • Custom UI components: Building specialized interactive widgets

Key characteristics:

  • Immediate mode graphics system (pixels are drawn directly)
  • Scriptable through JavaScript APIs
  • Resolution-dependent bitmap rendering
  • Supports both 2D and 3D (WebGL) contexts

References:

↑ Back to top

What are the differences between using <canvas> and <svg> for vector graphics and animations?

Canvas characteristics:

  • Raster-based: Immediate mode, pixel-based rendering
  • JavaScript-driven: Requires scripting for all operations
  • Performance: Better for complex scenes with many objects
  • Interactivity: Manual hit detection and event handling
  • Scalability: Resolution-dependent, can become pixelated
  • DOM integration: Single DOM element, no individual object manipulation

SVG characteristics:

  • Vector-based: Retained mode, mathematical descriptions
  • Declarative: Can be styled with CSS and animated with CSS/SMIL
  • DOM integration: Each element is a DOM node with events
  • Scalability: Resolution-independent, scales perfectly
  • Accessibility: Better screen reader support
  • File size: Efficient for simple graphics, can become large with complexity

Comparison table:

Aspect Canvas SVG
Rendering Immediate mode (raster) Retained mode (vector)
Performance Better for complex animations Better for simple graphics
Interactivity Manual event handling Built-in DOM events
Scalability Resolution-dependent Resolution-independent
Styling JavaScript only CSS + JavaScript
Accessibility Limited Good screen reader support
File Size Consistent Varies with complexity

Use Canvas when:

  • Building games or complex animations
  • Processing large amounts of data
  • Creating image editing tools
  • Working with real-time graphics

Use SVG when:

  • Creating scalable icons or logos
  • Building interactive data visualizations
  • Needing good accessibility support
  • Working with simple to moderate complexity graphics

References:

↑ Back to top

Advanced Topics and Performance

What is the purpose of the <picture> element and how does it help in creating responsive images?

The <picture> element provides a container for multiple image sources, enabling responsive image delivery based on device characteristics, screen size, and display capabilities.

Key Benefits:

  • Art Direction: Serve different image crops or compositions for different screen sizes
  • Resolution Switching: Provide high-DPI images for retina displays while serving standard images for regular displays
  • Format Fallbacks: Deliver modern formats (WebP, AVIF) with fallbacks to older formats (JPEG, PNG)
  • Bandwidth Optimization: Reduce data usage by serving appropriately sized images

Implementation Example:

<picture>
  <source media="(min-width: 800px)" srcset="large.webp" type="image/webp">
  <source media="(min-width: 400px)" srcset="medium.webp" type="image/webp">
  <source media="(min-width: 800px)" srcset="large.jpg">
  <source media="(min-width: 400px)" srcset="medium.jpg">
  <img src="small.jpg" alt="Description">
</picture>

How It Works: The browser evaluates <source> elements in order, selecting the first one that matches the media query and format support, with the <img> element serving as the fallback.

References:

↑ Back to top

Audio and Video

What are the main differences between using <audio> and <video> elements versus plugins (such as Flash)?

The HTML5 <audio> and <video> elements provide significant advantages over traditional plugins like Flash:

HTML5 Audio/Video Elements:

  • Native browser support: No additional plugins required, reducing security vulnerabilities and installation barriers
  • Performance: Hardware acceleration and optimized rendering directly in the browser
  • Accessibility: Built-in support for screen readers and keyboard navigation
  • Mobile compatibility: Works seamlessly on mobile devices where Flash is not supported
  • Standards compliance: Part of open web standards, ensuring long-term compatibility
  • JavaScript integration: Easy manipulation through DOM APIs and events
  • Responsive design: Naturally adapts to different screen sizes and orientations

Plugin-based solutions (Flash):

  • Legacy dependency: Requires separate plugin installation and maintenance
  • Security concerns: Frequent security updates and potential attack vectors
  • Performance overhead: Additional abstraction layer between content and browser
  • Limited mobile support: Most mobile platforms don't support Flash
  • Proprietary technology: Dependent on vendor-specific implementations

References:

↑ Back to top

Which video formats are commonly supported by the <video> element and why is it often necessary to provide multiple source formats?

Commonly supported video formats:

  • MP4 (H.264/AVC): Widely supported across all modern browsers and devices
  • WebM (VP8/VP9): Open-source format with good compression, supported by Chrome, Firefox, and Edge
  • Ogg Theora: Open-source format primarily supported by Firefox and Chrome

Browser support varies:

  • Chrome/Edge: MP4, WebM, Ogg
  • Firefox: MP4, WebM, Ogg
  • Safari: MP4 (primary), limited WebM support
  • Mobile browsers: Primarily MP4 with varying WebM support

Why multiple formats are necessary:

  1. Patent and licensing issues: Different browsers have varying support due to licensing restrictions
  2. Performance optimization: Some formats provide better compression for specific use cases
  3. Quality vs. file size trade-offs: Different codecs excel in different scenarios
  4. Legacy browser support: Older browsers may only support specific formats

Best practice implementation:

<video controls>
  <source src="video.webm" type="video/webm">
  <source src="video.mp4" type="video/mp4">
  <source src="video.ogv" type="video/ogg">
  <p>Your browser doesn't support the video tag.</p>
</video>

References:

↑ Back to top

Accessibility and Best Practices

What role do aria-* attributes play and when should they be used?

ARIA (Accessible Rich Internet Applications) attributes provide additional semantic information to assistive technologies when native HTML semantics are insufficient or unavailable. They bridge the gap between complex web applications and accessibility requirements.

Key ARIA attribute categories:

  • Roles: Define what an element is or does (e.g., role="button", role="dialog")
  • Properties: Describe element properties (e.g., aria-required="true", aria-label="Close dialog")
  • States: Describe current conditions (e.g., aria-expanded="false", aria-hidden="true")

When to use ARIA attributes:

  • When semantic HTML elements don't exist for the required functionality
  • For dynamic content that changes without page refresh
  • To provide additional context or instructions
  • When customizing existing elements beyond their semantic meaning
  • For complex UI components like accordions, tabs, or modals

Important principle: Use semantic HTML first, then enhance with ARIA when necessary. ARIA should supplement, not replace, proper HTML structure.

References:

↑ Back to top

Advanced/Tricky Questions

In what scenarios would you use the <template> element?

The <template> element holds HTML fragments that are not rendered when the page loads but can be instantiated later via JavaScript. Key scenarios include:

1. Dynamic Content Generation:

<template id="user-card-template">
    <div class="user-card">
        <img class="avatar" src="" alt="">
        <h3 class="name"></h3>
        <p class="email"></p>
    </div>
</template>

2. Repeating UI Components:

const template = document.getElementById('user-card-template');
const container = document.getElementById('users-container');

users.forEach(user => {
    const clone = template.content.cloneNode(true);
    clone.querySelector('.avatar').src = user.avatar;
    clone.querySelector('.name').textContent = user.name;
    clone.querySelector('.email').textContent = user.email;
    container.appendChild(clone);
});

3. Web Components and Custom Elements:

class UserCard extends HTMLElement {
    constructor() {
        super();
        const template = document.getElementById('user-card-template');
        const shadowRoot = this.attachShadow({mode: 'open'});
        shadowRoot.appendChild(template.content.cloneNode(true));
    }
}

4. Client-side Templating:

  • Avoiding string concatenation for HTML generation
  • Better performance than innerHTML manipulation
  • Maintaining proper DOM structure

References:

↑ Back to top

What is the purpose of the draggable attribute in HTML5 and how can you implement drag-and-drop functionality?

The draggable attribute in HTML5 makes elements draggable by users. It accepts three values:

  • true - element is draggable
  • false - element is not draggable
  • auto - browser determines if element should be draggable (default)

To implement drag-and-drop functionality, you need to handle several events:

// Make element draggable
const dragElement = document.getElementById('drag-item');
dragElement.draggable = true;

// Drag events on draggable element
dragElement.addEventListener('dragstart', (e) => {
    e.dataTransfer.setData('text/plain', e.target.id);
    e.dataTransfer.effectAllowed = 'move';
});

// Drop zone events
const dropZone = document.getElementById('drop-zone');

dropZone.addEventListener('dragover', (e) => {
    e.preventDefault(); // Allow drop
    e.dataTransfer.dropEffect = 'move';
});

dropZone.addEventListener('drop', (e) => {
    e.preventDefault();
    const draggedId = e.dataTransfer.getData('text/plain');
    const draggedElement = document.getElementById(draggedId);
    dropZone.appendChild(draggedElement);
});

References:

↑ Back to top

Want more questions?

You've seen 15 sample questions. Unlock all 37 En interview questions with detailed explanations, code examples, and expert insights.

37+ questions
Code examples
Expert explanations
Instant access
Unlock Full Access