**`<frameset>`** used its **`rows`** or **`cols`** attribute (comma-separated sizes, where `*` means 'take remaining space') to define a grid of panes, each filled by a `<frame>` child loading its own separate HTML document. A page using `<frameset>` couldn't have a normal `<body>` at all — the two were mutually exclusive. Along with `<frame>`, it was removed from HTML5 due to serious navigation, bookmarking, accessibility, and SEO problems, and modern browsers no longer render it at all.
1Understanding <frameset>
`<frameset>` used its `rows` or `cols` attribute (comma-separated sizes, where * means 'take remaining space') to define a grid of panes, each filled by a <frame> child loading its own separate HTML document. A page using <frameset> couldn't have a normal <body> at all — the two were mutually exclusive. Along with <frame>, it was removed from HTML5 due to serious navigation, bookmarking, accessibility, and SEO problems, and modern browsers no longer render it at all.
A page using <frameset> has NO <body> element — the two are mutually exclusive, which is itself a strong sign of how fundamentally different this old layout model was from normal HTML documents.
<!-- Historical frameset defining a sidebar + main content layout -->
<frameset cols="200,*">
<frame src="nav.html" name="navFrame">
<frame src="welcome.html" name="mainFrame">
</frameset>2Practical Example
Here is a real-world application of <frameset> showing how it is used in production HTML.
<!-- Modern equivalent using CSS Grid within a normal <body> -->
<body style="display: grid; grid-template-columns: 200px 1fr;">
<nav>Sidebar navigation</nav>
<main>Main content</main>
</body>3Best Practices
Follow these guidelines when working with <frameset>:
1. Never use <frameset> — it's entirely unsupported by every modern browser
2. Use CSS Grid or Flexbox to achieve equivalent multi-panel layouts within a single normal document
3. If maintaining a legacy site using frameset, plan a full rewrite to a standard <body>-based layout with CSS
Tip: A page using <frameset> has NO <body> element — the two are mutually exclusive, which is itself a strong sign of how fundamentally different this old layout model was from normal HTML documents.
<!-- Historical frameset defining a sidebar + main content layout -->
<frameset cols="200,*">
<frame src="nav.html" name="navFrame">
<frame src="welcome.html" name="mainFrame">
</frameset>