Analytics choices

Analytics is optional. If allowed, Google measures public pages, navigation, recognized acquisition sources and engagement, including tool and playground use. The site excludes entered code, search terms and form contents from its Analytics events. You can withdraw here. This choice does not change advertising consent.

Read about Analytics and your information.

<noframes>

Deprecated in HTML5 specifications. Frames are obsolete.

⚠️ DEPRECATED

Definition and Usage

⚠️ obsolete and non-conforming in modern HTML
The <noframes> tag is obsolete and non-conforming in modern HTML. Frames and framesets are completely obsolete in modern web development.

The <noframes> tag was used in HTML 4 to provide fallback content for browsers that did not support frames or had frames disabled.

It was placed inside a <frameset> element and contained alternative HTML content that would be displayed if the browser couldn't render frames.

Important: Frames were deprecated due to serious usability, accessibility, and SEO issues. Modern web development uses CSS Grid, Flexbox, and standard HTML layouts instead.

Browser support and standards

Browser rendering and modern HTML conformance are different questions. Check the current element reference for the browsers and features your project needs; the older source version table is not a current compatibility guarantee.

Read the MDN element reference

Attributes

The <noframes> tag supports the Global Attributes in HTML.

However, this tag is obsolete and should not be used in modern HTML.

Old Usage (HTML 4)

In HTML 4, the <noframes> tag was used with framesets:

