Professional Documents
Culture Documents
Frames are most typically used to have a menu in one frame, and content in another frame.
When someone clicks a link on the menu that web page is then opened on the content page. Here is
a classic example of a basic "index" frameset with a menu on the left and content on the right.
HTML Code:
<html>
<head>
</head>
<frameset cols="30%,*">
<frame src="menu.html">
<frame src="content.html">
</frameset>
</html>
Frame Set:
Here's the example: Frame Index
• frameset - The parent tag that defines the characteristics of this frames page. Individual
frames are defined inside it.
• frameset cols="#%, *"- Cols(columns) defines the width that each frame will have. In the
above example we chose the menu (the 1st column) to be 30% of the total page and used a
"*", which means the content (the 2nd column) will use the remaining width for itself.
• frame src="" -The location of the web page to load into the frame.
A good rule of thumb is to call the page which contains this frame information "index.html"
because that is typically a site's main page.
Add a row to the top for a title and graphics with the code as follows:
HTML Code:
<html><head></head>
<frameset rows="20%,*">
<frame src="title.html">
<frameset cols="30%,*">
<frame src="menu.html">
<frame src="content.html">
</frameset>
</html>
frameset rows="#%, *"- rows defines the height that each frame will have. In the above
example we chose the new title (the 1st row) to be 20% of the total page height and used a "*", which
means that menu and content (which are the 2nd row) will use the remaining height.
You probably noticed those ugly gray lines that appear between the frames. It is possible to
remove these and manipulate the spacing between frames with frameborder and framespacing.
These attributes appear within the frameset tag.
Note: Framespacing and border are the same attribute, but some browsers only recognize one
or the other, so use both, with the same value, to be safe.
HTML Code:
<html><head></head>
<frameset border="0" frameborder="0" framespacing="0" rows="20%,*">
<frame src="title.html">
<frameset border="0" frameborder="0" framespacing="0" cols="30%,*">
<frame src="menu.html">
<frame src="content.html">
</frameset>
</html>
Frame Borders:
Here's a visual:Visual
How nice would it be to make each menu link load into the content page? We do this by
naming each frame and setting the correct base target inside menu.html.
HTML Code:
<html><head></head>
<frameset rows="20%,*">
<frame name="title" src="title.html">
<frameset cols="30%,*">
<frame name="menu" src="menu.html">
<name="content" src="content.html">
</frameset>
</html>
HTML Code:
<html>
<head>
<base target="content">
</head>
...
</html>
Frame Target:
Here's the Visual: Visual
We first named the content frame "content" on our frame page and then we set the base target
inside menu.html to point to that frame. Our frame page is now a perfectly functional menu & content
layout!
It's possible to further customize the <frame> tag using the noresize and scrolling="" attributes.
HTML Code:
<html><head></head>
<frameset border="2" frameborder="1" framespacing="2" rows="20%,*">
<frame src="title.html" noresize scrolling="no">
<frameset border="4" frameborder="1" framespacing="4" cols="30%,*">
<frame src="menu.html" scrolling="auto" noresize>
<frame src="content.html" scrolling="yes" noresize>
</frameset>
</html>
We set the scrolling for our content frame to yes to ensure our visitors will be able to scroll if
the content goes off the screen. We also set the scrolling for our title banner to no, because it does
not make sense to have a scrollbar appear in the title frame.
Tips
• Frames can be simple and well organized. However, they are usually viewed as
unacceptable by most web designers.
• Always set the scrolling and resize options to optimize loadtime.
• Using a simple menu/content frame design can reduce updates to massive sites. Instead of
updating the menu on each page, you could simply update the menu.html file and be done
with it!
Las páginas que contienen una definición de FRAME no pueden contener el elemento
BODY ni ninguno de los elementos que habitualmente aparecen en el BODY antes del
elemento FRAMESET que es el que define la creación del FRAME. Si esto no se
cumple, el FRAME será ignorado.
Algunos visualizadores no soportan los frames. Para que nuestra página con frames no
resulte opaca a ellos, se utilizará el elemento NOFRAMES
<FRAMESET>
<NOFRAMES>
<BODY>
Su visualizador no soporta frames. Pulse
<A HREF="indice.htm">aqui </A> para volver.
</BODY>
</NOFRAMES>
</HTML>
Fíjate en que no aparece el elemento <BODY> en su posición habitual, sino dentro de
un elemento especial que se activa sólo cuando el visualizador no soporta los frames:
NOFRAMES. Si no declaras el área NOFRAMES y el visualizador no soporta este
efecto, no se verá nada. Obviamente, los visualizadores que sí soportan frames
ignorarán el contenido del área NOFRAMES.
Hasta aquí ya podemos hacernos una idea de cómo funcionan los frames: Lo
primero es crear una minipágina con la definición del frame, viene a ser algo así como
una "lanzadera" y sólo contiene la definición del frame. Y por último, crear las páginas
que constituirán el contenido de cada una de las áreas definidas en la "lanzadera". En el
ejemplo anterior son pagina1.htm y pagina2.htm, y aquí es donde escribirás tus cosas;
es decir que son páginas completamente normales, y que también pueden ser utilizadas
de la forma habitual. A su vez, la "lanzadera" puede ser invocada con un link desde
cualquier página normal. Como puedes ver, no es obligado crear todo tu documento con
frames: puedes utilizarlos solamente allí donde sea necesario, si quieres.
Ejemplo real
Ejemplo real
Ejemplo real
Ejemplo real
Habrás podido comprobar que los parámetros que dimensionan los frames actuan al
presentar la página inicialmente. Después, si el usuario lo desea, puede
redimensionarlos como quiera. Esta es la opción por defecto. Si no se quiere permitir el
redimensionado, se aplica el atributo NORESIZE al elemento FRAME. Así:
<FRAME NORESIZE SRC.....>
Algo parecido ocurre con las barras de scrolling. Están regidas por el atributo
SCROLLING, que puede valer YES NO o AUTO. Por defecto es AUTO. Con esta
opción el visualizador decide, en función del contenido, si son necesarias las barras o
no. Con YES las pondrá siempre, aunque no sean necesarias, y con NO no las pondrá
nunca, aunque sean necesarias.
<FRAME SCROLLING=YES ....>
Ejemplo real
Ejemplo real
Esto de los cruces es un poco complicado... fíjate en el contenido de cada página que
entra en juego. Cuando actives Ejemplo real el fichero llamado es cruzado.htm.
Pruébalo.
Fichero Contenido Acción
<A HREF="cc.htm"
Pone CC en el frame derecho
aa.htm TARGET="VENTANA">
<A HREF="cc.htm"> Trae CC
bb.htm Esto es "VENTANA" No hace nada
<A HREF="bb.htm" Pone BB en el frame derecho
cc.htm TARGET="VENTANA"> porque se llama "VENTANA"
<A HREF="aa.htm"> Trae AA
<FRAMESET> -
<FRAME SRC="aa.htm"> Pone AA en el frame izqdo.
cruzado.htm <FRAME SRC="bb.htm" Pone BB en el frame derecho y le
NAME="VENTANA"> da como nombre "VENTANA"
</FRAMESET> -
<FRAMESET COLS=30%,30%,30%>
<FRAME BORDERCOLOR="red" SRC="a.htm">
<FRAME BORDERCOLOR="blue"SRC="b.htm">
<FRAME SRC="c.htm">
</FRAMESET>
Se obtiene un frame de tres columnas con la primera barra de separación roja y la
segunda azul. Ejemplo real
Salir de una pantalla con frames
Para salir de una pantalla compuesta de frames es necesario definir algun link. En
efecto, si estamos en una pantalla con, por ejemplo, dos frames, cualquier link invocado
desde cualquiera de ellos, hace que la página llamada aparezca en ese mismo frame.
Para volver a una pantalla "normal" sin frames, se puede escribir un link con la sintaxis
siguiente:
Ejemplo real
Puesto que se va a poder elegir el frame de destino, es importante que todos ellos
tengan nombre. Este es el código del frame arriba, que reside en la página que carga:
fraarriba.htm
<HTML>
<HEAD><TITLE>Frames y formularios</TITLE></HEAD>
<BODY>
<CENTER><H2>FRAMES Y FORMULARIOS</H2></CENTER>
<TD ALIGN=CENTER>
<FORM>
<SELECT NAME="list">
<OPTION VALUE="a.htm" >Contenido A
<OPTION VALUE="b.htm" >Contenido B
<OPTION VALUE="c.htm" >Contenido C
</SELECT>
<BR>
<INPUT TYPE=button VALUE="Frame izquierdo" onClick=
"parent.izquierda.location.href=
this.form.list.options[this.form.list.selectedIndex].value">
</FORM>
</TD>
<TD ALIGN=CENTER>
<FORM>
<SELECT NAME="list">
<OPTION VALUE="a.htm" >Contenido A
<OPTION VALUE="b.htm" >Contenido B
<OPTION VALUE="c.htm" >Contenido C
</SELECT>
<BR>
<INPUT TYPE=button VALUE="Frame central" onClick=
"parent.centro.location.href=
this.form.list.options[this.form.list.selectedIndex].value">
</FORM>
</TD>
<TD ALIGN=CENTER>
<FORM>
<SELECT NAME="list">
<OPTION VALUE="a.htm" >Contenido A
<OPTION VALUE="b.htm" >Contenido B
<OPTION VALUE="c.htm" >Contenido C
</SELECT>
<BR>
<INPUT TYPE=button VALUE="Frame derecho" onClick=
"parent.derecha.location.href=
this.form.list.options[this.form.list.selectedIndex].value">
</FORM>
</TD></TR>
</TABLE>
</BODY>
</HTML>
Como puedes ver, todo reside en el código JavaScript que se ejecuta al pulsar el botón
de cualquiera de los tres formularios definidos en el frame arriba. Mediante este código
se captura un evento: onClick que se produce al pulsar con el puntero del ratón en el
botón del formulario. La primera parte de la instrucción ejecutada:
parent.derecha.location.href= es la que establece en qué frame se va a
cargar la página seleccionada en la lista desplegable, en este caso el llamado derecha.
La segunda parte de la instrucción:
this.form.list.options[this.form.list.selectedIndex].value
es la que indica qué página hay que cargar en el frame definido en la primera parte de la
instrucción. Si... esto suena a muy complicado. No es fácil entender la compleja
estructura de objetos del navegador. Para más detalle, puedes ver la sección sobre
JavaScript, en particular, y toda la sección de programación en general, de esta guia.
Otra cosa que hay que tener en cuenta cuando se escribe JavaScript, es que
distingue entre mayúsculas y minúsculas. En el ejemplo anterior, si los ficheros
llamados por el formulario: a.htm b.htm c.htm se han guardado con el nombre en
mayúsculas, como A.htm o B.htm, no funcionará si no se invocan escritos de la misma
forma. Esto es especialmente importante cuando tengas tus páginas en servidores con
sistemas operativos UNIX o LINUX, que son la mayoría de ellos.
Frames incrustados
Se puede insertar un frame en cualquier punto de una página, ya sea ésta, a su vez, un
frame o una página normal. Su apariencia recuerda a los gráficos y a los formularios,
pero su contenido es el de una página independiente. Por ejemplo, si se escribe:
Los marcos tienen múltiples documentos ".html" en cuenta para ser mostrados dentro de
una ventana de navegador a la vez. Esto quiere decir que una página no tiene ningún
contenido sobre ello, pero más bien dice el navegador cuales páginas web le gustaría
abrir. Con la adición de CSS Y PHP, marcos se han hecho anticuados, pero si usted
desea usarlos, lea sobre.
Marcos - una Página de Marco Genérica Enmarca el más típicamente son usados tener
un menú en un marco, y el contenido en otro marco. Cuando alguien pulsa un eslabón
sobre el menú que la página web entonces es abierta en la página contenta. Aquí está un
ejemplo clásico "de un índice" básico frameset con un menú a la izquierda y el
contenido a la derecha.
Código de HTML:
Juego de Marco:
Aquí está el ejemplo: El Índice de Marco frameset - la etiqueta paternal que define las
características de esto enmarca la página. Marcos individuales son definidos dentro de
ello. frameset cols = " * el %, * " - Cneles (columnas) definen la anchura que cada
marco tendrá. En el susodicho ejemplo escogimos el menú (la 1a columna) para ser el
30 % de la página total y usamos "un *", que quiere decir que el contenido (la 2a
columna) usará la anchura restante para sí. enmarque src = "" - la posición(ubicación)
de la página web para cargar en el marco.