Frames and how they work

A frameset in HTML is a way to display multiple web pages at the same time. Quite often this is used to show, for example, a navigation bar which is common to all pages on a web site. It is also often used to keep an advertisement (such as a banner) displayed at a location on the screen (top or bottom) while a visitor surfs.

Some examples of various framesets are shown below. These are the frame templates from Frontpage 2000.

 

To the left is one of the most common frameset types used. As you can see, the main page is to the lower-right and is the largest page. This is generally used to display web pages as the visitors surfs through a site. The upper page might be used for a logo, and the navigation menu could be included on the left page. If you want to see this example as a full web page, just click on the image to the left (use your back key to come back ot this page).

The HTML code for a frameset is included in a special file. The file uses an HTML tag called <FRAMESET> to define how the pages are to be put together. This file contains only the information necessary to tell the browser how to put together the frame.

The three page frameset shown above has the following HTML code. This is defined in the file "example-frame.htm".

<frameset cols="150,*">
  <frame name="left" scrolling="no" noresize target="rtop" 
   src="example-left_page.htm">
  <frameset rows="20%,*">
    <frame name="rtop" target="rbottom" src="example-top_page.htm">
    <frame name="rbottom" src="example-lower_right_hand_pag.htm">
  </frameset>
  <noframes>
  <body>
  <p>This page uses frames, but your browser doesn't support them.</>
  </body>
  </noframes>
</frameset>

Let's examine this line by line.

<frameset cols="150,*> 
The frameset is split into columns, which the first column defined as 150 pixels wide. The remaining columns are undefined (that's what the "*" character does).
<frame name="left" scrolling="no" noresize target="rtop" src="example-left_page.htm">
The first page of the frameset is defined here, and it's the left page. The "scrolling" attribute is set to "NO", meaning no scroll bars will ever be added. You can change this to "auto" which let's the browser determine if they are needed or "yes" to always include them.

"noresize" indicates that the size of the frame (150 columns wide) is not to change. 

Target specifies that by default any links in any HTML document in this frameset will, when clicked, load the document into the "rtop" frame. See the lesson on special linking techniques for more information on how this works.

Finally, the page to be used is called "example-left_page.htm".
<frameset rows="20%,*">
Now the two rows are defined. This is a second "frameset", since it is contained within the first one. The "20%" indicates that the first row is defined as 20% of the screen.
<frame name="rtop" target="rbottom" src="example-top_page.htm">
Now the upper row is defined. The name is set to "rtop", and the default target is set to "rbottom". This means that any hyperlinks clicked in "rtop" will cause the document to load in "rbottom" unless the link includes the "target" attribute.

The HTML document name to load into the frame is "example-top_page.htm". Note that this could change later if someone clicks on a link in "left".
<frame name="rbottom" src="example-lower_right_hand_pag.htm">
This simply defines the name of the frame to "rbottom" and sets the HTML document to "example-lower_right_hand_pag.htm". Note that since no "target" is specified, any links that are clicked will load into "rbottom".
</frameset>
This finishes the inner frameset, which closes the definition of the two rows.
<noframes>
The <noframes> tag is optional but should always be included. It informs the browser what it should do if it does not support frames. You can include any HTML tags or text between the <noframes> and </noframes> tags, except for the frame tags themselves.
<p>This page uses frames, but your browser doesn't support them.</>
  </body>
These are just instructions to tell the visitor that he cannot see the frames. It is usually better (and highly recommended) to actually send the user to a version of the web site which does not use frames. You could do this by changing the above text to include something like "click here to get the non-frames version".
</noframes>
This finishes up the <noframes> statement.
</frameset>
This finishes the frameset.

Okay, so now you've defined a frameset which consists of three pages and a frameset document. How do you use it? Simply refer to the frameset document in hyperlinks and such. In this example, the file is named "example-frame.htm". That's the file you would submit to search engines or refer to from other documents.

Some of the problems with frames are:

Internet Tips Contents
404 Errors Advertising Autoresponse Awardmaster Basics Browsers Careers Chatting Disasters Domains Email Emoticons Ezines Free Stuff Fun Stuff FTP Graphics Homepages HTML Reference HTML Tutorial Interactive Legal Links Msg Boards Microsoft Money Multimedia Networks Newsgroups Newsletter Products RFC's Ringmaster Searches Security Sticky Sites Surfing TANSTAAFL Telnet Viral Webmaster Your System