Advanced Frames

This tutorial looks at some the Tags available, and discusses the
behavior of each.

<frameset cols="x,x">
  <frameset rows="x,x">


Each occurrence of the <frameset> tag must specify either columns (cols) or rows to
be displayed. A <frameset> tag cannot contain BOTH cols AND Rows –
this effect is achieved by nesting frameset tags.

Columns or Rows can be specified in either pixel or percentage value: <frameset
cols="300,*"> or <frameset rows="25%,50%,25%">, and can
contain as many columns or rows as you wish. Each comma separated value ("X,")
represents a <frame src=""> which must be displayed. Therefore
<frameset rows="25%,*,100"> would represent a window framed into 3 areas,
20% on top, 100 pixels high on the bottom. Since we cannot know the height of the browser,
we cannot determine the value of the middle frame – the command  " *,"
tells the browser to expand this frame  to use the rest of the window.

<frameset> options:

frameborder="yes/no"
border=0 framespacing=0


These 3 frameborder controls should be used only to turn borders OFF. If you want to leave
the borders ON, don’t use anything. Browser manufacturers have dabbled with such controls as
framespacing and bordercolor, but these should never be used unless your site is on a
closed intranet. They are not well supported and your results can vary widely

<frame src="file.url"
name="name">


The <frame> tag is required for each "X," row or column specified in the
<frameset> tag. Each <frame> will require an initial page src="" to
display, and a unique name="FrameName" to target with hyperlinks from other
framed pages.

<frame> options:

scrolling="yes/no/auto"

Add this to your <frame> tag to control the
scrollbars for that frame. The default scrolling behavior for any unspecified frame is
auto, which is to say: "Only display scrollbars IF the content runs outside the
display area."

marginheight="15"
marginwidth="15"

You can control the margins for each frame with these
options. The default value in most browsers is roughly 15 pixels

noresize

IF you have frame borders visible, this option will "lock" them in place, and
remove the users ability to resize the framed areas.

</frameset>

Believe it or not, this tag causes plenty of problems for those who forget it. it is required
to close each instance of the <frameset> tag

<noframes> </noframes> content. You can insert custom content strictly for Older Browsers, but it is important
that you at LEAST include a link to your main menu page.

Now that we’ve learned the tags, lets create a more complex
example:

  color=”#FFFFFF” face=”Arial” size=”-1″>index.html (_top)  
         
  color=”#FFFFFF” face=”Arial” size=”-1″>menu.html (Menu)

  • Link
  • Link
  • Link
  • Link
  color=”#FFFFFF” face=”Arial” size=”-1″>main.html (Main)

face=”Arial” size=”-1″>Stuff, stuff, stuff

stuff, stuff, stuff

color=”#FFFFFF” face=”Arial” size=”-1″>nested.htm (Nest)
  color=”#FFFFFF” face=”Arial” size=”-1″>sub-a.htm (subA)   color=”#FFFFFF” face=”Arial” size=”-1″>sub-b.htm (subB) color=”#FFFFFF” face=”Arial” size=”-1″> 
  color=”#FFFFFF” face=”Arial” size=”-1″>   
   
     

In this example, we have four src="" documents,
and 4 Named Frames to Target. We have nested our frameset twice,  to combine rows and
columns – once with tag nesting, and once with document nesting.

<frameset cols="33%,*"> face=”Arial” size=”-1″>

    <frame
src="menu.htm">

    <frameset rows="60%*,*>

            <frame
src="main.htm" name="main">

            <frame
src="nested.htm" name="nest">

    </frameset>

</frameset>

 

Now lets examine each tag individually:

<frameset cols="30%,*"> face=”Arial” size=”-1″>

This tag defines 2 columns, one for the menu at 30%, and another for "*", or,
the remaining 70% of the screen area.

<frame src="menu.htm"
name="Menu">


For the First Column, display the contents of menu.html, and give this frame the name
"Menu"

<frameset rows="60%,*"> face=”Arial” size=”-1″>

Here we are defining a NEW frameset with 2 rows, which will display in the second column
created by the frameset above.

<frame src="main.htm"
name="Main">


For the top row of the second column, we insert our main page.

<frame src="nested.htm"
name="nested">


For the bottom row of the second column, we will include a new<frameset> document.
As we will see, this will create yet 2 more columns, to display in the bottom row.

</frameset></frameset face=”Arial” size=”-1″>>

Be sure to close each <frameset>

Nested.htm (Nest or _parent) face=”Arial” size=”-1″>

The source of nested.htm is simple enough:

<frameset cols="50%,50%" frameborder=no
border=0 framespacing=0>

<frame src="sub-a.htm" name="subA">

<frame src="sub-b.htm" name="subB">

</frameset>

 

Our final discussion involves dynamically changing the contents of more than one frame. As you have seen in the above example, two or more frames can be changed simply by targeting the _parent of a nested frameset document. This will not always suffice however, and you may find it easier to use the javascript method illustrated below:


<BODY onLoad=”parent.frameName.location=’http://domain.com/page.htm’ “>


Including this simple command in any document of your frameset, will cause the specified frame NAME to be updated with the specified URL. Simply put, you will change the First frame in your sequence with the normal href=”” target=”frameName” method, and that new document will cause the next frame in your sequence to load the appropriate page.