Guía Completa de HTML y CSS
Guía Completa de HTML y CSS
Tabla de contenido
4 Elementos textuales.......................................................................................................................28
4.1 Párrafos.....................................................................................................................................29
Índice I
4.2 Saltos de línea......................................................................................................................... 29
4.3 Texto preformateado.............................................................................................................30
4.4 Encabezados............................................................................................................................31
4.5 Separadores.............................................................................................................................32
4.6 Elementos textuales en línea...............................................................................................32
4.6.1 Citas textuales......................................................................................................................................... 33
4.6.2 Texto entrecomillado............................................................................................................................. 33
4.6.3 Acrónimos................................................................................................................................................. 33
4.6.4 Superíndices y subíndices.................................................................................................................... 34
4.6.5 Texto resaltado........................................................................................................................................ 34
4.6.6 Elemento span......................................................................................................................................... 35
4.6.7 Elementos para estilos.......................................................................................................................... 35
4.7 Referencias de caracteres con nombre.............................................................................35
5 Introducción a CSS.........................................................................................................................36
5.1 ¿Qué puedo hacer con CSS?................................................................................................36
5.2 ¿Qué diferencias hay entre HTML y CSS?..........................................................................37
5.3 ¿Qué beneficios me ofrece CSS?.........................................................................................37
5.4 Características CSS.................................................................................................................37
6 Aplicando CSS a un documento HTML......................................................................................38
6.1 Estilo en línea...........................................................................................................................39
6.2 Estilo por ámbito.....................................................................................................................39
6.3 Hoja de estilo interna.............................................................................................................40
6.4 Hoja de estilo externa............................................................................................................41
7 Las reglas de estilo......................................................................................................................... 42
7.1 El selector................................................................................................................................. 43
7.2 Propiedades y valores...........................................................................................................43
7.2.1 Unidades de medida.............................................................................................................................. 44
7.2.2 Valores de color...................................................................................................................................... 44
7.2.3 URL's.......................................................................................................................................................... 47
7.3 Herencia....................................................................................................................................49
7.4 Introducir comentarios..........................................................................................................50
7.5 Las nuevas propiedades de la version 3...........................................................................50
8 Colores y fondos con CSS.............................................................................................................52
8.1 Color en primer plano...........................................................................................................52
8.2 Color de fondo........................................................................................................................ 52
8.3 Imagen de fondo.....................................................................................................................53
8.3.1 Propiedad abreviada background...................................................................................................... 56
8.4 Gradientes como fondo........................................................................................................57
9 Formato de texto con CSS............................................................................................................61
9.1 Fuentes..................................................................................................................................... 61
9.1.1 Especificar fuentes en los elementos................................................................................................ 62
9.1.2 Propiedad abreviada font..................................................................................................................... 64
Índice II
9.1.3 Fuentes en el servidor........................................................................................................................... 64
9.1.4 ¿Donde puedo conseguir nuevas fuentes?......................................................................................66
9.2 Propiedades para elementos textuales.............................................................................66
10 Imágenes en documentos web.................................................................................................69
10.1 Gráficos vectoriales..............................................................................................................69
10.2 Mapas de bits........................................................................................................................69
10.2.1 Resolución.............................................................................................................................................. 70
10.2.2 Profundidad de color.......................................................................................................................... 70
10.2.3 Dimensión de la imagen..................................................................................................................... 71
10.2.4 El tamaño de archivo de imagen...................................................................................................... 71
10.3 Formato de archivo de imagen.........................................................................................72
10.4 Incluir una imagen en la web.............................................................................................73
10.5 Formato de imagen..............................................................................................................74
10.5.1 Tamaño de la imagen.......................................................................................................................... 74
10.5.2 Alineación............................................................................................................................................... 74
10.5.3 Elementos figure y figcaption............................................................................................................ 75
11 Enlaces............................................................................................................................................ 77
11.1 Incluir enlaces en un documento web............................................................................78
11.2 Destino del enlace................................................................................................................78
11.3 Marcadores............................................................................................................................79
11.4 Enlaces a otros recursos....................................................................................................80
11.5 Formato del enlace..............................................................................................................80
12 Tablas.............................................................................................................................................. 83
12.1 Estructura de una tabla en HTML.....................................................................................83
12.2 Celdas de cabecera y celdas de datos.............................................................................84
12.3 Título de tabla........................................................................................................................85
12.4 Expansión de celdas............................................................................................................86
12.5 Grupos de filas......................................................................................................................89
12.6 Grupos de columnas...........................................................................................................90
12.7 Calcular el número de columnas de una tabla..............................................................91
13 Formato de tabla con CSS..........................................................................................................92
13.1 Alto y ancho de tabla y celdas...........................................................................................92
13.2 Bordes.....................................................................................................................................95
13.3 Alineación...............................................................................................................................98
13.4 Relleno....................................................................................................................................99
13.5 Propiedades específicas para elemento table............................................................100
13.5.1 La ubicación del título....................................................................................................................... 100
13.5.2 Formato de las tablas........................................................................................................................ 100
13.5.3 Espacio entre celdas......................................................................................................................... 101
13.5.4 Modelo de los bordes....................................................................................................................... 101
13.5.5 Comportamiento de las celdas vacias.......................................................................................... 102
14 Maquetación web.......................................................................................................................103
Índice III
14.1 Clases e identificadores....................................................................................................103
14.1.1 Clases.................................................................................................................................................... 103
14.1.2 Identificadores.................................................................................................................................... 105
14.2 Agrupación de elementos................................................................................................107
14.2.1 Elemento SPAN................................................................................................................................... 107
14.2.2 Elemento DIV....................................................................................................................................... 108
14.3 Capas.................................................................................................................................... 109
14.4 El modelo de caja...............................................................................................................110
14.4.1 Margen.................................................................................................................................................. 112
14.4.2 Relleno.................................................................................................................................................. 113
14.4.3 Bordes.................................................................................................................................................. 113
[Link] Bordes con esquinas redondeados............................................................................................ 113
[Link] Sombra............................................................................................................................................... 114
[Link] Borde con imágenes de fondo..................................................................................................... 115
[Link] Contorno........................................................................................................................................... 117
14.4.4 Dimesión.............................................................................................................................................. 117
14.4.5 Desborde............................................................................................................................................. 118
14.5 Elementos flotantes...........................................................................................................119
14.6 Visibilidad.............................................................................................................................121
14.7 Opacidad..............................................................................................................................122
14.8 Posicionamiento.................................................................................................................122
14.8.1 Posicionamiento estático................................................................................................................. 123
14.8.2 Posicionamiento absoluto............................................................................................................... 123
14.8.3 Posicionamiento relativo.................................................................................................................. 124
14.8.4 Posicionamiento fijo.......................................................................................................................... 125
14.9 Apilamiento......................................................................................................................... 126
15 Listas............................................................................................................................................. 128
15.1 Listas sin numerar.............................................................................................................128
15.2 Listas ordenadas................................................................................................................129
15.3 Listas de definiciones........................................................................................................130
15.4 Lista multinivel....................................................................................................................130
15.5 Formato de listas................................................................................................................131
15.5.1 Estilo de la viñeta............................................................................................................................... 132
15.5.2 Imágenes como viñetas.................................................................................................................... 132
15.5.3 Posición de la viñeta o numeración..............................................................................................133
15.5.4 Listas multinivel.................................................................................................................................. 134
15.5.5 Contadores.......................................................................................................................................... 135
16 Formularios................................................................................................................................. 138
16.1 Tipos de controles.............................................................................................................138
16.2 Estructura de un formulario web...................................................................................140
16.2.1 Elemento fieldset............................................................................................................................... 142
16.3 Controles de formulario...................................................................................................142
16.3.1 Etiquetas de control.......................................................................................................................... 144
16.3.2 Elemento input................................................................................................................................... 145
16.3.3 Cuadros de texto............................................................................................................................... 147
Índice IV
16.3.4 Texto de búsqueda............................................................................................................................ 147
16.3.5 Teléfono................................................................................................................................................ 148
16.3.6 URL........................................................................................................................................................ 148
16.3.7 Email...................................................................................................................................................... 148
16.3.8 Cuadro de contraseña...................................................................................................................... 148
16.3.9 Fecha y hora........................................................................................................................................ 149
16.3.10 Número.............................................................................................................................................. 149
16.3.11 Rango.................................................................................................................................................. 150
16.3.12 Color................................................................................................................................................... 150
16.3.13 Casilla de verificación...................................................................................................................... 151
16.3.14 Grupo de botones de radio.......................................................................................................... 151
16.3.15 Fichero................................................................................................................................................ 152
16.3.16 Imagen................................................................................................................................................ 152
16.3.17 Área de texto.................................................................................................................................... 153
16.3.18 Lista desplegable............................................................................................................................. 153
[Link] Opciones de la lista....................................................................................................................... 154
[Link] Agrupar opciones.......................................................................................................................... 155
16.3.19 Envío de formulario......................................................................................................................... 156
16.3.20 Reinicio del formulario................................................................................................................... 157
16.3.21 Campo oculto................................................................................................................................... 157
16.3.22 Elemento button.............................................................................................................................. 157
16.3.23 Lista de opciones. Elemento datalist.......................................................................................... 158
19 Mapas........................................................................................................................................... 173
19.1 Mapas en modo cliente. Elementos <map> y <area>...............................................174
19.2 Crear un mapa....................................................................................................................175
20 Transiciones, transformaciones y animaciones..................................................................176
20.1 Transformaciones..............................................................................................................177
20.1.1 Mover un elemento........................................................................................................................... 177
Índice V
20.1.2 Rotar un elemento............................................................................................................................. 178
20.1.3 Escalar un elemento.......................................................................................................................... 178
20.1.4 Giro en dos ejes................................................................................................................................. 179
20.1.5 Cambiándolo todo............................................................................................................................. 179
20.2 Transiciones........................................................................................................................180
20.3 Animaciones........................................................................................................................184
20.3.1 La regla @keyframes......................................................................................................................... 184
21 Marcos.......................................................................................................................................... 187
21.1 Disposición de los marcos...............................................................................................188
21.1.1 Elemento frameset............................................................................................................................ 189
21.1.2 Contenido de un marco. Elemento frame...................................................................................190
21.2 Marcos anidados................................................................................................................193
21.3 Contenido alternativo.......................................................................................................195
21.4 Marcos en línea..................................................................................................................196
22 Publicación web..........................................................................................................................197
22.1 Construcción de un sitio web..........................................................................................198
22.1.1 Análisis del sitio web......................................................................................................................... 199
[Link] Elegir un tema.................................................................................................................................. 199
[Link] Definición de los objetivos............................................................................................................ 199
[Link] Definición del destinatario............................................................................................................ 199
[Link] Análisis del contenido..................................................................................................................... 200
[Link] Evaluación de la competencia...................................................................................................... 200
22.1.2 Diseño................................................................................................................................................... 200
22.1.3 Desarrollo............................................................................................................................................ 201
[Link] Nomenclatura de archivos............................................................................................................ 201
[Link] Organización del almacenamiento.............................................................................................. 202
22.1.4 Pruebas................................................................................................................................................ 202
[Link] Validar un sitio web......................................................................................................................... 203
22.2 Dominio y hospedaje........................................................................................................204
22.2.1 Selección de un servidor.................................................................................................................. 204
[Link] Cómo elegir un alojamiento gratuito.......................................................................................... 204
[Link] Cómo elegir un alojamiento de pago......................................................................................... 206
[Link] Búsqueda de los mejores hostings............................................................................................. 208
[Link] Alojamiento en un servidor propio............................................................................................. 208
22.3 Normativa............................................................................................................................ 209
22.3.1 Prácticas poco éticas......................................................................................................................... 210
22.3.2 Creative Commons............................................................................................................................ 210
[Link] Licencias Creative Commons........................................................................................................ 210
[Link] Publicar una obra bajo licencia Creative Commons................................................................212
23 Bibliografía................................................................................................................................... 215
Índice VI
Rafael Lozano HTML y CSS
HTML y CSS
Página 1
Rafael Lozano Introducción a los Lenguajes de Marcas
A lo largo del tiempo han surgido dos lenguajes de marcado íntimamente relacionados
como consecuencia del proceso de desarrollo y estandarización del W3C que ha seguido.
Estos son:
✔ HTML → (Hipertext Markup Language) es el lenguaje de marcado derivado de SGML
con el que se escriben los documentos electrónicos popularmente conocidos como
páginas web.
✔ XHTML → (eXtensible HyperText Markup Language) es, básicamente, HTML
expresado como XML válido, del cual deriva. Es más estricto a nivel técnico, pero esto
permite que posteriormente sea más fácil al hacer cambios o buscar errores entre
otros.
Vamos a ver ambos lenguajes con algo más de detalles
1.1.1 HTML
Desde la publicación de HTML 4.01, la actividad de estandarización de HTML se detuvo
y el W3C se centró en el desarrollo del estándar XHTML. Por este motivo, en el año 2004,
las empresas Apple, Mozilla y Opera mostraron su preocupación por la falta de interés del
W3C en HTML y decidieron organizarse en una nueva asociación llamada WHATWG (Web
Hypertext Application Technology Working Group).
La actividad actual del WHATWG se centra en el estándar HTML5, cuyo primer borrador
oficial se publicó el 22 de enero de 2008. Debido a la fuerza de las empresas que forman el
grupo WHATWG y a la publicación de los borradores de HTML 5, en marzo de 2007 el W3C
decidió unirse al WHATWG y retomar el desarrollo y estandarización de HTML.
El HTML5 es la quinta revisión del lenguaje. Esta nueva versión pretende corregir
problemas con los que los desarrolladores web se encuentran, así como rediseñar el código
actualizandolo a nuevas necesidades que demanda la web de hoy en día.
Cuando se publicó el borrador, la mayoría de los navegadores no contemplaban esta
nueva versión y la fueron incorporando poco a poco, lo que permitió a desarrolladores ir
haciendo sitios web con esta versión del lenguaje. Actualmente va por la versión 5.2 cuyo
último borrador se publicó en diciembre de 2017
HTML5 introduce además nuevas APIs (Application Programming Interface) y se puede
definir como un conjunto de subrutinas, especificaciones y métodos que ofrece cierta
biblioteca para ser utilizado por otro programa. Las APIs permiten hacer uso de funciones o
infraestructura ya existente en otro programa, ahorrando tiempo y recursos al evitar
programar todo desde el inicio.
Las APIs para HTML5 están escritas en JavaScript y permiten realizar una serie de
tareas que a menudo son más utilizadas y útiles en dispositivos móviles. Estas son:
✔ Drag and Drop → Esta es una característica común que muchas interfaces de servicios
y plataformas poseen. Consiste en arrastrar un objeto o elemento y moverlo a una
nueva ubicación. Puede realizarse en HTML mediante eventos.
Página 2
Rafael Lozano HTML y CSS
1.1.2 XHTML
De forma paralela a su actividad con HTML, W3C ha continuado con la estandarización
de XHTML, una versión avanzada de HTML y basada en XML. La primera versión de XHTML
se denomina XHTML 1.0 y se publicó el 26 de Enero de 2000 (y posteriormente se revisó el
1 de Agosto de 2002).
XHTML 1.0 es una adaptación de HTML 4.01 al lenguaje XML, por lo que mantiene casi
todas sus etiquetas y características, pero añade algunas restricciones y elementos propios
de XML. La versión XHTML 1.1 ya ha sido publicada en forma de borrador y pretende
modularizar XHTML. También ha sido publicado el borrador de XHTML 2.0, que iba a
suponer un cambio muy importante respecto de las anteriores versiones de XHTML. Sin
embargo, esta versión no llegó a publicarse formalmente ya que se abandonó el proyecto
en favor de HTML5.
Página 3
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 4
Rafael Lozano HTML y CSS
Página 5
Rafael Lozano Introducción a los Lenguajes de Marcas
Se trata de la variante con las normas más estrictas y las restricciones más severas. Las
páginas web que incluyan esta declaración, no pueden utilizar atributos relacionados con el
aspecto de los contenidos, por lo que requiere una separación total de código HTML y
estilos CSS.
Se trata de una variante menos estricta que la anterior, ya que permite el uso de
algunos atributos HTML relacionados con el aspecto de los elementos.
Esta última variante la utilizan las páginas que están formadas por marcos, una práctica
completamente desaconsejada y que hoy en día sólo utilizan los sitios web obsoletos.
Página 6
Rafael Lozano HTML y CSS
siguiente:
1. Editor web para escribir las páginas web.
2. Navegador web para probar y visualizar el resultado de la página que hemos hecho.
3. Servidor web para almacenar y gestionar la página web.
Página 7
Rafael Lozano Introducción a los Lenguajes de Marcas
pueda visualizar nuestra página web independientemente del navegador que utilice.
Los navegadores más populares del mercado son: Google Chrome, Microsoft Edge,
Mozilla Firefox, Safari y Opera.
1 La instalación y configuración de un servidor web es tarea para un administrador de sistemas. No es objetivo de este
manual ilustrar este proceso, por lo que solamente se indicará donde almacenar los documentos web y como acceder
a ellos utilizando un navegador que contacte con el servidor web.
Página 8
Rafael Lozano HTML y CSS
de Windows.
4. Marcar la casilla Internet Information Services.
5. Hacer clic en el botón Aceptar.
Página 9
Rafael Lozano Introducción a los Lenguajes de Marcas
porque es multiplataforma, lo que da soporte tanto a usuarios de Windows como los de otras
plataformas como puede ser Mac o Linux. Otra de las principales ventajas de Komodo IDE es
que se ofrece con la misma licencia que el navegador de la fundación Mozilla, Firefox, por lo
que sobra decir que es un producto de código libre y por tanto, gratuito para cualquier uso.
Entre sus características están:
✔ Resaltado y coloreado de código fuente, con soporte para casi todos los lenguajes
que podemos utilizar al construir una página web.
✔ Multi-documento, que permite abrir y editar varios archivos al mismo tiempo.
✔ Auto-completado de código con menús contextuales, que aparecen a medida que
vamos escribiendo los programas.
✔ Revisión de sintaxis en vivo, que nos proporciona información sobre los errores que
podemos realizar en la sintaxis de los lenguajes de programación soportados, a
medida que vamos realizando los scripts.
✔ Vista previa de HTML, para poder ver las páginas web que estamos realizando dentro
del propio editor.
✔ Gestión de proyectos, con la posibilidad de navegar por las carpetas de nuestro
sistema.
✔ Posibilidad de conexión con servidores remotos para editar código directamente
sobre el archivo publicado en un servidor, por medio de FTP, SFTP, SSH.
✔ Posibilidad de extender el programa, con diversos complementos o add-ons creados
por terceras personas, como ocurre con el navegador Firefox y sus extensiones.
En la dirección web [Link] podemos
descargar el paquete de instalación de la última versión de Komodo Edit. Una vez
descargado solo hay que hacer doble clic sobre él y seguir los pasos del asistente de
instalación. Cuando finalice, haremos doble clic sobre el icono del escritorio para comenzar
su ejecución.
Página 10
Rafael Lozano HTML y CSS
1.6.3 Navegadores
Debemos utilizar cinco navegadores para probar nuestras páginas web. Si nuestro
sistema es Windows, disponemos de Microsoft Edge, aunque puede que no en su versión
más reciente. Si no es así, se recomienda una actualización.
El resto de navegadores se pueden instalar descargando los paquetes de instalación
en las siguientes direcciones web:
1. Mozilla Firefox.- [Link]
2. Google Chrome.- [Link]
3. Safari.- [Link]
4. Opera.- [Link]
Las instalaciones en sistemas Windows sólo consiste en ejecutar el paquete de
instalación y seguir las instrucciones del asistente de instalación. Generalmente, las opciones
por defecto suelen ser las adecuadas para la instalación correcta de la aplicación. Sin
embargo, en el caso de los navegadores es posible que solicite la importación de historial
de navegación y favoritos/marcadores junto con la asignación de navegador por defecto del
sistema. Queda a elección del usuario la selección de estas opciones.
Página 11
Rafael Lozano Introducción a los Lenguajes de Marcas
encontrar que unos navegadores reconocerán parte del etiquetado mientras que otros no.
Ya hemos mencionado anteriormente que las compañías que han desarrollado y mantienen
los navegadores están implementando poco a poco las nuevas características y
funcionalidad de HTML5, pero hasta el momento de escribir este documento, ninguno de
ellos lo ha hecho por completo. ¿Cómo podemos saber que navegador viene mejor para
nuestro sitio web?
Existe un portal en Internet que nos permite examinar nuestro navegador y asignarle
una nota en función de su capacidad para reconocer las características de HTML5. En
[Link] podemos someter a nuestro navegador a una prueba que permitira
conocer el grado de compatibilidad con HTML5.
<!DOCTYPE html>
<html lang=”es”>
<head>
Página 12
Rafael Lozano HTML y CSS
Ahora guarda ese archivo con extensión .html en tu disco duro. Para ello accedemos
al menú Archivo y seleccionamos la opción Guardar como.
En la ventana elegimos la carpeta donde deseamos guardarlo, en nuestro caso si
queremos que esta página esté disponible a través del servidor web elegiremos C:\
Inetpub\wwwroot. Después, escribimos su nombre, por ejemplo mi_pagina.html. Si
ahora abrimos el navegador y en la barra de dirección escribimos
[Link] deberemos de ver el siguiente resultado.
Página 13
Rafael Lozano Introducción a los Lenguajes de Marcas
2 Sintaxis HTML
El HTML es un lenguaje de marcas que basa su sintaxis en un elemento de base al que
llamamos etiqueta. A través de las etiquetas vamos definiendo los elementos del
documento, como enlaces, párrafos, imágenes, etc. Así pues, un documento HTML estará
constituido por texto y un conjunto de etiquetas para definir la forma con la que se tendrá
que estructurar el texto y otros elementos en la página.
HTML suministra una gran variedad de elementos semánticos que pueden usarse para
marcar varias estructuras tipográficas. Hay elementos de cabecera para marcar varios
niveles de cabecera, un elemento de párrafo para el párrafo, varios elementos de listas para
representar diferentes tipos de listas y elementos de tabla para formar tablas.
Es importante distinguir estructura y semántica de contenido, el cual debería ser
descrito usando HTML, y su presentación. En un documento, una cabecera puede ser
presentada visualmente en una fuente en negrita con un amplio margen superior e inferior
para separarla del contenido subyacente. En otro documento, una cabecera puede ser
presentada en un color claro, en cursiva y una fuente más informal. Pero sin tener en cuenta
la presentación, sigue siendo una cabecera y el marcado puede todavía usar los mismos
elementos básicos para identificar estructuras comunes.
El W3C recomienda seguir la sintaxis HTML, ya que la sugieren la mayoría de los
autores y es compatible con la mayoría de los navegadores.
2.1.1 Elementos
Un elemento representa a cualquier parte de una página web. Un párrafo, una tabla, un
elemento de lista, incluso la página de web entera se representan mediante elementos.
Existen varios tipos de elementos que son:
✔ Elementos vacíos, como br e img.
✔ Elementos <template>.
✔ Elementos de texto sin procesar, como script y style.
✔ Elementos de texto escapado, como textarea title.
✔ Elementos externos que proceden del espacio de nombres MathGL o SVG.
✔ Elementos normales, como p o table.
Para delimitar el principio y el fin de un elemento se emplean las etiquetas. Los
elementos de texto sin procesar, de texto escapado y normales tienen una etiqueta inicio
para indicar donde comienzan y una etiqueta final para indicar donde acaban. En algunos
Página 14
Rafael Lozano HTML y CSS
elementos normales la etiqueta final se puede omitir. Los elementos vacíos solamente tienen
una etiqueta de inicio. El resto de elementos deben tener la etiqueta inicio y final.
El contenido del elemento se coloca entre la etiqueta inicio y la etiqueta final. El
contenido admisible para el elemento dependerá de la definición del elemento. Los
elementos vacíos no tienen contenido, por tanto no tienen etiqueta final.
Las etiquetas tienen un nombre de etiqueta, dado por el nombre del elemento. Las
etiquetas de inicio deben tener el siguiente formato:
✔ Comienzan por el signo menor <
✔ El nombre del elemento.
✔ Los atributos del elemento, si los hubiera.
✔ El signo mayor >
Una etiqueta final tiene el siguiente formato:
✔ Comienzan por el signo menor <
✔ El nombre del elemento.
✔ El signo mayor >
El siguiente ejemplo ilustra el uso de las etiquetas de apertura y cierre en un elemento
normal, en este caso un párrafo de texto.
<br>
2.1.2 Atributos
Los atributos se emplean para definir propiedades de los elementos. Los atributos de
un elemento se ponen dentro de la etiqueta de inicio después del nombre del elemento y
antes de la barra de dividir. Si hay varios se separan por un espacio.
Los atributos modifican el comportamiento básico de los elementos al presentar el
contenido. Algunos son globales y se pueden utilizar en cualquier elemento, otros son solo
Página 15
Rafael Lozano Introducción a los Lenguajes de Marcas
específicos de un elemento.
Todos los atributos tienen un nombre y pueden tener un valor, separados por el signo
=, como en el siguiente ejemplo.
<img src=”[Link]”>
<input disabled>
El atributo disabled no tiene valor, por tanto no va seguido del signo igual y un texto.
Un atributo con un valor sin comillas es aquel cuyo valor incluye cualquier carácter
excepto el espacio en blanco, comillas dobles, comilla simple, signo igual y signo mayor. Por
ejemplo
<div class=example>
Los atributos con valores encerrados entre comillas dobles pueden contener cualquier
carácter excepto las comillas dobles. Por ejemplo
Página 16
Rafael Lozano HTML y CSS
son:
Atributo Descripción
id=”identificador” Asigna un identificador único al elemento HTML.
class=”clase” Asigna una clase de elemento. Este atributo se emplea
para dar formato a los elementos.
style=”propiedades_CSS Atributo para asignar código CSS a un elemento y darle
” formato.
title=”Texto” Fragmento de texto que se asigna al elemento y que
aparece en forma de tooltip cuando se sitúa el ratón
encima.
2.1.4 Comentarios
Podemos incluir texto dentro de un documento web que no se verá en la pantalla del
navegador. Este texto suelen ser notas aclaratorias para el propio desarrollador de la página
web. Cualquier texto encerrado entre <!-- y --> será ignorado por el navegador y no se
presentará en pantalla. Por ejemplo
<!DOCTYPE html>
<html lang=”es”>
<head>
<meta charset=”utf-8”/>
<title>Desarrollo web estático</title>
</head>
<body>
<h1>Bienvenido</h1>
<p>Esta es mi primera página web.</p>
</body>
</html>
Página 17
Rafael Lozano Introducción a los Lenguajes de Marcas
<!DOCTYPE html>
<html lang=”es”>
<meta charset=”utf-8”/>
Página 18
Rafael Lozano HTML y CSS
Podemos además incluir un elemento meta para indicar información útil para los
buscadores.
Página 19
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 20
Rafael Lozano HTML y CSS
usualmente se ubica el logo, título, subtítulos y una corta descripción del sitio web o la
página.
Inmediatamente debajo, podemos ver la Barra de Navegación en la cual casi todos los
desarrolladores ofrecen un menú o lista de enlaces con el propósito de facilitar la
navegación a través del sitio. Los usuarios son guiados desde esta barra hacia las diferentes
páginas o documentos, normalmente pertenecientes al mismo sitio web.
El contenido más relevante de una página web se encuentra, en casi todo diseño,
ubicado en su centro. Esta sección presenta información y enlaces valiosos. La mayoría de
las veces es dividida en varias filas y columnas. En el ejemplo de la figura se utilizaron solo
dos columnas: Información Principal y Barra Lateral, pero esta sección es extremadamente
flexible y normalmente diseñadores la adaptan acorde a sus necesidades insertando más
columnas, dividiendo cada columna entre bloques más pequeños o generando diferentes
distribuciones y combinaciones. El contenido presentado en esta parte del diseño es
usualmente de alta prioridad. En el diseño de ejemplo, Información Principal podría contener
una lista de artículos, descripción de productos, entradas de un blog o cualquier otra
información importante, y la Barra Lateral podría mostrar una lista de enlaces apuntando
hacia cada uno se esos ítems. En un blog, por ejemplo, esta última columna ofrecerá una
lista de enlaces apuntando a cada entrada del blog, información acerca del autor, etc...
En la base de un diseño web clásico siempre nos encontramos con una barra más que
aquí llamamos Institucional. La nombramos de esta manera porque esta es el área en donde
normalmente se muestra información acerca del sitio web, el autor o la empresa, además de
algunos enlaces con respecto a reglas, términos y condiciones y toda información adicional
que el desarrollador considere importante compartir. La barra Institucional es un
complemento de la Cabecera y es parte de lo que se considera estos días la estructura
esencial de una página web, como podemos apreciar en el siguiente ejemplo.
Página 21
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 22
Rafael Lozano HTML y CSS
HTML5 ha incluido una serie de elementos para representar zonas concretas de una
página web y que responde a un diseño muy habitual hoy en día en la mayoría de los sitios
web. Estos elementos son header, section, aside, nav, footer, article.
<!DOCTYPE html>
<html lang=”es”>
<head>
<meta charset=”utf-8”/>
Página 23
Rafael Lozano Introducción a los Lenguajes de Marcas
<!DOCTYPE html>
<html lang=”es”>
<head>
<meta charset=”utf-8”/>
<title>Desarrollo web estático</title>
</head>
<body>
<header>
<img src=”[Link]”/>
<h1>Desarrollo web estático con HTML y CSS</h1>
</header>
<nav>
<a href=”[Link]”>Inicio</a>
<a href=”lenguaje_html.html”>HTML</a>
<a href=”lenguaje_css.html”>CSS</a>
</nav>
</body>
</html>
Página 24
Rafael Lozano HTML y CSS
propósito de estas columnas es más general, el elemento en HTML5 que especifica estas
secciones se llama simplemente section.
Sigamos ampliando nuestro ejemplo con una sección.
<!DOCTYPE html>
<html lang=”es”>
<head>
<meta charset=”utf-8”/>
<title>Desarrollo web estático</title>
</head>
<body>
<header>
<img src=”[Link]”/>
<h1>Desarrollo web estático con HTML y CSS</h1>
</header>
<nav>
<a href=”[Link]”>Inicio</a>
<a href=”lenguaje_html.html”>HTML</a>
<a href=”lenguaje_css.html”>CSS</a>
</nav>
<section>
<h2>Desarrollo web estático</h2>
<p>
Bienvenidos al portal de ayuda al desarrollo web
estático...
</p>
</section>
</body>
</html>
En el ejemplo anterior hemos incluido una sección a la sección principal del documento
web.
<html lang=”es”>
<head>
Página 25
Rafael Lozano Introducción a los Lenguajes de Marcas
<meta charset=”utf-8”/>
<title>Desarrollo web estático</title>
</head>
<body>
<header>
<img src=”[Link]”/>
<h1>Desarrollo web estático con HTML y CSS</h1>
</header>
<nav>
<a href=”[Link]”>Inicio</a>
<a href=”lenguaje_html.html”>HTML</a>
<a href=”lenguaje_css.html”>CSS</a>
</nav>
<section>
<h2>Desarrollo web estático</h2>
<p>
Bienvenidos al portal de ayuda al desarrollo web
estático...
</p>
</section>
<aside>
<h2>Novedades</h2>
<p>
10 de Agosto – Se ha incluido un artículo sobre los
gradientes en las imágenes de fondo
</p>
<p>
12 de Agosto – Se incluye un zip con miles de iconos en
formato png.
</p>
...
</aside>
</body>
</html>
Página 26
Rafael Lozano HTML y CSS
nuestro diseño para otorgarle un final al cuerpo del documento. HTML5 provee un elemento
específico para este propósito llamado footer.
<!DOCTYPE html>
<html lang=”es”>
<head>
<meta charset=”utf-8”/>
<title>Desarrollo web estático</title>
</head>
<body>
<header>
<img src=”[Link]”/>
<h1>Desarrollo web estático con HTML y CSS</h1>
</header>
<nav>
<a href=”[Link]”>Inicio</a>
<a href=”lenguaje_html.html”>HTML</a>
<a href=”lenguaje_css.html”>CSS</a>
</nav>
<section>
<h2>Desarrollo web estático</h2>
<p>
Bienvenidos al portal de ayuda al desarrollo web
estático...
</p>
</section>
<aside>
<h2>Novedades</h2>
<p>
10 de Agosto – Se ha incluido un artículo sobre los
gradientes en las imágenes de fondo
</p>
<p>
12 de Agosto – Se incluye un zip con miles de iconos en
formato png.
</p>
...
</aside>
<footer>
<p>
Desarrollo web estático se distribuye bajo licencia
Creative Commons Atribución-NoComercial-CompartirIgual 3.0
Unported
</p>
</footer>
</body>
</html>
En el típico diseño de una página web la sección llamada Institucional será definida por
etiquetas footer. Esto es debido a que la barra representa el pie del documento y esta
parte de la página web es normalmente usada para compartir información general sobre el
autor o la organización detrás del proyecto.
Generalmente, el elemento footer representará el final del cuerpo de nuestro
Página 27
Rafael Lozano Introducción a los Lenguajes de Marcas
documento y tendrá el propósito descripto anteriormente. Sin embargo, footer puede ser
usado múltiples veces dentro del cuerpo para representar también el final de diferentes
secciones.
Como podemos ver, los nuevos elementos de diseño HTML5 no tienen un formato
predefinido. El resultado anterior no se parece a la distribución de las diferentes partes.
Vemos que la barra lateral está debajo de la información principal. En realidad los elementos
han seguido el flujo normal HTML, donde ya sabemos que tienen un posicionamiento por
defecto estático y, por tanto, aparecen en la pantalla del navegador uno detrás de otro en el
mismo orden en que aparecen en el código HTML.
Nos corresponde entonces a nosotros dar formato a nuestro diseño para colocar cada
elemento de la estructura en su lugar.
4 Elementos textuales
Tras haber visto la estructura básica de un documento HTML, pasamos ahora a ver la
parte que hace referencia a lo que es el cuerpo del documento, donde irá incluido todo el
contenido a visualizar en la pantalla del navegador. Todos los elementos que vamos a ver a
continuación deben introducirse dentro del elemento body o de lo contrario no se verán.
En los documentos HTML, hay una peculiaridad con respecto a los editores de texto,
Debemos de indicar con elementos cualquier componente de la página: párrafos, saltos de
línea, títulos, etc. Podemos escribir texto dentro del cuerpo del documento, sin elementos,
Página 28
Rafael Lozano HTML y CSS
pero el texto rellenaría la ventana del navegador y al no estar en ningún elemento, resultaría
muy difícil darle formato. Así que se recomienda que todo el texto del documento esté
dentro de un elemento.
4.1 Párrafos
En HTML, los párrafos se representan por el elemento p. Un párrafo es un bloque de
texto que está separado de otros bloques de texto adyacentes por medio de una línea en
blanco. Por ejemplo
<p>
En este ejemplo se muestra como pese a que no nos importe el
poder ver los retornos de carro en distintas posiciones, el
elemento de párrafo, lo que hace es que cuando finaliza el ancho
de pantalla de que dispone, realiza un retorno de carro y
continúa con el texto en la siguiente línea.
</p>
<p>
Si reducimos el ancho de la pantalla del visualizador veremos
como el elemento de párrafo se adapta a este ancho, dando un
formato distinto al texto.
</p>
El elemento de párrafo no debería ser usado para texto que dispone de elementos
más adecuados acorde su naturaleza.
<p>
Esto es un texto
que muestra como los
retornos de carro que pongo
no se respetan en el
navegador
</p>
Veremos que todo el texto sale seguido y solamente hará salto de línea cuando llegue
al extremo derecho de la pantalla.
Página 29
Rafael Lozano Introducción a los Lenguajes de Marcas
Esto es porque HTML solamente reconoce un espacio en blanco para separar una
palabra de la siguiente. Ignora en el archivo los saltos del línea, espacios en blanco
adicionales, tabuladores, etc
Sin embargo, disponemos del elemento vacío br para introducir un salto de línea
donde más nos convenga. Si modificamos el párrafo anterior y añadimos elementos br
tendremos lo siguiente.
<p>
Esto es un texto<br>
que muestra como los<br>
retornos de carro que pongo<br>
no se respetan en el<br>
navegador
</p>
Allí donde haya un elemento br, se introducirá un salto de línea. No conviene utilizar
elementos br para separar bloques de texto o para añadir más espacio entre párrafos.
<pre>
LUNES | MARTES | MIERCOLES | JUEVES | VIERNES
---------------------------------------------
100 | 200 | 200 | 150 | 500
---------------------------------------------
</pre>
Página 30
Rafael Lozano HTML y CSS
4.4 Encabezados
Para poner un título se emplea un elemento de encabezado. Disponemos de seis
elementos de encabezados h1, h2, h3, h4, h5 y h6 en orden de tamaño., es decir h1 es el
encabezado de nivel 1, h2 de nivel 2, etc.
El bloque de texto dentro de un elemento de encabezado aparecerá por defecto en
negrita y con un tamaño mayor que el texto normal. Además, habrá saltos de línea implícitos
antes y después del elemento.
Si introducimos el siguiente ejemplo en un archivo HTML.
Página 31
Rafael Lozano Introducción a los Lenguajes de Marcas
Para construir este tipo de cabeceras, donde una sección tiene más de un elemento de
encabezado, estos elementos deben ser agrupados utilizando un elemento hgroup. Así,
podemos aprovechar el resto de los elementos de encabezado, pero siempre considerando
que por propósitos de procesamiento interno, y para evitar generar múltiples secciones
durante la interpretación del documento por parte del navegador. Por esta razón, HTML5
provee el elemento hgroup. Veamos el siguiente ejemplo
<hgroup>
<h1>Introducción a la Informática</h1>
<h2>Concepto de información</h2>
</hgroup>
Vemos que hay dos elementos de encabezado juntos. Por tanto se agrupan con un
elemento hgroup.
4.5 Separadores
El elemento vacío hr se emplea para añadir una línea horizontal que delimita dos
partes del documento de forma gráfica. Este elemento dispone de algunos atributos
interesantes.
size=“valor numérico” Permite indicar el grosor de la línea en cuestión.
width=“valor numérico” Permite indicar la anchura en pixeles o el tanto por
ciento del ancho de la pantalla que ocupará la línea.
align=“left|center|right” Determina la forma de alinear la barra en la pantalla
del navegador (sus valores respectivos son izquierda, derecha y centro). Por defecto el valor,
es alineado a la izquierda.
noshade Elimina, en caso de poner este atributo, el efecto tridimensional de la barra,
eliminando la sombra que proyecta sobre el documento.
<hgroup>
<h1>Introducción a la Informática</h1>
<h2>Concepto de información</h2>
</hgroup>
Página 32
Rafael Lozano HTML y CSS
Vemos que los encabezados de nivel 1 y 2 aparecen separados por un salto de línea,
aunque ambos podrían perfectamente estar uno detrás de otro en la misma línea. Esto es así
porque los elementos de cabecera h1 y h2 son elementos de bloque, forman un bloque y
por tanto tienen un salto de línea antes y después del elemento.
Sin embargo hay otros elementos que se emplean para introducir texto que son
elementos en línea. Esto significa que su distribución por la ventana del navegador será de
izquierda a derecha en el orden en que aparezcan en el archivo HTML. No tendrán un salto
de línea anterior y posterior como los elementos de bloque. Aunque existen muchos, nos
limitaremos a ver los más habituales.
4.6.3 Acrónimos
Un acrónimo o abreviatura son las iniciales de un término compuesto de varias
Página 33
Rafael Lozano Introducción a los Lenguajes de Marcas
palabras. En ocasiones, resulta más cómodo incluir en el documento web el acrónimo y que
la definición completa del término aparezca como mensaje emergente. Esto se consigue con
el elemento abbr. Veamos el siguiente ejemplo.
Como podemos observar, los acrónimos WWW y CERN aparecen en elementos abbr.
La definición del acrónimo tiene que introducirse en un atributo title. En el navegador
veremos el siguiente resultado
Página 34
Rafael Lozano HTML y CSS
Página 35
Rafael Lozano Introducción a los Lenguajes de Marcas
Estos códigos corresponden al valor Unicode del carácter. Podemos encontrar una
referencia de todos los caracteres nombrados en
[Link]
5 Introducción a CSS
En HTML se unen etiquetas para contenidos, estructuras y formato en un único
documento. Sin embargo, a principios de la década de los noventa, HTML no poseía todas
las capacidades que posee en la actualidad y muchos desarrolladores se quejaban de lo
poco que podían controlar el aspecto de sus documentos y lo complejo que resultaba el
archivo HTML al estar mezclados contenidos, estructuras y formato. Por eso, el W3C decidió
crear un sistema mediante el cual las instrucciones de formato se encontraran separadas de
los otros elementos. Nacieron así la versión HTML 4, donde están desaconsejados los
elementos de formato, y CSS (Cascading Style Sheets, Hojas de estilo en cascada), un
lenguaje para dotar de formato a los elementos HTML.
Aunque el uso de CSS parecía al principio un poco tedioso, rápidamente se descubrió
su gran utilidad. Con él se obtenía la ventaja de poder aplicar mediante una instrucción un
determinado formato a todo un sitio web en vez de a un solo elemento (párrafo, imagen,
tabla, etc.). Es decir, si se tenía que mantener un portal entero y se decidía cambiar algún
aspecto de su apariencia, bastaba cambiar unas pocas líneas de código para modificar el
estilo de numerosos elementos sin mayor esfuerzo. Sin duda, esto era mucho mejor que
adentrarse en los vericuetos del archivo HTML e ir cambiando uno a uno el aspecto de los
elementos. CSS permitía, en definitiva, que los sitios web tuvieran un aspecto homogéneo
sin necesidad de horas y horas de trabajo.
Además, CSS ha ido evolucionando con el tiempo y actualmente ofrece muchas mas
posibilidades que las etiquetas y extensiones de HTML jamás tuvieron. Con CSS se pueden
cambiar el tamaño, grosor, inclinación, altura de línea, colores de fondo y primer plano,
espaciado y alineamiento del texto, decidir si debería estar en subrayado, tachado o
parpadeante, convertirlo en mayúsculas, o minúsculas, etcétera.
Finalmente, otro antecedente que ha hecho necesario el desarrollo de esta tecnología
consiste en que las páginas web tienen mezclado en su código HTML el contenido del
documento con las etiquetas necesarias para darle forma. Esto tiene sus inconvenientes ya
que la lectura del código HTML se hece pesada y difícil a la hora de buscar errores o
depurar las páginas. Aunque, desde el punto de vista de la riqueza de la información y la
utilidad de las páginas a la hora de almacenar su contenido, es un gran problema que estos
textos estén mezclados con etiquetas incrustadas para dar forma a estos: se degrada su
utilidad.
Página 36
Rafael Lozano HTML y CSS
Es posible usar HTML, o incluso abusar del mismo, para añadir formato a los sitios web.
Sin embargo, CSS ofrece más opciones y es más preciso y sofisticado. CSS está soportado
por todos los navegadores hoy día.
Página 37
Rafael Lozano Introducción a los Lenguajes de Marcas
✔ Un sitio web entero, de modo que se puede definir la forma de todo el sitio web de
una sola vez.
✔ Un documento HTML o página, se puede definir la forma, en un pequeño trozo de
código en la cabecera, a toda la página.
✔ Una porción del documento, aplicando estilos visibles en un fragmento de la página
web.
✔ Un elemento concreto, llegando incluso a poder definir varios estilos diferentes para
un solo elemento. Esto es muy importante ya que ofrece potencia en nuestra
programación. Podemos definir, por ejemplo, varios tipos de párrafos: en rojo, en azul,
con margenes, sin ellos...
La potencia de la tecnología salta a la vista. Pero no solo se queda aquí, ya que
además esta sintaxis CSS permite aplicar al documento formato de modo mucho más
exacto. Si antes el HTML se nos quedaba corto para maquetar las páginas y teníamos que
utilizar trucos para conseguir nuestros efectos, ahora tenemos muchas más herramientas
que nos permiten definir esta forma:
✔ Podemos definir la distancia entre líneas del documento.
✔ Se puede aplicar identado a las primeras líneas del párrafo.
✔ Podemos colocar elementos en la página con mayor precisión, y sin lugar a errores.
✔ Y mucho más, como definir la visibilidad de los elementos, margenes, subrayados,
tachados...
Además, con el HTML tan sólo podíamos definir atributos en las páginas con pixeles y
porcentajes, ahora podemos definir utilizando muchas más unidades como:
✔ Pixels (px) y porcentaje (%), como antes.
✔ Pulgadas (in)
✔ Puntos (pt)
✔ Centímetros (cm)
Página 38
Rafael Lozano HTML y CSS
El código que compone la hoja de estilo está formado por una o más reglas de estilo.
Éstas son las declaraciones de los formatos que adoptarán los elementos de la página o sitio
web a la que está destinada la hoja de estilo. Mediante la regla de estilo se identifica el
elemento HTML que se desea seleccionar y la apariencia que se le quiere dar (por ejemplo,
que todas las fotos lleven un marco de color rojo).
Si tenemos una página web y se desea dotarla de estilo mediante CSS, ¿cómo debería
indicarse? Existen cuatro métodos:
✔ En línea
✔ Mediante ámbito
✔ Con hojas de estilo internas
✔ Con hojas de estilo externas
Las dos últimas son las preferidas. Vamos a verlas en detalla
<p style="color:green;">Hola</p>
<hgroup>
<style scoped>
h1 {
font-family: Arial;
color: blue;
font-size: 18pt;
border-bottom: 2px outset gray;
}
h2 {
font-family: Arial;
color:red;
font-size: 14pt;
font-weight: normal;
}
Página 39
Rafael Lozano Introducción a los Lenguajes de Marcas
</style>
<h1>Introducción a la Informática</h1>
<h2>Concepto de información</h2>
</hgroup>
En el ejemplo anterior vemos un elemento hgroup dentro del cual hay un elemento
style con el atributo vacío scoped. El elemento style sirve para definir las reglas de
formato, en este ejemplo se han definido dos reglas para los elementos h1 y h2. Pues bien,
el formato definido en estas reglas se aplicarán a todos los elementos h1 y h2 que haya
dentro de hgroup.
En este ejemplo hemos definido que los elementos h1 aparecan con fuente Arial
tamaño 18 puntos, color azul y con un borde inferior resaltado de 2 píxeles. Los elementos
h2 apareceran con fuente Arial tamaño 14 puntos, color rojo y texto no negrita. El resultado
sería el siguiente
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8"/>
<title>Desarrollo web estático</title>
<style type="text/css">
body {
font-family: Arial;
font-size: 12pt;
}
</style>
</head>
<body>
…
</body>
</html>
Página 40
Rafael Lozano HTML y CSS
El atributo href indica la URL del archivo css de donde se tomará el formato a aplicar.
En el siguiente ejemplo, se puede observar el código de una página HTML y vinculada
a una hoja de estilo externa (estilo. css). Dado que sólo se halla el nombre de la hoja
pero no su URL, se puede deducir que la hoja de estilo y la página HTML se encuentran en
la misma carpeta.
<!DOCTYPE html>
<html lang="es">
<head>
<title>Ejemplo</title>
<link rel="stylesheet" href="[Link]" >
</head>
<body>
Contenido de la página
</body>
<html>
Veamos ahora otra manera de importar una declaración externa de estilos CSS:
@import url("archivo_a_importar.css"), que se utiliza para importar unas
declaraciones de estilos guardadas en la URL que se indica entre paréntesis.
Se debe incluir en la declaración de estilos global a una página, es decir en el
elemento style que se colocan en la cabecera del documento.
Es importante señalar que la sentencia de importación del archivo CSS se debe escribir
en la primera línea de la declaración de estilos, algo parecido al código siguiente.
<style type="text/css">
@import url ("[Link]");
body{
background-color: Lightblue;
}
</style>
Página 41
Rafael Lozano Introducción a los Lenguajes de Marcas
de las etiquetas de los estilos, con la salvedad de que, si redefinimos dentro del elemento
style estilos que están ya definidos en el archivo externo, los que se aplicarán serán los
que hayamos redefinido.
Así, en el ejemplo anterior, aunque hubiésemos definido en [Link] un color de
fondo para la página, el color que prevalecería sería el definido a continuación de la
importación, azul claro. La diferencia entre este tipo de importación del tipo y la que hemos
visto anteriormente es que @import url ("[Link]") se suele utilizar cuando hay
unas pautas básicas en el trabajo con los estilos (que se definen en un archivo a importar) y
unos estilos específicos para cada página, que se definen a continuación, dentro del
elemento style , como es el caso del ejemplo visto anteriormente.
En el caso de declararse más de una propiedad/valor, éstas deben estar separadas por
punto y coma, como por ejemplo:
selector {
propiedad1: valor1;
propiedad2: valor2;
...
}
En el caso de que sólo se quiera realizar una declaración con una propiedad/valor, no
es obligatorio insertar al final el punto y coma, aunque se suele hacer. La siguiente imagen
define las parte de la regla con un ejemplo.
Página 42
Rafael Lozano HTML y CSS
7.1 El selector
El primero y más importante de los elementos que componen una regla de estilo es el
selector. Sin él, el navegador web no sabría a qué elementos debe aplicarle el formato que a
continuación viene definido entre llaves. Es decir, el selector determina los elementos sobre
los que se aplica una regla de estilo. Por ejemplo, si se quieren formatear los elementos de
párrafo con el color rojo, se tiene que crear un selector que identifique a dichos elementos:
p {color: red;}
Esto provocaría que todos los elementos p de la página afectada por la regla de estilo,
adquiriesen el color rojo.
Puede ocurrir sin embargo, que sólo se desee dar un estilo determinado a unos
cuantos elementos p y no a todos. En este caso, se deben usar unos selectores más
complicados que especifiquen o seleccionen qué elementos serán formateados.
Página 43
Rafael Lozano Introducción a los Lenguajes de Marcas
el color de primer plano y de fondo disponen de varias formas para especificar este color.
Vamos a ver en detalle estos dos tipos de valores.
Unidad Descripción
% Porcentaje. Hace referencia a un tanto por ciento.
in Pulgada.
cm Centimétros.
mm Milímetros.
em Un valor 1em es igual al tamaño actual de la fuente del elemento. 2em significa
el doble del tamaño actual de fuente. Por ejemplo, si un elemento es visualizado
con una fuente de 12 puntos, entonces 2em es 24 puntos. El valor em es una
unidad muy útil en CSS, ya que puede adaptarse automáticamente a la fuente
que el lector usa.
ex Un ex es relativa a la altura de la letra x.
pt Punto. Un punto es 1/72 de pulgada.
pc Pica. Una pica son 12 puntos.
px Pixel. Un píxel es un punto de la pantalla.
7.2.2 Valores de color
Para especificar un color también disponemos de varios métodos lo suficientemente
flexibles como para poder representar cualquier color. Un color se puede especificar de
cinco formas:
La primera es mediante una palabra, la cual se corresponde con el nombre de cada
color en inglés. La siguiente imagen muestra 16 colores básicos
Página 44
Rafael Lozano HTML y CSS
Esto es una lista básica, existen más colores que pueden especificarse mediante una
palabra. Una tabla con todos estos colores puede verse en
[Link] Por ejemplo, la siguiente regla establece el
color de fondo de un párrafo al valor teal.
p {
background-color: teal;
}
Otra forma de indicar un color es mediante la función rgb. Esta función consiste en
definir un color indicando la cantidad de color rojo, verde y azul que se debe mezclar para
obtener ese color. Cada componente de color se debe indicar mediante un ńumero entre 0
y 255. Por ejemplo
p {
background-color: rgb(128, 128, 128);
}
p {
background-color: rgb(0, 255, 0);
}
En este caso tenemos que el segundo componente (verde) es 255 y el resto es 0, por
tanto el color resultado será verde. El siguiente ejemplo establecería un color azul.
p {
background-color: rgb(0, 0, 255);
}
Página 45
Rafael Lozano Introducción a los Lenguajes de Marcas
p {
background-color: rgb(0, 0, 100%);
}
p {
background-color: #FFB18C;
}
p {
background-color: #FFC;
}
Este método se emplea cuando los dos dígitos de cada componente de color son
iguales. El ejemplo anterior equivale al siguiente empleando seis dígitos, dos por
componente de color
p {
background-color: #FFFFCC;
}
La siguiente forma de indicar el color es empleando los colores del sistema, que
consiste en utilizar los colores actuales del sistema operativo. El color se indica mediante
una palabra clave que hace referencia a algún elemento del sistema operativo. Por ejemplo,
ActiveBorder es el color del borde de la ventana activa. En
[Link] se puede encontrar una lista completa de
estos colores.
Página 46
Rafael Lozano HTML y CSS
El siguiente ejemplo define una regla para ver el cuerpo de la página web con el color
de fondo de la ventana y el color en primer plano de la ventana.
p {
background-color: Window;
color: WindowText;
}
Finalmente, disponemos de los colores web safe que es una paleta de 216 colores y
que hacen referencia a los colores que un desarrollador web podía utilizar y tener seguridad
de que la pantalla lo mostraría indendientemente del navegador y sistema operativo
utilizado. Esta paleta surgio en los 90, cuando muchos monitores no eran capaces de
mostrar más de 256 colores. La lista completa de colores se puede ver en
[Link]
7.2.3 URL's
Algunas propiedades necesitan un valor que es un recurso en la web. Por ejemplo, si
queremos colocar una imagen de fondo debemos indicar esta imagen mediante una URL ya
que en un documento web se puede utilizar cualquier recurso que está publicado en
Internet.
Para indicar una URL hay que usar la función url con la siguiente sintaxis.
url(“URL”);
Como podemos ver recibe un argumento o parámetro que consiste en la URL del
recurso que pretendemos cargar. Esta URL sigue el formato que se vio en un capítulo
anterior. Su formato sería así
protocolo://nombre_servidor_web/ruta_carpetas/recurso_web
Página 47
Rafael Lozano Introducción a los Lenguajes de Marcas
url(“[Link]
imagen_fondo.jpg”)
Como podemos observar hemos formado esta URL con todos sus componentes. Sin
embargo, [Link] e imagen_fondo.jpg están en el mismo servidor, con lo
que podríamos haber puesto la siguiente URL relativa.
url(“imagen_fondo.jpg”)
url(“imagenes/imagen_fondo.jpg”)
url(“./imagenes/imagen_fondo.jpg”)
En este caso el primer punto hace referencia a la carpeta actual, donde está el
[Link] que invoca esta URL, dentro de la cual está la carpeta imagenes y,
finalmente, dentro de ésta el archivo imagen_fondo.jpg.
Supongamos ahora que la carpeta imágenes está en C:\inetpub\wwwroot\
recursos que es la carpeta anterior a publico, donde se encuentra [Link].
Si dentro de éste hacemos referencia al recurso imagen_fondo.jpg con una URL relativa
habría que indicarlo así
Página 48
Rafael Lozano HTML y CSS
url(“../imagenes/imagen_fondo.jpg”)
Los dos puntos indican ahora que hay que subir a la carpeta padre (recursos) de la
actual (publico) y dentro de esta ir a la carpeta imagenes para cargar el archivo
imagen_fondo.jpg.
Generalmente, el uso de . y .. suele ser al principio de la URL relativa. El primero se
podría omitir, pero también habría que omitir la / que lo separa de la siguiente carpeta.
7.3 Herencia
Hay propiedades CSS que afectan a los elementos definidos por el selector y también
a los descendientes de esos elementos. Es decir, La propiedad es heredada por los
descendientes. En este caso, los elementos que heredan estas propiedades se ven
afectados por ellos de manera implícita. Por ejemplo
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="utf-8"/>
<title>Desarrollo web estático</title>
<style type="text/css">
body {
font-family: Arial;
font-size: 12pt;
color: blue;
}
h1 {
font-size: 18pt;
}
p {
color: gray;
}
</style>
</head>
<body>
<h1>Introducción a CSS</h1>
<p>
CSS es un lenguaje de formateado de documentos web.
</p>
</body>
</html>
Primero tenemos una regla para el cuerpo del documento que establece la fuente en
Arial, tamaño 12 y color azul. Estas propiedades se heredan para cualquier elemento dentro
de body. La herencia se puede anular simplemente especificando un valor para la propiedad
heredada.
En el ejemplo anterior, el elemento p tiene el color de texto gris, el cual anula el color
azul que se heredó del body. Sin embargo, en el elemento p no ha definido la propiedad
font-family, por tanto, hereda la que se definió en body. Por tanto los párrafos de este
Página 49
Rafael Lozano Introducción a los Lenguajes de Marcas
Entre esos caracteres se pueden introducir retornos de carro y todo aquello que se
considere oportuno excepto los caracteres */ ya que lo que viniese después sería
considerado como código CSS, provocando errores.
Otra práctica muy común y recomendable es la de comentar reglas de código que se
quieren eliminar. Cuando no se quiere utilizar una regla de estilo pero se desea conservarla
por si se decide usarla más adelante, se pueden poner comentarios en torno a ella. Así no
será tenida en cuenta por encontrarse dentro del comentario, pero se podrá volver a «poner
en funcionamiento» fácilmente eliminando los caracteres de comentarios. Por ejemplo:
Página 50
Rafael Lozano HTML y CSS
webs, pero los desarrolladores aun continúan usando trucos diversos para conseguir efectos
tan comunes o tan deseados como los bordes redondeados o el sombreado de elementos
en la página.
La versión 1 de CSS ya significó un avance considerable a la hora de diseñar páginas
web, aportando mucho mayor control de los elementos de la página. Pero como todavía
quedaron muchas otras cosas que los diseñadores deseaban hacer, pero que CSS no
permitía especificar, éstos debían hacer uso de trucos para el diseño. Lo peor de esos trucos
es que muchas veces implica alterar el contenido de la página para incorporar nuevas
etiquetas HTML que permitan aplicar estilos de una manera más elaborada. Dada la
necesidad de cambiar el contenido, para alterar al diseño y hacer cosas que CSS no
permitía, se estaba dando al traste con alguno de los objetivos para los que CSS fue creado,
que era el separar por completo el contenido de la forma.
CSS 2 incorporó algunas novedades interesantes, que hoy ya utilizamos habitualmente,
pero CSS 3 todavía avanza un poco más en la dirección, de aportar más control sobre los
elementos de la página.
Así pues, la novedad más importante que aporta CSS 3, de cara a los desarrolladores
de webs, consiste en la incorporación de nuevos mecanismos para mantener un mayor
control sobre el estilo con el que se muestran los elementos de las páginas, sin tener que
recurrir a trucos o hacks, que a menudo complicaban el código de las web.
Sin embargo hay un pequeño problema y es que no todas las propiedades CSS3 son
reconocibles por todos los navegadores. Las compañias que desarrollan navegadores están
incorporando poco a poco las propiedades de la versión 3, y es posible que para algunas de
ellas en lugar de usar el nombre especificado en el estándar del W3C, haya que añadir un
prefijo a éste para que sea reconocible. Este prefijo es diferente y hace referencia al
navegador. Estos son:
Página 51
Rafael Lozano Introducción a los Lenguajes de Marcas
h1 {
color: #880000;
}
body {
background-color: #FFCC66;
}
Página 52
Rafael Lozano HTML y CSS
h1 {
color: #990000;
background-color: #FC9804;
}
body {
background-color: #FFCC66;
background-image: url("[Link]");
}
H1 {
color: #990000;
background-color: #FC9804;
}
Página 53
Rafael Lozano Introducción a los Lenguajes de Marcas
body {
background-color: #FFCC66;
background-image: url("[Link]");
background-repeat: no-repeat;
}
Vemos que también hemos puesto un color de fondo. Si la imagen de fondo no cubre
toda la pantalla, el resto se verá con el color de fondo.
La propiedad background-attachment especifica si una imagen está fija o se
desplaza con el elemento contenedor. Una imagen de fondo fija no se moverá con el texto
cuando el lector se desplace por la página, mientras que una imagen de fondo no fija se
desplazará con el texto de la página web.
La tabla siguiente resume los dos valores posibles para la propiedad background-
attachment.
Valor Descripción
scroll La imagen se desplaza con la página, no está fija
fixed La imagen está fija
Por ejemplo, el siguiente código fijará la imagen de fondo.
body {
background-color: #FFCC66;
background-image: url("[Link]");
background-repeat: no-repeat;
background-attachment: fixed;
}
Por defecto, una imagen de fondo que no se repite se posiciona en la esquina superior
izquierda de la pantalla. La propiedad background-position te permitirá cambiar este
valor por defecto y posicionar la imagen de fondo en cualquier lugar de la pantalla que
quieras.
Hay muchas formas diferentes de establecer los valores de la propiedad
background-position. Sin embargo, todas ellas se formatean como un conjunto de
coordenadas. Por ejemplo, el valor 100px 200px posiciona la imagen de fondo a 100
píxeles del margen izquierdo y a 200 píxeles del margen superior del la ventana del
navegador.
Las coordenadas se pueden indicar como porcentajes del ancho de la pantalla, como
unidades fijas (píxeles, centímetros, etc.) o puedes usar las palabras top (superior), bottom
(inferior), center (centro), left (izquierda) y right (derecha). El modelo siguiente ilustra
cómo funciona el sistema:
Página 54
Rafael Lozano HTML y CSS
body {
background-color: #FFCC66;
background-image: url("[Link]");
background-repeat: no-repeat;
background-attachment: fixed;
background-position: right bottom;
}
body {
background-color: #FFCC66;
background-image: url("[Link]");
background-repeat: no-repeat;
background-attachment: fixed;
background-position: right bottom;
background-size: 80px 60px;
}
Página 55
Rafael Lozano Introducción a los Lenguajes de Marcas
Entonces, la imagen de fondo cubrirá toda la página web, al estar la regla definida para
el elemento body. Si estuviera en otro contexto, entonces cubriría toda la superficie el
elemento en cuestión. Establecer esta propiedad puede suponer deformar la imagen.
Existen una propiedad que indica desde que punto la imagen de fondo comienza a
cubrir el elemento. Esta propiedad es background-origin. Una imagen de fondo puede
comenzar en el borde (border-box), en el relleno (padding-box) o en el contenido
(content-box). La siguiente imagen ilustra este concepto.
En un capítulo posterior se verá en detalla el modelo de caja, sin el cuál puede resultar
difícil entender esta propiedad.
Similar a la anterior tenemos la propiedad background-clip, pero en este caso se
aplica al color de fondo. Tiene los mismos valores que background-origin y con el
mismo significado.
background-color: #FFCC66;
background-image: url("[Link]");
background-repeat: no-repeat;
background-attachment: fixed;
background-position: right bottom;
Usando background se puede lograr el mismo resultado con una única línea de
código:
Página 56
Rafael Lozano HTML y CSS
Estas dos propiedades que no se especifican se establecerían, sin más, con sus
valores por defecto, que, como ya sabes, son scroll y top left.
<punto> || <angulo>
El origen desde donde comenzará el degradado y/o el ángulo de disposición del gradiente de
color. Podemos decir que el degradado comience desde arriba, abajo o desde una esquina
cualquiera. Por defecto los degradados serán distribuidos en un gradiente en línea recta, pero
además podemos indicar un ángulo distinto con el que se vaya produciendo el gradiente de
color.
Página 57
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 58
Rafael Lozano HTML y CSS
<posicion> || <ángulo>
Los degradados radiales comienzan en un punto cualquiera del fondo de un elemento y se
extienden hacia fuera de ese punto con formas circulares o de elipse. Luego, para definirlos,
necesitaremos una forma de especificar dicho punto de inicio del degradado. El punto se
especifica con una o dos coordenadas, que pueden tener distintas unidades CSS. Si se omite,
se entiende que el degradado tiene que comenzar en el punto central del fondo del
elemento.
<forma>
La forma puede ser circular o elipse, para lo cual especificamos las palabras "circle" o
"ellipse".
<tamaño>
El tamaño lo expresamos con otra serie de palabras clave, que indican hasta donde debe
crecer el círculo o elipse: closest-side | closest-corner | farthest-side | farthest-corner | contain
| cover. Por ejemplo, closest-side indica que el círculo o elipse debe crecer hasta el lado más
cercano. La palabra farthest-corner indicaría que debe crecer hasta la esquina más lejana.
Contain sería lo mismo que decir closest-side y cover sinónimo de farthest-corner.
Página 59
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 60
Rafael Lozano HTML y CSS
Los fondos radiales son soportados en poca medida en estos momentos en los
navegadores. Todos tienen al menos algún detalle que todavía tienen que pulir. De momento
ni Opera ni IE9 los muestran en ningún caso. Chrome no tiene posibilidad de hacer
degradados con forma de elipse y Firefox todavía no implementa la alternativa al tamaño y
forma, comentada anteriormente, para la definición del tamaño del gradiente por medio de
los valores de anchura y altura.
Página 61
Rafael Lozano Introducción a los Lenguajes de Marcas
Al listar fuentes para el sitio web, por supuesto se empieza por la preferida, seguida
Página 62
Rafael Lozano HTML y CSS
ésta de algunas fuentes alternativas. Se recomienda completar la lista con una familia de
fuentes genérica. Así, al menos, la página se mostrará usando una fuente de la misma familia
si ninguna de las especificadas están disponibles.
Un ejemplo de lista de fuentes por orden de prioridad podría tener este aspecto:
h1 {font-size: 30px;}
h2 {font-size: 12pt;}
h3 {font-size: 120%;}
p {font-size: 1em;}
La propiedad font-style define el estilo para la fuente elegida. Puede ser normal
o italic (oblique es sinónimo). En el ejemplo que sigue, todos los encabezados de nivel
2 aparecerán en cursiva.
H2 {
font-family: "Times New Roman", serif;
font-style: italic;
}
H2 {
font-family: "Times New Roman", serif;
font-variant: small-caps;
}
Página 63
Rafael Lozano Introducción a los Lenguajes de Marcas
p {
font-family: arial, verdana, sans-serif;
font-stretch: condensed;
}
p {
font-style: italic;
font-weight: bold;
font-size: 30px;
font-family: arial, sans-serif;
}
Página 64
Rafael Lozano HTML y CSS
pantalla de los navegadores. Es por ello que el abanico de fuentes que podíamos utilizar,
con la garantía que funcionasen bien en la mayoría de los visitantes, está reducido a las
típicas Arial, Verdana, Times New Roman y poco más.
Es evidente que en esta situación, el desarrollador web pierde control en el diseño y
desarrollo de un sitio web al no poder definir con total seguridad la fuente que se empleará
para visualizarlo. La solución a este problema es la regla @font-face.
Esta regla nos permite definir en nuestra hoja de estilos una fuente, para lo cual
necesitaremos el archivo de fuente. En la práctica supone poder utilizar en nuestro sitio web
cualquier fuente que nosotros deseemos. Esta regla surgió en la versión 2 de CSS pero
hasta la versión 3 no empieza a funcionar y prosperar. Actualmente, IE9 solamente soporta
formatos de fuente EOT, mientras que Safari, Firefox, Chrome y Opera soportan tanto fuentes
TTF como OTF. Todos los navegadores soportan fuentes WOFF. IE8 y versiones anteriores
no soportan la regla @font-face.
Su sintaxis es la siguiente:
@font-face{
font-family: <nombre_fuente>;
src: <URL_archivo_fuente> format(<formato>)
[,<URL_archivo_fuente> format(<formato>)]*;
[font-stretch: <ancho>;
[font-weight: <peso>];
[font-style: <estilo>];
}
@font-face {
font-family: "Open Sans Light";
src: url("/fuentes/[Link]?") format("eot"),
url("/fuentes/[Link]") format("woff"),
url("/fuentes/[Link]") format("truetype"),
url("/fuentes/[Link]#OpenSans-Light")
format("svg"),
url("/fuentes/[Link]") format("opentype")
font-weight:normal;
Página 65
Rafael Lozano Introducción a los Lenguajes de Marcas
font-style:normal;
}
Hemos definido la fuente con nombre Open Sans Light cuyos archivos fuente se
puede obtener por parte del navegador en la carpeta fuentes de la raíz del sitio web. La
fuente tiene un peso y un estilo normal. Nótese que para la definición de la fuente en format
SVG ha habido que añadir el identificador de la fuente ya que un archivo SVG puede incluir
varias fuentes.
Ahora podemos emplear esta fuente en cualquier elemento del sitio web. En el
siguiente ejemplo se asigna a los elementos de párrafo.
Página 66
Rafael Lozano HTML y CSS
p {
text-indent: 30px;
}
h1 {
text-align: right;
}
h2 {
text-align: center;
}
p {
text-align: justify;
}
h1 {
text-decoration: underline;
}
h2 {
text-decoration: overline;
}
h3 {
Página 67
Rafael Lozano Introducción a los Lenguajes de Marcas
text-decoration: line-through;
}
h1 {
letter-spacing: 6px;
}
p {
letter-spacing: 3px;
}
h1 {
text-transform: capitalize;
}
h3 {
text-transform: lowercase;
}
Por último podemos aplicar una sobra al texto. La propiedad text-shadow permite
aplicar una sombra al texto. Su sintaxis es la siguiente
Página 68
Rafael Lozano HTML y CSS
h1 {
text-shadow: 5px 5px 1px gray;
}
Página 69
Rafael Lozano Introducción a los Lenguajes de Marcas
reproducir objetos sutilmente iluminados y escenas con gran variación tonal. De hecho, es el
tipo de imagen utilizado para la fotografía y el cine. Obviamente, la calidad de la imagen
dependerá de la cantidad de píxeles utilizados para representarla.
Las imágenes bitmap no permiten el cambio de escala. Si aumentamos una imagen
bitmap se perderá definición en la imagen ya que los píxeles aumentan de tamaño y los
cuadraditos se aprecian más. Este efecto, que se conoce con el nombre de pixelado se hace
más evidente en las líneas curvas y en las zonas en las que hay cambios bruscos de
luminosidad.
Existen tres factores que influyen a la hora de representar una imagen bitmap:
resolución, profundidad de color y dimensiones de la imagen.
10.2.1 Resolución
La resolución de una imagen es la cantidad de píxeles que la componen. Suele
medirse en píxeles por pulgada (ppi) o píxeles por centímetro (pcm). Cuanto mayor es la
resolución de una imagen más calidad tendrá su presentación pero, desgraciadamente, más
espacio ocupará en el disco el archivo gráfico que la contiene.
Por ejemplo, una imagen con una resolución de 72 ppi, que es muy común en las
páginas web, necesitará 5184 píxeles en cada pulgada cuadrada, que es un cuadrado de
2,54 centímetros de lado. Una resolución de 72 ppi es adecuada para imágenes que se
muestran en el monitor de un ordenador. La nitidez de los detalles es suficiente y la
reproducción de las distintas tonalidades es correcta. Sin embargo, podría ser insuficiente
para una impresión en papel.
Página 70
Rafael Lozano HTML y CSS
una tabla con los 256 colores más frecuentes, que incluyen obviamente el negro, el blanco y
varios tonos de gris, para componer la imagen. Cada una de las 256 combinaciones posibles
de unos y ceros de los 8 bits es un índice que permite acceder a la tabla. Por eso, a este tipo
de imágenes se les conoce como de color indexado., que es el más frecuente en la web.
Y así, cuanto mayor sea la profundidad se utilizará una cantidad mayor de colores para
describir la imagen. En la tabla siguiente tienes el cálculo de los colores disponibles para
cada profundidad:
Profundidad de color Nº de
(bit) colores
1 2
4 16
8 256
16 65536
32 4294967296
Una imagen bitmap de calidad está compuesta por varias capas: una para cada color
básico (rojo, verde y azul, por ejemplo) y una para la luminosidad (de oscuro absoluto a luz
absoluta). Por encima de 16 bits de profundidad, la descripción del color se divide por capas.
Si la profundidad de color es de 16 bits, por ejemplo, se dedican 4 bits (128 niveles) a cada
capa. Y si la profundidad es de 32 bits, cada capa utiliza 8 bits (256 niveles) para ajustar el
color.
Página 71
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 72
Rafael Lozano HTML y CSS
<img src=”[Link]”/>
El valor del atributo src tiene que ser la URL de la imagen lo que implica que podemos
cargar en una página web cualquier imagen accesible en Internet. En el ejemplo anterior
hemos utilizado una imagen cuyo archivo reside en la misma carpeta en la que reside la
página web.
Si la imagen estuviera en el mismo servidor, pero en otra carpeta, podemos utilizar una
URL relativa, como en el siguiente ejemplo
<img src=”imagenes/[Link]”/>
En el ejemplo anterior suponemos que en la carpeta donde reside la página web hay
otra carpeta llamada imagenes que es donde se encuentra el archivo de imagen.
Si queremos también, podemos cargar una imagen que reside en otro servidor web,
pero en esta ocasión necesitamos especificar una URL absoluta.
<img src=”[Link]
Página 73
Rafael Lozano Introducción a los Lenguajes de Marcas
En el ejemplo anterior hemos establecido una anchura de 200 píxeles y una altura de
400 píxeles. También podríamos haber indicado porcentajes.
10.5.2 Alineación
Para alinear una imagen disponemos de la propiedad CSS float. Si el valor de la
propiedad es left, entonces la imagen quedará a la izquierda y el texto subyacente
rodeará la imagen por la derecha, mientras que si el valor es right, la imagen queda a la
derecha y el texto la rodea por la izquierda.
Veamos el siguiente ejemplo
Página 74
Rafael Lozano HTML y CSS
<p>
<img src="[Link]" width="95" height="84"
style=”float:right;”/>
Para alinear una imagen disponemos de la propiedad CSS float. Si
el valor de la propiedad es left, entonces la imagen quedará a
la izquierda y el texto subyacente rodeará la imagen por la
derecha, mientras que si el valor es right, la imagen queda a la
derecha y el texto la rodea por la izquierda. La propiedad float
solamente permite alinear una imagen horizontalmente, es decir,
situarla a la izquierda o a la derecha, pero no arriba o abajo.
</p>
Página 75
Rafael Lozano Introducción a los Lenguajes de Marcas
<figure>
<img src="./[Link]" alt="Un bebe orangután colgado de
una cuerda"/>
</figure>
<figure>
<img src="./[Link]" alt="Un bebe orangután colgado de
una cuerda"/>
<figcaption>Un bebe orangután colgado de una cuerda en la
selva de Borneo,<br> por <span style="font-
style:italic;">Richard Clark</span>
</figcaption>
</figure>
Página 76
Rafael Lozano HTML y CSS
11 Enlaces
Este capítulo introduce el enlace, el elemento esencial para construir documentos de
hipertexto. Un enlace es una conexión de un recurso web con otro. Aunque el concepto es
muy simple, el enlace ha sido la principal causa del éxito de la Web.
Un enlace tiene dos puntos finales, llamadas anclas, y una dirección. En enlace
comienza en un ancla origen y apunta a un ancla destino, el cual puede ser cualquier
recurso web: una imagen, un video clip, un archivo de sonido, un programa, otro documento
HTML o un elemento dentro de un documento HTML.
Los recursos a los que apuntan los enlaces están en la web almacenados en forma de
archivos. Todos los nombres de archivos y sus extensiones a las que se hacen referencia en
los hiperenlaces, deben de ponerse en su totalidad en minúsculas, para evitar posibles
errores, ya que muchos servidores web residen en sistemas operativos que son sensibles a
mayúsculas y minúsculas al nombrar archivos. Como normal general se debe escribir todos
los nombres de enlaces, directorios y archivos, en minúsculas, debido principalmente a esta
característica de la mayoría de los servidores HTML de Internet.
Por el mismo motivo, en Internet la mayoría de las referencias a directorios se emplean
con la barra / y no con la barra \, ya que las máquinas UNIX/Linux antes nombradas, hacen
referencias a directorios con la barra de división. Debemos de tener estas 2 consideraciones
muy en cuenta a la hora de hacer hiperenlaces desde nuestro documento HTML, ya que
sino son tenidas en cuenta, nos llevará a tener sucesivos errores al intentar enlazar.
Una vez hayamos hecho nuestra página web, puede que queramos que nuestros
visitantes tengan referencias de otras páginas que nosotros creamos convenientes que
visiten, bien porque tienen que ver con el tema que se trata en nuestra páginas, bien porque
consideremos que pueden ser interesantes.
Página 77
Rafael Lozano Introducción a los Lenguajes de Marcas
Otra razón puede ser que tengamos un documento web demasiado grande y
queramos dividirlo en otros más pequeños y conectarlos mediante enlaces.
Las funcionalidades hipertexto se basan en el concepto de enlace. Un enlace es una
referencia a un documento HTML, o a cualquier otro objeto, expresada por medio de un
formato, universalmente aceptado. Este permite que el visualizador, cuando detecta que se
requiere ”saltar” a un documento determinado, sea capaz de identificarlo y obtenerlo, de
forma que nos sea visible a nosotros en nuestra pantalla del navegador.
De cara al usuario, los hiperenlaces aparecerán como texto en otro color, realzado o
subrayado, incluso como veremos pueden ser imágenes.
Aparecería el texto Buscador Google subrayado con distinto color al resto del texto.
Al colocar el ratón sobre ella, aparecería en la barra de estado del navegador, la dirección
URL hacia la que apunta (en este caso [Link] Una vez pinchado el
enlace, el navegador se comporta como si hubieramos escrito la URL en la barra de
dirección del navegador y pulsado la tecla Intro.
En lugar de texto, podríamos incluir una imagen que actuara de hiperenlace:
En este caso la imagen, al aparecer como enlace a otro documento HTML, estaría
bordeada con un marco azul, de similar tonalidad al que subrayaba anteriormente al enlace
de tipo texto. Esto, nos indicaría que esa imagen está actuando de enlace a otra página. Al
igual que como ocurría con el texto, al colocar al ratón sobre cualquier área de la imagen, en
la barra de estado nos indica la dirección URL del enlace a la que apunta la imagen.
Página 78
Rafael Lozano HTML y CSS
11.3 Marcadores
Por defecto, cuando enlazamos con una página web, esta se presenta en la pantalla
del navegador desde el principio. Sin embargo, existe la posibilidad de enlazar con un punto
concreto dentro de la página web.
Dentro de las páginas web podemos definir marcadores o puntos del documento
donde podemos establecer el destino de un enlace. Esto permite que al enlazar con una
página web vayamos a un marcador concreto e incluso podemos enlazar con un marcador
dentro del mismo documento donde está el enlace.
El atributo id puede usarse para crear un marcador dentro del documento web.
<a id=“nombre_del_marcador”>...</a>
Todo el contenido del elemento a ya sea texto, imagen o lo que queramos poner como
símbolo del enlace, es ahora el marcador, de forma que si dentro del documento hay un
enlace a este marcador, el navegador nos lleve hasta ella.
Supongamos el siguiente ejemplo. El archivo [Link] contiene el siguiente
marcador.
Ahora podemos crear un enlace en otro documento que enlaza directamente con este
marcador de la siguiente manera.
<a
href=”[Link]
ejos>Veamos una consejos últiles</a>
Como podemos apreciar hemos añadido #consejos a la URL del enlace. Esto indica
que tiene que enlazar con el marcador consejos definido en la página web de destino.
También, podríamos haber creado un enlace a este marcador desde el propio
[Link].
En el momento que vemos la almohadilla, sabremos siempre que hace una referencia a
un marcador de un documento.
Página 79
Rafael Lozano Introducción a los Lenguajes de Marcas
<h1>Tabla de contenidos</h1>
<P><a href="#seccion1">Introducción</a><br/>
<a href="#seccion2">Capítulo 1</a><br/>
<a href="#seccion2.1">Una nota personal</a><br/>
...resto de la tabla de contenidos...
...el cuerpo del documento...
<h2 id="seccion1">Introduction</h2>
...sección 1...
<h2 id="seccion2">Capítulo 1</h2>
...sección 2...
<h3 id="seccion2.1">Una nota personal</h3>
...sección 2.1...
Página 80
Rafael Lozano HTML y CSS
De los diferentes elementos con pseudo-clases existentes hasta la fecha, los más
utilizados son los referentes a los enlaces. Concretamente, para los enlaces disponemos de
las siguientes pseudo-clases.
Pseudo-clase Significado
:link Vínculos que todavía no han sido visitados
:visited Vínculos ya visitados
:hover Vínculos sobre los que está el cursor del ratón
:active Vínculos sobre los que se está haciendo clic
:focus Vínculos que están siendo seleccionados mediante teclado
La pseudo clase :link se usa para enlaces que dirigen a páginas que el usuario no
ha visitado. En el ejemplo de código que sigue, los enlaces no visitados tendrán un color
azul claro.
a:link {
color: #6699CC;
}
La pseudo clase :visited se usa para enlaces que dirigen a páginas que el usuario
ya ha visitado. Por ejemplo, el código siguiente hará que todos los enlaces visitados sean de
color púrpura oscuro:
a:visited {
color: #660099;
}
La pseudo clase :active se usa para enlaces que están activos. El código de este
ejemplo hace que el color de fondo para los enlaces activos sea amarillo:
a:active {
background-color: #FFFF00;
}
La pseudo clase :hover se usa cuando el puntero del ratón pasa por encima de un
enlace. Esta pseudo-clase se puede usar para crear efectos interesantes. Por ejemplo, si
queremos que nuestros enlaces sean de color naranja y estén en cursiva cuando el cursor
pase sobre ellos, el código CSS que utilizaremos será el siguiente:
a:hover {
color: orange;
font-style: italic;
}
Página 81
Rafael Lozano Introducción a los Lenguajes de Marcas
a:hover {
letter-spacing: 10px;
font-weight:bold;
color:red;
}
a:hover {
text-transform: uppercase;
font-weight: bold;
color: blue;
background-color: yellow;
}
Estos dos ejemplos dan una idea sobre las posibilidades casi infinitas al combinar
diferentes propiedades.
Una pregunta muy recurrente es: ¿cómo quito el subrayado de los enlaces? Deberías
considerar cuidadosamente la necesidad de quitar el subrayado, pues esto podría disminuir
la usabilidad de tu sitio web de forma significativa. La gente está acostumbrada al subrayado
azul de los enlaces en las páginas web y saben que pueden hacer clic en ellos. Si cambias
el subrayado y el color de los enalces, existe una buena posibilidad de que los usuarios se
confundan y, por lo tanto, no saquen todo el provecho al contenido de tu sitio web.
Dicho esto, es muy sencillo quitar el subrayado de los enlaces. Como recordarás, la
propiedad text-decoration se puede usar para determinar si el texto aparece
subrayado o no. Para quitar el subrayado, establece el valor de text-decoration a none.
a {
text-decoration:none;
}
a:link {
color: blue;
text-decoration:none;
}
a:visited {
color: purple;
text-decoration:none;
}
a:active {
background-color: yellow;
text-decoration:none;
}
Página 82
Rafael Lozano HTML y CSS
a:hover {
color:red;
text-decoration:none;
}
12 Tablas
Una table es una estructura bidimensional formada por un conjunto de filas y columnas.
A la intersección de una fila con una columna se le denomina celda. La información está
contenida en las celdas.
El modelo de tabla de HTML permite al desarrollador web distribuir datos en filas y
columnas de celdas. Cada tabla tiene asociada una descripción corta. Las filas de la tabla se
pueden agrupar en una cabecera, pie y cuerpo. Los grupos de filas incluyen información que
pueden usar los agentes de usuario para enfatizar su estructura y soportar desplazamiento
del cuerpo fijando el pie y la cabecera. Cuando una tabla grande se imprime, cada página
puede repetir la información del pie y la cabecera.
También se pueden agrupar las columnas para dar información adicional a la estructura
de la tabla. Se pueden definir propiedades de las columnas al principio de la tabla para que
el navegador pueda presentar la tabla incrementalmente en lugar de esperar toda la tabla
entera. Las celdas pueden contener información de la cabecera o datos y pueden
expandirse en mútiples filas y columnas.
<table>
<tr>
<th>Celda 1,1</th><th>Celda 1,2</th>...<th>Celda
1,n</th>
</tr>
<tr>
<td>Celda 2,1</td><td>Celda 2,2</td> ... <td>Celda
2,n</td> </tr>
<tr>
<td>Celda 3,1</td><td>Celda 3,2</td> ... <td>Celda
3,n</td>
</tr>
…
<tr>
Página 83
Rafael Lozano Introducción a los Lenguajes de Marcas
Como se puede observar el elemento table contiene varios elementos tr, uno por
fila. A su vez, cada elemento tr tiene elementos th o td, uno por celda. La información se
introduce dentro de los elementos de celda, nunca fuera de ella.
Debemos tener cuidado de introducir el mismo número de celdas en cada fila, para
que la tabla quede cuadrada. De lo contrario la tabla quedaría coja, es decir, habría celdas
de más o de menos en algunas filas.
Si queremos ver los bordes de la tabla tenemos que emplear el atributo border con
un valor númerico que hace referencia al grosor del borde. Sin embargo, más adelante en
este mismo capítulo veremos que es mejor utilizar CSS para poner los bordes a la tabla.
<table>
<tr>
<th></th>
<th>Lunes</th>
<th>Martes</th>
<th>Miércoles</th>
<th>Jueves</th>
<th>Viernes</th>
</tr>
<tr>
<td>8:30</td>
<td>Lengua</td>
<td>Lengua</td>
<td>Inglés</td>
<td>Francés</td>
<td>Educación Física</td>
</tr>
<tr>
<td>9:30</td>
Página 84
Rafael Lozano HTML y CSS
<td>Matemátias</td>
<td>Lengua</td>
<td>Educación Física</td>
<td>Inglés</td>
<td>Francés</td>
</tr>
<tr>
<td>10:30</td>
<td>Francés</td>
<td>Educación Física</td>
<td>Inglés</td>
<td>Lengua</td>
<td>Matemáticas</td>
</tr>
</table>
<table>
<caption>Horario de Clase</caption>
<tr>
<th></th>
<th>Lunes</th>
<th>Martes</th>
<th>Miércoles</th>
<th>Jueves</th>
<th>Viernes</th>
</tr>
...
Página 85
Rafael Lozano Introducción a los Lenguajes de Marcas
Vemos que el título aparece centrado respecto al espacio ocupado por la tabla.
En este ejemplo la 2 fila tiene en su primera celda una extensión de 2 celdas normales
del resto de la tabla. O también puede ser que queramos que una fila ocupe más filas de
altura que el normal de la tabla. Veamos otro ejemplo:
En este ejemplo, las tres celdas de la segunda columna están formando una sola.
Para expandir una celda en filas o columnas existen dos atributos que nos sirven para
indicar al navegador que la tabla poseerá un ancho de fila o columna doble, triple,
cuádruple... del estándar definido para el resto de la tabla. Estos atributos pertenecen a los
elementos th o td y son:
✔ colspan=“<valor_numérico>” indica cuántas columnas ocupará la celda en la
que se defina el atributo.
✔ rowspan=“<valor_numérico>” iIndica cuántas filas ocupará la celda en la que
se defina el atributo.
El valor numérico de estos elementos indica cuantas columnas o filas ocupara la celda.
Veamos el ejemplo anterior modificado. A continuación mostramos el elemento tr
correspondiente a la segunda fila.
…
<tr>
<td>8:30</td>
<td colspan=”2”>Lengua</td>
Página 86
Rafael Lozano HTML y CSS
<td>Inglés</td>
<td>Francés</td>
<td>Educación Física</td>
</tr>
...
También, para poder apreciar bien la expansión de la celda hemos añadido un atributo
border al elemento table. El resultado sería este
Vemos que la celda correspondiente al lunes y martes de las 8:30 aparece ocupando
dos columnas. En el siguiente ejemplo hemos añadido una fila para el recreo, el cual es
todos los días a las 11:30. Habría que añadir el siguiente elemento tr al final de la tabla
…
<tr>
<td>11:30</td>
<td colspan=”5”>RECREO</td>
</tr>
...
Una expansión vertical implica que una celda ocupa varias filas. El siguiente ejemplo
vemos
<table border="1">
<caption>Horario de Clase</caption>
<tr>
<th></th>
<th>Lunes</th>
<th>Martes</th>
<th>Miércoles</th>
<th>Jueves</th>
Página 87
Rafael Lozano Introducción a los Lenguajes de Marcas
<th>Viernes</th>
</tr>
<tr>
<td>8:30</td>
<td colspan="2">Lengua</td>
<td>Inglés</td>
<td>Francés</td>
<td rowspan="3">Educación Física</td>
</tr>
<tr>
<td>9:30</td>
<td>Matemátias</td>
<td>Lengua</td>
<td>Educación Física</td>
<td>Inglés</td>
</tr>
<tr>
<td>10:30</td>
<td>Francés</td>
<td>Educación Física</td>
<td>Inglés</td>
<td>Lengua</td>
</tr>
<tr>
<td>11:30</td>
<td colspan="5">RECREO</td>
</tr>
</table>
A la hora de expandir una celda deberemos tener cuidado de que la tabla no quede
desequilibrada. Siempre que añadimos una expansión hay que quitar celdas en otro lugar de
la tabla de la siguiente forma:
✔ Si se expande una celda horizontalmente (colspan) entonces deberé quitar celdas
de la misma fila.
✔ Si se expande una celda verticalmente (rowspan) entonces tendré que quitar celdas
de las filas siguientes.
Página 88
Rafael Lozano HTML y CSS
<table>
<thead>
<tr> ...Celdas de cabecera...</tr>
</thead>
<tfoot>
<tr> ...celdas del pie...</tr>
</tfoot>
<tbody>
<tr> ...primera fila del bloque 1 de datos...</tr>
<tr> ...segunda fila del bloque 2 de datos...</tr>
</tbody>
<tbody>
<tr> ...primera fila del bloque 2 de datos...</tr>
<tr> ...segunda fila del bloque 2 de datos...</tr>
<tr> ...tercera fila del bloque 2 de datos...</tr>
</tbody>
</table>
Página 89
Rafael Lozano Introducción a los Lenguajes de Marcas
<table>
<colgroup span="40" style=”width:100px;"></colgroup>
…
</table>
Cuando es necesario establecer el formato a una o varias columnas dentro del grupo,
es mejor utilizar el elemento col. Por ejemplo, supongamos que definimos un grupo de 40
columnas con ancho 100 píxeles, pero la columna 15 tiene un ancho de 300 píxeles. Esta
tabla se definiría así
<table>
<colgroup style=”width:100px;”>
<col span=”14”>
<col span=”1” style=”width:200px;”>
<col span=”25”>
</colgroup>
…
</table>
La propiedad CSS width dentro del elemento colgroup es heredado por las 40
columnas. El primer elemento col se refiere a las primeras 14 columnas, no haciendo nada
especial con ellas, y el segundo asigna un ancho de 200 a la columna 15. El último col se
refiere a las siguientes 25 columnas y tampoco hace nada con ellas.
El atributo span es ignorado por el navegador si colgroup contiene elementos col.
Este elemento también define el atributo span y con el mismo significado.
Página 90
Rafael Lozano HTML y CSS
El elemento col permite agrupar columnas para cambiar formato, pero no las agrupa
estructuralmente, eso lo hace colgroup. Elementos col pueden aparecer dentro o fuera
de colgroup.
<table>
<colgroup span="3"></colgroup>
…
</table>
<table>
<colgroup>
<col>
<col span="2">
</colgroup>
…
</table>
<table>
<colgroup>
<col>
</colgroup>
<colgroup span="2"></colgroup>
…
</table>
<table>
<tr>
<td></td>
Página 91
Rafael Lozano Introducción a los Lenguajes de Marcas
<td></td>
<td></td>
</tr>
th {
background-color: #FFC;
font: italic bold 12pt arial, sans-serif;
color: darkgray;
text-align: left;
font-variant: small-caps;
}
Con la regla anterior estamos dando a las celdas de cabecera una fuente, color de
fondo, color en primer plano, alineación de texto y fuente en versales. El resultado sería el
siguiente.
Además de lo anterior, en las tablas es muy común establecer el alto y ancho de las
celdas y/o tabla, junto con los bordes. El alto y ancho de elementos lo hemos visto
anteriormente, aunque no en profundidad, ya que se verá en detalle en el próximo capítulo.
Los bordes aún no lo hemos visto, pero se van a introducir aquí.
Respecto a la alineación utilizaremos la propiedad text-align vista anteriormente
para alinear el contenido de las celdas e introduciremos la propiedad vertical-align
para la alineación vertical.
Página 92
Rafael Lozano HTML y CSS
✔ Si se establece la propiedad width para una tabla y también para una celda,
visualizará la columna donde se encuentra la celda con ese ancho siempre que el
ancho total de la tabla y el resto de las columnas lo permitan. Es decir, la suma de los
anchos de las columnas no superan el ancho de la tabla.
✔ Si el ancho de las columnas superan el ancho total de la tabla, entonces la tabla se
muestra con el ancho establecido para ella y ajustará el ancho de las columnas de
forma equitativa.
✔ Si no se especifica la propiedad width a la tabla y si a las columnas, entonces la tabla
ocupará todo el ancho de la pantalla si la suma del ancho de las celdas supera el
ancho de la pantalla. De lo contrario la tabla tendrá de ancho la suma de los anchos
de las columnas.
✔ La propiedad width no se aplica a filas.
Si indicamos ancho de tabla estaremos bastante limitados. Así que solamente lo
aplicaremos en casos en los que sea estrictamente necesario. Es mejor asignar ancho a las
columnas estableciendo la propiedad width en una celda de cada columna o definiendo
grupos de columnas mediante el elemento colgroup.
Para el alto estableceremos la propiedad height, la cual actuará de la siguiente
manera:
✔ Si establecemos la propiedad height para la tabla, la tabla tendrá esa altura siempre
que la suma de las alturas establecidas para las filas y/o celdas sea inferior a la
misma.
✔ Si se establece la propiedad height para una fila, la fila tendrá esa altura siempre
que sea superior a la altura de cualquiera de sus celdas.
✔ Si se establece la propiedad height para una celda, la fila donde se encuentre dicha
celda tendrá la altura establecida.
Como se puede observar la altura establecida sobre una celda tiene precedencia
sobre la indicada en su fila, y esta tiene precedencia sobre la que se indica en la tabla.
Por ejemplo, supongamos que asignamos las siguientes alturas y anchuras a nuestra
tabla de ejemplo.
table {
width: 700px;
height: 500px;
}
tr {
height: 120px;
}
th {
width: 100px;
Página 93
Rafael Lozano Introducción a los Lenguajes de Marcas
height: 150px;
}
td {
width: 150px;
height: 200px;
}
El resultado es el siguiente
Analicemos el ejemplo anterior. Vemos que a la tabla le hemos dado una anchura de
700 píxeles, y a cada celda de datos le hemos dado 150 píxeles. Pues bien, si tenemos 6
columnas y multiplicamos por 150 píxeles nos da un total de 900 píxeles. Sin embargo, como
la propiedad width establecida en la tabla tiene precedencia, entonces el ancho total de la
tabla es 700 píxeles y el ancho de las columnas se reparte equitativamente. Nótese que las
celdas de cabecera tienen 100 píxeles, pero en el caso de que no se hubiera definido ancho
Página 94
Rafael Lozano HTML y CSS
para la tabla y se aplicará el ancho de las columnas, siempre se aplica el mayor, por tanto, en
este caso sería el de las celdas de datos.
Respecto a la altura, tenemos en la tabla una altura de 500 píxeles y la fila 120 píxeles.
Como la altura de la fila tiene precedencia sobre la tabla y hay 5 filas, entonces la altura
sería, por ahora, de 600 píxeles. Sin embargo, vemos que las celdas de cabecera tienen 150
píxeles de altura, que tiene precedencia sobre la altura de su fila, y las celdas de datos
tienen 200 píxeles de altura, que también tienen precedencia sobre los de su
correspondiente fila. Por tanto la altura total de la tabla es de 150 + 4x200 = 950 píxeles.
Con las reglas anteriores estamos asignando igual ancho y alto a todas las filas de la
tabla, cosa no muy común. Por ahora, y hasta que en el siguiente capítulo veamos las clases
y los identificadores, podríamos establecer diferentes anchos y altos de fila aplicando estilo
de forma local mediante el atributo style en el correspondiente elemento.
13.2 Bordes
Hasta ahora hemos visto el atributo border del elemento table para poner bordes a
las celdas. Este borde es muy pobre porque no permite afinar su grosor ni establecer
ninguna otra característica de formato más, como el color o el estilo de borde. Para
establecer bordes disponemos de las siguientes propiedades.
La anchura del borde se define por medio de la propiedad border-width, que
dispone de los valores thin, medium y thick, o de un valor numérico indicado en píxeles.
La siguiente imagen ilustra cómo funciona.
Página 95
Rafael Lozano Introducción a los Lenguajes de Marcas
table {
border-width: 3px;
border-style: dashed;
border-color: brown;
}
th {
border-width: thick;
border-style: dotted;
border-color: teal;
}
td {
border-width: 5px;
border-style: outset;
border-color: red;
}
Página 96
Rafael Lozano HTML y CSS
Los bordes no se pueden establecer para una fila, solamente para celdas o la tabla
completa. En el ejemplo anterior hemos suprimido el atributo border de la tabla. Si está
presente, se aplicaría en el caso de que no estuvieran definidos los bordes mediante CSS.
También es posible establecer diferentes bordes para el borde superior (top), inferior
(bottom), derecho (right) e izquierdo (left). En el siguiente ejemplo vemos las
propiedades para ello:
th {
border-top-width: thin;
border-top-style: dotted;
border-top-color: teal;
border-right-width: medium;
border-right-style: solid;
border-right-color: cyan;
border-bottom-width: thick;
border-bottom-style: outset;
border-bottom-color: lightblue;
border-left-width: 5px;
border-left-style: dashed;
border-left-color: marine;
Como ocurre con el fondo y la fuente, los bordes también tienen una propiedad
abreviada llamada border. Veamos un ejemplo:
td {
border-width: 5px;
border-style: outset;
border-color: red;
}
td {
Página 97
Rafael Lozano Introducción a los Lenguajes de Marcas
Hay que poner en orden el grosor, el estilo y el color del borde. También hay
propiedades abreviadas para los elementos individuales de cada borde, como en el
siguiente ejemplo.
th {
border-top: thin dotted teal;
13.3 Alineación
La propiedad text-align se emplea para alinear el texto horizontalmente. Esta
propiedad la vimos anteriormente y cuando se establece para una celda, fila o tabla se
aplica en este orden de precedencia.
También disponemos de la propiedad vertical-align, la cual se emplea para
establecer la alineación vertical del contenido de la celda. Esto es útil cuando el alto de fila
es mayor que el necesario para albergar el contenido de sus celdas. Disponemos de los
valores top (arriba), middle (en medio) y bottom (abajo). Por defecto, las celdas se alinean
en medio.
Esta propiedad no se aplica a table, pero si a tr, td y th. Si se especifica sobre una
celda tiene precedencia sobre la especificada sobre la fila. Veamos el siguiente ejemplo.
tr {
text-align: right;
vertical-align: bottom;
}
td {
text-align:left;
vertical-align: top;
}
El resultado es este
Página 98
Rafael Lozano HTML y CSS
13.4 Relleno
El contenido de las celdas aparece por defecto muy pegado a los bordes. Podemos
establecer un espacio de separación entre el borde de la celda y su contenido mediante la
propiedad padding. Por ejemplo
td {
border: medium solid cyan;
padding: 5px;
}
El resultado es el siguiente
Vemos que las celdas de datos están más espaciadas por el relleno de 5 píxeles que le
hemos dado. Podemos también especificar un relleno diferente arriba, abajo, izquierda y
derecha mediante las propiedades padding-top, padding-bottom, padding-left y
padding-right. Vamos el siguiente ejemplo
th {
border: medium solid cyan;
padding-top: 5px;
padding-right: 10px;
Página 99
Rafael Lozano Introducción a los Lenguajes de Marcas
padding-bottom: 15px;
padding-left: 20px;
}
El resultado es
Ahora la fila de cabecera tienen diferente separación de cada borde con el contenido
de la celda.
Por ejemplo
Página 100
Rafael Lozano HTML y CSS
table {
border-spacing:5px;
}
El resultado es
El valor collapse hace que los bordes de las celdas se junten con los de las celdas
adyacentes. Hay que tener cuidado porque si las celdas tienen diferentes bordes el
resultado podría no ser el esperado. Los conflictos se resuelve según las reglas de
resolución de conflictos de bordes de tabla de la especificación CSS2 del W3C.
Por defecto están separados, o lo que es lo mismo, se podría aplicar la propiedad
border-spacing. Sin indicamos la propiedad border-collapse, entonces no se aplica
border-spacing. Veamos el siguiente ejemplo:
table {
border-collapse: collapse;
}
th {
border: medium solid cyan;
}
Página 101
Rafael Lozano Introducción a los Lenguajes de Marcas
td {
border: medium solid cyan;
}
El resultado es
Entendemos como celda vacía aquella que no tiene ningún contenido. Por ejemplo, la
primera celda de la primera fila de la tabla de ejemplo no tiene ningún valor. El elemento th
aparece así
<th></th>
table {
empty-cells:hide;
}
th {
border: medium solid blue;
background-color: lightblue;
El resultado es
Página 102
Rafael Lozano HTML y CSS
14 Maquetación web
La maquetación web consiste en la disposición de los elementos visuales de una
pagina web con el fin de crear la interfaz de usuario, es decir, aquellos elementos con los
que el usuario interactua.
Hace unos años, la maquetación de las páginas web se realizaba utilizando tablas. Una
vez entendido este proceso podía resultar sencillo, aunque si no se dominaban las tablas,
podía convertirse en algo tedioso. El problema de las tablas es que generaban un página
muy encorsetada, y el código se volvía complejo de entender. Además, algunos buscadores
encontraban problemas al analizar la estructura de la página.
Actualmente, la maquetación con tablas ha caído en desuso, y se realiza utilizando
capas, también llamadas divisiones o contenedores. La colocación de las capas en la página
se realiza a través de CSS. Esto permite, por ejemplo, que podamos pasar de un diseño con
un menú lateral a otro con el menú en la parte superior, sólo cambiando la hoja de estilos.
En este capítulo veremos las técnicas de maquetación más comunes, aunque hay que
decir que existen diversas formas de conseguir una misma maquetación.
14.1.1 Clases
Un atributo global de los elementos HTML es class. Global significa que todos los
elementos HTML tienen este atributo. Su finalidad es la de agrupar los elementos por clases
o grupos para que así, CSS u otro lenguaje pueden seleccionarlos y distinguirlos de los
demás. Su uso es opcional aunque recomendable. Su sintaxis en HTML sería, por ejemplo:
Página 103
Rafael Lozano Introducción a los Lenguajes de Marcas
<p>
Uvas para el vino blanco:<br/>
<a href="[Link]">RiesLIng</a><br/>
<a href="[Link]">Chardonnay</a><br/>
<a href="[Link]">Pinot Blanc</a><br/>
</p>
<p>
Uvas para el vino tinto:<br/>
<a href="[Link]">Cabernet Sauvignon</a><br/>
<a href="[Link]">Merlot</a><br/>
<a href="[Link]">Pinot Noir</a><br/>
</p>
Así pues, queremos que los enlaces relativos al vino blanco sean amarillos, los
enlaces relacionados con el vino tinto sean rojos, y el resto de enlaces de la página web
sigan siendo azules.
Para lograr esto, dividiremos los enlaces en dos categorías. Esto se hace asignando
una clase para cada tipo de enlace, usando el atributo class. Intentemos especificar
algunas clases en el ejemplo anterior:
<p>
Uvas para el vino blanco:<br/>
<a href="[Link]" class=”vinoblanco”>RiesLIng</a><br/>
Página 104
Rafael Lozano HTML y CSS
<p>
Uvas para el vino tinto:<br/>
<a href="[Link]" class=”vinotinto”>Cabernet Sauvignon</a><br/>
<a href="[Link]" class=”vinotinto”>Merlot</a><br/>
<a href="[Link]" class=”vinotinto”>Pinot Noir</a><br/>
</p>
A partir de aquí, podemos definir propiedades especiales para los enlaces que hacen
referencia al vino tinto y al vino blanco, respectivamente.
a {
color: blue;
}
[Link]{
color: #FFBB00;
}
[Link] {
color: #800000;
}
Como se muestra en el ejemplo, se pueden definir las propiedades para los elementos
que pertenecen a una clase usando .nombredelaclase en la hoja de estilo del
documento.
En el ejemplo anterior definimos el formato para los enlaces de las clases vinoblanco y
vinorojo, pero son elementos a. Si queremos definir una clase genérica que se aplica a
cualquier elemento solamente es necesario especificar el punto y el nombre de la clase, no
el elemento. Por ejemplo
.vinoblanco{
color: #FFBB00;
}
En este ejemplo no hemos definido elemento, solo una clase. Ahora, cualquier
elemento que tenga vinoblanco como valor de atributo class tendrá el texto del color
especificado.
14.1.2 Identificadores
Los elementos HTML disponen de un atributo global llamado id (identificador) cuya
finalidad es la de asignar una identificación unívoca al elemento. De esta forma, CSS u otro
lenguaje podrá seleccionarlo y distinguirlo de los demás. A través del atributo id se asigna
al elemento un nombre o una expresión que lo distingue de los demás. Sería el caso del
siguiente párrafo:
Página 105
Rafael Lozano Introducción a los Lenguajes de Marcas
<p id="despedida">
Con el símbolo almohadilla (#) y el nombre del identificador se seleccionarán sólo los
párrafos del documento HTML identificados como despedida. La fuente de estos párrafos
tendrá un tamaño de 14 píxeles; la del resto tendrá el tamaño especificado en el documento
HTML.
Lo que hace especial al atributo id es que no pueden existir dos elementos dentro del
mismo documento con el mismo id. Cada id tiene que ser único. En cualquier otro caso, se
debería usar el atributo class en su lugar. Ahora, examinemos un ejemplo de un posible
uso del atributo id.
<h1>Capítulo 1</h1>
...
<h2>Capítulo 1.1</h2>
...
<h2>Capítulo 1.2</h2>
...
<h1>Capítulo 2</h1>
...
<h2>Capítulo 2.1</h2>
...
<h3>Capítulo 2.1.2</h3>
...
Página 106
Rafael Lozano HTML y CSS
Digamos que el título del capítulo 1.2 tiene que estar en rojo. Usando el código CSS
necesario, se podría hacer así:
#c1-2 {
color: red;
}
Digamos que queremos que lo que el señor Franklin considera como las ventajas de
no pasarse todo el día durmiendo, aparezca enfatizado en rojo. Para este fin, podemos
marcar dichas ventajas con el elemento span. A cada elemento span se le añade el atributo
class, que podemos definir así en nuestra hoja de estilo:
<p>
El que pronto se acuesta y pronto se levanta,es hombre <span
class="ventaja">saludable</span>,<span
class="ventaja">rico</span>y <span class="ventaja">sabio</span>.
Página 107
Rafael Lozano Introducción a los Lenguajes de Marcas
</p>
.ventaja {
color:red;
font-weight: bold;
}
Por supuesto, se puede usar también el atributo id para añadir estilo a los elementos
definidos con span. Pero recuerda que tendrás que aplicar siempre un atributo id único
para cada uno de los tres elementos span, tal como vimos anteriormente.
<div id="democratas">
<h1>Presidentes demócratas</h1>
<UL>
<LI>FrankLIn D. Roosevelt</LI>
<LI>Harry S. Truman</LI>
<LI>John F. Kennedy</LI>
<LI>Lyndon B. Johnson</LI>
<LI>Jimmy Carter</LI>
<LI>Bill CLInton</LI>
</UL>
</div>
<div id="republicanos">
<UL>
<LI>Dwight D. Eisenhower</LI>
<LI>Richard Nixon</LI>
<LI>Gerald Ford</LI>
<LI>Ronald Reagan</LI>
<LI>George Bush</LI>
<LI>George W. Bush</LI>
</UL>
</div>
En nuestra hoja de estilo podemos utilizar la agrupación del mismo modo que antes:
#democratas {
background-color:blue;
}
#republicanos {
background-color:red;
Página 108
Rafael Lozano HTML y CSS
14.3 Capas
En los ejemplos anteriores, sólo hemos usado div y span con cosas muy sencillas
como, por ejemplo, texto y colores de fondo. Por ahora nos sirve a modo de introducción
pero ambos elementos tienen el potencial para realizar cosas más avanzadas, sobre todo
div el cual se usa para definir capas.
Como ya hemos visto en el apartado anterior, span sirve para aplicarle estilo a una
pequeña parte de una página HTML. Por ejemplo, con ella podríamos hacer que una parte
de un párrafo se coloree en rojo. Con span no es habitual englobar un trozo muy grande de
texto, por ejemplo el que comprenda a varios párrafos. Con div también podemos aplicar
estilo a partes de la página HTML.
La diferencia entre span y div es que con esta última si que podemos aplicar estilo a
una parte más amplia de la página, por ejemplo a tres párrafos. Además que el elemento
div tiene un uso adicional que es el de crear divisiones o fragmentos en la página a las que
podremos aplicar un formato específico. Su uso más destacado es el de convertir esa
división en una capa.
Una capa es una división, una parte de la página, que tiene un comportamiento muy
independiente dentro de la ventana del navegador, ya que la podemos colocar en cualquier
parte de la misma y le aplicaremos un formato concreto a los elementos incluidos dentro de
la capa.
Mediante los atributos style, class e id podremos modificar de una manera muy
exhaustiva la presentación de los contenidos en las capas en la página. Sin embargo, a la
hora de dar formato a una capa no solo dispondremos de las propiedades CSS que hemos
visto hasta ahora, sino que también disponemos de otras propiedades nos sirven para
posicionar la capa en la página.
Aparte de los elementos vistos hasta ahora, es posible dotar a una página web de una
buena estructura mediante el uso de capas. Éstas son divisiones o secciones lógicas dentro
del documento en cuestión y se obtienen mediante la inclusión en el mismo de elementos
div. Este elemento permite dividir el documento en grandes secciones (a diferencia de
span, destinado a especificar pequeñas porciones del mismo) y dotar a éstas de un
comportamiento relativamente independiente con el uso de las propiedades adecuadas.
La capa, en cualquier caso, no es una simple división, sino más bien, un cuadro. Se
compone de un área de contenido, el espacio alrededor de esa área (padding o relleno), el
lado exterior del relleno (border o borde) y el espacio invisible alrededor del borde
(margin o margen). Además, la capa tendrá un posicionamiento (lugar que ocupa en la
pantalla) y unas dimensiones (alto y ancho).
El tratamiento de los elementos como capas puede resultar muy práctico para el
desarrollador. Por una parte, identificar los distintos elementos y colocarlos en capas
siguiendo un orden lógico servirá para tener el documento perfectamente estructurado en
Página 109
Rafael Lozano Introducción a los Lenguajes de Marcas
secciones o divisiones. Por otra parte, a través de las propiedades adecuadas se puede
determinar tanto la apariencia como la posición del cuadro de cada elemento y al hacerlo,
tener bajo control la presentación de la página, estableciendo dónde y cómo queremos que
se sitúen las capas, es decir, los grupos de textos, imágenes, etc.
Para situar las capas se debe:
✔ Dejar la capa en el flujo del documento . De esta forma será tratada como un
elemento y será situada de acuerdo al orden en que aparece en el código. Esta
opción es la que se usa por defecto si no se tienen definidas hojas de estilo que
controlen el posicionamiento de los elementos.
✔ Especificar sus coordenadas exactas. Se debe hacer con respecto a su elemento
padre o a la ventana del navegador. Además, si las capas se solapan, es necesario
especificar el orden en que lo hacen. Ésta es la opción que se usará para controlar la
ubicación de los elementos de la página.
Una vez determinado el lugar en que aparecen las capas, se podrá controlar su
apariencia, o sea, su relleno, borde, márgenes, tamaño, alineación o color. Todo ello a través
de una serie de propiedades que hacen referencia al modelo de caja de CSS y que se verán
en el siguiente apartado.
Decir también, que las capas pueden anidarse, es decir, podemos crear capas dentro
de otras capas.
<div>
<p>Este es el contenido de nuestra caja.</p>
<p>Este es el contenido de nuestra caja.</p>
<p>Este es el contenido de nuestra caja.</p>
<p>Este es el contenido de nuestra caja.</p>
</div>
div {
background-color: #be4061;
background-image: url('[Link]');
Página 110
Rafael Lozano HTML y CSS
p {
margin: 0 0 20px 0; /*margen inferior de 20 px para el
párrafo*/
padding: 0;
}
El código anterior generará una caja como la que muestra la figura siguiente, en la que
adicionalmente se ha dado color a los elementos transparentes (margen y relleno) solo para
hacerlos visibles.
Página 111
Rafael Lozano Introducción a los Lenguajes de Marcas
14.4.1 Margen
Todo elemento tiene cuatro lados: derecho, izquierdo, superior e inferior. La propiedad
margin hace referencia a la distancia desde cada lado respecto al elemento colindante, o
respecto a los bordes del documento.
En un primer ejemplo, veremos cómo definir los márgenes del documento en sí, es
decir, del elemento body. La imagen siguiente muestra cómo queremos que sean los
márgenes de nuestras páginas.
BODY {
margin-top: 100px;
margin-right: 40px;
margin-bottom: 10px;
margin-left: 70px;
}
O podrías elegir usar la versión combinada de margin, que queda como más
elegante:
BODY {
margin: 100px 40px 10px 70px;
}
Se puede establecer los márgenes de casi todos los elementos del mismo modo. Por
ejemplo, podemos elegir definir márgenes para todos los párrafos de texto marcados con el
elemento p
Página 112
Rafael Lozano HTML y CSS
BODY {
margin: 100px 40px 10px 70px;
}
P {
margin: 5px 50px 5px 50px;
}
Si se aplica los márgenes a una capa, elemento div, entonces indica el margen que se
deja entre el contenido de la capa y los bordes de la misma.
14.4.2 Relleno
La propiedad padding puede entenderse como "relleno". Esto tiene sentido puesto
que el relleno no afecta a la distancia de un elemento respecto a otros elementos, sino que
sólo define la distancia interior entre el borde y el contenido del elemento.
El uso de la propiedad padding se puede ilustrar viendo un sencillo ejemplo en el
que todos los títulos tienen diferentes colores de fondo. Al definir el padding para los
títulos, cambiamos la cantidad de "relleno" que habrá alrededor del texto en cada uno de
ellos:
h1 {
background: yellow;
padding: 20px 20px 20px 80px;
}
h2 {
background: orange;
padding-left:120px;
}
14.4.3 Bordes
La propiedad border se vio en detalla en el capítulo dedicado a tablas en el que lo
empleabamos para poner bordes a las celdas y la tabla. Lo explicado entonces es aplicable
a cualquier elemento a que queramos poner un borde: encabezados, párrafos, capas, etc.
Aquí vamos a explicar otras propiedades nuevas de CSS3 que tienen que ver con los
bordes y que son las siguientes:
Página 113
Rafael Lozano Introducción a los Lenguajes de Marcas
div {
border: 1px solid #000000;
border-radius: 7px;
padding: 10px;
}
Con esto conseguimos que todas los elementos div tengan un borde redondeado en
las esquinas de radio de 7 píxeles. Pero la propiedad border-radius tiene otras posibles
configuraciones, en la que se pueden definir los valores para el radio de las cuatro esquinas
por separado. De esta manera:
Así estaríamos definiendo un borde redondeado con radio de 7 píxeles para la esquina
superior izquierda, luego 27 píxeles para la esquina superior derecha, de 100 píxeles para la
inferior derecha y 10 píxeles para la inferior izquierda.
[Link] Sombra
El atributo box-shadow se emplea para crear sombra a los elementos. Este requiere
varios valores para especificar las características de la sombra, como difuminado, separación
de la sombra y la propia caja o color. La sintaxis es
Página 114
Rafael Lozano HTML y CSS
hacer la sombra, lo que nos dará bastante más versatilidad a los diseños gracias a la
posible utilización de sombras en distintos colores, que puedan combinar mejor con
nuestra paleta.
En el ejemplo siguiente vamos a crear una capa con una sombra desplazada 5 píxeles
a la derecha, 9 píxeles arriba, 3 píxeles de difuminado y con color gris.
#caja_con_sombra {
background-color: cyan;
width: 300px;
height: 400px;
padding: 10pt;
border: 1px solid black;
box-shadow: 5px -9px 3px gray;
}
En el siguiente ejemplo es para una sombra un poco menor, también desplazada hacia
abajo y a la derecha y con un difuminado de 2 píxeles. Además hemos indicado un color
amarillo claro para la sombra, por lo que, para verla bien, tendríamos que colocar este
elemento sobre un fondo oscuro.
#sombraclara{
width: 200px;
padding: 10px;
background-color: #999;
color: #fff;
En este tercer ejemplo tenemos un caso curioso de sombra, pues está aplicada sobre
un elemento que tiene las esquinas redondeadas con CSS 3. Así pues, la sombra también
debe tener las sombras redondeadas, para ajustarse al elemento que la produce.
#sombraredondeada{
background-color: #090;
color: #fff;
width: 400px;
padding: 10px;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
Página 115
Rafael Lozano Introducción a los Lenguajes de Marcas
como borde.
✔ border-image-slice: Indica el espacio de la imagen que será visible como
borde, en los cuatro lados del elemento, es decir, top, right, bottom y left. Si indicamos
un solo valor significa que es el mismo en los cuatro lados.
✔ border-image-width: Para indicar la anchura del borde.
✔ border-image-outset: Nos sirve para indicar el área en la que la imagen de
borde se extiende más allá del área del elemento, en los 4 lados del mismo.
✔ border-image-repeat: Permite indicar si se desea que se repita la imágen del
borde haciendo un mosaico (valor repeat), que se estire (valor stretch) o que se
redondee (valor round).
Además disponemos de la propiedad abreviada border-image la cual tiene la
siguiente sintaxis:
<div id="capaborde">
Esta capa le voy a poner un borde arriba
</div>
#capaborde{
border-image: url([Link]) 10% 10% 10% 10% stretch;
padding:20px;
width: 100px;
}
Figura 50.-
Imagen para
borde
Analicemos la propiedad border-image.
En primer lugar hemos puesto la imagen almacenada en el archivo [Link]. Hay que
usar solamente el 10% de la imagen en cada una de las coordenadas. Como las cuatro son
Página 116
Rafael Lozano HTML y CSS
iguales, tabmién podríamos haber puesto solamente 10% una vez. Si este tamaño es
diferente para cada uno hay que especificarlos en el orden de las agujas del reloj, es decir,
arriba, derecha, abajo e izquierda. Se pueden expresar en porcentajes o sin ninguna unidad
de medida para expresar píxeles exactos. La última parte, donde hemos puesto el valor
stretch, determina cómo se van a escalar y cortar los bordes de los lados y superior e
inferior de nuestro elemento. Hay tres posibles valores:
✔ stretch (estirar)
✔ repeat (repetir)
✔ round (redondear)
Si especificamos sólo un valor es como poner dos veces el mismo. El valor por defecto
es “stretch”.
[Link] Contorno
Una nueva propiedad de la versión 3 de CSS nos permite establecer contornos sobre
los elementos. Un contorno es una línea alrededor del elemento, pero a diferencia del
borde, los contornos no ocupan espacio y no tienen por que ser rectangulares. Además, el
contorno no se puede diferenciar arriba, abajo, izquierda o derecha. Si se establece, será el
mismo para todos.
Disponemos de tres propiedades para establecer un contorno:
✔ outline-color, color del contorno.
✔ outline-style, estilo del contorno. Se admiten los mismos valores que para la
propiedad border-style.
✔ outline-width, ancho del contorno.
Además disponemos también de la propiedad abreviada outline con la siguiente
sintaxis.
Por ejemplo
div {
outline: darkblue solid 1px;
padding: 10px;
}
14.4.4 Dimesión
Con la propiedad width se puede definir la anchura concreta de un elemento. El
sencillo ejemplo que sigue nos proporciona una caja en la que se puede introducir texto:
.box {
Página 117
Rafael Lozano Introducción a los Lenguajes de Marcas
width: 200px;
border: 1px solid black;
background: orange;
}
.box {
height: 500px;
width: 200px;
border: 1px solid black;
background: orange;
}
14.4.5 Desborde
La propiedad overflow sirve en el modelado de cajas para indicar al navegador qué
es lo que debe hacer con el contenido que no cabe dentro de una capa, según las
dimensiones que se le han asignado.
Como sabemos, a las capas (elementos div) podemos asignarles un tamaño, en
anchura y altura. Pero muchas veces el contenido que colocamos en la capa sobrepasa el
espacio que hemos destinado a ella. Entonces lo que suele ocurrir es que la capa crece lo
suficiente para que el contenido colocado dentro quepa. Habitualmente las capas crecen en
altura, por lo que a más contenido más tamaño tendrá en altura. Este es un comportamiento
que podemos alterar con el uso de la propiedad overflow.
Dicho de otro modo, overflow permite que se recorte el contenido de una capa, para
mostrar únicamente el contenido que quepa, según sus dimensiones. Para acceder al
contenido que no se muestra, porque no cabe en la capa, se puede configurar overflow
para que aparezcan unas barras de desplazamiento.
Sus posibles valores son
Página 118
Rafael Lozano HTML y CSS
✔ visible: Este valor indica que se debe mostrar todo el contenido de la capa,
aunque no quepa en tamaño con la que la hemos configurado. La capa tiene el
tamaño marcado, pero el contenido se sigue viendo, aunque fuera del espacio donde
de la capa, pudiendo superponerse a un texto o imagen que hubiera debajo.
✔ hidden: Este valor indica que los contenidos que, por el tamaño de la capa, no
quepan en la misma, se deben recortar. Por ello, la capa tendrá siempre el tamaño
configurado, pero los contenidos en ocasiones podrán no verse por completo.
✔ scroll: Este valor indica que la capa debe tener el tamaño que se haya configurado
inicialmente y que además se deben mostrar unas barras de desplazamiento, para
mover el contenido de la capa dentro del espacio de la misma. Las barras de
desplazamiento siempre salen, se requieran o no.
✔ auto: Con este valor también se respetarán las dimensiones asignadas a una caja. El
contenido será recortado, pero aparecerán las barras de desplazamiento para
moverlo. Sin embargo, en este caso las barras de desplazamiento podrán salir o no,
depende de si son necesarias o no para ver todo el contenido de la capa.
Así pues, la propiedad overflow nos permitirá tener un mayor control sobre los
espacios que destinamos a cada caja de nuestro diseño. Es muy utilizado para mostrar
textos largos, que se desean integrar dentro de otro texto o una interfaz donde no tenemos
espacio disponible para colocarlos o no deseamos que crezcan más de la cuenta. Por
ejemplo
Página 119
Rafael Lozano Introducción a los Lenguajes de Marcas
<div id="picture">
<img src="[Link]" alt="Bill Gates">
</div>
<h3>A floating image</h3>
<p>Iste quidem veteres inter ponetur … </p>
#picture {
float:left;
width: 100px;
}
Página 120
Rafael Lozano HTML y CSS
Una propiedad muy relacionada con float es clear se usa para controlar cómo se
comportarán los elementos que siguen a los elementos flotantes de un documento.
Por defecto, los elementos siguientes se mueven hacia arriba para rellenar el espacio
disponible que quedará libre al flotar una caja hacia un lado. Echa un vistazo al ejemplo
anterior en el que el texto se desplaza de forma automática hacia arriba junto a la imagen de
Bill Gates.
La propiedad clear puede tomar los valores: left, right, both o none.
✔ Si un elemento tiene establecido el valor en left significa que no puede tener
elementos flotantes a su izquierda, es decir, aparecerá al borde izquierdo de la
página.
✔ Si un elemento tiene establecido el valor en right significa que no puede tener
elementos flotantes a su derecha, es decir, aparecerá sin nada a su derecha.
✔ Si un elemento tiene establecido el valor en both significa que no puede tener
elementos flotantes a su derecha e izquierda. Estará solo en el borde izquierdo de la
página.
✔ Si un elemento tiene establecido el valor en none (por defecto) significa que podrá
tener elementos flotantes a su izquierda y derecha.
Si en el ejemplo anterior quisieramos evitar que el párrafo rodeara a la imagen
tendríamos que asignar al párrafo la propiedad float con valor both.
#picture {
float: left;
width: 100px;
}
.floatstop {
clear:both;
}
14.6 Visibilidad
Para definir si un elemento se visualiza o no tenemos dos propiedades.
La propiedad visibility se utiliza para definir la visibilidad de un elemento. Con
esta propiedad podemos decir que ciertos elementos de la página sean visibles o invisibles,
pero atención, aunque un elemento sea invisible, continúa ocupando espacio en la página.
Si queremos que no sea invisible y no se le reserve espacio en la página, hay que utilizar la
propiedad display.
Los posibles valores de visibility son:
✔ visible, que hace que el elemento se vea (valor por defecto).
✔ hidden, que hace que el elemento sea invisible, aunque continúe ocupando
espacio.
Página 121
Rafael Lozano Introducción a los Lenguajes de Marcas
14.7 Opacidad
Con la propiedad opacity establecemos el nivel de opacidad de un elemento. Admite
valores entre 0 (completamente transparente, es decir, el elemento no se ve) hasta 1
(completamente opaco, el elemento se ve completamente). Valores intermedios dan al
elemento un grado de transparencia. Veamos un ejemplo
div {
border: 1px solid #000000;
opacity: 0.5;
padding: 10px;
}
14.8 Posicionamiento
Con posicionamiento CSS, se puede colocar un elemento en el lugar exacto que se
quiera de la página. Antes de ver el posicionamiento debemos de comprender el sistema de
coordenadas que emplea CSS. Imagina la ventana de un navegador como un sistema de
coordenadas como el siguiente.
Página 122
Rafael Lozano HTML y CSS
Los principios que rigen el posicionamiento CSS consisten en que se puede colocar
cualquier caja en cualquier lugar del sistema de coordenadas.
Las propiedades para establecer el posicionamiento de un elemento son las
siguientes:
✔ position.- Indica el tipo de posicionamiento.
✔ top.- Establece la coordenada superior del elemento.
✔ left.- Establece la coordenada izquierda del elemento.
✔ rigth.- Establece la coordenada derecha del elemento.
✔ bottom.- Establece la coordenada inferior del elemento.
Sin embargo, la posición de los elementos en una página dependerá de su tipo de
posicionamiento y de donde se encuentre colocados en el código HTML. Vamos a ver como
se comportarían los elementos en sus diferentes tipos de posicionamiento.
Página 123
Rafael Lozano Introducción a los Lenguajes de Marcas
#box1 {
position:absolute;
top: 50px;
left: 50px;
}
#box2 {
position:absolute;
top: 50px;
right: 50px;
}
#box3 {
position:absolute;
bottom: 50px;
right: 50px;
}
#box4 {
position:absolute;
bottom: 50px;
left: 50px;
}
Página 124
Rafael Lozano HTML y CSS
posicionado.
Veamos el siguiente ejemplo
<h1>Título 1</h1>
<div style="background-color: #606; color:#ffc; padding:10px;
text-align: center; width: 300px;">
Capa 1 de prueba
</div>
<h1>Título 1</h1>
El resultado sería
Página 125
Rafael Lozano Introducción a los Lenguajes de Marcas
<h1>Título 1</h1>
Se puede ver que hay varias capas con position: fixed y un montón de elementos
salto de línea br para que la página pueda tener un desplazamiento. Si vemos la página en
marcha y nos desplazamos hacia abajo con la barra de desplazamiento, veremos que las
capas fixed siempre mantienen la misma posición.
14.9 Apilamiento
CSS funciona sobre tres dimensiones: altura, anchura y profundidad. En apartados
anteriores hemos examinado las dos primeras dimensiones. En este apartado,
aprenderemos cómo hacer que diferentes elementos se conviertan en capas. En pocas
palabras, esto hace referencia al orden en que los elementos se superponen unos con
respecto a otros.
Para tal propósito, se puede asignar a cada elemento un número por medio de la
propiedad z-index. El sistema consiste en que el elemento con un número mayor se
superpone al elemento con un número menor.
Página 126
Rafael Lozano HTML y CSS
#diez_de_diamantes {
position: absolute;
left: 100px;
top: 100px;
z-index: 1;
}
#sota_de_diamantes {
position: absolute;
left: 115px;
top: 115px;
z-index: 2;
}
#reina_de_diamantes {
position: absolute;
left: 130px;
top: 130px;
z-index: 3;
}
#rey_de_diamantes {
position: absolute;
left: 145px;
top: 145px;
z-index: 4;
}
#as_de_diamantes {
position: absolute;
left: 160px;
Página 127
Rafael Lozano Introducción a los Lenguajes de Marcas
top: 160px;
z-index: 5;
}
El método es relativamente sencillo pero las posibilidades que ofrece son múltiples. Es
posible colocar imágenes sobre el texto, texto sobre imágenes, etc.
15 Listas
Una lista es un conjunto de elementos con algún tipo de relación entre ellas. Por
ejemplo, los ingredientes de una receta de cocina o una lista de la compra. Una forma
habitual de organizar la información en un texto es hacer uso de:
✔ Listas de términos, precedidos de un punto o cualquier otro símbolo.
✔ Listas numeradas alfabéticamente, o con números arábicos o romanos, y cuyos
elementos se diferencia con este número o letra.
✔ Listas simples sin indicaciones o separadores.
✔ Términos y sus definiciones.
✔ Listas en las que los elementos se distribuyen en columnas.
✔ Listas de varios de los tipos anteriores anidadas las unas en las otras
Todos estos tipos de listas, son las que podremos definir con ayuda de las directivas
que HTML dispone para ello. Todas se explican a continuación, pese a ser empleadas
solamente unas cuantas de ellas.
El resultado sería
Página 128
Rafael Lozano HTML y CSS
Esto nos define una lista de ingredientes, con un bullet o punto al lado del nombre de
cada ingrediente. Debe de hacerse notar que el elemento li hace referencia siempre a un
elemento de un tipo de lista, y que tras el siguiente li, hace un retorno de carro, pero no
deja una línea en blanco.
Página 129
Rafael Lozano Introducción a los Lenguajes de Marcas
Vemos que por defecto los elemento de la lista se numeran con números arábigos.
<dl>
<dt>Coche
<dd> Vehículo de 4 o más ruedas que sirve para desplazar
cosas, personas o animales.
<dt>Moto
<dd>Vehículo de dos, tres o cuatro ruedas que sirve para
desplazar una o dos personas o animales.
</dl>
El resultado es
Página 130
Rafael Lozano HTML y CSS
¿Cómo hacerlo?, sólo hay que tener presente que un elemento de una lista puede ser
cualquier otro elemento HTML, por ejemplo otra lista. Este es un ejemplo de lista anidada:
Página 131
Rafael Lozano Introducción a los Lenguajes de Marcas
ul | ol { list-style-type: none |
disc |
circle |
square |
decimal |
decimal-leading-zero |
lower- roman |
upper-roman |
lower-alpha |
upper-alpha |
lower-greek |
lower-latin |
upper-latin |
hebrew |
armenian |
georgian |
cjk-ideographic |
hiragana |
katakana |
hiragana-iroha |
katakana-iroha }
ul | ol { list-style-image: url(url_imagen); }
Esto hace que se reemplace la viñeta de la lista por la imagen indicada en el fichero
url_imagen. Naturalmente la imagen de la viñeta debe ser pequeño, de unos 16 o 22
pixeles como máximo.
Hay que tener en cuenta que cada navegador presenta en pantalla los elementos con
algunas pequeñas diferencias entre sí. En esta captura de pantalla se puede observar como
varía la posición de la viñeta (y el interlineado también) en tres navegadores distintos:
Página 132
Rafael Lozano HTML y CSS
En el ejemplo anterior se tomaron los valores por defecto de cada navegador, es decir,
no se modificó el tamaño ni tipo de letra ni el interlineado de la lista.
La otra opción es anular la viñeta y añadir una imagen de fondo a los elementos li.
Esto permite desplazar la imagen en el eje X e Y. Por ejemplo
li{
list-style: none;
background-image: url('[Link]');
background-position: left bottom;
background-repeat: no-repeat;
padding-left: 15px;
}
li{
list-style: none;
background: url('[Link]') left bottom no-repeat;
padding-left: 15px;
}
Página 133
Rafael Lozano Introducción a los Lenguajes de Marcas
Por defecto es outside, lo cual indica que la viñeta o numeración quedan fuera del
texto del elemento de lista. Esto provoca que si el texto del elemento ocupa más de una
línea en la pantalla del navegador, entonces la viñeta o numeración quedan fuera de éste.
Página 134
Rafael Lozano HTML y CSS
ul {
list-style-image: url(url_imagen);
}
Para los elementos del segundo nivel de la lista habría que poner la siguiente regla.
ul ul {
list-style-image: url(url_imagen);
}
ul ul ul{
list-style-image: url(url_imagen);
}
Ahora, la regla anterior se aplicará a todos los elementos ul que están dentro de otro
ul y este a su vez dentro de ontro ul. Asi sucesivamente, podemos ir añadiendo ul al
selector para obtener el formato de los siguientes niveles.
ul {
list-style-image: url('[Link]');
}
ul ul {
list-style-image: url('[Link]');
}
ul ul ul {
list-style-image: url('[Link]');
}
15.5.5 Contadores
Para las listas multinivel también podemos crear un esquema numerado. Un esquema
Página 135
Rafael Lozano Introducción a los Lenguajes de Marcas
numerado sería una lista numerada en la que los elementos se numerán con la numeración
del elemento del que subyace, como por ejemplo el índice de este documento.
Para crear un esquema numerado tenemos que utilizar la función counter() junto
con las propiedades counter-reset y counter-increment. Además, tendremos que
asignar estas propiedades a la pseudoclase :before asignando valores a la propiedad
content.
Veamos por separado cada una de estos conceptos
La propiedad counter-reset inicializa el valor de un contador. El nombre del
contador es a elección del desarrollador. Por ejemplo, para inicializar un contador llamado
nivel1 tendríamos que escribir la siguiente regla.
body {
counter-reset: nivel1
}
La regla anterior hace que el contador nivel1 se inicialice con el valor 0 al aplicar
formato al cuerpo del documento. También podríamos haber indicado un número al lado del
nombre del contador para establecer su valor inicial.
La propiedad counter-increment se emplea para incrementar un contador. Por
ejemplo, para incrementar el contador inicializado antes podríamos escribir lo siguiente
counter-increment: nivel1;
body {
counter-reset: nivel1 nivel2 nivel3;
}
Ahora tenemos que asignar a los elementos del primer nivel la numeración de ese
nivel. Al ser listas numeradas vamos a crear la siguiente regla
ol li:before {
counter-increment: nivel1 1;
counter-reset: nivel2;
content: counter(nivel1) ".- ";
Página 136
Rafael Lozano HTML y CSS
La regla anterior utiliza un selector algo complejo. Indica que antes del elemento li,
dentro de un elemento lo, hay que incrementar el contador del nivel uno, inicializar el
contador del nivel dos e insertar antes del texto del documento la numeración del nivel uno
y un punto guión como separador de la numeración y el texto del elemento.
La siguiente regla es para los elementos de la lista de nivel 2.
ol ol li:before {
counter-increment: nivel2;
counter-reset: nivel3;
content: counter(nivel1) "." counter(nivel2) ".- ";
}
Es muy similar a la anterior, pero ahora el contador que se incrementa es el del nivel
dos. Hay que inicializar el contador del nivel 3 e insertar la numeración de este nivel con su
separador antes del texto de cada elemento de la lista.
Por último, tenemos la regla para los elementos del nivel 3. Sería la siguiente
ol ol ol li:before {
counter-increment: nivel3;
content: counter(nivel1) "." counter(nivel2) "."
counter(nivel3) ".- ";
}
ol {
list-style-type: none;
}
Página 137
Rafael Lozano Introducción a los Lenguajes de Marcas
<li>Navegadores web
<li>Búsquedas en Internet
<li>Búsquedas en Internet
</ol>
<li>Correo electrónico
<li>Redes sociales
</ol>
<li>Amenazas en Internet
</ol>
16 Formularios
Un formulario es un documento para introducir unos datos que posteriormente son
registrados o procesados. Un formulario web permite al usuario introducir datos los cuales
son enviados a un servidor web que se encargará de procesarlos.
En la web hay multitud de sitios web donde el usuario tiene que introducir información:
una página de registro en una red social, un mensaje de correo electrónico, una compra de
productos en una venta online, etc.
En un formulario web los datos se introducen en uns elementos especiales llamados
controles. Existen controles de diferente tipo para adaptarse al tipo de información que hay
que introducir en ellos. Por ejemplo, un cuadro de texto servirá para introducir un fragmento
de texto tecleado por el usuario, una casilla de verificación se emplea para introducir un dato
que solo puede tener dos posibles valores, una lista desplegable consiste en un conjunto de
datos de los cuales el usuario tiene que elegir uno.
Los formularios web han sufrido un avance muy importante en la nueva versión de
HTML. No solo se han introducido nuevos controles sino también hay nuevos atributos para
flexibilizar el uso del formulario por parte del usuario y para facilitar la tarea del desarrollador
web. En este capítulo vamos a ver todas estas nuevas características.
Página 138
Rafael Lozano HTML y CSS
Página 139
Rafael Lozano Introducción a los Lenguajes de Marcas
<fieldset>
<legend>Título del formulario </legend>
…
controles del formulario
…
</fieldset>
</form>
El elemento form contiene todo el formulario. Este incluye uno o varios elementos
fieldset que se emplean para agrupar los controles de formulario. Un elemento legend
puede utilizarse para dar un título al formulario. El elemento form tiene varios atributos, los
más habituales son los siguientes:
Atributo Descripción
action=URL Este atributo especifica la URL de la aplicación web que recibe los
datos del formulario y los procesa.
method= get | Este atributo especifica qué método HTTP se usará para enviar el
post conjunto de datos del formulario. Los valores posibles (que no
distinguen entre mayúsculas y minúsculas) son "get" (valor por
defecto) y "post".
✔ Get. Con este método, el conjunto de datos del formulario
se agrega al URL especificado por el atributo action (con un
signo de interrogación ("?") como separador) y este nuevo
URL se envía al programa que procesará los datos del
formulario.
✔ post. Con este método, el conjunto de datos del
formulario se incluye en el cuerpo del formulario y se envía
a la aplicación web
Página 140
Rafael Lozano HTML y CSS
<form action="[Link]
Página 141
Rafael Lozano Introducción a los Lenguajes de Marcas
method="post" accept-charset="utf-8">
…
</form>
<form action="[Link]
method="post" accept-charset="utf-8">
<fieldset>
<legend>Pide tu pizza express</legend>
…
</fieldset>
</form>
Atributo Descripción
Página 142
Rafael Lozano HTML y CSS
Página 143
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 144
Rafael Lozano HTML y CSS
Vemos que el atributo for del elemento label contiene el id del cuadro de texto.
También podríamos haberlo definido así
Página 145
Rafael Lozano Introducción a los Lenguajes de Marcas
Además, un elemento input dispone de una serie de atributos, muchos de los cuales
son comunes a la mayoría de los tipos de controles. Estos son:
Atributo Descripción
id = variable Estos atributos son fundamentales y obligatorio su uso en al
name = variable menos uno de ellos. Contiene el nombre que recibe la variable en
la que se almacena la entrada del formulario o datos que el
visitante teclee o marque. Debería usarse id, pero name se
incluye por compatibilidad con versiones anteriores. Para
asegurarse, es recomendable utilizar ambos.
value=“valor Es un atributo que nos sirve para dar un valor inicial del campo
numérico/texto” que deseemos. Esto es muy útil si por ejemplo en el caso de
controles que tienen un valor por defecto que raramente cambia.
Así, si el valor esta preestablecido, en la mayoría de las ocasiones
el usuario no tendrá que teclearlo.
En el caso de los botones de envío (<input type=”submit”>)
y de reinicio del formulario (<input type=”reset”>) sirve para
cambiar los mensajes que por defecto muestran estos botones.
Modificando este valor para estos botones, podremos poner el
texto que deseemos.
Hay otros controles en los que el desarrollador deberá darles un
valor inicial ya que el usuario lo seleccionará de una lista, un grupo
de botones de radio o una casilla de verificación.
size=“valor Define la longitud de la ventana de texto en caracteres.
numérico”
maxlength=“valor Es la longitud máxima del numero de caracteres que se permite al
numérico” usuario introducir en el control. El valor de maxlength no puede
ser menor que size, de forma que visualmente no tecleemos
hasta el final de la línea del formulario, dando un aspecto más
pulido, del formulario.
checked Cuando el atributo type tiene el valor radio o checkbox, este
atributo vacío especifica que el botón está marcado (on). Los
navegadores no deben tener en cuenta este atributo para otros
tipos de control.
pattern=”expresio Especifica una expresión regular a la que se tiene que ajustar el
n_regular” valor introducido en el control. Por ejemplo, si tenemos un cuadro
de texto para recoger el código postal del usuario podemos
escribir una expresión regular que solamente admita valores
númericos de cinco cifras.
multiple Este atributo vacío se establece para indicar si el control admite
más de un valor. Por ejemplo, en un cuadro de texto donde
introducimos varias direcciones de correo electrónico.
min=”nº” En el caso de controles para datos numéricos indican el valor
Página 146
Rafael Lozano HTML y CSS
<label>
Nombre <input type="text" name="nombre" size="20" maxlength=
"30" tabindex="1" required placeholder="Introduce tu nombre"/>
</label>
<label>
Apellidos <input type="text" name="apellidos" size="40"
maxlength= "60" tabindex="2" required placeholder="Introduce tus
apellidos"/>
</label>
Vemos que los cuadro de texto están introducidos dentro de elementos label para
asignarles sus etiquetas. Nótese también el uso de los atributos comúnes tanto en los
controles de formulario como en el elemento input. El aspecto del formulario con estos dos
controles de texto sería el siguiente.
<label>
Buscar <input type="search" name="buscar" size="60"
placeholder="Introduce un texto a buscar"/>
</label>
Página 147
Rafael Lozano Introducción a los Lenguajes de Marcas
16.3.5 Teléfono
El control con type=”tel” representa un cuadro de texto para introducir un número
de teléfono. Esto no quiere decir que el control solamente admite números ya que los
formatos de número de teléfono son muy variados. Así que este cuadro de texto admite
cualquier texto. Si queremos que su valor se ajuste a un formato de número telefónico
concreto tendremos que utiliar el atributo pattern. Por ejemplo
<label>
Teléfono <input type="tel" name="telefono" size="9" maxlength=
"9" tabindex="3" required placeholder="#########" pattern="[0-9]
{9}"/>
</label>
Como podemos observar hemos puesto un atributo pattern para que solamente
admita un número de nueve cifras.
16.3.6 URL
Este control textual se emplea para introducir URL's absolutas. El valor de su atributo
type es url. Veamos el siguiente ejemplo.
<label>
Dirección web <input type="url" name="direccion_web" size="50"
maxlength= "256" tabindex="4"/>
</label>
Su aspecto visual es similar a un cuadro de texto, pero solamente admite texto con
formato de URL absoluta.
16.3.7 Email
Parecido al anterior, un control con type=”email” se emplea para introducir una
dirección de correo electrónico. Es por tanto un control textual, pero el texto introducido
debe ajustarse al formato de las direcciones de correo electrónico. Por ejemplo
<label>
Email <input type="email" name="email" size="50" maxlength=
"128" tabindex="5"/>
</label>
<label>
Clave <input type="password" name="clave" size="10" maxlength=
"10" tabindex="6" required/>
</label>
Página 148
Rafael Lozano HTML y CSS
<label>
Fecha de nacimiento <input type="date" name="fecha_nac"
tabindex="7" required/>
</label>
<label>
Hora de salida <input type="time" name="hora_salida"/>
</label>
Su resultado sería
Estos tipos de controles evitan que el usuario introduzca datos erróneos en datos con
un formato muy específico.
16.3.10 Número
Es un cuadro de texto para introducir un número. Un control con type=”number”
solamente admite números. Veamos el siguiente ejemplo
<label>
Edad <input type="number" name="edad" size="2" min=”18” max=”65”
Página 149
Rafael Lozano Introducción a los Lenguajes de Marcas
tabindex="6" required/>
</label>
Como podemos apreciar, hemos incluido atributos min y max para indicar el rango
admisible de números. Su aspecto dependerá del navegador utilizado. En Google Chrome
v28 aparecería así.
Figura 67.-
Control number
16.3.11 Rango
Un control type=”range” se emplea para introducir un valor dentro de un rango de
valores. Puede parecer igual a un campo tipo number con los atributos min y max
establecidos, pero hay una diferencia. En un campo tipo range podemos introducir valores
en punto flotante, mientras que en campos tipo number solamente admite números enteros.
Los navegadores deberían presentar un control de este tipo mediante una barra
deslizante, por lo que el usuario puede establecer el valor arrastrando la barra a derecha o
izquierda. La variación del valor producido por cada desplazamiento es indicado por el
atributo step. Por ejemplo, si necesitamos un campo para introducir un porcentaje entre 0 y
100 con dos decimales podríamos poner un control de esta manera.
<label>
Porcentaje <input type="range" name="porcentaje" min="0"
max="100" step="0.01" value="0"/>
</label>
16.3.12 Color
Un control type=”color” se emplea para seleccionar un color de una paleta de
colores. Veamos el siguiente ejemplo.
<label>
Color <input type="color" name="color" value="#FF0000"/>
</label>
Página 150
Rafael Lozano HTML y CSS
Página 151
Rafael Lozano Introducción a los Lenguajes de Marcas
<fieldset>
<legend>Forma de pago </legend>
<input type="radio" name="forma_pago" value="visa"/> Visa
<input type="radio" name="forma_pago" value="ae"/> American
Express
<input type="radio" name="forma_pago" value="mc"/> MasterCard
<input type="radio" name="forma_pago" value="pp"/> Paypal
</fieldset>
En este ejemplo el usuario debe elegir una única forma de pago. El resultado sería el
siguiente
16.3.15 Fichero
Hay formularios que se emplean para subir archivos a un servidor. En este caso
debemos hacer dos cosas. La primera es codificar el formulario adecuadamente. Aquí hay
que establecer el atributo enctype del elemento form al valor multipart/form-data.
Posteriormente debemos introducir un elemento input con el valor del atributo type a
file, el cual genera un botón Examinar... que permitirá buscar un fichero en nuestro
ordenador. Dependiendo del navegador puede aparecer un cuadro de texto para escribir
directamente el nombre del archivo. Veamos un ejemplo
16.3.16 Imagen
Este control no es muy habitual usarlo. Consiste en una imagen que al hacer clic sobre
ella se envía el formulario al servidor. Hace que el navegador presente una imagen que es
sensible al ratón. Lo que el formulario envía al servidor es un registro cuyos campos son el
nombre definido para la imagen seguido de los parámetros .x=n .y=n donde n son los
números de las coordenadas x y del punto en el que estaba el ratón en el momento del
envío. Para indicar el archivo donde está la imagen se utiliza el atributo src . Este sería un
ejemplo de respuesta:
imagen.x=99&imagen.y=15
Página 152
Rafael Lozano HTML y CSS
<label>
Observaciones<br>
<textarea name="observaciones" rows="5" cols="80">
Introduzca aquí cualquier comentario a tener en cuenta.
Si dispone de alguna minusvalía física, indíquela aquí también.
</textarea>
</label>
Página 153
Rafael Lozano Introducción a los Lenguajes de Marcas
<label>Destino
<select size="7" name="destino">
<option value="MAD">Madrid</option>
<option value="BCN">Barcelona</option>
<option value="LHR">Londres</option>
<option value="GLA">Glasgow</option>
<option value="CDG">Paris</option>
<option value="AMS">Amsterdam</option>
<option value="RTM">Rotterdam</option>
<option value="SXF">Berlin</option>
<option value="MUC">Munich</option>
<option value="FCO">Roma</option>
<option value="LIN">Milán</option>
Página 154
Rafael Lozano HTML y CSS
</select>
<label>Destino
<select size="12" name="destino">
<optgroup label="España">
<option value="MAD">Madrid</option>
<option value="BCN">Barcelona</option>
</optgroup>
<optgroup label="Francia">
<option value="CDG">Paris</option>
</optgroup>
Página 155
Rafael Lozano Introducción a los Lenguajes de Marcas
<optgroup label="Holanda">
<option value="AMS">Amsterdam</option>
<option value="RTM">Rotterdam</option>
</optgroup>
<optgroup label="Alemania">
<option value="SXF">Berlin</option>
<option value="MUC">Munich</option>
</option>
<optgroup label="Italia">
<option value="FCO">Roma</option>
<option value="LIN">Milán</option>
</optgroup>
</select>
Página 156
Rafael Lozano HTML y CSS
El resultado sería
Atributo Descripción
value = “valor” Este atributo asigna al botón su valor inicial.
Página 157
Rafael Lozano Introducción a los Lenguajes de Marcas
type = submit | Este atributo declara el tipo del botón. Valores posibles:
button | reset ✔ submit: Crea un botón de envío. Este es el valor por
defecto.
✔ reset: Crea un botón de reinicialización.
✔ button: Crea un botón pulsador.
16.3.23 Lista de opciones. Elemento datalist
Una lista de datos es un conjunto de opciones que se emplea como sugerencia al
usuario a la hora de introducir un dato en un control. Por ejemplo, supongamos que en un
cuadro de texto el usuario tiene que introducir su cantante favorito. Pues bien, se le puede
mostrar una lista con un conjunto de cantantes y grupos musicales como sugerencia por si
alguno de ellos fuera su favorito. Así el usuario lo puede elegir y se asignaría al cuadro de
texto. Si ningún elemento de la lista fuera la opción del usuario, entonces tendrá que
teclearla.
A la hora de hacer una lista de opciones hay primero que definir un elemento
datalist, que contendrá elementos option por cada opción o sugerencia al usuario.
Posteriormente, hay que asignar el elemento datalist a un elemento input mediante el
atributo list. Vamos a ver un ejemplo.
<label>
Cantante o grupo favorito:
<input type="text" name="cantante" id="cantante" size="30"
maxlength="100" list="cantantes"/>
</label>
<datalist id="cantantes">
<option value="AC/DC">
<option value="Robert Palmer">
<option value="Poison">
<option value="Billy Idol">
<option value="John Cougar Mellencamp">
</datalist>
Página 158
Rafael Lozano HTML y CSS
<form>
<fieldset>
<legend>Alta en el servicio</legend>
<label for="nombre">Nombre</label>
<input type="text" id="nombre" />
Página 159
Rafael Lozano Introducción a los Lenguajes de Marcas
<label for="apellidos">Apellidos</label>
<input type="text" id="apellidos" size="50" />
<label for="dni">DNI</label>
<input type="text" id="dni" size="10" maxlength="9" />
<label for="contrasena">Contraseña</label>
<input type="password" id="contrasena" />
Aprovechando los elementos label, se pueden aplicar unos estilos CSS sencillos que
permitan mostrar el formulario con el aspecto de la siguiente imagen
En primer lugar, se muestran los elementos label como elementos de bloque, para
que añadan una separación para cada campo del formulario. Además, se añade un margen
superior para no mostrar juntas todas las filas del formulario:
label {
display: block;
margin: .5em 0 0 0;
}
.btn {
display: block;
margin: 1em 0;
Página 160
Rafael Lozano HTML y CSS
En ocasiones, es más útil mostrar todos los campos del formulario con su label
alineada a la izquierda y el campo del formulario a la derecha de cada label, como muestra
la siguiente imagen.
Por tanto, en el código HTML del formulario anterior se añaden los elementos <div>:
<form>
<fieldset>
<legend>Alta en el servicio</legend>
<div>
<label for="nombre">Nombre</label>
<input type="text" id="nombre" />
</div>
<div>
<label for="apellidos">Apellidos</label>
<input type="text" id="apellidos" size="35" />
</div>
...
</fieldset>
</form>
Y en el código CSS se añaden las reglas necesarias para alinear los campos del
Página 161
Rafael Lozano Introducción a los Lenguajes de Marcas
formulario:
div {
margin: .4em 0;
}
div label {
width: 25%;
float: left;
}
La solución consiste en aplicar la siguiente regla CSS a los fieldset del formulario:
form fieldset {
float: left;
width: 48%;
}
<form>
<fieldset>
...
</fieldset>
<fieldset>
...
</fieldset>
...
</form>
Página 162
Rafael Lozano HTML y CSS
input:focus {
border: 2px solid #000;
background: #F3F3F3;
}
Página 163
Rafael Lozano Introducción a los Lenguajes de Marcas
.boton {
display: block;
margin: .5em 0 0 0;
background-image: url('[Link]');
background-repeat: no-repeat;
background-position: center 20%;
background-color: darkseagreen;
padding-top: 50px;
border: 2px outset cyan;
}
.boton:hover {
background-color: lightgreen;
}
.boton:hover {
background-color: skyblue;
border: 2px outset SteelBlue;
background-image: url('[Link]');
}
.boton {
display: block;
margin: .5em 0 0 0;
background-image: url('[Link]');
background-repeat: no-repeat;
background-position: 5% center;
background-color: darkseagreen;
Página 164
Rafael Lozano HTML y CSS
padding-left: 60px;
height: 60px;
border: 2px outset cyan;
}
Como se puede apreciar, también hemos tenido que darle una altura al botón para
evitar que el icono de fondo se vea recortado.
18 Elementos multimedia
Las páginas web se concibieron como documentos multimedia, capaces de mostrar
todo tipo de recursos gráficos y de audio. Multimedia en sitios web se refiere al uso de la
mezcla de medios (texto, imágenes, video, audio y animación) para comunicar un mensaje.
En la web, el mensaje puede ser mediante una presentación narrativa lineal como en
una película que no permite al usuario alterar la narración, o puede ofrecer al usuario
interactuar con el medio. La elección de que medios multimedia utilizar siempre estará sujeta
a las necesidades de los usuarios del sitio web y como estos mejor satisfacen estas
necesidades de información y entrega de contenido.
La historia de multimedia en la web corre en paralelo a los aumentos en la conectividad
de Internet y con las mejoras en las tecnologías de codificación y compresión digital de los
medios como video, audio y flash. En los primeros años de Internet, durante los años de
prevalencia de conexiones conmutadas de 14.4 Kbps y 28.8 Kbps, cualquier intento de
multimedia más allá de una imagen animada (GIF animada) fue recibida con frustración por
parte de los usuarios de Internet.
Conforme los usuarios de Internet contaban con conexiones más rápidas, vimos la
evolución de la multimedia en los sitios web. Los usuarios de Internet en países con mayor
número de conexiones de alta velocidad están acostumbrados a la multimedia y se les
resulta raro encontrar un sitio web sin este tipo de contenido.
Hoy estamos viviendo un increíble y emocionante auge en el uso de la multimedia en
la web por el amplio uso de conexiones de alta velocidad en los paises más desarrollados y
por el amplio uso de dispositivos de captura de audio y video en formato digital comprimido
con la introducción de estos servicios en los teléfonos móviles.
En un capítulo anterior vimos la introducción de imágenes en nuestras páginas web. En
este capítulo veremos como introducir video y audio.
Página 165
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 166
Rafael Lozano HTML y CSS
variar entre 0 y 100. Es sólo soportada por Netscape Navigator, que en la consola
muestra el valor establecido en su indicador de volumen, siendo su valor por defecto
50. En en caso de Internet Explorer, el valor del volumen por defecto es 50 siendo
necesario actuar sobre el control de volumen de la consola para modificarlo.
✔ hidden="true | false", que establece si la consola va a ser visible (false) o
no (true). Es éste un aspecto polémico, ya que si ocultamos la consola obligamos al
usuario a oir nuestro fichero, sin posibilidad de detenerlo ni de modificar el volumen, y
si la mostramos estaremos incrustando en la pantalla un objeto que muchas veces
nos romperá el esquema de diseño de nuestra página. Queda determinar su uso en
cada caso concreto.
✔ width="w", que determina el ancho visible de la consola, en pixels.
✔ height="h", que determina el alto visible de la consola, en pixels.
✔ align="top | bottom | center | baseline | left | right |
texttop | middle | absmiddle | absbotom", análogo al del elemento
img, define la alineación horizontal o vertical de la consola respecto de los elementos
de la página.
✔ hspace="hs", que establece la separación horizontal
✔ vspace="vs", que establece la separación vertical, en pixels, entre la consola y los
elementos de la página que la redean. Análoga a sus equivelentes del elemento
<IMG>.
Por ejemplo, para reproducir audio tendríamos el siguiente elemento embed.
Página 167
Rafael Lozano Introducción a los Lenguajes de Marcas
La sintaxis general de la etiqueta object, para el caso de ficheros de sonido, es del tipo:
<objetc atributos>
<param name="nombre" value="valor">
<param name="nombre" value="valor">
...
</object>
Página 168
Rafael Lozano HTML y CSS
Página 169
Rafael Lozano Introducción a los Lenguajes de Marcas
Firefox 3.6+ NO SI SI
Safari 5+ SI NO NO
Opera 10.6+ NO SI SI
Como podemos observar no hay un formato reconocible por todos los navegadores,
así que a la hora de introducir vídeo en nuestra web deberemos indicar varios formatos para
asegurarnos de que es visualizado correctamente.
<video src="url_video"></video>
El atributo src contendrá la URL donde se encuentra el archivo de video, con lo que
podremos introducir aquí cualquier vídeo disponible en la red. Este elemento ofrece varios
atributos para establecer su comportamiento y configuración. Los atributos width y
height, al igual que en otros elementos HTML ya conocidos, declaran las dimensiones para
el elemento o ventana del reproductor. El tamaño del video será automáticamente ajustado
para entrar dentro de estos valores, pero no fueron considerados para redimensionar el
video sino limitar el área ocupada por el mismo para mantener consistencia en el diseño.
No recomiendo utilizar el atributo src para especificar la fuente del video. Este atributo
puede ser reemplazado por el elemento source y su propio atributo src para declarar
varias fuentes con diferentes formatos y de esta manera asegurarnos de que el video será
visualizado correctamente.
Veamos un ejemplo
Como podemos apreciar, hemos incluido dentro de un elemento video dos elementos
source. Cada uno de ellos hace referencia al mismo vídeo en dos formatos diferentes, mp4
y ogg. El navegador reproducirá el primero que tenga capacidad para ello. Si el navegador
no tiene capacidad para reproducir ninguno de los formatos especificados, entonces
aparecerá el texto dentro del elemento video.
El elemento vídeo tiene los siguientes atributos:
✔ controls, atributo vacío para que muestre los controles de reproducción de vídeo.
Página 170
Rafael Lozano HTML y CSS
✔ autoplay, este atributo hace que el vídeo se reproduzca en cuanto esté listo.
✔ preload, hace que el vídeo se empiece a cargar en cuanto se accede a la página.
Por el contrario, indicando preload="none", no se cargará hasta que el usuario
haga clic en el vídeo para su reproducción. Esta segunda opción es muy útil, si el
vídeo no es el recurso fundamental de la página y vamos a tener personas que no
estén interesadas en verlo, ya que nos ahorrará mucho ancho de banda.
✔ loop, atributo vacío para que el vídeo se reproduzca cíclicamente. Si no indicamos
nada, al terminar su reproducción se detendrá.
✔ muted, el vídeo no tendrá sonido al comenzar.
✔ poster, atributo vacío para indicar al navegador que muestre una imagen mientras
se espera a ser reproducido.
Página 171
Rafael Lozano Introducción a los Lenguajes de Marcas
Opera 10.6+ NO SI SI
Como podemos observar no hay un formato reconocible por todos los navegadores,
así que a la hora de introducir audio en nuestra web deberemos indicar varios formatos para
asegurarnos de que es reproducido correctamente.
<audio controls>
<source src="[Link]" type="audio/ogg">
<source src="horse.mp3" type="audio/mpeg">
Su navegador no soporta el elemento audio
</audio>
Al igual que ocurría con el vídeo, los navegadores no tienen capacidad para reproducir
todos los formatos de audio. MP3 está bajo licencia comercial, por lo que no es soportado
por navegadores como Firefox u Opera. Vorbis (el codificador de audio del contenedor
OGG) es soportado por esos navegadores, pero no por Safari e Internet Explorer. Por esta
razón, nuevamente debemos aprovechar el elemento source para proveer al menos dos
formatos entre los cuales el navegador pueda elegir.
Página 172
Rafael Lozano HTML y CSS
el servidor.
Para incrustar un video de Youtube seguir estos pasos:
1. Acceder a Youtube y seleccionar un vídeo.
2. Hacer clic en el enlace Compartir. La dirección que aparece se puede emplear en
diferentes sitios, como blogs, herramientas sociales,etc.
3. En nuestro ejemplo hacer clic en el enlace Insertar que aparece más abajo. Copiar el
pequeño código HTML que se despliega; será similar a esto que se recoge en la
figura:
19 Mapas
Los mapas de imágenes permiten especificar regiones en una imagen u objeto y
asignar una acción específica a cada región ([Link]., abrir un documento, ejecutar un programa,
Página 173
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 174
Rafael Lozano HTML y CSS
Esta directiva carga la imagen [Link], y le asigna las áreas de mapa, definidas en
el mismo documento HTML, en la parte denominada #mapa.
La definición de mapa cliente está limitada por la directiva map. En su atributo name se
inserta el nombre de la definición (en nuestro caso #mapa). Dentro de esta sección de
código, se incluyen las directivas area que definen cada una de las áreas de la imagen.
El elemento area tiene los siguientes atributos:
coords = coordenadas
Este atributo especifica la posición y la forma en la pantalla. Las coordenadas van separadas
por comas sin espacio entre ellas, de la figura que incluye el atributo shape o área que
define. El número y orden de estos valores depende de la forma que está siendo definida.
Combinaciones posibles:
• rect: x-izquierda, y-superior, x-derecha, y-inferior. Area
rectangular. Se especifican las coordenadas de las esquinas superior izquierda y la inferior
derecha, definiéndose así el área rectangular
• circle: x-centro, y-centro, radio. Área circular. Se debe especificar
en primer lugar las coordenadas del centro y continuación el radio en un valor de puntos.
Cuando el valor del radio sea un valor porcentual, los navegadores deberían calcular el valor
final del radio basándose en la anchura y altura del objeto asociado. El radio debería ser el
menor valor de los dos.
• poly: x1, y1, x2, y2, ..., xN, yN . Área poligonal. Se debe especificar
las coordenadas de todos los vértices del polígono. El primer par de coordenadas x, y debería
ser igual al último para cerrar el polígono. Cuando estas coordendas no sean iguales, los
navegadores deberían añadir un par adicional de coordenadas para cerrar el polígono. Las
coordenadas son relativas a la esquina superior izquierda del objeto. Todos los valores son
longitudes. Todos los valores van separados por comas.
nohref
Si está establecido, este atributo booleano especifica que una región no tiene asociado
ningún vínculo.
href=“url”
Página 175
Rafael Lozano Introducción a los Lenguajes de Marcas
Indica la URL a la que se accede si se pulsa sobre la zona delimitada por el área indicada, con
el ratón.
target=”destino”
Indica el nombre del marco en el que se cargaría la página web definida en el atributo href.
Es importante (aunque en absoluto necesario), definir una última área que abarque la
totalidad del gráfico que empleamos como imagen mapa, para direccionar a una URL “por
defecto”, con el objeto de contemplar el caso de que se pulse sobre un área no definida en
el código. Esto como ya he dicho no es necesario, ya que si una determinada área de la
imagen no quedara definida, como no lo está, al pinchar sobre ella, no pasaría nada.
Normalmente se suele definir el URL “por defecto”, sólo en caso de un mapa
interactivo, con excesivas áreas definidas, y muy próximas entre sí, para indicar que la zona
pinchada, no es la que visualmente se pretendía indicar... un ejemplo sería una imagen del
mundo en la que Europa se viera muy pequeña, y al querer pinchar sobre las Islas Baleares,
y debido al pequeño tamaño de la imagen, pinchamos en Córcega...
Para este ejemplo emplearemos elemento area para definir las zonas sensibles. En
este caso se supondrá una casa compuesta de un cuadrado, con un triángulo encima, un
rectángulo vertical de puerta, y con un árbol al lado de la casa.
Página 176
Rafael Lozano HTML y CSS
animaciones en los elementos de la página web con lo que se podría llegar a sustituir otras
tecnologías utilizadas hasta la fecha para estos mismos efectos, como Flash.
En este capítulo vamos a ver como crear estos efectos que añaden más atractivo a una
página web al dotar de movimiento a los elementos que la componen.
20.1 Transformaciones
Una transformación es un efecto que permite a los elementos de una página web
cambiar de tamaño, forma y posición. Con la versión 3 de CSS podemos hacer
transformaciones en 2D y 3D. Aquí nos centraremos en las primeras.
Las transformaciones 2D requieren IE10, Firefox, y Opera. Chrome y Safari necesitan el
prefijo -webkit- e IE9 el prefijo -ms-. Mediante el uso de una serie de métodos podemos
realizar las siguientes transformaciones
<div id=”muevete”>
Hola, ahora estoy quietecita, pero si introduces el ratón aquí
verás como me muevo.
</div>
#muevete {
position: absolute;
width: 200px;
height: 200px;
top: 50px;
left: 100px;
background-color: cyan;
}
#muevete:hover {
transform: translate(100px,25px);
}
En este ejemplo hemos creado una capa simple a la que hemos añadido una
transformación cuando el ratón se introduce en ella (pseudoclase :hover). La capa se
desplazará 100 píxeles en el eje x y 25 píxeles en el eje y desde su posición inicial. Al sacar
el ratón regresará al lugar donde se encontraba inicialmente.
También disponemos de los métodos translateX(n) y translateY(n) para
mover un elemento únicamente en el eje x o y respectivamente. El parámetro n indica el
desplazamiento.
Página 177
Rafael Lozano Introducción a los Lenguajes de Marcas
<div id="gira">
Hola, ahora estoy quietecita, pero si introduces el ratón aquí
verás como giro un poquito. Y si sacas el ratón recupero mi
forma inicial.
</div>
#gira {
position: absolute;
width: 200px;
height: 200px;
top: 50px;
left: 100px;
background-color: cyan;
}
#gira:hover {
transform: rotate(25deg);
}
<div id="aumenta">
Hola, ahora estoy quietecita, pero si introduces el ratón aquí
verás como crezco. Y si sacas el ratón recupero mi forma
inicial.
</div>
#aumenta {
position: absolute;
width: 200px;
height: 200px;
top: 50px;
left: 100px;
Página 178
Rafael Lozano HTML y CSS
background-color: cyan;
}
#aumenta:hover {
transform: scale(2,1.25);
}
<div id="girados">
Hola, ahora estoy quietecita, pero si introduces el ratón aquí
verás como me deformo. Y si sacas el ratón recupero mi forma
inicial.
</div>
#girados {
position: absolute;
width: 200px;
height: 200px;
top: 50px;
left: 100px;
background-color: cyan;
}
#girados:hover {
transform: skew(20deg,40deg);
}
<div id="todo2D">
Página 179
Rafael Lozano Introducción a los Lenguajes de Marcas
#todo2D {
position: absolute;
width: 200px;
height: 200px;
top: 50px;
left: 100px;
background-color: cyan;
}
#todo2D:hover {
transform: matrix(1.5, 0.1, 0.2, 1.5, 200, 10);
}
20.2 Transiciones
Una transición establece un cambio progresivo de una o varias propiedades CSS de un
elemento durante un periodo de tiempo determinado. Disponemos de cuatro propiedades
para definir una transición y de una propiedad abreviada. Vamos a verla deternidamente.
Con la propiedad transition-property definimos el nombre de una propiedad
CSS para la cual se define la transición, es decir, la transición comenzará cuando el valor de
esta propiedad cambie. Admite los siguientes valores:
✔ all, indica que la transición se aplicará a cualquier propiedad. Es el valor por
defecto.
✔ none, la transición no se aplicará a ninguna propiedad.
✔ propiedades_CSS, lista de propiedades CSS separadas por coma a las que se le
aplica la transición.
La propiedad transition-duration establece el tiempo en el que se demorará la
transición. Las unidades válidas son segundos (s), minutos (m), milisegundos (ms). Valores
negativos son inválidos, se computan como 0 y este significa que no se produce transición.
Si son varias las propiedades indicadas en la propiedad transition-property se
pueden declarar un tiempo para cada una.
La propiedad transition-timing-function determina cómo se desarrolla la
transición en el tiempo estipulado. Admite los siguientes valores:
✔ linear, la transición tendrá la misma velocidad de principio a fin.
Página 180
Rafael Lozano HTML y CSS
✔ ease, la transición comienza lenta, luego acelera y finalmente acaba lenta. Es el valor
por defecto.
✔ ease-in, la transición comienza lenta.
✔ ease-out, la transición acaba lenta.
✔ ease-in-out, la transición comienza y acaba lenta.
✔ steps(n), la transición no es lineal, sino a saltos. El valor de n especifica cuantos
saltos se producen dentro del periodo de tiempo especificado.
✔ steps(n, start), la transición es a saltos los cuales se realizan al inicio de cada fracción
de tiempo. Por ejemplo, si la propiedad transition-duration está establecida a
4s e indicamos 5 saltos, entonces habrá un salto cada 4/5=0.8 segundos y al
principio de cada fracción.
✔ steps(end), igual que la anterior, pero la transición ocurre al final de cada fracción
de tiempo.
La propiedad transition-delay indica un retraso en el comienzo de la transición.
Por defecto no espera nada, la transición comienza en cuanto la propiedad cambia. Un valor
negativo actúa al contrario, adelanta la transición al punto que le correspondería estar al
haber trascurrido dicho tiempo. Por ejemplo, si definimos un cambio de anchura de 0% al
100% en 4 segundos, y la propiedad transition-delay está definida con el valor -2s
fuerza a comenzar de inmediato la transición comenzando en el 50% de la anchura y el resto
lo completará con el tiempo definido en la propiedad transition-duration.
Por último, disponemos de la propiedad abreviada transition para indicar las cuatro
propiedades anteriores en el siguiente orden: property duration timing-function
delay;
Veamos un ejemplo. Supongamos que tenemos una capa sencilla como la siguiente
<div id="ejemplo1">
Transición linear
</div>
#ejemplo1 {
background-color: #FFFFAA;
color: darkgray;
width: 10em;
text-align:right;
padding: 5pt;
transition-property: width,background-color,color;
transition-duration: 4s;
transition-timing-function: ease;
}
Página 181
Rafael Lozano Introducción a los Lenguajes de Marcas
#ejemplo1:hover {
background-color: #2222AA;
color: bisque;
width: 100%;
}
transition-property: width,background-color,color;
transition-duration: 2s, 3s, 4s;
transition-timing-function: steps(5), ease, linear;
Vemos que hay tres propiedades a cambiar y cada una tiene su duración y función.
Por último, también podemos realizar transiciones con las transformaciones que vimos
en el apartado anterior. En el siguiente ejemplo cargamos una imagen
#gira_imagen {
margin-top: 5pt;
transition: transform ease-in 3s;
}
#gira_imagen:hover {
transform: rotate(720deg);
}
Propiedad Tipo
background-color color
background-position percentage, length
border-bottom-color color
border-bottom-width length
border-left-color color
border-left-width length
Página 182
Rafael Lozano HTML y CSS
border-right-color color
border-right-width length
border-spacing length
border-top-color color
border-top-width length
bottom length, percentage
clip rectangle
color color
crop rectangle
font-size length, percentage
font-weight font weight
height length, percentage
left length, percentage
letter-spacing length
line-height number, length, percentage
margin-bottom length
margin-left length
margin-right length
margin-top length
max-height length, percentage
max-width length, percentage
min-height length, percentage
min-width length, percentage
opacity number
outline-color color
outline-offset integer
outline-width length
padding-bottom length
padding-left length
padding-right length
padding-top length
right length, percentage
text-indent length, percentage
text-shadow shadow
top length, percentage
vertical-align length, percentage
visibility visibility
width length, percentage
Página 183
Rafael Lozano Introducción a los Lenguajes de Marcas
20.3 Animaciones
La versión 3 de CSS incluye animaciones gráficas que pueden sustituir a las imágenes
animadas o las películas Flash. Una animación es un efecto que permite a un elemento
cambiar gradualmente desde un estilo a otro. Puedes cambiar tantos estilos como quieras y
tantas veces como se quiera.
Las animaciones consisten en dos componentes: una hoja de estilo describiendo la
animación y un conjunto de fotogramas clave que indican el estado de comienzo y de fin del
estilo de la animación, junto con los estados intermedios entre el principio y el final.
Hay tres ventajas a la hora de usar animaciones CSS en lugar de las tradicionales
técnicas de animación:
✔ Las animaciones simples son muy fáciles de crear y utilizar. No es necesario conocer
ningún lenguaje de script.
✔ Las animaciones se ejecutan bien incluso en ordenadores con una carga moderada.
✔ Dejar al navegador el control de la secuencia de la animación le permite optimizar el
rendimiento y la eficiencia. Por ejemplo, reduciendo la frecuencia de actualización de
animaciones ejecutándose en pestañas que no están actualmente visibles.
IE10, Firefox y Opera soportan las animaciones. Chrome y Safari requiere el prefijo -
webkit- en las propiedades de la animación.
@keyframes aparece {
}
@keyframes aparece {
Página 184
Rafael Lozano HTML y CSS
0% {
left: 0%;
opacity: 0;
}
100% {
left: 100%;
opacity: 1;
}
}
#imagen_animada {
position: absolute;
animation: aparece 3s infinite;
}
@keyframes aparece {
from {
left: 0%;
opacity: 0;
}
50% {
left: 100%;
opacity: 1;
}
Página 185
Rafael Lozano Introducción a los Lenguajes de Marcas
to {
left: 0%;
opacity: 0;
}
}
Ahora hemos usado las palabra clave from y to para marcar el principio y el final. El
frame del 50% en medio hará que la animación vaya desde el estado de from a la mitad y
desde la mitad al final.
Para asignar una animación a un elemento disponemos de las siguientes propiedades.
Propiedad Tipo
animation-name Nombre de la animación
Duración de la animación en segundos (s) o milisegundos
animation-duration
(ms).
Describe como progresará la animación. Se admiten los
animation-timing-
function mismos valores que para la propiedad transition-timing-
function
animation-delay Especifica cuando comenzará la animación
Especifica cuantas veces se reproduce la animación. Por
animation-iteration-
count defecto 1. Puedes indicar la palabra clave infinite
para indicar que se reproduzca indefinidamente.
Define si hay alternancia o no en el sentido en que se
desarrollan cada ciclo de la animación. Así, si su valor es
animation-direction alternate los ciclos impares se desarrollan en el
sentido indicado y los pares lo hacen en sentido
contrario.
animation-play-state Indica si la animación se está reproduciendo o en pausa.
animation-fill-mode Especifica como una animación debería aplicar estilos al
elemento asignado antes y después de la animación. Los
posibles valores son:
✔ none, no se aplica ningún estilo antes ni después
de la animación.
✔ forwards, el elemento retendrá el estilo del
último frame de la animación. Este frame depende
de los valores de las propiedades animation-
direction y animation-iteration-count.
✔ backwards, el elemento retendrá el estilo del
primer frame de la animación cuando esta
comienza y durante el tiempo establecido en la
propiedad animation-delay. Este frame
depende de los valores de las propiedades
Página 186
Rafael Lozano HTML y CSS
animation-direction.
✔ both,
La siguiente table esquematiza cuál es el último frame que se aplica cuando el valor de
la propiedad animation-fill-mode esta establecida al valor forwards.
animation- animation-iteration-
direction count Último frame
normal Par o impar 100% o to
reverse Par o impar 0% o from
alternate par 0% o from
alternate impar 100% o to
alternate-reverse par 100% o to
alternate-reverse impar 0% o from
La siguiente tabla esquematiza cuál es el primer frame que se aplica cuando el valor de
la propiedad animation-fill-mode esta establecida al valor backwards.
animation-direction Primer frame
normal o alternate 0% o from
reverse o alternate-
100% o to
reverse
La propiedad abreviada animation permite establecer estas propiedades según la
siguiente sintaxis.
21 Marcos
Los marcos son divisiones que se efectúan en la pantalla del navegador. En cada una
de estas divisiones podemos cargar un documento web independiente. Los marcos es una
técnica para subdividir la pantalla del navegador en diferentes ventanas. Cada una de estas
ventanas se podrá manipular por separado, permitiéndonos mostrar en cada una de ellas
una página web diferente. Esto es muy útil para, por ejemplo, mostrar permanentemente en
una ventana un índice de contenidos de nuestra página, y en otra ventana mostrar el
contenido seleccionado.
Los marcos están desaconsejados por el W3C ya que han quedado obsoletos. Se han
incluido en HTML5 por compatibilidad con las aplicaciones desarrolladas con versiones
anteriores, pero en un futuro es posible que no estén contemplados.
Página 187
Rafael Lozano Introducción a los Lenguajes de Marcas
Emplear marcos es incompatible con el elemento body, por lo que como se verá más
adelante, esta directiva debe de no considerarse en la página que define los marcos, de lo
contrario no funcionará.
Si el navegador no puede mostrar marcos o está configurado para no mostrarlos,
representará los contenidos del elemento noframes.
Aquí tenemos un ejemplo de documento simple con marcos:
<!DOCTYPE html>
<html lang=”es”>
<head>
<title>Un documento simple con marcos</title>
</head>
<frameset cols="20%, 80%">
<frameset rows="100, 200">
<frame src="contenidos_del_marco1.html">
<frame src="contenidos_del_marco2.html">
</frameset>
<frame src="contenidos_del_marco3.html">
<noframes>
<p>Este conjunto de marcos contiene:
Marcos en documentos HTML
<ul>
<li><A href="contenidos_del_marco1.html">Marco
1</a>
<li><a href=”contenidos_del_marco2.html”>Marco
2</a>
<li><A href="contenidos_del_marco3.html">Marco
3</a>
</ul>
</noframes>
</frameset>
</html>
Página 188
Rafael Lozano HTML y CSS
Atributo Descripción
rows = lista de Este atributo especifica la disposición de los marcos horizontales.
multilongitudes Es una lista de longitudes en píxeles, porcentajes o longitudes
relativas, separadas por comas. El valor por defecto es 100%, que
significa una fila.
cols = lista de Este atributo especifica la disposición de los marcos verticales. Es
multilongitudes una lista de longitudes en píxeles, porcentajes o longitudes
relativas, separadas por comas. El valor por defecto es 100%, que
significa una columna.
El elemento frameset especifica la organización de la ventana principal del usuario
en términos de subespacios rectangulares.
Cuando se establece el atributo rows (filas) se define el número de subespacios
horizontales. Cuando se establece el atributo cols (columnas) se define el número de
subespacios verticales. Ambos atributos se pueden especificar simultáneamente para crear
una cuadrícula.
Si no se establece el atributo rows, cada columna se extiende a lo largo de toda la
longitud de la página. Si no se establece el atributo cols, cada fila se extiende a lo largo de
toda la anchura de la página. Si no se establece ninguno de los dos atributos, el marco tiene
exactamente el mismo tamaño que la página.
Los marcos se crean de izquierda a derecha para las columnas y de arriba a abajo para
las filas. Cuando se especifican ambos atributos, las vistas se crean de izquierda a derecha
en la fila superior, de izquierda a derecha en la segunda fila, etc.
En este primer ejemplo dividimos la pantalla verticalmente en dos (es decir, creamos
una mitad superior y una mitad inferior).
El siguiente ejemplo crea tres columnas: la segunda tiene una anchura fija de 250
píxeles (lo cual es útil, por ejemplo, para incluir una imagen de tamaño conocido). La primera
recibe el 25% del espacio restante, y la tercera el 75% del espacio restante.
<frameset cols="1*,250,3*">
...el resto de la definición...
</frameset>
Página 189
Rafael Lozano Introducción a los Lenguajes de Marcas
<frameset rows="30%,400,*,2*">
...el resto de la definición...
</frameset>
Las longitudes absolutas que no sumen el 100% del espacio real disponible deberían
ser ajustadas por los navegadores.
Cuando sobre espacio, el espacio sobrante debería repartirse proporcionalmente entre
cada vista. Cuando falte espacio, debería reducirse cada vista en función de la relación entre
el espacio especificado y el espacio total.
Atributo Descripción
name = “nombre” Este atributo asigna un nombre al marco actual. Este nombre
puede utilizarse como el destino de enlaces o formularios
longdesc = “uri” Este atributo especifica un vínculo a una descripción larga del
marco. Esta descripción debería complementar la descripción
corta proporcionada por el atributo title, y puede ser
particularmente útil para navegadores no visuales.
src = “uri” Este atributo especifica la localización de los contenidos iniciales
que contendrá el marco.
noresize Si está presente, este atributo vacío le dice al navegador que la
ventana del marco no debe ser redimensionable.
scrolling = auto Este atributo especifica información sobre la barra de
| yes | no desplazamiento de la ventana del marco. Valores posibles:
✔ auto: Este valor le dice al agente de usuario que
proporcione mecanismos de desplazamiento en la ventana
del marco cuando sea necesario. Este es el valor por
Página 190
Rafael Lozano HTML y CSS
defecto.
✔ yes: Este valor le dice al agente de usuario que siempre
proporcione mecanismos de desplazamiento en la ventana
del marco.
✔ no: Este valor le dice al agente de usuario que nunca
proporcione mecanismos de desplazamiento en la ventana
del marco.
frameborder = 1 | Este atributo proporciona información al navegador sobre el borde
0 del marco. Valores posibles:
✔ 1: Este valor le dice al navegador que dibuje un separador
entre este marco y todos los marcos adyacentes. Este es el
valor por defecto.
✔ 0: Este valor le dice al navegador que no dibuje un
separador entre este marco y todos los marcos
adyacentes. Obsérvese que aún se puede dibujar un
separador junto a este marco si así se especifica para otros
marcos.
marginwidth = Este atributo especifica la cantidad de espacio que debe dejarse
“píxeles” entre los contenidos del marco en sus márgenes izquierdo y
derecho. El valor debe ser mayor o igual que cero (píxeles). El
valor por defecto depende del navegador.
marginheight = Este atributo especifica la cantidad de espacio que debe dejarse
píxeles entre los contenidos del marco en sus márgenes superior e
inferior. El valor debe ser mayor o igual que cero (píxeles). El valor
por defecto depende al agente de usuario.
El atributo src especifica el documento web que contendrá el marco. El siguiente
ejemplo de documento HTML dispone de cuatro marcos:
<!DOCTYPE html>
<html>
<head>
<title>Un documento con marcos</title>
</head>
<frameset cols="33%,33%,33%">
<frameset rows="*,200">
<frame src="contenidos_del_marco1.html">
<frame src="contenidos_del_marco2.gif">
</frameset>
<frame src="contenidos_del_marco3.html">
<frame src="contenidos_del_marco4.html">
</frameset>
</html>
Página 191
Rafael Lozano Introducción a los Lenguajes de Marcas
<!DOCTYPE html>
<html>
<head>
<title>Un documento con marcos</title>
</head>
<frameset cols="33%,33%,33%">
<frameset rows="*,200">
<frame src="contenidos_del_marco1.html"
scrolling="no">
<frame src="contenidos_del_marco2.gif"
marginwidth="10" marginheight="15" noresize>
</frameset>
<frame src="contenidos_del_marco3.html"
frameborder="0">
<frame src="contenidos_del_marco4.html"
frameborder="0">
</frameset>
</HTML>
<!DOCTYPE html>
<html>
Página 192
Rafael Lozano HTML y CSS
<head>
<title>Un documento con marcos</title>
</head>
<frameset rows="50%,50%">
<frame name="fijo" src="inicial_fijo.html">
<frame name="dinamico" src="inicial_dinamico.html">
</frameset>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Un documento con vínculos con destinos
específicos</title>
</head>
<body>
...comienzo del documento...
<p>Puede avanzar ahora a la <a href="[Link]"
target="dinamico" >diapositiva 2.</a>
...más documento...
</p>
<p>Lo está haciendo muy bien. Vaya ahora a la <a
href="[Link]" target="dinamico">diapositiva 3.</a></p>
</body>
</html>
<!DOCTYPE html>
<html>
Página 193
Rafael Lozano Introducción a los Lenguajes de Marcas
<head>
<title>Un documento con marcos</title>
</head>
<frameset cols="33%, 33%, 34%">
...contenidos del primer marco...
<frameset rows="40%, 50%">
...contenidos del segundo marco, primera fila...
...contenidos del segundo marco, segunda fila...
</frameset>
...contenidos del tercer marco...
</frameset>
</html>
En este ejemplo hemos definido en primer lugar, un frameset que nos divide la
pantalla del navegador en 2 columnas verticales de 100 pixeles la de la izquierda (en la
pantalla), y el resto del área para el visualizador. Dentro de la misma, tal y como se ve en el
ejemplo, hemos definido una subdivisión de la primera columna (la de la izquierda), en 2 filas
(en el interior de la primera columna), que nos da un cuadro superior de 200 pixeles fijos y el
inferior del resto de la pantalla del visualizador. Vemos de este modo lo que es un frame
anidado, al mismo tiempo que ya hemos visto como subdividir una columna de las 2 que
hemos definido.
<!DOCTYPE html>
<html>
<head>
<title> Título de la Página </title>
</head>
<frameset cols=“100,*”>
<frameset rows=“200,*”>
...
</frameset>
</frameset>
</html>
Veamos otro ejemplo; supongamos que queremos hacer una subdivisión más o menos
simétrica en 4 frames de la pantalla de nuestro visualizador, para lo que primero definimos
las 2 columnas verticales:
<!DOCTYPE html>
<html>
<head>
<title>Un documento con marcos</title>
</head>
<frameset cols=“50%,*”>
....
</frameset>
</html>
Así hemos definido 2 columnas de la primera de ellas del 50% de la pantalla, y el resto
que también es 50%, para la otra. Definamos ahora dentro de cada una de las columnas 2
filas que hagan que se nos muestre una pantalla dividida en 4 cuadros simétricos. Para ello
Página 194
Rafael Lozano HTML y CSS
pondríamos:
<!DOCTYPE html>
<html>
<head>
<title>Un documento con marcos</title>
</head>
<frameset cols=“50%,*”>
<frameset rows=“50%,*”>
...
</frameset>
</frameset>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Un documento con marcos</title>
</head>
<frameset cols=“50%,*”>
<frameset rows=“50%,*”>
...
</frameset>
<frameset rows=“50%,*”>
...
</frameset>
</frameset>
</html>
Página 195
Rafael Lozano Introducción a los Lenguajes de Marcas
lo indicado con estos elementos. Es por ello que existe un elemento llamado noframes.
Todo los indicado entre esta directiva será lo que muestren los navegadores sin capacidad
para visualizar marcos. Los navegadores que soporten marcos obviaran el contenido
incluido en noframes.
Anteriormente hemos mencionado que el elemento frameset era incompatible con el
elemento body, y como veremos ahora no es del todo cierta. El único requisito que debe de
cumplir para que no sea totalmente incompatible, es que la definición de marcos debe de ir
antes de la definición del cuerpo del documento o body. Veamos un ejemplo:
<!DOCTYPE html>
<html>
<head>
<title>Un documento con marcos</title>
</head>
<frameset cols=“50%,*”>
<frame src=”[Link]”>
<frame src=”[Link]”>
<noframes>
<body>
...
</body>
</noframes>
</frameset>
</html>
Tal y como vemos en este ejemplo, se definen antes los cuadros de las ventanas (o
frames) con el elemento frameset y el elemento noframes para aquellos navegadores
que no soporten marcos, va incluida el elemento body entre las que indicaremos el
contenido que queremos mostrar, dado que si el navegador accede a la segunda opción
definida en noframes, indica que no soporta los frames, mientras que si sí los soporta, esta
segunda opción de noframes, será obviada por el mismo.
Por ello podemos y la recomendación es hacer siempre uso del elemento noframes,
para poder dar la opción al visitante, de que pese a que no tenga el navegador apropiado,
poder ver la alternativa a la página con marcos que hemos confeccionado.
Página 196
Rafael Lozano HTML y CSS
Atributo Descripción
longdesc=uri Este atributo especifica un vínculo a una descripción larga del
marco. Esta descripción debería servir como complemento de la
descripción corta que proporciona el atributo title, y es
particularmente útil para los navegadores no visuales.
name=“nombre” Este atributo asigna un nombre al marco actual. Este nombre
puede utilizarse como el destino de vínculos subsiguientes.
width=“longitud” La anchura del marco en línea.
height=“longitud” La altura del marco en línea.
Para aquellos navegadores que soporten marcos, el siguiente ejemplo colocará un
marco en línea rodeado por un borde en medio del texto.
22 Publicación web
Publicar los contenidos en la web es relativamente fácil, lo difícil es decidir qué se
publica, la estructura que tendrá y su desarrollo. El objetivo en si no es poner contenido en
Internet, sino que sea lo suficientemente atractivo para que los usuarios visiten nuestro sitio.
Un sitio web profesional improvisado está condenado al fracaso, mientras que un sitio web
previamente diseñado con cuidado y esmero tendrá más posibilidades de éxito.
El desarrollo web consiste en un proceso cuyo objetivo es construir una aplicación web
que cumpla unos requisitos establecidos de antemano. Un sitio web se implementa en forma
de aplicación web o aplicación que se ejecuta en un servidor web y que cualquier usuario
con acceso a Internet puede utilizar. Para construir la aplicación web se cuentan con una
serie de herramientas y técnicas que permiten cumplir los objetivos del sitio partiendo de
cero.
Antes de comenzar a escribir código del sitio que pretendemos construir es necesario
establecer y definir claramente el trabajo a realizar. Esta definición se divide en dos fases:
✔ Análisis.- Consiste en estudiar lo que se pretende publicar, es decir, establecer los
objetivos y contenidos que tendrá nuestro sitio web.
✔ Diseño.- Partiendo de la información recopilada en el apartado anterior, se define la
estructura del sitio web que permita una implementación sencilla de la misma.
Página 197
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 198
Rafael Lozano HTML y CSS
Página 199
Rafael Lozano Introducción a los Lenguajes de Marcas
2. Debemos contar con sistemas que faciliten la navegación entre las diferentes
secciones.
3. Incorporando aplicaciones que ofrezcan un valor añadido al visitante.
22.1.2 Diseño
Un sitio web está formado por múltiples componentes: páginas web, hojas de estilos,
Página 200
Rafael Lozano HTML y CSS
imágenes, video, audio, etc. Por tanto, habrá que decidir qué componentes tendrá y la
función de cada uno de ellos.
En esta fase, definimos además el tipo de navegación, la interacción con el usuario y su
comportamiento general. El resultado guiarán la programación del sitio, convirtiendo esto en
una tarea trivial y permitiendo al programador centrarse en aspectos más técnicos del
desarrollo, como la programación, las herramientas utilizadas, etc. Este resultado presentará
la estructura del portal, es decir, las partes de que se componen y la relación que hay entre
ellas.
La mejor forma de presentar esta estructura es mediante un mapa de navegación el
cual muestra los componentes de nuestro sitio (páginas web, hojas de estilo, etc) y los
vínculos que enlazan unos con otros.
22.1.3 Desarrollo
En esta fase creamos nuestros componentes web: páginas, hojas de estilo, etc.
Además recopilaremos otros componentes como imágenes, audio, video, etc.
Para la creación de las páginas web utilizamos un editor de texto. Tenemos muchos
para elegir y lo haremos en función de nuestras necesidades. En el mercado existen muchos
editores de código HTML que incluyen funciones como autocompletado, coloración de
código inteligente, etc.
Una vez que se ha iniciado la recopilación de material, es necesario organizarlo
adecuadamente. Un sitio web que cuente con quince páginas, con varias imágenes y textos
cada una, puede generar una gran cantidad de archivos. Si cada archivo está en una carpeta
distinta y sigue un tipo de denominación diferente, el desarrollador puede perder mucho
tiempo localizándolos. Por ello, es preferible seguir algunas convenciones a la hora de
almacenar y nombrar los distintos materiales que formarán el sitio web.
Página 201
Rafael Lozano Introducción a los Lenguajes de Marcas
22.1.4 Pruebas
Cuanto más tiempo dediquemos a probar nuestro sitio web menos errores tendrá. Las
pruebas de las páginas web deberán ser lo más extensas posibles y que abarquen a todos
los elementos de nuestro sitio web. Tenemos que probarlo todo: contenido y formato,
enlaces, carga de imágenes, etc.
Además, deberemos probar nuestro sitio web en varias plataformas, si es posible, y
Página 202
Rafael Lozano HTML y CSS
con varios navegadores. Un sitio web puede variar su aspecto si lo probamos en ordenador
con Windows y un navegador Internet Explorar a otro con Linux y un navegador Chromium.
El W3C ofrece a los desarrolladores web un servicio de validación para verificar que
sus páginas web se han escrito sin errores. Podemos utilizar este servicio para comprobar si
nuestras páginas web están correctamente escritas. Estas páginas que queremos validar
pueden estar ya publicadas en la red o no, en cuyo caso estarían en nuestro PC y las
tendríamos que subir al validador para su comprobación. También, podemos incluir código
HTML en el propio validador para su comprobación.
Después de crear un página web, utilizaremos el servicio de validación
[Link] para comprobar si el código HTML cumple con el estádar del W3C
para el tipo de documento que hemos hecho (HTML, XHTML, HTML5). Para utilizar el servicio
de validación, seguiremos los siguientes pasos:
✔ Iniciamos un navegador e intruducimos la dirección [Link]
✔ Si queremos validar un página que aún no hayamos publicado en el servidor web,
hacemos clic en Examinar dentro de Validate by file upload. Esto nos permite cargar
un archivo de nuestra máquina local.
✔ Hacemos clic en Check
Una vez hayamos completado estos pasos el explorador web nos enviará la página
web que hayamos introducido o seleccionado al sitio web del w3c. El programa de
validación del sitio examinará el documento y enviará al explorador web una página de
Página 203
Rafael Lozano Introducción a los Lenguajes de Marcas
resultados.
Debemos de tener en cuenta que el documento HTML o XHTML es válido (es decir,
cumple el estándar) sólo cuando no hay errores. Por lo tanto, si vemos errores, los
corregimos en el documento web y repetimos el procedimiento de validación. El programa
de validación no sólo ofrece una lista de errores, también ofrece sugerencias de corrección
que tiene que realizar para que el código cumpla el estándar.
Cuando tengamos una web sin errores podemos incluir un logotipo del
W3C el cual da fe de que nuestra página ha sido validada por el W3C.
Página 204
Rafael Lozano HTML y CSS
Página 205
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 206
Rafael Lozano HTML y CSS
número de recursos avanzados que posea tu servidor, pero siempre será interesante
evaluar otros recursos más básicos como:
✗ Programación en lenguajes específicos .
✗ Acceso a bases de datos
✗ Administración de las DNS...
✗ El número de direcciones de correo que te van a proporcionar
✗ Los CGIs que tenga instalados, como contadores, envío de formularios por correo
electrónico, etc.
✗ Estadísticas...
✔ Velocidad.- Es una pena que no exista un método realmente fiable para controlar uno
de los aspectos que más preocupa a todos los que buscamos un alojamiento. Para
conocer la calidad el servicio que nos va a ofrecer el proveedor deberíamos
preguntarles a ellos sobre sus líneas y la capacidad que tienen de transferencia con
Internet. Pero no solo eso sino también preguntarles por la saturación que tienen sus
líneas. Pueden ser muy potentes pero estar utilizadas intensamente. Como los
proveedores no van a revelar estos detalles tal como a nosotros nos gustaría, lo más
probable es que solo nos quede la posibilidad de probar la velocidad por la práctica.
Si navegamos por el sitio de la empresa que estamos evaluando y comprobamos la
cantidad de información (Kb) que recibimos por segundo podremos saber cómo va de
rápido la página. Otro factor que también condiciona la velocidad es la cercanía del
servidor. Ten en cuenta que si estamos en España, un servidor situado en nuestro
país será más rápido para nosotros, en la misma condición de líneas, que uno que
esté en Estados Unidos. Cuanto más lejos tenga que viajar la información, tarda más.
Pero un detalle, si un usuario de Colombia visita una página que está en un servidor
español, para él tu servidor será más lento que uno de su país.
✔ Trasnferencia.- Otro aspecto que tenemos que evaluar a la hora de contratar un
espacio para nuestra web es la cantidad de megas de transferencia mensual que el
proveedor permite realizar desde nuestro dominio hacia fuera. Es decir, las páginas
web que manda el servidor tienen un peso en Kbytes y el proveedor los va contando,
cuando pasamos el límite que le han asignando al dominio nos cobran el exceso
según un precio. Así pues, a la hora de contratar un dominio merece la pena
enterarse sobre este aspecto y evaluar también las condiciones que nos ofrecen. Si
encontramos un servidor que ofrece transferencia ilimitada no nos tiene que decir
tampoco mucho de él, el control de la transferencia les permite ajustar su servicio a
unos niveles de calidad superiores. Además, en la mayoría de los casos no nos
tendrá que preocupar el superar las tasas de transferencia pues las megas que
transfiere una web normal nunca superará los niveles propuestos, a no ser que se
trate de un portal o una página muy visitada.
✔ Precio.- El último factor a considerar, y el más fácil de comparar, es el precio. Lo
importante es comparar la calidad del servicio y el precio del mismo. Habrá realizar
esta comparación sabiendo los datos que tenemos que evaluar.
Página 207
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 208
Rafael Lozano HTML y CSS
5. Instalar y configurar los servicios añadidos de nuestro servidor web, como base de
datos, transferencia de ficheros por FTP, acceso remoto para configuraciones, etc.
6. Contratar un dominio y configurar el servicio DNS para que el nombre elegido apunte
a nuestro servidor web. Lo más seguro es que cuando contratemos nuestro nombre
de dominio la empresa donde lo hagamos nos gestione el DNS mediante DynDNS o
algún otro método.
No es una tarea fácil ni trivial montar un servidor web en casa y conlleva mucho trabajo,
incluso después de su puesta en funcionamiento, pero resulta una solución mucho más
flexible a la hora de instalar y configurar servicios añadidos a nuestros sitios web.
22.3 Normativa
¿Es posible incluir desde el punto de vista legal cualquier elemento en una página
web? La respuesta es, obviamente, no. Aunque Internet tiene un espíritu libre y no está
totalmente regulado, hay muchas leyes que son trasladables del «mundo real» al virtual.
Estas leyes hacen especial referencia a la propiedad intelectual de los elementos y a la
posibilidad de publicar datos personales o sensibles.
Toda creación o invento tiene un autor que es el propietario intelectual de la obra. Poco
importa que sea una obra literaria sin ninguna calidad artística, un descubrimiento científico
sin resonancia alguna o un invento inservible: sigue teniendo un autor y éste es acreedor a
unos derechos, los de la propiedad intelectual, que protegen a su creación de la
modificación, reproducción o comercialización por parte de terceros sin su permiso. Dichos
derechos existen desde el mismo momento de la creación de la obra: es decir, no es
necesario inscribirla en un registro, firmarla, poner símbolos de copyright o patente, etc.
(todo esto en realidad sólo tiene importancia a efectos de reclamaciones o para publicitar la
autoría de la obra).
Todo ello implica que cualquier elemento de Internet, desde un diseño web hasta una
imagen, pasando por cualquier texto, tiene un autor y, por tanto, su uso está sometido a
ciertas restricciones. No es posible descargarse una imagen y utilizarla en nuestra propia
página web, ni cortar y pegar un texto. Es necesario pedir permiso (preferiblemente por
escrito) o asegurarse de que éste ha sido concedido de antemano mediante una licencia
Creative Commons ([Link] GNU GPL (Licencia pública general de
GNU: [Link]) o similares.
Por supuesto, el espíritu libre de Internet ha facilitado iniciativas para la libre
distribución de imágenes, textos, piezas musicales, etc., y existen numerosas páginas web
que ponen a disposición de los desarrolladores multitud de recursos gratuitos,
especialmente imágenes.
Otra forma de obtener recursos sin necesidad de pedir permiso por escrito es
comprando creaciones libres de royalties (royalty free), es decir, liberadas del pago de
canones por su utilización. Una vez que se compra el CD con las imágenes, sonidos,
canciones, vídeos, etc., se pueden utilizar todas las veces que se quiera y generalmente,
como se quiera (los autores pueden poner limitaciones de uso, por ejemplo, para publicidad
Página 209
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 210
Rafael Lozano HTML y CSS
Licencia Descripción
Reconocimiento En cualquier explotación de la obra autorizada por la licencia hará
(Attribution) falta reconocer la autoría.
No Comercial La explotación de la obra queda limitada a usos no comerciales.
(Non commercial)
Sin obras La autorización para explotar la obra no incluye la transformación
derivadas para crear una obra derivada.
(No Derivate Works)
Compartir Igual La explotación autorizada incluye la creación de obras derivadas
(Share alike) siempre que mantengan la misma licencia al ser divulgadas.
Con estas cuatro condiciones combinadas se pueden generar las seis licencias que se
pueden escoger:
Página 211
Rafael Lozano Introducción a los Lenguajes de Marcas
Página 212
Rafael Lozano HTML y CSS
2. Rellenar el formulario indicando los derechos que concedemos a la obra que hemos
creado
3. Rellenaremos también el formulario con los datos del autor, ya que es muy posible
que escojamos una licencia con reconocimiento de la autoría.
Página 213
Rafael Lozano Introducción a los Lenguajes de Marcas
4. Una vez completados los datos disponemos en la parte derecha del código HTML
que nos incluirá la licencia en nuestra página web. Este fragmento de código HTML
debe ser insertado en nuestra página web.
Este es el aspecto que tomaría nuestra web con la inclusión de la licencia Creative
Commons
Página 214
Rafael Lozano HTML y CSS
23 Bibliografía
EGUILUZ, J, Libros web - CSS Avanzado, [Acceso 25 agosto 2013]. Disponible en
<[Link]
W3C, HTML 5.1 Nightly – Editor's Draft 30 August 2013, [Acceso 30 de agosto 2013].
Disponible en <[Link]
W3C, Cascading Style Sheet Level 2 Revision (CSS 2.1) Specification, [Acceso 20 de agosto
2013]. Disponible en <[Link]
GAUCHAT, J.D., El gran libro de HTML5, CSS3 y Javascript. 2012 Marcombo Ediciones
Técnicas, ISBN 978-84-267-1770-2.
W3SCHOOLS, HTML5 [Acceso 22 de agosto 2013]. Disponible en
<[Link]
W3SCHOOLS, CSS3 Tutorial [Acceso 24 de agosto 2013]. Disponible en
<[Link]
ALVAREZ, M.A., Degradados con CSS3, Abril 2011 [Acceso 19 de agosto 2013]. Disponible en
<[Link] y
<[Link]
GONZALEZ, L., Imagen digital: conceptos básicos. [Acceso 21 de agosto 2013]. Disponible
en <[Link]
BUCHANAN, B., Estilos de las tablas, Septiembre 2008 [Acceso 26 de agosto 2013].
Disponible en <[Link]
POZO, J.R., HTML con clase, Mayo 2005 [Acceso 28 de agosto 2013]. Disponible en
<[Link]
JMIUR, Transformaciones con CSS, Marzo 2011 [Acceso 29 de agosto 2013]. Disponible en
<[Link]
EPUÑAN, J., Animaciones y transformaciones con CSS3. Enero 2011 [Acceso 29 de agosto
2013]. Disponible en <[Link]
css3/>
W3C, CSS Transitions - W3C Working Draft 3 April 2012. Abril 2012 [Acceso 29 de agosto
2013]. Disponible en <[Link]
Página 215