Old HTML 4 Example (Don't Use)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
  <title>Old Frameset Page</title>
</head>

<frameset cols="25%, 75%">
  <frame src="menu.html" name="menu">
  <frame src="content.html" name="content">

  <noframes>
    <body>
      <h1>Your browser does not support frames</h1>
      <p>This website requires frames to display properly.</p>
      <p>Please upgrade your browser or <a href="no-frames.html">click here</a> for a non-frames version.</p>
    </body>
  </noframes>
</frameset>
</html>

Why Frames Were Deprecated

  • SEO Problems: Search engines couldn't properly index framed content
  • Bookmark Issues: Users couldn't bookmark specific pages within framesets
  • Accessibility: Screen readers had major difficulty navigating framed layouts
  • Usability: Back button behavior was confusing and unpredictable
  • Printing Problems: Printing framed pages was difficult or impossible
  • Mobile Incompatibility: Frames don't work well on mobile devices
  • URL Problems: The URL in the address bar didn't reflect the actual content
  • Maintenance: Managing multiple HTML files for frames was complex
  • Security: Frames introduced security vulnerabilities
  • Performance: Loading multiple HTML files was slower than modern techniques

Modern Alternatives

Instead of frames and <noframes>, use modern HTML5 and CSS:

1. Regular HTML Structure

Use standard HTML elements for layout:

Example - Modern HTML5 Layout

Unavailable or blocked: stylesheet “styles.css”; fragment context “#section1”; fragment context “#section2”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Modern Layout</title>
  <link rel="stylesheet" href="styles.css">
</head>
<body>
  <header>
    <h1>Website Header</h1>
    <nav>
      <ul>
        <li><a href="/">Home</a></li>
        <li><a href="/about">About</a></li>
        <li><a href="/contact">Contact</a></li>
      </ul>
    </nav>
  </header>

  <main>
    <aside>
      <h2>Sidebar</h2>
      <nav>
        <ul>
          <li><a href="#section1">Section 1</a></li>
          <li><a href="#section2">Section 2</a></li>
        </ul>
      </nav>
    </aside>

    <article>
      <h2>Main Content</h2>
      <p>This is the main content area.</p>
    </article>
  </main>

  <footer>
    <p>© 2025 Your Website</p>
  </footer>
</body>
</html>

2. CSS Grid Layout

Create complex layouts with CSS Grid:

Example - CSS Grid

<style>
  body {
    display: grid;
    grid-template-areas:
      "header header"
      "sidebar main"
      "footer footer";
    grid-template-columns: 200px 1fr;
    grid-template-rows: auto 1fr auto;
    min-height: 100vh;
    margin: 0;
    gap: 10px;
  }

  header {
    grid-area: header;
    background: #333;
    color: white;
    padding: 20px;
  }

  aside {
    grid-area: sidebar;
    background: #f4f4f4;
    padding: 20px;
  }

  main {
    grid-area: main;
    padding: 20px;
  }

  footer {
    grid-area: footer;
    background: #333;
    color: white;
    padding: 20px;
    text-align: center;
  }
</style>

3. CSS Flexbox Layout

Use Flexbox for flexible layouts:

Example - Flexbox

<style>
  body {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    margin: 0;
  }

  header {
    background: #333;
    color: white;
    padding: 20px;
  }

  .container {
    display: flex;
    flex: 1;
  }

  aside {
    width: 200px;
    background: #f4f4f4;
    padding: 20px;
  }

  main {
    flex: 1;
    padding: 20px;
  }

  footer {
    background: #333;
    color: white;
    padding: 20px;
    text-align: center;
  }
</style>

<body>
  <header>Header</header>
  <div class="container">
    <aside>Sidebar</aside>
    <main>Main Content</main>
  </div>
  <footer>Footer</footer>
</body>

4. IFrame for Specific Cases

If you need to embed external content, use iframe (sparingly):

Example - IFrame (Use Only When Necessary)

The snippet includes CSS inside its HTML. Unavailable or blocked: embedded content “https://www.google.com/maps/embed?pb=...”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.

<!-- Only use iframe for embedding external content like maps, videos -->
<h2>Embedded Map</h2>
<iframe
  src="https://www.google.com/maps/embed?pb=..."
  width="600"
  height="450"
  style="border:0;"
  allowfullscreen=""
  loading="lazy">
</iframe>

<!-- Note: iframe is different from frames/frameset -->
<!-- Use it only for embedding third-party content -->

5. Single Page Applications (SPA)

Use JavaScript frameworks for dynamic content:

Example - Concept

<!-- Modern approach with JavaScript -->
<div id="app">
  <header>
    <nav id="main-nav">
      <!-- Navigation links -->
    </nav>
  </header>

  <main id="content">
    <!-- Content loaded dynamically via JavaScript -->
  </main>

  <footer>
    <!-- Footer content -->
  </footer>
</div>

<script>
  // Load content dynamically using JavaScript
  // Frameworks like React, Vue, Angular handle this
</script>

Migration Guide from Framesets

Step-by-Step Migration:
  1. Assess Your Frameset: Identify what each frame displays (menu, content, header, etc.)
  2. Combine into Single Page: Merge frame content into a single HTML file with semantic elements
  3. Choose Layout Method:
    • CSS Grid - Best for complex 2D layouts
    • CSS Flexbox - Best for 1D layouts (rows or columns)
    • Combination - Use both for different sections
  4. Update Navigation: Replace frame targets with regular links or JavaScript navigation
  5. Test Accessibility: Ensure screen readers can navigate your new layout
  6. Optimize for Mobile: Use responsive design techniques
  7. Update SEO: Ensure all content is in the main HTML document
  8. Set Up Redirects: Redirect old frameset URLs to new pages

Comparison: Frames vs Modern Layout

Feature Frames (Old) Modern HTML5/CSS
SEO Poor - Search engines struggle Excellent - Fully indexable
Accessibility Very poor - Screen reader issues Excellent - Full support
Mobile Support Terrible - Doesn't work Excellent - Responsive
Bookmarking Broken - Can't bookmark state Works perfectly
Performance Slow - Multiple HTTP requests Fast - Single page, cached CSS
Maintenance Complex - Multiple files Simple - Single file or templates

Try it Yourself

Modern Layout Example

Here's what a modern layout looks like (no frames needed):

Header (Replaces top frame)
Sidebar
(Replaces left frame)
Main Content
(Replaces main frame)

All in one HTML file with CSS Grid or Flexbox!

Footer (Replaces bottom frame)

This layout is SEO-friendly, accessible, mobile-responsive, and maintainable!

Related Tags