HTML y CSS
HTML y CSS
HTML y CSS
Pgina 1
CONTENIDO
1. INTRODUCCIN...............................................................................................................6 Historia de los lenguajes de marcas.............................................................................6 Algunos lenguajes de marcas.......................................................................................7 Componentes de un lenguaje de marcas..................................................................8 Diferencias entre HTML y XHTML....................................................................................9 Editores de texto enriquecido.....................................................................................10 Navegadores.................................................................................................................11 HTML4 vs HTML5..............................................................................................................11 2. HTML BSICO..................................................................................................................14 2.1. ESQUELETO BSICO....................................................................................................14 El DOCTYPE.....................................................................................................................14 Los elementos Bsicos..................................................................................................14 2.2. ELEMENTOS DE BLOQUE Y ELEMENTOS DE LNEA.....................................................15 2.3. LAS ETIQUETAS MS COMUNES.................................................................................16 Listas................................................................................................................................17 Las imgenes.................................................................................................................18 Los hiperenlaces............................................................................................................18 Comentarios...................................................................................................................20 Direccin del texto........................................................................................................20 Acrnimos y abreviaturas.............................................................................................21 Caracteres especiales..................................................................................................21 2.4. TABLAS..........................................................................................................................21 2.5. ALGUNAS ETIQUETAS Y ATRIBUTOS DESACONSEJADOS MS................................24 3. CSS. SELECTORES BSICOS............................................................................................25 3.1. INTEGRACIN DE HTML CON CSS.............................................................................25 Comentarios en hojas de estilo CSS...........................................................................26 3.2. SELECTORES BSICOS.................................................................................................26 Selectores de tipo o de etiqueta................................................................................26 Selector universal...........................................................................................................27 Colores y propiedades bsicas del texto..................................................................27 Selectores descendientes............................................................................................30 Selectores de clase.......................................................................................................31 Selectores de ID.............................................................................................................32 3.3. COMBINANDO SELECTORES......................................................................................32 4. UNIDADES DE MEDIDA Y OTRAS PROPIEDADES..........................................................34 Unidades de medida....................................................................................................34 Unidades de medida especficas de las tipografas................................................34 Unidades absolutas.......................................................................................................34 Unidades relativas.........................................................................................................35 Porcentajes....................................................................................................................36 4.1. MS PROPIEDADES PARA EL TEXTO..........................................................................36 4.2. APLICAR ESTILOS A LAS LISTAS...................................................................................38 4.3. DOS NUEVAS ETIQUETAS HTML: div y span...............................................................39 4.4. HERENCIA.....................................................................................................................40
Jos Mara Morales Vzquez Pgina 2
HTML & CSS 4.5. ESPECIFICIDAD............................................................................................................41 La clausula !important..................................................................................................43 5. EL MODELO DE CAJAS..................................................................................................44 5.1. EL CONCEPTO DE CAJA............................................................................................44 div es la caja ms versatil.............................................................................................45 5.2. PROPIEDADES DE LA CAJA........................................................................................45 Las dimensiones del contenido...................................................................................45 Mrgenes interior y exterior..........................................................................................45 El borde de la caja........................................................................................................46 Imgenes de fondo en las cajas y sus propiedades................................................48 Cajas y jerarqua de elementos..................................................................................49 5.3. POSICIONANDO LAS CAJAS (Y OTROS ELEMENTOS)..............................................49 Las propiedades float y clear......................................................................................50 Introduciendo la tercera dimensin en el documento...........................................52 Visibilidad, desbordamientos y recortes....................................................................53 5.4. OTRAS PROPIEDADES..................................................................................................54 Cambiar el aspecto del puntero del ratn...............................................................54 Alterando si un elemento es de bloque o de lnea..................................................55 Modificando el aspecto de los bordes de las celdas de una tabla......................55 6. SELECTORES AVANZADOS.............................................................................................56 Selector de hijos.............................................................................................................56 Selector de hermanos adyacentes (o adyacente, sin ms)..................................56 Selector de atributos.....................................................................................................57 6.1. PSEUDO-CLASES Y PSEUDO-ELEMENTOS...................................................................58 Pseudo-clases................................................................................................................58 Pseudo-elementos.........................................................................................................59 7. ALGUNOS DISEOS Y EFECTOS TILES.........................................................................61 7.1. DISEOS DE ANCHO FIJO, LQUIDOS (O FLUIDOS) Y ELSTICOS...........................61 Ejemplo 1 Cajas..........................................................................................................61 Ejemplo 2 Tres columnas............................................................................................65 Ejemplo 3 Diseo de alto y ancho fijo.....................................................................66 Ejemplos 4 y 5 Diseos de ancho lquido................................................................67 Ejemplo 6 Diseo fijo, fluido, fijo................................................................................67 Ejemplo 7 Separadores entre columnas transparentes........................................68 Ejemplo 8 Sombras y diagonales..............................................................................68 7.2. DISEO DE TABLAS......................................................................................................69 7.3 OTROS TRUCOS.............................................................................................................70 Ejemplos 10 y 11 Transpariencias..............................................................................70 Ejemplo 12 Box Punch................................................................................................72 Ejemplos 13 y 14 Tooltips............................................................................................73 Ejemplos 15 y 16 Mens.............................................................................................75 Ejemplo 17 Esquinas redondeadas..........................................................................77 Ejemplo 18 Sprites.......................................................................................................77 Ejemplo 19 Solapas.....................................................................................................78 Ejemplos 20 y 21 Contorneos....................................................................................79
Jos Mara Morales Vzquez Pgina 3
HTML & CSS 8. FORMULARIOS Y JAVASCRIPT.......................................................................................81 8.1. FUNCIONES Y EMPLAZAMIENTO DEL CDIGO JAVASCRIPT..................................81 8.1.1 Funciones...............................................................................................................81 8.2. FORMULARIOS.............................................................................................................83 8.2.1. Caja de edicin de texto (type=text)...........................................................84 8.2.2 Caja de edicin de contraseas (type=password).....................................85 8.2.3. Etiquetas (label)...................................................................................................85 8.2.4 Radio Buttons (type=radio).............................................................................85 8.2.5 Checkboxes (type=checkbox).......................................................................86 8.2.6. Agrupacin de objetos......................................................................................86 8.2.7 Caja de edicin de texto de mltiples lneas..................................................87 8.2.8 Caja de seleccin de ficheros...........................................................................87 8.2.9 Cajas de seleccin (Comboboxes y Listboxes)...............................................87 8.2.10 Botones................................................................................................................88 8.2.11. Nuevos elementos en HTML5...........................................................................89 8.3. CSS EN LOS ELEMENTOS DE LOS FORMULARIOS......................................................89 8.4. VALIDACIN DE FORMULARIOS MEDIANTE JAVASCRIPT.......................................91 8.4.1. Mtodos, eventos y propiedades.....................................................................91 8.4.2. Eventos del elemento form................................................................................91 8.4.3. Eventos de los botones.......................................................................................91 8.4.4. DOM, Modelo de objetos del documento......................................................92 8.4.5. Validacin del formulario...................................................................................93 8.4.6. Lista de eventos de Javascript disponibles en los formularios......................95 8.5. JAVASCRIPT FUERA DE LOS FORMULARIOS..............................................................97 8.5.1. Alert y otras ventanas de confirmacin o entrada de datos.......................97 8.5.2. Lista de eventos de Javascript disponibles de forma genrica...................98 8.5.3. Los objetos document y window......................................................................99 9. HTML5............................................................................................................................100 9.1. ESTRUCTURA DE UN DOCUMENTO HTML5 O XHTML5............................................100 9.2. CAMBIOS EN LAS ETIQUETAS....................................................................................101 Etiquetas eliminadas...................................................................................................101 Nuevas etiquetas para la organizacin del documento......................................101 Solventando los problemas de versiones antiguas de Internet Explorer.............101 9.3. MEJORAS EN LOS FORMULARIOS: NUEVOS TIPOS DE INPUT.................................102 9.4. MODERNIZR................................................................................................................104 9.5. ETIQUETAS MULTIMEDIA............................................................................................107 Audio.............................................................................................................................107 Formatos de audio......................................................................................................108 Vdeo.............................................................................................................................108 Formatos de vdeo......................................................................................................109 Archivos de Flash.........................................................................................................109 9.6. DIBUJO MEDIANTE LA ETIQUETA CANVAS..............................................................109 9.7. GEOLOCALIZACIN.................................................................................................113 9.8. MS COSAS...............................................................................................................114 10. CSS3.............................................................................................................................116
Jos Mara Morales Vzquez Pgina 4
HTML & CSS 10.1. LOS NUEVOS SELECTORES DE CSS3.......................................................................116 Pseudo-elementos.......................................................................................................116 Pseudo-clases..............................................................................................................116 Nuevos selectores para uso con formularios...........................................................117 El selector :not()...........................................................................................................117 Nuevos selectores de atributos.................................................................................118 Selector general de elementos hermanos..............................................................119 9.2. LAS NUEVAS PROPIEDADES DE CSS3.......................................................................119 Gradientes y una nueva paleta de colores............................................................119 Fondos mltiples..........................................................................................................120 Esquinas redondeadas y bordes decoradas..........................................................121 Sombras........................................................................................................................122 Opacidad.....................................................................................................................123 Ms control de la tipografa......................................................................................123 Columnas ms fciles.................................................................................................124 Transformaciones y trancisiones................................................................................125 11.ENLACES, BIBLIOGRAFA Y REFERENCIAS..................................................................128
Pgina 5
1. INTRODUCCIN
Un lenguaje de marcas es una forma de codificar un documento que, junto con el texto, incorpora etiquetas (o marcas) que contienen informacin adicional acerca de la estructura del texto o su presentacin. Tal vez la forma ms primitiva que hemos usado de lenguaje de marcas fuera un dictado en el que la persona que dicta nos va dando notas acerca de lo que tenemos que poner en negritas, cursivas, etc. En el mundo de los ordenadores llevamos mucho tiempo usando lenguajes de marcas. Wordstar, uno de los primeros procesadores de texto que existieron para el mundo de los PC o Latex, el programa de autoedici n favorito para edicin profesional de textos, son dos ejemplos de ello: Wordstar La lluvia en ^BSevilla^S es una ^Ymaravilla^S. LATEX La lluvia en \textbf{Sevilla} es una \textit{maravilla}. Resultado: La lluvia en Sevilla es una maravilla. Es comn en muchos mbitos confundir un lenguaje de marcas con un lenguaje de programacin. Pero no: se trata de cosas diferentes. Hay, fundamentalmente, tres carencias de los lenguajes de marcas que los distinguen: No tienen funciones aritmticas No tienen variables No tienen estructuras de control Las caractersticas principales de un lenguaje de marca son las siguientes: Se usan siempre sobre texto plano. Las marcas se entremezclan con el contenido del documento aunque, en general, es fcil distinguir unas del otro. Su procesamiento es muy sencillo. Son muy flexibles.
Pgina
En el mundo de la informtica el padre de los lenguajes de marcas ms importantes de la actualidad surge en los aos 80. Se llama SGML (Standard Generalized Markup Language) y define unas reglas bsicas para el etiquetado de documentos mediante marcas. SGML no es en realidad un lenguaje sino un metalenguaje, es decir, un lenguaje creado con la finalidad de definir otros lenguajes a partir de l. RTF (Rich Text Format), HTML (HyperText Markup Language) o XML (Extensible Markup Language) derivan de SGML.
Pgina !
HTML & CSS SGML est definido como una norma ISO mientras que el resto de los lenguajes mencionados estn definidos por la W3C (Worl Wide Web Consortium).
Pgina "
HTML & CSS Elementos: Constan de una etiqueta de inicio, una de fin y todo lo que haya enmedio. Los elementos constan, a su vez, de tres elementos: etiquetas, atributos y contenido. Un ejemplo de elemento sera este: <*tro%g>te#to %ormal</*tro%g> Etiquetas o tags: Son las marcas propiamente dichas y habitualmente van entre corchetes quebrados <> Las hay de inicio y de fin aunque, en algunos casos, ambas pueden coincidir en una sla partcula con una sintaxis especial cuando el elemento no tiene contenido: <title> ... </title> <br/> Contenido: Es el texto base informativo del documento. Por ejemplo, en el anterior elemento con las etiquetas strong el contenido sera el texto que luego aparecer en negritas. Atributos: Es una pareja compuesta por un nombre y un valor que se encuentra dentro de una etiqueta de inicio e identifica las propiedades asociadas al elemento. bgcolor !blac"! En realidad, en HTML convencional es posible encontrar atributos sin valor, pero en XHTML, que ser nuestro preferido, esto no es vlido como veremos a continuacin.
Pgina #
HTML & CSS 1,'-(: <br/> Los elementos anidados no deben solaparse. En HTML est permitido pero en XHTML es incorrecto: ,'-(: <em><*tro%g>'e#to</em></*tro%g> 1,'-(: <em><*tro%g>'e#to</*tro%g></em> Los valores de los atributos deben de ir siempre entre comillas simples o dobles: ,'-(: <body bgcolor blac" te#t $hite> 1,'-(: <body bgcolor !blac"! te#t 2$hite2> Los nombres de etiquetas y atributos deben de ir siempre en minsculas ,'-(: <body BG34(4' blac" te#t 5,I'E> 1,'-(: <body bgcolor !blac"! te#t !$hite!> No est permitido usar un atributo sin valor (minimizacin de atributos) ,'-(: <te#tarea reado%ly> 1,'-(: <te#tarea reado%ly !reado%ly!> Los atributos y etiquetas desaprobados o desaconsejados (deprecated) en HTML 4 no son vlidos en XHTML. Los veremos ms adelante. Una aclaracin en todo esto: un fichero que valida correctamente como XHTML siempre validar como HTML pero no a la inversa, es decir, si escribimos de acuerdo a la norma marcada por XHTML tambin conseguimos ficheros vlidos para HTML con una sintaxis ms clara, legible y menos sujeta a errores de interpretacin. Por eso ser nuestra eleccin a lo largo de todo este manual.
Pgina 1$
Existen muchos editores que cumplen para esta labor, pero si te ves perdido a la hora de empezar puedes probar con uno de estos dos: Bluefish (multiplataforma): http://bluefish.openoffice.nl/ Notepad++ (slo Windows): http://notepad-plus-plus.org/
Navegadores
En el caso del HTML y el XHTML, el navegador web funciona como visor o intrprete del lenguaje de marcas y su respeto por los est ndares es fundamental. Muchas veces en el pasado se ha utilizado la posici n de supremaca de uno de ellos para desviarse del estndar y perjudicar a la competencia. Afortunadamente estas prcticas parecen abandonadas hoy en da. Tenemos varios recursos para comprobar la validez de un fichero escrito en HTML o la forma en que el navegador implementa los estndares: Validadores de HTML y CSS: http://validator.w3.org/ http://jigsaw.w3.org/css-validator/ Tests de cumplimiento de estndares: http://acid2.acidtests.org/ http://acid3.acidtests.org/ http://www.css3.info/selectors-test/
HTML4 vs HTML5
HTML5, an est en estado de borrador, pero supone un enorme y esperado cambio. La ltima revisin de HTML, la 4.01, se hizo en 1999 y desde entonces Internet, nuestros hbitos y nuestras espectativas sobre lo que deberamos de recibir al visitar una web han cambiado mucho. En paralelo a HTML5 existir una versin de XHTML5 ms estricta que tambin se encuentra an en estado de borrador. Las diferencias entre HTML5 y XHTML5 sern las mismas que las ya vistas para HTML4 y XHTML4: apenas unas restricciones extras para facilitar la interpretacin del lenguaje. HTML5, adems, ir acompaado de CSS3 que mejora y simplifica el diseo web. Las principales novedades de HTML5 y CSS3 son las siguientes: Ya no se habla de pginas web sino de aplicaciones web. Esto quiere reforzar el cambio en la filosofa que se persigue con esta nueva versin del lenguaje. La separacin entre presentacin y contenido se ve reforzada. En HTML5 todo lo relativo al diseo ir en los CSS. HTML5 sin CSS es en blanco y negro y no se debera siquiera elegir un tipo de letra diferente al que el navegador
Jos Mara Morales Vzquez Pgina 11
HTML & CSS nos muestra por defecto. Existe una gran mejora en todo lo relativo al manejo de formularios HTML5 se encuentra plenamente integrado con Javascript. De hecho, se encuentra ligado de forma casi indisoluble a una amplia colecci n de API's de Javascript que le proporcionan soporte para dise o 2D y 3D, geolocalizacin, arrastrar y soltar, multimedia, etc. Entonces, si existen todas estas ventajas y el borrador de HTML5 est ya prcticamente cerrado por qu cuesta tanto trabajo encontrar webs realizadas en HTML5?Por qu no empezamos nosotros a trabajar directamente con l? La respuesta est en los navegadores, los intrpretes de todo esto. Veamos una fotografa de los navegadores ms usados (en septiembre de 2011):
Las cifras impresas en rojo representan el porcentaje de HTML5 que ese navegador es capaz de interpretar correctamente. Como vemos, IE8, el navegador ms usado con ms de un cuarto del total, slo interpreta el 20% de la norma HTML5. En una infografa ms reciente (septiembre 2012) se confirman estos porcentajes: uno de cada cuatro de los navegadores actuales no proporciona a n soporte para HTML5:
Pgina 12
Hoy, febrero de 2014, las tornas han cambiado bastante desde que empezamos a escribir este manual y ya es perfectamente factible encontrar bastante a menudo aplicaciones web construidas completamente en torno a HTML5
Pgina 13
2. HTML BSICO
En este segundo apartado trataremos los elementos ms bsicos de HTML siguiendo las siguientes normas: Nos centraremos en la versin 4.01, tratando de respetar la norma XHTML 1.0 ms estricta (aunque siempre hablaremos de html por simplificar) y acercndonos cuanto podamos a cumplir con lo que establecer HTML5 para facilitar una futura trancisin. Veremos en algunos casos algunas de las etiquetas y/o argumentos de uso desaconsejado indicndolo siempre a continuacin. Puesto que en nuestro desempeo no slo haremos pginas web sino que tendremos que modificar las que otros han creado necesitamos saber para quer sirven. Trataremos, tambin, de proporcionar siempre que podamos un contenido semntico a nuestras etiquetas Separaremos la parte de diseo (que en un futuro aprenderemos a aplicar mediante CSS) del contenido del documento. No te preocupes si, por el momento, tus pginas resultan demasiado simples.
El DOCTYPE debe de ocupar siempre la primera lnea del documento html sin que exista ni un slo espacio antes de ella o no tendremos garantas de que todos los navegadores la reconozcan.
Pgina 14
El contenido del elemento html es toda nuestra pgina web (salvo el DOCTYPE). Lleva un atributo denominado lang que indica el idioma con que est hecha la web. El contenido del elemento head est formado, a su vez, por una serie de elementos que no se visualizan directamente (salvo el t tulo o title que aparecer en la barra del navegador). El elemento meta puede aparecer con diferentes indicaciones dentro de esta seccin de cabecera. La ms importante es, tal vez, el juego de caractres con que hemos escrito el documento HTML. Si nos equivocamos puede que algunos caracteres especiales (vocales acentuadas, signos de puntuacin, etc.) no aparezcan correctamente. En Linux se suele usar UTF-8 mientras que si usas windows suele ser el ISO-8859-1. Por ltimo, el elemento body contendr toda la parte visible de la web. En este caso se trata de un nico prrafo (etiqueta p) con un mensaje tpico de bienvenida.
Las pginas web estn hechas siempre de elementos rectangulares que se colocan uno debajo de otro, uno junto a otro o uno encima de otro. No hay nada ms. Cualquier cosa que nos parezca diferente se trata de un truco de diseo. Dentro de esto, tenemos que distinguir entre los elementos de bloque y los de lnea. Los de bloque podramos asemejarlos con los prrafos de un texto: ocupan todo el ancho de la superficie til del documento (o del rea del documento al que han sido restringidos) y pueden tener otros elementos, iguales o diferentes, arriba, abajo o, en algunas ocasiones, en su interior (aunque esto ltimo no siempre es correcto). Un prrafo, por ejemplo, no debera de contener a otro prrafo en su interior. Tambin pueden contener elementos de lnea. Los elementos de lnea se sitan uno debajo de otro, uno al lado de otro (como, por ejemplo, un texto en negrita que puede ir seguido de otro en cursiva) o, incluso, uno dentro de otro (una cita puede tene una palabra en negrita en su interior). Los elementos de lnea no pueden tener en su interior un elemento de bloque. Otra caracterstica importante de HTML es que por defecto los saltos de l nea
Jos Mara Morales Vzquez Pgina 15
HTML & CSS consecutivas que hagamos manualmente en nuestro documento no se respetan. Por ejemplo, si yo escribiera lo siguiente:
<$,H !a a t + s
Cuando aparecen mltiples espacios en blanco slo se respeta el primero. Por ejemplo:
<$,H !a a t + s ! s 2 )$a:*r s +*! 2/rs +* HTML</$,
Todas las etiquetas llevan asociada una informacin de estilo por defecto, pero esta puede variar entre cada navegador. Ms adelante, cuando veamos CSS, veremos como modificar dicho estilo y tratar de que sea lo m s independiente posible del navegador que usemos para verlas. En las etiquetas en las que podemos elegir, preferiremos siempre las que conllevan informacin semntica (strong, em, cite)frente a las que slo nos dan informacin de estilo (b, i, q).
Jos Mara Morales Vzquez Pgina 1
La etiqueta pre de texto preformateado define un rea en el que se respeta de forma ntegra los saltos de lnea y espacios en blanco que hayamos realizado al escribir el texto. Las etiquetas h1, h2, h3, h4, h5, h6, p, blockquote, y pre son etiquetas que defienen elementos de bloque, mientras que strong, b, em, i, sup, sub , del, bdo, cite o q son etiquetas de elementos de lnea.
Listas
Las listas se definen mediante las etiquetas ul, li y ol.
</!,<//!, < !,</ !, <!i,</!i, Define una lista no ordenada %con &boliches'( Define una lista ordenada Define cada item de la lista en cual)uiera de los anteriores
Por ejemplo:
< !, <!i,L/n*s</!i, <!i,Mart*s</!i, <!i,Mi>r2 !*s</!i, <!i,?/*0*s</!i, </ !,
Las listas se pueden anidar, pero teniendo en cuenta que la nueva lista tiene que abrirse antes de cerrar el item anterior. Por ejemplo:
</!, <!i,P/nt 1</!i, <!i,P/nt ; </!, <!i,@$arta+ <!i,@$arta+ <//!, </!i, <!i,P/nt 3</!i,
;</!i, ;</!i,
<//!,
El atributo type (de uso desaconsejado!!!) nos permitira cambir el tipo de smbolo en las listas desordenadas. Por ejemplo <ul type=square>. Otros valores vlidos para este atributo son disc o circle. Con la etiqueta ol tenemos dos atributos (tambin de uso desaconsejado) que nos permiten cambiar el comportamiento de la lista: start para variar el nmero por el que se inicia la lista ordenada (que por defecto es el 1) y type para cambiar el formato de enumeracin que usamos. Ejemplos: <ol start=50> o <ol type=A>. Otros tipos vlidos son 1, I, i o a.
Pgina 1!
La etiqueta li se puede usar fuera de un bloque ol o ul y puede llevar un atributo denominado type con cualquiera de las opciones vlidas en ol o ul (tambin est desaconsejado su uso).
Las imgenes
Para insertar imgenes se utiliza la etiqueta img Es una etiqueta nica (sin contenido) por lo que tenemos que usar el mtodo de auto-cerrado para cumplir las normas de XHTML. La sintaxis bsica es esta:
<i)' sr2-Ai)a'*n.7$'A a!t-AT*3t a!t*rnati0 A /,
El atributo src es obligatorio e indica el lugar donde est la imagen. Se puede usar una ruta relativa, absoluta o indicar una URL web.:
<i)' sr2-A$i2s/;01;/i)a'*n.7$'A a!t-AT*3t a!t*rnati0 A /, <i)' sr2-A#tt$%//&&&.*3a)$!*.2 )/i)a'*n.7$'A a!t-AT*3t a!t*rnati0 A /,
El atributo alt tambin es obligatorio en XHTML. Algunos otros atributos tiles y habituales y muestra un texto alternativo que se mostrar cuando la imagen no pueda visualizarse por cualquier motivo:
<i)' sr2-Ai)a'*n.7$'A a!t-AT*3t a!t*rnati0 A tit!*-AT*3t $asar *! ratBnA #*i'#t-A;00A &i+t#-A400A /, r*sa!ta+ a!
El atributo title muestra un tooltip al pasar el ratn sobre la imagen. width y height nos permiten modificar el ancho y/o el alto de la imagen expresando el tamao deseado en pxeles. Si no los usamos la imagen se mostrar con su tamao original. Si modificamos slo uno de ellos el otro quedar con su tamao original y la imagen resultar anamrfica. El atributo border muy til para indicar que queremos una imagen con borde (sin l cuando lleva incorporado un hiperenlace) est desaconsejado en HTML4 y no existe en HTML5. Indica el nmero de pxeles que tendr el borde de la imagen. Por defecto las imgenes se muestran sin borde salvo que pertenezcan a un hiperenlace (ver el punto siguiente)
<i)' sr2-A$i2s/;01;/i)a'*n.7$'A a!t-AT*3t a!t*rnati0 A 8 r+*r-A;A/,
Los hiperenlaces
Los enlaces a otras pginas se realizan mediante la etiqueta a
<a #r*C-A#tt$%//&&&.' '!*.*sA /,D '!*</a,
Pgina 1"
HTML & CSS El atributo href es obligatorio e indica la direccin destino del enlace. Puede ser una pgina web en el mismo disco, en el mismo servidor, en otro servidor, a un punto de la misma pgina, a una direccin de correo, etc.
<a #r*C-"a!8/).#t)!",E!8/) +* C t s</a, <a #r*C-")ai!t %7 s*)ariaF/$ na+a1.n*t",En0iar /n 2 rr* </a,
El atributo title nos muestra un tooltip al pasar el ratn sobr el enlace, mientras que target nos permite indicar donde queremos que se abra la nueva p gina a la que hace referencia el enlace. El valor por defecto de target es _self e indica que se abrir en la misma pgina donde lo pulsamos. Si usamos el valor _blank la pgina se abrir en una solapa o ventana nueva. Para hacer un enlace a un punto dentro de la misma pgina usamos la siguiente sintaxis:
<a #r*C-"HC4",I*r *! 2a$Jt/! ... <a i+-"C4",C@PKTULO 4</a, 4</a,
Como vemos, usamos un elemento a para crear el hiperenlace usando un trmino a nuestra eleccin precedido del carcter especial #. En el punto de destino del hiperenlace debemos de crear otro elemento a pero en este caso usaremos el atributo id y como contenido del mismo pondremos el mismo trmino que pusimos como valor del atributo href pero en este caso prescindiendo del carcter # Para ir a un punto dentro de otra pgina usamos un formato similar:
<a #r*C-" tra$a'ina.#t)!HC4",I*r *! 2a$Jt/! 4 +* tra$a'ina.#t)!</a,
En esa otra pgina deberamos de tener un elemento a con un atributo id de forma similar al caso que hemos visto antes:
<a i+-"C4",C@PKTULO 4</a,
Antes de HTML4 se usaba el atributo name en lugar de id. En HTML4 name est desaconsejado y en HTML5 no existe. El atributo id que nos sirve como referencia para el destino del hipervnculo no tiene porque ir en un elemento de tipo a. Podra ir en casi cualquier otro elemento. Por ejemplo:
<a #r*C-"H!istaG1",I*r !a !ista +* 2ara2t*rJsti2as</a, ...
Pgina 1#
El valor del atributo id debe de ser nico y no debe repetirse nunca en la misma pgina web. Un ejemplo ms completo para un enlace a email en el que rellenamos no solo la direccin de destino, sino tambin el asunto y el campo cc:
<a #r*C-")ai!t %7 s*)ariaF/$ na+a1.n*tLs/87*2t-D* /n a!/)n D@WM22-+*$arta)*nt Fr*1C*rnan+ 0i.2 )",En0iar 2 rr* </a, +*
NOTA IMPORTANTE: Para que valide correctamente como XHTML estricto debemos de sustituir el signo & por el cdigo & No se ha hecho por claridad, pero lo veremos ms adelante. La etiqueta a es una etiqueta de lnea.
Comentarios
Los comentarios en HTML se escriben entre los smbolos <!-- y -->
<!-- Est *s /n 2 )*ntari 1 7a)Ns s* 0is/a!iOarN Un 2 )*ntari $/*+* t*n*r 0arias !Jn*as --,
Una nota respecto a los comentarios y, en general, sobre cualquier otra cosa que hagamos en las pginas web realizadas con HTML y CSS: Todo, absolutamente todo lo que escribamos en ellas llegar al navegador del usuario tal y como las hayamos escritos y ser interpretado por este. Los comentarios y algn otro argumento puede que no resulten visibles, pero si el usuario quiere (y sabe hacerlo) siempre podr verlos, por lo general con la combinacin de teclas Ctrl+U o eligiendo la opcin adecuada en el men del navegador. Por tanto, tenemos que tener mucho cuidado con lo que hacemos en estos campos aparentemente ocultos. Como norma general lo que no queramos que vea ningn usuario no debera de escribirse.
ltr indica que el texto va de izquierda a derecha (left to right) y rtl de derecha a
Jos Mara Morales Vzquez Pgina 2$
Acrnimos y abreviaturas
Usamos las etiquetas acronym y abbr, respectivamente, con el atributo title que mostrar una nota explicativa o tooltip al pasar el ratn por encima.
Mi r+*na+ r ti*n* P1; <a88r tit!*-"M*'a81t*s",M8</a88r, +* )*) ria <a2r n1) tit!*-"(an+ ) @22*ss M*) r1",(@M</a2r n1),
Caracteres especiales
Los caracteres especiales que se usan para las etiquetas no pueden escribirse tal cual en un documento HTML, as que hay que usar una codificacin especial.
M!t4 M't4 M./ t4 Ma)$4 < , Q M
Si necesitamos algn otro caracter que no aparece en nuestro teclado (s mbolos tipogrficos, etc.) podemos recurrir a la siguiente tabla: http://www.ascii.cl/es/codigos-html.htm
2.4. TABLAS
Las tablas se han usado durante mucho tiempo en HTML como el sustituto de otras alternativas de diseo. Nosotros no deberamos de hacer esto jams. Una tabla debe de usarse para lo que es: para presentar datos en un formato tabulado y no, por ejemplo, para presentar informaci n en cuatro columnas separadas. Para esto ya veremos la forma correcta de hacerlo. La sintaxis que muestra una tabla sencilla quedara con dos filas y tres columnas sera as:
<ta8!*, <tr, <t+,1</t+,<t+,;</t+,<t+,3</t+, </tr, <tr, <t+,4</t+,<t+,P</t+,<t+,<</t+, </tr, </ta8!*,
Pgina 21
HTML & CSS La etiqueta <table></table> es la que define y contiene al elemento tabla. Cada fila va encerrada como contenido de la etiqueta <tr></tr>. Cada celda va delimitada por la etiqueta <td></td>. El nmero de celdas que hay en una fila determina el nmero de columnas de la tabla. Casi todos los atributos de la etiqueta table ( width, cellpadding, cellspacing, frame, rules y summary) han sido desaconsejados y/o han desaparecido en HTML5. El atributo border (con un valor nmerico que indica el nmero de pxeles de este) si puede seguir usndose. La etiquetas tr tambin han visto desaparecer como desaconsejados sus atributos align y valign. La etiqueta td, por ltimo, tampoco dispone de bendiciones para usar sus atributos width, height, align, valign, abbr, axis y scope. Puedes ver para que sirven estos y otros atributos desaconsejados en las siguientes referencias: http://www.w3schools.com/tags/tag_table.asp http://www.w3schools.com/tags/tag_tr.asp http://www.w3schools.com/tags/tag_td.asp La etiqueta td contina disponiendo de los atributos colspan y rowspan que sirven para fusionar celdas horizontal o verticalmente.
<ta8!* 8 r+*r-A1A, <tr, <t+ 2 !s$an-A3A,1R ; 1 3</t+, </tr, <tr, <t+,4</t+,<t+,P</t+,<t+,<</t+, </tr, </ta8!*, <ta8!* 8 r+*r-A1A, <tr, <t+ r &s$an-A;A,1 1 4</t+,<t+,;</t+,<t+,3</t+, </tr, <tr, <t+,P</t+,<t+,<</t+, </tr, </ta8!*,
La etiqueta <th> se usa para definir una celda como de encabezado y puede usarse tanto en filas como en columnas:
<ta8!* 8 r+*r-"1", <tr, <t#,</t#,<t#,@</t#,<t#,B</t#,<t#,C</t#, </tr, <tr, <t#,D</t#,<t+,1</t+,<t+,;</t+,<t+,3</t+, </tr, <tr,
Pgina 22
La etiqueta caption se usa para dar ttulo a la tabla. Debe de aparecer una sla vez e inmediatamente despue de la apertura de la etiqueta table:
<ta8!* 8 r+*r-"1", <2a$ti n,TJt/! <tr, ... </ta8!*,
+* !a ta8!a</2a$ti n,
Las etiquetas thead, tbody y tfoot nos permiten estructurar de forma lgica la informacin de la tabla, pudiendo incluso variar el orden de los mismos (definiendo el cuerpo por delante de la cabecera, por ejemplo) si as nos conviniera:
<ta8!* 8 r+*r-"1", <t#*a+, <tr, <t#,M*s</t#, <t#,In'r*s s</t#, </tr, </t#*a+, <tC t, <tr, <t+,T ta!</t+, <t+,;600R00 S</t+, </tr, </tC t, <t8 +1, <tr, <t+,En*r </t+, <t+,1;00R00 S</t+, </tr, <tr, <t+,5*8r*r </t+, <t+,1<00R00 S</t+, </tr, </t8 +1, </ta8!*,
Por ltimo, disponemos tambin de la etiqueta colgroup que nos permitir agrupar de forma lgica algunas columnas de la tabla para aplicarles estilos de forma conjunta, pero no tiene sentido ver como funciona hasta que no trabajemos con CSS. NOTA importante: Como hemos dicho en varias ocasiones, HTML5 est an en fase de borrador. Los atributos que aqu aparecen como vlidos o desaconsejados pueden variar de las especificaciones finales de la norma. Por
Jos Mara Morales Vzquez Pgina 23
HTML & CSS ejemplo, an hay discrepancias acerca de que pasar finalmente con los atributos border y summary de la etiqueta table.
font y basefont estn desaconsejadas en HTML 4.01 y desaparecen en HTML5. Para cambiar las caractersitcas del texto hay que usar hojas de estilo. Un ejemplo de uso:
<C nt Ca2*-"aria! narr &" 2 ! r-"'r**n" siO*-AT4A,Est n s* #a2*</C nt,.
center tambin est desaconsejado. El atributo align, de la etiqueta p (que puede tomar valores de left, right, center o justify) tambi n. Hay que usar hojas de estilo en su lugar.
<$ a!i'n-"ri'#t",Est n +*8* +* #a2*rs*</$, <2*nt*r,Y *st ta)$ 2 </2*nt*r,.
s y strike se desaconsejan, pero la etiqueta del que hace exactamente lo mismo sigue siendo vlida.
Ui ./*r*) s ) strar t*3t ta2#a+ +*8*rJa) s +* <+*!,#a2*r! n/n2a <s,asJ</s, <stri=*,asJ</stri=*,. asJ</+*!, 1
frame, frameset y noframes desaparecen en HTML5 y hay mucha controversia sobre la posibilidad de su uso en versiones anteriores. Sirven para dividir la superficie til del navegador en diferentes zonas de forma que podamos cargar una pgina web diferente en cada una de ellas. Un ejemplo de su uso:
<#t)!, <Cra)*s*t 2 !s-";PVRWR;PV", <Cra)* na)*-AO na1A sr2-"Cra)*G1.#t)" /, <Cra)* na)*-AO na;A sr2-"Cra)*G;.#t)" /, <Cra)* na)*-AO na3A sr2-"Cra)*G3.#t)" /, <n Cra)*s,T/ na0*'a+ r n s $ rta Cra)*s</n Cra)*s, </Cra)*s*t, </#t)!,
Pgina 24
Las hojas de estilo sirven para separar completamente el contenido del dise o de una pgina web, de tal forma que, si lo estructuramos correctamente, es posible cambiar totalmente el aspecto de nuestra web haciendo modificaciones en las hojas de estilo (css) sin tocar ni una s la lnea de su contenido (html). Para empezar, podemos hacer una pequea demostracin con la pgina de ejemplo que hemos creado en la anterior unidad. Si aadimos la siguiente lnea en la seccin de cabecera (head), el navegador dejar de usar la hoja de estilos por defecto y tomar una de las que pone a nuestra disposicin la W3C como demostracin:
<!in= #r*C-"#tt$%//&&&.&3. r'/Ut1!*U#**ts/C r*/Tra+iti na!" r*!-"st1!*s#**t" t1$*-"t*3t/2ss" /,
Podemos sustituir la hoja Traditional por otra de las siguientes: Midnight, Ultramarine, Chocolate, Oldstyle, Modernist, Steely o Swiss. Cada una de ellas nos proporcionar un estilo diferente.
Existen tres formas diferentes de integrar las hojas de estilo con HTML. La m s rudimentaria consiste en usar el atributo style junto con cualquier etiqueta HTML. Por ejemplo:
<#1 st1!*-"2 ! r% r*+4 C nt-Ca)i!1% I*r+anaR @ria!4" ,TJt/! </#1,
La segunda forma sera introducir una nueva seccin dentro de la cabecera (head) del documento HTML donde se insertaran los diferentes estilos:
<st1!* t1$*-"t*3t/2ss", #1 X 2 ! r% r*+4 C nt-Ca)i!1% I*r+anaR @ria!4 C nt-siO*% !ar'*4 Y $ X 2 ! r% 'ra14 C nt-Ca)i!1% Ti)*s4 C nt-siO*% )*+i/)4 Y </st1!*,
La tercera y ultima sera indicar, tambin en la seccin head de nuestro documento HTML, la ruta a un archivo externo donde se incluiran los diferentes estilos. Ya hemos visto un ejemplo antes cuando tombamos los ejemplos de la W3C. Uno propio podra ser as:
<!in= r*!-"st1!*s#**t" t1$*-"t*3t/2ss" #r*C-"*sti! s.2ss" )*+ia-"a!!" /,
En la sentencia anterior, en la etiqueta link podemos incluir un atributo denominado media que nos permitir tener hojas de estilo diferentes segn el medio donde se visualizar la pgina HTML. Los valores ma habituales de este atributo son screen, print, o all, que es el valor por defecto. Dentro del archivo estilos.css escribiremos nuestros estilos con una sintaxis id ntica a la vista en el caso anterior:
Jos Mara Morales Vzquez Pgina 25
#1 X 2 ! r% r*+4 C nt-Ca)i!1% I*r+anaR @ria!4 C nt-siO*% !ar'*4 Y $ X 2 ! r% 'ra14 C nt-Ca)i!1% Ti)*s4 C nt-siO*% )*+i/)4 Y
Un documento HTML puede utilizar una de las tres formas anteriores, dos de ellas o las tres, incluso, a la hora de aplicar estilos. El navegador, en caso de conflicto, tomar siempre como bueno el estilo ms cercano al contenido del documento. En caso de conflicto usando la misma forma de aplicar estilos el navegador tendr en cuenta lo definido en la ltima ocurrencia aparecida.
W/
Toda regla de formato en CSS est formadas por dos partes: selector y declaracin. La declaracin indica que formato hay que aplicar y el selector indica donde hay que aplicarlo. La declaracin de la regla CSS va encerrada entre llaves y est formada por parejas propiedad: valor; terminadas siempre en punto y coma. Si observamos alguno de los ejemplos anteriores es fcil identificar cada uno de estos componentes y comprobar lo sencillo de la sintaxis. As como en HTML la palabra clave es la etiqueta, el coraz n de CSS lo componen los selectores. La versin 2.1 de CSS tiene una docena de selectores diferentes pero es posible disear casi cualquier web con los cinco tipos b sicos que veremos a continuacin. Veremos los avanzados ms adelante.
Podemos aplicar estilos simultneamente a ms de una etiqueta separando los selectores con comas:
#1R #;R #3R #4R #PR #< X2 ! r% 8!/*4 Y Jos Mara Morales Vzquez Pgina 2
Observa que si cometes un error en la sintaxis, el navegador sencillamente no tendr en cuenta la declaracin de ese selector.
Selector universal
Existe un selector denominado universal que se simboliza con un asterisco. Se trata de una especie de comodn que permite seleccionar a cualquer elemento:
W XC nt-Ca)i!1% C /ri*rR M n s$a2*4 2 ! r% r*+4 t*3t-a!i'n% 7/stiC14 Y
Cuidado: as aplicado sera similar, pero no igual, a aplicar la misma declaracin sobre la etiqueta body, como hemos visto antes. Lo mejor para que aprecies las diferencias es que practiques sobre algunos ejemplos.
Los valores por defecto son black para el color del elemento y transparent para el fondo. Podemos aplicar estas propiedades en la declaracin de cualquier selector de los ya vistos y los que veremos en adelante:
#r X2 ! r% r*+4Y
Qu colores son vlidos? Por un lado tenemos la posibilidad de usar una paleta de 17 colores bsicos usando su nombre predefinido de entre los que aparecen en el siguiente mapa de colores:
Una segunda opcin es indicar el color exacto que queremos mediante su valor
Jos Mara Morales Vzquez Pgina 2!
Ciertos colores expresados en RGB hexadecimal se pueden presentar mediante una forma abreviada. Son aquellos en los que los tres componentes de color tienen sus cifras iguales, por ejemplo #660099 puede expresarse tambin como #609. Un subconjunto formado por 216 de estos colores constituyen lo que se conoce como paleta de colores Web Safe y se usan cuando queremos garantizar que los colores que escojamos se vern exactamente igual en todos los dispositivos, incluidos aquellos que slo pueden visualizar 256 colores (muchos ordenadores y, sobre todo, dispositivos mviles antiguos). Puedes consultar esta paleta en este enlace: http://en.wikipedia.org/wiki/Web_colors#Web-safe_colors Mediante la propiedad font-family elegimos la tipografa que queremos usar. Podemos indicar, el tipo de letra concreta que queremos o la familia tipogr fica. Por ejemplo:
$ XC nt-Ca)i!1% @ria!4 Y str n' XC nt-Ca)i!1% s*riC4 Y
Si el tipo de letra consta de ms de una palabra tenemos que indicarlo entre comillas dobles:
*) XC nt-Ca)i!1% QTi)*s "*& ( )anA4Y
Las familias tipogrficas genricas admitidas son serif, sans-serif, monoespace, cursive, o fantasy. Las tres primeros son las nicas que se usan habitualmente. El tipo de letra as indicado de cualquiera de estas formas debe de estar instalado en el ordenador o ser accesible a travs de Internet (y, en ese caso, indicar donde) para que se muestre correctamente, por eso es m s seguro indicar una familia tipogrfica o, mejor an, una lista de preferencias que siempre acaba en una familia tipogrfica. Por ejemplo:
#1 XC nt-Ca)i!1% I*r+anaR H*!0*ti2aR @ria! sans-s*riC4 Y $ X C nt-Ca)i!1% D* r'iaR "Ti)*s "*& ( )an"R Ti)*sR s*riC4 Y $r* XC nt-Ca)i!1% "C /ri*r "*&"R C /ri*rR ) n s$a2*4 Y
Otra posibilidad es escoger una fuente disponible en Internet e indicar el lugar donde est disponible para que el navegador se la descargue y la use. El directorio ms popular de fuentes es el que Google pone a nuestra disposicin: http://www.google.com/webfonts
Pgina 2"
HTML & CSS El funcionamiento es sencillo: elegimos las fuentes que vamos a usar y Google nos proporciona la lnea que tenemos que incluir en el head de nuestro HTML y la pareja propiedad:valor que debemos de usar en nuestras reglas CSS. Por ejemplo, para usar la fuente Gochi Hand debemos incluir esto en la secci n head de nuestro HTML:
<!in= #r*C-"#tt$%//C nts.' '!*a$is.2 )/2ssLCa)i!1-D 2#iTHan+" r*!-"st1!*s#**t" t1$*-"t*3t/2ss",
La propiedad font-weight nos permitir cambiar el grosor del trazo de la fuente. Tenemos dos opciones para ello: especificar este mediante una palabra clave predefinida (lighter, normal, bold o bolder) o usar un valor numrico tambin de entre una lista de posibilidades ( 100, 200, 300, 400, 500, 600, 700, 800 o 900) donde el 400 se corresponde con normal y el 700 con bold. Slo tenemos garanta de que funcionen normal y bold. El resto depender de la forma en que est diseada nuestra tipografa. La propiedad font-style nos permite elegir entre normal, italic u oblique. La diferencia entre italic y oblique es que la italic debe de existir dentro del diseo tipografco de la fuente (y si no no se muestra) mientras que la oblique se consigue forzando una inclinacin de entre 8 y 12 grados la fuente regular. Siempre que exista esa posibildad obtendremos resultados de mejor calidad con italic. font-variant (desaparece en CSS3 y, por tanto, no es aconsejable su uso ) es una propiedad que nos permite dos nicas opciones: normal o small-caps (lo que en espaol conocemos como versales o versalitas).
$ XC nt-&*i'#t% 8 !+4 C nt-st1!*% ita!i24 C nt-0ariant% s)a!!-2a$s4 Y
La justificacin del texto la realizamos mediante la propiedad text-align cuyos valores posibles son left, right, center o justify. text-align con el valor center es el sustituto de la etiqueta center cuyo uso est desaconsejado.
#1 Xt*3t-a!i'n% 2*nt*r4 Y
Esta propiedad no slo alinea el texto, sino que hace lo mismo con las im genes que estn contenidas en un texto cuyo prrafo la tenga aplicada. Por ejemplo, si queremos una imagen alineada no podemos aplicarla sobre la etiqueta img, pero si sobre la etiqueta p del prrafo que contiene a esa imagen:
$ Xt*3t-a!i'n% 2*nt*r4 Y
Pgina 2#
Dos propiedades ms antes de terminar este punto: text-decoration nos permite cinco efectos adicionales sobre nuestro texto: none, underline, overline, linethrought y blink. La propiedad text-transform tiene cuatro valores posibles: none, capitalize, uppercase y lowercase. Existen ms propiedades referentes al texto La propiedad font-size, por ejemplo, es la que nos permite cambiar el tamao de las fuentes. Tambin tenemos las relativas al interlineado y alguna ms. Las veremos ms adelante cuando hayamos hablado de las diferentes unidades de medida que podemos usar.
Selectores descendientes
Es una forma de seleccionar elementos que se encuentran dentro de otros elementos para aplicarles un estilo personalizado. Imaginemos, por ejemplo, que quiero aplicar un estilo particular a la etiqueta de cursivas ( em) pero slo cuando esta se aplica a un titular. Necesito usar un selector descendiente:
#1 *) X2 ! r% r*+4 Y
El estilo se aplicar a todas las etiquetas em dentro de un elemento h1 sin importar el nivel de profundidad. Es decir, en el siguiente fragmento HTML tambin se aplicaran:
<#1,<a i+-"I"ICIO",Tit/!ar +* !a <*),$a'ina</*),</a,</#1,
El selector descendiente debe de estar formado por, al menos, dos selectores pero podra tener ms si as lo precisamos:
$ str n' *) XC nt-0ariant% s)a!!-2a$s4 Y
El estilo anterior se aplicara a las cursivas (em), dentro de una etiqueta de negrita (strong) y, a su vez, dentro de un prrafo (p). Podemos combinar este tipo de selectores con el selector universal para realizar restricciones. Por ejemplo, tengamos en cuenta las siguientes dos variantes de selectores y los dos fragmentos de cdigo HTML a continuacin:
$ a X 2 ! r% 'r**n4 Y $ W a X 2 ! r% 'r**n4 Y <$,<a i+-"I"ICIO",En!a2*</a,</$, <$,<str n',<a #r*C-"H",En!a2*</a,</str n',</$,
Si usamos la primera regla CSS se colorearn en rojo las dos lneas, mientras que si usamos la segunda regla, slo se colorear la segunda.
Jos Mara Morales Vzquez Pgina 3$
Selectores de clase
Los selectores que hemos visto hasta ahora fallan en una cosa: no son flexibles cuando queremos aplicar un estilo diferenciado a algunos prrafos, pero no a todos ellos. Una de las soluciones para esto es usar los selectores de clase. Para aplicarlos, lo primero que tenemos que hacer es usar el atributo class en las etiquetas HTML correspondientes a los prrafos cuyos estilos queremos diferenciar:
<$ 2!ass-"0*r+*",Est* $NrraC +*8* +* ir *n 0*r+*.</$, <$,Est* $NrraC 0a *n 2 ! r n r)a!.</$,
La regla CSS se aplicar a cualquier etiqueta HTML que incluya un atributo class cuyo valor sea verde, y no slo a las etiquetas p. Es decir, sera perfectamente vlido que, adems de los prrafos anteriores, tuvieramos algo as en nuestro HTML:
<$, Ui a$!i2a) s *! atri8/t 2!ass 2 n 0a! r 0*r+* a <str n' 2!ass-"0*r+*",*stas n*'ritas</str n', a <*) 2!ass-"0*r+*",*stas 2/rsi0as</*), ta)8i>n a$ar*2*n *n 0*r+*.</$,
Si quisiramos restringir el uso del selector de clase para que slo sea vlido en combinacin de una determinada etiqueta, podemos combinarlo con el selector de tipo o etiqueta:
$.0*r+* X2 ! r% 'r**n4 Y
Ojo, no debemos de confundir las tres diferentes formas de combinacin de selectores que hemos visto hasta ahora:
$R .0*r+* X2 ! r% 'r**n4 Y $ .0*r+* X2 ! r% 'r**n4 Y $.0*r+* X2 ! r% 'r**n4 Y
En el primer caso la regla se aplica a cualquier etiqueta p o a cualquier etiqueta que tenga un atributo class con valor verde. En el segundo caso se aplica a cualquier etiqueta con un atributo class con valor verde que se encuentre dentro de un elemento de tipo p. En el ltimo caso, slo se aplica en las etiquetas de tipo p que tengan un atributo de tipo class con valor igual a verde. Podemos aplicar tambin el formato de ms de un selector de clase al mismo elemento HTML. Imaginemos las siguientes reglas CSS:
.2 +i' XC nt-Ca)i!1% ) n *s$a2*4 2 ! r% r 7 4 Y .0*rsa!ita XC nt-0ariant% s)a!!-2a$s4Y
Pgina 31
Por ltimo, podemos usar tambin los selectores de clase mltiple. La regla CSS se expresa as:
.2 +i' .0*rsa!ita XC nt-Ca)i!1% ) n *s$a2*4 2 ! r% 8!/*4 C nt-0ariant% s)a!!-2a$s4Y
Si incluimos esta regla en nuestro ejemplo anterior, tendr preferencia sobre las reglas individuales y nuestro prrafo aparecer en azul en lugar de en rojo.
Selectores de ID
El selector de id es muy similar al de clase. La principal diferencia es que se debera de usar slo cuando es preciso aplicar estilos a un elemento nico en la pgina. En ese caso usaremos el atributo id en lugar de class en la etiqueta HTML
<$ i+-"+*sta2a+ ",ParraC +*sta2a+ *n n*'ritas 1 2 ! r aO/!.</$,
Una nota muy importante: la restriccin de usar la etiqueta id en un nico elemento es algo que nosotros debemos de imponernos pero que, si la obviamos y la ponemos en ms de un sitio el navegador no se quejar e, incluso, aplicar correctamente los estilos indicados en todas las ocurrencias de la misma. No obstante, no podramos considerar como correcto de forma estricta el cdigo as escrito y, por tanto, deberamos de evitarlo. Casi todo lo dems dicho en referencia a los selectores de clase (la forma de restringir su uso, de combinarlo con otros selectores, etc) es aplicable a los selectores de id con una salvedad: no existen selectores de id mltiple y no podemos poner dos id diferentes a una misma etiqueta HTML al igual que hacamos con el selector de clase.
Todos los selectores aqu vistos pueden combinarse entre si. Algunos ejemplos ya los hemos visto en este documento. Pero podemos complicarlo cuanto queramos o necesitemos. Veamos algunos ejemplos:
.a0is .*s$*2ia! X 2 ! r% r*+4 8a2='r /n+-2 ! r% 1*!! &4 Y
El anterior selector solamente selecciona aquellos elementos con un 2!ass-"*s$*2ia!" que se encuentren dentro de cualquier elemento con un
Jos Mara Morales Vzquez Pgina 32
HTML & CSS 2!ass-"a0is "* es decir* estamos aplicando selectores de clase + selectores descendientes.
$.a0is str n'.*s$*2ia! X ... Y
simultaneamente
Ahora, el selector solamente selecciona aquellos elementos de tipo <str n', con un atributo 2!ass-"*s$*2ia!" que estn dentro de cualquier elemento de tipo <$, que tenga un atributo 2!ass-"a0is ". O sea, estamos aplicando selectores descendientes junto con selectores de clase que tienen su uso restringido a ciertas etiquetas.
/!H)*n/ !i.+*sta2a+ aHini2i X ... Y
El anterior selector hace referencia al enlace con un atributo i+-Aini2i encuentra dentro de un elemento de tipo <!i, con un 2!ass-A+*sta2a+ A, que forma parte de una lista </!, con un i+-A)*n/A. De nuevo selectores descendientes pero en esta ocasin niveles y en cada uno de ellos tenemos un selector de clase o de ID restringido.
Pgina 33
En este captulo veremos algunos de los elementos bsicos de CSS que an nos restan. Estudiaremos las diferentes unidades de medida que podemos utilizar, algunas propiedades ms relativas al texto, introduciremos las dos etiquetas div y span y veremos los conceptos de herencia y especificidad.
Unidades de medida
CSS tiene un amplio y flexible conjunto de formas de expresar tama os y medidas. Manejarlas correctamente es necesario para expresar el tamao de las fuentes que usamos y para otras caractersticas esenciales en un buen diseo: interlineado, mrgenes, separaciones, etc. Para experimentar con ellas presentaremos una nueva propiedad: font-size que nos permite definir el tamao de la tipografa que estamos usando. Algunas de las formas de especificar medidas que veremos aqu son slo vlidas para los tipos de letras mientras que otras son ms generales y nos servirn para cualquier otra cosa.
La segunda forma de expresar el tamao de la tipografa sera mediante una palabra clave que expresa un tamao relativo. Dos son las palabras claves permitidas en este caso: larger y smaller. El primer valor elevar la fuente sobre lo que le correspondera por defecto mientras que el segundo lo reducir.
$ XC nt-siO*% )*+i/)4Y $.'ran+* XC nt-siO*% !ar'*r4Y
Unidades absolutas
Podemos expresar medidas absolutas en pulgadas ( in), centmetros (cm), milmetros (mm), puntos (pt) o picas (pc). Estas dos ltimas son medidas especficas de las imprentas y medios grficos. Un punto equivale a 1/72 pulgadas (aproximadamente 0,35 milmetros) y una pica equivale a 12 puntos (alrededor de 4,23 milmetros). El punto tambin es conocido porque es la medida que suele usarse en los editores de texto para elegir el tamao de una fuente. Cuatro notas a tener en cuenta en todas ellas: Para separar las cifras decimales usaremos el punto que es la norma en las medidas anglosajonas. Si la parte entera de una medida es cero se puede suprimir. Si la medida es cero no se tiene que poner unidad de medida. Un cero es 0
Jos Mara Morales Vzquez Pgina 34
HTML & CSS y basta. Entre la magnitud y la unidad de medida no debe de haber nunca espacios en blanco. Las siguientes reglas seran correctas:
#1 XC nt-siO*% .Pin4Y $ X&i+t#% ;P2)4 C nt-siO*% 6.P$t4Y $.+*sta2a+ X&i+t#% 100))4 Y t+ X&i+t#% 10$24 Y
Unidades relativas
Las unidades relativas son mucho ms flexibles que las absolutas. Adems, es altamente recomendable usarlas siempre que se pueda porque ante la gran diversidad de dispositivos que se pueden usar a la hora de ver una p gina web (porttiles, grandes televisores de plasma, tablets, telfonos mviles...), estas son las que mejor se adaptan a cualquier situacin. Los pxeles son la medida relativa ms conocida. Se trata de una medida relativa a las dimensiones del dispositivo donde estamos viendo la pgina web. Un ejemplo:
#r X&i+t#% P00$34Y
em (ojo: no confundirlo con la etiqueta em de HTML) y ex son medidas relativas a las dimensiones de la tipografa que estamos usando. Son medidas muy conocidas por los profesionales de la tipografa. 1em representa, aproximadamente, el ancho de la letra M mayscula que estamos usando teniendo en cuenta tanto la tipografa como el tamao de la misma: no es lo mismo una m si estamos usando una Arial Narrow que si estamos usando una Courier New. Igualmente, para cualquiera de ambas el tama o vara si estamos usando una fuente a 12 puntos o a 18. 1ex equivale a la altura de una letra x minscula. Aunque no se trata de una regla exacta, 1em suele aproximarse como el tamao de la fuente que estamos usando (es decir, si estamos usando una fuente a 12 puntos, 1em equivale a 12 puntos).
8 +1 XC nt-siO*% .]*)4Y
Si consideramos cierta la aproximacin que hemos dicho antes, podemos decir que una fuente con un tamao de .9em es, aproximadamente, el 90% de la fuente normal que debera de tener esa etiqueta. Una con 1.5em sera del 150%
$ XC nt-siO*% 1.P*34Y
Tambin se suele aproximar, aunque esto es bastante m s irregular, que 1ex equivale aproximadamente a 0.5 em Aunque a primera vista son medidas que parece que s lo tienen sentido aplicadas a tipos de letra, podemos usarlas sobre cualquier elemento de nuestra web:
Pgina 35
Y una nota importante: la referencia sobre la que se calcula el tama o relativo de un elemento cuando usamos estas medidas es siempre es el tama o de letra de su elemento padre, es decir, del elemento en el que se encuentra. Si el elemento no se encuentra dentro de ningn otro elemento, la referencia es el tamao de letra del elemento body. Si no se indica de forma explcita un valor para el tamao de letra del elemento body, la referencia es el tamao de letra por defecto del navegador. Lo podemos ver con este ejemplo:
8 +1 X C nt-siO*% 10$34 Y #1 X C nt-siO*% 1*)4 C nt-&*i'#t% n r)a!4Y
Al aplicar esto a nuestra web, definimos el tipo de letra base a 10 p xeles y el tamao de los titulares de primer orden a 1em que, como hemos dicho, equivale aproximadamente al tamao de la letra base, es decir, que no habra diferencia entre los titulares de primer orden y el texto normal. Otro ejemplo:
8 +1 X C nt-siO*% 1;$34 Y str n' X C nt-siO*% 1.;*)4Y
Con esto, todas las negritas seran, aproximadamente, un 20% ms grandes sobre el tamao del texto en el que se colocan.
Porcentajes
El porcentaje es otra forma de expresar una medida usada ampliamente en CSS que, adems, tambin se considera una unidad relativa. Se pueden usar para expresar el tamao de una fuente:
$ XC nt-siO*% )*+i/)4Y $.'ran+* XC nt-siO*% ;00V4Y
Cuando aplicamos un porcentaje como una unidad de medida general, este se refiere al espacio que el objeto debera de ocupar. Por ejemplo, una linea horizontal ocupa normalmente el ancho de la pantalla completa. Si aplicamos la siguiente regla CSS ocupar solamente la mitad:
#r X&i+t#% P0V4Y
La W3C recomienda encarecidamente usar pxeles y porcentajes como unidades de medida para especificar el tamao de los diferentes objetos y em como unidad para especificar el tamao de las fuentes. Cuando se prepara un documento HTML cuya finalidad es tener salida impresa en papel y no en un dispositivo ptico, es mejor el uso de puntos y picas.
Veremos a continuacin algunas propiedades aplicables al texto de nuestros documentos que an no conocemos. La propiedad line-height ajusta el interlineado del texto. El valor normal es el que
Jos Mara Morales Vzquez Pgina 3
HTML & CSS debera de tener por defecto. Podemos variar este poniendo un porcentaje, un nmero o una medida en valor absoluto o relativo. Las siguientes reglas CSS ser an prcticamente equivalentes:
$ X !in*-#*i'#t% 1.P4Y $ X !in*-#*i'#t% 1.P*)4Y $ X !in*-#*i'#t% 1P0V4Y
La propiedad text-indent nos permite que la primera lnea de cada prrafo aparezca desplazada haca la derecha respecto al resto del prrafo. Se puede usar una medida (po ejemplo, 2.5em) o un porcentaje relativo al ancho total de la lnea del prrafo (un 50% hara que la primera lnea empezara justo en su mitad). Admite valores negativos que haran que la primera lnea del prrafo empiece ms a la izquierda del mismo. letter-spacing y word-spacing son dos propiedades que nos sirven para controlar el espacio en blanco que separa cada dos letras o cada dos palabras, respectivamente. Los posibles valores son normal o una medida, representando esta el espacio adicional que se suma o resta (admite valores negativos) al espaciado por defecto.
h1.juntito { letter-spacing: -.2em; } $.s*$ara+ X & r+-s$a2in'% .P*)4 Y
La propiedad white-space controla la forma en que se trataran los espacios en blanco, los saltos de lnea y el ajuste de las mismas. Los posibles valores son normal, pre, nowrap, pre-wrap y pre-line. normal y pre son las ms usadas. La primera representa el comportamiento normal del navegador (s lo se respeta el primer espacio en blanco y ningn salto de lnea pero estas se ajustan) y pre el que obtendramos usando la etique pre de HTML (se respetan todos los espacios en blanco y saltos de lnea que hagamos pero las lneas no se ajustan y si son muy largas desbordan el espacio asignado). Las tres restantes son variantes de estas tres posibiliddes. no-wrap seria como normal pero sin ajustar las lneas, pre-wrap sera como pre pero ajustando las lneas y, por ltimo, pre-line sera como pre pero sin respetar los espacios en blanco. La propiedad vertical-align nos ayuda a alinear elementos de diferentes alturas situados en la misma lnea. La mejor forma de verlo es colocando una peque a imagen junto a una lnea de texto y hacer pruebas con los diferentes valores posibles. Supongamos la siguiente lnea de HTML:
<$,<i)' sr2-"#tt$%//) 5*rnan+ II</$, +!*./$ na+a1.n*t/! ' .7$'" a!t-"5P" /, IEU (*1
Como observamos, texto e imagen se alinean por la base que es el valor por defecto. Sera equivalente a usar el valor baseline para esta propiedad. Creemos ahora la siguientes reglas CSS:
i)' X8 r+*r%1$3 s !i+4 0*rti2a!-a!i'n% t*3t-8 tt )4Y
Pgina 3!
HTML & CSS La diferencia entre el valor text-bottom y baseline es prcticamente inapreciable: apenas veremos que la lnea de texto asciende un poco. El primero alinea la parte inferior de la imagen con la parte ms baja de las letras, mientras que baseline realiza la alineacin con la lnea base de escritura de estas. middle es uno de los valores ms corrientes y alinea el centro de la imagen con el centro de la lnea de texto, mientras que text-top alineara la parte superior de ambos elementos. top y bottom son dos atributos similares a, respectivamente, text-top y text-bottom pero ms orientados a cuando queremos alinear diversas imgenes de diferentes alturas. sub y super son dos valores raramente usados. Alnearian la base de la imagen con la lnea base de los subndices o de los superndices del texto, respectivamente. Por ltimo, podemos poner una medida o un porcentaje. La medida puede ser positiva o negativa y representa la distancia desde la base de la imagen con la base de la lnea de texto (medidas negativas haran descender la lnea de texto). El porcentaje tiene el mismo efecto correspondiendo el 100% con el alto de la lnea de texto . Con una tipografa de 12 puntos, un desplazamiento de -100% o de -12pt deber a de ser prcticamente equivalente. La propiedad text-decoration permite los valores none (por defecto), /n+*r!in*R 0*r!in*R !in*-t#r /'# o 8!in=. La propiedad text-transform admite los valores none (por defecto), capitalize, uppercase y lowercase.
Los estilos se aplican a las listas mediante tres propiedades: list-style-type, liststyle-image y list-style-position. list-style-type define el tipo de encabezado de cada uno de los items de la lista. circle, disc, square o none son algunos de los ms usados, pero tambin existen otros muchos que puedes consultar aqu: http://www.w3schools.com/cssref/pr_list-style-type.asp list-style-image nos permite usar una imagen de nuestra eleccin como encabezado de cada item en lugar de uno de los predefinidos con la propiedad anterior. Como siempre en estos casos hay que especificar la URL de acceso a la imagen. Si se especifica junto con list-style-type, esta segunda slo se tendr en cuenta si la imagen que especificamos no es accesible. list-style-position es una de esas propiedades de ajuste fino del formato y se usa para especificiar si el marcador de principio del item debera de aparecer dentro (inside) o fuera a la izquierda ( outside) de la caja en la que debera de aparecer cada item de la lista. El valor por defecto es outside. Existe una propiedad abreviada llamada list-style que permite definir a las tres anteriores en una sla regla. Las siguientes declaraciones, por tanto, seran
Pgina 3"
Existen muchas otras propiedades CSS que admiten reglas abreviadas que engloban a varias otras relacionadas. Algunas las iremos viendo ms adelante y otras son fciles de identificar en los ejemplos.
div y span son dos nuevas etiquetas HTML cuyo objetivo es no hacer nada por defecto. Puedes hacer la prueba de colocarlas en un documento HTML y podr s comprobarlo por ti mismo. El objeto de ambas es dar estructura a nuestro documento. Se usan conjuntamente con las hojas de estilo y, particularmente, con los selectores de clase e ID. div es una etiqueta de bloque ideada para estructurar de forma lgica nuestra pgina. Sera similar a un prrafo pero, mucho ms flexible y, adems, por defecto no conlleva la aplicacin de ningn estilo. La etiqueta span es muy similar pero se trata de una etiqueta de lnea y se usa para agrupar elementos a los que aplicar estilos diferenciados. Veamos el body del siguiente HTML:
<8 +1, <+i0 2!ass-"0*r+*", <#1,<a i+-"I"ICIO",Tit/!ar +* !a <str n',$a'ina</str n',</a,</#1, <$,Ui )*!i ra +i*s... 8raR 8ra...</$, <#r /, <$,Otr $NrraC ... 8raR 8raR 8ra...</$, </+i0, <$,Est* 8! ./* 1a *stN C/*ra +*! *C*2t +*! ant*ri r 8! ./* +i0 1R $ r tant R s/ C n+ s*rN 8!an2 .</$, </8 +1,
Observamos que, efectivamente, mediante div podemos agrupar diferentes elementos de bloque y aplicar propiedades de forma conjunta a todos ellos. Podramos conseguir el mismo efecto aadiendo class=verde como atributo a todos los elementos de bloque incluidos en el elemento div, pero sera ms pesado, menos claro y podra dar lugar a ms errores e inconsistencias. Imaginemos ahora que queremos marcar de forma especial con otro estilo y otro
Pgina 3#
HTML & CSS tamao, la primera letra del primer prrafo de un libro de cuentos que queremos publicar en la web. Usaremos para ello una fuente de Google Fonts, as que incluimos esto en el head de nuestro HTML:
<!in= #r*C-^#tt$%//C nts.' '!*a$is.2 )/2ssLCa)i!1-( 2=TUa!t^ r*!-^st1!*s#**t^ t1$*-^t*3t/2ss^,
(NOTA: Ms adelante veremos que existe otra forma ms profesional de hacer esto mismo mediante los pseudo-elementos).
4.4. HERENCIA
Podemos expresar cualquier documento HTML mediante una estructura en forma de rbol. Por ejemplo, tengamos el siguiente HTML sencillo (en el que, intencionadamente, hemos suprimido algunas de las etiquetas y atributos para simplificarlo):
<#t)!, <#*a+, <tit!*,Mi &*8</tit!*, </#*a+, <8 +1, <#1,La &*8 +*! $r C* +* L*n'/a7* +* Mar2as</#1, <$,? s> MarJa M ra!*s *s *! <str n',$r C*s r</str n', +* *st* a: +* !a asi'nat/ra 1R *ntr* tras 2 sasR 0a) s a 0*r 2 n >!%</$, </!, <!i,HTML 1 <*),_HTML</*),</!i, <!i,CUU</!i, <!i,_ML</!i, <//!, </8 +1, </#t)!,
Podramos ver la estructura de nuestro documento HTML esquematizada como el siguiente rbol:
Pgina 4$
Pues bien, la herencia de CSS hace que las propiedades de los diferentes elementos se traslade siempre hacia abajo a travs del rbol salvo que dichas propiedades sean reescritas, bien por los estilos por defecto, bien por una regla apropiada que hayamos introducido nosotros. Por ejemplo, el elemento con la etiqueta strong aparecer en negrita, no porque nosotros lo hayamos especificado as, sino porque as est definido por defecto y aunque definamos la propiedad font-weight: normal para el selector body seguirn siendo negritas. Sin embargo, si definimos la propiedad color: orange; y background-color: black en el selector body, todo aparecer con fondo negro y letras naranjas. Si nuestra pgina web sencilla llevara un enlace (etiqueta a) el fondo si aparecera negro, pero el color sera azul porque esa etiqueta si tiene la propiedad color sobreescrita. En definitiva: las propiedades de estilo se heredan siempre haca abajo en el rbol salvo que dicha propiedad sea rescrita, bien esplicitamente, bien con una regla por defecto.
4.5. ESPECIFICIDAD
A nadie se le escapa a estas alturas que a medida que vayamos haciendo m s complejas nuestras hojas de estilo, ms dificil ser saber en algunas ocasiones que regla prevalecer sobre otra. Ya hemos dicho que, en igualdad de condiciones (por ejemplo, dos reglas que hacen referencia a estilos contradictorios para la
Jos Mara Morales Vzquez Pgina 41
HTML & CSS etiqueta p), se le dar preferencia a la que est ms cercana al contenido si las reglas se encuentran en diferentes sitios (las ms prioritarias seran las consignadas a travs del atributo style en el propio HTML, las siguientes las que escribimos directamente en la seccin head del mismo y, por ltimo, aquellas que van en un fichero externo). Ante dos reglas que estn en el mismo sitio (por ejemplo, ambas en dos lneas diferentes de un mismo archivo externo CSS) se le dar preferencia a la que est escrita en ltimo lugar. Estas reglas nos ayudan a solucionar los casos ms simples de conflicto pero, que ocurre cuando el problema lo plantean dos reglas totalmente diferentes que se deberan de aplicar al mismo elemento? Para eso surge lo que llamamos especificidad. Imaginemos que nuestro CSS tiene las siguientes reglas:
/! ! !i.a!*rta X2 ! r% r*+4 Y .a!*rtaX2 ! r% 8!/*4Y !i.a!*rtaX2 ! r% 1*!! &4 8a2='r /n+-2 ! r% 1*!! &4Y /! .a!*rtaX2 ! r% 'r**n4Y
Qu regla o reglas se aplicaran al elemento cuyo atributo class corresponde con alerta, correspondiendo este con las cuatro reglas que aparecen en el CSS? Puedes probar que cualquiera de ellas se corresponde con el elemento ponindolas una a una. Si las pones todas juntas, independientemente del orden en que estn observars que el texto aparece con color rojo y el fondo con color amarillo, es decir, se est aplicando la regla 1 y, parcialmente, la regla 3. El hecho de que el fondo aparezca amarillo es bien sencillo: aparece as porque, no entra en conflicto con ninguna propiedad de otra regla. De hecho, podemos ver que si movemos esa propiedad a cualquiera de las otras reglas el fondo seguir apareciendo amarillo. Esto es porque en realidad las estamos aplicando todas y slo en el caso de que exista un conflicto entre propiedades en diferentes reglas tenemos que decidir cual es la que hay que usar. Esto se arbitra calculando la especificidad de la regla. La forma ms ampliamente aceptada de calcular la especificidad es mediante un conjunto de cuatro nmeros separados por comas (por ejemplo 0,1,0,5). Los nmeros a la izquierda tienen un rango mayor que a la derecha y, por tanto, definen a un selector ms especfico y que por tanto prevalece. Ante empate en un nivel, miramos en el siguiente. En caso de empate en todos los niveles
Jos Mara Morales Vzquez Pgina 42
HTML & CSS prevalece la regla escrita en ltima posicin. EJEMPLOS: entre una regla con valor 0,0,1,0 y otra con valor 0,0,0,13 prevalece la primera y entre una regla con valor 0,1,3,1 y otra con valor 0,1,3,2 prevalecer a la segunda. Cmo se calculan estos nmeros? El primero es fcil y se usa cuando el estilo se aplica en el propio HTML mediante el atributo style. Este n mero slo puede valer 0 o 1 (puesto que no podemos duplicar atributos en una misma etiqueta) y tiene siempre la mxima prioridad. Los otros tres se calculan sumando 1 seg n los tipos de selectores que aparezcan en la regla: El segundo nmero se calcula sumando uno por cada selector de id que aparezca en la regla El tercer nmero se calcula sumando 1 por cada selector de clase, selector de atributo o pseudo-clase que aparezca en la regla (los dos ltimos los veremos en el captulo sobre CSS avanzado) El cuarto nmero, el de menor prevalencia, se calcula sumando 1 por cada selector de etiqueta o pseudo-elemento (este ltimo lo veremos tambin en CSS avanzado) que aparezca en la regla. As, si calculamos la especificidad de las cuatro reglas anteriores:
/! ! !iHa!*rta X2 ! r% r*+4 Y .a!*rtaX2 ! r% 8!/*4Y !i.a!*rtaX2 ! r% 1*!! &4 8a2='r /n+-2 ! r% 1*!! &4Y /! .a!*rtaX2 ! r% 'r**n4Y /W /W /W /W 0R1R0R3 0R0R1R0 0R0R1R1 0R0R1R1 W/ W/ W/ W/
Lo que nos confirma que, efectivamente, el color del texto deber a de salir rojo independientemente del orden en que se situen las reglas. Si eliminamos esa regla, el texto saldr en verde, pero puesto que hay un empate entre esta regla y la que dicta que debera de salir amarillo y prevalece la escrita en ltimo lugar. Los selectores de hijos y hermanos (tambin los veremos ms adelante) no aportan una mayor especificidad a las reglas.
La clausula !important
La clausula !important se puede aplicar a cualquier regla aumentando as su nivel de prioridad de forma que prevalezca sobre definiciones posteriores del mismo selector e, incluso, sobre las valoraciones de especificidad. Ante las siguientes reglas, un texto etiquetado como strong, dentro de un prrafo (selector descendiente) y con el id minegrilla aparecera con color rojo:
str n' X2 ! r% r*+ !i)$ rtant4Y $ str n'H)in*'ri!!a X2 ! r% 8!/*4 Y
Pgina 43
5. EL MODELO DE CAJAS
El modelo de cajas se trata, posiblemente, del concepto m s importante relacionado con las hojas de estilo CSS. Como ya hemos dicho antes, todo en HTML est formado por cajas rectangulares que contienen a los diferentes elementos. Mediante las reglas que veremos a continuacin podremos cambiar el aspecto y comportamiento de las mismas.
HTML y CSS definen una caja como una zona rectangular constituida por los siguientes elementos:
Tenemos, adems, control total y de forma individual de cada una de las dimensiones de las tres capas externas. El contenido suele ser din mico (en una o en sus dos dimensiones) o especificarse con dos valores: ancho y alto. Como unidades de medida tenemos todas las que ya conocemos La principal confusin que suelen tener los primerizos es la forma de calcular las dimensiones totales de la caja. Supongamos una caja cuyo contenido tiene un ancho de 200 pxeles, el margen interior es de 20 pxeles, el borde de 5 y el margen externo de 25 pxeles Cul es el ancho total de la caja? Haz las cuentas: son 300 pxeles verdad?. Es mucho mejor verlo antes de echarle un vistazo a la sintaxis que es an ms engaosa:
.*7*)$! X &i+t#% ;00$34 #*i'#t% 100$34 8 r+*r% P$3 s !i+ 8!/*4 $a++in'% ;0$34 )ar'in% ;P$34 8a2='r /n+-2 ! r% 1*!! &4 Y
Y aqu, una nota por si alguien an no se ha dado cuenta de la importancia del DOCTYPE: El internet explorer ha considerado durante mucho tiempo que el borde interior y los mrgenes forman parte del contenido pese a que la
Jos Mara Morales Vzquez Pgina 44
HTML & CSS especificiacin de la W3C jams ha dicho esto. An con Explorer 9, si nuestro HTML no especifica un DOCTYPE, nos visualizar la pgina en modo de compatibilidad (quirk mode) y nos dibujar una caja con un tamao de 250 pxeles, de forma que el contenido til ser de slo 150 pxeles.
NOTA IMPORTANTE: La altura slo puede valer un porcentaje si su padre o elemento contenedor tiene definida una altura con un valor concreto. En caso contrario se ignorar y tomar el valor auto.
HTML & CSS para esto son margin-top, margin-right, margin-bottom y margin-left para el margen externo y padding-top, padding-right, padding-bottom y padding-left para el interno. Una ltima posibilidad, ms compacta, es usar la propiedad margin con uno, dos, tres o cuatro valores:
/W ;0$3 $ara 2a+a )ar'*n W/ )ar'in% ;0$34 /W ;0$3 $ara s/$*ri r * inC*ri r 1 10$3 $ara +*r*2# )ar'in% ;0$3 10$34 * iO./i*r+ W/
/W ;0$3 $ara *! s/$*ri r 10$3 $ara ! s !at*ra!*s 1 30 $ara *! inC*ri r W/ )ar'in% ;0$3 10$3 30$34 /W ! s 2/atr *n *! s*nti+ +* !as a'/7as +*! r*! 7% ;0$3 s/$*ri rR 10$3 +*r*2# R 30$3 inC*ri r 1 10$3 iO./i*r+ W/ )ar'in% ;0$3 10$3 30$3 10$34
Un truco habitual para mostrar una caja centrada con respecto al elemento donde est contenida es hacer que los mrgenes a izquierda y derecha sean iguales y calcular el tamao exacto que deben tener. Esto es relativamente fcil cuando trabajamos nicamente con porcentajes, pero no siempre es posible. El navegador lo har solo estableciendo los mrgenes laterales a auto. Existe una peculiaridad con respecto a los mrgenes exteriores de las cajas. As como los mrgenes derecho e izquierdo de cajas contiguas se suman, los superior e inferior de cajas adyacentes se solapan. Imaginemos, por ejemplo, dos cajas con margen exterior de 20 pxeles en cada una de sus cuatro dimensiones. Si las situamos una junto a otra tendremos 40 pxeles de separacin pero si ponemos una encima de la otra slo estarn separadas por 20 pxeles. Para la propiedad padding la sintaxis es similar. Adems, el margen exterior permite valores negativos (experimenta con los resultados!) mientras que el interior traducir un valor negativo por cero. Y un ltimo detalle: el body de un documento HTML es tambin una caja y puede tener predefinidos valores para el margin y el padding de forma que nos quede un pequeo borde sin usar en la superficie del navegador. Si no queremos que esto sea as podemos usar esta regla:
8 +1 X)ar'in% 0$34 $a++in'% 0$34 Y
El borde de la caja
El borde de la caja se define mediante tres propiedades: color, grosor y estilo: border-color, border-width y border-style, aunque luego veremos que tenemos ms posibilidades tanto para simplificar la definicin como para particularizarla con mucho ms detalle como hemos hecho con los mrgenes. La forma abreviada de especificar las caractersticas del borde de la caja es esta:
8 r+*r% r*+ + /8!* P$34
Pgina 4
HTML & CSS Donde el primer parmetro es el color (de cualquiera de las formas que hemos aprendido a definirlo), el segundo el estilo (siendo vlidos los valores solid, dashed, dotted, double, groove, ridge, inset, outset, hidden o none) y el tercero es el ancho del borde que puede ser un valor de longitud (nunca un porcentaje) o las palabras clave thin, medium o thick. Este formato abreviado slo es vlido cuando las cuatro dimensiones del borde son iguales. Los parmetros pueden ir en cualquier orden pero deberan de ir los tres (aunque la mayora de los navegadores nos admitiran uno o dos solamente). Los valores por defecto si prescindimos de alguno son black para el color, medium para el grosor y none para el estilo. La diferencia entre none y hidden es que aunque en ninguno de los casos el borde es visible, en el segundo influye respecto al lugar donde se dibujar a un elemento adyacente mientras que el primero se considera con un ancho de 0px. Podemos especificar cada una de estas tres propiedades por separado con los atributos border-color, border-style y border-width. Asimismo, podemos cambiar los valores de cada una de las cuatro dimensiones en cada uno de ellos usando atributos especficos (border-top-color, border-bottom-color, border-left-color y border-right-color, por ejemplo) o con una lista de dos, tres o cuatro valores sobre el atributo principal igual que hemos hecho con los mrgenes:
/W P$3 $ara s/$*ri r * inC*ri r 1 P0$3 $ara +*r*2# 8 r+*r-&i+t#% P$3 P0$34 * iO./i*r+ W/
/W + tt*+ *! s/$*ri rR s !i+ $ara ! s !at*ra!*s 1 +as#*+ *! inC*ri r W/ 8 r+*r-st1!*% + tt*+ s !i+ +as#*+4 /W ! s 2/atr *n *! s*nti+ +* !as a'/7as +*! r*! 7% r*+ s/$*ri rR 8!/* +*r*2# R 'r** inC*ri r 1 $/r$!* iO./i*r+ W/ 8 r+*r-2 ! r% r*+ 8!/* 'r**n $/r$!*4
UNA NOTA MUY IMPORTANTE: todos estos elementos son vlidos para cualquier selector que apliquemos tanto a un elemento de lnea como de bloque aunque, tienen mucho ms sentido (sobre todo algunos de ellos) sobre uno de bloque. Existe otra propiedad llamada outline mucho menos flexible para aplicar bordes a las cajas.
/t!in*% 3$3 s !i+ 8!a2=4
outline no roba espacio a las dimensiones de la caja y, por tanto, no afecta a las dimensiones de esta. Es, por decirlo de alguna forma, como si us ramos un borde exterior al borde de la caja. Por contra es mucho menos flexible que border y, por ejemplo, no podemos especificar propiedades diferentes a sus diferentes segmentos.
Jos Mara Morales Vzquez Pgina 4!
Si la imagen est en el propio directorio donde se encuentra la imagen y, por ejemplo, se llama burbujas.jpg sera as: url(burbujas.jpg). Al igual que ocurra con el valor del atributo src de la etiqueta img, si la imagen se encuentra en el propio servidor pero en otro directorio diferente podramos especificar una ruta absoluta, relativa, etc. Por defecto la imagen se coloca en formato de mosaico. Podemos controlar este valor mediante la propiedad background-repeat cuyos posibles valores son repeat, repeat-x, repeat-y o no-repeat. El valor por defecto es repeat. Mediante la propiedad background-position podemos dar posicin a nuestra imagen de fondo, tanto si estamos usando no-repeat, como si lo estamos haciendo (en cuyo caso posicionara una de las imagenes y creara el mosaico a partir de esta.) Tenemos tres posibilidades:
/W P si2i na !a *s./ina s/$*ri r iO./i*r+a +* !a i)a'*n *n !a 2a7a. EstN $*r)iti+ *! /s +* 0a! r*s n*'ati0 s W/ 8a2='r /n+-$ siti n% P0$3 100$34 /W I+*) a! ant*ri r $*r /san+ 2a7a W/ 8a2='r /n+-$ siti n% ;0V P0V4 $ r2*nta7*s s 8r* !as +i)*nsi n*s +* !a
/W a!in*a !a i)a'*n *n !a 2a7a a+)iti*n+ ! s 0a! r*s !*Ct 2*nt*r ri'#t $ara !a $ si2iBn # riO nta! 1 t $ 2*nt*r 8 tt ) $ara !a 0*rti2a!. E! r+*n *s in+iC*r*nt* W/ 8a2='r /n+-$ siti n% 2*nt*r 2*nt*r4
Otra propiedad interesante es background-attachment. Tiene dos posibles valores: scroll o fixed. El primer valor es el del comportamiento por defecto: la imagen se desplaza al mismo tiemp que se desplaza la p gina. El segundo permite que esta se fije en su posicin y que lo nico que se desplace sobre ella sea el contenido de la pgina. Al igual que en otras de las opciones vistas, tambin tenemos un formato abreviado para definir todas estas propiedades de una sla vez. Por ejemplo, si tenemos las siguientes reglas:
8a2='r 8a2='r 8a2='r 8a2='r 8a2='r /n+-i)a'*% /r!Z' tas.'iC\4 /n+-2 ! r% 8!/*4 /n+-r*$*at% r*$*at-34 /n+-$ siti n% 2*nt*r t $4 /n+-atta2#)*nt% Ci3*+4
Pgina 4"
El orden de los valores es indiferente y si omitimos alguno de ellos el navegador lo completar con la opcin que tenga definida por defecto.
Pon atencin a dos cosas: en primer lugar la posicin del segundo div se realiza de forma relativa al primero. Adems, el prrafo final se superpone a la caja nmero 2 verdad? Para entender la causa de ambas cosas piensa en el rbol formado por las etiquetas HTML. El segundo div es hijo del primero y por eso calcula su posicin de forma relativa a la de su padre. Por el mismo motivo, como el prrafo final es hermano del primer div constituye su referencia para fijar su posicin en la pantalla.
Hasta ahora no nos hemos preocupado de controlar la posici n de los elementos que colocamos en nuestro HTML y dejamos que estos se vayan situando uno debajo o al lado del anterior y que sea el navegador el que lo disponga. Esto se debe a que, por defecto, usamos un modo de posicionamiento que se denomina esttico (static). La propiedad CSS que lo controla se llama position. Aparte de static, esta propiedad dispone de tres posibles valores m s: relative, absolute y fixed. Si usamos el valor relative, la posicin se indica respecto a la que debera de tener de forma normal dicho elemento. Se hace mediante las propiedades top, bottom, left y rigth. left y top, las ms usadas, aplican un desplazamiento medido desde la esquina superior izquierda del elemento pudiendo ser este negativo si se expresa mediante un valor mientras que bottom y right miden ese desplazamiento desde la esquina inferior derecha del elemento. Lgicamente, no tiene mucho sentido usar conjuntamente top y bottom o left y right. Se pueden usar porcentajes siendo estos relativos al tamao del elemento padre al que pertenecen.
+i0.2a7a1 X$ siti n% r*!ati0*4 !*Ct% 10V4 t $ -;0$34Y +i0.2a7a; X$ siti n% r*!ati0*4ri'#t% -40$34 8 tt )% 40$34Y
Si usamos el valor absolute el elemento se posiciona exactamente en las coordenadas que indiquemos. La forma de indicar la posicin usa las mismas propiedades vistas en el caso del posicionamiento relativo pero en este caso estn referidas a su elemento padre. Si dicho elemento padre es el body del
Jos Mara Morales Vzquez Pgina 4#
HTML & CSS documento HTML estamos haciendo que la posicin de este elemento sea independiente del resto del documento HTML de forma que nada que a adamos o quitemos a este puede alterar su posicin. Si ests trabajando con cajas, no olvides que el margen exterior de la caja, es parte de la misma. El ltimo valor es fixed. Funciona de forma muy similar al anterior en cuanto a la forma de marcar el lugar donde lo posicionamos salvo que en este caso la posicin del elemento queda fija incluso cuando nos desplazamos a trav s del documento HTML usando las barras de desplazamiento.
2/1
En /n !/'ar +* !a )an2#a +*
n )8r* n ./i*r a2 r+ar)* n #a2* )/2# ./* 0i0Ja /n #i+a!' ... </+i0, <+i0 2!ass-"2a7a",Ca7a ;</+i0, <+i0 2!ass-"2a7a",Ca7a 3</+i0, </+i0, <+i0 i+-"+*r*2#a",Est *stN *n !a 2 !/)na +* !a +*r*2#a</+i0, <+i0 i+-"$i*",T + s ! s +*r*2# s r*s*r0a+ s</+i0, </+i0,
Observamos que las cajas que usan el selector de id derecha e izquierda se posicionan, respectivamente, a derecha e izquierda de la superficie til de su elemento padre, que aqu marcamos como contenedor. El resultado ya empieza a parecerse a una web actual, pero an nos queda mucho trabajo para que pueda considerase aceptable desde el punto de vista est tico. Observa tambin que puesto que hemos usado porcentajes en las dimensiones clave de las reglas, la pgina se redimensiona cuando cambiamos la superficie til de nuestro navegador. Y una ltima cosa: para que te des cuenta de lo importante de las medidas en CSS, trata de modificar con una cantidad irrisoria el ancho de la caja izquierda (pon, por ejemplo, 80.005%) o introduce un peque o padding en las reglas correspondientes al estilo del selector id izquierda y vers como se descuadra todo el conjunto. float es un parmetro que se usa no slo para posicionar cajas sino, por ejemplo, para posicionar una imagen dentro de un prrafo. La regla CSS:
.a+*r*2#a XC! at% ri'#t4 Y
Y el HTML:
<i)' 2!ass-"a+*r*2#a" sr2-"2/$.$n'" a!t-"2 $a" /, <$, L r*) i$s/) + ! r sit a)*tR 2 ns*2t*t/*r a+i$is2in' *!it. U*+ n n ris/s. U/s$*n+iss* !*2t/s t rt rR +i'nissi) sit a)*tR a+i$is2in' n*2R /!tri2i*s s*+R + ! r. Cras *!*)*nt/) /!tri2*s +ia). Ma*2*nas !i'/!a )assaR 0ari/s aR s*)$*r 2 n'/*R */is) + n nR )i.</$,
Por lgica, se trata de un atributo que no tiene ningn efecto cuando estamos usando posicionamiento absolute o fixed. La propiedad clear nos permite anular los efectos de la propiedad float. Tiene cuatro valores posibles: none (por defecto), right, left o both. Los dos primeros anularan un float right o left, respectivamente. El valor both los anulara a ambos. Para ver el efecto, aadamos la siguiente regla a nuestro CSS anterior:
.sinC! at X2!*ar% ri'#t4Y
Como podemos ver, el nuevo prrafo salta a la parte inferior de la imagen como se habra comportado si esta no tuviera el atributo float mientras que el prrafo anterior sigue atenindose a su existencia.
Si prescindimos de la propiedad z-index, la caja 3 solapar a la 2 y esta a la 1. Con la propiedad z-index la caja 3 ser la que vaya al fondo mientras que la 1 se encontrar en primer plano. Por defecto el valor de z-index es auto y el ndice de capa base se asigna al 0. Por convencin se suele usar el -1 como la capa de fondo y el 999 como la capa que queremos en primer plano, pero en realidad como hemos dicho, la propiedad admite cualquier valor entero negativo o positivo. Entenders, adems, que esta propiedad no tiene ningn efecto ante elementos que no se solapan. Por ltimo, como ves en la caja 1 se ha establecido la propiedad position como relative aunque no se efectua ningn desplazamiento sobre su posicin normal. Esto es porque la propiedad z-index slo tiene efecto sobre elementos en los que se han modificado las propiedades position o float.
Jos Mara Morales Vzquez Pgina 52
Modifica el valor de overflow para ver las diferentes posibilidades. Y cuidado. Al igual que ocurra con la propiedad visibility, si aqu usamos el valor hidden esto no implica que no se pueda ver en la vista de cdigo de la pgina. Existen las propiedades overflow-x e overflow-y por si queremos controlar individualmente las dos posibles barras de scroll posibles. La propiedad clip nos permite fijar la parte visible de un elemento definiendo una zona rectangular y slo es aplicable en elementos cuya posicin se ha fijado como absolute. La sintaxis es as:
2!i$% r*2tZ0 ;00$3 100$3 0\4
Esto dejara visible un rectngulo que, respecto al elemento en el que se aplique, empieza a 0px de la parte superior, llega hasta los 200px hac a la derecha, 100px hacia abajo y 0px desde la izquierda (o sea, cuatro coordenadas en el sentido de las agujas del reloj empezando desde arriba, como siempre) Puedes ver un ejemplo completo con esta regla CSS:
.2a7a X &i+t#% ;PV4 $a++in'% P$34 $ siti n% a8s !/t*4 8 r+*r% 1$3 +as#*+ 8!a2=4 2!i$% r*2tZ0 ;00$3 100$3 0\4Y Jos Mara Morales Vzquez Pgina 53
Y la misma advertencia de siempre: recuerda que la parte que no es visible se puede ver con la opcin de Ver cdigo del navegador!
Un ejemplo:
.2a7a X &i+t#% P0V4 $a++in'% P$34 8 r+*r% 1$3 +as#*+ 8!a2=4 2/rs r% 2r ss#air4Y
Pgina 54
En realidad la propiedad display es mucho ms compleja y tiene otras opciones disponibles, pero no vamos a detenernos a verla. Existe una buena referencia acerca de ella aqu: http://www.librosweb.es/referencia/css/display.html
Si se indican dos valores el primero hace referencia a la separaci n horizontal y el segundo a la vertical. En el caso de indicar un slo valor se aplica a ambas distancias Por ltimo, la propiedad empty-cells tiene dos posibles valores (show o hide) controla que se vean o no los bordes y fondo de las celdas vacas de una tabla. El valor por defecto es show.
Pgina 55
6. SELECTORES AVANZADOS
Aunque hemos dicho que prcticamente cualquier pgina web puede hacerse con los cinco selectores bsicos que ya conocemos, existen algunos que se llaman avanzados que nos van a permitir, bien simplificar algunas tareas de aplicacin de estilos o bien permitirnos algunos efectos imposibles de conseguir de ninguna otra forma como es el caso de la utilidad proporcionada por alguna de las pseudo-clases. Los presentaremos en las siguientes pginas.
Selector de hijos
El selector de hijos es muy similar al selector descendiente pero es mucho m s especfico. Cuando uso un selector descendiente, por ejemplo p .destacado slo me importa que el elemento perteneciente a la clase destacado se encuentre dentro del elemento p, sin importarme cuan profundo se encuentre dentro del rbol jerrquico de etiquetas del documento. Si uso el selector de hijo es porque quiero que el elemento con la clase destacado sea hijo directo del elemento p y no un descendiente cualquiera. Y se simboliza as:
$ , .+*sta2a+ X2 ! r% $/r$!*4 Y
Para aplicar un determinado estilo al primer prrafo despus de un titular de nivel 1, usaramos la siguiente sintaxis:
#1 T $ Xt*3t-in+*nt% ;.P*)4 Y
Pgina 5
HTML & CSS El selector de hermanos es una forma muy til de crear estilos para ciertas combinaciones de elementos muy utilizados: el primer prrafo de un captulo, el primer prrafo posterior a una tabla, etc. Tambin es til para seleccionar todos los elementos menos el primero en una secuencia determinada. Por ejemplo:
$ T $ X t*3t-in+*nt% 1.P*)4 Y
Selector de atributos
Los selectores de atributos nos permiten aplicar estilos a determinados elementos en funcin de los atributos que acompaen a la etiqueta HTML o de los valores que tengan dichos atributos. Si nos paramos a pensar, en realidad los selectores de clase o de ID son una especie de selectores de atributo porque aplican estilos en funcin del valor de un atributo (class o ID, respectivamente), as que no vamos a ver nada demasiado nuevo en este apartado. Existen cuatro tipos diferentes de selectores de atributo. Los primeros seleccionan los elementos en funcin de un determinado atributo independientemente de su valor:
t+br &s$anc X8a2='r /n+-2 ! r% 8!a2=4 2 ! r% &#it*4 Y
La tercera clase de selectores de atributos realiza su seleccin en funcin del atributo y de la existencia de un determinado valor pero que no tiene porqu ser unico, sino simplemente aparecer en una lista separada por espacios:
+i0b2!assd-Aa!*rtaAc X2 ! r% r*+4Y
Podemos correr el riesgo de pensar que simplemente es una forma de hacer m s complicado lo que ya sabemos hacer con otros selectores m s simples. Por ejemplo, estas definiciones son casi idnticas:
+i0.a!*rta X2 ! r% r*+4Y +i0b2!ass-Aa!*rtaAc X2 ! r% r*+4Y +i0b2!assd-Aa!*rtaAc X2 ! r% r*+4Y
El cuarto tipo de selector de atributo apenas tiene utilidad. Permite seleccionar elementos con cierto atributo y que incluyen un determinado valor como el primer elemento de una lista separada por guiones.
Wb!an'e-"*s"c X 2 ! r% 8!/*4 Y
El anterior ejemplo seleccionara a todos los elementos con un atributo lang que
Jos Mara Morales Vzquez Pgina 5!
HTML & CSS empiece por es- (por ejemplo es-ES, es-MX, es-AR, etc.) De hecho esta es su principal (y casi nica) utilidad: la seleccin de elementos segn los cdigos estndares de idiomas.
Existen ciertos estados o caractersticas de nuestro documento HTML a los que es til y apropiado aplicarle un estilo diferenciado: un enlace ya visitado, la primera letra de un prrafo, etc. Esto se consigue mediante las pseudoclases. Para identificar que hablamos de una pseudo-clase en una regla CSS usamos los dos puntos como signo diferenciador y estas pueden aplicarse sobre selectores de tipo, de clase, etc. Veremos ejemplos enseguida. Y una nota: en algunos textos se hace una separacin entre pseudo-clases y pseudo-elementos mientras que en otras se engloban todas bajo la misma categora. Aqu haremos la diferenciacin clsica porque, si bien no existen grandes diferencias, si que es necesario hacer la distincin a la hora de calcular la especificidad de las reglas CSS.
Pseudo-clases
Las pseudo-clases son aquellas que se aplican fundamentalmente sobre los selectores de enlace (aunque alguna de ellas pude aplicarse tambi n sobre otros elementos). Se trata de :link, :visited, :hover, :active y :focus. La pseudo-clase :link hace referencia a un enlace que an no ha sido visitado, mientras que :visited hace referencia a lo opuesto, es decir, los enlaces que ya han sido visitados por el usuario. Dos ejemplos:
a%!in= X2 ! r% 'r**n4 8a2='r /n+-2 ! r% 1*!! &4Y a%0isit*+ X2 ! r% 1*!! &4 8a2='r /n+-2 ! r% 'r**n4 Y
La pseudo-clase :hover nos dicta los estilos a aplicar al pasar el ratn por encima del elemento al que el selector hace referencia. Se suele usar fundamentalmente con enlaces pero es aplicable a cualquier otro elemento:
a%# 0*rR $.+*sta2a+ %# 0*rXC nt-&*i'#t% 8 !+4 Y *)%# 0*r X2 ! r% 8!/*4Y
:active es una pseudo-clase cuyos estilos se aplican al hacer click sobre un elemento o activarlo mediante la tecla Intro cuando tiene el foco:
#1%a2ti0* X2 ! r% ran'*4 8a2='r /n+-2 ! r% 8!a2=4Y
Como imaginamos, muchas de estas propiedades pueden activarse simultaneamente: un enlace puede haber sido visitado y, podemos pasar el rat n por encima de l, etc. EL orden en que se colocan en la hoja de estilos es por ello fundamental para aplicarlos correctamente cuando queremos aplicar reglas distintivas a todos ellos:
a%!in= X2 ! r% 8!/*4Y a%0isit*+ X2 ! r% 'r**n4Y a%# 0*r X2 ! r% ran'*4Y Jos Mara Morales Vzquez Pgina 5"
Podemos aplicar tambin reglas a dos pseudo-clases simultaneamente. Por ejemplo, la siguiente regla se aplicara sobre un enlace visitado sobre el que hacemos click:
a%0isit*+%a2ti0* X2 ! r% 8!a2=4 8a2='r /n+-2 ! r% ran'*4Y
Por ltimo, :focus es una regla que se aplica cuando el elemento tiene el foco, es decir, cuando se activara si pulsamos la tecla Intro. Para poder usarla debemos de definir que elementos tienen el foco en nuestra p gina y el orden en el que lo reciben (cada vez que pulsamos secuencialmente el tabulador). Esto se hace mediante el atributo tabindex que podemos usar en las etiquetas a (enlaces) de nuestra web posibilitando as la navegacin sin necesidad de ratn. Por ejemplo:
<$,Un *n!a2* a <a #r*C-"#tt$%//&&&.' '!*.*s/" a!t-"D '!*" ta8in+*3-"1",D '!*</a,R tr a <a #r*C-"#tt$%//&&&.8in'.*s" a!t-"Bin'" ta8in+*3-";",Bin'</a, 1 /n t*r2*r a <a #r*C-"#tt$%//&&&.1a# .*s" a!t-"Ya# " ta8in+*3-"3",Ya# </a,.</$,
La pseudo-clase :first-child nos permite seleccionar un determinado elemento siempre y cuando sea el primer hijo de su padre. Por ejemplo, veamos las reglas siguiente:
$%Cirst-2#i!+ X2 ! r% 8!/*4 Y $%Cirst-2#i!+ *) X8a2='r /n+% 1*!! &4 Y
La primera selecciona y aplica estilo a un prrafo siempre y cuando sea el primer hijo de su padre, mientras que la segunda hace lo mismo sobre las cursivas de ese mismo tipo de prrafos. Existe una ltima pseudo-clase de aplicacin muy limitada llamada :lang que nos permite aplicar estilos diferenciados en funcin del idioma en que est escrito el elemento. Por ejemplo as:
$%!an'Z*s\ X2 ! r% r*+4 Y
Aunque tienen un uso muy similar al visto en uno de los selectores de atributo, existe una ligera diferencia. El selector de atributo es aplicable s lo a los contenidos que usen el atributo lang, mientras que esta pseudo-clase ser a aplicable tambin en otras circunstancias, como por ejemplo si el propio navegador fuese capaz de analizar el contenido y detectar elementos escritos en diferentes idiomas (cosa que, por el momento, no hacen demasiado bien...).
Pseudo-elementos
Los dos primeros pseudo-elementos que veremos son aplicables a la decoraci n
Pgina 5#
HTML & CSS de prrafos de texto. Se llaman autoexplicativos :first-letter y :first-line y sus nombres son
$.+*2 ra+ %Cirst-!*tt*r X)ar'in-ri'#t% 4$34 C nt-siO*% 4*)4 2 ! r% r*+4 C nt-&*i'#t% 8 !+*r4Y $.+*2 ra+ %Cirst-!in* XC nt-0ariant% s)a!!-2a$s4 C nt-&*i'#t% 8 !+4Y
Existen otros dos pseudo-elementos llamados :before y :after que usados junto con la propiedad content nos permiten insertar contenido (texto, imgenes, etc.) antes o despues de un elemento.
$Hins*rt1%aCt*rX 2 nt*nt% " ZTM f Mar2a (*'istra+a\ "4Y $.ins*rt;%8*C r*X 2 nt*nt% /r!Zi2 nGn*&.'iC\4Y
En los anteriores ejemplos, el primero inserta el texto que aparece entre comillas al final de cada prrafo identificado con el selector de ID insert1, mientras que el segundo inserta el gif animado icon_new.gif delante de cada p rrafo identificado como perteneciente a la clase insert2.
Pgina $
Con HTML slo pueden dibujarse cajas. Cajas y rectngulos absolutamente cuadrados. Esto es verdad al 99.00% (sobre todo hasta la aparicin de HTML5) pero, sin embargo, no es eso lo que vemos en la web. Existen numerosos trucos y efectos de diseo para engaar al espectador y darle la sensacin de que est viendo algo con un contenido mucho ms elaborado de lo que en realidad tiene delante. En este captulo aprenderemos a dibujar cajas mucho mejores de las que ya conocemos, pero tambin a decorarlas de forma que parezcan otras muchas cosas. Nos apoyaremos para ello en la amplia coleccin de ejemplos que acompaan al captulo (y que, si an no lo has hecho, puedes descargarte desde http://blog.unlugarenelmundo.es/hecho-en-casa/) y desde aqu los iremos analizando uno a uno e indicaremos cuales son las claves de dise o que usamos en los mismos.
Las tres estrategias puras de afrontar un diseo web son: diseos de ancho fijo, de ancho lquido (o fluido) o de ancho elstico. Los diseos de ancho fijo configuran sus medidas mediante pxeles. Son fciles de realizar y no tenemos que hacer demasiadas pruebas ni ajustes para asegurarnos que se vern bien. Puesto que ya casi no existen monitores con resoluci n inferior a 800 pxeles de ancho se suele tomar como estndar un ancho de 760 o 780 pxeles para el contenido. Los diseos de ancho lquido son aquellos que trabajan mediante porcentajes. Aprovechan mucho mejor la superficie en las pantallas grandes pero nos exigen ms pruebas para asegurarnos de que todo se ve correctamente en resoluciones bajas. Los diseos elsticos son los ms difciles de implementar. Basan sus medidas en la unidad em, de forma que si incrementamos el tamao del texto, tambin aumentamos proporcionalmente las dimensiones de nuestro diseo. Nos encontraremos por ah muchos modelos hbridos pero estos son los fundamentales. Por ejemplo, se habla de un diseo hbrido lquido-fijo cuando lo fundamental del diseo es lquido pero existe en l algn elemento de ancho fijo. Por ejemplo, podemos pensar en un diseo a dos columnas donde una de ellas es de ancho fijo (para emplazar mens, publicidad, etc.) mientras que la otra, destinada a los contenidos, tiene un diseo lquido.
Ejemplo 1 Cajas
En el ejemplo nmero 1 nos encontramos cuatro diseos de cajas bsicos donde aprendemos a solventar diferentes problemas. Hasta ahora las cajas con las que habamos trabajado (en el captulo 5 ) tenan el ancho, o bien fijo, o bien lquido y el alto fijo. En el mundo real necesitamos disear cajas de alto variable en funcin del contenido y partiendo de la premisa de que no conocemos el tama o de ese contenido.
Jos Mara Morales Vzquez Pgina 1
HTML & CSS Si metemos dos columnas dentro de una caja contenedora, que suele ser la estrategia habtual, y no definimos alturas fijas las cajas desbordarn al contenedor descuadrando el diseo. Tenemos varias formas de resolver esto: Poner un pie al diseo. Este pi debera de llevar definida la propiedad clear para romper el efecto de los float. Si no queremos tener pi o no lo necesitamos podemos poner uno invisible.
H$i*X 2 ! r% &#it*4 &i+t#% [<0$34 $a++in'% 10$34 Y
Una tercera opcin sera definir la propiedad overflow a auto o hidden en la caja contenedora:
H2 nt*n*+ r X 8 r+*r% ;$3 + tt*+ 8!a2=4 )ar'in% P$3 a/t 4 &i+t#% [60$34 0*rC! &% a/t 4 Y
Encontramos otro problema cuando queremos colocar tres o ms columnas. Hasta ahora slo hemos usado dos y colocamos una a la derecha con float: right y otra a la izquierda con float: left. En realidad, si ajustamos bien el espacio podramos haber usado dos veces uno u otro porque los float se apilar an en horizontal llenando todo el espacio disponible. Esto nos da la idea de como hacerlo con, por ejemplo, tres columnas: podemos apilar la central a la derecha o a la izquierda pero, eso si, calculando siempre bien las dimensiones:
HiO./i*r+a; X C! at% !*Ct4 &i+t#% 31V4 $a++in'% 1V4 Y H2*ntr ;X C! at% !*Ct4 &i+t#% 3;V4 $a++in'% 1V4 Y H+*r*2#a; X C! at% ri'#t &i+t#% 31V4 $a++in'% 1V4
Pgina 2
Observemos una cosa en el ejemplo anterior en el que, como vemos, el dise o del ancho es lquido. El ancho total se ha calculado para llenar completamente el contenedor lo ves? El padding es el espacio interior entre el contenido de la caja y el borde de la misma y se deja tanto a derecha como a izquierda, es decir, un 2% por cada columna. En total hacen el 100% Si las columnas tuvieran bordes pasara lo mismo: un borde del .5% ocupara un 1% por cada columna. Es un error muy comn hacer mal estos clculos, tanto en diseos lquidos como fijos, y en ese caso las cajas se desbordaran, quedaran descuadradas, con mrgenes antiestticos, etc. En los dos ejemplos anteriores hemos usado, intencionadamente, colores chillones para cada columna para que quede claro que la columna m s alta, sea cual sea, es la que marca el alto total del diseo. Puedes hacer pruebas de esto sumando o quitando contenido en unas u otras. El problema que tenemos con estos diseos es que, o el fondo es blanco para todas, o si queremos usar imgenes o colores el resultado es bastante poco profesional. Idem si quisi ramos usar bordes separadores para cada columna. C mo lo solventamos? En la caja nmero tres de este ejemplo tenemos una forma rpida de hacerlo pero slo vlida para diseos de ancho fijo: usar una imagen de fondo para el contenedor de nuestras columnas donde van dibujados los fondos y separadores de cada una de ellas. Tan fcil como esto:
H2 nt*n*+ r3 X 8a2='r /n+-i)a'*% /r!ZC n+ 3.7$'\4 8 r+*r% ;$3 + tt*+ 8!a2=4 )ar'in% P$3 a/t 4 &i+t#% [60$34 0*rC! &% a/t Y
Pgina 3
Pero la solucin real vlida para cualquier tipo de situaciones no es esta. La tienes en el diseo nmero 4 de este ejemplo 1. El truco consiste en usar una estructura con dos contenedores siguiendo los siguientes puntos: El primer contenedor tendr, como siempre, el ancho total del diseo y llevar como color de fondo el que queramos dar a la columna de la izquierda. El segundo contenedor ira dentro del primero con un float: right;, ocupando el ancho de la columna de la derecha y con el color de fondo que queramos que lleve esta. Dentro de este segundo contenedor metermos las dos columnas. La de la derecha ocupando el ancho de dicho contenedor. La de la izquierda con la propiedad position: relative; y un margin: left; con valor negativo para desplazar esa columna a la posicin a la izquierda que le corresponde. El HTML simplificado al mximo quedara as:
<+i0 i+-"2 nt*n*+ r4", <+i0 i+-"2 nt*n*+ r4-;", <+i0 i+-"iO./i*r+a4",L r*) i$s/) + ! r sit a)*t</+i0, <+i0 i+-"+*r*2#a4",L r*) i$s/)</+i0, </+i0, </+i0,
Y el CSS:
H2 nt*n*+ r4 X Jos Mara Morales Vzquez Pgina 4
ran'*4
HTML & CSS de las columnas (para darle color al fondo de cada una de ellas de forma diferenciada) y todas las columnas reales con contenido ir an dentro del ltimo contenedor, a la derecha, con los desplazamientos a la izquierda que veamos oportunos. Y as podramos seguir con cuatro, cinco, etc. En el ejemplo 2 tienes el diseo tpico a tres columnas del mismo ancho al que se ha aadido algo que ahora est de moda en todos los diseos web: un cintillo fijo en la parte superior de la pgina donde habitualmente se sitan enlaces a mens, al perfil de usuario, cerrar sesin, etc. Esto se consigue de forma fcil con una caja en la que hemos definido dos propiedades: position: absolute: y zindex : 99;
H2inti!! X &i+t#% 100V4 #*i'#t% 16$34 $a++in'% ;$3 10$34 $ siti n% Ci3*+4 t $% 04 !*Ct% 04 O-in+*3% ]]4 8a2='r /n+-2 ! r% 'ra14 2 ! r% &#it*4 C nt-&*i'#t% 8 !+*r4 C nt-Ca)i!1% ) n s$a2*4 Y
Pgina
HTML & CSS ejemplo slo para completar la coleccin de casos posibles.
Los trucos de diseo son los siguientes: Suponemos que el contenido principal estar en la columna central la cual siempre tiene que exceder en longitud a las laterales. En caso contrario el diseo no podra ser tan simple como se presenta aqu. Las columnas laterales llevan tres propiedades: position: absolute; top: 0; y luego, segn corresponda, rigth:0; para la columna de la derecha y left:0;
Pgina !
HTML & CSS para la de la izquierda. El padding a derecha e izquierda de la columna principal central ha de ser fijo y suficiente como para cubrir el espacio que ocupan las columnas laterales.
HTML & CSS tal y como lo encontr en la web con los mnimos cambios para su estudio: Cabecera del doumento en el HTML:
<+i0 i+-"#*a+*r", <i)' sr2-"*!+iari .$n'" &i+t#-"663" #*i'#t-";<0" a!t-"*!+iari .*s", </+i0, <+i0 2!ass-"arti2!*", g </+i0,
El ejemplo 9 muestra como dar un aspecto profesional a una tabla con apenas unas pocas propiedades. El fondo del diseo tiene un degradado de color vertical conseguido mediante la repeticin de una imagen de fondo. Las propiedades, como puedes ver, no tienen nada especial ms que una adecuada utilizacin de tipografas, colores y espaciados. Tan solo hay una nota especial a tener en cuenta.L a tabla usa la propiead border-spacing: 0 1px; que define el espacio de separacin entre celdas adjacentes. El primer valor es el que tendr en cuenta para el espaciado horizontal y el segundo para el vertical (si hubiera slo un valor aplicara a ambas magnitudes). Con esto conseguimos anular el espaciado horizontal por defecto (de un pixel) que dejar a un punto en blanco entre celda y celda en las lneas horizontales que delimitan las filas. Por lo dems no existe nada ms a resear.
Pgina #
Situaremos cada una de estas imgenes en una caja diferente de forma que el color de fondo de la caja ( background-color) coincida con el color de fondo de la imagen
Jos Mara Morales Vzquez Pgina !$
HTML & CSS Fijaremos todas las imgenes de la misma forma usando las propiedades background-attachment y background-position En el siguiente CSS extraido del ejemplo 1 se muestran estas propiedades en formato comprimido salvo en la caja correspondiente al body del documento:
8 +1 X 8a2='r /n+-2 ! r% H+*+4 8a2='r /n+-i)a'*% /r!Z& r!+-1.7$'\4 8a2='r /n+-$ siti n% t $ !*Ct4 8a2='r /n+-r*$*at% n -r*$*at4 8a2='r /n+-atta2#)*nt% Ci3*+4 $a++in'% 1V PV4 Y +i0H2 nt*n*+ r X 8a2='r /n+% &#it* /r!Z& r!+-;.7$'\ t $ !*Ct n -r*$*at Ci3*+4 &i+t#% 600$34 )ar'in% 1P$3 a/t 4 8 r+*r% 1$3 s !i+ 8!a2=4 $a++in'% 40$34 Y +i0H2 nt*n*+ r #; X 8a2='r /n+% H2881]< /r!Z& r!+-3.7$'\ t $ !*Ct n -r*$*at Ci3*+4 2 ! r% &#it*4 $a++in'% ;0$34 )ar'in% ;0$3 a/t 4 8 r+*r% 1$3 s !i+ 8!a2=4 Y
Pgina !1
Pgina !2
HTML & CSS En el ejemplo 12 tenemos 4 variantes de este efecto aplicados a conseguir una letra capital destacada en un texto y un quinto caso para crear un texto destacado, pero con un poco de imaginacin se nos pueden ocurrir muchas otras aplicaciones. Las claves de diseo son las siguientes: Trabajamos siempre con dos cajas superpuestas y una de fondo. La caja en primer plano, la que pretende dar el efecto de arrancar un bocado a la que est en segundo plano debe de tener el mismo color que el fondo. En una de las variantes que vemos no es as: la caja en primer plano tiene el mismo color que la de segundo y es el borde de la de primer plano la que tiene el mismo color que el fondo. Usamos float en la caja de primer plano para situarla y margin y padding para establecer una separacin con el texto principal. Cuando la caja donde est el texto principal lleva un borde usamos un margen de valor negativo en la caja de primer plano para superponerla a este y borrarlo. El margen negativo tendr el mismo tamao que el borde.
Ejemplos 13 y 14 Tooltips
El ejemplo 13 nos muestra como hacer tooltips, ventanas emergentes que nos muestran informacin al pasar el ratn por encima de algn punto definido de nuestra web. En el caso del ejemplo 13 estas ventanas se muestran siempre en el mismo punto, en el pi de la web.
En el ejemplo 14 se muestran en un punto dependiente del lugar por el que pasamos el ratn y que activa su visualizacin.
Pgina !3
Las claves de este tipo de diseos son estas: Tanto el texto que dispara el efecto como el texto que se mostrar en el tooltip aparecern en el HTML como contenidos de elementos diferenciados y anidados. En el ejemplo 13 usamos dos span:
<$,En /n <s$an 2!ass-"n ta",!/'ar +* !a Man2#a<s$an 2!ass-"ti$",!/'ar% n 2 n *! 0a! r +* hsiti $ara7*iR sin 2 ) h! 2a!i+a+i 1 *n *s$*2ia! h$*./*:a *nti+a+ +* $ 8!a2iBniR *n n/*str 2as sit/a+a 2 n2r*ta)*nt* *n *! Ca)$ +* M nti*! ZIR ;R 4[R 1 [R]3\R a 2a8a!! +* !as a2t/a!*s $r 0in2ias +* Ci/+a+ (*a! 1 @!8a2*t*. U*'/ra)*nt* $ r aOarR !a Cras* 2 in2i+* 2 n *! 0*rs +* /n r )an2* n/*0 .</s$an,</s$an,R +* 2/1 n )8r*
Y en el 14 un span dentro de un a:
<a #r*C-"#tt$%//&&&.1a# .*s/",Ya# $N'inas<8r/,0RPV</s$an,</a, <s$an 2!ass-"t3ta1/+a",1.;1]
El texto que aparecer en la nota se marca como invisible usando la propiedad display:
s$an.n ta s$an.ti$ X +is$!a1% n n*4 C nt-siO*% .<*)4 C nt-&*i'#t% n r)a!4 2 ! r% 8!a2=4 Y
Al pasar el ratn sobre el elemento disparador (usaremos para ello la pseudo clase hover) aplicaremos un nuevo estilo a la nota. Fijaros bien en la construccin del selector porque es lo ms importante de todo el efecto. En ese caso reescribimos la propiedad display: block para que se muestre la nota y usamos las propiedades adicionales que creamos oportunas seg n como y donde queramos mostrar dicha nota.
Jos Mara Morales Vzquez Pgina !4
s$an.n ta%# 0*r s$an.ti$X +is$!a1% 8! 2=4 /W La n ta irN si*)$r* *n !a $art* inC*ri r +* !a $anta!!a W/ $ siti n% Ci3*+4 &i+t#% ]<V4 )ar'in% 1V4 $a++in'% 1V4 8 tt )% 04 !*Ct% 04 8a2='r /n+% H2+*4 8 r+*r% 1$3 s !i+ 'ra14 Y
En el caso anterior la nota ir siempre en la parte inferior de la pantalla (ejemplo 13) y por eso usamos la propiedad position: fixed. bottom y left marcaran el lugar de aparicin. En el ejemplo 14 que buscamos una posicin diferente para cada nota usamos position:absolute.
/!.)*n/ !i a%# 0*r s$an.t3ta1/+a X +is$!a1% 8! 2=4 &i+t#% 10*)4 $ siti n% a8s !/t*4 t $% 04 !*Ct% 100V4 )ar'in% -1*) 0 0 1*)4 $a++in'% 1*)4 8a2='r /n+% H2+*4 8 r+*r% 1$3 s !i+ 'ra14 Y
Ejemplos 15 y 16 Mens
De los tooltips a los mens slo hay un pequeo paso. De hecho el anterior ejemplo 14 podra considerarse ya un pequeo men muy primitivo
Pgina !5
HTML & CSS El ejemplo 16 tiene adems la peculiaridad de que apenenas cambiando unas lneas en el CSS podemos transformarlo en un men horizontal o vertical a nuestro antojo. Se adjuntan las dos CSS necesarias para cambiar entre uno y otro modelo:
Pgina !
Ejemplo 18 Sprites
La carga de una pgina web implica que cada elemento individual que la compone se recuepera mediante una peticin al servidor. En pginas con muchas imgenes pequeas en las que queremos una carga excepcionalmente rpida se suele usar un truco para mejorar el rendimiento que consiste en agrupar varias de estas imgenes en una sla y seleccionar en cada momento el trozo de imagen que queremos ver mediante la propiedad background-position. Se conoce a esta tcnica como de Sprites y en el siguiente ejemplo podemos ver como usarla.
Pgina !!
El ejemplo que se acompaa usa dos tipos de Sprites: uno con slo tres imgenes y otro, ms complejo, con seis en el que el desplazamiento de la propiedad background-position implica moverse tanto en el eje horizontal como en el vertical de la imagen.
Ejemplo 19 Solapas
El efecto de solapas, ampliamente usado en la web actual, es similar en su construccin inical al de un men. El truco consiste en mantenemos una caja diferente por cada contenido y alternar entre su visualizacin o no, segn corresponda, mediante la propiedad display y los valores de la misma block o none, respectivamente.
Pgina !"
Ejemplos 20 y 21 Contorneos
El contorneo de imgenes, algo tpico de las revistas, es un efecto sencillo pero laborioso. La forma ms sencilla de hacerlo consiste, bsicamente, en diseccionar la imagen a contornear en rodajas de ms o menos alto (segn lo fino que queramos que sea el efecto) y ancho variable y, simplemente, dejar que las cajas de nuestro texto se apoyen lateralmente en dichas im genes, bien a la izquierda, a la derecha o a ambos lados.
Pgina !#
Pgina "$
8. FORMULARIOS Y JAVASCRIPT
Javascript es un lenguaje de programacin interpretado por el navegador y creado por Netscape. Su funcin original era mejorar la funcionalidad de los formularios en los documentos HTML. Hoy en da es el lenguaja ms usado en el lado del cliente de una aplicacin web para aportar a estas dinamismo e interactividad con el usuario. Contina muy ligado al funcionamiento de los formularios pero ya no se limita a eso en exclusiva. Adem s, la nueva versin del estndard HTML (HTML5) incluye multiud de nuevas libreras en Javascript que amplian enormemente la funcionalidad de una pgina web. El programa ms sencillo escrito en Javascript sera la siguiente versin del ya clsico Hola Mundo donde se ha usado para mayor sencillez el esqueleto que usan los documentos de HTML5: <6D43'7PE html> <html la%g !e*!> <head> <meta char*et !U'8+9! / > <title>,ola -)%do e% :a;a*cri.t</title> </head> <body> <*cri.t ty.e !te#t/<a;a*cri.t! > alert=!>,ola -)%do6!?@ </*cri.t> </body> </html> El cdigo javascript es el contenido del elemento con la etiqueta script que aparece en el ejemplo anterior. Es lo nico que aparece en el body, pero si introduces otros elementos html (ttulos, prrafos, o cualquier otra cosa) diferentes antes y/o despus del script vers como la ejecucin del mismo interrumpe el renderizado de la pgina HTML. Hasta que no pulsemos el botn que aparece en el dilogo y desaparezca el mensaje, no proseguir el dibujo de la pgina.
Al igual que ocurra con los CSS, el cdigo Javascript se puede situar de diferentes formas dentro del HTML. La forma ms directa es la que hemos visto en el ejemplo anterior: directamente en el punto del cuerpo del documento donde queremos que se ejecute. Pero si las funciones son ms complejas que mostrar un mensaje o queremos reutilizarlas debemos de crear funciones y emplazarlas en una ubicacin diferente.
8.1.1 Funciones
Una funcin es una pieza de cdigo que puede invocarse desde distintos puntos y en diferentes momentos. El cdigo que vimos en el ejemplo anterior slo se ejecuta cuando el navegador est dibujando la pgina y en el momento en que lee el trozo de cdigo que la contiene. Hagamos algunos cambios:
Jos Mara Morales Vzquez Pgina "1
HTML & CSS <6D43'7PE html> <html la%g !e*!> <head> <meta char*et !U'8+9! /> <title>,ola -)%do e% :a;a*cri.t</title> <*cri.t la%g)age !<a;a*cri.t!> 0)%ctio% holam)%do=?A alert=B>,ola m)%do6C?@ D </*cri.t> </head> <body> <.>te#to &</.> <*cri.t ty.e !te#t/<a;a*cri.t! > holam)%do=?@ </*cri.t> <.>te#to E</.> <*cri.t ty.e !te#t/<a;a*cri.t! > holam)%do=?@ </*cri.t> <.>te#to F</.> </body> </html> Hemos creado una funcin que hace exactamente lo mismo que antes y la hemos emplazado en la seccin head de nuestro html. Luego la hemos invocado dos veces en distintos puntos del renderizado de nuestra pgina. Es evidente que se trata de un ejemplo en el que la invocacin a la funcin ocupa lo mismo que la funcin en si, pero imaginmos que no es as y que se tratan de varias decenas de lneas de cdigo. Ahora tiene ms sentido verdad? Como puedes observar, en algunos puntos se usa el argumento language="javascript" y en otros type="text/javascript". El navegador entender cualquiera de ellos (la mayora, incluso, lo entender si no pones ninguno!) pero lo correcto en las ltimas versiones de HTML sera usar el argumento type. Las funciones tienen, adems, otra particularidad y es la posibilidad de que cada ejecucin sea diferente gracias a la personalizacin que permite el paso de parmetros a las mismas. Hagamos una tercera modificacin al cdigo anterior: <6D43'7PE html> <html la%g !e*!> <head> <meta char*et !U'8+9! /> <title>,ola -)%do e% :a;a*cri.t</title> <*cri.t la%g)age !<a;a*cri.t!> 0)%ctio% holam)%do=te#to?A alert=te#to?@ D </*cri.t>
Jos Mara Morales Vzquez Pgina "2
HTML & CSS </head> <body> <.>te#to &</.> <*cri.t ty.e !te#t/<a;a*cri.t! > holam)%do=B>,ola -)%do6C?@ </*cri.t> <.>te#to E</.> <*cri.t ty.e !te#t/<a;a*cri.t! > holam)%do=BG,e dicho ya e*o de ,ola -)%doHC?@ </*cri.t> <.>te#to F</.> </body> </html> Cuando un documento HTML necesita de muchas funciones en javascript o estas son utilizadas desde diferentes pginas html lo ms cmodo, al igual que hacamos con los css, es sacarlas a un fichero externo de forma que el documento html slo queden las llamadas a las mismas. Veamos una ltima versin del ejemplo anterior: <6D43'7PE html> <html la%g !e*!> <head> <meta char*et !U'8+9! /> <title>,ola -)%do e% :a;a*cri.t</title> <*cri.t ty.e !te#t/<a;a*cri.t! *rc !0)%c.<*!></*cri.t> </head> <body> <.>te#to &</.> <*cri.t ty.e !te#t/<a;a*cri.t! > holam)%do=B>,ola -)%do6C?@ </*cri.t> <.>te#to E</.> <*cri.t ty.e !te#t/<a;a*cri.t! > holam)%do=BG,e dicho ya e*o de ,ola -)%doHC?@ </*cri.t> <.>te#to F</.> </body> </html> Y en el interior del fichero func.js tendramos esto: 0)%ctio% holam)%do=te#to?A alert=te#to?@ D
8.2. FORMULARIOS
El elemento que sirve para identificar un formulario lleva la etiqueta form. Dentro de l tendremos diferentes elementos por cada objeto que queramos mostrar en el mismo. Veamos el ejemplo el formulario ms sencillo:
Pgina "3
HTML & CSS <0orm %ame !0ormEASI! actio% !re*.)e*ta.html!> <.><label 0or C%ombreC>Nombre:</label> <i%.)t ty.e !te#t! id C%ombreC %ame !ca<a%ombre! /></.> <.><i%.)t ty.e !*)bmit! ;al)e !E%;iar! %ame !boto%e%;! /></.> </0orm> El elemento form tiene un nico argumento imprescindible (action) que indica lo que hay que hacer para procesar el funcionario. En el ejemplo anterior se le pide que cargue la pgina respuesta.html que en realidad no hace nada y slo muestra un mensaje. Lo normal sera llamar a un script cgi o una funcin javascript que validara los datos, a una pgina php que los procese en el lado del servidor o, mucho ms rudimentario, enviar los resultados por correo electrnico con un mailto (por ejemplo action="mailto:[email protected]"). En este ltimo caso debera de aparecer tambin el argumento method y su valor debera de ser post (lo veremos a continuacin). El argumento method indica la forma en que el formulario enva los datos que el usuario ha escrito o seleccionado en l. Tiene dos valores posibles: get y post. Por defecto toma el valor get. El mtodo get enva los datos del formulario concatenados a la URL de la pgina. Los limita a 100 caracteres y es un mtodo muy til cuando, por ejemplo, queremos guardar el resultado en favoritos o envirselo a alguien por correo. La URL que obtendramos despus de escribir Pepe y pulsar el botn de enviar en el ejemplo anterior debera de ser algo similar a esto: htt.://&I.I.I.&/e<E/re*.)e*ta.htmlHca<a%ombre Pe.eJboto%e%; E%;iar El mtodo post no tiene lmite en su extensin y el resultado no es visible para el usuario pero, cuidado, eso no quiere decir que sea un m todo seguro para enviar informacin sensible. Ninguno de ambos mtodos lo es puesto que el resultado de rellenar los datos del formulario se enviar en claro an cuando con el mtodo post no podamos verlos directamente. En los siguientes puntos iremos viendo uno a uno los distintos elementos que pueden formar parte de un formulario y algunos de sus argumentos m s usados. La mayor parte de ellos usan la etiqueta input e indican el tipo de objeto de que se trata mediante el valor del argumento type.
HTML & CSS contrario aparecer en blanco). Cuando no queremos que el usuario edite el campo usaremos el parmetro readonly con cualquier valor (recuerda que en XHTML no est permitido la minimizacin de atributos o atributos sin valor, as que lo normal es poner readonly=yes o readonly=readonly aunque si ponemos readonly=no o solamente readonly tambin deshabilitar la escritura en el campo). Adems, pueden aparecer los argumentos class e id que nos serviran para aplicar estilos mediante CSS. El argumento id sirve, adems, para asociar la caja de texto con una etiqueta (ver ms adelante).
HTML & CSS eleccin obligatoria. <i%.)t ty.e !radio! %ame !*e#o! ;al)e !hombre! chec"ed !chec"ed! /> ,ombre<br/> <i%.)t ty.e !radio! %ame !*e#o! ;al)e !m)<er! /> -)<er Puesto que en un mismo formulario podemos tener diferentes grupos de radio buttons, es el valor del argumento name el que los mantiene asociados entre si. El argumento checked sirve para seleccionar la opcin por defecto que aparecer marcada al cargar la pgina. Adems, podemos usar el argumento disabled si queremos que alguno de ellos no sea seleccionable. ATENCIN. Cuidado con las propiedades que aparentemente funcionan pero no lo hacen. Si ponemos un argumento readonly en un radio (o en un check box que veremos a continuacin), este cambia de aspecto pero puede seguir usndose. El argumento correcto para deshabilitarlos sera disabled. El valor del argumento value es lo que se transmitir en las respuesta del formulario si ese elemento se encuentra seleccionado.
Pgina "
HTML & CSS Esto, por defecto, dibuja un recuadro alrededor de los elementos que contiene. El elemento legend sirve para poner ttulo a dicho recuadro.
HTML & CSS <*elect %ame !a0icio%e*! m)lti.le !m)lti.le! *iKe !L! > <o.tio%>'oro*</o.tio%> <o.tio%>3a%te</o.tio%> <o.tio%>8Qtbol</o.tio%> <o.tio%>:)ego* de Rol</o.tio%> <o.tio%>Po%er*e tibio de beber cocacola</o.tio%> <o.tio%>Dormir e% el *o0/</o.tio%> </*elect> Como vemos, la diferencia la marcan dos argumentos: size que indica cuantos elementos de la lista sern visibles simultaneamente (por defecto es slo 1, que es como debera de comportarse un combobox) y multiple que es el argumento que indica que podemos hacer ms de una seleccin. Tambin podemos usar el argumento disabled ya visto en otros controles anteriores. En las opciones se usa el argumento selected para indicar si queremos que alguna de las opciones aparezca inicialmente seleccionada. Tanto en uno como en otro podemos usar el elemento optgroup para agrupar las distintas opciones en categoras: <*elect %ame !o0ici%a!> <o.tgro). label !E% E*.aRa!> <o.tio%>-adrid</o.tio%> <o.tio%>Se;illa</o.tio%> <o.tio% *elected !*elected! >AlcorcO%</o.tio%> </o.tgro).> <o.tgro). label !E% el e#tra%<ero!> <o.tio%>(i*boa</o.tio%> <o.tio%>B)rdeo*</o.tio%> </o.tgro).> </*elect>
8.2.10 Botones
Todo formulario debera de tener, al menos, un botn que sirva para indicar que ya hemos terminado de cumplimentarlo y que da paso al procesado y/o env o de los datos que hemos rellenado. Este botn debe de estar identificado con el argumento type y el valor submit y el comportamiento normal al pulsarlo es invocar el enlace que hemos puesto como valor del argumento action del elemento form. Dicho esto, tenemos dos formas de implementar este botn: <i%.)t ty.e !*)bmit! ;al)e !E%;iar! /> <b)tto% ty.e !*)bmit!>E%;iar</b)tto%> Ambos elementos se comportaran igual y haran lo mismo. La diferencia est en que el texto que aparece en el primero es el que aparece como valor del argumento value (o un texto por defecto que pone el navegador si ese argumento no aparece) y que, por tanto, no podemos aplicarle estilos mientras que en el segundo botn el texto es el contenido del elemento y podemos aplicar estilos con total libertad o, incluso, poner una imagen:
Pgina ""
HTML & CSS <b)tto% ty.e !*)bmit! ><img *rc !o".<.g! alt !4"! /></b)tto%> Ambos tipos de botones admiten el argumento disabled. El segundo tipo de botones caractersticos de un formulario es uno que nos permite limpiarlo y dejar todos los valores del mismo como si la p gina se hubiera cargada por primera vez. Se identifica mediante el argumento type con su valor a reset y podemos, igualmente, implementarlo de ambas formas. Todo lo dicho antes sirve tambin en este caso: <i%.)t ty.e !re*et! /> <b)tto% ty.e !re*et! ><img *rc !clea%.<.g! alt !(im.iar! /></b)tto%> Tenemos, adems, la posibilidad de introducir en nuestro formulario botones genricos sin una accin previamente definida que posteriormente nosotros le asignaremos usando cdigo javascript: <i%.)t ty.e !image! *rc !b)tto%..%g! /> <i%.)t ty.e !b)tto%! ;al)e !BotO%! /><br/> <b)tto% ty.e !b)tto%!>BotO%</b)tto%> El primero no es propiamente un botn, sino una imagen pero a la que tambin se le asocia por defecto las mismas propiedades que a un bot n con el argumento type con valor de submit. Los otros dos son botones sin ningn tipo de accin asociada a los que posteriormente se les puede aplicar alguna usando cdigo javascript.
Con algunas limitaciones, es posible cambiar el estilo y las propiedades de visualizacin de los formularios mediante CSS. No nos pararemos en detalle, pero como ejemplo debe de valer la diferencia de aspecto entre los siguientes formularios a los que slo los separa una hoja de estilos de apenas 30 l neas (y algn elemento adicional que usaremos posteriormente para las validaciones):
Pgina "#
Pgina #$
Para entender correctamente la forma de manipular un formulario mediante Javascript tenemos que entender previamente los principios b sicos de la programacin visual orientada a eventos.
HTML & CSS que se genera cuando lo pulsamos. <i%.)t ty.e !*)bmit! ;al)e !E%;iar! o%3lic" !e%;iar=?! %ame !bt%e%;! /> <i%.)t ty.e !b)tto%! ;al)e !E%;iar! %ame !bt%e%;! o%3lic" !e%;iar=?! /> Estos dos botones tienen comportamientos diferentes y es muy importante que los distingamos. El primero, puesto que es del tipo submit, cuando sea pulsado ejecutar la funcin enviar() y luego tambin invocar el evento submit() (salvo que lo impidamos desde dentro de la funcin). El segundo ejecutar la funcin enviar() pero no ejecutar el evento submit() (salvo que nosotros lo hagamos expresamente). La diferencia es importante cuando queremos hacer una validacin previa del formulario.
HTML & CSS document hace referencia a la pgina web en si y document.forms.length nos dice el nmero de formularios que hay en la pgina. Cada uno de estos formularios puede referenciarse mediante la estructura document.formT#U, siendo x un nmero entero. Para el primer formulario de la pgina x valdra 0, para el segundo 1, etc. El siguiente cdigo nos pintara dos botones. Al pulsar el primero nos dira el nmero de formularios de la pgina y al pulsar el segundo el nombre de este (el valor del argumento name): <0orm %ame !0ormEASI! actio% !re*.)e*ta.html!> <i%.)t ty.e !b)tto%! ;al)e !BotO% &! o%3lic" !alert=2E% e*ta ./gi%a hay 2 V doc)me%t.0orm*.le%gth V 2 0orm)lario2?! /> <i%.)t ty.e !b)tto%! ;al)e !BotO% E! o%3lic" !alert=2El %ombre del 0orm)lario e* 2 V doc)me%t.0orm*TIU.%ame?! /> </0orm>
A veces se puede usar una estrategia combinada de ambos. El primer mtodo es el ms sencillo. Veamos un ejemplo muy simple en el que la validacin consiste slo en comprobar que un campo no se ha quedado sin rellenar. El formulario sera este: <0orm %ame !0ormEASI! o%S)bmit !ret)r% e%;iar=thi*?! actio% !re*.)e*ta.html!> <.><label>Nombre: <i%.)t ty.e !te#t! %ame !ca<a%ombre! /></label></.> <.><i%.)t ty.e !*)bmit! ;al)e !E%;iar! %ame !boto%e%;! /> <i%.)t ty.e !re*et! ;al)e !(im.iar! /></.> </0orm> La funcin javascript que realiza la validacin sera algo as: 0)%ctio% e%;iar=0orm)lario?A alert=2,aK .)l*ado el botO% de e%;iar...2?@ i0=0orm)lario.ca<a%ombre.;al)e.le%gth I?A alert=2No .)ede* de<ar e*te cam.o e% bla%co2?@ ;alidacio%4W 0al*e@
Jos Mara Morales Vzquez Pgina #3
HTML & CSS D el*eA alert=2,aK e*crito: 2V 0orm)lario.ca<a%ombre.;al)e?@ ;alidacio%4W tr)e@ D ret)r% ;alidacio%4W@ D La otra estrategia, ms dinmica pero tambin ms complicada, consistira en validar uno a uno los campos a rellenar y no dejar que el formulario se env e (deshabilitando incluso el botn de Enviar) hasta que no estn todos correctos. Veamos un pequeo ejemplo tambin. Primero el formulario: <0orm %ame !0ormEASI! actio% !re*.)e*ta.html!> <.><label>Nombre: <i%.)t ty.e !te#t! o%Bl)r !;alidar=thi*.0orm?! %ame !ca<a%ombre! /></label></.> <.><i%.)t ty.e !*)bmit! ;al)e !E%;iar! o%3lic" !e%;iar=?! %ame !boto%e%;! di*abled !di*abled! /> <i%.)t ty.e !re*et! ;al)e !(im.iar! o%3lic" !lim.iar=thi*.0orm?! /></.> </0orm> Y luego el cdigo Javascript: 0)%ctio% ;alidar=0orm)lario?A i0=0orm)lario.ca<a%ombre.;al)e.le%gth I?A alert=2No .)ede* de<ar e*te cam.o e% bla%co2?@ 0orm)lario.boto%e%;.di*abled tr)e@ 0orm)lario.boto%e%;.;al)e !>No .)ede* E%;iarlo a*N6!@ D el*eA alert=2,aK e*crito: 2 V 0orm)lario.ca<a%ombre.;al)e?@ 0orm)lario.boto%e%;.di*abled 0al*e@ 0orm)lario.boto%e%;.;al)e !E%;iar!@ D D 0)%ctio% e%;iar=?A alert=2,aK .)l*ado el botO% de e%;iar...2?@ D 0)%ctio% lim.iar=0orm)lario?A alert=2,aK .)l*ado el botO% de lim.iar...2?@ 0orm)lario.boto%e%;.di*abled tr)e@ D Veamos ahora la forma de validad un campo numrico. Por ejemplo un nmero
Jos Mara Morales Vzquez Pgina #4
HTML & CSS de telfono. El formulario es muy similar al que hemos visto anteriormente: <0orm %ame !0ormEASI! o%S)bmit !ret)r% e%;iar=thi*?! actio% !re*.)e*ta.html!> <.><label>'elX0o%o: <i%.)t ty.e !te#t! %ame !ca<atl0! /></label></.> <.><i%.)t ty.e !*)bmit! ;al)e !E%;iar! %ame !boto%e%;! /> <i%.)t ty.e !re*et! ;al)e !(im.iar! /></.> </0orm> En el cdigo javascript validaremos por un lado que la longitud sea exactamente de siete dgitos y por otro que sean todos numros y no letras o caracteres extraos. Esto segundo lo hacemos apoyndonos en dos funciones de javascript: parseInt que convierte una cadena de texto a su valor num rico entero (el contenido de los formularios siempre se lee como texto aunque se trate de cifras) y la funcin isNAN que devuelve un 0 si el argumento que recibe no es un n mero correcto. 0)%ctio% e%;iar=0orm)lario?A alert=2,aK .)l*ado el botO% de e%;iar...2?@ i0=0orm)lario.ca<atl0.;al)e.le%gth 6 Y ZZ i*NAN=.ar*eI%t=0orm)lario.ca<atl0.;al)e?? 0al*e?A alert=2No e* )% telX0o%o correcto2?@ ;alidacio%4W 0al*e@ D el*eA alert=2,aK e*crito: 2 V 0orm)lario.ca<atl0.;al)e?@ ;alidacio%4W tr)e@ D ret)r% ;alidacio%4W@ D Lgicamente se puede complicar mucho ms y hacer una validacin ms estricta: comprobar que empiece por 9, 6 o 7, permitir el uso de prefijos internacionales, etc. En los ejemplos que acompaan a este texto tienes algn ejemplo ms, como por ejemplo como validar que la contrasea repetida dos veces coincida o la longitud mxima de un textarea (ejemplo 5) o como cambiar el contenido de un listbox en funcin de la seleccin hecha en un combobox y como pasar elementos entre dos listboxes (ejemplo 6).
Pgina #5
button, checkbox, Cuando un elemento pierde password, radio, select, el foco text, textarea, file Cuando un elemento pierde file, select, text, el foco y su valor se ha password, textarea, radio, modificado checkbox Cuando se pulsa sobre el elemento con el botn izquierdo del ratn Cuando el elemento adquiere el foco Cuando el elemento tiene el foco y se pulsa una tecla Cuando el elemento tiene el foco y se mantiene pulsada una tecla Cuando el elemento tiene el foco y se de$a de pulsar una tecla Cuando se mueve el ratn fuera de un determinado ob$eto Cuando el ratn entra en un determinado ob$eto Cuando se pulsa el botn de reset del formulario Cuando se selecciona un texto con el ratn Cuando se pulsa el botn de submit del formulario button, checkbox, radio, text, password, textarea button, checkbox, file, password, radio, select, text, textarea text, password, textarea
onChange
onClick
onFocus
on ey!own
on ey"ress
on ey#p
text, password, textarea text, password, textarea form text, password,textarea form
Las propiedades fundamentales que podemos alterar o consultar mediante cdigo javascript de cada uno de los elementos de un formulario son las siguientes:
Pgina #
HTML & CSS Eleme%to form button text y password textarea radio y checkbox select options file name, action, method name, value, disabled name, value, disabled, readonly, size, length, maxlength name, value, disabled, maxlength, cols, rows readonly, size, length, Propiedades
name, value, disabled, checked, length name, size, disabled, multiple, type value, text name, size, disabled
Aunque ya hemos dicho que Javascript naci como una forma de validar de forma rpida los formularios, su uso hoy transciende de esto y podemos hacer una pgina que utilice javascript al margen de los formularios o no s lo con ellos. Veremos algunos ejemplos sencillos de uso en este ltimo punto
HTML & CSS D el*eA i0=te#to.le%gth6 I?A alert=!,ola ! V te#to V ![ b)e%o* dNa* \% G3Omo e*t/*H!?@ D el*eA alert=!B)e%o* dNa* a)%M)e %o M)iera* decirme t) %ombre... :+=!?@ D D
Adems, alguno de los eventos que se usan en los formularios pueden tener tambin aplicacin fuera de ellos. Veamos un trozo de cdigo con ejemplos sencillos de aplicacin: <body o%(oad !alert=2(a ./gi%a *e ha cargado com.letame%te2?@! o%Re*iKe !alert=2,aK cambiado el tamaRo de la ./gi%a2?@!> <h& o%-o)*e4;er !alert=2,aK .a*ado el ratO% *obre el tit)lar2?@! >'it)lar de la ./gi%a</h&> <. o%3lic" !alert=2,aK hecho clic" e% el .rimer ./rra0o2?@! >Primer ./rra0o de te#to de la ./gi%a</.> <. o%Dbl3lic" !alert=2,aK hecho doble clic" e% el .rimer ./rra0o2?@! >Seg)%do ./rra0o de te#to de la ./gi%a</.> </body> En el ejemplo 8 que acompaa a este texto tienes un ejemplo ms complicado donde se ve como cambiar el estilo CSS de un elemento de la p gina a travs de
Pgina #"
HTML & CSS un mtodo que se lanza al capturar el envento de hacer Click en un ratn.
Pgina ##
9. HTML5
HTML5 es la nueva revisin del lenguaje HTML definido por la W3C. Se encuentra an en fase beta experimental y, por tanto, hay que tratar con mucho cuidado la introduccin de sus nuevas caractersticas puesto que muchos navegadores, sobre todo si son relativamente antiguos, no contemplan a n estos cambios o no lo hacen en su totalidad. Una de las grandes novedades es que, por primera vez, la definicin de HTML y XHTML para esta nueva versin (HTML5 y XHTML5) se han desarrollado en paralelo. XHTML5 es, bsicamente, HTML5 con las restricciones de sintaxis que ya planteamos cuando presentamos XHTML1
La estructura de un documento con html5 o xhtml5 es mucho ms sencilla que en versiones anteriores y, adems, idntica para ambos:
<!DOCTYPE #t)!, <#t)! !an'-"*s", <#*a+, <)*ta 2#ars*t-"UT5-6" /, <!in= r*!-"st1!*s#**t" #r*C-"*sti! s.2ss" )*+ia-"a!!" /, <tit!*,Ht)!P</tit!*, </#*a+, <8 +1, </8 +1, </#t)!,
Observa que ya no es necesario usar el argumento type en las etiquetas link que declaran el uso de hojas de estilo (tampoco en las que declaran un fichero con funciones javascript). Tampoco existen diferencias en los argumentos entre HTML5 y XHTML5. De hecho, podemos escribir documentos denominados pol glotas que puedan ser interpretados como uno o como otro indistintamente y sin ning n problema observando las siguientes condiciones: El DOCTYPE no es obligatorio en XHTML pero si en HTML, as que debemos de ponerlo. Adems, HTML no es sensible a maysculas o minsculas pero XHTML si, as que hay que ponerlo tal y como aparece en el ejemplo de aqu arriba. Debemos de usar la sintaxis de HTML5, y observar todas las restricciones de XHTML5 que ya habamos visto, a saber: Los elementos deben de cerrarse siempre Los elementos sin contenido deben de usar la sintaxis de autocerrado siempre. La apertura y cierre de los elementos anidados no debe de solaparse. Los valores de los atributos deben de ir siempre entre comillas simples o dobles Los nombres de etiquetas y atributos deben de ir siempre en minsculas
Jos Mara Morales Vzquez Pgina 1$$
Lo primero a resear en HTML5, un lenguaje de marcas basado en un conjunto de etiquetas, debera de ser los cambios sufridos en el conjunto de estas. Aparecen 25 nuevas etiquetas, hay ligeros cambios en 7 de las antiguas y desaparecen 16.
Etiquetas eliminadas
Las etiquetas eliminadas, de las cuales nosotros no deberamos de preocuparnos demasiado porque unas las hemos evitado expresamente desde el principio de este curso y otras ni siquiera las hemos presentado, son las siguientes: acronym, applet, basefont, big, center, dir, font, frame,frameset, isindex, noframes, s, strike, tt, u, xmp
Pgina 1$1
HTML & CSS Es fcil ver que, segn la sintaxis HTML que conocemos eso es un comentario y no se ver, pero Explorer lo reconoce como una secuencia especial y si nos lo mostrar. Tenemos otras formas ms complejas para detectar una versin concreta de Explorer, o una mayor o menor que una dada:
<!--biC IE <c, <$,UB! *n E3$! r*r <</$, <!b*n+iCc--, <!--biC !t IE ]c, <$,UB! *n 0*rsi n*s +* E3$! <!b*n+iCc--, <!--biC !t* IE [c, <$,UB! *n 0*rsi n*s +* E3$! <!b*n+iCc--, <!--biC 't IE <c, <$,UB! *n 0*rsi n*s +* E3$! <!b*n+iCc--, <!--biC 't IE 6c, <$,UB! *n 0*rsi n*s +* E3$! <!b*n+iCc--,
O, incluso, darle otra vuelta de tuerca a la sintaxis y mostrar c digo que slo se ver en navegadores que no sean el Internet Explorer:
<!--biC !IEc, --, <$,Est sB! <!-- <!b*n+iCc--, s* 0*rN si n *stNs 2 n /n E3$! r*r</$,
De esta forma ya podemos mostrar unas etiquetas en Explorer y otras en otros navegadores de forma relativamente fcil, pero existe un mtodo ms rpido y limpio de solucionar el problema de las nuevas etiquetas de organizaci n: la librera html5shiv nos permiten que el Explorer aplique estilos a etiquetas que no conoce. Para que funcionen basta con incluirlas en la secci n head de nuestra web y, si queremos, podemos incluirlas con un comentario condicional como los vistos para que slo se carguen cuando realmente las necesitamos:
<!--biC !t IE ]c, <s2ri$t sr2-"#tt$%//#t)!Ps#i0.' <!b*n+iCc--, '!*2 +*.2 )/s0n/tr/n=/#t)!P.7s",</s2ri$t,
Tal vez una de las mejoras ms significativas sea la gran riqueza que HTML5 aade a los formularios con objeto de que podamos construir con facilidad aplicaciones web. Son 13 los nuevos tipos disponibles para la etiqueta input adems de algn argumento extra aadido a los ya existentes. El argumento required, vlido para casi todos los tipos de objetos permite, marcar como obligatorio un campo de forma que no se pueda ejecutar la funci n submit si no est completo y dando, adems, un efecto visual que cada navegador podr personalizar. El argumento autofocus, que debera de usarse slo en un objeto por formulario, selecciona el campo del mismo que tomar el foco de forma automtica una
Jos Mara Morales Vzquez Pgina 1$2
HTML & CSS vez cargada la pgina. El argumento autocomplete puede tomar dos valores (on o off) e indica al navegador si puede hacer sugerencias al usuario dependiendo de lo que haya escrito en anteriores ocasiones en ese mismo campo. El argumento placeholder, vlido en todos los campos de texto, nos muestra un texto con instrucciones sobre que debemos de cumplimentar en el mismo. El argumento wrap, existente en versiones anteriores a HTML4 pero desaparecido en esta, vuelve en HTML5. Es vlido en los input de tipo textarea y nos permite indicar si queremos que los saltos de lnea que el usuario escriba en ellos se tranmsitan (wrap=hard) o no (wrap=soft) que es la opcin por defecto. datalist es una nueva etiqueta que puede asociarce a los campos de texto y que nos permite mostrar al usuario una lista de sugerencias de forma muy similar a la que, por ejemplo, Google utiliza cuando escribimos en su caja de b squedas. Se usa en conjunto con la etiqueta option de forma muy parecida a la que utilizamos en un campo select:
<in$/t t1$*-"t*3t" na)*-"$r 0in2ia" !ist-"$r 0in2ias" /, <+ata!ist i+-"$r 0in2ias", < $ti n 0a!/*-"U*0i!!a",</ $ti n, < $ti n 0a!/*-"Ma+ri+",</ $ti n, < $ti n 0a!/*-"C/*n2a",</ $ti n, < $ti n 0a!/*-"MN!a'a",</ $ti n, </+ata!ist,
La identificacin entre el input y el datalist se hace a travs de los argumentos list e id cuyos valores deben de ser iguales. Por ltimo, el argumento pattern permite especificar una expresin regular que debe de cumplir lo que pongamos en el campo para que el formulario sea validado. Veamos un par de ejemplos:
<in$/t t1$*-"t*3t" na)*-"2 +$ sta!" $att*rn-"b0-]cXPY" /, <in$/t t1$*-"t*3t" na)*-"niC" $att*rn-"b0-]cX6Yb@-ja-Ok:cX1Y" /,
En el primero el patrn especifica que el campo slo validar si consta de cinco nmeros seguidos sin ningn caracter adicional. En el segundo caso, el campo debe de ser rellenado con ocho nmeros seguidos de una letra, ya sea esta en maysculas o minsculas. Para aprender ms sobre como construir expresiones regulares ms complejas puedes consultar el siguiente enlace: http://www.w3schools.com/jsref/jsref_obj_regexp.asp Y una nota adicional acerca de los patrones: si el campo no est marcado como requerido mediante el argumento antes visto sera posible dejarlo en blanco y eso no cumplira con el patrn especificado. As que si se quiere obligar no olvides tambin este argumento. Los tipos nuevos introducidos a los input son email, url, number, date, month,
Jos Mara Morales Vzquez Pgina 1$3
HTML & CSS week, time, datetime, datetime-local, search, color, range y tel. Proporcionan controles especializados de diferentes peticiones bastante cotidianas con validacin automtica. Veamos algunos ejemplos con los argumentos ms habituales de cada uno de ellos (aparte de los ya vistos: required, disabled, readonly, etc. y que funcionaran perfectamente con la mayora de ellos).
<in$/t t1$*-"*)ai!" na)*-"*)ai!" /, <in$/t t1$*-"/r!" na)*-"&*8" /,
Intimamente relacionado con los formularios, aunque mucho ms universal y sin dependencia directa con estos, tenemos el nuevo agumento contenteditable que convierte, cuando su valor es true, a casi cualquier elemento, ya sea de bloque o de linea, en editable de forma directa por el usuario:
<#1 2 nt*nt*+ita8!*-"tr/*",Tit/!ar *+ita8!*</#1, <$ 2 nt*nt*+ita8!*-"tr/*",Est* $NrraC ta)8i>n *s *+ita8!*</$, <+i0 2 nt*nt*+ita8!*-"tr/*",Y *st* 8! ./* +i0 ! )is) </+i0, <$,P*r R in2!/s <str n' 2 nt*nt*+ita8!*-"tr/*",*stas n*'ritas</str n', *st* <s$an 2 nt*nt*+ita8!*-"tr/*",t*3t 2 n /n s$an</s$an, ./* s n *!*)*nt s +* !Jn*a $/*+*n s*r *+ita8!*s</$,
9.4. MODERNIZR
Modernizr es una librera escrita en javascript y que nos sirve de ayuda en la transicin a HTML5. Su funcionamiento es muy simple: nos permite interrogar al navegador del usuario que est viendo nuestras pginas sobre si entiende determinadas caractersticas de HTML5 o CSS3 y, en ese caso, elegir lo que vamos a mostrarle. Veamos un ejemplo muy sencillo y explicamos con l como instalarlas
Pgina 1$4
HTML & CSS y hacerlas funcionar de forma bsica. Lo primero que debemos de hacer es descargar las libreras de modernizr de la web http://www.modernizr.com/ y copiar el fichero js en el directorio de nuestro proyecto. Tenemos dos opciones: o descargarnos las libreras completas de la versin de desarrollo o generar una librera a medida que slo contenga las comprobaciones de las etiquetas y atributas que usamos. Esta segunda opci n ser mucho ms ligera y acelerar la carga y ejecucin de nuestro proyecto. En segundo lugar tenemos que incluir una llamada a la librer a en el head de nuestro html:
<!DOCTYPE #t)!, <#t)! !an'-"*s", <#*a+, <)*ta 2#ars*t-"UT5-6" /, <s2ri$t sr2-") +*rniOr-;.P.3.7s",</s2ri$t, <!in= r*!-"st1!*s#**t" #r*C-"*sti! s.2ss" )*+ia-"a!!" /, <tit!*,E7*)$! +* /s +* M +*rniOr</tit!*, </#*a+, <8 +1, </8 +1, </#t)!,
Dos indicaciones en este paso: en primer lugar el nombre de la librer a puede cambiar segn lo que nos descarguemos de la web. Revsalo antes de incluirlo en tu proyecto. En segundo lugar, la carga de la librer a de modernizr debe de hacerse antes de la carga de las hojas de estilo si queremos hacer comprobaciones tambin en estas. Ahora ya lo nico que tenemos que hacer es, desde nuestro documento, interrogar a Modernizr si el navegador es capaz de interpretar determinadas etiquetas y/o argumentos y actuar en consecuencia. Podemos ver una demostracin sencilla introduciendo este cdigo en el body de nuestro ejemplo anterior:
<s2ri$t, iC ZM +*rniOr.in$/t.r*./ir*+\ X a!*rtZ"T/ na0*'a+ r s $ rta *! atri8/t r*./ir*+"\4 Y *!s* X a!*rtZ"T/ na0*'a+ r n s $ rta *! atri8/t r*./ir*+"\4 Y iC ZM +*rniOr.in$/tt1$*s.ran'*\ X a!*rtZ"T/ na0*'a+ r s $ rta *! in$/t t1$*-ran'*"\4 Y *!s* X a!*rtZ"T/ na0*'a+ r n s $ rta *! in$/t t1$*-ran'*"\4 Y </s2ri$t,
Pgina 1$5
HTML & CSS Pero lo que nosotros realmente queremos, la mayora de las veces, no es advertir de nada al usuario sino crear una pgina 'alternativa' de forma que el no se de cuenta de nada aunque, lgicamente, pierda algunas de las funcionalidades que ofrece HTML5. Para ello usamos la funcin document.write de javascript que nos permite crear parte del documento HTML en el mismo momento de su ejecucin y dependiendo de las indicaciones que nos haga Modernizr. Veamos una alternativa ms til al cdigo anterior con estas indicaciones:
<s2ri$t, iC ZM +*rniOr.in$/t.r*./ir*+\ X + 2/)*nt.&rit*Z"<!a8*!," )8r*% <in$/t na)*-^n )8r*^ t1$*-^t*3t^ r*./ir*+-^r*./ir*+^ /,</!a8*!,<8r/,"\4 Y *!s* X + 2/)*nt.&rit*Z"<!a8*!," )8r*% <in$/t na)*-^n )8r*^ t1$*-^t*3t^ /,</!a8*!,<8r/,"\4 Y iC ZM +*rniOr.in$/tt1$*s.ran'*\ X + 2/)*nt.&rit*Z"<!a8*!,E+a+% <in$/t na)*-^*+a+^ t1$*-^ran'*^ )in-^1^ )a3-^1;0^ 0a!/*-^16^ st*$-^1^ /,</!a8*!,<8r/,"\4 Y *!s* X + 2/)*nt.&rit*Z"<!a8*!,E+a+% <in$/t na)*-^*+a+^ t1$*-^t*3t^ siO*-^3^ )a3!*n'#t-^3^ 0a!/*-^16^ /,</!a8*!,<8r/,"\4 Y </s2ri$t,
Otra posibilidad es cargar una hoja de estilos diferente de forma condicional a los elementos que nuestro navegador soporte usando la funci n load de Modernizr. A continuacin vemos un ejemplo sencillo:
<s2ri$t, M +*rniOr.! a+ZX t*st% M +*rniOr.in$/t.$!a2*# !+*r MM M +*rniOr.in$/tt1$*s.+at*R 1*$ % ^*sti! s1.2ss^R n $*% ^*sti! s;.2ss^ Y\4 </s2ri$t,
En el ejemplo anterior testeamos dos elementos HTML5 (el tipo de input date y el argumento placeholder) y en funcin de que estn soportados, o no, cargamos una hoja de estilos diferente. Lgicamente, se trata de una funcin que encontraremos ms til a la hora de probar el soporte de elementos de CSS3, pero puesto que an no los hemos tocado lo vemos aqu y ms adelante haremos algn otro ejemplo. Dos apuntes importantes sobre esto. La funcin load de Modernizr no viene en la versin de desarrollo de la libera y, por tanto, para usarla debemos de generar una librera desde la opcin de produccin incluyendo esta utilidad (est marcada por defecto en el apartado de extras) y todas las comprobaciones
Pgina 1$
HTML & CSS adicionales de tipos, argumentos o propiedades que vayamos a hacer. NOTA IMPORTANTE: Lo visto aqu se trata de un uso muy bsico de estas libreras que no incluye todas las posibilidades y comprobaciones previas que deber amos de hacer en un proyecto profesional. Para ms informacin visita la pgina de documentacin: http://www.modernizr.com/docs/
HTML5 incluye dos etiquetas, audio y video para facilitar la interpretacin directa por parte del navegador de contenido multimedia y embed para incrustar archivos en formato flash.
Audio
La etiqueta audio nos permite insertar un archivo de audio en nuestra p gina web sin necesidad de usar flash ni un plugin de javascript como hac amos hasta ahora. Ser el propio navegador el que realice la reproduccin y dependemos tanto de que la etiqueta est implementada como de los codecs de audio que sea capaz de interpretar. El uso bsico es este:
<a/+i sr2-Aar2#i0 Ga/+i A,U/ na0*'a+ r n a/+i </a/+i , s $ rta !a *ti./*ta
El argumento src, que define dnde se encuentra el archivo de audio a reproducir, es el nico obligatorio. El contenido de la etiqueta slo ser visible si el navegador no la soporta, pero si lo que no soporta es el codec de audio, no ser capaz de reproducir el archivo pero no nos informar sobre ello. As escrito, el archivo no se reproducir ni se har visible de ninguna forma. Existen dos argumentos adicionales, que pueden usarse a la vez, para permitir que el archivo se reporduzca: controls y autoplay. El primero mostrar un pequeo cuadro de mandos con un botn de play/pausa, sonido on/off y una barra de progreso de la duracin del archvio. El segundo har que el sonido se reproduzca al cargar la pgina. Ambos son parmetros sin valor por lo que en XHTML tendremos que usarlos de esta forma:
<a/+i sr2-Aar2#i0 Ga/+i A 2 ntr !s-A2 ntr !sA na0*'a+ r n s $ rta !a *ti./*ta a/+i </a/+i , a/t $!a1-Aa/t $!a1A ,U/
El argumento loop (loop=loop) reproducira en bucle una y otra vez el sonido. Por ltimo, el parmetro preload nos permite cargar el archivo de audio al mismo tiempo que la pgina y no cuando el usuario le da a play para evitar demoras. Este ltimo tiene tres valores posibles: none, metadata (para precargar slo los metadatos del archivo o auto).
Pgina 1$!
Formatos de audio
Son cuatro los codecs de audio diferente a los que, en la actualidad, se da soporte (de forma irregular) en los diferentes navegadores que implementan esta etiqueta: ogg, mp3, wav y acc ( m4a). Ningn navegador los implementa todos ni ninguno de ellos es implementado por todos los navegadores. Al menos no por el momento. Para solucionar esto tenemos la etiqueta source que nos permite especificar diferentes archivos de forma que el navegador tenga eleccin:
<a/+i 2 ntr !s-"2 ntr !s" , <s /r2* sr2-"Cina!+*tra1*2t . ''" /, <s /r2* sr2-"Cina!+*tra1*2t .)$3" /, <s /r2* sr2-"Cina!+*tra1*2t .&a0" /, Eti./*ta n s $ rta+a </a/+i ,
Cuando el navegador procese estas etiquetas se quedar con el primer archivo que sea capaz de reproducir. Por tanto el orden en que aparezcan es importante. Si nosotros preferimos que un navegador que pueda reproducir tanto el .ogg como el .mp3 se quede con el primero, este deber a de aparecer tambin por delante. La etiqueta source tiene un parametro opcional para especificar el tipo de archivo y el codec que usa el mismo, por ejemplo type="audio/mpeg" o type="audio/ogg; codecs=vorbis"
Vdeo
La etiqueta video, su uso y problemtica es muy similar a la de audio. El caso ms sencillo de uso sera este:
<0i+* sr2-"ar2#i0 G0i+* ", 0i+* </0i+* , U/ na0*'a+ r n s $ rta !a *ti./*ta
En este caso al usar la nueva etiqueta sin especificar autoplay ni controls si que se reserva espacio para el primer fotograma del mismo pero la nica forma de reproducirlo sera pulsando con el botn derecho y usando el men contextual que nos suele ofrecer el navegador. El atributo src sigue siendo, pues, el nico obligatorio. Los parmetros controls, autoplay, loop y preload tambin existen y su uso es idntico a los vistos para la etiqueta audio. Los nuevos par metros disponibles para la etiqueta video son los siguientes: width y height nos permiten controlar las dimensiones de visualizacin del vdeo. Si no usamos ninguno de estos parmetros el navegador nos mostrar el vdeo con sus dimensiones originales. Si especificamos uno cualquiera de ambos, pero no el otro, se ajustar el no especificado para respetar la proporcionalidad de la imagen. El atributo poster nos permite definir una imagen esttica que aparecer mientras que el vdeo se carga o hasta que el usuario decide comenzar su reproducci n pulsando el botn de play. Si no se especifica aparecer el primer fotograma del vdeo. Un ejemplo con algunos de estos argumentos:
Jos Mara Morales Vzquez Pgina 1$"
<8 +1, <0i+* sr2-"0i+* G '0. '0" 2 ntr !s-"2 ntr !s" &i+t#-"[00" $ st*r-"t#atsa!!C !=.7$'", U/ na0*'a+ r n s $ rta !a *ti./*ta 0i+* </0i+* , </8 +1,
Formatos de vdeo
Con los formatos de vdeo tenemos el mismo problema que con los de audio: ningn navegador implementa todos los reconocidos ni existe ninguno de ellos que sea soportado por todos los navegadores. Ogv, H.264, y WebM son las posibilidades con las que jugamos en este caso. Ogv es el m s libre, equivalente al formato ogg de audio. H.264 y WebM son dos formatos propietarios, el primero empujado por Apple y el segundo propiedad de Google. La etiqueta source se puede usar tambin en este caso para proporcionar alternativas al navegador:
<0i+* 2 <s <s <s U/ </0i+* , ntr !s-"2 ntr !s" , /r2* sr2-"0i+* G '0. '0" /, /r2* sr2-"0i+* G)$4.)$4" /, /r2* sr2-"0i+* G&*8).&*8)" /, na0*'a+ r n s $ rta !a *ti./*ta 0i+* .
Archivos de Flash
HTML5 incorpora tambin la posibilidad de incrustar directamente archivos de animacin flash a travs de la etiqueta embed:
<*)8*+ sr2-"ani)a2i nGC!as#.s&C" /,
src es, al igual que en audio y video, el nico atributo obligatorio. height y width tambin son vlidos y funcionan de igual forma que hemos descrito en la etiqueta vdeo.
La etiqueta canvas define un objeto que actuar como un lienzo dibujable mediante la llamada a funciones de javascript, proporcionando un potente elemento de dibujo y diseo capaz de hacer competencia directa con flash. El siguiente ejemplo dibuja un rcuadrado verde:
<2an0as i+-")1Can0as" #*i'#t-"300" &i+t#-"P00", Ta na0*'a+ r n s $ rta !a *ti./*ta 2an0as. </2an0as, <s2ri$t, 0ar 2an0as-+ 2/)*nt.'*tE!*)*ntB1I+Z")1Can0as"\4 0ar 2t3 - 2an0as.'*tC nt*3tZ";+"\4 2t3.Ci!!Ut1!* - "H00CC00"4 2t3.Ci!!(*2tZ0R0R100R100\4 </s2ri$t,
Pgina 1$#
HTML & CSS El contenido de la etiqueta canvas slo se visualizar si nuestro navegador no la soporta. canvas define un lienzo transparente susceptible de ser rellenado mediante funciones de dibujo de un API de javascript incorporado al navegador. En las dos primeras lneas del script del ejemplo anterior obtenemos primero una referencia al objeto y en el segundo elegimos el API que usaremos para el dibujo en funcin del argumento de la funcin. El contexto 2d es el ms extendido por el momento aunque existe una especificacin muy avanzada que permite el dibujo en 3D usando el argumento webgl y las libreras de dibujo OpenGL, la competencia libre de las DirectX: http://www.khronos.org/registry/webgl/specs/latest/ Las dos lneas siguientes del ejemplo dibujan un rectngulo de 100 pxeles de ancho por 100 de alto (un cuadrado, en realidad) que empieza en la coordenada 0,0 (en la esquina superior derecha del canvas) y que se rellena de color verde (#00ff00 en hexadecimal). Veamos algunas de las funciones bsicas del dibujo mediante canvas: fillStyle y strokeStyle son variables que nos permiten elegir el color, patr n o gradiente de color que usaremos para relleno o lnea de dibujo, respectivamente. Para seleccionar un color podemos usar los mismos mtodos que en CSS (por ejemplo, #c0ffee, #fff, orange o rgb(255,160,23)) pero siempre entre comillas como si fuese una cadena. Para seleccionar un gradiente o un patrn asignamos el objeto donde est definido el mismo (veremos como hacerlo mas adelante). fillRect y strokeRect son funciones que nos permiten dibujar un rect ngulo especificando cuatro parmetros: el punto de su vrtice superior derecho y las dimensiones de sus lados (x, y,ancho, alto). clearRect (x,y,ancho,alto) limpia el contenido del rectngulo especificado. Para reiniciar el canvas completo podemos hacer un clearRect con las dimensiones totales del mismo o reasignar el valor de ancho o de alto del mismo, como por ejemplo as: cv.&i+t# - 20.&i+t#4 moveTo (x,y) mueve el pincel de dibujo al punto de coordenadas especificadas. lineTo (x,y) dibuja una lnea desde el punto actual done se encuentra el pincel hasta el punto especificado en las coordenadas. En realidad las lneas no se dibujan sobre el lienzo del canvas sino que se almacenan en una especie de buffer temporal que slo se volcar realmente en la pgina web cuando llamemos a la funcin stroke(). El color usado ser el que hayamos definido en strokeStyle. lineWidth es una propiedad que define, en pixeles, el ancho de las l neas
Pgina 11$
HTML & CSS trazadas. font es una variable que nos permite definir un tipo de letra. Recibe una cadena con las caractersticas de este, de forma similar a la de la propiedad font de CSS. Por ejemplo "bold italic 30px monospace" fillText(texto, x, y) es una funcin que escribe el texto que recibe como primer parmetro a partir del punto definido mediante su segundo y tercer parmetro. El color que escoger ser el ltimo que hayamos definido mediante fillStyle. strokeText(texto, x, y) hace lo mismo pero slo dibujando la lnea de contorno del texto sin rellenarlo.
El trabajo con gradientes es bastante ms delicado. En el siguiente ejemplo vemos como definir un gradiente y rellenar un rectangulo con l:
'ra+i*nt* - 20.2r*at*Lin*arDra+i*ntZ;P0R P0R 3P0R ;P0\4 'ra+i*nt*.a++C ! rUt $Z0R "H0C0"\4 'ra+i*nt*.a++C ! rUt $Z1R "HC00"\4 20.Ci!!Ut1!* - 'ra+i*nt*4 20.Ci!!(*2t Z;P0R P0R 100R ;00\4
La primera lnea crea el objeto que contendr el gradiente. Este ser lineal e ir desde el punto 250,50 hasta el 350,250. Las coordenadas est n refereridas a la superficie del canvas. Las dos siguientes lneas definen los colores inicial y final del gradiente. Por ltimo, usamos el objeto gradiente para definir la variable fillStyle y dibujamos un rectngulo que se rellenar con el mismo. Nota que el rectangulo coincide exactamente con la superficie del gradiente pero no tendr a porque ser as. El gradiente lineal puede crearse mediante una diagonal (como en el ejemplo) pero tambin mediante una lnea vertical u horizontal. Tambin podemos crear un radiante cnico mediante la siguiente funcin:
2r*at*(a+ia!Dra+i*ntZ30R 10R r0R 31R 11R r1\
Los tres primeros parmetros definen un crculo y los tres ltimos otro. El gradiente se crear dibujando una superficie cnica entre ambos crculos. El dibujo de arcos se realiza mediante la funcin arc que recibe seis parmetros: las coordenadas del centro, el radio, el punto de inicio y de final del arco en radianes y una variable booleana que define si el arco se trazar en sentido horario (false) o antihorario (true). El 0 de los grados estara situado en el punto de las tres en una esfera horaria. La constante Math.PI tambin nos resultar til para expresar los grados en radianes. Una vez definido el arco o el c rculo podemos llenarlo o dibujar slo su lnea mediante las funciones fill o stroke, respectivamente. Veamos un ejemplo:
20.8*'inPat#Z\4 20.ar2Z1P0R 300R [0R 0R ; W Mat#.PIR tr/*\4 20.Ci!!Ut1!* - "H]2C"4 20.Ci!!Z\4 Jos Mara Morales Vzquez Pgina 111
20.8*'inPat#Z\4 20.ar2Z100R 1P0R ;00R 0R Mat#.PIR Ca!s*\4 20.!in*Wi+t# - 104 20.str =*Ut1!* - "8!a2="4 20.str =*Z\4
La funcin beginPath sirve para indicar a canvas que comenzamos un nuevo trazado independiente de lo que hayamos hecho anteriormente y es v lida tanto al trazar arcos como lneas rectas. Los efectos de sombreado se consiguen mediante las propiedades shadowOffsetX, shadowOffsetY, shadowBlur y shadowColor que definen, respectivamente, el desplazamiento horizontal y vertical de la sombra en p xeles, el difuminado y el color de la misma. Una vez ajustados estos valores todos los elementos tendrn su sombra hasta que los pongamos a cero. Un ejemplo:
20.s#a+ &OCCs*t_ - 104 20.s#a+ &OCCs*tY - 104 20.s#a+ &B!/r - P4 20.s#a+ &C ! r - "8!a2=" 20.Ci!!(*2tZ400R;P0R[PR[P\4
Tenemos disponibles tres funciones que nos van a permitir hacer transformaciones sobre los elementos dibujados: translate(x,y), rotate (angulo) y scale(x,y). La primear desplaza un elemento al punto indicado por las coordenadas que enviamos como parmetros. La segunda va a rotar el elemento el nmero de grados (en radianes) en el sentido de las agujas del reloj. Por ltimo la tercera permite cambiar la escala de un objeto indicando el factor de escalado horizontal y vertical como parmetros. Todas ellas son acumulativas y se aplican sobre todos los elementos que se vayan a dibujar desde el momento en que se indican hasta que se desactivan. Un ejemplo:
C rZ7-04 7<<4 7TT\X 20.Ci!!(*2tZ400RP0R[PR[P\4 20.trans!at*ZP0R P0\4 20.r tat*ZMat#.PI/1<\4 20.s2a!*Z0.[R 0.[\4 Y
Canvas nos va a permir tambin interactuar con las coordenadas del ratn para realizar grficos interactivos. En el siguiente ejemplo del libro diveintohtml5 puedes ver un ejemplo y pulsando sobre el enlace etiquetado como Rules of play te explican lo fundamental de su funcionamiento: http://diveintohtml5.ep.io/examples/canvas-halma.html En los siguientes enlaces tienes todas las funciones, su descripcin y algunos ejemplos de lo que puedes usar como contenido de la etiqueta canvas usando el
Jos Mara Morales Vzquez Pgina 112
9.7. GEOLOCALIZACIN
La geolocalizacin consiste en situar exactamente mediante coordendas geogrficas (longitud y latitud) al usuario que est viendo nuestra pgina web en un plano. HTML5 introduce esta posibilidad de forma nativa mediante su propio API y sin necesidad de usar libreras externas como hasta ahora. Los datos para proporcionar dichas coordenadas pueden tomarse de tres formas diferentes, que pueden ser complementarias y que, en escala de menor a mayor precisin son las siguientes: A travs de la direccin IP pblica de acceso a Internet proporcionada por nuestro proveedor. Por triangularizacin a travs de la localizacin de los puntos de acceso wifi a los que estemos conectados. A travs de un GPS integrado en nuestro equipo. El navegador, si soporta esta funcin, tomar las coordenadas de geolocalizacin del usuario de la forma ms precisa posible y en base a estos mtodos (segn los que tenga disponibles) y siempre despus de pedir autorizacin al usuario. Veamos el body de un pequeo ejemplo:
</!, <!i,Latit/+% <s$an i+-"!atit/+",5a0 r +* *s$*rar...</s$an,</!i, <!i,L n'it/+% <s$an i+-"! n'it/+",5a0 r +* *s$*rar...</s$an,</!i, <!i,Pr*2isiBn% <s$an i+-"$r*2isi n",5a0 r +* *s$*rar...</s$an,</!i, <!i,@!t/ra% <s$an i+-"a!t/ra",5a0 r +* *s$*rar...</s$an,</!i, <!i,Pr*2isiBn *n !a a!t/ra% <s$an i+-"$r*2isi n@!t/ra",5a0 r +* *s$*rar...</s$an,</!i,
<//!,
<s2ri$t, iC Zna0i'at r.'* ! 2ati n\ X na0i'at r.'* ! 2ati n.'*tC/rr*ntP siti nZC/n2ti nZ$ siti n\ X 0ar !atit/+ - $ siti n.2 r+s.!atit/+*4 0ar ! n'it/+ - $ siti n.2 r+s.! n'it/+*4 0ar a!t/ra - $ siti n.2 r+s.a!tit/+*4 0ar $r*2isi n - $ siti n.2 r+s.a22/ra214 0ar $r*2isi n@!t/ra - $ siti n.2 r+s.a!tit/+*@22/ra214 + 2/)*nt.'*tE!*)*ntB1I+Z"!atit/+"\.inn*rHTML - !atit/+4 + 2/)*nt.'*tE!*)*ntB1I+Z"! n'it/+"\.inn*rHTML ! n'it/+4 + 2/)*nt.'*tE!*)*ntB1I+Z"a!t/ra"\.inn*rHTML - a!t/ra4 + 2/)*nt.'*tE!*)*ntB1I+Z"$r*2isi n"\.inn*rHTML $r*2isi n4
Pgina 113
El script, que es donde usamos las funciones, tiene tres partes bien diferenciadas. En primer lugar comprobamos si nuestro navegador soporta la funci n de geolocalizacin interrogando a la variable navigator.geolocation. Si el resultado es negativo mostramos una alerta y, en caso contrario, llamamos a una funci n (navigator.geolocation.getCurrenPosition) a travs de la cual obtenemos la latitud y la longitud (positions.coords.latitude y position.coords.longitude), la precisin en estas medidas segn el mtodo empleado para obtenerlas de los tres vistos en metros (position.coords.accuracy), la altura (position.coords.accuracy) y la precisin en la medida de esta ( position.coords.altitudeAccuracy). La altura y la precisin en ella slo estar disponible si contamos con GPS y ser cero en otro caso. La ltima parte del script muestra los datos obtenidos en nuestra p gina HTML usando la funcin Javascript document.getElementById que nos permite sustituir el contenido de cualquier etiqueta ( innerHTML) simplemente indicando el ID de la misma. Existen otros dos parmetros ms adems de los vistos en este ejemplo: position.coords.heading que te proporciona la posicin en grados respecto al norte y position.coords.speed que, tomando como referencia la ltima posicin y el tiempo transcurrido entre una y otra, nos proporciona la velocidad a la que nos movemos en metros por segundo. Tienes otro ejemplo ms completo que enlaza con el API de google maps para mostrar las coordenadas en un plano aqu: http://benwerd.com/lab/geo.php
9.8. MS COSAS
Existen muchas otras novedades en HTML5: funcionalidad de arrastrar-soltar (dragdrop) nativa en el navegador, un sistema mejorado de comunicaciones bidireccionales con el servidor, cookies que permitiran almacenar m s informacin, etc. Muchas de estas nuevas funcionalidades, al igual que ocurre con las antes vistas de geolocalizacin o de canvas, todas ellas se proporcionan mediante el uso de un API externo realizado en javascript. Para seguir aprendiendo y ampliando conocimientos, as como novedades y cambios de ltima hora, la mejor referencia es la que proporciona el comit del W3C: http://dev.w3.org/html5/spec/Overview.html
Jos Mara Morales Vzquez Pgina 114
Pgina 115
10. CSS3
Los cambios en CSS3 han sido amplios y significativos para conseguir p ginas web ms lmpias y atractivas con un menor esfuerzo para el codifidador. Repasaremos algunas de las ms importantes pero no olvidemos que ni el est ndar est cerrado ni lo que hay es compatible con muchos de los navegadores que se siguen usando ampliamente.
Pseudo-clases
El principal cambio en los selectores de CSS3 se encuentra aqu , donde se han aadido 14 selectores nuevos. El selector :root representa al elemento raz del documento HTML que siempre ha de ser la propia etiqueta html. No existe ninguna diferencia apreciable entre usarl este o la etiqueta body, salvo que :root tendra una mayor especificidad. :empty es un selector que demarca a todos los elementos vac os de contenido y sin hijos. Por ejemplo, tengamos el siguiente HTML:
<$,@ $ara'ra$#.</$, <$,</$, <$,@n t#*r $ara'ra$#.</$,
El prrafo central, vaco y sin hijos, sera el nico que respondera a este selector:
p,empt+- .idth,!//px0 height, 1/px0 bac2ground, red0 3
El selector :target sirve para seleccionar el elemento activo, o sea, aqu l enlace interno realizado mediante la etiqueta a y que acabas de visitar. Veamos este cdigo:
<$,<a <$,<a <$,<a <$,<a #r*C-"H*n!a2*1",Ir a! $/nt 1</a,</$, #r*C-"H*n!a2*;",Ir a! $/nt ;</a,</$, na)*-"*n!a2*1",</a,LaR !aR !a...</$, na)*-"*n!a2*;",</a,BraR 8raR 8ra...</$,
Pgina 11
:last-child viene a acompaar al selector :first-child que ya conocamos y selecciona a un determinado elemento siempre y cuando sea el ltimo hijo de un padre cualquiera. Por ejemplo, supongamos el siguiente cdigo:
<8 +1, <$,Pri)*r $NrraC +*! 8 +1</$, <#1,Tit/!ar</#1, <+i0, <$,Pri)*r $NrraC +*! +i0</$, <$,U*'/n+ $NrraC +*! +i0</$, <$,T*r2*r $NrraC +*! +i0</$, </+i0, </8 +1,
El selector p:first-child seleccionara a los prrafos marcados en azul (el primer hijo del body y el primer hijo del div), mientras que el selector p:last-child seleccionara al prrafo marcado en rojo (el ltimo hijo del div). Siguiendo en esta lnea, :only-child seleccionaria a un elemento que fuese hijo nico de su padre. :nth-child(n) seleccionara al elemento que est en la posicin n dentro de la descendencia de su padre. El primer elemento ser a el 1 y, por lo tanto, p:nth-child(1) sera equivalete a p:first-child. Por ltimo, :nth-last-child(n) seleccionara al elemento que est en la posicin n pero empezando a contar por el ltimo y no por el primero. :nth-child(n) permite un uso avanzado configurando adecuadamente su argumento nico. Podemos cambiar la letra n por las palabras claves odd o even y, en ese caso, seleccionaramos a todos los elementos impares o pares, respectivamente. Tambin podemos usar expresiones como 3n (los elementos mltiplos de 3) o usar tres reglas diferentes ( 3n+1, 3n+2 y 3n+3) para alternar entre tres estilos diferentes en una lista de elementos iguales. Similares a estos, tenemos un conjunto de selectores que se comportan de igual forma pero con los elementos de un determinado tipo. Son :first-of-type, :last-oftype, only-of-type, :nth-of-type(n) y :nth-last-of-type(n).
El selector :not()
Existe una ltima pseudo-clase que trataremos aparte por su especial
Jos Mara Morales Vzquez Pgina 11!
HTML & CSS importancia. Se trata del selector :not() que sirve para aplicar estilos a aquellos elementos que no cumplen lo especificado ente parntesis. Veamoslo con algunos ejemplos. La siguiente regla se apliara al contenido de cualquier div que no fuese de la clase comun
+i0%n tZ.2 )/n\X2 ! r% r*+4 Y
La siguiente regla aplicara a todos los elementos strong que estn dentro de un div pero que no estn dentro de un p
+i0 W%n tZ$\ str n'X2 ! r% r*+4 Y
En la siguiente, lo combinamos con un selector de atributo para seleccionar todos los input salvo aquellos de tipo password.
in$/t%n tZbt1$*-"$ass& r+"c\X2 ! r% r*+4 Y
Podemos usar tambin una lista como argumento del not. Lo siguiente se aplicar a todos los titulares de nivel h2 salvo a aquellos que pertenecen a las clases politica y economia:
#;%n tZ.$ !iti2aR .*2 n )ia\X2 ! r% r*+4 Y
Y, por supuesto, se puede combinar con cualquier otro selector que hemos visto antes: descendientes, etc.
El segundo selector de atributo, que usa el s mbolo distintivo $ selecciona a aquellas etiquetas con un atributo concreto cuyo valor termina en determinada cadena. Por ejempo, las etiquetas a cuyo atributo href terminan en html:
ab#r*Cm-".#t)!"c X 2 ! r% 1*!! &4 Y
Por ltimo, se incluye un selector que usa el smbolo * que selecciona a aquellas etiquetas con un atribuyo cuyo valor contenga en cualquier posici n la cadena especificada. En el siguiente ejemplo, seleccionara a cualquier imagen cuyo ttulo contenga la palabra importante.
i)'btit!*W-"i)$ rtant*"c X8 r+*r% 3$3 r*+ +as#*+4 Y
Todos los selectores de atributo pueden combinarse entre si y, por supuesto, con otros selectores como siempre. Por ejemplo, el siguiente selector cuadrar a con las
Jos Mara Morales Vzquez Pgina 11"
HTML & CSS imgenes cuyo titulo empieze por Estadsticas y contenga la palabra importante:
i)'btit!*l-"Esta+Jsti2as"cbtit!*W-"i)$ rtant*"c X8 r+*r% 3$3 r*+ +as#*+4 Y
Una regla que use el selector de hermanos clsico ( por ej. h1+h2 {color: red;}) slo seleccionara el Titular 2, mientras que usando el selector general h1 ~ h2 {color: red; } seleccionara el Titular 2 y el Titular 4.
Son muchas las propiedades aadidas en CSS3 y muy irregular la implantacin en los diferentes navegadores hasta el punto de que cada uno de ellos en muchos casos ha desarrollado por su cuenta algunas de las implementaciones a adiendo un prefijo distintivo que es -o- para pera -moz- para firefox, -webkit- para chrome, safari y otros que usen el Webkit y -ms- para Internet Explorer. Veremos ejemplos de esto en varios de los apartados siguientes.
Pgina 11#
HTML & CSS Desglosemos las particularidades de estas reglas. En primer lugar, cualquiera de ellas puede ir en la propiedad background o background-image. En segundo, el valor de la propiedad debera de empezar por linear-gradient o radial-gradient segn el tipo de gradiente deseado. En tercer lugar, ambas deben de llevar un nmero de parmetros separados por comas que sern un mnimo de tres en el caso del lineal y de cuatro en el caso del radial. Veamos estos parmetros. En el caso del lineal, el primer parmetro define la direccin del degradado definiendo su inicio y pudiendo usar para ello una o dos de las palabras clave top, bottom, right o left. A continuacin se enumeran los colores del degradado (dos, al menos pero pudiendo ser ms). Cada color se define de cualquiera de las formas admitidas habitualmente en CSS (con un valor hexadecimal, una palabra distintiva o una funcin rgb) y pudiendo ir acompaado de un porcentaje que define la suavidad de la trancisin entre uno y otro color. En el caso del radial, el primer parmetro tambin define la direccin pero adems de las palabras claves anteriores tenemos otra, center, que en caso de usarse debera de ir sola. El segundo parmetro define la forma del degradado y puede ser circle o ellipse. A continuacin iran los colores del degradado que siguen el mismo formato explicado anteriormente y deberan de ser al menos dos. Se trata esta de una de las propiedades de que habl bamos cuyo estndard no se encuentra generalizado, as que si queremos que los principales navegadores lo entiendad debemos repetir la regla con los diferentes prefijos distintivos. Por ejemplo as:
$.+*'ra+a+ ra+ia!X 8a2='r /n+% ra+ia!-'ra+i*ntZ2*nt*rR 2ir2!*R &#it*R H[D@PCD\4 8a2='r /n+% - -ra+ia!-'ra+i*ntZ2*nt*rR 2ir2!*R &#it*R H[D@PCD\4 8a2='r /n+% -) O-ra+ia!-'ra+i*ntZ2*nt*rR 2ir2!*R &#it*R H[D@PCD\4 8a2='r /n+% -&*8=it-ra+ia!-'ra+i*ntZ2*nt*rR 2ir2!*R &#it*R H[D@PCD\4 8a2='r /n+% -)s-ra+ia!-'ra+i*ntZ2*nt*rR 2ir2!*R &#it*R H[D@PCD\4 Y
En el caso de los gradientes lineales, tenemos una herramienta web muy til que nos permite generar las reglas de forma automtica aqu: http://gradients.glrzad.com/
Fondos mltiples
CSS3 incorpora la posibilidad de incluir fondos m ltiples en una misma caja sin necesidad de tener que superponer una caja por cada imagen. La posici n, y caractersticas de cada imagen (repeticin, etc.) se define tambin de forma independiente para cada una de ellas. Veamos un par de ejemplos. Ahora definir imgenes independientes para personalizar las esquinas de una caja es tan sencillo como esto:
$.2a7a;X $a++in'% <0$34 8 r+*r% 1$3 s !i+ 8!a2=4
Pgina 12$
Y si queremos solapar dos imgenes de fondo transparente en la misma caja nos basta con hacer lo siguiente:
$.2a7a3X &i+t#% 300$34 #*i'#t% 400$34 8a2='r /n+% /r!Zi)a'*n1.'iC\ 8 tt ) n -r*$*atR /r!Zi)a'*n;.'iC\ 8 tt ) n -r*$*at4 Y
El valor indica el radio del arco de circunferencia que delimita el arco. Se puede usar cualquier unidad de medida vlida en CSS (pulgadas, em, etc.) y definir de forma independiente cada una de las cuatro esquinas de la caja con la siguiente sintaxis:
8 8 8 8 r+*r-t r+*r-8 r+*r-8 r+*r-t $-ri'#t-ra+i/s% P$34 tt )-ri'#t-ra+i/s% ;*)4 tt )-!*Ct-ra+i/s% 3*)4 $-!*Ct-ra+i/s% 10$34
Con el formato abreviado podemos poner dos valores diferentes (el primero para las esquina superior izquierda e inferior derecha y el otro para las otras dos) o cuatro valores (uno para cada esquina empezando por la superior izquierda y continuando en el sentido de las agujas del reloj):
8 r+*r-ra+i/s% 10$3 P$34 8 r+*r-ra+i/s% 10$3 P$3 ;0$3 ;P$34
Podemos usar tambin esquinas irregulares especificando dos radios diferentes: uno para el eje X y otro para el eje Y. El formato cuando todas las esquinas son iguales es este:
8 r+*r-ra+i/s% 10$3 / P0$34
El redondeado de esquinas mediante esta propiedad se puede aplicar, adem s de a una caja, tambin directamente a una tabla o a una imagen:
ta8!* X &i+t#% ;00$34 8a2='r /n+-2 ! r% r'8Z16PR;0PR;;P\4 t*3t-a!i'n% 2*nt*r4 )ar'in% 30$34 8 r+*r% 1$3 s !i+ 'ra14 8 r+*r-ra+i/s% ;0$34 Y Hi)'r*+ n+ X &i+t#% <00$34 #*i'#t% 1P0$34 )ar'in% 0 a/t 4 8 r+*r-ra+i/s% 1*)4 8 r+*r% 1$3 s !i+ 'ra14 8a2='r /n+-i)a'*% /r!Z#*a+*r.7$'\4 Y
Sombras
CSS3 incorpora dos propiedades que sirven par dar sombras a textos y cajas que se llaman, respectivamente, text-shadow y box-shadow. El formato bsico de ambas es similar. Veamos un par de ejemplos:
t*3t-s#a+ &% 1P$3 P$3 10$3 ran'*4 8 3-s#a+ &% -P$3 -10$3 P*) H0004
Los dos primeros parmetros son el desplazamiento vertical y horizontal de la sombra. Valores positivos desplazan esta haca abajo y la derecha. Valores negativos hacia arriba y la izquierda. El tercer parmetros marca la intensidad y/o difuminacin de la sombra (valores ms pequeos definen una sombra ms intensa y marcada, mientras que valores grandes crean una sombra muy difuminada y poco definida). No se puede usar un porcentaje como ninguno de estos tres parmetros. El cuarto parmetro es el color de la sombra y puede expresarse de cualquiera de las formas vlida vistas en CSS. box-sahdow permite, adems, dos parmetros opcionales: uno de ellos ira delante del color y define, mediante una medida, la distancia al objeto del foco que provoca la sombra, de forma que valores positivos acercan el foco provocando una sombra mayor y valores negativos alejan el foco provocando una sombra menor. El siguiente parmetro opcional es la palabra clave inset que ira al final de la declaracin y provocara una sombra interior a la caja.
Jos Mara Morales Vzquez Pgina 122
Opacidad
La propiedad opacity permite definir elementos parcial o totalmente transparentes. El valor de esta propiedad es un nmero decimal entre 0 y 1, de forma que 1 define la total opacidad (cuerpo s lido y no translucido) y el 0 la total transpariencia.
$a2it1% .34
Ms control de la tipografa
En CSS3 se normaliza el uso de tipografas externas (como las de Google Fonts que vimos hace ya tiempo) de forma que podamos usar cualquier tipo de fuente disponible en la red en nuestras pginas. La incorporacin y descarga de fuentes se hace mediante la instruccin @font-face que tiene el siguiente formato:
FC nt-Ca2* X C nt-Ca)i!1% "Cantasia"4 /r!Z"Cantasia.ttC"\4 Y
Si quisiramos importar ms de una fuente en nuestro proyecto necesitamos una instruccin @font-face por cada una de ellas:
FC nt-Ca2* X C nt-Ca)i!1% 0*ra4 sr2% /r!Z"I*raU*B+.ttC"\4 Y FC nt-Ca2* X C nt-Ca)i!1% Cantasia4 sr2% /r!Z"Cantasia.ttC"\4 Y
Inexplicablemente, aunque las fuentes ttf se han popularizado gracias a Microsoft, estas no son soportadas por ninguan versi n de explorer. Microsoft prefiere usar las tipografas eot. Para que los usuarios con Explorer vean la fuentes necesitamos convertir las ttf a este formato y usar esta sintaxis que contempla ambos tipos:
FC nt-Ca2* X C nt-Ca)i!1% Cantasia4 sr2% /r!Z"Cantasia.ttC"\4 sr2% /r!Z"Cantasia.* t"\4 Y
Existen diferentes programas capaces de convertir entre diferentes formatos. Tambin puedes usar este recurso web: http://www.kirsle.net/wizards/ttf2eot.cgi La nueva propiedad font-size-adjust permite ajustar la altura de fuentes diferentes mediante el uso de un coeficiente de ajuste. Slo est implementada en Firefox:
C nt-siO*-a+7/st% .4464
Pgina 123
Aunque puede aproximarse a ojo por el m todo de prueba y de error, existe un recurso web que nos lista las fuentes disponibles en nuestro sistema y nos calcula los coeficientes de ajuste: http://www.brunildo.org/test/xheight.pl La propiedad text-overflow decide lo que se har con un texto que no cabe completamente dentro de la caja en la que se encuentra. Tiene dos posibles valores: clip (lo corta sin ms) o (lo corta pero antes coloca tres puntos suspensivos). La propiedad font-stretch permitir ajustar el ancho de los caracteres, pero por el momento ningn navegador la implementa. Sus valores posibles son, de ms ancha a ms estrecha, wider, narrower, ultra-condensed, extra-condensed, condensed, semi-condensed, normal, semi-expanded, expanded, extraexpanded y ultra-expanded. La propiedad text-wrap define como cortar las lneas de un texto y tampoco est implementada por el momento. El valor normal, por defecto, indica que slo se pueden romper en los espacios y puntos. none indica que no pueden romperse, unrestricted que pueden romperse entre dos caracteres cualesquiera y suppress indica que no slo no pueden romperse sino que se suprimen incluso los saltos de lnea manuales que hayamos colocado.
Columnas ms fciles
CSS3 dispone de siete propiedades que nos van a permitir mostrar el texto mediante columnas de forma muy fcil. Son columns, column-gap, column-fill, column-span y column-rule. Al igual que ocurre con las propiedades relacionadas con los gradientes, esta coleccin de propiedades precisa llevar el prefijo del navegador (-moz-, -webkit-) para funcionar en firefox y chrome pero no as en opera. Explorer no las implementa an. Los ejemplos a continuacin se vern con la sintaxis necesaria para mozilla salvo que se indique lo contrario. columns define el nmero de columnas y el ancho mnimo esperado para cada una de ellas. Puede separarse en dos propiedades independientes: columnwidth y column-count. El funcionamiento de ambos parmetros est ntimamente relacionado pero la interpretacin que hacen de ellos los diferentes navegadores no es unnime. Mozilla, por ejemplo, da preferencia al nmero de columnas mientras que Opera lo hace con el ancho de estas.
/W -) O-2 !/)ns% ;00$3 34 W/ -) O-2 !/)n-&i+t#% ;00$34 -) O-2 !/)n-2 /nt% 34
Pgina 124
HTML & CSS puede dividirse en tres propiedades distintas: column-rule-width, column-rule-style y column-rule-color. Los estilos permitidos son los mismos que los de un borde.
/W -) -) -) -) O-2 !/)n-r/!*% 1$3 s !i+ 'ra14 W/ O-2 !/)n-r/!*-&i+t#% 1$34 O-2 !/)n-r/!*-st1!*% s !i+4 O-2 !/)n-r/!*-2 ! r% 'ra14
column-span nos permite marcar algn elemento para que no se propague entre diferentes columnas sino que est completo en una de ellas. Imaginemos, por ejemplo, un texto de entradilla o un titular. Tiene dos valores v lidos: 1 y auto segn que deba limitarse a la primera columna o expandirse por las que precise. Slo lo implementan Opera y Chrome:
2 !/)n-s$an% 14 -&*8=it-2 !/)n-s$an% 1
column-fill define como se llenaran las columnas. Por defecto su valor es balance, que hace que el navegador divida el contenido de la caja en tantas partes iguales como columnas para que estas sean lo ma uniformes y parejas posible. Si su valor es auto, el navegador llenar primero la primera columna y no pasar a la segunda hasta que no quepa nada en ella y as sucesivamente. Esta propiedad an no est implementada en ningn navegador.
Transformaciones y trancisiones
La propiedad transform permite realizar diferentes transformaciones en 2D o 3D sobre cualquier elemento (textos, cajas...) de nuestra web. Se trata de una de las propiedades sobre las que an se est trabajando (sobre todo en el terreno de 3D), implementada en todos los navegadores excepto el explorer, que hay que usar con los prefijos propios de cada navegador ( -moz-, -webkit- y -o-) y para la que slo veremos algunos ejemplos bsicos. Las transformaciones disponibles son rotacin cambio de escala, deformacin oblicua y desplazamiento. La rotacin se puede expresar en grados ( deg), radianes (rad), aplicarse a los ejes X e Y por separado (rotateX y rotateY), a ambos por igual (rotate), y especificar un nmero de grados positivo (en el sentido de las agujas del reloj) o negativo (sentido contrario). Un ejemplo:
transC r)% r tat*Z-;0+*'\4 -) O-transC r)% r tat*Z-;0+*'\4 -&*8=it-transC r)% r tat*Z-;0+*'\4 - -transC r)% r tat*Z-;0+*'\4
HTML & CSS puede ser mayor que cero (ampliacin). Menor (reduccin) o negativo (reflexin). Tambin podemos aplicar un factor de escala diferente al eje X y al Y (scaleX y scaleY). Otro ejemplo:
-) O-transC r)% s2a!*Z;.P\4 -&*8=it-transC r)% s2a!*Z;.P\4 - -transC r)% s2a!*Z;.P\4 transC r)% s2a!*Z;.P\4
La deformacin oblicua usa el parmetro shew y nos permite especificar un ngulo en grados, radianes o gradientes ( grad), positivos, negativos (para el sentido, igual que en la rotacin) y especificar una deformacin comn o separada para cada eje:
-) O-transC r)% s=*&Z-30+*'\4 -&*8=it-transC r)% s=*&Z-30+*'\4 - -transC r)% s=*&Z-30+*'\4 transC r)% s=*&Z-30+*'\4
Por ltimo, translate nos permite definir un desplazamiento indicando este en una medida concreta o en tanto por ciento, con valores positivos (abajo y hacia la derecha) o negativos (arriba y hacia la izquierda). En este caso el valor de la propiedad puede llevar uno o dos valores aplicando en el primer caso a ambos ejes y en el segundo distinguiendo entre ambos:
-) O-transC r)% trans!at*Z100$3R -P0$3\4 -&*8=it-transC r)% trans!at*Z100$3R -P0$3\4 - -transC r)% trans!at*Z100$3R -P0$3\4 transC r)% trans!at*Z100$3R -P0$3\4
Otras transformaciones en diferentes estados de normalizacin son: matrix, matrix3d, translate3d, translateZ, scale3d, scaleZ, rotate3d, rotateZ y perspective. La propiedad transition, por ltimo, nos va a permitir realizar pequeos efectos de animacin sin necesidad de recurrir a javascript. Usamos para ello cuatro propiedades: transition-property, transition-duration, transition-timing-function y transition-delay (o transition, sin ms). Tampoco est disponible para Explorer. Veamos primero un ejemplo y luego explicaremos los diferentes parmetros:
+i0.tran2isi n X )ar'in% 10$3 a/t 4 $a++in'% 10$34 t*3t-a!i'n% 2*nt*r4 &i+t#% ;00$34 #*i'#t% 100$34 8a2='r /n+-2 ! r% $in=4 8 r+*r% P$3 s !i+ 8!/*4 -&*8=it-transiti n% 8 r+*r Ps *as*- /t 4 -) O-transiti n% 8 r+*r Ps *as*- /t4 - -transiti n% a!! Ps *as*- /t4
Pgina 12
En la primera regla especificamos que la trancisin afectar al borde (trancisionproperty), que durar 5 segundos (trancision-timing-function) y que ser rpida al principio y ms lenta al final (ease-out). En la segunda regla, que se activar al colocar el ratn encima, hacemos un cambio en el borde del elemento (tanto de tamao como de color) y la trancisin realizar la transformacin entre el estado original y el final con los datos especificados. Al retirar el rat n la animacin se invertir. La propiedad puede ser el ancho ( width), el alto (height), el color, una lista de propiedades diferentes separadas por coma o all (todas las propiedades que cambien entre uno y otro estado). Los tiempos y retrasos se especifican en segundos (s) o milisengudos (ms). Por ltimo, el timing-function puede ser constante (linear), de lento a rpido (ease-in), de rpido a lento (ease o easeout) o lento al principio y al final y ms rpido en el centro (ease-in-out). Se pueden especificar propiedades: tambin diferentes parmetros para diferentes
Pgina 12!
Es absolutamente imposible resear todas las ayudas y referencias que a lo largo del ao en que he redactado estos apuntes y durante mucho tiempo antes he tomado de la web, libros de consulta, ejemplos de p ginas encontradas en Internet, etc. Pero si tuviera que quedarme con algunas como referencias de cabecera, sera justo mencionar al menos a las siguientes. http://www.librosweb.es/ es una coleccin de libros web escritos en castellano que abarcan todas las disciplinas que hemos tocado aqu . http://www.w3schools.com/ es, sin duda, la mejor referencia que existe en la web cuando quieres consultar los argumentos de una etiqueta, los valores que puede tomar o, simplemente, ver algunos ejemplos simples de cualquier elemento HTML y/o CSS http://meyerweb.com/ es la pgina web de Eric A. Meyer, un verdadero monstruo de esta disciplina y artfice de la gran mayora de trucos y tcnicas que hemos visto en el captulo 7 Y, para los fanticos del papel, si tengo que mencionar dos libros de mi biblioteca personal sobre este tema me quedo con estos: HTML5 y CSS3. Van Lancker, Luc. Ediciones ENI. 2011 CSS, Tcnicas profesionales para el diseo moderno. Meyer, Eric A. Editorial Anaya Multimedia. 2011
Pgina 12"