JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 25 Hojas de Estilo y Posicionamiento Introducción La versión 4 de Netscape incluye 3 nuevas áreas que juntas integran lo que se conoce como Dynamic HTML o HTML dinámico. Estos 3 componentes son las hojas de estilos (style sheets), posicionamiento (content positioning) y fuentes descargables (downloadable fonts). Estos 3 componentes dan un gran control sobre la apariencia, el fondo y el comportamiento de las páginas web. 25 Hojas de Estilo Antes de la llegada de las hojas de estilo, los desarrolladores de páginas web estaban muy limitados en cuanto a la definición de estilos. Esto es, se puede visualizar un texto como título, texto normal, en cursiva, etc., pero no se pueden especificar márgenes o altura de líneas. Las hojas de estilo dan un mayor control sobre la presentación del texto. Usando hojas de estilo se pueden especificar la mayor parte de los atributos de estilo de la página como color del texto, márgenes, alineamiento de elementos, fuentes, tamaños de fuentes entre otros. Se pueden especificar bordes para resaltar ciertos elementos de la página. Se pueden especificar diferentes fuentes para que sean usadas por diferentes elementos, como párrafos, títulos o bloques de texto. También se pueden utilizar las hojas de estilo crear una plantilla o “master” que se puede utilizar para que múltiples páginas usen la misma hoja de estilo. Netscape Navigator soporta dos tipos de sintaxis para las hojas de estilo. Por un lado las hojas de estilo escritas en sintaxis Cascading Style Sheet (CSS) y, por otro lado soporta hojas de estilo escritas en JavaScript que usan el modelo de objetos de documento. En este modelo de objetos, un documento es un objeto que contiene otros objetos y todos ellos tienen un conjunto de propiedades que pueden ser modificadas. Hay que tener en cuenta que se puede usar cualquiera de las dos sintaxis pero, antes de empezar a usarla, se tiene que declarar su tipo como "text/CSS" o como "text/JavaScript". JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 26 25.1 Usando CSS para definir estilos Una hoja de estilos consiste en una o más definiciones de estilo situadas en la parte de cabecera del documento(<HEAD>). En sintaxis CSS, las propiedades y los valores que toman en un estilo se listan dentro de llaves, después de los criterios de selección. Estos criterios determinan a que elementos se les va a aplicar el estilo. Un criterio de selección puede ser una clase, un ID o puede ser contextual a un conjunto limitado de elementos de una página (se verán a continuación). Cada propiedad en la definición de estilo tiene que ir seguida de dos puntos y después del valor. Cada par propiedad/valor tiene que tiene que ir seguido de punto y coma. Los valores no pueden ir encerrados entre comillas. Por ejemplo, a continuación se puede ver la definición en sintaxis CSS para que en todos los elementos <P> el tamaño de letra sea 18 y el margen izquierdo de 20. También especifica que el texto de los títulos H1 sea de color azul. <STYLE TYPE="text/css"> <!-P {font-size:18pt; margin-left:20pt;} H1 {color:blue;} --> </STYLE> Los contenidos de la hoja de estilos se pueden incluir entre comentarios (<!-- ... -->) para que, los navegadores que no reconozcan hojas de estilo, ignoren estos contenidos. Por otro lado si la sintaxis de la hoja de estilos no es correcta (faltan o sobran símbolos como : ; ”) la definición completa no se tendrá en cuenta y se ignorará. 25.2 Usando JavaScript para definir estilos Por medio de JavaScript se pueden definir hojas de estilo usando el modelo de objetos del documento. En este modelo el documento es un objeto que contiene otros objetos. Todos ellos tienen propiedades que pueden ser accedidas y modificadas. Por ejemplo, el siguiente código modifica la propiedad color del objeto H1, del conjunto de objetos tags dentro del documento: JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 27 document.tags.H1.color = "red"; La propiedad tags siempre se aplica al documento actual por lo que se puede omitir la palabra documento de la expresión document.tags. El siguiente código plantea el mismo ejemplo del punto anterior pero definiendo la hoja de estilo mediante JavaScript: <STYLE TYPE = "text/javascript"> tags.P.fontSize = "18pt"; tags.P.marginLeft = "20pt"; tags.H1.color = "blue"; </STYLE> Para acortar la sintaxis se puede utilizar la cláusula with con los elementos que tienen varias propiedades. El siguiente código implementa una hoja de estilo para los elementos P se visualicen en verde, negrita e itálica: with (tags.P) { color="green"; fontWeight="bold"; fontStyle="italic"; fontFamily="helvetica"; } 25.3 Herencia de Estilos Cuando un elemento HTML contiene otros elementos se considera que el primero es el elemento padre de los otros, que se consideran sus hijos. Así, en el siguiente ejemplo, el elemento <BODY> es el padre del elemento <H1> que a su vez es padre del elemento <EM> <BODY> <H1>The headline <EM>is</EM> important!</H1> </BODY> JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 28 En muchos casos, los elementos hijos adquieren los estilos de sus padres. Por ejemplo, si se le asigna un estilo al elemento <H1> <STYLE type="text/css"> H1 {color:blue;} </STYLE> <BODY> <H1>El titular <EM>es</EM> importante</H1> </BODY> En este caso, el elemento <EM> toma el estilo de su padre, el elemento <H1> y, por tanto, la palabre “is” aparecerá en azul. Sin embargo, si previamente se define un estilo para los elementos <EM> que haga que se visualicen en rojo, en este caso, la palabra “is” se visualizará en rojo ya que las propiedades especificadas en los hijos sobreescriben las propiedades de los padres. También hay que tener en cuentas que algunas propiedades como el color de fondo no se heredan y, por tanto, deben ser especificadas para cada elemento. La herencia comienza en el primer elemento de la página, por tanto en el marcador <HTML>. Para definir características para todo el documento es suficiente crear un estilo en el <BODY>. Por ejemplo, aquí se define que el color de todo el texto de la página será el verde: Utilizando la sintaxis CSS: <STYLE TYPE="text/css"> BODY {color: green;} </STYLE> Utilizando la sintaxis JavaScript: <STYLE TYPE="text/javascript"> tags.BODY.color="green"; </STYLE> JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 29 25.4 Definiendo hojas de estilo con el marcador <STYLE> Para definir una hoja de estilo directamente dentro de un documento se usa el marcador <STYLE> en la parte cabecera del documento. El marcador <STYLE> abre una hoja de estilo y el marcador </STYLE> la cierra. Todo el marcador <STYLE> ha de definirse antes del marcador <BODY>. Dentro del marcador <STYLE> se puede especificar el atributo TYPE para indicar si el tipo es “text/css” o “text/javascript”. El valor por defecto es “text/css”. El siguiente ejemplo define un estilo que especifica que todos los títulos de nivel uno están en mayúsculas y azul y los bloques de texto en itálica. Utilizando la sintaxis CSS: <HEAD> <STYLE TYPE="text/css"> H1 {color: blue; text-transform: uppercase;} BLOCKQUOTE {color: red; font-style: italic;} </STYLE> </HEAD> <BODY> Utilizando la sintaxis JavaScript: <HEAD> <STYLE TYPE="text/javascript"> tags.H1.textTransform = "uppercase"; tags.H1.color = "blue"; tags.BLOCKQUOTE.color = "red"; tags.BLOCKQUOTE.font-style: italic; </STYLE> </HEAD> <BODY> Utilizando selección contextual: <H1>This Heading Is Blue</H1> <B>BLOCKQUOTE>This blockquote is displayed in red.</B> JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 30 25.5 Definiendo hojas de estilo en ficheros externos Se puede definir una hoja de estilo en un fichero separado del documento en el que se está trabajando y después enlazar la hoja de estilo al documento. La ventaja de esta aproximación es que la hoja de estilo puede ser usada en cualquier documento HTML. Se puede pensar que los ficheros conteniendo una hoja de estilo es una especie de plantilla desde la que iniciar cualquier documento web. Por ejemplo, se podría especificar en un fichero la plantilla de estilos para que todas las páginas de un web en concreto mantuvieran un estilo uniforme. La sintaxis para definir estilos en un fichero externo es la misma que se ha visto hasta ahora, salvo que no es necesario ni abrir ni cerrar con <STYLE> y </STYLE>. Aquí está un ejemplo de definición en un fichero externo: Utilizando la sintaxis CSS: /* hoja de estilo externa mystyles1.htm */ all.BOLDBLUE {color:blue; font-weight: bold;} H1 {line-height: 18pt;} P {color: yellow;} /* final */ Utilizando la sintaxis JavaScript: /* hoja de estilo externa mystyles1.htm */ classes.BOLDBLUE.all.color = "blue"; classes.BOLDBLUE.all.fontWeight = "bold"; tags.H1.lineHeight="18pt"; tags.P.color="yellow"; /* final */ Para enganchar un fichero HTML con un fichero externo conteniendo una hoja de estilo se utiliza el marcador <LINK> como se puede ver en el siguiente ejemplo: Utilizando la sintaxis CSS: <HTML> <HEAD> JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 31 <TITLE>Un gran título</TITLE> <LINK REL=STYLESHEET TYPE="text/css" HREF="http://style.com/mystyles1.htm"> </HEAD> Utilizando la sintaxis JavaScript: <HTML> <HEAD> <TITLE>Un gran título</TITLE> <LINK REL=STYLESHEET TYPE="text/javascript" HREF="http://style.com/mystyles1.htm"> </HEAD> 25.6 Definiendo clases de estilos Si un documento incluye o enlaza con una hoja de estilo, todos los estilos definidos en la hoja de estilos se pueden usar en el documento. Sin embargo, podría darse el caso de que se quieran aplicar estilos selectivamente a elementos de la página. Por ejemplo, se puede querer que alguno de los párrafos (elementos <P>) del documento sean rojos y otros azules. En esta situación, no es correcto definir un estilo para el elemento <P>. En lugar de esto, se puede definir clases de estilos y aplicar la clase apropiada de estilo a cada elemento que necesite usar un estilo. Para aplicar una clase de estilo, se define la clase de estilo en la hoja de estilo y después se usa el atributo CLASS en el elemento. El siguiente ejemplo define una clase llamada GREENBOLD (color verde y letra en negrita) y muestra la forma de utilizar esta clase de estilo: Utilizando la sintaxis CSS: <STYLE TYPE="text/css"> all.GREENBOLD {color:#44CC22; font-weight:bold;} </STYLE> Utilizando la sintaxis JavaScript: <STYLE TYPE="text/javascript"> JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 32 classes.GREENBOLD.all.color = "#44CC22" classes.GREENBOLD.all.fontWeight = "bold" </STYLE> Utilizando selección contextual: <H1 CLASS=GREENBOLD>Este titular es verde</H1> <P CLASS = GREENBOLD>Este párrafo utiliza el estilo GREENBOLD. Se puede utilizar el atributo CLASS para especificar el estilo utilizado por un elemento HTML.</P> <BLOCKQUOTE CLASS = GREENBOLD> Este blockquote usa el estilo GREENBOLD. Como consecuencia es verde y negrita. Puede ser útil utilizar estilos para que los textos entre blockquotes destaquen del resto. </BLOCKQUOTE> Cuando se define una clase de estilos se puede especificar para que elementos HTML se puede usar ese estilo o se puede usar la palabra clave “all” para permitir que todos los elementos lo puedan usar. El siguiente ejemplo define una clase DARKYELLOW para cualquier elemento y una clase RED1 que solo pueden usar los elementos <P> y <BLOCKQUOTE>. Utilizando la sintaxis CSS: <STYLE type="text/css"> all.DARKYELLOW {color:#EECC00;} P.RED1 {color: red; font-weight:bold;} BLOCKQUOTE.red1 {color:red; font-weight:bold;} </STYLE> Utilizando la sintaxis JavaScript: <STYLE type="text/javascript"> classes.DARKYELLOW.all.color="#EECC00"; classes.RED1.P.color = "red"; classes.RED1.P.fontWeight = "bold"; classes.RED1.BLOCKQUOTE.color = "red"; JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 33 classes.RED1.BLOCKQUOTE.fontWeight = "bold"; </STYLE> Utilizando selección contextual: <BODY> <P CLASS=red1>Este párrafo es rojo.</H1> <P>Este párrafo es del color por defecto, ya que no utiliza el estilo red1.</P> <BLOCKQUOTE CLASS="red1">Este blockquote usa la clase red1. </BLOCKQUOTE> <H5 CLASS=red1>Este elemento H5 intenta usar el estilo red1, pero no puede.</H5> <P CLASS=darkyellowclass>Este párrafo es amarillo fuerte. <H5 CLASS=darkyellowclass>Este H5 intenta usar el estilo darkyellow y puede hacerlo.</H5> Es importante tener en cuenta que cada elemento HTML solo puede usar una clase de estilo. Si se especifican dos o más clases, solo se va a usar el primer estilo especificado. 25.7 Definiendo estilos individualizados Se puede dar la situación de tener que definir dos estilos complejos que solo difieran en uno o dos valores. Para no tener que definir dos veces lo mismo se han desarrollado los estilos individuales. Para definir estos estilos en sintaxis CSS se precede su nombre con el símbolo . En sintaxis JavaScript se usa la propiedad ids. Para aplicar un estilo individual a un elemento se especifica el nombre del estilo como el valor del atributo ID. En el ejemplo siguiente se define una clase MAIN con una altura de 20 puntos y un tamaño de 18 puntos, negrita y de color rojo. En el ejemplo también se define un estilo individual BLUE1 de color azul. Utilizando la sintaxis CSS: <STYLE TYPE="text/css"> all.STYLE1 {line-height: 20pt; font-size: 18pt; JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 34 font-weight: bold; color: red;} #BLUE1 {color: blue;} </STYLE> Utilizando la sintaxis JavaScript: <STYLE TYPE="text/javascript"> with (classes.STYLE1.all) { lineHeight = "20pt"; fontSize = "18pt"; fontWeight = "bold"; color = "red"; } ids.BLUE1.color = "blue"; </STYLE> Utilizando selección contextual: <P CLASS="STYLE1">Aquí puedes ver letras grandes en rojo. El texto de este párrafo es mucho más grande y más negrita que los párrafos normales. </P> <P CLASS="STYLE1" ID="BLUE1">Este párrafo es como el anterior, pero en azul. Aunque tiene el estilo STYLE1, que por defecto es rojo, también tiene un identificador que le permite ser azul.</P> 25.8 Usando Criterios de Selección Contextual Como ya se ha visto se puede definir un estilo para que lo usen todos los elementos HTML de una determinada clase. Pero, además se puede definir una clase que se aplique a determinados elementos HTML dependiendo de su posición en la estructura HTML de la página. Por ejemplo, se puede querer que todos los elementos <EM> que estén dentro de un título de primer nivel (H1) se visualizen en color verde. Para conseguir este nivel de control dentro de la aplicación de estilos es necesario usar criterios de selección contextual. Para especificar estos criterios en la sintaxis CSS hay que listar los elementos HTML en el orden requerido antes de abrir la llave que inicia la definición del estilo. En sintaxis JavaScript se usa el método contextual(). En el siguiente JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 35 ejemplo, como se decía antes, el texto dentro de <EM> se visualizará en verde si el marcador <EM> está dentro de un marcador <H1>: Utilizando la sintaxis CSS: <STYLE TYPE="text/css"> H1 EM {color:green;} </STYLE> Utilizando la sintaxis JavaScript: <STYLE TYPE="text/javascript"> contextual(tags.H1, tags.EM).color = "green"; </STYLE> Utilizando selección contextual: <H1>Este texto<EM> es verde y destacado,</EM> pero es un texto normal H1</H1> Otro ejemplo un poco más complejo en las dos sintaxis sería: UL UL LI {color:blue;} contextual(tags.UL, tags.UL, tags.LI).color = "blue"; En este caso, el elemento para el que se está definiendo el estilo es un LI que esté anidado en dos listas del tipo UL. Es decir solo los elementos de la lista LI que estén en una lista no ordenada dentro de otra lista no ordenada serán de color azul. Por último, en el siguiente ejemplo hay una mezcla con un poco de todo. Aquí se define una clase MAGENTACLASS que lo visualiza todo de color magenta. Además todos los párrafos de este estilo que estén dentro de un elemento <DIV> se mostrarán en itálica y el texto dentro de un marcador <B> que esté a su vez dentro de un párrafo MAGENTACLASS incluido en un marcador <DIV> se mostrará más grande. Utilizando la sintaxis CSS: JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 36 <STYLE TYPE="text/css"> all.MAGENTACLASS {color: magenta;} DIV P.MAGENTACLASS {font-style: italic;} DIV P.MAGENTACLASS B {font-size:18pt;} </STYLE> Utilizando la sintaxis JavaScript: <STYLE TYPE="text/javascript"> classes.MAGENTACLASS.all.color = "magenta"; contextual(tags.DIV, classes.MAGENTACLASS.P).fontStyle = "italic"; contextual(tags.DIV,classes.MAGENTACLASS.P,tags.B).fontSize="1 8pt"; </STYLE> Utilizando selección contextual: <DIV CLASS=MAGENTACLASS> <H3>Heading 3 in the MAGENTACLASS</H3> <P>¿Este párrafo es magenta y con cursiva? Debería serlo. Lo siguiente es <B>texto grande y con negrita.</B> Hemos conseguido esto con selección contextual.</P> <P>Este otro párrafo también debería ser magenta.</P> </DIV> <P>Este párrafo es magenta, pero como no está en un bloque DIV, no está en cursiva. </P> 25.9 Especificando estilos para elementos individuales Después de todo lo comentado en este capítulo, es necesario conocer que no hace falta definir los estilos en la sección de cabecera ni en ficheros aparte. Es posible definir estilos para marcadores individuales y que solo afecten a un elemento HTML de una única página web. En esta aproximación, se define un estilo sobre la marcha y puede ser útil en situaciones en las que necesitamos modificar bastante el estilo de un marcador pero que no se va a necesitar repetir esta modificación. JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 37 A pesar de que se pueden especificar estilos para elementos individuales, normalmente es mejor que todos los estilos que se usan en un documento se sitúen en un sitio único, de forma que sea más fácil saber donde hay que realizar los cambios cuando se necesite hacerlos. En caso de tener que especificar estilos individualmente para algún elemento, la forma más fácil es usar el atributo STYLE. En el siguiente ejemplo se especifica el estilo para un único elemento <P>. También se muestra como usar el atributo STYLE junto con el marcador <SPAN> para aplicar un estilo a una parte arbitraria de contenido de una página. Utilizando la sintaxis CSS: <P STYLE="color:green; font-weight:bold; margin-right:20%; margin-left:20%; border-width:2pt; border-color:blue;"> Este párrafo, y sólo este párrafo, es verde y en negrita con márgenes grandes y borde azul. </P> <P> Este párrafo es del color por defecto, pero aquí tenemos una <SPAN STYLE="color:red; font-style:italic;">palabra</span> que es diferente a las otras.</P> Utilizando la sintaxis JavaScript: <P STYLE="color = 'green'; fontWeight='bold'; marginRight='20%'; marginLeft='20%'; borderWidth='2pt'; borderColor='blue';"> Este párrafo, y sólo este párrafo, es verde y en negrita con márgenes grandes y borde azul. </P> <P> Este párrafo es del color por defecto, pero aquí tenemos una <SPAN STYLE="color='red'; fontStyle='italic'">palabra</span> que es diferente a las otras.</P> JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 38 25.10 Combinando hojas de estilos Se pueden usar varias hojas de estilo para definir los estilos de un único documento. Esto se podría utilizar, por ejemplo, si se dispone de distintos ficheros con hojas de estilos para títulos, para texto normal, para tablas, etc. El siguiente ejemplo muestra como enlazar varios ficheros de hojas de estilo en un documento: <STYLE TYPE="text/css" SRC="http://www.networksunlimited.org/styles/corporate"></STYLE> <STYLE TYPE="text/css" SRC="styles/whitepaper"></STYLE> <STYLE TYPE="text/javascript" SRC="styles/networkthings"></STYLE> <STYLE TYPE="text/css"> H1 {color: red;} /* redefine las hojas externas */ </STYLE> Para las hojas de estilo enlazadas en el documento, los estilos que define la última son los que se van a utilizar si para alguno existe redefinición. Por otro lado, los estilos definidos localmente son los que tienen mayor prioridad. 25.11 Formateo de bloques Las hojas de estilo tratan los elementos HTML de nivel de bloque de texto como si estuvieran encerrados en un cuadrado. Cada bloque, por tanto, puede tener unas características en forma de márgenes, bordes (que pueden ser tridimensionales) y espacios con los bordes. Además cada bloque puede tener una imagen o un color de fondo. Si se especifican valores para la anchura y para los dos márgenes, el margen izquierdo es el que tiene máxima precedencia, el siguiente en tenerse en cuenta es la anchura y, por tanto, el que se descarta es el valor para el borde derecho. JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 25.11.1 39 Definiendo Márgenes Los márgenes indican la cantidad de espacio que queda desde el bloque de texto a los bordes del documento (o al elemento que hace de padre del bloque). Los bordes se pueden especificar mediante las siguientes propiedades (sintaxis CSS/sintaxis JavaScript): margin-top/marginTop margin-bottom/marginBottom margin-left/marginLeft margin-right/marginRight Se puede especificar el mismo valor para los cuatro atributos mediante la propiedad margin en CSS o mediante la función margins() en JavaScript. También se puede especificar el alineamiento horizontal con float en CSS y align en JavaScript. Los valores son left, right y center. Hay que tener en cuenta que puede ser redundante o contradictorio especificar alineamiento y márgenes. En vez de márgenes se puede especificar la anchura con la propiedad width. Los valores se pueden especificar en pixels o porcentaje. 25.11.2 Definiendo anchura, color y estilo del borde Se puede definir la anchura del borde que rodea el bloque de texto especificando las siguientes propiedades: border-top-width/borderTopWidth border-bottom-width/borderBottomWidth border-left-width/borderLeftWidth border-right-width/borderRightWidth Se puede especificar el mismo valor para los cuatro atributos mediante la propiedad borderwidth en CSS o mediante la función borderWidths() en JavaScript. Para especificar el estilo del borde se utiliza el atributo border-style (CSS) o la propiedad borderStyle (JavaScript). Los valores que puede tomar son solid o double para una apariencia plana y groove, ridge, inset o outset para que tenga una apariencia 3D. JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 40 El color del borde se especifica con border-color (CSS) o borderColor (JavaScript). 25.11.3 Espacio con los bordes El espacio entre el contenido y los bordes (padding) se puede especificar con los siguientes atributos: padding-top/paddingTop padding-bottom/paddingBottom padding-left/paddingLeft padding-right/paddingRight Se puede especificar el mismo valor para los cuatro atributos mediante la propiedad padding en CSS o mediante la función paddings() en JavaScript. Este es un ejemplo sobre el formateo de bloques con todos los ingredientes vistos hasta ahora: Utilizando la sintaxis CSS: <STYLE TYPE="text/css"> P{ background-color:#CCCCFF; /* márgenes */ margin-left:20%; margin-right:20%; /* ancho del borde */ border-top-width: 10pt; border-bottom-width:10pt; border-right-width:5pt; border-left-width:5pt; /* estilo y color del borde */ border-style:outset; border-color:blue; /* separaciones */ padding-top:10pt; padding-bottom:10pt; padding-right:20pt; padding-left:20pt; } H3 { JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. /* estilo y tamaño de las fuentes */ font-size: 14pt; font-weight:bold; background-image:URL("images/grenlite.gif"); /* centrado del título hasta un 90 % del ancho total */ width:90%; float:center; border-color:green; border-style:solid; /* todos los lados del borde del mismo grosor */ border-width:10pt; /* todos los lados a la misma distancia*/ padding:20pt; } </STYLE> Utilizando la sintaxis JavaScript: <STYLE TYPE="text/javascript"> with (tags.P) { backgroundColor="#CCCCFF"; /* estilo y color del borde del párrafo*/ borderStyle="outset"; borderColor="blue"; /* ancho del borde */ borderTopWidth="10pt"; borderBottomWidth="10pt"; borderLeftWidth="5pt"; borderRightWidth="5pt"; /* separaciones */ paddingTop="10pt"; paddingBottom="10pt"; paddingLeft="20pt"; paddingRight="20pt"; /* márgenes */ marginLeft= "20%"; marginRight="20%"; } with (tags.H3) { 41 JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 42 backgroundImage ="images/grenlite.gif"; /* font size and weight */ fontSize="14pt"; fontWeight="bold"; /* Estilo y color del titular H3 */ borderStyle="solid"; borderColor="green"; /* centrado del título hasta un 90 % del ancho */ width="90%"; align="center"; /* todos los lados del borde del mismo grosor */ borderWidths("10pt"); /* todos los lados a la misma distancia */ paddings("20pt"); } </STYLE> Utilizando selección contextual: <H3>H3 con borde </H3> <P>Los bordes tienen su utilidad. Por ejemplo, un borde alrededor de un párrafo hace que el párrafo destaque más qiue los otros. </P> <P>Este es otro párrafo con borde. Hay que tener cuidado para que los bordes no sean demasiado anchos. </P> JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 43 26 Posicionamiento Ya no hace falta restringir el desarrollo de la página web al flujo secuencial de los contenidos. Especificando posiciones para bloques de contenidos HTML, se puede decidir que contenido va en cada lugar de la página, en lugar de dejar que el navegador lo calcule. Además, los bloques de contenido pueden superponerse, de forma transparente y opaca. Usando JavaScript, se puede cambiar la estructura de una página web dinámicamente, en un gran número de formas incluso después de haber acabado de cargar la página. Se puede hacer que ciertos contenidos desaparezcan o reaparezcan, que cambien de color, de forma o de color de fondo. También es posible incluir animación en los objetos modificando o moviendo partes individuales de las páginas HTML. Esto es posible utilizando JavaScript y bloques de contenidos HTML. Existe además un nuevo elemento denominado capa (layer) que puede ser desplazado por la ventana del navegador, superpuesto al contenido de otras capas, ocultado y redimensionado a voluntad. Las capas pueden ser anidadas dentro de otras capas de forma que hereden sus movimientos relativos. Para el Netscape Navigator 4 hay dos formas de mover dinámicamente las capas: 1. Definiendo un estilo que contenga la propiedad position 2. Usando el marcador <LAYER> (solo soportado por Netscape) Un documento puede contener ambos tipos de capas, definidas con estilos y con layers. Además estas paginas pueden usar hojas de estilos locales o remotas. 26.1 Posicionar Contenidos usando Estilos El estilo que se defina para un bloque posicionado de contenido HTML tiene que incluir siempre la propiedad position. El valor para esta propiedad puede ser absolute que indica que la posición de la capa es una posición absoluta con respecto a la página en la que está contenida o relative, que indica que la posición de la capa es relativa con respecto al punto que ocupa en la página. También se puede especificar las propiedades top y left para indicar el desplazamiento con respecto a la página (posicionamiento absoluto) o la posición actual en el documento (posicionamiento relativo). JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 44 Si un documento contiene más de una capa con posicionamiento absoluto, estas capas no pueden compartir estilos, ya que cada uno necesitará sus propios parámetros top y left para indicar su posición. El uso de estilos individualizados es muy útil para definir capas, ya que se puede definir un estilo para cada capa (con un único ID). Por ejemplo, el siguiente marcador STYLE define los estilos para dos capas: <STYLE TYPE="text/css"> <!-#layer1 {position:absolute; top:20px; left:5px; background-color:#CC00EE; border-width:1; border-color:#CC00EE; width:200px;} #layer2 {position:absolute; top:60px; left:250px; background-color:teal; width:200px; border-width:2px; border-color:white; } } --> </STYLE> Para usar un estilo para una capa, se aplica el estilo como los que ya se han visto anteriormente. Sin embargo, hay que tener en cuenta que una capa se aplica al contenido de la página siempre que esté agrupado como una entidad. Si se quiere que una capa contenga más de un elemento, hay que aplicar el estilo a un elemento que los agrupe como los marcadores DIV o SPAN. Por ejemplo: <BODY BGCOLOR=white> <DIV ID=layer1> <H1>Layer 1</H1> <P>Lots of content for this layer.</P> JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 45 <IMG SRC="images/violets.jpg" align=right> <P>Content for layer 1.</P> <P>More Content for layer 1.</P> </DIV> <P ID=layer2>Layer 2</P> <!-- Este ejemplo usa el atributo STYLE de un elemento directamente, para especificar que ese elemento es una capa: --> <DIV STYLE="position:absolute; top:170px; left:250px; border-width:1px; border-color:white; background-color:#6666FF"> <H1>Layer 3 </H1> <P>This is a blue block of HTML content.</P> </DIV> Este es otro ejemplo de capas en el que se utiliza, además un hoja de estilo en la definición de la capa para conseguir una capa con fondo y borde 3D: #layer4 {position:absolute; top:300px; left:100px; color:magenta; background-color:yellow; border-width:20px; border-color:cyan; border-style:ridge; padding:5%; } <BODY> <DIV ID=layer4> <H1>Layer 4 </H1> <P>I am a very colorful layer.</P> </DIV> </BODY> JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 46 Es importante tener en cuenta que si se define un posicionamiento absoluto, no hay que poner márgenes ya que la posición viene dada por las propiedades top y left. 26.2 Posicionar Contenidos usando el marcador LAYER Como ya se ha comentado, Netscape ha implementado un marcador nuevo, denominado LAYER que extiende la sintaxis HTML para soportar el nuevo concepto de capas. Así se puede especificar la posición y el contenido de una capa en la parte BODY de la página y ya no es necesario predefinir la capa antes de especificar su contenido. Dentro de la capa se especifican, entre otros, ID, TOP, LEFT; BGCOLOR, WIDTH y HEIGTH. Este marcador es operativo en los navegadores Netscape Navigator 4.0+ y de momento en el resto de navegadores las capas se implementan mediante estilos. Junto con el marcador LAYER es posible utilizar código JavaScript, por ejemplo para posicionar una capa de forma relativa con respecto a otras. En el siguiente ejemplo se puede ver como funciona el marcador LAYER: <!— las unidades de TOP, LEFT y WIDTH son pixels --> <LAYER ID=layer1 TOP=20pt LEFT=5pt BGCOLOR="#CC00EE" WIDTH=200> <H1>Capa 1</H1> <P>El contenido de esta capa:</P> <IMG SRC=violets.jpg align=right> <P>Contenido de la capa 1.</P> <P>Más contenido de la capa 1.</P> </LAYER> <LAYER ID=layer2 TOP=60 LEFT=250 BGCOLOR=teal WIDTH=200> <P>Capa 2</P> </LAYER> <LAYER ID=layer3 TOP=170 LEFT=250 BGCOLOR="#6666FF"> <H1>Capa 3</H1> <P>Este es un bloque azul.</P> </LAYER> JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 47 También se puede usar el marcador LAYER junto con hojas de estilo para crear capas con un estilo personalizado. El siguiente ejemplo es el del punto anterior codificado ahora mediante LAYER: <STYLE TYPE="text/css"> <!-all.style4 { color:magenta; border-width:20px; border-color:cyan; border-style:ridge; padding:5%; } --> </STYLE> <BODY BGCOLOR=white> <LAYER ID=layer4 TOP=300 LEFT=100 BGCOLOR=yellow CLASS=style4> <H1>Capa 4 </H1> <P>Soy una capa llena de color.</P> </LAYER> </BODY> 26.2.1 Posicionamiento Absoluto Si una capa tiene un posicionamiento absoluto, se puede definir su posición dentro del documento o dentro de la capa que la contiene. En este tipo de posicionamiento se especifica la posición exacta de la esquina superior izquierda en las propiedades top y left. Si no se especifican estos valores y el posicionamiento es absoluto, por defecto se cogen los valores de la posición actual en el contenedor de la capa. Una capa con posicionamiento absoluto se considera que está fuera del documento HTML y que, por tanto, no ocupa espacio en el flujo de los contenidos. JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 48 Para crear una capa con posicionamiento absoluto, se usan los marcadores <LAYER> </LAYER>. Para capas especificadas con estilos el posicionamiento absoluto se consigue dando el valor absolute a la propiedad position. Por ejemplo: <LAYER ID=layer1 TOP=200 LEFT=260> <P>Aquí va el contenido de la capa 1</P> </LAYER> <STYLE type="text/css"> <!-#layer1 {position:absolute; top:200px; left:260px;} --> </STYLE> 26.2.2 Posicionamiento Relativo Una capa con posicionamiento relativo está dentro del flujo del contenido dentro de la página, es decir, la capa aparece en el documento dondequiera que la deje el flujo de los contenidos. Además este tipo de capas comparten el espacio de línea con el resto de elementos HTML. Si se desea que la capa aparezca en una línea aparte es necesario insertar un salto de línea, un BR, antes de la capa. Para las capas con posicionamiento relativo, los atributos left y top especifican el desplazamiento de la capa con respecto a la posición actual de inserción en la página. Para crear una capa con posicionamiento relativo se pueden usar los marcadores <ILAYER> </ILAYER>. Si se está usando estilos hay que poner en la propiedad position el valor relative. Por ejemplo: <ILAYER ID=layer2> <P>Aquí va el contenido de la capa 2</P> </ILAYER> <STYLE type="text/css"> <!-#layer2 {position:relative; } JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 49 --> </STYLE> 26.2.3 Atributos y Propiedades para la definición de Capas 26.2.3.1 POSITION #block1 {position:absolute;} #block2 {position:relative;} La propiedad position se aplica solo a capas definidas con estilos. Indica que tipo de posicionamiento se utiliza y puede tomar dos valores albsolute o relative. El valor absolute es equivalente a utilizar el marcador <LAYER> para crear una capa y el valor relative es equivalente a crearla con el marcador <ILAYER>. 26.2.3.2 ID <LAYER ID=block1> #block1 {position:absolute;} /* CSS */ El parámetro ID es un identificador o nombre para la capa. EL ID tiene que empezar con un carácter alfabético. El ID se utiliza para referirse a la capa desde la propia página HTML o desde cualquier tipo de código que se utilice, como puede ser JavaScript. Este atributo es opcional. 26.2.3.3 LEFT y TOP Especifican la posición horizontal y vertical de la esquina izquierda de la capa dentro de la página. Los dos parámetros son opcionales. Los valores por defecto son la posición horizontal y vertical que les correspondería a los contenidos de la capa dentro de la página si la capa no existiera. Los valores tienen que ser números enteros. Las unidades por JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 50 defecto son los pixels si se utiliza el marcador <LAYER>. Si se utiliza un estilo, es necesario especificar las unidades. Por ejemplo: <LAYER BGCOLOR="yellow" TOP=300 LEFT =70 WIDTH=400 HEIGHT=200> <P>Párrafo en una capa con posición absoluta.</P> <LAYER BGCOLOR=teal TOP=50 LEFT=20 WIDTH=200 HEIGHT=100> <P>Párrafo en una capa con posición absoluta dentro de otra capa</P> </LAYER> </LAYER> Utilizando la sintaxis CSS: <DIV STYLE="position:absolute; background-color:yellow; top:300px; left:70px; width:200px; height:200px; border-width:1;"> <P> Párrafo en una capa con posición absoluta.</P> <DIV STYLE="position:absolute; background-color:teal; top:30px; left:20px; width:150px; height:120px; border-width:1px;"> <P> Párrafo en una capa con posición absoluta dentro de otra capa.</P> </DIV> </DIV> Este otro es un ejemplo sobre definición de capas con posicionamiento relativo para elevar o bajar texto: <STYLE TYPE="text/css"> <!— all.UP {position:relative; top:-10pt;} all.DOWN {position:relative; top:10pt;} --> JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 51 </STYLE> <BODY> <P>Este <SPAN CLASS=DOWN>texto </SPAN> va <SPAN CLASS=UP>arriba</SPAN> y <SPAN CLASS=DOWN>abajo, </SPAN> arriba <SPAN CLASS=DOWN>y <SPAN CLASS=DOWN>abajo</SPAN></SPAN> </P> </BODY> 26.2.3.4 SRC <LAYER SRC="htmlsource/meals/special.htm> source-include:url("htmlsource/meals/special.htm"); /* CSS */ Tanto el atributo SRC como el source-include especifican un fichero remoto que contiene la página HTML que se va a visualizar en la capa. Obviamente esto es muy interesante si se quiere que la información de una parte de la página cambie a menudo. Si se pone en una capa y se carga de un fichero externo, solo habrá que modificar el contenido de esta página y no el de la página completa. 26.2.3.5 Z-INDEX, ABOVE Y BELOW <LAYER Z-INDEX=3> <LAYER ABOVE=layer1> <LAYER BELOW=greenlayer> z-index:3; /* css */ Los atributos ABOVE y BELOW se usan solo con el marcador LAYER. Estos parámetros especifican el z-order (orden de visualización) de las capas. Si se especifica alguno de estos parámetros se altera el orden natural en el que la última que se define es la que queda a la JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 52 vista. Solo se puede utilizar uno de los parámetros Z-INDEX, ABOVE o BELOW en cada capa. El parámetro Z-INDEX toma valores enteros y las capas con un Z-INDEX mayor serán las que queden por encima de las otras. El parámetro ABOVE indica cual es la capa que queda por encima de la que se está creando. De forma similar, el parámetro BELOW indica cual es la capa que queda por debajo de la que se está creando. 26.2.3.6 WIDTH <LAYER WIDTH=200> <LAYER WIDTH="80%"> width:200px; /* CSS */ width:80%; /* CSS */ El valor de Width se puede expresar como un valor entero o como un porcentaje de la anchura de la página. Hay que tener en cuenta que si los contenidos de la capa no pueden ajustarse a los valores de anchura que se especifican, estos se variarán para ajustarlos al contenido. Si no se especifica un valor para este parámetro, el contenido de la capa se extenderá hasta el borde de la página. 26.2.3.7 HEIGHT <LAYER HEIGHT=200>> <LAYER HEIGHT = "50%"> height:200px; /* CSS */ height:50%; /* CSS Este parámetro se puede expresar como un valor entero o en porcentaje de la altura de la página. Hay que tener en cuenta que si los contenidos de la capa no pueden ajustarse a los JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 53 valores de altura que se especifican, estos se variarán para ajustarlos al contenido. El valor por defecto es el menor en el que se puedan incluir los contenidos de la capa. 26.2.3.8 CLIP <LAYER CLIP="20,20,50,100"> clip:rect(0,100,100,0); /* CSS */ Determina el área visible de la capa. Es decir con respecto al tamaño de la capa que viene dado por TOP, LEFT, WIDTH y HEIGHT, el área de CLIP define una parte más pequeña que es la que de verdad se va a visualizar en la página web. Los valores para el clip son un conjunto de 4 enteros separados por comas. Los números indican la esquina izquierdasuperior y la esquina derecha-inferior. Los valores izquierda y derecha se especifican desde el borde izquierdo de la capa y los valores superior e inferior desde el borde superior de la capa. Cada uno de los cuatro valores están en pixels. Si los dos primeros valores son 0, es decir, el área de recorte incluye la esquina superior izquierda de la capa, se pueden omitir y especificar solo la esquina inferior derecha. Si se omite este parámetro, el rectángulo de recorte vendrá dado por los valores de WIDTH y HEIGHT y se mostrará todo el contenido de la capa. 26.2.3.9 VISIBILITY <LAYER VISIBILITY=SHOW> <LAYER VISIBILITY=HIDE> <LAYER VISIBILITY=INHERIT> visibility:show; /* css */ visibility:hide; /* css */ visibility:inherit; /* css */ JavaScript. Master en Creación y Comunicación Digital. Curso 97/98. Nieves Pedreira. 54 El parámetro VISIBILITY determina si una capa es visible o no. El valor HIDE esconde la capa, SHOW la muestra e INHERIT indica que la capa tendrá el mismo valor para esta propiedad que el que tenga su padre. Hay que tener en cuenta que incluso teniendo el valor HIDE una capa no será visible si encima suya se sitúan otros elementos que sean opacos. Otra punto importante es que si el atributo se corresponde a una capa con posicionamiento relativo, aunque este atributo contenga el valor HIDE la capa seguirá ocupando espacio en el flujo de contenidos de la página. 26.2.3.10 BGCOLOR y BACKGROUND-COLOR <LAYER BGCOLOR="#00FF00"> <LAYER BGCOLOR="green"> background-color:green; background-color:00FF00; Estos parámetros determinan el color de fondo del bloque HTML y son similares al BGCOLOR aplicable al marcador BODY. Los valores que toman son los estándar para definir colores en hexadecimal precediendo el valor del símbolo . Por defecto, el fondo de una capa es transparente, es decir, no tiene color asignado. Si se utiliza este parámetro, hay que tener en cuenta que se le asigna el color a toda la superficie de la capa y que es distinto al valor que se puede dar al color de fondo de un estilo, que solo se aplica al contenido que tiene ese estilo. Parte 2.- Hojas de Estilo y Posicionamiento 25 26 HOJAS DE ESTILO ............................................................................................................................. 25 25.1 USANDO CSS PARA DEFINIR ESTILOS ............................................................................................. 26 25.2 USANDO JAVASCRIPT PARA DEFINIR ESTILOS ................................................................................ 26 25.3 HERENCIA DE ESTILOS ................................................................................................................... 27 25.4 DEFINIENDO HOJAS DE ESTILO CON EL MARCADOR <STYLE>....................................................... 29 25.5 DEFINIENDO HOJAS DE ESTILO EN FICHEROS EXTERNOS ................................................................. 30 25.6 DEFINIENDO CLASES DE ESTILOS .................................................................................................... 31 25.7 DEFINIENDO ESTILOS INDIVIDUALIZADOS ...................................................................................... 33 25.8 USANDO CRITERIOS DE SELECCIÓN CONTEXTUAL ......................................................................... 34 25.9 ESPECIFICANDO ESTILOS PARA ELEMENTOS INDIVIDUALES ............................................................ 36 25.10 COMBINANDO HOJAS DE ESTILOS ................................................................................................... 38 25.11 FORMATEO DE BLOQUES ................................................................................................................ 38 POSICIONAMIENTO ......................................................................................................................... 43 26.1 POSICIONAR CONTENIDOS USANDO ESTILOS .................................................................................. 43 26.2 POSICIONAR CONTENIDOS USANDO EL MARCADOR LAYER .......................................................... 46 26.2.1 Posicionamiento Absoluto ........................................................................................................ 47 26.2.2 Posicionamiento Relativo ......................................................................................................... 48 26.2.3 Atributos y Propiedades para la definición de Capas .............................................................. 49 26.2.3.1 POSITION ..................................................................................................................................... 49 26.2.3.2 ID ................................................................................................................................................... 49 26.2.3.3 LEFT y TOP................................................................................................................................... 49 26.2.3.4 SRC ................................................................................................................................................ 51 26.2.3.5 Z-INDEX, ABOVE Y BELOW ..................................................................................................... 51 26.2.3.6 WIDTH .......................................................................................................................................... 52 26.2.3.7 HEIGHT ......................................................................................................................................... 52 26.2.3.8 CLIP ............................................................................................................................................... 53 26.2.3.9 VISIBILITY ................................................................................................................................... 53 26.2.3.10 BGCOLOR y BACKGROUND-COLOR ...................................................................................... 54