Subido por hola_diego1

Arrancar HTML5

Anuncio
Arrancar con HTML5.
Curso de programación
Emmanuel Herrera Ríos
Buenos Aires • Bogotá • México, D.F. • Santiago de Chile
Edición:
Alejandro Herrera
Corrección:
Roberto Alfaro M.
Revisión:
Dr.David Moisés Terán Pérez
Gerente editorial:
Marcelo Grillo
Datos catalográficos
Herrera Ríos Emmanuel
Arrancar con HTML5. Curso de programación
Primera Edición
Alfaomega Grupo Editor, S.A. de C.V. México.
ISBN: 978-607-707-331-4
Formato: 17 x 23 cm
Páginas: 264
Arrancar con HTML5. Curso de programación
Emmanuel Herrera Ríos
Derechos reservados © 2012, por Alfaomega Grupo Editor, S.A. de C.V. México
Primera Edición: Alfaomega Grupo Editor, S.A. de C.V. México, octubre de 2011
© 2012, por Alfaomega Grupo Editor, S.A. de C.V.
Pitágoras 1139, Col. Del Valle, C.P. 03100, México, D.F.
Miembro de la Cámara Nacional de la Industria Editorial Mexicana
Registro No. 2317
Internet: http://www.alfaomega.com.mx
E-mail: [email protected]
ISBN: 978-607-707-331-4
Derechos reservados
Esta obra es propiedad intelectual de su autor y los derechos de publicación en lengua española han sido
legalmente transferidos al editor. Prohibida su reproducción parcial o total por cualquier medio sin permiso por
escrito del propietario de los derechos del copyright.
Nota importante:
La información contenida en esta obra tiene un fin exclusivamente didáctico y, por lo tanto, no está previsto su
aprovechamiento profesional o industrial. Las indicaciones técnicas y programas incluidos han sido elaborados con
gran cuidado por el autor y reproducidos bajo estrictas normas de control. Alfaomega Grupo Editor, S.A. de C.V.
no será jurídicamente responsable por: errores u omisiones; daños y perjuicios que se pudieran atribuir al uso de
la información comprendida en este libro, ni por la utilización indebida que pudiera dársele. Los nombres
comerciales que aparecen en este libro son marcas registradas de sus propietarios y se mencionan únicamente
con fines didácticos, por lo que Alfaomega Grupo Editor, S.A. de C.V. México no asume ninguna responsabilidad
por el uso que se dé a esta información, ya que no infringe ningún derecho de registro de marca. Los datos de los
ejemplos y pantallas son ficticios, a no ser que se especifique lo contrario.
Impreso en México. Printed in Mexico.
Empresas del grupo:
México: Alfaomega Grupo Editor, S.A. de C.V. – Pitágoras 1139, Col. Del Valle, México, D.F. – C.P. 03100.
Tel.: (52-55) 5575-5022 – Fax: (52-55) 5575-2420 / 2490. Sin costo: 01-800-020-4396
E-mail: [email protected]
Colomb
i ia: Alfaomega Colombiana S.A. – Carrera 15 No. 64 A 29, Bogotá, Colombia,
Tel.: (57-1) 2100122 – Fax: (57-1) 6068648 – E-mail: [email protected]
Chile: Alfaomega Grupo Editor, S.A. – Dr. La Sierra 1437, Providencia, Santiago, Chile
Tel.: (56-2) 235-4248 – Fax: (56-2) 235-5786 – E-mail: [email protected]
Argentina: Alfaomega Grupo Editor Argentino, S.A. – Paraguay 1307 P.B. Of. 11, C.P. 1057, Buenos Aires,
Argentina, – Tel./Fax: (54-11) 4811-0887 y 4811 7183 – E-mail: [email protected]
Dedicatoria
A mis padres, José Luis y Elba, por su cariño, por apoyarme en todo momento y por
darme la oportunidad de aprender. También dedico este proyecto a mi hermanita
Yazmín.
Emmanuel Herrera Ríos
Agradecimientos
Deseo agradecer a mi familia por todo su apoyo, especialmente a mis tíos Mónica y
Gabriel, por toda su ayuda y afecto a lo largo de los años.
A mis profesores, por todo el conocimiento que me han brindado.
A Luz Romero y Juan Gabriel Cruz, por compartir sus conocimientos, por su ayuda y
sobre todo por su amistad.
A todo el personal de Alfaomega Grupo Editor, que con su respaldo y esfuerzo
hicieron posible la realización de este libro.
Gracias.
Emmanuel Herrera Ríos
Mensaje del editor
Los conocimientos son esenciales en el desempeño profesional, sin ellos es imposible lograr las habilidades para competir laboralmente. La universidad o las instituciones de formación para el trabajo ofrecen la oportunidad de adquirir conocimientos que serán aprovechados más adelante en beneficio propio y de la
sociedad; el avance de la ciencia y de la técnica hace necesario actualizar
continuamente esos conocimientos. Cuando se toma la decisión de embarcarse en
una vida profesional, se adquiere un compromiso de por vida: mantenerse al día
en los conocimientos del área u oficio que se ha decidido desempeñar.
Alfaomega tiene por misión ofrecerles a estudiantes y profesionistas
conocimientos actualizados dentro de lineamientos pedagógicos que faciliten su
utilización y permitan desarrollar las competencias requeridas por una profesión
determinada. Alfaomega espera ser su compañera profesional en este viaje de por
vida por el mundo del conocimiento.
Alfaomega hace uso de los medios impresos tradicionales en combinación
con las tecnologías de la información y las comunicaciones (IT) para facilitar el
aprendizaje. Libros como éste tienen su complemento en una página Web, en donde
el alumno y su profesor encontrarán materiales adicionales.
Esta obra contiene numerosos gráficos, cuadros y otros recursos para
despertar el interés del estudiante, y facilitarle la comprensión y apropiación del
conocimiento.
Cada capítulo se desarrolla con argumentos presentados en forma sencilla
y claramente estructurada hacia los objetivos y metas propuestas.
Cada capítulo concluye con diversas actividades pedagógicas para asegurar
la asimilación del conocimiento y su extensión y actualización futuras.
Los libros de Alfaomega están diseñados para ser utilizados dentro de los
procesos de enseñanza-aprendizaje, y pueden ser usados como textos para diversos
cursos o como apoyo para reforzar el desarrollo profesional.
Alfaomega espera contribuir así a la formación y al desarrollo de profesionistas exitosos para beneficio de la sociedad.
Emmanuel Herrera Ríos
Es Ingeniero en Sistemas Computacionales egresado de la Universidad de Colima
(UCOL) (www.ucol.mx), universidad pionera en el uso de las Tecnologías de
Información como método de apoyo a la enseñanza en América Latina.
Colaborador por parte de la Universidad de Colima en el desarrollo de varios de
los primeros contenidos multimedia destinados a la educación, elaborados en
México y en América Latina.
Ha trabajado como desarrollador de diversos sistemas de información y control
para diferentes consultorías en proyectos para empresas e instituciones como
Bancomext, Televisa, Chrysler y Waldo’s, entre otras. También se ha desempeñado
como diseñador, desarrollador y administrador de sistemas de información financiera
para el Grupo Salinas (Banco Azteca y Elektra).
Ha desarrollado y coordinado diversos proyectos multimedia y de capacitación para
instituciones públicas ubicadas en México y Latinoamérica a través del Instituto
Latinoamericano de la Comunicación Educativa y como consultor independiente.
Es consultor externo y desarrollador independiente. En www.internet80.com
encontrará su blog, en el que trata temas de tecnología y desarrollo para internet,
multimedia y programación.
Contenido
Arrancar con HTML5 . Curso de
programación ............................................. XI
Acceso al material complementario ........ XIII
Capítulo 1
¿De dónde viene y qué es HTML? ......
1
Expectativa..................................................... 2
Introducción ................................................... 3
Un poco de historia ....................................... 4
El éxito puede ser el mayor problema ....... 4
Round 2 (nuevos competidores) ................ 5
¿HTML5 o una versión anterior? ................ 5
HTML4 ..................................................... 5
XHTML ..................................................... 6
HTML5 ..................................................... 6
Comprendiendo las etiquetas (tags) ......... 6
Comprendiendo las hojas de estilo
en cascada (CSS) ....................................... 7
JavaScript ....................................................... 8
Tecnologías de páginas activas de servidor 8
Resumen ........................................................ 9
Autoevaluación.............................................. 9
Evidencia ........................................................ 10
Referencias .................................................... 11
Bibliografía ............................................. 11
Paginas Web recomendadas .............. 11
Respuestas sugeridas ................................. 12
Capítulo2
Preparándonos para HTML5................ 13
Expectativa.....................................................
Introducción ...................................................
Eligiendo un navegador ...............................
Tipo de documento .......................................
Etiqueta <!DOCTYPE html>..................
Alfaomega
14
15
15
17
18
Estructura básica de un documento HTML
Etiquetas <head> y <body> .................
Título y Metadatos ........................................
Ejemplo ...................................................
Ejercicio ..................................................
Párrafos y saltos de línea ............................
Detección de las características
de HTML5....................................................
Resumen........................................................
Autoevaluación .............................................
Evidencia ........................................................
Referencias ...................................................
Bibliografía .............................................
Paginas Web recomendadas ..............
Respuestas sugeridas ................................
18
18
19
19
21
21
23
26
26
27
27
27
27
28
Capítulo 3
Más bases HTML ............................... 29
Expectativa ...................................................
Introducción .................................................
¿HTML o XHTML? ..........................................
Formato de texto con etiquetas .................
Cabeceras ..............................................
Ejercicio ..................................................
Negritas, cursiva, subrayado y otros ..
Ejercicio ..................................................
Subíndices y superíndices ...................
Ejercicio ..................................................
Bloque de citas ......................................
Ejercicio ..................................................
Línea Horizontal ....................................
Listas ..............................................................
Listas numeradas y listas
no numeradas ....................................
Listas de definición ...............................
Ejemplo ...................................................
30
31
31
32
33
34
34
36
36
37
38
38
39
40
41
42
43
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
VIII
Imágenes .......................................................
Tablas .............................................................
Ejemplo ...................................................
Hipervínculos (enlaces) ................................
Ejemplo ...................................................
Formularios (controles clásicos).................
Estructura del formulario .....................
Campo de texto .....................................
Área de texto ..........................................
Campo de contraseña
(password) ...........................................
Lista de selección simple
(combobox)..........................................
Lista de selección múltiple (listbox) ...
Lista de selección múltiple
(listbox multiple selection) ................
Lista de botones radio
(radio buttons) ....................................
Lista de cajas (checkboxes) .................
Botón para enviar información ...........
Botón para borrar
información del formulario ...............
Botón simple ..........................................
Imagen (botón) ......................................
Notas adicionales sobre botones........
Campo oculto .........................................
Validar páginas HTML5 ................................
Resumen ........................................................
Autoevaluación..............................................
Evidencia ........................................................
Referencias ....................................................
Bibliografía .............................................
Paginas Web recomendadas ..............
Respuestas sugeridas .................................
Contenido
44
46
47
48
49
51
56
56
57
57
58
59
59
59
61
62
62
62
63
63
63
64
64
65
65
66
66
66
66
Capítulo 4
Los nuevos elementos HTML5 ............ 67
Expectativa.....................................................
Nueva semántica ..........................................
Elementos estructurales ..............................
article.......................................................
aside ........................................................
footer .......................................................
header .....................................................
nav ...........................................................
section .....................................................
Elementos estructurales
complementarios.......................................
address....................................................
hgroup .....................................................
68
69
69
69
70
71
71
71
72
72
72
73
menu .......................................................
Elementos semánticos en línea .................
command ...............................................
details y summary ................................
dfn ...........................................................
figure y figcaption .................................
wbr ...........................................................
Media..............................................................
audio .......................................................
canvas .....................................................
embed .....................................................
svg ...........................................................
video ........................................................
Resumen........................................................
Autoevaluación .............................................
Evidencia ........................................................
Referencias ...................................................
Bibliografía .............................................
Paginas Web recomendadas ..............
Respuestas sugeridas ................................
73
74
74
75
75
76
76
76
76
77
79
80
81
83
83
84
84
84
84
84
Capítulo 5
Controles nuevos en
formularios HTML5 ........................... 85
Expectativa ....................................................
Introducción ..................................................
Un vistazo a los controles nuevos ..............
Elementos independientes .........................
fieldset ....................................................
keygen ....................................................
label.........................................................
meter .....................................................
progress ..................................................
Elementos tipo input ....................................
email .......................................................
number ...................................................
range .......................................................
search ....................................................
tel .............................................................
url.............................................................
Nuevos atributos...........................................
autofocus................................................
pattern ....................................................
placeholder ............................................
Resumen........................................................
Autoevaluación .............................................
Evidencia ........................................................
Referencias ...................................................
Bibliografía .............................................
Paginas Web recomendadas ..............
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
86
87
87
90
90
90
91
91
92
92
92
93
93
93
94
94
94
94
95
95
96
96
97
97
97
97
Alfaomega
Contenido
IX
Respuestas sugeridas ................................. 98
Capítulo 6
Primeros pasos con CSS ...................... 99
Expectativa..................................................... 100
Introducción ................................................... 101
Un vistazo a hojas de estilo o CSS
(Cascading Style Sheets) .......................... 101
Utilizar estilos a nivel local .......................... 102
Utilizar estilos a nivel documento .............. 103
Utilizar estilos a nivel de sitio (link)............ 105
Utilizar clases y el identificador
(class e id) .................................................... 107
Manipular la apariencia de una página .... 110
Manipular texto ...................................... 110
Manipular colores .................................. 114
Manipular Bordes .................................. 115
Agrupación de elementos (span y div) ...... 116
span ......................................................... 116
Ejemplo ................................................... 117
div............................................................. 117
Ejemplo ................................................... 118
Posicionamiento ........................................... 119
Elementos flotantes (propiedades
float y clear) ........................................ 119
Posicionamiento absoluto ................... 123
posicionamiento relativo ...................... 124
Resumen ........................................................ 126
Autoevaluación.............................................. 126
Evidencia ........................................................ 127
Referencias .................................................... 127
Bibliografía ............................................. 127
Paginas Web recomendadas .............. 127
Respuestas sugeridas ................................. 128
Capítulo 7
Nuevo y mejorado CSS3.........................129
Expectativa..................................................... 130
Introducción ................................................... 131
Motores de renderizado y CSS3 ................. 131
Nuevas notaciones para color .................... 132
Notación RGBA ...................................... 132
Notación HSL Y HSLA............................ 132
Bordes............................................................. 133
Bordes redondeados ............................. 135
Bordes sombreados .............................. 135
Bordes con imagen ............................... 136
Gradientes...................................................... 138
Transformaciones ......................................... 144
Alfaomega
Transiciones .................................................. 146
Transparencia ............................................... 150
Texto y fuentes descargables ..................... 151
text-shadow ............................................ 152
text-stroke .............................................. 152
@font-face .............................................. 153
Herramientas de selección ......................... 154
Selección por atributo .......................... 154
Selección por relación padre-hijo ....... 155
Selección inversa (not) ......................... 156
Resumen........................................................ 158
Autoevaluación ............................................. 158
Evidencia ........................................................ 159
Referencias ................................................... 159
Bibliografía ............................................. 159
Paginas Web recomendadas .............. 159
Respuestas sugeridas ................................ 160
Capítulo 8
Novedades en JavaScript .................. 161
Expectativa .................................................... 162
Introducción .................................................. 163
Nuevas herramientas de selección ........... 163
getElementsByClassName() ................ 163
getElementsByTagName ..................... 164
querySelector() ...................................... 164
querySelectorAll() .................................. 165
Almacenamiento de sesión y local ............ 165
Almacenamiento por sesión ............... 166
Almacenamiento local ......................... 166
Asignando y recuperando datos
de sessionStorage y localStorage ... 166
Métodos y propiedades de session
Storage y localStorage ...................... 169
Web offline (caché) ...................................... 169
Geolocalización ............................................. 172
WebSocket .................................................... 176
Creación interfaz ................................... 183
Conexión de sockets ............................. 183
Envío de mensaje .................................. 184
Algunas puntualizaciones .................... 185
Web workers ................................................. 185
Creación interfaz ................................... 190
Llamar al web worker ........................... 191
Construir el código del web worker .... 192
Resumen: pasos para crear un
Web worker ............................................ 193
Algunas puntualizaciones entre
Web workers y navegadores ............... 194
Resumen........................................................ 195
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
X
Autoevaluación.............................................. 195
Evidencia ........................................................ 196
Referencias .................................................... 197
Bibliografía ............................................. 197
Paginas Web recomendadas .............. 197
Respuestas sugeridas ................................. 198
Capítulo 9
Utilizar Canvas ................................... 199
Expectativa..................................................... 200
Introducción ................................................... 201
Primeros pasos con Canvas ........................ 201
Preparación del elemento Canvas...... 201
La cuadrícula y su eje de
coordenadas ....................................... 203
Dibujar textos ................................................ 204
Dibujar figuras rectangulares ..................... 206
Dibujar caminos (paths) .............................. 207
moveTo () ................................................ 209
lines () ...................................................... 210
arc ()......................................................... 212
Curvas cuadráticas ............................... 216
Curvas bezier .......................................... 218
Contenido
Utilizar imágenes .......................................... 221
DrawImage() .......................................... 221
Escalar imagen con drawImage () ...... 223
Recortar y dibujar parte de una
imagen con drawImage ()................. 225
Transformaciones......................................... 227
Guardar y restaurar el estado ............. 228
translate () .............................................. 231
rotate () ................................................... 233
scale () .................................................... 235
Animación...................................................... 237
Control de una animación ................... 238
Ejemplo 1 ............................................... 239
Ejemplo 2 ............................................... 241
Ejemplo 3 ............................................... 243
Resumen........................................................ 247
Autoevaluación ............................................. 247
Evidencia ........................................................ 248
Referencias ................................................... 249
Bibliografía ............................................. 249
Paginas Web recomendadas .............. 249
Respuestas sugeridas ................................ 250
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Arrancar con HTML5. Curso de programación
Este libro se pensó con la idea de apoyar a todos los lectores de habla hispana
interesados en conocer las posibilidades que ofrece la nueva especificación de
HTML, popularmente conocida como HTML5. Los capítulos de este libro abordan los
conceptos más básicos del leguaje, acompañado con ejemplos a cada concepto
explicado a lo largo del mismo.
Éste no es un manual o guía para migrar aplicaciones de las versiones anteriores de
HTML a HTML5. Éste es un libro que introduce poco a poco al lector, en forma amable
pero consistente con las nuevas alternativas que ofrece actualmente HTML5.
Dado que la especificación de HTML5 estará aún en movimiento por
algunos años antes de estar totalmente terminada, este libro, acorde con esta
situación, ofrece recursos en línea que serán actualizados y ocasionalmente se
presentará contenido adicional para respaldar mejor el aprendizaje del lenguaje
obtenido con el texto.
Con la experiencia, una persona se puede dar cuenta de que a veces
encontrar y comprender información acerca de algún tema de tecnología puede ser
caótico y disperso, incluso la barrera del idioma representa un problema que se
suma a las dificultades que enfrentan algunas personas que desean aprender los
temas más nuevos y apasionantes en el mundo del desarrollo de tecnologías. Es por
estas razones que un libro que ordene ideas, conceptos e información en nuestro
idioma es una forma muy bella y eficaz de aprender.
Sin más, ¡bienvenid@ al mundo de HTML5!
La estructura de cada capítulo incluye:
x
Listado de capacidades y competencias. Se describen brevemente los
aprendizajes esperados del participante al término del estudio del tema y
que integra conocimientos, habilidades, valores y actitudes como un
conjunto de comportamientos sociales, afectivos y habilidades cognitivas,
psicológicas sensoriales y motoras, que permiten llevar a cabo adecuadamente un papel, un desempeño, una actividad o una tarea.
x
Evidencias de las capacidades desarrolladas. Describen brevemente lo que
se espera que el lector demuestre al término del estudio y que consiste en
demostrar que puede llevar a cabo adecuadamente un papel, un desempeño, una actividad o una tarea.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
XII
Arrancar con HTML5. Curso de programación
x
Mapa conceptual del capítulo. Le dará al lector, mediante un esquema
gráfico, una visión de conjunto de los conceptos, su jerarquización y la
relación entre ellos
x
Exposición del tema. Corresponde al desarrollo del capítulo. Cuando se ha
considerado pertinente, se han incluido recuadros con ejemplos, casos
breves y figuras con esquemas explicativos. También es importante señalar
que los conceptos clave están destacados en el texto y sus definiciones
están en el glosario al final del libro.
x
Resumen. Estas secciones buscan entregar una visión general del capítulo
y facilitar la retención de conceptos nuevos.
x
Actividades. Para asegurar un aprendizaje efectivo, resulta imprescindible
buscar la interacción del lector con los temas expuestos en cada sección o
capítulo.
x
Referencias. Al final de cada capítulo se ha colocado bibliografía
recomendada y páginas Web recomendadas para estimular y facilitar la
profundización en el tema.
Nota:
En la mayor parte de los capítulos se indican Páginas Web recomendadas:
Sitios Web donde el lector podrá ampliar, profundizar y complementar información, localizar casos de éxito y otros recursos para investigar; también se
puede bajar textos y encontrar información actualizada en universidades,
institutos de investigación y centros de documentación.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Acceso al material complementario
Para tener acceso al material complementario del libro: Arrancar con HTML5. Curso
de programación, es necesario:
1. Ir a la página: http://virtual.alfaomega.com.mx/
2. Regístrese como usuario de sitio llene completamente el formulario. Guarde en
un lugar seguro su nombre de Usuario y Contraseña, para emplearlos para
futuros ingresos.
3. Ingrese con su Usuario a la sección de libros.
4. Busque y seleccione la imagen correspondiente a este libro para descargar su
material complementario.
NOTAS:
1. En adelante se referirá al material complementario como el material que se
descargó del sitio Web.
2. Se recomienda respaldar los archivos descargados de las páginas Web en
un soporte físico (CD, USB, disco duro o cualquier otro medio de
almacenamiento.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
¿De dónde viene y qué es
HTML?
1
Reflexione y responda las preguntas siguientes:
¿Qué es HTML y cuál es su historia?
¿Por qué usar HTML5?
¿Qué son las etiquetas HTML?
¿Cuáles son las tecnologías relacionadas comúnmente con HTML5?
Contenido
¿De dónde viene y qué es HTML?
Introducción
1.1 Un poco de historia
1.2 El éxito puede ser el mayor problema
1.3 Round 2 (nuevos competidores)
1.4 ¿HTML5 o una versión anterior?
1.5 Comprendiendo las etiquetas (tags)
1.6 Comprendiendo las hojas de estilo en cascada (CSS)
1.7 JavaScript
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
2
¿De dónde viene y qué es HTML?
Expectativa
Conocer la evolución y tendencia de HTML.
Conocer las características de las versiones HTML.
Compprender las razones para aprender HTML5
Después de estudiar este capítulo, el lector será capaz de:
x
x
x
Saber porque usar HTML5.
Conocer las versiones más relevantes de HTML previas a HTML5.
Conocer algunas ventajas de las diferentes versiones de HTML.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
¿De dónde viene y qué es HTML?
3
INTRODUCCIÓN
Antes de entrar de lleno en lo que es propiamente crear una página y sitios utilizando HTML5, considero apropiado dedicar este primer capítulo a dar un breve
vistazo a sus orígenes y razones de ser, para dar una mejor perspectiva, sobre todo
a aquellos que recién comienzan a adentrarse en el desarrollo Web o en la
programación. Si usted es un desarrollador experimentado, quizá sepa las generalidades de la historia de HTML y considere adecuado no leer esta parte, sin
embargo, lo invito a leer de cualquier manera este capítulo, ya que el HTML5 nos
está poniendo en una situación que no es del todo nueva, pero sí es quizá la de
mayor influencia en nuestro futuro inmediato como desarrolladores: la implementación del lenguaje y la especificación del mismo, no están bailando al mismo
ritmo.
Imagine, por ejemplo, que está diseñando un automóvil, y pasado un tiempo
logra tener un prototipo que no sale aún al mercado, pero que resulta ser tan bueno
y necesario, que todos comienzan a hacer cosas basadas en ese prototipo antes de
ponerlo a la venta, eso es lo que está sucediendo con HTML5, ha resultado muy
interesante y prometedor, y aunque tiene una base sólida y mucho apoyo por parte
de la industria, habrá que estar siempre pendientes de cambios y mejoras,
mantenga esto siempre en mente al leer éste u otros libros de HTML5.
Con una breve pero dinámica historia, el HTML es parte esencial de la Web y
ha logrado cambiar y madurar al ritmo de Internet en general, en las primeras
concepciones del HTML fue simplemente una manera útil de usar etiquetas (tags)
para determinar cómo una página debería ser desplegada, pero se han ido
añadiendo varias características. Hoy Internet sigue siendo acerca de documentos,
pero más que nunca, también de aplicaciones, sobre todo si se toma en cuenta que
antes sólo las computadoras de escritorio eran las únicas que desplegaban contenido de la Web, pero ahora también los dispositivos móviles lo pueden hacer, por
lo que todo parece indicar que es el momento de un nuevo estándar, y HTML5 es
ese estándar.
Fig. 1.1 La implementación del lenguaje HTML.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
4
¿De dónde viene y qué es HTML?
1.1 Un poco de historia
En 1989 Tim Berners-Lee creó un sistema que permitía conectar documentos
electrónicos, utilizando un lenguaje que enlazaba un documento con otro, dando
algunas características de formato a estos textos. Este lenguaje llamado HTML o
Hypertext Markup Language, traducido al español como Lenguaje de Marcado de
Hipertexto.
Este lenguaje fue creado deliberadamente para que fuera muy simple, ya que
en aquel entonces la Internet se utilizaba con base en comandos de texto, es decir,
que aunque Internet existía, no había un navegador que presentara información en
ventanas haciendo “clics” como sucede hoy en día, por lo que había que facilitarles
esto en la medida de lo posible a las personas que creaban documentos con este
formato en el lenguaje.
Por supuesto, esta idea tuvo mucho éxito, y con el tiempo había documentos
HTML por todas partes.
1.2 El éxito puede ser el mayor problema
La frase, lejos de desanimar, tiene el objetivo de ilustrar algunos casos como el de
HTML. Dado el éxito del formato, los creadores de contenido pronto se percataron
de que las propiedades del HTML al momento no eran suficientes para satisfacer
sus intereses y necesidades, fue entonces cuando las cosas comenzaron a ponerse
interesantes. Muchas personas comenzaron a construir programas o software que
funcionaban como intérpretes para el HTML, y se comenzó a crear una especie de
competencia para ver quién implementaba más rápido y mejor las características
que se iban añadiendo al HTML. En 1993 surgió “Mosaic”, el primer navegador
capaz de desplegar imágenes.
Las cosas continuaron así durante algunos meses, y en 1994 un gran jugador
surgió, Netscape Navigator, el cual fue el favorito de muchos un buen tiempo, sin
embargo, su dominio pronto se vio amenazado por otro grande, en 1995 surge el
Microsoft Internet Explorer, que es hasta hoy el navegador más utilizado. A todos
estos eventos se les popularizó con el nombre de “la primera guerra de navegadores”.
Mientras todo esto sucedía, había varios grupos tratando de estandarizar el
HTML para los navegadores, el más importante de estos grupos fue la W3C o World
Wide Web Consortium, liderada por la persona que comenzó con todo este desastre
(una vez más, sólo ilustrando), Tim Berners-Lee.
En realidad es que ni Netscape ni Microsoft hicieron gran caso de los esfuerzos
de estos grupos, y añadieron características propias tratando siempre de competir
entre sí, y aunque surgió el HTML2, ninguno de los grandes competidores adoptó
por completo este estándar, de manera similar sucedió con el HTML3.2.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
¿De dónde viene y qué es HTML?
5
El HTML4 surgió en 1998 y dado que el Internet Explorer fue claramente el
ganador de la primera guerra de navegadores, con un uso del 95% por parte de los
usuarios, el HTML quedó prácticamente a disposición de Microsoft sin importar
demasiado las organizaciones que intentaban estandarizarlo, aunque ciertamente
en el año 2002 Internet Explorer 6 utilizó el estándar.
1.3 Round 2 (nuevos competidores)
Durante dos años y ante el dominio de Microsoft no hubo ninguna innovación
relevante, y no fue sino hasta el año 2004 cuando la aún muy activa W3C cobró
fuerza, principalmente debido a que tuvieron un miembro importante, la Mozilla
Foundation y a otro que ha peleado como pocos en el mercado, que es la Opera
Software. La carta fuerte fue el navegador Mozilla Firefox lanzado ese mismo año,
que implementaba varias innovaciones que seguían casi todas los estándares de la
W3C, eventualmente otros navegadores menos difundidos pero sólidos siguieron
este ejemplo (Opera, Apple Safari y el reciente Google Chrome).
Ante la presión de la competencia, Microsoft ha anunciado y cumplido en su
versión Internet Explorer 9 un mucho mayor compromiso con los estándares de la
W3C. Otro competidor que hay que seguir de cerca es Google Chrome, ya que éste
ha demostrado tener gran visión del futuro hasta ahora y parece que ha entendido
antes que sus competidores hacia dónde se mueven las cosas, además de por
supuesto, tener gran influencia para poner pautas a competidores y desarrolladores.
La manera de percibir la Web es hoy diferente; para los desarrolladores la Web
ya no es una novedad, ya no se piensa en colocar sólo páginas informativas, ahora
las páginas más simples dan lugar a verdaderas aplicaciones que interactúan con el
usuario y la Web al mismo tiempo.
1.4 ¿HTML5 o una versión anterior?
Aunque similares, cada versión de HTML utiliza etiquetas diferentes, y ya que en sí
mismo el HTML5 tiene objetivos más ambiciosos de los que pretendían cubrir
versiones anteriores, éste tiene su propio y más extenso juego de etiquetas, pero
analice un poco.
HTML4
Ventajas: Es ampliamente aceptado hoy en día, su implementación está prácticamente en todos los navegadores, es permisivo con pequeños errores de código
(esto puede verse también como desventaja),si la compatibilidad entre navegadores
es un requerimiento primordial puede ser la mejor opción.
Desventajas: Aunque las funcionalidades propietarias añadidas a lo largo de los
años han creado cierta flexibilidad, no son comparables con las de HTML5. Las
capacidades para formularios son pocas, limitadas y esencialmente feas. La
mayoría de los navegadores soportan alguna forma de JavaScript, lo que permite
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
6
¿De dónde viene y qué es HTML?
mayor dinamismo, pero las implementaciones siguen teniendo amplias diferencias
en algunos casos.
XHTML
Ventajas: Un estándar estricto basado en el HTML4 y XML (por lo que su
implementación es también casi universal), no es permisivo con los errores, como sí
lo es HTML4, lo que obliga a formar correctamente un documento HTML como
sucede con un documento XML.
Desventajas: Básicamente las mismas de HTML4.
Nota
W3C trabajaba en XHTML2, esto no continuará más. Se ha trabajado en la
serialización de HTML5 conocida como XHTML5 por ahora las únicas
diferencias son el tipo MIME que utiliza y que la etiqueta DOCTYPE es opcional.
HTML5
Ventajas: Posee una gran cantidad de funcionalidades que los desarrolladores sólo
lograban con el uso de algún plug-in de terceros como Applets de Java o Flash
embebidos en el código.
Las mejoras en el manejo de multimedia son ampliamente superiores; imágenes, video, audio y fuentes de texto son mucho más manipulables. En muchos
casos, estas mejoras se pueden tomar como una respuesta directa a Flash.
Desventajas: HTML5 es tan nuevo que algunas personas que todavía usan
computadoras viejas podrían usar navegadores que no pueden visualizarlo aún.
En resumen, HTML5 nos proporcionará una manera de hacer un código más
limpio, más fácil de leer y escribir, cubriendo al mismo tiempo y de mejor manera la
cada vez mayor demanda de funcionalidades por parte de programadores, diseñadores y usuarios.
1.5 Comprendiendo las etiquetas (tags)
El código HTML consiste de un archivo de texto delimitado por etiquetas o “tags”
(palabra usada en inglés), dentro de estas etiquetas se coloca diversa información,
como por ejemplo, qué texto se debería visualizar, en qué lugar deben aparecer los
elementos, qué imágenes se van a utilizar, entre muchas otras cosas.
Para entender el porqué del uso de este sistema de etiquetado se tendría que
remontar a los días donde no existían mensajeros instantáneos y todos utilizaban
listas de correo con conexiones por módem dial-up, y donde gente bastante inteligente, utilizando estos recursos, se comunicaba para determinar qué etiqueta
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
¿De dónde viene y qué es HTML?
7
serviría para qué cosa y de qué manera debería escribirse. En este libro no se hará
“arqueología tecnológica” para contar estas historias, pero si usted está interesado
hay bibliografía disponible para consultar esos detalles.
Un ejemplo de etiqueta es, por ejemplo, la etiqueta <h2>, la cual sirve para
darle a un texto características de título o cabecera. Utilizando esta etiqueta, el
código HTML sería:
<h2>Hola, Bienvenido</h2>
Si se observa, el código se encontrará con los paréntesis angulares < > (los
símbolos “menor que” y “mayor que”, que enmarcan la etiqueta de apertura o inicio,
y </ >, que acotan la etiqueta de cierre o final), éste es el caso para etiquetas que
requieren apertura y cierre.
La etiqueta <img> permite colocar imágenes en sus páginas, el uso de esta
etiqueta se vería así:
<img src="pelota.jpg" />
Esta etiqueta no utiliza cierre, es por eso que se le llama simple o vacía, e
introduce una nueva característica en el uso de etiquetas, llamado atributo. Los
atributos en una etiqueta indican propiedades o comportamientos que la etiqueta
en cuestión debe tener, en este ejemplo se utilizó la propiedad src, la cual indica
que la imagen que debe desplegarse corresponde al archivo pelota.jpg y no a
cualquier otro. Los atributos pueden ser opcionales u obligatorios, dependiendo de
las especificaciones dadas a cada etiqueta.
Desde luego, existen muchas más etiquetas, y la destreza del programador o
diseñador radica en saber cuáles usar en el momento adecuado. Se utilizan etiquetas para dar formato a un texto, colocar un enlace, una imagen o algún otro tipo
de elemento, el navegador lee e interpreta estas etiquetas y las coloca en una forma
“traducida” y visualmente amable para el usuario. Esto es básicamente el funcionamiento de las cosas.
1.6 Comprendiendo las hojas de estilo en cascada (CSS)
CSS (Cascading Style Sheets: Hojas de Estilo en Cascada), es un lenguaje que no es
propiamente parte del HTML en ninguna versión definida por la W3C, su objetivo es
definir la presentación de un documento escrito en HTML o XML (y claro en XHTML)
pero no es parte del código HTML del documento en sí.
Como recordarán los desarrolladores experimentados, era una hazaña dar
formato a 100 páginas, donde el frustrante procedimiento era copiar y pegar
páginas con la estructura y aspecto básicos una y otra vez y editar manualmente
aquella pequeña diferencia o variación en cada página.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
8
¿De dónde viene y qué es HTML?
Fue entonces cuando las hojas de estilo llegaron al rescate. Usualmente en un
archivo separado, el programador usa CSS para especificar el formato para un tipo
de etiqueta o para una etiqueta en particular. La idea principal detrás de todo esto
es separar el código de estructura del código de presentación, de manera que
cuando se modifica el archivo con código CSS, éste inmediatamente afecta a todas
las páginas HTML que hacen referencia a él, evitando así editar cada página HTML
de forma individual.
Si usted ha utilizado versiones anteriores de HTML pero no ha aprendido CSS y
realmente quiere dar el salto a HTML5 es el momento de aprender, ya que mientras
que CSS era opcional en HTML4, en HTML5 es indispensable.
1.7 JavasScript
JavaScript es otro lenguaje de programación que tiene una estrecha relación con
HTML, y es demasiado extenso, como para dedicarle un libro completo (ya existen
varios en el mercado), por esta misma razón, adentrarse en JavaScript escapa del
objetivo de este libro, sin embargo, debe quedar claro que JavaScript es esencial
para HTML5, varias de las características más importantes de HTML5 requieren de
JavaScript, como son la nueva etiqueta <canvas>, la geolocalización, el almacenamiento local de datos y otras.
En el Cap. 8 (Novedades en JavaScript), se trata las nuevas características de
JavaScript con respecto a HTML5, pero le invito a que se integre rápida y necesariamente al mundo de JavaScript recurriendo a alguna bibliografía especializada en
el tema.
1.8 Tecnologías de páginas activas de servidor
Estas tecnologías son sin duda alguna parte muy importante del desarrollo Web hoy
por hoy, sin embargo, para llegar a ellas requiere de bases sólidas en HTML. Para
interpretarse, las páginas HTML se alojan en el navegador cuando se consultan, a
esto se le llama lado cliente, ya que las páginas están literalmente en nuestra
computadora o dispositivo, las páginas de servidor están alojadas en la máquina
servidor (de ahí el nombre), esto es lo que se conoce como “lado servidor.” Muchas
cosas interesantes están pasando gracias a estas tecnologías que se mantienen
vigentes y evolucionando, algunas son ASP, PHP, JSP y otras, que se combinan con
gestores de datos como Oracle, SQL Server o MySQL para manejar grandes cantidades de información.
Todas estas tecnologías también requerirían libros enteros, por lo que no se
abordarán en este libro, pero si usted está interesado en estos temas, existe
bibliografía disponible.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
¿De dónde viene y qué es HTML?
9
Actividades para el lector
1. Investigue las versiones y variantes de HTML.
2. En un reporte enumérelas, liste e identifique sus principales características.
3. Describa cada una de las versiones HTML que se presentaron y que no se
describieron en este capítulo.
4. Mencione la funcionalidad de todas y cada una de las versiones de HTML
existentes.
RESUMEN
Este capítulo es una introducción al HTML, señalando principalmente:
x
Origen e historia del HTML.
x
Por qué usar HTML5.
x
El sistema de etiquetado del HTML.
x
Las tecnologías comúnmente relacionadas con HTML5.
Autoevaluación
1. ¿Para qué es HTML?
2. ¿Por qué usar HTML5?
3. ¿Funciona HTML5 en los navegadores más importantes?
4. ¿En qué casos no se recomienda usar HTML5?
5. ¿Con qué tecnologías funciona paralelamente HTML5?
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
10
¿De dónde viene y qué es HTML?
EVIDENCIA
Investigó, determino y enumeró las versiones y variantes de HTML e
identificó sus principales características.
Describió las versiones HTML que ha presentado y que no fueron
descritas en este capítulo.
Citó la funcionalidad de todas y cada una de las versiones existentes
de HTML.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
¿De dónde viene y qué es HTML?
11
REFERENCIAS
Bibliografía
Pilgrim, Mark (2010). HTML5: Up and Running, 1a. ed., O’Reilly, EUA.
Keith, Jeremy (2010). HTML5 For Web Designers, 1a. ed., A Book Apart, EUA.
ORÓS, Juan Carlos (2010) Diseño de páginas Web con XHTML, JavaScript y CSS. 3ª
ed., México Alfaomega.
Páginas Web recomendadas
http://en.wikipedia.org/wiki/HTML
http://dev.w3.org/html5/spec/Overview.html
http://diveintohtml5.org/
http://html5demos.com/
http://www.html5rocks.com/
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
12
¿De dónde viene y qué es HTML?
Respuestas sugeridas a las preguntas de autoevaluación
1. El lenguaje de marcado de hipertexto se utiliza como base para la creación de
páginas Web.
2. Proporciona nuevas funcionalidades antes sólo disponibles con recursos de terceros, y estandariza técnicas habituales, pero que no eran reconocidas oficialmente.
3. Sí, pero no todos tienen el mismo nivel de soporte, ya que la especificación
HTML5 aún no está terminada.
4. No es conveniente usar HTML5 si la compatibilidad internavegador y con
navegadores o máquinas viejas es demasiado importante.
5. HTML5 requiere paralelamente de CSS y JavaScript para utilizar toda su
funcionalidad.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Preparándonos para
HTML5
2
Reflexione y responda las preguntas siguientes:
¿Cuáles navegadores soportan HTML5?
¿Cómo crear un archivo HTML?
¿Cuál es la estructura básica de un documento HTML?
¿Qué es y cómo usar la librería Modernizr?
Contenido
Preparándonos para HTML5
Introducción
2.1 Eligiendo un navegador
2.2 Tipo de documento
2.3 Estructura básica de un documento HTML
2.4 Título y Metadatos
2.5 Párrafos y saltos de línea
2.6 Detección de las características de HTML5
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
14
Preparándonos para HTML5
Expectativa
Saber en qué consiste un documento HTML.
Conocer el nivel de soporte que brinda a HTML5 un navegador.
Crear sus primeros documentos bajo la nueva especificación HTML5.
Después de estudiar este capítulo, el lector será capaz de:
x
x
x
x
Conocer las capacidades HTML5 de un navegador.
Crear la estructura básica de un documento HTML5.
Crear sus primeros documentos HTML5.
Implementar las etiquetas para párrafos y saltos de línea.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Preparándonos para HTML5
15
INTRODUCCIÓN
En mi opinión la mejor forma de aprender es “haciendo”, y de esta manera se
trabajará a lo largo de este libro, se utilizará el editor de texto más simple que
ofrezca su sistema operativo (Bloc de notas en el caso de Windows) para crear y
modificar archivos, para posteriormente visualizar sus resultados en un navegador.
Nota
Algunos lectores con cierta experiencia, se preguntarán por qué usar el Bloc
de notas o su equivalente si hay mejores y más sofisticados editores para
programar HTML, la respuesta es que mientras más sencillo sea el editor,
menos ayuda ofrece y mientras menos ayuda se tenga del editor de texto,
será necesario escribir mayor cantidad de código, y por lo tanto se ayuda a
recordar mejor las etiquetas HTML. Si el lector toma este consejo, a la larga
no se arrepentirá.
2.1 Eligiendo un navegador
Como se ha mencionado, el estándar HTML5 no ha sido aceptado oficialmente, por
lo que el lector tiene que asegurarse de utilizar un navegador que soporte la
mayoría de sus características.
Nota
No existe aún un navegador que soporte absolutamente todas las características de HTML5, cada fabricante ha intentado añadir las propias
especificaciones y características para darle “ventaja” a su navegador.
Después de esto se preguntará si vale la pena aprender HTML5.
¡Por supuesto que sí!
Fig. 2.1 HTML5 en distintos navegadores.
Los grandes han aprobado la mayor parte de las ideas del estándar. Microsoft,
Google, Apple, Mozilla Foundation han anunciado su soporte para HTML5 y las
ideas más importantes ya están disponibles en las versiones más recientes de sus
navegadores y están alentando a usuarios y desarrolladores para usar HTML5.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
16
Preparándonos para HTML5
HTML5 genera mejores hábitos de codificación. La separación de código de
presentación y de estructura es más adecuada en el desarrollo de programación
actual, además de obligar a usar un código más consistente al no ser tan permisivo.
En el momento de escribir estas líneas, Google Chrome 12, Microsoft Internet
Explorer 9, Firefox 5, Opera 11 y Apple Safari 5 dicen soportar HTML5, pero en
realidad soportan muchas características comunes del estándar, pero otras son
soportadas por un navegador y por otro no. Hay algunas técnicas para detectar el
soporte HTML5 de un navegador, pero son tan vertiginosas las mejoras en los
navegadores para HTML5 que hacen extremadamente difícil mantener la pista de lo
que está pasando, actualizaciones o nuevas versiones de los navegadores están
disponibles todo el tiempo. Por esta razón el autor ha hecho una página para
ayudarle a ver qué elementos HTML5 son soportados por su navegador.
Fig. 2.2 Aspecto de la página del detector de características HTML.
Apoyo en la
En esta página el autor utilizó la librería JavaScript Modernizr
para detectar las características disponibles en su navegador.
En los materiales adicionales encontrará los archivos:
detector.html y modernizr-2.0.js
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Preparándonos para HTML5
17
El navegador que le convenga será aquel que cubra con los elementos que
desea utilizar, en este libro se utilizará Google Chrome, porque al momento de
escribir estás líneas es el navegador que mayor soporte tiene para HTML5 y es el
más rápido ejecutándolo, esto puede cambiar en cualquier momento, estamos en
medio de una “guerra de navegadores” y algún otro puede tomar el liderazgo.
Si desea utilizar un navegador diferente a Chrome, siéntase con la libertad de
hacerlo, únicamente asegúrese de utilizar la herramienta de detección, existe la
posibilidad de que algún ejemplo no funcione en otro navegador.
2.2 Tipo de documento
Hasta los rebeldes más osados y las personas más aventureras, en algún momento
se dieron cuenta de que para lograr ciertos objetivos necesitaban un plan o estrategia, llegar a acuerdos e incluso crear reglas para lograr tal objetivo, de lo contrario
simplemente no podían alcanzar lo que buscaban.
La programación en general y por ende el HTML, no es la excepción a la necesidad de orden. Usted puede lograr ser enormemente creativo cuando hace
contenido Web, pero debe de seguir cierta estructura para que sus páginas puedan
ser interpretadas correctamente por un navegador.
2.2.1 Etiqueta <!DOCTYPE html>
El fijar un estándar siempre ha sido un problema, y una larga cadena de tensión e
inconvenientes ha rodeado al HTML como estándar a lo largo de su implementación
entre navegadores, como solución a uno de estos problemas surgió la etiqueta
DOCTYPE, que en HTML5 se observa de esta manera:
<!DOCTYPE html>
Con esta etiqueta se pueden establecer hasta hoy 15 modos de estándar
diferentes, pero la expuesta es la más corta, amena y simple que proporciona
HTML5 (Standard Mode). DOCTYPE siempre debe escribirse al principio del
documento, en mayúsculas y con un signo de exclamación al comienzo.
Si el navegador encuentra <!DOCTYPE html> asumirá que está utilizando
HTML5 y usará el Standard Mode, pero de no hacerlo el navegador interpretará que
hay algo peculiar en el documento y utilizará el modo llamado Quirk Mode, incluso si
sólo hay un simple espacio antes de la etiqueta.
No deseo abrumar al lector novel con todo este asunto de los diferentes
modos de DOCTYPE, porque en realidad estas distinciones son fruto de aquellos
tempranos días en el desarrollo de antiguas versiones del HTML y de antiguas
versiones de navegadores en los distintos sistemas operativos. Para efectos
prácticos, en HTML5 se puede decir que <!DOCTYPE html> es la manera en que
se asegura al navegador que en su página no habrá nada más que código HTML5.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
18
Preparándonos para HTML5
2.3 Estructura básica de un documento HTML
Antes de continuar, abra el editor de texto más simple que tenga, la mayoría de los
editores de texto simple guardan por default un archivo con extensión .txt.
Una vez que escriba su código, guarde sus documentos con las extensiones
.htm o .html, esto es importante, ya que de lo contrario ningún navegador
interpretará como una página HTML al archivo, evite guardar sus archivos con
extensión .txt.
Con el editor de texto abierto coloque la primera etiqueta que requiere HTML5,
que es por supuesto DOCTYPE, enseguida coloque una etiqueta <html>, ésta es
una etiqueta que requiere cierre, por lo tanto, consta de dos partes, las etiquetas
<html> y </html> que funcionan como delimitador de todo el resto de etiquetas
en el documento (excepto de DOCTYPE). Hasta este momento su código debe verse
así:
<!DOCTYPE html>
<html>
</html>
2.3.1 Etiquetas <head> y <body>
Para seguir con una estructura correcta, su documento debe tener dos etiquetas
que costan de dos partes: las etiquetas <head> y <body>. Dentro de la etiqueta
<head> use otra etiqueta que es destinada a darle título a la página, también de
dos partes llamada <title>. Hay otras etiquetas que también se colocan en la
sección Head, como las etiqueta para colocar scripts (la cual se usará en este libro
para JavaScript) y la etiqueta para metadatos <meta> que sirve para especificar
información acerca de sus páginas. Se abordará con más detalle las etiquetas
<title> y <meta> en la sección 2.4 Título y Metadatos.
Ahora implemente estas etiquetas para las secciones de cabecera (<head>
y cuerpo (<body>) de su página, escriba el siguiente código:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta encoding="iso-8859-1" />
</head>
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Preparándonos para HTML5
19
<body>
</body>
</html>
Escriba este código en su editor de texto y guárdelo como primer_html5.html
en la ubicación que le resulte más conveniente, pero procure tenerlo a la mano, ya
que este archivo servirá como base para próximos ejercicios y ejemplos.
Fig. 2.3 Se muestra cómo se ve en Bloc de notas el código que ha escrito.
Apoyo en la
En los materiales adicionales encontrará el archivo primer_html5.html
2.4 Título y Metadatos
Como se mencionó en la sección <head>, se puede indicar el título de una página
con las etiquetas <title> y </title>, las cuales tienen un efecto usualmente
visible que aparece en las barras de título del navegador que utilice.
Ejemplo
<head>
<title>Tienda de Mascotas</title>
</head>
La W3C ha enfatizado siempre que un documento debe tener “significado” en
un ambiente estructurado de información, y que el HTML es justamente la manera
para lograr esa estructura. Los metadatos son una manera de atender ese punto de
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
20
Preparándonos para HTML5
vista, se trata de dar “información sobre nuestra información”, para ello en sus
documentos, en la sección <head> utilice la etiqueta vacía (sin cierre) <meta>.
Esta etiqueta tiene varios propósitos, puede colocar palabras claves que
tengan relación con información que presentan sus documentos, de esa manera
facilita a las personas y a algunos sistemas como los buscadores (yahoo, bing, etc.)
encontrar su página y colocarla en sus resultados de búsqueda (indexar su página).
Imagine que tiene una tienda de mascotas y su página habla de gatos, aves, perros,
roedores e insectos, usted querría poner algunas palabras clave como metadato.
Podría usar el siguiente código en la sección <head>:
<head>
<title>Tienda de Mascotas</title>
<meta name="keywords"
content="mascotas,cahorros,perros,gatos,hamsters" />
</head>
Otro uso común es indicar la codificación de caracteres que se desea utilizar.
Esto es básicamente para indicar el juego de letras, números y símbolos que la
página mostrará, si se desplegó normalmente información en inglés, no representa
gran problema, pero se considera un buen hábito hacerlo, normalmente para el
juego de caracteres en inglés se usa la codificación UTF-8. En el caso del idioma
español la codificación más utilizada es la ISO-8859-1 (para evitar problemas con
acentos o con la letra ñ).
<head>
<title>Tienda de Mascotas</title>
<meta name="keywords"
content="mascotas,cahorros,perros,gatos,hamsters" />
<meta encoding="iso-8859-1" />
</head>
También puede usarse esta etiqueta para redireccionar a los visitantes de su
página a otra URL. Suponga que está dando mantenimiento a sus páginas y
mientras tanto desea que todas las personas que accedan a su página vean un
anuncio de “En mantenimiento”, sus visitas serán enviadas a la nueva dirección
usando la URL indicada en 3 segundos, por ejemplo:
<meta http-equiv="refresh" content="3";
url="http://www.midominio.com/mantenimiento.html" />
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Preparándonos para HTML5
21
Ejercicio
1.
2.
3.
4.
Abra el archivo primer_html5.html ya que se usará como base.
Coloque el título “Tienda de Mascotas”.
Coloque los metadatos para palabras claves “mascotas, cahorros, perros,
gatos, hamsters” y para codificación ISO-8859-1.
Al terminar guarde el archivo con el nombre de principal.html en el mismo
directorio del primer ejercicio (primer_html5.html). La Fig. 2.4 muestra cómo
queda el código de su archivo.
Fig. 2.4 Código de documento básico HTML con metadatos.
2.5 Párrafos y saltos de línea
Todos los elemento que efectivamente se visualizarán en el navegador estarán
dentro del ámbito de <body> y </body>. Cuando se emplea párrafos en HTML
ocupe la etiqueta con cierre <p>, en la que el texto de párrafo se encontrará
delimitado por las dos partes de la etiqueta, es decir, entre <p> y </p>, como
sigue:
<p>Nuestro texto</p>
El navegador siempre inserta un espacio vertical después de cada párrafo, de
manera que si por ejemplo se colocan párrafos consecutivos, como a continuación,
habrá un espacio entre ambos:
<p>Bienvenido(a) a la Tienda de Mascotas!</p>
<p>Nuestra misión es facilitarle el camino para hacer de una de
nuestras mascotas un gran compañero para usted y toda su familia,
disfrute la visita a nuestro sitio y esperamos servirle pronto en
nuestra tienda</p>
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
22
Preparándonos para HTML5
La figura 2.5 muestra el aspecto que tiene el código anterior cuando lo prueba
en el navegador.
Fig. 2.5 Página que utiliza párrafos <p>.
Muchas veces el espacio vertical entre párrafos no es algo deseable para la
estética de sus páginas, por ejemplo, cuando se quiere hacer un breve resumen de
indicaciones o especificaciones.
Para insertar un salto de línea, simplemente se utiliza la etiqueta <br/>, esta
etiqueta no requiere cierre. Hay que aclarar que el uso de <br/> no depende de
ninguna manera de la etiqueta <p>, por tanto se puede utilizar dentro o fuera de un
párrafo o sin ningún párrafo presente, como se muestra:
<p>Correo electrónico:</p><br/>[email protected]
o bien, si así lo desea:
<p>Correo electrónico:<br/>[email protected]</p>
Modifique el archivo principal.html para agregar un párrafo con la leyenda
“Bienvenido(a) a la Tienda de Mascotas!”, después el pequeño mensaje informativo
“Nuestra misión es facilitarle el camino para hacer de una de nuestras mascotas un
gran compañero para usted y toda su familia, disfrute la visita a nuestro sitio y esperamos servirle pronto en nuestra tienda”. Finalmente, utilizando un párrafo y dentro
saltos de línea, coloque lo siguiente:
Nuestra Dirección:
Calle: San Ciprián No. 45
Colonia: Centro
México D.F.
C.P. 07640
La Fig. 2.6 muestra cómo se verá la página en el navegador, una vez salvada.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Preparándonos para HTML5
Apoyo en la
23
Fig. 2.6 Página que utiliza saltos de línea <br/>.
En los materiales adicionales encontrará el archivo principal.html
2.6 Detección de las características de HTML5
No quiero dejar pasar la técnica que utilicé para hacer el detector de características,
porque es probable que algunos lectores con algo de experiencia deseen saber
cómo lo hice, pero si usted es aún un principiante, no se preocupe si no entiende
totalmente el código expuesto, si continúa consultando este libro lo entenderá por
completo antes de lo que cree.
Todas las técnicas que hay para detectar la viabilidad de HTML5 se basan en
intentar crear un elemento, para después llamar a alguna propiedad de este elemento y ver si efectivamente está ahí. Como mencioné anteriormente, utilicé la
popular librería de código libre llamada Modernizr licenciada por el MIT, los pasos
básicos para hacer su propio detector son los siguientes:
1. Descargue la librería Modernizr del sitio oficial http://www.modernizr.com y
coloque el archivo de esta librería en el mismo directorio donde se
encontrará su página (utilice la última disponible).
2. Abra el archivo primer_html5.html) y guárdelo como midetector.html (si
prefiere hacer todo desde cero, adelante).
3. Dentro de la cabecera de su página (etiqueta <head>) coloque una etiqueta
para poder leer JavaScript, Modernizr es esencialmente un archivo
JavaScript con extensión .js que se invocará desde su página.
<script src="modernizr-2.0.js"></script>
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
24
Preparándonos para HTML5
4. Hay que añadir una clase que requiere Modernizr para dejarle saber a las
hojas de estilo (CSS) si JavaScript está o no disponible en el navegador, ésta
se coloca en la etiqueta <html> como sigue:
<html class="no-js">
5. Coloque un contenedor para depositar el resultado obtenido del análisis con
Modernizr, para esto se usa la etiqueta <div> con el identificador “resultado”
y la indicación de disparar la función desde la etiqueta <body> con su evento
onload llamando a la función JavaScript detectar().
<body onload="detectar()">
<div id="resultado">
</div>
</body>
6. Finalmente se debe colocar una función llamada en nuestro caso “detectar”
que utiliza Modernizr para averiguar si una característica HTML5 existe,
para fines del ejemplo se detectará una característica que está presente en
todos los navegadores que soportan HTML5, ésta es la etiqueta <canvas>.
Para enriquecer un poco el detector, haga que le indique si está disponible
una característica HTML5 para gráficos en 3D llamada Webgl disponible hasta
ahora sólo en Chrome y en Firefox en sus últimas versiones, nuestra función
detectar:
<script type = "text/javascript">
function detectar(){
if (Modernizr.canvas){
document.getElementById("resultado").innerHTML
puede usar la etiqueta canvas :))) <br />";
}else{
document.getElementById("resultado").innerHTML
no puede usar la etiqueta canvas :( <br />";
}
if (Modernizr.webgl){
document.getElementById("resultado").innerHTML
puede usar WebGL :))) ";
}else{
document.getElementById("resultado").innerHTML
no puede usar WebGL :( ";
}
}
= "El navegador
= "El navegador
+= "El navegador
+= "El navegador
</script>
La Fig. 2.7 muestra la página en ejecución.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Preparándonos para HTML5
25
Fig. 2.7 Página en ejecución que utiliza Modernizr.
Nota
Si desea hacer aún más sofisticado su detector de características HTML5
requiere entonces ir más a fondo en la librería Modernizr y mejorar el código
JavaScript.
Actividades para el lector
1. Investigue qué son los tipos MIME.
2. Haga una tabla donde indique los tipos MIME, sus características y acciones.
3. Determine el tipo MIME utilizado implícitamente por HTML5.
4.- Utilice el detector de características HTML5 y compare las capacidades de
por menos dos navegadores.
5.-Elabore un documento HTML5 cuya estructura básica sea: título, metadatos y
dos párrafos incluya un salto de línea entre ellos.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
26
Preparándonos para HTML5
RESUMEN
En este capítulo se han analizado los puntos más esenciales para poder a comenzar
a desarrollar bajo la especificación HTML5:
x
Navegadores que soportan HTML5 y cómo elegir uno.
x
Como crear la estructura base de un HTML5.
x
Utilizar los elementos HTML para crear párrafos y saltos de página para
familiarizarse con estos elementos.
x
Filosofía de etiquetado de HTML.
x
Cómo establecer el nivel de soporte de HTML5 por parte de un navegador
utilizando la librería Modernizr.
Autoevaluación
1. ¿Qué navegador es el más avanzado en cuanto a soporte para HTML5?
2. ¿Cómo indica en un documento HTML que debe ser interpretado como HTML5?
3. ¿Qué elemento indica el encabezado de un documento HTML?
4. ¿Qué elemento indica el cuerpo de un documento HTML?
5. ¿Qué es Modernizr?
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Preparándonos para HTML5
27
EVIDENCIA
Investigó los tipos MlME, en un tabla indica sus caracteristicas y
acciones.
Determinó que tipo MIME utiliza HTML5
Comparó y documentó las capacidades de diferentes navegadores con
el detector de características HTML5.
Implementó la estructura básica de un documento HTML5.
Utilizó párrafos y saltos de línea, en documentos HTML5.
REFERENCIAS
Bibliografía
Pilgrim, Mark, (2010). HTML5: Up and Running, 1a. ed., O’Reilly, Estados Unidos de
América.
Wempen, Faithe, (2011). HTML5: Step by Step 1a. ed., O’Reilly, Canadá.
Páginas Web recomendadas
http://www.modernizr.com/
http://dev.w3.org/html5/spec/Overview.html
http://diveintohtml5.org/
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
28
Preparándonos para HTML5
Respuestas sugeridas a las preguntas de autoevaluación
1. Google Chrome es el navegador con mayor soporte para HTML5
(Octubre de 2011)
2. Utilizando el elemento DOCTYPE (<!DOCTYPE html>).
3. El elemento <head>.
4. El elemento <body>.
5. Es una librería de código libre proporcionada por el MIT que facilita la detección
del soporte de los navegadores para elemento HTML5.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
3
Reflexione y responda las preguntas siguientes:
¿Qué es XHTML y cuál es la diferencia con HTML?
¿Cómo enriquecer el contenido de los documentos HTML?
¿Qué son y para qué sirven los formularios HTML?
¿Cómo validar que las páginas construidas cumplan con la especificación HTML5?
Contenido
Más bases HTML
Introducción
3.1 ¿HTML o XHTML?
3.2 Formato de texto con etiquetas
3.3 Listas
3.4 Imágenes
3.5 Tablas
3.6 Hipervínculos (enlaces)
3.7 Formularios (controles clásicos)
3.8 Validar páginas HTML5
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
30
Más bases HTML
Expectativa
Fortalecer y ampliar sus conocimientos de los fundamentos de HTML.
Comprender algunos elementos para manipular la apariencia de documentos HTML.
Conocer la construcción de formularios.
Validar la correcta formación de documentos bajo la especificación HTML5.
Después de estudiar este capítulo, el lector será capaz de:
x
x
x
x
x
Conocer la diferencia entre HTML y XHTML.
Manipular la estructura visual de una página.
Enriquecer con más elementos las páginas HTML.
Crear formularios con los elementos clásicos de HTML.
Validar sus propias páginas HTML5.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
31
INTRODUCCIÓN
Continuando con el viaje en HTML, hay puntos interesantes e incluso polémicos
acerca del HTML, en este capítulo se fortalecerán los fundamentos del lenguaje y al
mismo tiempo hará más ricas sus páginas con el uso de imágenes, enlaces,
formatos de texto y algunos métodos de organización visual como tablas y listas.
3.1 ¿HTML o XHTML?
XHTML, acrónimo de eXtensible Hypertext Markup Language (Lenguaje Extensible
de Marcado de Hipertexto), es el lenguaje pensado para sustituir a HTML como
estándar para las páginas Web. En su versión 1.0, XHTML es solamente la versión
XML de HTML, por lo que tiene, básicamente, las mismas funcionalidades, pero
cumple especificaciones sintácticas más estrictas, como lo hace un documento
XML. Su objetivo… lograr una Web semántica, donde la información y la forma de
presentarla estén claramente separadas (objetivo presente también en HTML5). La
versión 1.1 parte a la especificación en módulos.
Ahora la parte polémica; a pesar de las nobles intenciones del XHTML la
verdad es que no ha logrado reemplazar al HTML, ya que en su fortaleza lleva
consigo la carga de su propia debilidad, la razón es que mientras algunos programadores sostienen que XHTML es de acabado más profesional y de mejor nivel,
además de que permite cierto nivel de validación para encontrar errores, lo que
obliga a ser más claro y consistente al escribir código, otros programadores argumentan que simplemente significa trabajar más sin una necesidad real, y esta afirmación, trágicamente parece tener cierto viso de verdad, cuando se descubre que el
99% de las páginas hoy publicadas en la Web no cumplen cabalmente con las
exigencias del XHTML, incluyendo la mayor parte de las páginas que claman hacerlo.
Algunas diferencias que existen entre HTML y XHTML.
Los elementos vacíos (sin etiqueta de cierre) deben cerrarse siempre:
Incorrecto: <br>
Correcto: <br></br> o <br/> o <br />
Los elementos no vacíos, también deben cerrarse siempre:
Incorrecto: <p>Primer párrafo<p>Segundo párrafo
Correcto: <p>Primer párrafo</p><p>Segundo párrafo</p>
La W3C trabajó en la versión XHTML 2.0, sin embargo, publicaron que este
esfuerzo no seguiría siendo impulsado y que HTML5 sería el estándar apoyado.
Se anunció que se trabaja paralelamente a HTML5 con una versión serializada
como XML llamada XHTML5, la única diferencia entre HTML5 y XHTML5 es el tipo
MIME que se utiliza (application/xhtml+xml o application/xml) y que
la etiqueta DOCTYPE es opcional.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
32
Más bases HTML
Nota
HTML5 aún no es oficialmente un estándar, ni rechaza a XHTML, de hecho
toma las mejores cosas de la sintaxis de HTML4 y XHTML.
La W3C no se ha manifestado con relación a XHTML5, pero todo indica que
esto es un esfuerzo para serializar el contenido de HTML5 y ayudar a que
aplicaciones especiales que leen el código de una página, pero no la visualizan
como lo haría un navegador, lo hagan más fácilmente.
x
Validación y tradición estricta. Usted puede validar sus documentos con
útiles herramientas que están emergiendo en la red, se usará el validador de
la W3C (http://validator.w3.org). El estándar en la sintaxis de HTML5 se
acerca más a XHTML que a HTML4, la brecha entre el código “flojo” y XHTML
será mucho más corta.
x
DOCTYPE simple. Nuevamente es posible recordar el DOCTYPE y usar un
editor simple sin tener que copiarlo de algún lugar.
x
Separación de contenido y apariencia. Muchas etiquetas han perdido los
atributos que afectaban su apariencia en favor del uso de los estilos CSS.
x
Mejor integración con otros lenguajes. A pesar de que el HTML5 sigue
haciendo de HTML la piedra angular en la Web, cede paso a otras tecnologías como CSS, JavaScript o páginas de servidor para aumentar la
versatilidad y poder de sus páginas.
x
Nuevas características. HTML5 integra nuevas características de otras
tecnologías, en esto se pondrá especial atención en este libro.
Notas
La traducción de la especificación oficial se encuentra en:
http://www.sidar.org/recur/desdi/traduc/es/xhtml/xhtml-basic.html
Aunque HTML5 no es XHTML, los ejemplos y código del libro se basan en la
sintaxis de XHTML, para ayudar al lector a fomentar buenos hábitos de
programación.
3.2 Formato de texto con etiquetas
Cuando se escribe algo en un procesador de texto, en el cliente de correo, en el
mensajero instantáneo o incluso en un papel, existen ocasiones en que se quiere
enfatizar, separar o resaltar algo; es en ese momento cuando se utilizan letras en
negritas para alguna frase, se usan los formatos itálico, títulos o subtítulos para
organizar contenido. HTML no es la excepción a esas necesidades.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
33
HTML5 incluye algunas etiquetas para controlar el formato de un texto. Por
ahora aprenderá estas etiquetas y quedará, para otro capítulo, el estudio de las
hojas de estilo (CSS), que mejoran la apariencia de sus páginas Web.
Si lo que se busca es separar el código de estructura del código para dar
apariencia ¿por qué siguen existiendo etiquetas de formato para texto?, la razón es
porque se trata más de un tema de semántica que de formato, es decir, que existen
situaciones en las que es de mayor prioridad el sentido de nuestro documento, que
el cómo se ve, esto se puntualizará cuando se trate el tema de cabeceras.
Nota
Cabe aclarar a los lectores más experimentados que en este libro de HTML5, no
se utilizará etiquetas aún soportadas por los navegadores, pero consideradas
obsoletas por el HTML5, como son, entre otras:<basefont>, <font> o
<center>
3.2.1 Cabeceras
La idea de las cabeceras o encabezados (headers en inglés) es muy simple en
realidad, únicamente tienen el objetivo de ayudar a organizar los textos en secciones, de la misma forma que se usan títulos y subtítulos en un documento común
y corriente. Las etiquetas de cabecera requieren cierre y utilizan números del 1 al 6
para indicar su tamaño, siendo 1 el título de fuente más grande y 6 el de fuente más
pequeña, es decir, se usa desde <h1> hasta <h6>. No existen dimensiones
específicas para cada tamaño, éste está sujeto a la configuración del navegador
donde se desplieguen los headers, hay que tener esto en cuenta para decidir si es
apropiado usar algún determinado tamaño, ya que usuarios con navegadores y
configuraciones diferentes verán también tamaños diferentes.
Fig. 3.1 Cabeceras desde <h1> hasta <h6>.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
34
Más bases HTML
Ejercicio
Agregue algunos encabezados a su página principal.html. Inmediatamente después
de la etiqueta <body>, coloque el siguiente código:
<h1>Tienda de Mascotas</h1>
<h2>Reuniendo nuevos mejores amigos!</h2>
Justo antes del párrafo (<p>) que contiene el texto “Nuestra Dirección:”
coloque:
<h3>Visítenos!</h3>
Al terminar guarde el archivo y consulte el resultado en el navegador.
La figura 3.2 muestra el resultado después de agregar encabezados y ver la
página en el navegador.
Fig. 3.2 Encabezados <h1> hasta <h3>.
3.2.2 Negritas, cursiva, subrayado y otros
Para llamar la atención del usuario sobre una letra, palabra o frase, una técnica a la
que se recurre con frecuencia en HTML es utilizar texto en negritas (bold) o quizá
texto con letras itálicas (italic), justo como sucede en prácticamente todo los procesadores de palabras actuales.
Para utilizar negritas utilice la etiqueta con cierre <b> y para itálicas la
etiqueta, también con cierre <i>. Para utilizar estas etiquetas simplemente coloque
dentro de ellas el texto que se quiere resaltar, por ejemplo:
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
35
<p>Me ha gustado <b>mucho</b> el postre de hoy</p>
<p>Tengo que hacer un resumen de la película <i>El Padrino</i> para
la tarea de esta semana</p>
Es posible que usted desee que algún texto se vea con negritas y con itálica al
mismo tiempo, para lograr esto usted puede anidar ambas etiquetas como sigue:
<p>El título del libro que leí es <b><i>La Evolución de Calpurnia
Tate</i></b></p>
O bien
<p>El título del libro que leí es <i><b>La Evolución de Calpurnia
Tate</b></i></p>
Si quiere hacer que una cabecera entera esté en itálicas simplemente haga lo
siguiente:
<h1><i>Mi cabecera h1</i></h1>
Recuerde respetar siempre la estructura de árbol que tienen los documentos
HTML, algo como lo siguiente sería incorrecto:
<i><b>La Evolución de Calpurnia Tate</i></b>
Nota
Algunos navegadores podrían ser permisivos e interpretar “bien” lo que
deseamos hacer, pero aun así el código sería incorrecto.
De la misma manera trabaja la etiqueta <ins>, que sirve para resaltar un
texto con una línea de subrayado:
<ins>La Evolución de Calpurnia Tate</ins>
Existen más etiquetas para dar formato el texto que trabajan en la misma
lógica de las anteriores, se mencionan las ya soportadas por HTML5 (recuerde que
HTML5 aún evoluciona y podría añadir más etiquetas o cambiarlas de algún modo).
<big>Texto grande</big>
<em>Texto enfatizado</em>
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
36
Más bases HTML
<small>Texto pequeño</small>
<strong>Texto fuerte</strong>
<del>Texto tachado</del>
Ejercicio
En el siguiente ejercicio se usarán negritas e itálicas. Abra nuevamente el archivo
principal.html y delimite el texto “Reuniendo nuevos mejores amigos!” utilizando
una etiqueta <i> dentro de <h2> para dar al encabezado formato itálico. Una vez
hecho esto ubique el primer párrafo (<p>) y ponga en negritas con la etiqueta <b>
el texto “Tienda de Mascotas”, finalmente subraye en el último párrafo el texto
“Nuestra Dirección” con la etiqueta <ins>. El resultado del ejercicio se muestra en
la Fig. 3.3.
Fig. 3.3 Página con texto itálico, en negrita y subrayado
3.2.3 Subíndices y superíndices
En mi experiencia he encontrado una duda común entre las personas que desean
colocar fórmulas o referencias a notas, tienen la duda de cómo colocar números o
letras por arriba o por debajo de la línea base del texto. Para solucionar esto, HTML
propone un par de alternativas llamadas Superíndice (Superscript en inglés) y
Subíndice (Subscript en inglés). Ahora que sabe cómo usar negritas, itálicas y
subrayado, la implementación de la etiqueta <sup> para superíndice y la etiqueta
<sub> para subíndice, ambas con cierre, le resultará sencilla, por lo que se
ejemplificarán en el siguiente ejercicio.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
37
Ejercicio
Abra el archivo principal.html con el que ha trabajado y modificado, justo después
de los primeros 2 párrafos (<p>), coloque el siguiente código:
<p>Acuda a nuestra tienda para conocer a nuestras mascotas y a
nuestro extenso catálogo de juguetes y accesorios disponibles para
su diversión y cuidado <sup>1</sup></p>
Ahora, antes de la etiqueta de cierre </body> agregue otro párrafo:
<p><sup>1</sup>Venta de comida, productos y accesorios para perros,
gatos, pájaros, roedores, reptiles y peces.</p>
Guarde el resultado y observe el resultado en su navegador.
La Fig. 3.4 muestra la página con el número 1 como superíndice al final del
tercer párrafo y al principio de la última línea.
Fig. 3.4. Página con superíndices.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
38
Más bases HTML
Para incluir un subíndice <sub> se trabaja exactamente de la misma manera,
con la única diferencia de que, si se usa como en el ejemplo anterior, el número 1
aparecería por debajo de la línea base del texto común y no por arriba.
3.2.4 Bloque de citas
La etiqueta con cierre <blockquote> da un resultado similar al párrafo, inserta
espacio antes y después de un bloque de código, pero también inserta un margen a
la izquierda y a la derecha. El resultado visual tiene la finalidad de manejar el texto
dentro las etiquetas <blockquote> </blockquote> como los libros lo hacen
con una frase que ha dicho alguien más, es decir, manejar el texto como una fuente
de información externa, el código sería:
<blockquote>El texto que deseamos colocar<blockquote>
El bloque de citas <blockquote> tiene un parámetro opcional, cite, que
sirve para indicar la URL de donde se ha obtenido el texto de la cita, utilizando este
atributo el código es similar a éste:
<blockquote cite="http://www.midominio.com">Nuestro
texto<blockquote>
Ejercicio
Abra el archivo primer_html5.html con la estructura HTML básica guárdelo con el
nombre de albert.html.
Dentro de las etiquetas <body> coloque un encabezado <h1> con el texto “El
genio de cabello alborotado”, después un párrafo <p> con la leyenda “Albert
Einstein dijo:” y finalmente un bloque de citas con el siguiente código:
<blockquote
cite="http://www.proverbia.net/citasautor.asp?autor=327">
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos
las mismas cosas.
</blockquote>
El código final deberá verse como muestra la Fig. 3.5
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
39
Fig. 3.5 Código de página albert.html.
Finalmente guarde el archivo y vea el resultado en el navegador, en la figura
3.6 muestra el resultado que debería obtener:
Fig. 3.6 Página que utiliza el elemento </blockquote>.
Apoyo en la
En los materiales adicionales encontrará el archivo albert.html
3.2.5 Línea Horizontal
Hay un elemento vacío (sin cierre) en HTML llamado <hr/> que no tiene un efecto
directo sobre las secciones de texto, pero puede ayudar a organizarlo con respecto
a otros bloques de texto o cualquier otro elemento en nuestras páginas. Esto lo hace
únicamente trazando una línea horizontal justo donde se coloca la etiqueta <hr/>.
Edite el archivo principal.html, justo después del cierre del bloque de citas
</hgroup> coloque la etiqueta <hr/>, el código es el siguiente:
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
40
Más bases HTML
<h1>Tienda de Mascotas</h1>
<h2><i>Reuniendo nuevos mejores amigos!</i></h2>
<hr/>
Salve su archivo y observe cómo se ve su página.
Fig. 3.7 Página que muestra la línea hecha por con <hr/>
La figura 3.7 incluye los cambios hechos en los puntos 3.2.1, 3.2.2. y 3.2.3.
Apoyo en la
En los materiales adicionales encontrará el archivo principal.html.
3.3 Listas
Imagine que tiene un documento donde maneja una considerable cantidad de información. Usualmente cuando existe esta situación, usted desea abreviar el tiempo
para que cualquier persona encuentre más rápida y eficientemente cierto punto de
interés entre toda la cantidad de información disponible, para lograr esto se recurre
a elaborar algún tipo de lista (como un índice, por ejemplo).
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
41
En este punto se explorarán las posibilidades de HTML con respecto al uso de
listas, como son: listas numeradas, conocidas también como listas ordenadas, listas
no numeradas llamadas también listas no ordenadas y las listas de definición.
También se aprenderá cómo anidar listas dentro de otras.
3.3.1 Listas numeradas y listas no numeradas
La etiqueta con cierre para listas no numeradas es <ul>, cada elemento de la lista
utilizará un símbolo llamado bullet. Para listas numeradas se usa la etiqueta <ol>,
aquí, a cada elemento de la lista le precederá un número. Al iniciar la lista se utiliza
la etiqueta <ul> o bien la etiqueta <ol>, se coloca cada elemento de la lista
delimitado por la etiqueta <li> y su cierre </li>, y de inmediato se cierran estas
listas con </ul> o </ol> según sea el caso.
Observe el código utilizando <ul> (una lista no numerada):
<ul>
<li>Elemento
<li>Elemento
<li>Elemento
<li>Elemento
1</li>
2</li>
3</li>
4</li>
</ul>
Una lista numerada trabaja de la misma manera pero utilizando la etiqueta
<ol>:
<ol>
<li>Elemento
<li>Elemento
<li>Elemento
<li>Elemento
1</li>
2</li>
3</li>
4</li>
</ol>
Si desea puede anidar listas, colocando una dentro de otra. En el siguiente
código se colocará una lista numerada dentro de una lista no numerada:
<ul>
<li>Elemento 1</li>
<li>Elemento 2</li>
<li>
<ol>
<li>Elemento 1</li>
<li>Elemento 2</li>
<li>Elemento 3</li>
</ol>
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
42
Más bases HTML
</li>
<li>Elemento 4</li>
</ul>
Note cómo la lista no numerada <ul> está dentro de una etiqueta de
elemento <li>, esto es porque la lista no numerada es un elemento de la lista
padre <ol>.
Pruebe los códigos anteriores. Utilice el archivo primer_html5.html y guárdelo
como listas.html, enseguida dentro de la sección <body>...</body> coloque los
tres ejemplos de código anteriores. Guarde el archivo y vea el resultado en su
navegador.
El ejercicio se ve como se muestra en la Fig. 3.8.
Fig. 3.8 Muestra de lista no numeradas, numerada y anidadas.
Apoyo en la
En los materiales adicionales encontrará el archivo listas.html.
3.3.2 Listas de definición
Las listas de definición son justamente eso, listas que muestran definiciones, para
ellas se utilizan las etiquetas con cierre <dl> (que se origina del término en inglés
definition list), la etiqueta <dt> (del término en inglés definition term) y la etiqueta
<dd> (del inglés definition description).
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
43
Ejemplo
<dl>
<dt>Pastor Alemán</dt>
<dd>Éste es un perro de pastor robusto, bien musculoso, de talla
mediana, orejas erguidas y pelo doble de longitud mediana a larga.
</dd>
<dt>Esquimal Canadiense</dt>
<dd>Muy resistente como tirador de trineo en invierno y perro de
carga en verano, logrando llevar mucho peso en larga distancia y
poco tiempo.
</dd>
</dl>
No es necesario tener sólo una lista de definición por palabra o término, puede
usar múltiples definiciones si lo desea.
Amplíe un poco el código ejemplo y coloque dos definiciones más, use su
archivo básico primer_html5.html y guarde como listas2.html, dentro de
<body>...</body> coloque un encabezado <h1> con el texto “Razas Caninas”,
después, además del código de ejemplo de lista de definición anterior, añada las
siguientes definiciones nuevas:
<dt>Basenji</dt>
<dd>La característica más destacable de la raza es que es un perro
que no ladra. Sólo emite una especie de aullido o canto. De
carácter independiente, inteligente y afectuoso.</dd>
<dt>Doberman</dt>
<dd>Esencialmente amistoso y pacífico. Muy dependiente de la
familia y cariñoso con los niños. Se le fomenta una bravura y un
temperamento medianos, además de un umbral de excitación
mediano.</dd>
Al terminar guarde y verifique el resultado en su navegador, la Fig. 3.9 muestra
el resultado.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
44
Más bases HTML
Fig. 3.9 Ejemplo de listas de definición.
Apoyo en la
En los materiales adicionales encontrará el archivo listas2.html.
3.4 Imágenes
Cuando ha aprendido cómo hacer la estructura básica de un documento HTML y
cómo colocar texto en un documento de varias maneras, es momento de hacer sus
páginas más interesantes. A diferencia de hace unos años, hoy es difícil encontrar
una página Web que no contenga alguna imagen como ilustración, fondo o incluso
como simple propaganda, es por eso que ahora aprenderá a insertar imágenes en
sus páginas.
La etiqueta sin cierre que permite insertar una imagen es <img> a la cual
acompañan varios atributos que explicaré a continuación:
x
Atributo src. Es quizá el más importante, ya que en este atributo se indica
el origen de nuestra imagen. El origen de nuestra página puede ser una ruta
local de archivo o bien una url, si no se indica una ruta válida (error muy
común) la imagen no será desplegada.
x
Atributo alt. Permite colocar un texto alternativo que hace alguna
referencia a la imagen que se utiliza.
x
Atributo border. Establece si la celda donde la imagen se despliega debe
tener borde o no. El valor debe ser un número entero, el cual entre mayor
sea mayor será el ancho del borde.
x
Atributo height. Especifica el alto de una imagen.
x
Atributo width. Especifica el ancho de una imagen.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
45
Nota
En HTML5 existen dos atributos más para la etiqueta <img> que escapan del
enfoque de este libro, éstos son ismap y usemap, que tiene que ver con el
uso de imágenes con zonas sensibles llamadas mapas.
Use el archivo primer_html5.html, guárdelo como imagenes.html; en la misma
ubicación de nuestro archivo imagenes.html, coloque un archivo de imagen, dentro
de <body>...</body> escriba el siguiente código (sustituya el texto "suimagen"
por el nombre completo de su imagen):
<img src="suimagen" border="1" alt="Texto alternativo" width="250"
height="300" />
Guarde el archivo y compruebe el resultado.
Fig. 3.10 Archivo que utiliza <img> para mostrar una imagen.
Apoyo en la
En los materiales adicionales encontrará el archivo imagenes.html.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
46
Más bases HTML
3.5 Tablas
Las tablas en HTML son a las que más se recurre para organizar el contenido de una
página en su totalidad o simplemente para organizar un contenido parcial.
Una tabla en HTML viene marcada por la etiqueta con cierre <table>. Entre
la etiqueta de inicio y cierre se define el contenido y la forma de la tabla, esto es, las
celdas y las columnas que se requieren. Cabe mencionar que ésta es una de las etiquetas que más cambios ha sufrido en HTML5, ya que se han eliminado prácticamente todos los atributos que poseía, excepto por el de border.
x
Atributo border. Éste es el único atributo rescatado en HTML5 con respecto
a versiones anteriores de HTML, establece si la tabla tendrá borde o no. El
valor debe ser un número entero, el cual, entre mayor sea, mayor será el
ancho del borde exterior (no entre celdas).
El código para comenzar una tabla sería entonces: (se usará border="1"
para ver la tabla más claramente):
<table border="1"></table>
Una vez creada la tabla proceda a crear en ella algunas filas, esto se logra
utilizando la etiqueta con cierre <td>. De esta manera puede crear tantas filas
como necesite. Aquí el código para tres filas:
<table border="1">
<tr></tr>
<tr></tr>
<tr></tr>
</table>
Las filas a su vez contienen columnas o celdas que van dentro de cada fila,
tiene que escribirlas con la etiqueta <td> y su correspondiente cierre </td>. En
HTML5 posee algunos atributos:
x
Atributo colspan. Especifica a lo largo de cuántas columnas se extenderá
una sola celda.
x
Atributo headers. Relaciona una celda con la celda header
correspondiente (etiqueta <th>). No hay efecto visible en el navegador, este
atributo es para ayudar los lectores automatizados de texto (programas
robot, programas para invidentes, etcétera).
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
x
47
Atributo rowspan. Especifica a lo largo de cuántas filas se extenderá una
sola celda.
También tiene la etiqueta con cierre <th> que utiliza los mismos atributos y
funciona exactamente igual que <td>, la única diferencia es que estas celdas son
usadas como headers y, sin que haga ninguna especificación, el texto que se
coloque dentro estará en negritas.
Ejemplo
Código usando <td> y <th>.
<table border="1">
<tr>
<th>Header 1</th>
<th>Header 2</th>
<th>Header 3</th>
</tr>
<tr>
<td>Celda de columna 1</td>
<td>Celda de columna 2</td>
<td>Celda de columna 3</td>
</tr>
<tr>
<td>Celda de columna 1</td>
<td>Celda de columna 2</td>
<td>Celda de columna 3</td>
</tr>
</table>
Use el archivo base primer_html5.html (recuerde que si desea crear un archivo
base nuevo siéntase libre de hacerlo), guárdelo como tablas.html. Dentro de la
estructura de <body> coloque el código anterior, guárdelo y vea el resultado.
Fig. 3.11 Muestra del uso de tablas.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
48
Más bases HTML
Apoyo en la
En los materiales adicionales encontrará el archivo tablas.html.
3.6 Hipervínculos (enlaces)
Los hipervínculos o enlaces (hyperlinks, hypertext o links en inglés), me atrevo a
decir, son parte de la misma esencia de la Web como la conocemos hoy. Es fácil
agregar un enlace a una página, sin embargo, son más de lo que parecen, ya que no
sólo muestran texto, sino que al hacer clic sobre un enlace el navegador carga una
nueva página o nos lleva a otra sección en el mismo documento.
La etiqueta utilizada para hacer un hipervínculo es la etiqueta con cierre <a>,
todo lo que esté dentro de las etiquetas de inicio y cierre, ya sea texto o una imagen,
estará considerado como un enlace y el navegador lo interpretará así. Los atributos
con los que cuenta <a> son:
x
Atributo src. Es quizá el más importante, ya que en este atributo se indica
el origen de nuestra imagen. El origen de nuestra página puede ser una ruta
local de archivo o bien una url, si no se indica una ruta válida (error muy
común) la imagen no será desplegada.
x
Atributo href. Describe el destino o ruta del enlace después de hacer clic.
La ruta puede ser relativa o absoluta:
o
Ruta relativa. El valor de href puede ser un archivo común. Si el
archivo está en el mismo directorio que la página, usted puede colocar únicamente el nombre del archivo. Esto es conocido como ruta
relativa, ya que el navegador interpreta que el archivo enlazado está
en la misma carpeta o en el mismo servidor.
o
Ruta absoluta. El valor de href puede ser una dirección Web
completa. Esto es conocido como ruta absoluta. Si usted desea hacer
referencia a páginas o archivos en el servidor de alguien más, debe
usar este tipo de ruta.
x
Atributo hreflang. Especifica el lenguaje del documento enlazado. Este
atributo es solamente descriptivo, no tiene efecto visible.
x
Atributo media. Especifica para qué tipo de medio o dispositivo está
diseñado el documento enlazado. Este atributo es solamente descriptivo, no
tiene efecto visible.
x
Atributo rel. Establece la relación entre el documento actual y el
documento enlazado.
x
Atributo target. Indica dónde debería abrirse el enlace:
o
_blank. Abre el enlace en una nueva ventana o nueva pestaña.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
49
o
_self. Abre el documento enlazado en el mismo marco (frame) en el
que se hizo clic.
o
_parent. Muestra la nueva página en el <frameset> que contiene al
marco donde se encuentra alojado el enlace.
o
_top. Abre el documento enlazado en la misma ventana en donde se
hizo clic.
o
framename. Abre el documento enlazado en un <iframe> con
nombre específico.
Nota
_parent, _top y framename se refieren normalmente a iframes, ya
que los frames y los framesets han sido descontinuados en HTML5.
x
Atributo type. Especifica el tipo MIME del documento enlazado (cuando un
documento es procesado por un servidor Web para ser enviado a un navegador, el servidor clasifica e informa al navegador el tipo de documento que
se enviará, esto es el tipo MIME).
Nota
Los atributos que más usaremos serán href y target, pero tenga presente
todos para situaciones particulares.
El navegador Web tiende a intentar abrir cualquier documento que pueda leer,
usted tiene la libertad de hacer enlaces a cualquier tipo de archivo. Tenga esto
presente, ya que en ocasiones querrá sólo descargar y no visualizar el archivo
enlazado dentro del navegador.
Ejemplo
Abra el archivo primer_html5.html y guárdelo con el nombre enlaces.html. Coloque
en la sección <body> una cabecera <h1> con el texto “Enlaces", enseguida dos
cabeceras <h2>, la primera con el texto "Enlace con ruta relativa" y el segundo con
“Enlace con ruta absoluta”. Después de la primera cabecera <h2> coloque un
párrafo con el siguiente código:
<a href="ClockworkOrange.jpg">Mi Imagen</a>
Inmediatamente después de la segunda cabecera <h2> coloque:
<a href="http://www.alfaomega.com.mx">Mi editorial</a>
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
50
Más bases HTML
El código dentro de las etiquetas <body> y </body> se verá de esta manera:
<h1>Enlaces</h1>
<h2>Enlace con ruta relativa</h2>
<p>
Enlace a: <a href="ClockworkOrange.jpg">Mi Imagen</a>
</p>
<h2>Enlace con ruta absoluta</h2>
<p>
Enlace a: <a href="http://www.alfaomega.com.mx">Mi editorial</a>
</p>
Como siempre, salve el archivo y verifíquelo en su navegador, en la Fig. 3.12
se puede apreciar el resultado esperado del ejercicio de enlaces.
Fig. 3.12 Página con enlaces
Apoyo en la
En los materiales adicionales encontrará el archivo enlaces.html.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
51
3.7 Formularios (controles clásicos)
Todo el mundo se ha visto en la necesidad de llenar alguna solicitud de empleo, o
algún documento para completar algún trámite escolar o legal en papel, a estos
documentos en papel se les llama formas o formularios. Desde siempre HTML ha
ofrecido la manera de obtener datos de los usuarios que consumen nuestras
páginas, a este recurso de la misma manera en que las versiones en papel, se les
llama formularios. Usted no puede hacer nada con estos datos con sólo HTML, es
aquí donde son necesarias las tecnologías de páginas de servidor (ASP, PHP, etc.) y
JavaScript, sin embargo, es importante saber cómo trabaja cada elemento de los
formularios. En este punto se abordará los controles HTML clásicos para los formularios (válidos en HTML5) y posteriormente los nuevos controles de formulario que
nacen con HTML5.
A diferencia de la estructura de los puntos anteriores, en este punto se
planteara primero el código completo de una página que hace uso de los elementos
para formularios y posteriormente se hará el análisis pertinente de cada etiqueta.
Fig. 3.13 Formulario clásico.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
52
Más bases HTML
Ésta es la página más elaborada que se ha manejado hasta este momento.
Observe cómo se ve en el navegador en la Fig. 3.13, a continuación se analizará
parte por parte su código.
<!DOCTYPE html>
<html>
<head>
<title>Formulario clásico</title>
<meta charset="iso-8859-1" />
</head>
<body>
<h1>Formulario con controles clásicos</h1>
<form>
<fieldset>
<legend>Botones</legend>
<p>
<label>Campo de texto:</label>
<input type="text" id="txt_ejemplo" value="Puede colocar
texto" />
</p>
<p>
<label>Área de texto:</label>
<textarea id="txtar_ejemplo" rows="4" cols="60">Puede
colocar texto</textarea>
</p>
<p>
<label>Campo para contraseña:</label>
<input type="password" id="psw_ejemplo" value="contraseña"
/>
</p>
</fieldset>
<fieldset>
<legend>Controles de selección</legend>
<p>
Lista de selección simple (tipo combo):
<select name="mascota1">
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
53
<option>Perro</option>
<option>Gato</option>
<option>Roedor</option>
</select>
Lista de selección simple:
<select name="mascota2" size="2">
<option>Perro</option>
<option>Gato</option>
<option>Roedor</option>
</select>
Lista de selección múltiple:
<select name="mascota3" size="2" multiple>
<option>Perro</option>
<option>Gato</option>
<option>Roedor</option>
</select>
</p>
<p>
Lista de botones radio:
<input type="radio"
id="perro"
name="tipo_mascota"
value="1" />
<label for="perro">Perro</label>
<input type="radio"
id="gato"
name="tipo_mascota"
value="2" />
<label for="gato">Gato</label>
<input type="radio"
id="roedor"
name="tipo_mascota"
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
54
Más bases HTML
value="3" />
<label for="roedor">Roedor</label>
</p>
<p>
<label>Lista de cajas (checkbox):</label>
<input type="checkbox"
id="chico"
name="tam_chico"
value="1" />
<label for="chico">Chico</label>
<input type="checkbox"
id="mediano"
name="tam_mediano"
value="2" />
<label for="mediano">Mediano</label>
<input type="checkbox"
id="grande"
name="tam_grande"
value="3" checked="checked" />
<label for="roedor">Roedor</label>
</p>
</fieldset>
<fieldset>
<legend>Botones</legend>
<p>
<input type="submit"
id="envía"
value="Enviar información" />
<input type="reset"
id="borra"
value="Borrar información" />
<input type="button"
id="boton"
value="Botón" />
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
55
</p>
</fieldset>
<fieldset>
<legend>Otros</legend>
<p>
<label>Imagen:</label>
<input type="image
id="imagen"
src="img_boton.jpg"
alt="imagen como botón" />
<label>   Aquí otro control oculto
hidden)</label>
(tipo
<input type="hidden"
id="oculto"
value="Borrar información" />
</p>
</fieldset>
</form>
</body>
</html>
Apoyo en la
En los materiales adicionales encontrará el archivo formularios.html.
Todas las etiquetas incluidas en este ejemplo siguen el mismo comportamiento de las que ha aprendido hasta ahora, es decir, algunas tienen inicio y
cierre, otras son etiquetas vacías; una etiqueta es padre o hija de otras como en
una estructura de árbol. Estas etiquetas son válidas en todas las versiones actuales
de HTML, posteriormente se tratará los nuevos controles para formularios de
HTML5.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
56
Más bases HTML
3.7.1 Estructura del formulario
La estructura general del formulario utiliza las siguientes etiquetas:
x
Etiqueta con cierre <form>. Ésta es la etiqueta que contiene a todo el
formulario. Todos los elementos que formen parte de un formulario deben
ser colocadas dentro de las etiquetas <form>...</form>. Esta etiqueta
puede utilizar varios atributos, pero los más utilizados son action, que
indica adónde enviar los datos del formulario para que sean procesados
(este proceso normalmente se auxilia de páginas activas de servidor) y el
otro atributo comúnmente usado es method que especifica la manera en
que se enviarán los datos en el protocolo HTTP.
x
Etiqueta con cierre <fieldset>. Es usada para agrupar juntos una serie
de elementos de un formulario. No es una etiqueta requerida en la
estructura de formulario, pero es útil para organizar mejor los elementos
visualmente. Por default dibuja una línea de contorno alrededor del grupo.
o
Etiqueta con cierre <legend>. Coloca un texto que sirve de leyenda para
el fieldset.
o
Etiqueta con cierre <label>. Es una etiqueta se utiliza para colocar
texto referente a un elemento de formulario, pero en realidad no hace
nada notable sin su atributo for. Si se utiliza el atributo for (el cual
debe ser igual al id de un elemento de formulario) entonces el <label>
queda amarrado con dicho elemento, de manera que si el usuario hace
clic sobre el texto dentro de <label> el foco lo obtendrá el elemento de
formulario referido en el atributo for.
3.7.2 Campo de texto
Muchos de los controles de formulario están basados en el uso de la etiqueta
<input>. Esta etiqueta usa el atributo type para señalar qué tipo de elemento
debe colocar en la página. El tipo de control para obtener datos del usuario más
utilizado es sin duda el campo de texto simple.
El proceso para agregar un control de etiqueta <input> es simple:
1. Se coloca la etiqueta vacía <input>.
2. Escriba el atributo type con su respectivo valor, en este caso text.
3. Añada el atributo id, el cual permite colocar un identificador al control, esto
es de suma importancia, ya que posibilita distinguir este control de cualquier
otro, por lo tanto no se debe repetir el valor de este atributo en ningún otro
control. JavaScript y CSS se auxilian de este valor constantemente.
4. Opcionalmente puede agregar valor por default utilizando el atributo value.
Cualquier texto colocado en este atributo será el valor por default para el
elemento en el formulario.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
57
Después de seguir estos pasos el campo de texto simple aparecerá en el
navegador. El usuario al hacer clic en el campo colocará el cursor y podrá escribir
dentro de él, tenga en cuenta que el campo de texto simple es para información
corta y concreta. En nuestro formulario el código del control es el siguiente:
<input type="text"
id="txt_ejemplo"
value="Puede colocar texto" />
3.7.3 Área de texto
Hay momento en donde se requiere de varias líneas de texto para escribir un dato
largo, dado que el campo de texto simple es para información breve, el control área
de texto se vuelve muy conveniente. Éste no es un control de tipo <input> por lo
que la sintaxis es algo diferente, ya que se usa la etiqueta con cierre <textarea>.
Para hacer un área de texto:
1. Escriba las etiquetas <textarea> y su cierre </textarea>.
2. Especifique el número de líneas que desea que el área de texto pueda
contener. Si agrega más líneas el área de texto será más grande.
3. Indique el número de columnas que convenga. La cantidad de columnas es
medida en caracteres.
Este elemento en el formulario se escribió así:
<textarea id="txtar_ejemplo" rows="4" cols="60">
Puede colocar texto
</textarea>
3.7.4 Campo de contraseña (password)
En muchos formularios es común requerir datos personales que no es conveniente
que estén a la vista de cualquiera, como por ejemplo, contraseña entre otros. Para
ello se debe crear un campo que no muestre los datos que se escriben en él. Para
lograr esto se utiliza la etiqueta <input> con el atributo type con valor
password, tal y como está en el código de nuestro formulario:
<input type="password"
id="psw_ejemplo"
value="contraseña" />
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
58
Más bases HTML
Nota
Usar este tipo de control oculta visualmente su valor, pero por sí mismo no
encripta, ni oculta su valor al enviar la información. Por lo que una persona
hábil puede obtener esta información si usted no se auxilia de técnicas y
tecnologías de seguridad más avanzadas.
3.7.5 Lista de selección simple (combobox)
Las listas de selección simple como combobox son muy comunes y de gran ayuda
para los formularios en los que se requiera saber un dato preciso y excluyente de
otros, de manera que se limite a opciones planteadas previamente por nosotros.
Este tipo de elemento implícitamente nos ofrece la ventaja de poder evitar errores
de escritura por parte del usuario y predecir exactamente los posibles valores que
podemos obtener.
Las listas de selección u opciones se obtienen gracias a la etiqueta <select>
y a su cierre, las opciones que contienen cada lista de selección simple se escriben
utilizando la etiqueta con cierre <option>.
Los pasos para crear este control en una página son:
1. Colocar las etiquetas contenedoras de las lista <select> y </select>.
2. Asignar un identificador único a la lista con el atributo id.
3. Escribir dentro del ámbito de <select> una etiqueta <option> con su
cierre para cada opción de su lista.
4. Dar a cada <option> un valor, que será el valor enviado por el usuario
después de seleccionar y enviar la información. Para esto escriba el atributo
value y asigne el valor deseado.
5. Colocar el texto que el usuario verá por cada opción. Sólo coloque el texto entre
la etiqueta de inicio <option> y la de cierre </option>.
El código de este control se observa así:
<select name="mascota1">
<option>Perro</option>
<option>Gato</option>
<option>Roedor</option>
</select>
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
59
3.7.6 Lista de selección múltiple (listbox)
Es posible que en lugar de tener una lista de selección simple donde sólo se puede
ver una opción a la vez, si se desea ver más de una opción a la vez, se seguirán los
mismo pasos que se utilizan para la lista de selección múltiple, únicamente se
agregará el atributo size a la etiqueta <select> y se le asignará un valor
numérico correspondiente a la cantidad de opciones que desea ver al mismo
tiempo. Visualmente lo que se obtendrá es que en lugar de un menú desplegable
aparecerá simplemente una caja con las opciones y un scroll lateral si la cantidad
de opciones lo amerita. En el formulario está escrito de la siguiente manera:
<select name="mascota2" size="2">
<option>Perro</option>
<option>Gato</option>
<option>Roedor</option>
</select>
3.7.7 Lista de selección múltiple (listbox multiple selection)
Si desea seleccionar más de una opción al mismo tiempo, sólo agregue otros pasos
a las listas de selección anteriores [3.7.5 Lista de selección simple (combobox) y
3.7.6 Lista de selección múltiple (listbox)]. Únicamente se requiere colocar el
atributo multiple a la etiqueta <select> sin ningún otro valor.
El código del formulario es:
<select name="mascota3" size="2" multiple>
<option>Perro</option>
<option>Gato</option>
<option>Roedor</option>
</select>
3.7.8 Lista de botones radio (radio buttons)
Otro tipo de lista para la etiqueta <input> son las listas de botones radio. Esto es,
cómo tener respuestas de selección múltiple, en donde sólo una respuesta es la
correcta, por lo tanto, este tipo de control siempre va en grupos de 2 o más
miembros en la lista y por lo menos un elemento siempre debe estar seleccionado.
Los pasos generales para crear este tipo de lista son:
1. Inicie escribiendo la etiqueta <input>.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
60
Más bases HTML
2. Asigne al atributo type el valor de radio.
3. Repita los pasos 1 y 2 tantas veces como opciones en la lista de botones
desee y dé un valor al atributo id único.
4. Coloque a todos los botones (etiquetas <input>) que haya creado, el
mismo valor para el atributo name (esto los hará botones miembros de la
misma lista).
5. Especifique el valor a cada miembro de la lista usando el atributo value
igual al valor deseado (value="suvalor").
6. Ordene su código de manera que visualmente sea evidente que todos los
botones son miembros de la misma lista.
7. Seleccione el botón radio, el cual estará seleccionado por default, para
lograr esto agregue el atributo checked con el valor checked
(checked="checked").
8. Asigne una <label> asociada con el atributo for a la opción
correspondiente con un texto descriptivo en cada botón para ayudar al
usuario a distinguir entre sus opciones.
El código en su formulario ejemplo es:
<input type="radio"
id="perro"
name="tipo_mascota"
value="1" />
<label for="perro">Perro</label>
<input type="radio"
id="gato"
name="tipo_mascota"
value="2" />
<label for="gato">Gato</label>
<input type="radio"
id="roedor"
name="tipo_mascota"
value="3" checked="checked" />
<label for="roedor">Roedor</label>
Nota
Recuerde que la etiqueta <label> comparte el foco con el <input> asociado
para facilitar el clic al usuario.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
61
3.7.9 Lista de cajas (checkboxes)
Se encontrará casos en donde cierta información requiere una respuesta positiva o
falsa. El control apropiado para enfrentar esta situación son las cajas de selección,
en donde el usuario marcará o demarcará con un clic en la caja correspondiente a
la opción deseada.
Las cajas de selección a menudo forman grupos para aparecer en listas, como
es nuestro caso, pero actúan independientemente una de otra, de manera que se
puede dar el caso de una caja solitaria. Éstos son los pasos para construir nuestra
lista de cajas:
Inicie escribiendo la etiqueta <input>.
1. Dé al atributo type el valor de “checkbox”.
2. Repita los pasos 1 y 2 tantas veces como opciones en la lista de botones
desee y dé un valor al atributo “id” único.
3. Especifique el valor a cada miembro de la lista usando el atributo value
igual al valor deseado (value="suvalor").
4. Asigne una <label> asociada con el atributo for a la opción
correspondiente con un texto descriptivo en cada botón para ayudar al
usuario a distinguir entre sus opciones.
El código en el formulario es:
<input type="checkbox"
id="chico"
name="tam_chico"
value="1" />
<label for="chico">Chico</label>
<input type="checkbox"
id="mediano"
name="tam_mediano"
value="2" />
<label for="mediano">Mediano</label>
<input type="checkbox"
id="grande"
name="tam_grande"
value="3" checked="checked" />
<label for="roedor">Roedor</label>
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
62
Más bases HTML
3.7.10 Botón para enviar información
El botón para enviar información o submit, normalmente se utiliza para enviar la
información coleccionada por todos los campos del formulario al lado del servidor.
Alguna tecnología de servidor como ASP o PHP entre otras procesa esta
información. Este control es otro valor del atributo type igualado a submit de la
versátil etiqueta <input>, el texto para el atributo “value” funciona como leyenda
dentro del botón. En el formulario el código utilizado es:
<input type="submit"
id="envía"
value="Enviar información" />
3.7.11 Botón para borrar información del formulario
Éste es un botón muy sencillo, cuando el usuario hace clic en él, todos los campos
del formulario borran su valor actual y regresan a su estado original. Trabaja con la
etiqueta <input> con el el valor de type igual a reset, el texto para el atributo
value funciona como leyenda dentro del botón, el código es:
<input type="reset"
id="borra"
value="Borrar información" />
3.7.12 Botón simple
El botón simple tiene el mismo aspecto que los dos anteriores y tiene la función de
trabajar del lado cliente, a diferencia del botón para enviar información que envía
información al servidor. Usualmente este botón trabaja con JavaScript para disparar
alguna acción, el texto para el atrubuto value funciona como leyenda dentro del
botón. En el formulario de ejemplo:
<input type="button"
id="botón"
value="Botón" />
El código anterior muestra la forma tradicional de hacer un botón simple, pero
existe una forma alternativa que tiene más sentido, ya que el botón simple no
captura información como sugeriría el uso de <input>, sino que simplemente
ejecuta una acción que el usuario convoca. Esta nueva forma es:
<button type="button">
Botón
</button>
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
63
Por el momento no hay restricción de cuál manera debe usar, aunque cuando
aprenda a usar CSS es muy probable que prefiera la segunda opción.
3.7.13 Imagen (botón)
Este tipo de botón trabaja de la misma manera que el botón simple, sin embargo, la
diferencia radica en que en lugar de trabajar con la apariencia por default del botón
simple, utiliza en su lugar una imagen indicada por usted. El atributo type en
<submit> contiene el valor image, se utiliza el atriburo src que indicará la ruta
donde se encuentra la imagen que desee usar y el atributo alt para un texto
alternativo. Así es como se usa:
<input type="image
id="imagen"
src="img_boton.jpg"
alt="imagen como botón" />
3.7.14 Notas adicionales sobre botones
La versátil etiqueta <input> permite crear botones como se ha hecho en el formulario de ejemplo y como se ha explicado, esta forma es la manera tradicional de
hacer botones en HTML y es válida en HTML5, pero también existe una nueva
manera de hacer el mismo tipo de botones. Si lo medita un poco, los botones no son
un campo donde se coloque información, es decir, no son un dato de entrada como
lo serían el resto de los tipos <input>, es por eso que existe la etiqueta con cierre
<button>, la manera de usarla es muy intuitiva, para sustituir nuestro botón
simple escriba el código de la siguiente manera:
<button type="button" id="boton">
Botón
</button >
3.7.15 Campo oculto
El campo oculto es una etiqueta <input> con el valor de type igual a hidden.
Gracias a este atributo se envía al programa de gestión de datos, además de los
datos enviados por el usuario, datos predefinidos por nosotros mismos, invisibles
para el usuario. Estos datos pueden ser útiles para ayudar al programa servidor en
la gestión de los datos enviados por el formulario.
<input type="hidden"
id="oculto"
value="Borrar información" />
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
64
Más bases HTML
3.8 Validar páginas HTML5
Seguir todo el esquema que se ha visto en estos primeros capítulos le dará la
posibilidad de hacer páginas con buenas bases. Sin embargo, debo ser honesto con
usted, en el momento en el que decide aprender a programar utilizando cualquier
tecnología, sin bien ha abierto un mundo de posibilidades, también ha abierto la
puerta a una gran cantidad de errores potenciales dentro de su código. ¡No se
aflija!, esto es parte del reto que le presenta la programación, y para ayudarle en el
caso de páginas hay herramientas que le ayudarán a minimizar estos errores.
La W3C, consciente de esta situación, ha creado una herramienta útil para
validar nuestras páginas y ayudarnos a detectar errores. La herramienta es llamada
W3 validator y está disponible en:
http://validator.w3.org
Esta herramienta es de gran ayuda, pero no puede encontrar todos los errores
y sólo funciona si cuenta con conexión a Internet. Adicionalmente los mensajes de
error no siempre son suficientemente descriptivos o exactos. A pesar de esto la
herramienta es útil y por fortuna no es la única, a medida que progrese en sus
habilidades como programador, usted mismo encontrará más alternativas para
ayudarle en la creación de sus páginas, utilizando, por ejemplo, editores más
avanzados de código entre otras cosas.
Actividades para el lector
Realice un documento que utilice un formulario que incluya por lo
menos 4 de los elementos de formularios aprendidos y coloque una
imagen y un hipervínculo en cualquier parte del mismo documento.
RESUMEN
En este capítulo se ampliaron los conocimientos acerca de HTML conociendo:
x
La diferencia entre HTML y HTML5.
x
El mejor manejo de la estructura visual de contenido HTML.
x
La creación básica de formularios.
x
La manera de verificar la correcta construcción de una página con el
servicio de verificación de etiquetas de la W3C.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Más bases HTML
65
Autoevaluación
1. ¿Qué es XHTML?
2. ¿Qué son las listas HTML?
3. ¿Qué etiquetas HTML componen una tabla?
4. ¿En qué casos puede ser útil un formulario HTML?
5. ¿Qué herramienta proporciona la W3C para verificar las etiquetas de un documento HTML5?
EVIDENCIA
Realizó un formulario utilizando 4 controles de formulario, una imagen
e hipervínculo.
En el formulario solicitado incluyó todos los elementos solicitados y
algunos más de acuerdo a sus necesidades o creatividad.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
66
Más bases HTML
REFERENCIAS
Bibliografía
Pilgrim, Mark (2010). HTML5: Up and Running, 1a. ed., O’Reilly, EUA.
Wempen, Faithe (2011). HTML5: Step by Step, 1a. ed., O’Reilly, Canadá.
Páginas Web recomendadas
http://en.wikipedia.org/wiki/HTML
http://dev.w3.org/html5/spec/Overview.html
http://diveintohtml5.org/
http://www.w3schools.com/html5/default.asp
Respuestas sugeridas a las preguntas de autoevaluación
1. XHTML es una versión que utiliza una sintaxis estricta basada en XML, fue creada
pensando originalmente en sustituir a HTML.
2. Son etiquetas HTML que permiten hacer un listado de elementos, como podrían
ser los elementos de un temario o un índice.
3. Las etiquetas involucradas para hacer una tabla son <table>, <tr>, <td> y
<th>, todas con su respectivo cierre.
4. Cuando desea que el usuario proporcione alguna información.
5. En la dirección http://validator.w3.org/ la W3C proporciona su
validador de etiquetado HTML5.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Los nuevos elementos
HTML5
4
Reflexione y responda las preguntas siguientes:
¿Qué es la semántica en un documento HTML?
¿Qué etiquetas apoyan la filosofía semántica de HTML5?
¿Cómo insertar imágenes vectoriales con elemento <canvas> de HTML5?
¿Cómo insertar audio y video con elementos nativos de HTML5?
Contenido
Los nuevos elementos HTML5
4.1 Nueva semántica
4.2 Elementos estructurales
4.3 Elementos estructurales complementarios
4.4 Elementos semánticos en línea
4.5 Media
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
68
Los nuevos elementos HTML5
Expectativa
Conocer la importancia que brinda HTML5 a la semántica de los documentos HTML.
Conocer los nuevos elementos para insertar gráficos, sonidos y videos en páginas
HTML5.
Después de estudiar este capítulo, el lector será capaz de:
x
x
x
Utilizar los nuevos elementos semánticos de HTML5.
Comenzar a comprender el potencial del elemento <canvas>.
Enriquecer sus páginas con audio y video con los nuevos elementos HTML5.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Los nuevos elementos HTML5
69
4.1 Nueva semántica
Existen buenas razones para aspirar a páginas más semánticas, por ejemplo, muchos rastreadores (programas que buscan, ordenan e indexan información de la
Web) o lectores de pantalla para débiles visuales utilizan las cabeceras (headers)
para navegar documentos, es por esto que más que el formato visual importa la
semántica de nuestro contenido, en otras palabras, a ese tipo de programas no
les importa tanto el tamaño o color de nuestro título principal ni del subtítulo, pero
sí les importa saber cuál es cuál para interpretar un documento correctamente.
La semántica da sentido o significado a algo, en HTML es usar etiquetas que le
den un mejor significado a nuestras páginas. La mayoría de las nuevas etiquetas
semánticas no dan una apariencia visible particular, en lugar de esto, describen el
significado de una parte del código en el contexto de una página Web.
Anteriormente los desarrolladores de páginas usaban exhaustivamente la
etiqueta <div> y/o el atributo class para tratar de separar y organizar en
secciones el contenido de una página. Dado que el navegador cuando usa versiones
anteriores de HTML “no entiende” lo que se hizo con esta práctica, aunque poco
semántico es (o era) válido hacerlo. Pero ahora se cuenta con nuevos elementos
propios de HTML5 para hacer más descriptivas nuestras páginas y permitir con esto
que el contenido en ellas sea identificado, clasificado, interpretado y manejado de
forma más precisa por navegadores, lectores, indexadores, etcétera.
Nota
Recuerde que al momento de escribir este libro HTML5 aún no es oficialmente
un estándar y que el navegador utilizado para los ejemplos es Google Chrome,
por lo tanto, puede darse el caso de que otros navegadores no soporten aún
alguna etiqueta.
4.2 Elementos estructurales
Como se mencionó, durante muchos años se han utilizado <div> y class para
definir (casi por regla general) un header, un footer, navs y otras entidades muy
comunes en el desarrollo de cualquier sitio Web. Finalmente llegó el momento de
incorporar formalmente a todas esas entidades como parte del lenguaje y actualmente son parte de la nueva especificación de HTML5.
4.2.1 article
La etiqueta con cierre <article> es como una página pequeña dentro de una
página. Debe usarse para definir contenido autónomo e independiente, proveniente
de una fuente externa de información y predecible de ser reutilizada de modo
aislado.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
70
Los nuevos elementos HTML5
<article>
<header>
<h1>Bienvenido(a) a la Tienda de Mascotas!</h1>
</header>
<p>Nuestra misión es facilitarle el camino para hacer de una de
nuestras mascotas un gran compañero para usted y toda su familia,
disfrute la visita a nuestro sitio y esperamos servirle pronto en
nuestra tienda
</p>
<p>Acuda a nuestra tienda para conocer a nuestras mascotas y a
nuestro extenso catálogo de juguetes y accesorios diponibles para
su diversión y cuidado<sup>1</sup>
</p>
</article>
4.2.2 aside
Cuando se desea colocar información en un fragmento de la página que está
relacionado con el contenido principal, pero debe estar separado de él, se utiliza la
etiqueta con cierre <aside>. Comúnmente a <aside> se le ubica como una barra
lateral. Tenga en cuenta que si desea colocar una barra lateral porque el diseño
visual lo indica, no significa necesariamente que deba utilizar <aside>. Unas
preguntas simples que puede utilizar para determinar si es conveniente usar o no
son: ¿Si elimino el contenido dentro de <aside>, el contenido principal se ve
reducido?, ¿el contenido que pienso colocar en <aside> tiene que ver con
información respecto a la estructura o autoría de la página? Si la respuesta es
negativa en ambas preguntas, entonces puede usar el elemento <aside>.
Déjeme advertirle que varios navegadores soportan la etiqueta, pero no se han
puesto de acuerdo en cómo presentarla.
<aside>
<h3>Visítenos!</h3>
<p><ins>Nuestra Dirección:</ins><br/>
Calle: San Ciprián No. 45<br/>
Colonia: Centro<br/>
México D.F.<br/>
C.P. 07640<br/>
</p>
<p><sup>1</sup>Venta de comida, productos y accesorios para perros,
gatos, pájaros, roedores, reptiles y peces.
</p>
</aside>
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Los nuevos elementos HTML5
71
4.2.3 footer
La etiqueta <footer> se utiliza para representar el pie de página (en contexto de
una página Web). Se posiciona por supuesto en la parte inferior de la página,
usualmente se utiliza este elemento para colocar información de derechos de autor,
información de contacto o créditos.
Para usted que tiene experiencia en el desarrollo de páginas Web, tendrá
sentido enterarse que <footer> sustituye al habitual <div id="footer"></div>,
tan utilizado en versiones anteriores de HTML.
<footer>
<p>© 2011 todo los derechos reservado</p>
</footer>
4.2.4 header
El elemento con cierre <header> se utiliza como tope o cabecera visible de una
página. No confunda <header> con la etiqueta <head> que contiene el título y
los metadatos de nuestras páginas. En <header> usualmente se tienen etiquetas
de encabezado <h1> a <h6> o alguna etiqueta <img>.
La etiqueta <header> no está limitada a cabecera de una página, también
puede usarse dentro de una etiqueta <article> y <section> (este elemento
se abordará en el punto 4.2.6) para indicar cabeceras dentro de éstas, si usted
coloca un <h1> en el encabezado principal sólo de ese artículo o sección. Este
elemento está pensado para sustituir al uso común de <div id="header"></div>.
<header>
<h1>Bienvenido(a) a la Tienda de Mascotas!</h1>
</header>
4.2.5 nav
La etiqueta <nav> junto con su cierre es utilizada para contener información sobre
la navegación del sitio Web que se construyó. Este elemento usualmente utiliza
enlaces con la etiqueta <a>, pero éstos deben de ser enlaces sólo para la navegación principal del sitio y no para enlaces externos. El elemento <nav> ha sido
creado buscando sustituir a <div id="nav"></div>.
<nav>
<h3>Menú
<a
<a
<a
7
Principal</h1>
href="#">Inicio</a>
href="#">Gatos</a>
href="#">Perros</a>
</nav>
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
72
Los nuevos elementos HTML5
4.2.6 section
El nuevo elemento con cierre <section> intenta albergar contenido específico
sobre algún tema, es muy similar a usar la etiqueta <div>, pero <div> no tiene un
significado semántico y no informa sobre el tipo de contenido alojado en la etiqueta.
El elemento <section> se usa de forma explícita para agrupar contenido
relacionado.
Considere la pregunta ¿está todo el contenido incluido relacionado entre sí?, si
la respuesta es positiva entonces puede utilizar <section>.
<section>
<p>Acuda a nuestra tienda para conocer a nuestras mascotas y a
nuestro extenso catálogo de juguetes y accesorios diponibles para
su diversión y cuidado<sup>1</sup>
</p>
</section>
Nota
Hasta el momento el soporte para <section> por parte de los navegadores es
reducido. Los elementos <div> y <article> pueden ser buenos sustitutos.
Apoyo en la
La página principal.html (la tienda de mascotas) ha sido
modificada para implementar cada uno de los ejemplos expuestos
hasta ahora, puede descargarla para analizarla con detalle.
4.3 Elementos estructurales complementarios
Hasta ahora se ha visto los elementos que brindan el esquema general a nuestras
páginas, pero existen aún varios elementos más que ayudan a dar una mayor
profundidad semántica a ellas. A continuación se expone algunas de las más
utilizadas.
4.3.1 address
La etiqueta <address> contiene la información de contacto del autor de una
página, sección o artículo. Si <address> está dentro de un elemento <article>
o <section> se está indicando que el autor referido lo es sólo del contenido de
ese artículo o sección. Otras etiquetas pueden ser colocadas dentro de este
elemento, como pueden ser enlaces, por ejemplo.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Los nuevos elementos HTML5
73
El elemento <address> ya existía en la versión HTML4, pero sólo podía hacer
referencia a una página entera, mientras que ahora, como ya se mencionó, se
puede referir a secciones de contenido más pequeñas.
<address>
Escrito por Su Nombre<br/>
112 Mercer St.<br/>
Princeton, NJ<br/>
<address>
4.3.2 hgroup
La etiqueta con cierre llamada <hgroup> permite agrupar en un bloque un título y
un subtítulo. Dentro de un elemento <hgroup> tan sólo se puede introducir etiquetas de encabezado (<h1>-<h6>) de forma que no permite ningún otro tipo de
etiqueta en su interior. Cuando utiliza <hgroup> para delimitar encabezados, se
está indicando cuáles están relacionados, pero sobre todo se señala cuál es el
encabezado principal del grupo el cual será el único elemento tomado en cuenta
para el esquema total del documento, es decir, si usted continúa con más encabezados (<h2>-<h6>) dentro de un <hgroup> estos últimos serán tomados en
cuenta para el grupo, pero no para el resto del documento.
<hgroup>
<h1>Sección para perros</h1>
<h2>Encuentra lo necesario para tus amigos caninos</h2>
<hgroup>
4.3.3 menu
La etiqueta <menu> se asocia con la etiqueta <command> utilizada para añadir
varios tipos de menús. El atributo “type” es el que nos permite seleccionar el tipo
de menú, con los siguientes valores posibles:
x
list. Muestra los comandos de elemento del menú como si fueran una
lista.
x
context. Se muestra como menú contextual, es decir, emerge cuando se
hace clic con el botón derecho del ratón.
x
toolbar. Los comandos se verán como una lista de herramientas.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
74
Los nuevos elementos HTML5
<menu>
<command label="opción 1" onclick="alert('opción 1')">Clic
Aquí!</command>
<command label="opción 2" onclick="alert('opción 2')">Clic
Aquí!</command>
<command label="opción 3" onclick="alert('opción 3')">Clic
Aquí!</command>
</menu>
Ahora se tiene un inconveniente, la especificación HTML5 dice que el elemento
<menu> está diseñado para trabajar con <command>, pero muy recientemente
sólo los navegadores Internet Explorer y Safari soportan <command>, más adelante
en este capítulo se mostrará cómo solucionar este problema.
4.4 Elementos semánticos en línea
Esta categoría no existe de manera oficial en la especificación de HTML5, sin
embargo, se utilizaba en versiones anteriores para describir a aquellas etiquetas
breves que no suelen anidar a muchas otras etiquetas o a ninguna en lo absoluto, o
que contienen un contenido sumamente breve, y que no afectan a nivel de
estructura de página. Éste es exactamente el sentido que le daré a este punto para
ayudarlo a entrar rápidamente a HTML5.
4.4.1 command
La etiqueta <command> con su respectivo cierre trabaja con elemento <menu>,
para añadir un elemento al menú, pero también puede trabajar en cualquier punto
de una página para funcionar como un atajo de teclado. Este elemento cuenta con
los atributos siguientes:
x
Atributo icon. Indica la ruta de una imagen que representará al comando
con un ícono.
x
Atributo checked. Si el comando es de tipo caja de selección (checkbox) o
botón radio (radio button) indica si el comando está marcado o no.
x
Atributo disabled. Establece si el comando está activado o no.
x
Atributo label. Le da un texto al comando, el cual será mostrado en la
página.
x
Atributo title. Despliega una leyenda con un texto como descripción del
comando.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Los nuevos elementos HTML5
x
75
Atributo type. Indica el comportamiento del comando, éste puede ser el
correspondiente a una caja de selección (checkbox), comando simple
(command) o un botón radio.
Los atributos globales para el manejo de eventos funcionan con <command>,
el más utilizado es el atributo onclick, el cual especifica una línea simple de
código JavaScript para ejecutar cuando se hace clic.
En al punto 4.3.3 menu, se señaló que hasta el momento esta etiqueta sólo es
soportada por Internet Explorer y Safari; una técnica para solucionar este inconveniente es usar una lista en lugar de <command> como se muestra:
<menu>
<li onclick="alert('opción 1')">opción 1</li>
<li onclick="alert('opción 2')">opción 2</li>
<li onclick="alert('opción 3')">opción 3</li>
</menu>
4.4.2 details y summary
La etiqueta con cierre <details> funciona como un espacio desplegable y
replegable. Trabaja junto con la etiqueta <summary> y su respectivo cierre donde
ésta funciona como texto en forma de título sensible, el cual al hacer clic en él,
despliega u oculta contenido colocado mediante otra etiqueta.
<details>
<summary>Mi contenido</summary>
<p>El contenido repleglable</p>
</details>
4.4.3 dfn
Se usa la etiqueta con cierre <dfn> si en el contexto del contenido desea definir un
término. Simplemente hay que rodear al término, no a su significado, con las
etiquetas <dfn> y </dfn>.
<p><dfn>HTML:</dfn>
Lenguaje de marcado para la elaboración de páginas Web.
</p>
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
76
Los nuevos elementos HTML5
4.4.4 figure y figcaption
Utilizamos la etiqueta <figure> con su cierre si decidimos que es semánticamente importante enfatizar cualquier tipo de imagen, no se afecta de ninguna
manera la presentación visual de ésta. Opcionalmente puede utilizar un título
descriptivo para la imagen en cuestión con la etiqueta <figcaption> y su cierre
como se muestra a continuación.
<figure>
<figcaption>Dibujo de una pelota</figcaption>
<img src="pelota.jpg" width="280" height="300" />
</figure>
4.4.5 wbr
La etiqueta <wbr> y su cierre indican dónde podría estar bien un salto de línea en
una palabra demasiado larga. Esto aplica cuando el navegador ajusta el texto al
espacio disponible en el navegador, si encuentra al elemento <wbr> lo interpreta
como una posible oportunidad para hacer el salto de línea.
<p>
Para explotar el poder de HTML5 debe aprender Java<wbr>Script y
CSS.
</p>
Apoyo en la
El autor ha creado un archivo llamado perros.html, el cual implementa
todos los elementos de los puntos 4.3 y 4.4 y varios del 4.2.
Está disponible para su descarga en los materiales adicionales.
4.5 Media
Ésta es la característica más esperada de HTML5 y probablemente la más divertida
desde el punto de vista de desarrollo y aún más para el usuario. Ahora HTML5
soporta la inserción de audio y video sin necesidad de ningún componente externo e
incluye también soporte para gráficas vectoriales a través del elemento <canvas>
y SVG.
4.5.1 audio
El elemento <audio> y su cierre nos permite tener audio embebido en nuestras
páginas. Cualquier texto entre las etiquetas <audio> y </audio> será desplegado en cualquier navegador que no soporte el elemento de audio, opcionalmente también puede colocar en lugar de texto un enlace para descargar el
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Los nuevos elementos HTML5
77
archivo de audio o embeber un reproductor Flash. El elemento <audio> cuenta con
los atributos siguientes:
x
Atributo autoplay. Indica si el archivo de audio debería ser
automáticamente reproducido o no.
x Atributo controls. Especifica si los controles de reproducción deberían ser
o no desplegados.
x Atributo loop. Establece si la reproducción del audio debería ser reiniciada
cada vez que llega al final.
x Atributo preload. Especifica si el audio debería ser cargado cuando la
página comienza a cargar.
x Atributo src. Indica la dirección URL del archivo de audio a reproducir. A
pesar de la existencia de este atributo es mejor utilizarlo en la etiqueta vacía
<source>, ya que ésta nos permite colocar varias alternativas del origen
del audio.
Aunque <audio> ya es soportado por los principales navegadores, los
fabricantes aún no están completamente de acuerdo con el formato de audio que
debería ser utilizado, y por lo tanto soportan diferentes formatos que se debaten
principalmente entre el estándar libre Ogg y Mp3. Por fortuna, esto no es un gran
problema si usted simplemente coloca una versión de su archivo para cada formato
utilizando <source>, el navegador reproducirá el primer formato que le sea
compatible.
<audio controls="controls">
<source src="ladridos.ogg" />
<source src="ladridos.mp3" />
Su navegador no soporta el elemento audio
</audio>
4.5.2 canvas
La etiqueta con cierre <canvas> (lienzo) es quizá el elemento que puede arrojar
resultados más llamativos para el usuario. Cuando utiliza <canvas> el navegador
reserva una parte de la ventana para el uso de gráficos, los cuales serán dibujados
justo ahí. El elemento en sí es fácil de implementar en términos de HTML, pero su
verdadera manipulación se hace totalmente por medio del uso de JavaScript.
<canvas id="miCanvas" width="350" height="300">
El elemento canvas requiere soporte HTML5
</canvas>
Cualquier cosa que escriba entre <canvas> y </canvas> solamente será
interpretado por navegadores que no soportan aún la nueva etiqueta. Ahora que se
adicionó un <canvas> también se incluirá un botón para llamar a una función
JavaScript llamada dibuja() cuando se hace clic en él.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
78
Los nuevos elementos HTML5
<button type="button" onclick="dibuja();">
Dibuja!
</button>
La función JavaScript dibuja() es la que en realidad hará algo interesante.
Primero debe referenciar el elemento <canvas> para adquirir su contexto (la
interfaz de programación de aplicación o API).
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var context = micanvas.getContext('2d');
context.strokeStyle = '#8eee14'';
context.fillStyle = '#ff8f43';
context.strokeRect (20, 30, 100, 50);
context.strokeRect (410, 30, 100, 50);
for (i=1; i<=200; i+=2){
context.strokeStyle = '#8eee14';
context.strokeRect (20+i, 30+i, 100+i, 50+i);
context.strokeRect (510-(i+(100+i)), 30+i, 100+i, 50+i);
}
}
La Fig. 4.1 muestra el resultado que despliega el navegador.
Fig. 4.1 Página con función JavaScript que dibuja rectángulos dentro de <canvas>.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Los nuevos elementos HTML5
79
Apoyo en la
En los materiales adicionales encontrará el archivo canvas.html
La API 2D tiene muchos métodos para trabajar con ella, de hecho por su
importancia, el capítulo final de este libro estará complemente dedicado al
elemento <canvas>, de tal manera que este punto es sólo una pequeña introducción, pero si tiene curiosidad por ver todos los métodos disponibles, la especificación oficial la encuentra en el enlace siguiente:
http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html
Nota
Por el momento el único contexto disponible es el contexto bidimensional (2d)
pero se planea incluir soporte para gráficos 3d en el futuro.
4.5.3 embed
La etiqueta vacía <embed> es la etiqueta general para embeber cualquier tipo de
media en una página. En teoría esta etiqueta permite embeber cualquier tipo de media que no es soportada nativamente por ninguna etiqueta. Utiliza el atributo
“type” para especificar el tipo de contenido que vamos a embeber auxiliándose del
tipo MIME del contenido.
Tome en cuenta que en la práctica no importa que utilice la etiqueta <embed>
con todos sus atributos de manera correcta, si el cliente no cuenta con el plug-in
apropiado, su contenido no será desplegado. Utilice esta etiqueta preferentemente
sólo como método de respaldo a etiquetas más confiables como <audio> y
<video>.
Por otro lado, si desea utilizar contenido Flash en el contexto de HTML5,
<embed> es la mejor manera de incluir este tipo de contenido.
<embed src="flashcontent01.swf"
type="application/x-shockwave-flash"
width="550"
height="300"/>
Apoyo en la
Alfaomega
En los materiales adicionales encontrará los archivos:
embed.html y flashcontent01.swf.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
80
Los nuevos elementos HTML5
4.5.4 svg
La etiqueta con cierre <svg> es otra opción disponible en HTML5 que permite
construir gráficos vectoriales en nuestra página. Utiliza una estructura XML, es decir,
también utiliza etiquetas, pero éstas son propias de <svg> y no se pueden utilizar
fuera del ámbito de éste; estas etiquetas propias tienen atributos para permitir
posición y apariencia, pero se puede utilizar JavaScript y CSS sin ningún problema.
La característica más popular de <svg> es que permite escalar imágenes sin
perder calidad. El siguiente código dibuja un cuadrado:
<!DOCTYPE html>
<html>
<head>
<title>SVG</title>
<meta charset="iso-8859-1" />
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg"
width="150"
height="150">
<rect width="90" height="90"
x="30" y="30"
style="fill:#0000ff;fill-opacity:0.75;stroke:#000000"/>
</svg>
</body>
</html>
Este código mostraría un cuadro en el navegador como muestra la Fig. 4.2.
Fig. 4.2 Ejemplo de figura dibujada con <svg>.
Apoyo en la
En los materiales adicionales encontrará el archivo svg.html
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Los nuevos elementos HTML5
81
Nota
El detalle del elemento <svg> escapa del enfoque de este libro, pero si desea
profundizar puede consultar el sitio oficial W3C acerca del tema:
http://www.w3.org/Graphics/SVG/
4.5.6 video
La etiqueta con cierre <video> es otro elemento que ha causado gran expectativa
y ha estado involucrado en una interesante polémica (animada por el cofundador de
Apple, Steve Jobs). He puesto especial esfuerzo en simplificar y al mismo tiempo ser
lo más explícito posible en este tema, dado que puede ser un poco confuso para las
persona que van comenzando.
Cuando vemos un video en un reproductor, normalmente lo que vemos son las
imágenes (cuadros) del video y su respectivo audio, pero no usamos dos archivos
separados para cada uno, si no que en su lugar solamente tenemos un solo archivo,
quizá en formato Mp4, AVI o MOV entre otros. Pero éstos son sólo formatos
contenedores, simplemente definen cómo almacenar la información de video y
audio en un solo archivo. Cuando usted ve un video, su reproductor hace
básicamente 3 cosas:
1. Determina qué formato contenedor se está utilizando para entonces
encontrar qué video y audio están disponibles dentro y proceder a determinar cuál es la “herramienta” correcta para decodificar la información, a
esta herramienta se le conoce como codec.
2. Procede a decodificar (usando un codec) la información de video para
presentar la secuencia de imágenes (o cuadros) que lo componen en
pantalla.
3. Procede a decodificar (usando un codec) la información de audio para
enviarla a sus bocinas.
Ahora bien, existe polémica (y problemas) respecto a qué formatos contenedores y por ende qué codec de audio y video deberían ser usados, debido a que
las compañías dueñas de los navegadores tienen diferentes posturas acerca de
cuál debería ser el formato soportado para desplegar video, y esto a veces trae
problema con la relación navegadores, tipos MIME y servidores Web. Sin embargo,
podemos hablar de los principales contendientes hasta el momento:
x
Mp4 (Codec de Video: H.264, Codec de Audio: AAC): Los tres formatos son
propietarios y por lo tanto tienen restricciones de patente.
x
Ogg (Codec de Video: Theora, Codec de Audio: Vorbis): Éste es un formato y
sus codecs son completamente libres.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
82
x
Los nuevos elementos HTML5
WebM (Codec de Video: VP8, Codec de Audio: Vorbis): Éste es un formato
más nuevo, y sus codecs son de código abierto. VP8 fue un formato propietario hasta que Google compró a la compañía dueña y liberó el codec.
La etiqueta <video> trabaja de manera muy similar a la etiqueta <audio>.
Si va a utilzar <video> utilice la etiqueta <source> para proporcionar diferentes
alternativas al archivo origen de video y como respaldo le sugiero que utilice
<embed> para un reproductor Flash. Cualquier texto entre las etiquetas <video> y
</video> será desplegado en cualquier navegador que no soporte el elemento.
<video controls="controls">
<source src="siberian_husky.ogg" />
<source src="siberian_husky.mp4" />
Su navegador no soporta la etiqueta video
</video>
Actividades para el lector
1.- Investigue cuáles de los navegadores más utilizados soportan el
audio en formato Mp3 y el video en formato Mp4.
2.- Haga una lista con los navegadores que no soporten estos formatos, en otra lista indique si presentan alguna alternativa.
3.- Cree un documento donde utilice los elementos estructurales
<header>, <footer>, <nav>, <section> y los que desee agregar.
4.- En su documento dentro de <section> coloque por lo menos
tres tipos diferentes de elementos semánticos.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Los nuevos elementos HTML5
83
RESUMEN
En este capítulo se ha aprendido más acerca de la filosofía de la nueva
especificación y de los nuevos elementos que permiten insertar gráficos y
multimedia:
x
Énfasis en la semántica en HTML5.
x
Etiquetas para precisar mejor la estructura de nuestro contenido.
x
Introducción al elemento para la creación y manipulación de imágenes
dinámicas.
x
Introducción a los nuevos elementos multimedia para audio y video.
Autoevaluación
1. ¿Qué es semántica en términos de HTML?
2. ¿Qué etiquetas se utilizan para marcar semánticamente la cabecera y el pie de
un documento HTML5?
3. ¿En qué etiqueta se puede agrupar semánticamente a las etiquetas de encabezado <h1>-<h6>?
4. ¿Qué lenguajes se requieren para dibujar en el elemento <canvas>?
5. ¿Qué es un codec?
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
84
Los nuevos elementos HTML5
EVIDENCIA
Diferencia entre los navegadores que soportan Mp3 y Mp4, de
aquellos que no lo hacen, indica los formatos alternativo que pueden
soportar.
Utiliza en sus documentos los elementos <header>, <footer>,
<nav> y <section>.
Emplea elementos multimedia en sus páginas web.
REFERENCIAS
Bibliografía
Pilgrim, Mark (2010). HTML5: Up and Running, 1a. ed., O’Reilly, EUA.
Fulton, Steve y Fulton, Jeff (2011). HTML5 Canvas 1a. ed., O’Reilly, EUA.
Páginas Web recomendadas
http://diveintohtml5.org/
http://dev.w3.org/html5/spec/Overview.html
http://www.w3schools.com/html5/default.asp
Respuestas sugeridas a las preguntas de autoevaluación
1. Es el uso apropiado de elementos HTML que ayudan a dar significado a la
estructura del código en una página.
2. Las etiquetas <header> y <footer>.
3. En la etiqueta <hgroup>.
4. JavaScript.
5. Es la herramienta que permite interpretar o decodificar correctamente el formato
utilizado para incluir información de video y/o audio.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Controles nuevos en
formularios HTML5
5
Reflexione y responda las preguntas siguientes:
¿Qué controles nuevos existen para formularios?
¿En qué casos se utilizan los controles nuevos?
¿Cómo se comportan los controles nuevos?
¿Qué atributos nuevos comparten los controles nuevos para formulario?
Contenido
Formularios HTML5 (controles nuevos)
Introducción
5.1 Un vistazo a los controles nuevos
5.2 Elementos independientes
5.3 Elementos tipo input
5.4 Nuevos atributos
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
86
Controles nuevos en formularios HTML5
Expectativa
Conocer y emplear la gama de posibilidades que ofrecen algunos de los controles de
formularios de la nueva especificación HTML5.
Después de estudiar este capítulo, el lector será capaz de:
x
x
Utilizar los nuevos controles para formulario de HTML5.
Distinguir los nuevos elementos de formulario, independientes al tipo input.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Controles nuevos en formularios HTML5
87
INTRODUCCIÓN
Los formularios son algo muy utilizado en la Web, todo el mundo los ha usado
alguna vez; en el capítulo 3, se dio un repaso de ellos con sus controles clásicos y su
funcionamiento general dentro de las etiquetas <form> y </form>, ahora que ya
se tiene una noción acerca del tema, se puede abordar en forma más técnica.
Aunque en este punto se ha avanzado, la verdad es que en el contexto de
HTML5 no se conoce aún ni la mitad de sus nuevas capacidades, hay más de una
docena de nuevos controles con interesantes características que antes sólo se
podían lograr con aquellos controles desarrollados por terceros.
Nota
Opera 11 es, por el momento, el navegador más avanzado en lo que
se refiere al uso de formularios, soportando todos los controles
nuevos de la especificación.
5.1 Un vistazo a los controles nuevos
Fig. 5.1 Formulario con los nuevos controles HTML5.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
88
Controles nuevos en formularios HTML5
No todos los navegadores soportan todos los tipos nuevos de control para
formulario, con excepción de Opera 11 que los soporta todos. Sin embargo,
relativamente poca gente usa el navegador Opera, por lo que únicamente se tratará
aquellos que son soportados por el navegador Chrome en su versión 14, pero una
vez que el lector tenga mayor experiencia, lo invito a que pruebe las capacidades de
otros navegadores.
En la Fig. 5.1 notará los controles que se analizan visualizados en el
navegador, si se tiene alguna experiencia previa en el desarrollo de formularios
HTML, de inmediato se dará cuenta que a simple vista algunos sugieren cosas
interesantes.
El código de esta página es el siguiente:
<!DOCTYPE html>
<html>
<head>
<title>Formulario HTML5</title>
<meta charset="iso-8859-1" />
</head>
<body>
<h1>Formulario con los nuevos controles HTML5</h1>
<form id="formulario1">
<fieldset form="formulario1" name="fieldset1">
<legend>Controles Independientes</legend>
<p>
<label>Securtiy:</label>
<keygen name="security" keytype="rsa" challenge="letmein"
/>
<label>(este control requiere trabajar con otro control de
manera paralela)</label>
</p>
<p>
<label>meter:</label><br/>
<meter value="2" min="0" max="10">2 de 10</meter><br/>
<meter value="0.6">60%</meter>
</p>
<p>
<label>progress:</label><br/>
<progress value="25" max="100">
</progress>
</p>
</fieldset>
<fieldset form="formulario1" name="fieldset2">
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Controles nuevos en formularios HTML5
89
<legend>Controles tipo Input</legend>
<p>
email: <input type="email" name="user_email"
utofocus="autofocus" />
<label>*Coloque dato inválido y utilice el botón
"Enviar"</label>
</p>
<p>
number: <input type="number" name="no_number" min="1"
max="10" />
</p>
<p>
range: <input type="range" name="no_range" min="1"
max="10" />
</p>
<p>
search: <input type="search" name="user_search"
placeholder="campo de busqueda" />
</p>
<p>
tel: <input type="tel" name="user_mobile" />
<label>(este control requiere trabajar con algún script
de cliente o servidor)</label>
</p>
<p>
url: <input type="url" name="user_url" />
<label>*Coloque dato inválido y utilice el botón "Enviar"
(En el campo email debe haber un dato correcto y ya
validado)</label>
</p>
</fieldset>
<input type="submit" />
</form>
</body>
</html>
Apoyo en la
En los materiales adicionales encontrará el archivo:
formulario_html5.html.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
90
Controles nuevos en formularios HTML5
5.2 Elementos independientes
Los nuevos elementos se clasifican básicamente en aquellos que pertenecen a la
etiqueta <input> y aquellos que no dependen de ésta para ser utilizados, a estos
últimos son a los que se puede llamar independientes o referirlos simplemente por
su nombre individual. Los controles independientes pueden ser utilizados fuera del
contexto de un formulario en otro punto de sus páginas.
5.2.1 fieldset
Este control <fieldset> no es nuevo en realidad, sin embargo, la especificación
HTML5 le asignó nuevos atributos (disabled, form y name). La etiqueta ayuda a
agrupar en un bloque algunos elementos, en su forma común coloca un marco que
delimita el contenido agrupado, y alternativamente puede emplear la etiqueta
<legend> para añadir una etiqueta al bloque. La descripción más precisa de los
nuevos atributos es:
x
Atributo disabled. Desactiva todos los controles dentro del bloque.
Nota
El atributo disabled está en la especificación, al 30/10/2011 no funciona con
Chrome.
x
Atributo form. Indica específicamente a qué formulario pertenece el
<fieldset> colocando el ID del formulario como valor del atributo.
x
Atributo name. Establece el nombre del <fieldset>.
El formulario de ejemplo se utiliza así:
<fieldset form="formulario1" name="fieldset1">
<legend>Controles Independientes</legend>
.
.
.
</fieldset>
5.2.2 keygen
El control <keygen> genera una clave de encriptación que hace referencia a algún
dato para enviarlo bajo ese esquema de encriptación al servidor. Este control es
sumamente debatido y su futuro es incierto, pero es soportado al momento por
Chrome, Firefox y Opera.
x
Atributo keytype. Indica el algoritmo de inscripción que utilizará.
x
Atributo challenge. Es una cadena que se envía junto con la clave de
encriptación (la cadena es construida en términos de DER encode).
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Controles nuevos en formularios HTML5
91
El ejemplo en el formulario es así:
<keygen name="security" keytype="rsa" challenge="letmein" />
5.2.3 label
El elemento <label> no es nuevo, pero debido a la filosofía semántica de HTML5
se utiliza mucho más, a esto se le suma que puede ayudar en el momento de usar
CSS para darle formato a los textos de manera más sencilla. Su atributo ”for“
establece la relación entre <label> y el elemento al que pertenece, si así se
desea.
La única diferencia con el <label> de la versión anterior de HTML es que
ahora se ha añadido el atributo “form” para indicar explícitamente a qué formulario
pertenece.
En el formulario es utilizado como se muestra:
<label>
(este control requiere trabajar con otro control de manera
paralela)
</label>
5.2.4 meter
El control <meter> proporciona una medida visual escalar dentro de un cierto
rango, o bien el valor porcentual de un valor total. Aunque <meter> se utiliza
continuamente en formularios, se puede utilizar en cualquier punto de una página
donde se requiera. La etiqueta <meter> soporta los argumentos siguientes:
x
x
x
x
x
x
x
Atributo form. Especifica a qué formulario pertenece el control <meter>
Atributo high. Indica a partir de qué punto de la medida total podría
considerarse un valor como alto.
Atributo low. Indica hasta qué punto de la medida total podría considerarse
un valor como bajo.
Atributo max. Máximo valor posible, por default su valor es 10.
Atributo min. Mínimo valor posible, por default su valor es 0.
Atributo optimum. Especifica cuál es el mejor valor en el control <meter>.
Atributo value. Establece el valor actual de <meter>.
En el formulario se utilizarán 2 ejemplos:
<meter value="2" min="0" max="10">2 de 10</meter><br/>
<meter value="0.6">60%</meter>
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
92
Controles nuevos en formularios HTML5
5.2.5 progress
El control <progress> ayuda al usuario señalando qué tanto de alguna tarea ha
sido realizado. Actualmente este control es sólo soportado por los navegadores
Chrome y Opera, y lo presentan como una barra de progreso. Este elemento es
controlado utilizando código JavaScript.
Aunque su uso es muy común en formularios, puede utilizarse en cualquier
parte de una página. Los atributos disponibles son:
x
Atributo max. Especifica el valor máximo total en el control.
x
Atributo value. Define el valor actual de progreso en el control.
En el formulario se usa:
<progress value="25" max="100"></progress>
5.3 Elementos tipo input
Los formularios HTML utilizan constantemente al versátil elemento <input>. Como
ya se ha visto en el punto 3.7 esta etiqueta permite crear botones, cajas de
selección y campos de texto, entre otros, cambiando el valor del atributo input, pero
ahora en HTML5 la variedad de posibilidades se ha incrementado, permitiéndo
crear nuevos tipos de controles.
Es justo aclarar una vez más, que el soporte para estos nuevos controles no ha
sido adoptado por todos los navegadores, e incluso en aquellos que ya han
aceptado determinado control, pueden tener su propia interpretación y presentarlo
con variaciones con respecto a otros navegadores.
Nota
Cuando un navegador no soporta cierto tipo de control, usualmente se
coloca un control de tipo texto simple en su lugar.
5.3.1 email
El tipo email se presenta como un campo de texto estándar que debe contener un
correo electrónico, de lo contrario, cuando llegue el momento de enviar la
información del formulario se hará la validación de este campo y el navegador
informará de alguna manera si el texto colocado no es válido. En nuestro formulario
ejemplo:
<input type="email" name="user_email" autofocus="autofocus" />
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Controles nuevos en formularios HTML5
93
5.3.2 number
El tipo number está hecho específicamente para permitir la entrada de datos
numéricos. Usualmente se presenta acompañado con algún tipo de elemento visual
para introducir sólo números, en el caso de Chrome, con dos pequeña flechas que
señalan hacia arriba y abajo para incrementar y decrementar el valor
respectivamente. Los atributos que se pueden manejar al usar el tipo number son:
x
x
x
x
Atributo max. Especifica el valor máximo permitido.
Atributo min. Especifica el valor mínimo permitido.
Atributo step. Indica el intervalo entre valores que se permite (si
step="2" entonces lo valores permitidos podrían ser î2, 0, 2, 4, etcétera).
Atributo value. El valor por default.
En el formulario:
<input type="number" name="no_number" min="1" max="10" />
5.3.3 range
El tipo range se utiliza para permitir la entrada de valores que deben estar dentro
de cierto rango definido de números. El tipo range se presenta comúnmente como
elemento desplazable a manera de barra desplazable o “slider”. Los atributos con
los que se puede contar son:
x
x
x
x
Atributo max. Especifica el valor máximo permitido.
Atributo min. Especifica el valor mínimo permitido.
Atributo step. Indica el intervalo entre valores que se permite (si
step="2" entonces los valores permitidos podrían ser î2, 0, 2, 4,
etcétera).
Atributo value. El valor por default.
En el ejemplo dentro del formulario:
<input type="range" name="no_range" min="1" max="10" />
5.3.4 search
El <input> de tipo search es utilizado como un campo de texto que sirve para
hacer búsquedas, ya sean internas o que utilicen un servicio de búsqueda, como
Google. Aunque normalmente luce como un campo de texto simple, algunos
navegadores le dan alguna funcionalidad adicional, por ejemplo, Chrome y Safari
agregan una pequeña X que permite borrar el contenido.
<input type="search" name="user_search" placeholder="campo de
busqueda" />
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
94
Controles nuevos en formularios HTML5
5.3.5 tel
El tipo tel es un campo de texto que sirve para introducir números telefónicos. A
diferencia de los tipos email y url, el navegador no hace una validación
automática al enviar la información del formulario, por lo que requerirá de
JavaScript y el atributo “pattern” para validar la correcta información en este
campo.
<input type="tel" name="user_mobile" />
5.3.6 url
La finalidad del tipo url es permitir la entrada de direcciones Web. Si el usuario
envía la información del formulario se hará un validación automática sobre este
campo, verificando la existencia del prefijo “http://”, si la validación resulta negativa
el navegador lo informará de alguna manera.
<input type="url" name="user_url" />
Actividades para el lector
Realice un documento con un formulario donde emplee al menos 3 elementos
independientes y cuatro elementos tipo input.
5.4 Nuevos atributos
La especificación HTML5 no sólo llegó con nuevos controles de formulario, sino que
también incluye algunas ventajas extra que se pueden aplicar en cualquiera de
estos controles. Expongo sólo los atributos que son soportados por el navegador
Chrome 14, pero existen algunos más que aún no son soportados universalmente.
5.4.1 autofocus
Este atributo autofocus especifica qué elemento obtendrá primero el foco del
usuario en el formulario al cargarlo, es decir, indicará en cuál control podrá
comenzar a introducir información el usuario. Por supuesto, sólo tiene sentido si se
usa autofocus unicamente en un control del formulario. En el formulario de ejemplo
se utiliza autofocus en el campo tipo email:
<input type="email" name="user_email" autofocus="autofocus" />
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Controles nuevos en formularios HTML5
95
5.4.2 pattern
El atributo pattern se utiliza para especificar una expresión regular que servirá
para validar el texto introducido en un elemento <input> de tipo text, search,
url, telephone, email o password. Este atributo debería ser utilizado sólo si
una validación común no funciona. El análisis profundo acerca del manejo de este
atributo escapa del objetivo de este libro, ya que requiere de conocimiento de
JavaScript, si desea saber más al respecto consulte bibliografía JavaScript y el
objeto RegExp.
5.4.3 placeholder
El atributo placeholder permite colocar una cadena de texto dentro de los
campos de texto de cualquier tipo, la cadena se mostrará mientras que éstos no
tengan ningún texto introducido por el usuario. Tan pronto como el usuario haga clic
en el control, el texto desaparecerá. En el ejemplo del formulario se utiliza
placeholder en el campo tipo search:
<input type="search" name="user_search" placeholder="campo de
busqueda" />
Actividades para el lector
En el documento que realizó en la actividad anterior manipule el atributo
correspondiente para que el cuarto elemento del formulario creado obtenga el
foco al cargar la página.
Actividades para el lector
1.- Investigue y haga una lista de todos los controles HTML5 para formularios.
2.- Indique en una lista por separado cuáles controles no son soportados por
Google Chrome.
3.- Detalle la diferencia entre las dos listas anteriores para reconocer cuáles
controles son soportados por Google Chrome.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
96
Controles nuevos en formularios HTML5
RESUMEN
A lo largo de este capítulo se ha hecho referencia a las nuevas características de los
controles para formularios en HTML5 que consisten en:
x
Los nuevos elementos independientes, es decir, aquellos que no son un
elemento de tipo input.
x
Elementos de tipo input disponibles en HTML5.
x
Nuevos atributos para los controles de formulario.
Autoevaluación
1. ¿Se puede utilizar algún control nuevo de formulario, fuera de un formulario?
2. ¿Cuál es la diferencia entre los controles de tipo number y range?
3. ¿Cuál es la diferencia entre un control de tipo input y otro que no lo es?
4. ¿Qué atributo debería usar si desea comenzar a llenar un formulario por un
campo específico?
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Controles nuevos en formularios HTML5
97
EVIDENCIA
Realizó un documento con un formulario donde empleo al menos 3
elementos independientes y cuatro elementos tipo input.
Manipuló el documento para obtener el foco del usuario al cargar la
página.
Investigó y enumeró los controles para formularios HTML5., detecto
cuales no son soportados por Google Chrome.
Reconoce cuáles controles para formularios HTML5 sí son soportados
por Google Chrome.
REFERENCIAS
Bibliografía
Pilgrim, Mark (2010). HTML5: Up and Running, 1a. ed., O’Reilly, EUA.
Páginas Web recomendadas
http://diveintohtml5.org/
http://dev.w3.org/html5/spec/Overview.html
http://www.w3schools.com/html5/default.asp
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
98
Controles nuevos en formularios HTML5
Respuestas sugeridas a las preguntas de autoevaluación
1. Sí, los elementos se pueden usar fuera de la etiqueta <form>.
2. El control de tipo number acepta sólo números y no necesariamente tiene un
límite superior e inferior, mientras que range sí tiene límites inferior y superior y
funciona mediante un scroll.
3. Los controles tipo input son una implementación del elemento <input> y el
atributo type, los independientes son elementos que son una etiqueta en sí
mismos.
4. El atributo autofocus.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos con CSS
6
Reflexione y responda las preguntas siguientes:
¿Qué es CSS?
¿Cómo controlar la apariencia de su página?
¿Cómo agrupar elementos para controlar su apariencia?
¿Cómo controlar la posición de los elementos de una página?
Contenido
Primeros pasos con CSS
Introducción
6.1 Un vistazo a hojas de estilo o CSS (Cascading Style Sheets)
6.2 Utilizar estilos a nivel local
6.3 Utilizar estilos a nivel documento
6.4 Utilizar estilos a nivel de sitio (link)
6.5 Utilizar clases y el identificador (class e id)
6.6 Manipular la apariencia de una página
6.7 Agrupación de elementos (span y div)
6.8 Posicionamiento
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
100
Primeros pasos con CSS
Expectativa
Conocer cómo separar el contenido de sus páginas HTML5 del código, para
controlar su aspecto con CSS.
Después de estudiar este capítulo, el lector será capaz de:
x
x
x
Utilizar los aspectos básicos de las CSS.
Controlar la apariencia de páginas HTML con estilos locales y estilos
externos.
Comprender la filosofía de posicionamiento de elementos HTML con CSS.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
101
INTRODUCCIÓN
El HTML original era mucho más enfocado al contenido como tal que a la forma en
que se presentaba, y la Web lucía de esta manera, es decir, la estética y la organización visual del contenido no era algo importante en los primero días de la Web.
Aunque esta situación era comprensible e incluso adecuada en algún momento, las
necesidades fueron cambiando, los dueños de los navegadores se dieron cuenta de
la situación y añadieron etiquetas y atributos propios que proporcionaban nuevas
capacidades, pero al mismo tiempo se creó cierta complejidad y desorden.
Ahora con la nueva especificación HTML5, se intenta regresar a la idea original
en la cual HTML se concentraba en el contenido. Las etiquetas que estaban
dedicadas a dar formato, posición o color en HTML han sido descontinuadas, así es,
etiquetas como <center>, <font> y <b>, entre otras, ya no están disponibles.
Pero no se preocupe, como algunos programadores Web ya sabrán, ahora se
dispone (oficialmente) con un lenguaje completamente dedicado a darle un buen
aspecto a sus páginas, el lenguaje es llamado CSS (Cascading Style Sheets).
Si usted está familiarizado con CSS no le afecta de gran manera si decide no
estudiar este capítulo, pero si está iniciándose en el mundo del desarrollo Web, es
el momento de comenzar y familiarizarse con el lenguaje.
6.1 Un vistazo a hojas de estilo o CSS (Cascading Style Sheets)
El funcionamiento de las hojas de estilo o CSS consiste en definir, mediante cierta
sintaxis, la apariencia y presentación de nuestras páginas a diferentes niveles:
x
A nivel local. Una etiqueta en concreto, llegando incluso a poder definir
varios estilos diferentes para una sola etiqueta. Esto es muy importante, ya
que ofrece potencia en nuestra programación, se puede definir, por ejemplo,
varios tipos de párrafos: en rojo, en azul, con márgenes, sin ellos.
x A nivel de página usando la cabecera. En 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.
x A nivel de archivos externos. Los estilos pueden especificarse desde un
archivo separado, y referenciados desde cualquier página, esto proporciona
la posibilidad de definir la forma de todo un sitio de una sola vez.
En los próximos puntos de este capítulo se analizará más a fondo estas tres
diferentes maneras de usar las hojas de estilo.
Aunque lo anterior pone en evidencia varias ventajas de las CSS, no son las
únicas, también es posible controlar la posición y las distancias de muchos de los
elementos en una página con mucha mayor precisión, al grado de poder optar por
diferentes unidades de medida como pulgadas, centímetros, puntos y pixeles.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
102
Primeros pasos con CSS
6.2 Utilizar estilos a nivel local
El uso de CSS permite hacer que sólo cierta parte de una página muestre un estilo
determinado, esto se logra utilizando a dicho estilo en alguna determinada etiqueta.
Por ejemplo, se puede definir un párrafo entero en color rojo y otro en color azul.
Para ello se maneja el atributo “style”, que es soportado por la mayoría de las
etiquetas del HTML. Considere la página siguiente:
Fig. 6.1 Página con diferentes estilos sobre párrafos con CSS.
A continuación se detalla el código de la página mostrada en la figura 6.1.
<!DOCTYPE html>
<html>
<head>
<title>Estilos Locales</title>
<meta charset="iso-8859-1" />
</head>
<body>
<p style="background-color: aqua">
Texto para el párrafo 1
</p>
<p style="background-color: blue">
Texto para el párrafo 2
</p>
<p style="background-color: fuchsia">
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
103
Texto para el párrafo 3
</p>
<p style="background-color: gray">
Texto para el párrafo 4
</p>
</body>
</html>
Nótese que se utiliza el atributo “style” en cada párrafo, se hace uso de la
propiedad background-color para indicar el color que se desea de fondo, de
manera que lo único que se ve afectado es un párrafo de manera individual.
Usted puede usar esta técnica para afectar una determinada etiqueta, pero no
es lo más conveniente, ya que el abuso podría llevarlo a tener que hacer un
mantenimiento demasiado laborioso, es decir, si deseara modificar el estilo de sus
etiquetas tendría que hacerlo una por una, en cada archivo .html donde se
encuentren, y esto es justo lo que CSS trata de evitar, sin embargo, la técnica puede
ser útil en situaciones particulares.
Dado que los colores no tienen mucho sentido en blanco y negro, puede
descargar el código de este ejemplo y verlo en su navegador.
Apoyo en la
Para apreciar los colores del ejemplo descargue de los
materiales adicionales el archivo: estilos_locales.html.
6.3 Utilizar estilos a nivel documento
Podemos definir estilos en la sección de la etiqueta <head> de un documento,
dichos estilos se pueden aplicar a toda la página. Es una manera muy cómoda y
potente de darle forma a un documento, ya que estos estilos serán aplicados en
toda la página y nos ahorrará la necesidad de aplicar estilo individual a muchas
etiquetas HTML para afectar a todo el documento. Si desea cambiar los estilos de la
página, se hara de una sola vez en la cabecera de la misma, sin tocar en lo absoluto
a las etiquetas HTML.
El siguiente es un ejemplo de cómo se utiliza CSS en el ámbito de <head> y
</head>. Por ahora lo más importante es la comprensión de conceptos básicos, no
se preocupe si no entiende a detalle el código CSS en el ejemplo, a medida que
avance en el libro y practique irá desarrollando su habilidad para comprender y
escribir código.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
104
Primeros pasos con CSS
El primer elemento que se debe agregar para incluir estilos que afecten todo
un documento en la cabecera es la etiqueta con cierre <style> dentro del ámbito
de <head>, en <style> se colocarán los diferentes estilos que desee. Los estilos
se definirán indicando a qué etiqueta desea agregar alguno y enseguida se especifica las reglas de ese estilo entre los símbolos de llave ({}). Observe el ejemplo
siguiente:
Fig. 6.2 Página que utiliza estilos CSS en la cabecera del documento <head>.
El código para la página que se muestra en la Fig. 6.2 es el siguiente:
<!DOCTYPE html>
<html>
<head>
<title>Estilos en Cabecera</title>
<meta charset="iso-8859-1" />
<style>
body {
background-color:orange;
}
p {
color:blue;
background-color:grey;
}
</style>
</head>
<body>
<p>
El texto de este párrafo es azul, su fondo es
gris y el fondo de la página es naranja
</p>
<p >
Éste es otro párrafo que usa los mismos estilos
del primero
</p>
</body>
</html>
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
105
Observe que a diferencia del ejemplo del punto 6.2, en donde especifica el
estilo a cada etiqueta, en este ejemplo ambos párrafos existentes usan el mismo
estilo especificado una sola vez en la cabecera de la página y no fue necesario tocar
en ningún momento el código HTML dentro de la sección <body>. Éste es la belleza
de CSS, hace el código HTML mucho más limpio controlando lo concerniente a la
apariencia de las páginas en otro lugar.
Apoyo en la
Para apreciar los colores del ejemplo descargue de los
materiales adicionales el archivo: estilos_cabecera.html.
6.4 Utilizar estilos a nivel de sitio (link)
Una de las características más potentes de la programación con hojas de estilos
consiste en poder definir y cambiar los estilos para todo un sitio Web de una sola
vez. Esto se consigue creando un archivo donde únicamente se coloca las
declaraciones de estilos de la página y enseguida enlace todas las páginas que
componen un sitio con ese archivo. De esta forma, todas las páginas comparten una
misma declaración de estilos y, por lo tanto, si cambia algo en esa declaración,
también cambiarán todas las páginas. Con las ventajas añadidas de que se ahorra
en líneas de código HTML (lo que reduce el peso del documento) y se evita la
molestia de definir una y otra vez los estilos con el HTML, como se comentó en el
punto anterior. Analice la página en la Fig. 6.3:
Fig. 6.3 Página que utiliza estilos CSS desde un archivo externo.
Ponga especial atención en el código de esta página y no en que el elemento
<style> no existe, ni absolutamente ningún código CSS.
<!DOCTYPE html>
<html>
<head>
<title>Estilos en Cabecera</title>
<meta charset="iso-8859-1" />
<link rel="stylesheet" type="text/css"
href="estiloExterno01.css" />
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
106
Primeros pasos con CSS
</head>
<body>
<h1>Esta página utiliza un Estilo Externo</h1>
<p>
El texto de este párrafo es azul, su fondo es gris y el
fondo de la página es naranja
</p>
<p >
Éste es otro párrafo que usa los mismos estilos del
primero
</p>
</body>
</html>
Esta página es muy similar a la del ejemplo del punto 6.3, la diferencia
interesante es que claramente tiene un estilo, pero la información no está
directamente escrita en la página, en su lugar se utiliza la etiqueta vacía <link>.
La etiqueta vacía <link> dentro de la sección <header> permite asociar
otro archivo con la página actual, su uso más común es precisamente para incluir
estilos. Los atributos utilizados cuando se usan hojas de estilo son los siguientes:
x
Atributo href. Especifica la dirección URL del archivo que se desea vincular.
x
Atributo rel. Indica la naturaleza de relación entre el documento actual y el
archivo vinculado por la URL. Cuando el archivo vinculado contiene cascadas
de estilo, el valor es stylesheet.
x
Atributo type. Especifica el tipo MIME del archivo vinculado, para las hojas
de estilo el valor es text/css.
El estilo en un archivo externo puede usarse una y otra vez en múltiples
páginas, y éstas reflejarán cualquier cambio en la hoja de estilos.
El archivo que contiene los estilos tiene extensión .css y puede modificarse
con cualquier editor de texto plano, el código no requiere de la etiqueta <style>.
Aquí el código CSS del archivo que se utiliza en el ejemplo:
body {
background-color: orange;
}
p {
color:blue;
background-color: grey;
}
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
Apoyo en la
107
Para apreciar los colores del ejemplo descargue de los
materiales adicionales los archivos:
estilos_externos.html y estiloExterno01.css.
Actividades para el lector
Para practicar sus conocimientos cree 3 documentos en ellos manipule el color
del texto de un párrafo a rojo, utilice la declaración de estilo a nivel local,
documento y sitio, una vez terminados modifique sus documentos a color azul.
6.5 Utilizar clases y el identificador (class e id)
Como se ha mencionado, CSS es muy práctico porque permite añadir o modificar un
estilo para elementos HTML rápidamente. Se ha visto ejemplos donde se añade un
estilo a algunas etiquetas en particular, o le fueron asignados estilos a la etiqueta
<p>. Pero ¿qué pasaría si quisiera seguir afectando a los párrafos de la misma
manera, excepto a uno o a dos?, este caso se muestra en la página muestra en la
Fig. 6.4:
Fig. 6.4 Página con estilos referenciados usando los atributos class e id.
Si se ha contestado que podría resolver este problema empleando la técnica
de estilos a nivel local, tiene usted razón, pero si le queda la sensación de una
piedra en el zapato, permítame felicitarlo porque comienza a pensar como
¡programador! Resolver esto con estilos locales resultaría ineficiente y poco
elegante. Para resolver esto se cuenta con los atributos id y class que permiten
aplicar estilos a una etiqueta en particular o a un grupo de ellas.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
108
Primeros pasos con CSS
El código HTML y CSS de la página que se muestra en la Fig. 6.4 es:
<!DOCTYPE html>
<html>
<head>
<title>Estilos con Identificadores y Clases </title>
<meta charset="iso-8859-1" />
<link rel="stylesheet" type="text/css"
href="estiloExterno02.css" />
</head>
<body>
<h1>Esta página utiliza un Estilo Externo con
Identificadores y Clases
</h1>
<p id="elegante">
Este párrafo usa el estilo elegante para los párrafos
</p>
<p>
Este párrafo usa el estilo general para los párrafos
</p>
<p class="blancas" >
Este párrafo utiliza un estilo de letras blancas
</p>
<p >
Este párrafo usa el estilo general para los párrafos
</p>
<p class="blancas" >
Este párrafo utiliza un estilo de letras blancas
</p>
</body>
</html>
Si tiene experiencia construyendo páginas Web no le resulta nuevo el atributo
“id”, el cual sirve para dar un identificador único a una etiqueta HTML, en este caso
se usa id="elegante" para el primer párrafo, el cual tiene su propio estilo
dedicado. Después en el tercer y quinto párrafos se utiliza el atributo
class="blancas", en este caso ambos párrafos comparten el mismo estilo, y
finalmente los dos párrafos restantes hacen uso del estilo general indicado para los
párrafos.
El código siguiente corresponde al archivo vinculado con el ejemplo
estiloExterno02.css, observe detenidamente el código y deduzca qué pasa en él.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
body {
background-color:
}
p {
color:blue;
background-color:
}
#elegante {
color:black;
background-color:
}
.blancas {
color:white;
background-color:
}
109
orange;
gray;
yellow;
green;
Después de observar el código HTML y su correspondiente CSS, es posible
afirmar que lo que se ha agregado son algunos indicadores para distinguir entre tres
tipos de párrafos:
x
x
x
Párrafos comunes. Estos párrafos no requieren ninguna característica
especial. Una vez vinculado el estilo, el código de estos párrafos queda
intacto.
Párrafos identificados. Estos párrafos usan el atributo id con un valor único,
este atributo está disponible para prácticamente todas las etiqueta HTML,
de manera que en este ejemplo, el estilo puede hacer referencia a un
elemento en particular gracias a su valor en id.
Párrafos dentro de una clase. Para dar aún mayor flexibilidad se puede
asignar valor al atributo ”class” y a cualquier elemento HTML. Esta
propiedad permite indicar que el elemento HTML que la utiliza es miembro
de ella. A diferencia del atributo “id” se puede tener tantos elementos como
se desee utilizando la misma clase. El estilo por supuesto afecta a todos los
miembros de una misma clase.
Para hacer uso de un id como referencia en la hoja de estilos, debe anteponer
el signo “#” al nombre del valor, como se hace en el ejemplo con el id con valor
elegante:
#elegante {
color:black;
background-color: yellow;
}
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
110
Primeros pasos con CSS
Utilice el carácter punto (.) antes del nombre de la clase para hacer referencia
al valor del atributo “class”, como se hizo en el ejemplo:
.blancas {
color:white;
background-color: green;
}
x
x
x
Utilice el nombre de la etiqueta HTML cuando desee afectar todos los
elementos de ese tipo.
Use el atributo “class” cuando quiera afectar sólo a un grupo de elementos
que son o no del mismo tipo.
Use el atributo id cuando quiera afectar a un elemento individualmente.
Apoyo en la
Para apreciar los colores del ejemplo descargue de los
materiales adicionales los archivos:
estilos_idclass.html y estiloExterno02.css.
6.6 Manipular la apariencia de una página
La cantidad de cosas que usted puede manipular con CSS es bastante grande, CSS
utiliza una buena cantidad de propiedades para diferentes fines que ameritarían un
libro entero, es por eso que sólo ejemplificaré algunas de las situaciones más
comunes en la implementación de hojas de estilo.
Con las hojas de estilo es posible utilizar colores, modificar el formato de un
texto, añadir y manejar bordes de diferentes elementos, usar imágenes como
fondos y manejar la estructura y posición visual de una página.
6.6.1 Manipular texto
El texto está presente en la mayoría de las páginas y es quizá el elemento más
importante en la Web, es por esa razón que CSS ofrece muchas características para
manipular la apariencia del texto de los documentos. Las siguientes son algunas de
las propiedades clásicas utilizadas en CSS:
x
x
x
x
x
Propiedad color. Especifica el color del texto.
Propiedad letter-spacing. Incrementa o decrementa la distancia entre
los caracteres de un texto.
Propiedad text-align. Especifica la alineación horizontal de un texto.
Propiedad text-decoration. Indica la decoración de un texto. Los
valores más utilizados son none, underline, overline y linethrough.
Propiedad vertical-align. Especifica la alineación vertical de un texto.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
111
En la Fig. 6.5 se muestra un número de efectos de texto que puede lograr
utilizando CSS y los atributos expuestos:
Fig. 6.5 Algunos efectos de texto que puede lograr utilizando CSS.
A continuación se muestra el código de esta página:
<!DOCTYPE html>
<html>
<head>
<title>Estilos en texto</title>
<meta charset="iso-8859-1" />
<link rel="stylesheet" type="text/css"
href="estiloExterno03.css" />
</head>
<body>
<p class="color">
Este párrafo utiliza la propiedad color: red; de
CSS
</p>
<p class="letter_spacing">
Este párrafo utiliza la propiedad letterspacing: 5px; de
CSS
</p>
<p class="text-_lign">
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
112
Este párrafo utiliza
center de CSS
</p>
<p class="underline">
Este párrafo utiliza
decoration: underline de CSS
</p>
<p class="overline">
Este párrafo utiliza
decoration: overline de CSS
</p>
<p class="through">
Este párrafo utiliza
decoration:
line-through de CSS
</p>
<p class="vertical_align">
Este párrafo utiliza
align: top de CSS
</p>
<p class="font_family">
Este párrafo utiliza
arial de CSS
</p>
<p class="font_size">
Este párrafo utiliza
line-through de CSS
</p>
<p class="font_style">
Este párrafo utiliza
italic de CSS
</p>
<p class="font_weight">
Este párrafo utiliza
bolder de CSS;
</p>
</body>
</html>
Primeros pasos con CSS
la propiedad text-align:
la propiedad text-
la propiedad text-
la propiedad text-
la propiedad vertical-
la propiedad font-family:
la propiedad font-size:
la propiedad font-style:
la propiedad font-weight:
El código HTML de esta página es muy sencillo, es esencialmente un grupo de
párrafos con texto, lo más notable es que cada párrafo es miembro de una clase en
particular, para esto por supuesto se hace uso del atributo “class“.
En el archivo estiloExterno03.css se implementa todas las propiedades de
hojas de estilo expuestas en este punto.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
113
.color {
color: red;
}
.letter_spacing {
letter-spacing: 5px;
}
.text-_lign {
text-align: center;
}
.underline{
text-decoration: underline;
}
.overline {
text-decoration: overline;
}
.through {
text-decoration: line-through;
}
.vertical_align{
vertical-align: top;
}
.font_family{
font-family: arial;
}
.font_size{
font-size: 150%;
}
.font_style{
font-style: italic;
}
.font_weight{
font-weight: bolder;
}
Nota
Existen aún más propiedades para manipular texto, si desea conocerlas todas
consulte la bibliografía dedicada a CSS o bien puede consultar la página oficial:
http://www.w3.org/Style/CSS/
Apoyo en la
Alfaomega
Para apreciar los colores del ejemplo descargue de los
materiales adicionales los archivos:
estilos_texto.html y estiloExterno03.css
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
114
Primeros pasos con CSS
6.6.2 Manipular colores
En los ejemplos realizados hasta este capítulo se han manipulado esencialmente
colores, utilizando nombre de colores en inglés como orange, green, etc., a veces se
requiere tener una variedad más amplia de colores, pero CSS sólo cuenta con 147
colores diferentes si se hace de esta manera.
¿Recuerda cuando usted asistía al jardín de niños o a alguna escuela de
educación básica?, ahí muy probablemente en algún momento le dieron algunos
pigmentos de color rojo, verde y azul, los cuales mezcló para obtener nuevos
colores. En el mundo de las computadoras (incluyendo su monitor y las hojas de
estilo) las cosas suceden con la misma base. Usted tiene que decidir qué cantidad
de rojo, verde y azul utilizará para crear un color, de manera simple, manejará un
porcentaje para cada uno de los colores básicos, por ejemplo: 50, 50, 0.
Sin embargo, los equipos de cómputo trabajan distinto, en el porcentaje el
rango va usualmente de 0 a 100, pero en nuestro caso el rango es de 0 a 255, cada
valor de color (rojo, verde y azul) toma dos dígitos que representan su color en
numeración hexadecimal (base 16) que va de 00 (total ausencia de color) a FF
(máximo de brillo). Al final lo que se obtiene se conoce como notación hexadecimal
de un color.
No se angustie, todo esto suena mucho más difícil de lo que es en realidad,
además hoy en día hay una gran cantidad de herramientas que le ayudan en la
creación de colores. En la Fig. 6.6 se muestra un analizador de color, que es una
página desarrollada para que el usuario pruebe los colores que puede crear.
Fig. 6.6 Página analizador_color.html.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
115
La página analizador_color.html tiene un funcionamiento muy simple, utiliza
un control range para cada color primario, cuando mueve los sliders (range) el
color de fondo de la página cambia y el formato hexadecimal de ese color se
muestra en el campo de texto en la parte superior.
Utilizando cualquier valor que resulte en el campo de texto, puede sustituir
cualquiera de los nombres de colores que ha usado. Si quisiera usar una notación
hexadecimal para el color del texto y el fondo de un párrafo, el código seria así:
p {
color: #FF0000;
background-color: #FFAD00;
}
Observe que debe utilizar el símbolo (#) justo antes del número hexadecimal,
la ventaja de usar la notación hexadecimal es que se obtiene la posibilidad de
manejar muchos más colores que los reconocidos por su nombre en inglés en CSS.
No tiene que aprender de memoria ninguna notación, se puede auxiliar de muchas
herramientas para obtener el color que desea.
Apoyo en la
En los materiales adicionales encontrará el archivo:
analizador_color.html.
6.6.3 Manipular Bordes
Hasta el momento se ha visto cómo darle color al interior de nuestros elementos,
pero las hojas de estilo también hacen posible cambiar la apariencia de los bordes
de aquellos elementos HTML que tienen uno, como por ejemplo los párrafos y las
tablas, entre otros. Para dar estilo a un borde se emplean las propiedades
disponibles en CSS, las más utilizadas son:
x
x
x
x
Propiedad border. Permite especificar todas las propiedades de un borde en una
sola declaración.
Propiedad border-color. Especifica el color de un borde por sus cuatro lados.
Propiedad border-style. Especifica el estilo de un borde por sus cuatro lados.
Propiedad border-width. Especifica el grueso del borde por sus cuatro lados.
La Fig. 6.7 muestra el uso de las propiedades border, border-color,
border-style, border-width, así como diferentes estilos que puede utilizar.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
116
Primeros pasos con CSS
Fig. 6.7 Pagina que muestra diferentes estilos de bordes.
Apoyo en la
En los materiales adicionales encontrará el archivo:
estilos_bordes.html.
Existen más propiedades para manipular con más detalle el estilo de un borde,
por ejemplo puede manipular los lados de manera independiente con borderleft, border-right, border-top, border-bottom.
Actividades para el lector
Investigue a profundidad todas las propiedades para dar estilo a los bordes.
6.7 Agrupación de elementos (span y div)
Las etiquetas <span> y <div> se usan para agrupar otros elementos y así ayudar
a estructurar un documento. Efectivamente, son elementos HTML y no CSS, pero en
la práctica se utilizan ambos elementos, máxime cuando se tiene la intención de
combinarlos con hojas de estilo; es por esto que los explico en este capítulo. Debido
a esta relación tan común, a menudo se verá utilizando también los atributos
“class” e “id”, se expusieron en el punto 6.5. Ahora se revisará el uso de los
elementos (<span> y <div>).
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
117
6.7.1 span
El elemento con cierre <span> es lo que se denomina un elemento neutro que no
provee ningún cambio visual en sí, pero con CSS <span> actúa como un gancho
hacia cierto texto o cierta parte de un documento. Cuando algo está enganchado
con <span> puede aplicar estilos sobre eso o manipularlo con JavaScript.
Ejemplo
Nos interesa resaltar ciertas partes del contenido de un texto:
<blockquote
cite="http://www.proverbia.net/citasautor.asp?autor=327">
<span>Todos</span> somos muy <span>ignorantes</span>. Lo que ocurre
es que no todos ignoramos las <span>mismas cosas</span>.
</blockquote>
Ahora se utilizará <span> en las partes de texto que se quiere resaltar, sólo
resta agregar el estilo adecuado.
span {
color:red;
}
La Fig. 6.8 muestra el resultado en el navegador.
Fig. 6.8 Página que utiliza <span> con estilos CSS.
Se podría haber usado las propiedades class o id, pero recuerde que usted
como desarrollador es el que decide cuándo será apropiado usarlas.
6.7.2 div
Mientras que <span> se usa dentro de un elemento a nivel de una etiqueta tipo
bloque (<p>), como se vio en el ejemplo anterior, <div> se usa para agrupar uno
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
118
Primeros pasos con CSS
o más elementos, siendo el mismo <div>, el bloque que envuelve a éstos. Además
de esta diferencia, la agrupación con <div> funciona de manera similar.
Ejemplo
Dos listas de razas caninas, divididas según su primera letra.
<div id="letraA">
<ul>
<li>Akita</li>
</ul>
</div>
<div id="letraB">
<ul>
<li>Beagle</li>
<li>Black Cocker Spaniel</li>
<li>Bloodhound</li>
<li>Boston Terrier</li>
<li>Boxer</li>
</ul>
</div>
<div id="letraC">
<ul>
<li>Chihuahua</li>
<li>Chow Chow</li>
<li>Cocker Spaniel</li>
</ul>
</div>
En la parte de estilos se tiene:
#letraA {
background: blue;
}
#letraB {
background: red;
}
#letraC {
background: green;
}
Puede ver la apariencia de la página en la Fig. 6.9.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
119
Fig. 6.9 Uso de div en el ejemplo: Dos listas de razas caninas.
Apoyo en la
En los materiales adicionales encontrará el archivo:
ejemplo div listas.html.
Nota
Se ha utilizado estilos simples tanto con <div> como con <span>.
El lector puede hacer estilos más complejos, el mecanismo es el mismo.
Actividades para el lector
1.-- Cree un documento con cinco elementos <div>. Utilice clases para
asignar a tres de ellos fondo verde. Con identificadores determine para los
restantes rojo y azul respectivamente.
2.- En un nuevo documento utilice <span>, emplee estilos para asignar a 5
palabras color naranja.
6.8 Posicionamiento
Durante mucho tiempo la distribución de la estructura de las páginas ha sido una de
las cosas más problemáticas de HTML. Los desarrolladores utilizan diversos trucos
para lograr posicionar los elementos en el lugar correcto. Sin embargo, ahora las
hojas de estilo facilitan la vida proporcionando una serie de alternativas para
colocar los elementos donde se desea.
6.8.1 Elementos flotantes (propiedades float y clear)
El posicionamiento flotante funciona definiendo la relación entre elementos, más
que indicando de manera explícita en qué lugar aparecen. Los elementos se pueden
hacer flotar a la derecha o a la izquierda usando la propiedad “float”. Es decir, un
elemento con su contenido flota bien a la derecha o bien a la izquierda de un documento.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
120
Primeros pasos con CSS
Por ejemplo, si quisiera texto con ajuste de línea alrededor de una imagen, se
podría utilizar el siguiente código:
<div id="imagen">
<img src="perro01.jpg" alt="Un Perrito">
</div>
<p>Rhoncus nec porttitor est rhoncus, turpis, ultricies cras...</p>
Para conseguir que la imagen flote a la izquierda y el texto se ajuste a su
alrededor, sólo hay que definir la propiedad “float” con el valor “left” y el ancho
de la caja definida por <div> que rodea la imagen:
#imagen {
float: left;
width: 200px;
}
La implementación de este código se muestra en la Fig. 6.10.
Fig. 6.10 Página con propiedad float.
Apoyo en la
En los materiales adicionales encontrará el archivo:
estilos_flotante.html.
Otra manera de implementar la propiedad “float” es la creación de columnas en un documento. Para crear tales columnas tendrá que estructurar las co-
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
121
lumnas deseadas en el código HTML con la etiqueta <div>, como se muestra a
continuación:
<div id="columna1">
<p>Rhoncus nec porttitor est rhoncus, turpis, ultricies cras...</p>
</div>
<div id="columna2">
<p>Rhoncus nec porttitor est rhoncus, turpis, ultricies cras...</p>
</div>
<div id="columna3">
<p>Rhoncus nec porttitor est rhoncus, turpis, ultricies cras...</p>
</div>
Enseguida se establece el ancho de las columnas que puede ser un valor fijo o
un porcentaje, como en este caso, y se coloca el valor “float” en los estilos:
#columna1 {
float:left;
width: 33%;
}
#columna2 {
float:left;
width: 33%;
}
#columna3 {
float:left;
width: 33%;
}
La Fig. 6.11 muestra el resultado de este código.
Fig. 6.11 Creación de columnas en un documento con la propiedad “float”.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
122
Primeros pasos con CSS
Apoyo en la
En los materiales adicionales encontrará el archivo:
estilos_flotante2.html.
La propiedad “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. En el ejemplo con la foto de nuestro
amigo canino, el texto se desplaza en forma automática hacia arriba junto a la
imagen.
Fig. 6.12 Texto en un documento con la propiedad “clear”.
La propiedad “clear” puede tomar los valores left, right, both o none.
El principio consiste en que, si “clear”, por ejemplo, se fija en “both“ para una
caja, el borde del margen superior de esta caja siempre estará debajo del borde del
margen inferior para las posibles cajas flotantes que vengan de arriba. Para
comprender mejor esto véase la Fig. 6.12. Respecto al código HTML y el primer
ejemplo, lo único que cambió fue que en esta ocasión se hizo uso del atributo
“class” con el valor “sinflotar“:
<p class="sinflotar">Rhoncus nec porttitor est rhoncus, turpis,
ult...</p>
Al código CSS se le añadió el estilo con la propiedad “clear” para impedir
que el texto flotara junto a la imagen.
.sinflotar {
clear: both;
}
Apoyo en la
En los materiales adicionales encontrará el archivo:
estilos_clear.html
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
123
6.8.2 Posicionamiento absoluto
Cuando se quiere posicionar un elemento de manera totalmente independiente,
fuera del esquema flotante o de la relación con otro elemento, con un control más
preciso, se puede hacer indicando de manera explícita la posición exacta donde se
colocará el elemento.
El mecanismo es simple, cada página es como un gran eje de coordenadas
donde la posición inicial es la esquina superior izquierda, de manera que se utilizan
tres simples propiedades de CSS:
x
x
x
Propiedad position. Especifica el tipo de posicionamiento a utilizar. En este
caso el valor será “absolute”.
Propiedad top. Para un posicionamiento absoluto determina la distancia
entre la parte superior de la página y la parte superior del elemento afectado.
Propiedad left. Para un posicionamiento absoluto determina la distancia
entre la parte izquierda de la página y la parte izquierda del elemento
afectado.
La Fig. 6.13 muestra un ejemplo de posicionamiento absoluto.
Fig. 6.13 Ejemplo de posicionamiento absoluto.
El código HTML es el siguiente:
<h1>Ejemplo de Posicionamiento Absoluto</h1>
<p >
Un bicho en la página!!!!Un bicho en la página!!!!Un bicho en la
página!!!!Un bicho en la página!!!!Un bicho en la página!!!!Un
bicho en la página!!!!Un bicho en la página!!!!Un bicho en la
página!!!!Un bicho en la página!!!!Un bicho en la página!!!!Un
bicho en la página!!!!Un bicho en la página!!!!Un bicho en la
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
124
Primeros pasos con CSS
página!!!!Un bicho en la página!!!!Un bicho en la
bicho en la página!!!!Un bicho en la página!!!!Un
página!!!!Un bicho en la página!!!!Un bicho en la
bicho en la página!!!!Un bicho en la página!!!!Un
página!!!!Un bicho en la página!!!!
</p>
<div id="imagen">
<img src="bug.gif" alt="bicho">
</div>
página!!!!Un
bicho en la
página!!!!Un
bicho en la
El código CSS es el que hace el trabajo:
#imagen {
position: absolute;
top: 100px;
left: 280px;
}
Apoyo en la
En los materiales adicionales encontrará el archivo:
estilos_posabsoluta.html.
6.8.3 posicionamiento relativo
Para posicionar un elemento de forma relativa, la propiedad “position” se
establece con el valor “relative”. La diferencia entre posicionamiento absoluto y
relativo consiste en cómo se calcula la posición.
La posición se calcula desde la posición original en el documento. Esto
significa que el elemento se mueve hacia la derecha, izquierda, arriba o abajo de
donde estaba colocado originalmente. De este modo, el elemento sigue teniendo
efecto en los elementos que lo rodean. Las propiedades serían para este caso de la
siguiente manera:
x
x
x
Propiedad position. Especifica el tipo de posicionamiento a utilizar. En
este caso el valor será “relative”.
Propiedad top. Para un posicionamiento relativo determina la distancia
entre la parte superior del elemento afectado en su posición original y la
parte superior del elemento afectado en su nueva posición.
Propiedad left. Para un posicionamiento relativo determina la distancia
entre la parte izquierda del elemento afectado en su posición original y la
parte izquierda del elemento afectado en su nueva posición.
La Fig. 6.14 muestra el mismo ejemplo anterior en su versión relativa.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
125
Fig. 6.14 Ejemplo de posicionamiento relativo.
El único cambio en el código con respecto al ejemplo anterior es el valor
“relative” para la propiedad “position”:
#imagen {
position: relative;
top: 100px;
left: 280px;
}
Existen muchas más cosas que se pueden hacer con las hojas de estilo de las
que puedo abordar es este capítulo introductorio. Para profundizar más consulte las
bibliografías disponibles dedicadas a CSS. El siguiente capítulo abordará algunas de
las nuevas capacidades de la especificación CSS en su nueva versión, conocida
como CSS3.
Apoyo en la
En los materiales adicionales encontrará el archivo:
estilos_posrelativa.html.
Actividades para el lector
1.- Construya un documento con dos elementos <div>, el primero con texto de
color azul que flote a la izquierda del segundo <div> que contiene texto rojo.
2.- Elabore un documento con texto a 4 columnas utilizando <div>.
3.- Investigue y documente en forma de lista, los estilos para controlar la
apariencia del texto que no se hayan mencionado en este capítulo, incluya la
descripción de sus atributos y la versión de CSS a que pertenece.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
126
Primeros pasos con CSS
RESUMEN
En este capítulo se ha introducido al lector a las reglas básicas de las hojas de estilo
CSS (Cascading Style Sheets).
Conoció de manera general:
x
Objetivos generales de CSS.
x
Trabajo conjunto de HTML y CSS.
x
Métodos para controlar el aspecto de elementos particulares, agrupados y
generales con CSS.
x
La manera de posicionar elementos HTML con CSS.
Autoevaluación
1. ¿Qué es CSS?
2. ¿Qué atributo de etiqueta se debe utilizar si requiere usar un estilo directamente
en la etiqueta HTML?
3. ¿En qué sección de una página HTML se debe colocar estilos si requiere que
tenga efecto sobre todo el documento?
4. ¿Qué atributo de etiqueta se debe usar si requiere afectar sólo algunos
elementos con un estilo?
5. ¿Qué atributo de etiqueta debería usar si desea afectar únicamente a un
elemento HTML?
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Primeros pasos en CSS
127
EVIDENCIA
Creó documentos donde manipuló el color del texto utilizando
declaraciones de estilo a nivel local, documento y sitio.
Investigó y documento las propiedades para dar estilo a los bordes.
Utilizó clases e identificadores para asignar fondos.
Utilizó <span> y estilos para asignar colores a palabras.
Utilizó diversos tipos de posicionamiento, con elementos <div>.
Investigó y documento la descripción de los estilos para afectar el texto de
un documento, incluyó la versión de CSS a la que pertenece.
REFERENCIAS
Bibliografía
Pilgrim, Mark (2010). HTML5: Up and Running, 1a. ed., O’Reilly, EUA.
Hogan, Brian (2011). HTML5 and CSS3. Develop with Tomorrow’s Standards Today,
1a. ed., Pragmatic Bookshelf, EUA.
Páginas Web recomendadas
http://diveintohtml5.org/
http://dev.w3.org/html5/spec/Overview.html
http://www.w3schools.com/html5/default.asp
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
128
Primeros pasos con CSS
Respuestas sugeridas a las preguntas de autoevaluación
1. Es un lenguaje que se utiliza para definir la presentación de un documento HTML.
2. El atributo style.
3. En la sección <head> y </head>.
4. El atributo class.
5. El atributo id.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
7
Reflexione y responda las preguntas siguientes:
¿Qué es lo nuevo en la versión CSS3?
¿Qué es lo que ha mejorado con CSS3?
¿Hay alguna limitante de compatibilidad entre CSS3 y navegadores?
¿Cómo se usan los nuevos elementos visuales?
¿Qué hay de nuevo con textos y fuentes?
¿Cuáles son las nuevas herramientas de selección?
Contenido
Nuevo y mejorado CSS3
7.5 Transformaciones
Introducción
7.6 Transiciones
7.1 Motores de renderizado y CSS3
7.7 Transparencia
7.2 Nuevas notaciones para color
7.8 Texto y fuentes descargables
7.3 Bordes
7.9 Herramientas de selección
7.4 Gradientes
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
130
Nuevo y mejorado CSS3
Expectativa
Conocer las capacidades de la nueva especificación Cascading Style Sheet Level 3.
Obtener las bases para mejorar la eficacia y eficiencia en la construcción y diseño
de documentos HTML5.
Después de estudiar este capítulo, el lector será capaz de:
x
x
x
x
Conocer las nuevas y mejoradas características en CSS3.
Estar al tanto de las limitantes entre CSS3 y los navegadores.
Hacer más eficiente la construcción y diseño de páginas HTML5.
Ampliar la variedad de posibilidades para manipular la estética visual y la
estética de código en sus páginas HTML5.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
131
INTRODUCCIÓN
En el capítulo 6: “Primeros pasos en CSS”, se tuvo una introducción a las
capacidades de las hojas de estilo o CSS, ahora se hablará de la nueva versión de
las hojas de estilo, conocida como CSS Level 3 o solamente CSS3. Junto con la
creación de la nueva especificación HTML5 también se desarrolla la nueva
especificación para CSS3 con capacidades nuevas y mejorando otras ya existentes,
esto se escucha muy bien, sin embargo, no todo es color de rosa, al igual que
HTML5, CSS3 aún no es una especificación completa ni oficial, por lo que no todas
sus características funcionan en todos los navegadores, o bien puede haber variaciones en el comportamiento de algunas características.
En el caso particular de la especificación CSS3, ésta no es una sola especificación general, sino que se divide en módulos. Cada módulo añade nuevas
capacidades o extiende algunas ya existentes en especificaciones anteriores. La
nueva especificación preserva compatibilidad con versiones anteriores.
El avance en el desarrollo de la especificación en cada módulo va cambiando
al momento de escribir este libro (octubre del 2011), por lo que hay módulos con
diferente nivel de avance. La manera más veraz de seguir el desarrollo de este
lenguaje es verificando en la página oficial:
http://www.w3.org/Style/CSS/current-work
7.1 Motores de renderizado y CSS3
Los fabricantes de navegadores no suelen construir éstos completamente desde
cero hoy en día, aunque algunos lo han hecho en el pasado, por lo que se auxilian
de motores de renderizado (rendering engines) creados previamente, es decir, se
basan en código de programación ya construido que permite visualizar elementos
en el navegador que lo utiliza. Esto tiene importancia para CSS3 porque debido a
que no es un estándar terminado, los motores de renderizado aún se están
mejorando o actualizando y se tienen en fase de experimentación varias propiedades CSS3 y lo indican utilizando un prefijo, es importante señalar esto, ya que hay
mucha información y ejemplos en libros y en línea que utilizan estos prefijos
constantemente:
x
Prefijo -webkit-. Indica que es una versión de prueba para las propiedades CSS, optimizada para los navegadores basados en el motor de renderizado WebKit. Chrome y Safari (incluyendo las versiones para iphone y ipod)
se basan en este motor.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
132
Nuevo y mejorado CSS3
x
Prefijo -o-. Indica que es una versión de prueba para las propiedades CSS,
optimizada para el motor de Opera.
x
Prefijo -moz-. Indica que es una versión de prueba para las propiedades
CSS, optimizada para el motor de renderizado Mozilla. Este motor es principalmente usado por Firefox, pero hay otros navegadores basados en el
motor de Mozilla que están ahí afuera.
x
Prefijo -ms-. Indica que es una versión de prueba para las propiedades
CSS, optimizada para el motor de renderizado Microsoft para Internet
Explorer. Son pocas las situaciones donde se usa, ya que la mayor parte de
las veces Explorer simplemente soporta o no alguna propiedad.
7.2 Nuevas notaciones para color
Si usted leyó el punto 6.6.2: “Manipulando colores”, en el capítulo anterior o tiene
experiencia con CSS, no será nuevo para usted el hecho de que los colores utilizan
valores RGB en diferentes notaciones para definir colores.
Ahora CSS3 ofrece nuevas notaciones que no sólo permiten hacer lo mismo
que ya hacían las anteriores, sino que también ofrecen nuevas características y
facilidades para las personas con experiencia en diseño gráfico y/o edición de
imágenes.
7.2.1 Notación RGBA
Para definir un color RGBA, se deben especificar cuatro valores, el primero para el
color rojo (R), el segundo para verde (G), el tercero para azul (B) y el cuarto y
novedoso en CSS que corresponde al canal alfa, es decir, el nivel de transparencia,
por ejemplo:
background: rgba(255, 125, 0, 0.5);
Los tres primeros valores son números en sistema decimal entre 0 y 255, o
bien pueden ser porcentajes de 0% a 100%, los cuales corresponden con los
valores de rojo, verde y azul. El cuarto valor es un número entre 0 (completamente
transparente) y 1 (totalmente opaco).
7.2.2 Notación HSL Y HSLA
La notación HSL debe su nombre a las primeras letras de hue (tono), saturation
(saturación) y lightness (brillo), este formato no es el favorito de los programadores,
pero tiene mucho sentido para las personas relacionadas con el diseño gráfico y
programas de edición de imágenes.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
133
Hue (tono) representa el grado en el círculo de color (de 0 a 360 grados), 0 o
360 es rojo, 120 es verde, 240 es azul. Saturation (saturación) es un porcentaje
donde 0% es una sombra de gris y 100% es el color total. Lightness (brillo) también
es un porcentaje donde 0% es negro y 100% es blanco, ejemplo:
background: hsl(120,65%,75%);
Probablemente ya se ha imaginado cómo es la notación HSLA, ésta es el
mismo modelo HSL, agregando el canal alfa para indicar el nivel de transparencia:
background: hsla(120,65%,75%,0.3);
7.3 Bordes
Si tiene alguna experiencia utilizando bordes o leyó el punto 6.6.3: “Manipulando
bordes”, quizá ha podido concluir que utilizar estilos para manipular la presentación
de un borde, es una buena manera de mejorar la estructura visual de sus páginas.
CSS3 mejora esta posibilidad y ahora permite brindar características que
anteriormente implicaban mucho trabajo artesanal, como esquinas redondeadas,
sombras, imágenes en los bordes (en caso exclusivo de Firefox incluso gradientes
en los bordes).
A continuación verá una página con ejemplos de los estilos para borde CSS3 y
su código, posteriormente se hará el análisis de cada borde, tenga presente que
algunos navegadores usan aún el prefijo experimental respectivo y pueden
presentar algunas diferencias en su comportamiento.
Fig. 7.1 Implementación de los nuevos estilos de borde comunes en CSS3.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
134
Nuevo y mejorado CSS3
Apoyo en la
En los materiales adicionales encontrará el archivo:
estiloscss3_bordes.html
Considere a continuación el código de este ejemplo para enseguida analizarlo:
<!DOCTYPE html>
<html>
<head>
<title>Estilos de Bordes CSS3</title>
<meta charset="iso-8859-1" />
<style>
#rounded{
border:2px solid;
border-radius:10px;
padding: 5px;
}
#shadow{
background-color:orange;
box-shadow: 10px 10px 5px #888888;
-webkit-box-shadow: 10px 10px 5px #888888; /* Safari y
Chrome */
}
#image_repeat{
border-width:10px;
-moz-border-image:url(imagen_borde.png) 30 repeat; /*
Firefox */
-webkit-border-image:url(imagen_borde.png) 30 repeat; /*
Safari y Chrome */
-o-border-image:url(imagen_borde.png) 30 repeat; /* Opera */
border-image:url(imagen_borde.png) 30 repeat;
}
</style>
</head>
<body>
<p id="rounded" >
Borde con estilo
</p>
<p id="shadow" >
Borde con estilo
</p>
<p id="image_repeat"
Borde con estilo
repetir
redondeado
con sombra
>
utilizando imagen con comportamiento
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
135
</p>
</body>
</html>
7.3.1 Bordes redondeados
Crear bordes redondeados es algo laborioso con CSS2 y CSS1, también hay otros
métodos, como la manipulación de celdas en tablas para lograr este mismo efecto,
pero estas técnicas resultan laboriosas y confusas para algunas personas cuando
comienzan a desarrollar, además de requerir crear imágenes para cada esquina.
Con el uso de la especificación CSS3 esto se vuelve mucho más sencillo y puede
aplicarse a una sola esquina o a todas ellas, detalles como el ancho y el color se
pueden alterar con gran facilidad. El código para lograr este efecto es:
#rounded{
border:2px solid;
border-radius: 10px;
padding: 5px;
}
Su sintaxis es muy simple, border-radius puede tomar hasta cuatro
argumentos, uno para cada esquina en orden de las manecillas del reloj, en este
caso un solo valor indica que aplica el mismo para las 4 esquinas. También es
posible redondear esquinas individualmente con border-top-left-radius,
border-top-right-radius, etc., esto puede ser útil en algunos casos, sin
embargo, tome en cuenta que algunos navegadores pueden requerir aún el prefijo
experimental.
7.3.2 Bordes sombreados
Añadir sombra a un elemento, sin usar CSS3, es algo complicado, ya que es
necesario hacer un buen trabajo de manipulación de imágenes, del uso de colores y
de espacios. CSS3 facilita el proceso, y aunque aún hay que calcular espacios y distancias, el trabajo con imágenes ya no existe. El código CSS3 que se utilizó en el
ejemplo:
#shadow{
background-color:orange;
box-shadow: 10px 10px 5px #888888;
-webkit-box-shadow: 10px 10px 5px #888888; /* Safari y Chrome
*/
}
Las sintaxis que se utiliza:
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
136
Nuevo y mejorado CSS3
box-shadow: sombra-h sombra-v difuminado tamaño color
comportamiento;
x
sombra-h. Parámetro requerido que establece la posición horizontal de la
sombra.
x
sombra-v. Parámetro requerido que establece la posición vertical de la
sombra.
x
difuminado. Indica la distancia del efecto de difuminado.
x
tamaño. Indica el tamaño de la sombra.
x
color. Indica el color de la sombra.
x
comportamiento. Establece si la imagen se proyectará desde el elemento
hacia afuera con el valor outset o del elemento hacia adentro con el valor
inset.
7.3.3 Bordes con imagen
CSS3 permite usar una imagen como elemento para formar un borde. El mecanismo
es poderoso, pero puede ser confuso, se detectan las orillas de una imagen y se
separan en partes para crear las esquinas y orillas del borde, basándose en las
orillas y esquinas detectadas de la imagen. El código utilizado en el ejemplo para
este estilo es el siguiente:
#image_round{
border-width:10px;
-moz-border-image:url(imagen_borde.png) 30 repeat; /* Firefox */
-webkit-border-image:url(imagen_borde.png) 30 repeat; /* Safari y
Chrome */
-o-border-image:url(imagen_borde.png) 30 repeat; /* Opera */
border-image:url(imagen_borde.png) 30 repeat;
}
La sintaxis para utilizar este estilo es:
border-image: imagen arriba derecha abajo izquierda comportamiento1
comportamiento2;
x
imagen. Establece la ruta de la imagen base para llenar el borde.
x
arriba, derecha, abajo e izquierda. Indican en dónde se harán los cortes de
la imagen base, desde sus filos superior, derecho, inferior e izquierdo
externos hasta el centro de la misma, y de esta manera utilizar los
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
137
fragmentos cortados de la imagen para rellenar las esquinas, las partes
laterales y las partes superior e inferior del borde. Si indica un solo valor se
tomará como si los 4 valores fueran iguales (en el ejemplo se indicó sólo 30,
lo que es igual a 30 30 30 30).
x
comportamiento1 y comportamiento2. La imagen base original y los cortes
resultantes de la misma, rara vez coinciden con lo largo y alto del borde, por
lo que básicamente tiene las opciones de estirar la imagen o repetirla hasta
rellenar el largo o el alto del borde, para esto puede utilizar el valor repeat
para repetir la imagen, o bien, el valor stretch para estirarla. Si indica sólo
un valor como comportamiento, se tomará como el mismo valor para
comportamiento1 y comportamiento2 (en el ejemplo sólo se utilizó un
repeat, lo cual indica que es repeat para ambos parámetros).
La idea puede ser confusa al principio, pero siga estos sencillos pasos,
experimente un poco y pronto dominará la lógica de este estilo:
1. Prepare la imagen base. La imagen debe ser previamente preparada para su
uso como imagen base de un borde. Utilice una imagen cuyas dimensiones sean cerradas, sencillas y que formen un cuadro preciso, si hay huecos
en el diseño utilice imágenes con transparencia o colores sólidos de fondo.
En el ejemplo se utiliza una imagen de 90 x 90 pixeles con círculos exactamente de 30 x 30 para poder dividir fácilmente los cortes. En la Fig. 7.2 se
muestra la imagen utilizada en el ejemplo.
Fig. 7.2 Imagen base para borde con imagen utilizada en el ejemplo.
2. Especifique el ancho del borde. Es necesario que indique el ancho del borde
con la propiedad border-width, ya que el corte de la imagen base será
escalado para adaptarse a este tamaño automáticamente.
3. Indique el tamaño que se va a utilizar en cada esquina y lado de la imagen.
Para cada lado y esquina del nuevo borde de nuestro elemento, indique el
tamaño de los cortes en la imagen base que desea usar, recuerde que cada
línea de corte es del filo hacia adentro y en el orden de las agujas del reloj,
es decir, arriba, derecha, abajo e izquierda (véase la Fig. 7.3). Se pueden
expresar en porcentajes o sin ninguna unidad de medida para expresar
pixeles exactos, es decir, por ejemplo 30 30 30 30).
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
138
Nuevo y mejorado CSS3
Fig. 7.3 Líneas de corte imaginarias para obtener el borde del ejemplo.
4. Señale el comportamiento deseado. La última parte es indicar el comportamiento, determina cómo se van a escalar y cortar los bordes de los lados y
superior e inferior de nuestro elemento. Los posibles valores:
x
stretch (estirar)
x
repeat (repetir)
x
round (repetir y ajustar)
Nota
El valor round también repite la imagen, pero previene un corte
abrupto ajustando automáticamente la imagen que se está
repitiendo, pero los navegadores aún no hacen diferencia con
repeat en la práctica.
Si se especifica sólo un valor, es como poner dos veces el mismo (por
ejemplo sólo una vez repeat. Entonces será repeat tanto para los lados
superior e inferior como para los lados izquierdo y derecho). El valor por
defecto es stretch.
7.4 Gradientes
Un gradiente consiste en una secuencia de al menos dos colores, como por ejemplo,
imagine la imagen del cielo donde se va de un azul muy claro a un azul muy oscuro,
podría hablar entonces de un gradiente que va de un color a otro. Los tipos de
gradientes más comunes son los gradientes linear (donde el cambio de un color a
otros fluye a lo largo de una línea) y radial (donde un color parte de un punto central
y los siguientes colores se alejan circularmente de ese punto).
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
139
Los gradientes se utilizan constantemente en las páginas, pero hasta el
momento la manera de hacer un gradiente requería de crear una imagen en algún
programa editor de imágenes y después colocar esa imagen en algún fondo (si se
utilizaban hojas de estilo se usaba el atributo background-image).
Con CSS3 ya no es necesario crear ninguna imagen, lo puede hacer
directamente en el navegador con código de hojas de estilo. Como ya sabe, CSS3, al
no ser un estándar terminado no es utilizado de la misma manera en todos los
navegadores, aún utilizan prefijos experimentales, aunque la manera de implementar los gradientes hoy en día es prácticamente igual.
A continuación se analizan las diferentes sintaxis para crear un gradiente
linear.
Sintaxis para Chrome y Safari:
background: -webkit-linear-gradient ( orientación, color-ini stopini, color-N stop-N );
Sintaxis para Firefox:
background: -moz-linear-gradient ( orientación, color-ini stop-ini,
color-N stop-N );
Sintaxis para Opera:
background: -o-linear-gradient ( orientación, color-ini stop-ini,
color-N stop-N );
x
orientación. La orientación del efecto gradiente, los valores pueden ser top,
bottom, left, right (aunque también puede usar el ángulo, por ejemplo,
90deg).
x
color-ini. El color con el que inicia el gradiente.
x
stop-ini. A partir de qué punto se debe comenzar el efecto de desvanecimiento del color inicial (%).
x
color-N. El color con el que continúa el gradiente.
x
stop-N. Desde qué punto se debe detener el efecto de desvanecimiento del
color actual para continuar con color sólido (%).
La Fig. 7.4 muestra una página que presenta varios ejemplos de gradiente con
la descripción del estilo que están usando.
Apoyo en la
Alfaomega
En blanco y negro no se puede apreciar el efecto gradiente con sus
respectivos colores, por esta razón descargue el archivo
estiloscss3_gradientelinear.html y pruébelo en su navegador.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
140
Nuevo y mejorado CSS3
Fig. 7.4 Ejemplos de gradiente linear.
Para crear ahora un gradiente radial analice las sintaxis que se exponen a
continuación:
Sintaxis para Chrome y Safari:
background: -webkit-radial-gradient( [posición,] [forma || tamaño,]
color-ini [stop-ini], color-N [stop-N] );
En la sintaxis para Firefox la única diferencia es el prefijo –moz-:
background: -moz-radial-gradient( [posición,] [forma || tamaño,]
color-ini [stop-ini], color-N [stop-N] );
Nota
Por ahora no es posible hacer gradientes radiales con Opera utilizando estilos
de la misma forma.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
141
x
posición. Parámetro opcional que define la posición X, Y del punto central de
inicio para el gradiente y el primer color, se pueden usar unidades,
porcentajes y los valores right, left, top, bottom o center. La posición es
relativa al contenedor del gradiente.
x
forma. Parámetro opcional que indica si la forma del gradiente será un
círculo (valor circle) o una elipse (valor ellipse).
tamaño. Parámetro opcional que toma uno de los siguientes valores:
closest-side, closest-corner, farthest-side, farthestcorner, contain o cover, todos estos valores hacen referencia al
contenedor. Dado que los valores no son demasiado explícitos por sí
mismos, observe los ejemplos para cada caso en la siguiente tabla:
x
EJEMPLO
DESCRIPCIÓN
closest-side
El filo del gradiente se prolongará sólo hasta llegar al lado
más cercano con respecto al punto central establecido en el
parámetro posición, en este caso, posición: 20px 20px.
closest-corner
El filo del gradiente se prolongará sólo hasta llegar a la
esquina más cercana con respecto al punto central
establecido en el parámetro posición (en este caso
posición: 20px 20px).
farthest-side
Esto hace exactamente lo opuesto al primer valor, provocando
que el filo del gradiente busque el lado más lejano al punto
central indicado con el parámetro posición.
farthest-corner
El filo del gradiente se prolongará hasta llegar a la esquina más
lejana con respecto al punto central establecido en el parámetro
posición.
contain
Indica que el gradiente se creará sólo en los límites del
elemento contenedor (para este caso se obtiene un efecto
igual que closest-side).
cover
Significa que el gradiente continúa hasta cubrir el área entera
del contenedor (para este caso se logra un efecto igual que
farthest-corner)..
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
142
Nuevo y mejorado CSS3
La Fig. 7.5 muestra la implementación completa de estos parámetros en una
página.
Apoyo en la
En los materiales adicionales encontrará
estiloscss3_gradienteradialsize.html
el
archivo
Fig. 7.5 Implementación del parámetro tamaño para gradiente radial.
x
color-ini. El color con el que inicia el gradiente desde el centro.
x
stop-ini. Hasta qué punto se debe comenzar el efecto de desvanecimiento
del color inicial (%).
x
color -N. Hasta qué punto se debe comenzar el efecto de desvanecimiento
del color inicial (%).
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
x
143
stop-N. Desde qué punto se debe detener el efecto de desvanecimiento del
color actual para continuar con color sólido (%).
En la Fig. 7.6 se muestra una serie de ejemplos para generar el efecto de
gradiente radial.
Fig. 7.6 Ejemplos de gradiente radial.
Apoyo en la
En blanco y negro es posible que el efecto no se aprecie
completamente, por lo que para visualizar mejor puede descargar el
archivo estiloscss3_gradienteradial.html
Actividades para el lector
Elabore un documento HTML5 en él utilice tres elementos <div>, asigne bordes
y fondos con gradiente diferente utilice estilos CSS3.
Su documento deber soportar los WebKit y Mozilla engines.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
144
Nuevo y mejorado CSS3
7.5 Transformaciones
El efecto de una trasformación en CSS3 consiste en aplicar un cambio de apariencia
geométrica a cualquier elemento. Esto proporciona una notable capacidad de
control visual que anteriormente no era posible en lo que respecta a HTML o a las
hojas de estilo.
El atributo utilizado para crear transformaciones matemáticas sobre un
elemento contenedor <div> es transform. Cuando desea hacer uso de
transform requiere de proporcionar uno o más de los siguientes parámetros (si
usa más de uno, sólo hay que separarlos con espacios):
x
x
x
x
Atributo rotate. Rota un elemento alrededor de su centro, su único parámetro requiere el ángulo de rotación, por ejemplo, 45 grados es 45deg.
Atributo scale. Cambia el tamaño del elemento a lo largo y a lo ancho, el
valor que se asigne es un número que indica cuántas veces más grande
será la escala. Existen dos atributos que son una variación alternativa de
scale para escalar un elemento solo en un eje, scalex y scaley sólo
afectarán al eje x o y individualmente.
Atributo skew. Permite sesgar un elemento a lo largo de sus ejes. Utiliza el
parámetro X y el parámetro Y utilizando grados para indicar el ángulo de
sesgo sobre los ejes. Las variaciones skewx y skewy de este atributo se
utilizan para usar un sesgo en ejes individuales.
Atributo translate. Mueve un elemento de su posición inicial. Utiliza los
parámetros X e Y utilizando las unidades de medida estándares de CSS.
Para ilustrar lo planteado observe el siguiente código HTML:
<div
<div
<div
<div
<div
id="caja1">Caja
id="caja2">Caja
id="caja3">Caja
id="caja4">Caja
id="caja5">Caja
1 (sin transform)</div>
2</div>
3</div>
4</div>
5</div>
Observe que el código HTML contiene varios elementos <div> que son
esencialmente iguales. En el código CSS puede establecer una presentación común
para algunas propiedades como sigue:
div {
width: 150px;
height: 100px;
float: left;
margin-right: 2em;
border: 3px solid;
}
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
145
Ahora los estilos para las diferencias que interesan, que en este caso son las
transformaciones:
#caja2{
float: left;
border-color: red;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
-ms-transform: rotate(45deg);
}
#caja3{
float: left;
border-color: green;
-webkit-transform: scale(2) translatey(100px);
-moz-transform: scale(2) translatey(100px);
-o-transform: scale(2) translatey(100px);
-ms-transform: scale(2) translatey(100px);
}
#caja4{
float: left;
border-color: blue;
-webkit-transform: skew(7deg);
-moz-transform: skew(7deg);
-o-transform: skew(7deg);
-ms-transform: skew(7deg);
}
#caja5{
float: left;
border-color: black;
-webkit-transform: translate(25px,50px);
-moz-transform: translate(25px,50px);
-o-transform: translate(25px,50px);
-ms-transform: translate(25px,50px);
}
En la Fig. 7.7. Puede ver cómo luce el resultado que lanza este código en el
navegador.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
146
Nuevo y mejorado CSS3
Fig. 7.7 Ejemplos de transformaciones con CSS3.
Apoyo en la
Para comprobar el código en el navegador puede acudir a los apoyos
del libro y descargar el archivo estiloscss3_transformacion.html
7.6 Transiciones
Mientras que las trasformaciones son una herramienta fuerte e interesante para el
desarrollador, la posibilidad de animar los mismos efectos es algo aún más
emocionante, es en este momento donde la propiedad transition entra en
acción.
Si ha probado en el navegador el ejemplo del punto anterior, habrá notado que
al momento de cargar la página los efectos ya han sido aplicados, es decir, el
usuario sólo ve el resultado final de la transformación. La propiedad transition
permite ver el cambio “al vuelo” cuando el usuario dispara algún evento.
El mecanismo es simple, observe el ejemplo para dar una transición sencilla a
un elemento <p>:
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
147
<p>Este texto hace una transición de color</p>
El código CSS es claro en su intención:
p {
color: black;
font-size: 200%;
-webkit-transition: color 1s ease-in;
-moz-transition: color 1s ease-in;
-o-transition: color 1s ease-in;
}
p:hover {
color: yellow;
}
Apoyo en la
En los materiales adicionales encontrará el archivo
estiloscss3_transicion.html
Más allá de la propiedad transition lo que sucede es breve y simple. El
estado normal del párrafo sólo indica que el color del texto dentro es negro y su
tamaño se incrementa a un 200%. Se define lo que debe hacer el párrafo cuando el
puntero del mouse se coloca encima, utilizando la pseudoclase hover, y se indica
que cambie su color a amarillo, cuando el mouse deja de estar encima del párrafo el
texto que contiene regresa a negro. Cuando se agrega la propiedad transition lo
único que sucede es que el cambio de color del texto no es instantáneo, sino que el
cambio de negro a amarillo y de amarillo a negro es gradual.
La sintaxis de transition para Chrome y Safari:
-webkit-transition: tipo-animación [duración] [sincronización]
[retraso]
La sintaxis de transition para Firefox:
-woz-transition: tipo-animación [duración] [sincronización]
[retraso]
La sintaxis de transition para Opera:
-o-transition: tipo-animación [duración] [sincronización] [retraso]
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
148
Nuevo y mejorado CSS3
Nota: Internet Explorer aún no soporta transiciones (25/10/2011).
x
Atributo tipo-animación. Es el tipo de animación que se utilizará. El
valor por default es all, pero hay varios otros valores que se pueden utilizar
como color, length, width, percentage, opacity y number. Esto
ha cambiado un poco, en el ir y venir de la especificación, por lo que ante la
duda pruebe con all.
x
Atributo duración. La duración de la animación en segundos, por ejemplo
3 segundos es 3s.
x
Atributo sincronización. Para lograr que la animación ocurra a velocidad constante utilice linear. Si desea un movimiento más gradual que se
acelere o disminuya la velocidad al final de la animación, puede usar los
valores ease, ease-in, ease-out, ease-in-out.
x
Atributo retraso. Establece un tiempo de retraso en segundos y la
animación no comenzará hasta que este tiempo transcurra.
La animación con transiciones es una característica muy nueva en la
especificación CSS3, por lo que algunos elementos pueden ser animados de esta
manera y otros no, esto sumado a la fase de experimentación de los navegadores lo
lleva a usted a tener que hacer experimentación para determinar si el elemento es
viable o no de usar el atributo transition.
Nota
Existen propiedades individuales de transición para controlar las diferentes
partes de una animación, pero las más utilizadas son como se ha descrito en
este punto.
Ahora observe y estudie cómo se comportan las cajas del ejemplo del punto
anterior (7.5 Transformaciones) pero agregando transiciones, la fracción de código
CSS ahora luce de esta manera:
#caja2{
float: left;
border-color: red;
-webkit-transition: all 1s ease-in;
-moz-transition: all 1s ease-in;
-o-transition: all 1s ease-in;
-ms-transition: all 1s ease-in;
}
#caja2:hover{
-webkit-transform: rotate(45deg);
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
149
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
-ms-transform: rotate(45deg);
}
#caja3{
float: left;
border-color: green;
-webkit-transition: all 1s ease-in;
-moz-transition: all 1s ease-in;
-o-transition: all 1s ease-in;
-ms-transition: all 1s ease-in;
}
#caja3:hover{
-webkit-transform: scale(2) translatey(100px);
-moz-transform: scale(2) translatey(100px);
-o-transform: scale(2) translatey(100px);
-ms-transform: scale(2) translatey(100px);
}
#caja4{
float: left;
border-color: blue;
-webkit-transition: all 1s ease-in;
-moz-transition: all 1s ease-in;
-o-transition: all 1s ease-in;
-ms-transition: all 1s ease-in;
}
#caja4:hover{
-webkit-transform: skew(7deg);
-moz-transform: skew(7deg);
-o-transform: skew(7deg);
-ms-transform: skew(7deg);
}
#caja5{
float: left;
border-color: black;
-webkit-transition: all 1s ease-in;
-moz-transition: all 1s ease-in;
-o-transition: all 1s ease-in;
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
150
Nuevo y mejorado CSS3
-ms-transition: all 1s ease-in;
}
#caja5:hover{
-webkit-transform: translate(25px,50px);
-moz-transform: translate(25px,50px);
-o-transform: translate(25px,50px);
-ms-transform: translate(25px,50px);
}
Apoyo en la
En los materiales adicionales encontrará el archivo
estiloscss3_transicion.html
7.7 Transparencia
El efecto de transparencia es algo que se puede controlar en CSS3 con el uso de la
propiedad opacity. Sólo usa un argumento que puede tener un valor numérico de
0 (total transparencia) a 1 (total opacidad).
El nivel de opacidad se puede utilizar sobre prácticamente cualquier elemento,
como pueden ser imágenes, textos, secciones completas dentro de un elemento
<div>, etcétera.
La Fig. 7.8 muestra imágenes dentro de un <div> con diferentes grados de
opacidad (o transparencia) en cada uno de ellos.
Fig. 7.8 Ejemplo de transparencia con CSS3.
El código es de muy fácil implementación, en la parte HTML implica sólo unos
<div> que utilizan por dentro a la etiqueta <img>:
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
151
<div id="img1"><img src="ClockworkOrange.jpg" width="198"
height="231" /></div>
<div id="img2"><img src="ClockworkOrange.jpg" width="198"
height="231" /></div>
<div id="img3"><img src="ClockworkOrange.jpg" width="198"
height="231" /></div>
El código CSS3 establece una imagen de fondo, y enseguida se procede a
aplicar estilo a cada <div> utilizando el atributo opacity:
body{
background: url(bg_texture.gif);
}
div {
float: left;
}
#img1{
opacity: 1;
}
#img2{
opacity: .5;
}
#img3{
opacity: .2;
}
Apoyo en la
En los materiales adicionales encontrará el archivo
estiloscss3_transparencia.html
7.8 Texto y fuentes descargables
El formato de texto y la fuente que se utiliza siempre ha sido una limitante de las
páginas basadas en HTML, ya que en muchas ocasiones los desarrolladores se ven
en situaciones donde diseñadores gráficos, clientes o personas ajenas al desarrollo
Web desean que un texto luzca de determinada manera, ocasionando que los
desarrolladores, dependiendo del escenario, se vean en la necesidad de recurrir a
imágenes, alternativas propietarias como Flash o dar un rotundo no y explicar las
razones.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
152
Nuevo y mejorado CSS3
CSS3 en su nueva especificación trae ayuda a las situaciones donde se
requiere algún efecto sobre texto e incluso cuando es necesario alejarse de las
fuentes Web seguras, para esto se proponen nuevas alternativas.
7.8.1 text-shadow
Se recurre mucho a las sombras debido a que su efecto agrega una sensación de
profundidad, que bien utilizado es ventajoso y atractivo visualmente. Para lograr
este efecto se usa la propiedad text-shadow, la cual ya existía en CSS2, pero es
hasta hoy donde ha encontrado soporte por parte de los navegadores mayores.
Su sintaxis es:
text-shadow: sombra-h sombra-v difuminado color;
x
Atributo sombra-h. Parámetro obligatorio que establece la posición
horizontal de la sombra.
x
Atributo sombra-v. Parámetro obligatorio que establece la posición vertical
de la sombra.
x
Atributo difuminado. La distancia del efecto de difuminado de la sombra.
x
Atributo color. El color de la sombra. Utiliza cualquiera de las notaciones
de colores permitidas por CSS3.
En la Fig. 7.9 puede ver la imagen de una página que muestra la implementación de
text-shadow.
7.8.2 text-stroke
Otra propiedad muy práctica, sobre todo en casos en donde el texto se confunde
con el color de fondo en una página, ésta es text-stroke. La propiedad define
una línea de borde alrededor de cada carácter de un texto. Sólo emplea dos
parámetros, uno para el grueso de la línea y otro para el color.
Un ejemplo de esto si deseara usar text-stroke en un encabezado:
h1{
color: black;
-webkit-text-stroke: 2px orange;
}
Esta propiedad, por el momento, sólo es soportada por Chrome y Safari. En la
Fig. 7.9 puede ver la imagen de una página que implementa este código.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
153
7.8.3 @font-face
Anteriormente los desarrolladores sufrían con el tema de las fuentes, ya que
siempre que alguna persona no involucrada en el desarrollo Web solicitaba el uso
de algún tipo de letra exótico, había que hacer algún esfuerzo de concientización
para explicar por qué no era lo más conveniente o buscar alternativas poco ideales,
como el uso de imágenes o tecnologías alternativas. El estilo font-face ayuda
mucho en este escenario, ya que cuando el navegador carga una página, también
descarga la fuente indicada, desplegando el tipo de letra correcto.
La particularidad de font-face es que no trabaja de la misma manera que
la mayoría de los estilos CSS. En lugar de definir un estilo que afecta a una etiqueta
HTML, font-face define un nuevo estilo que se puede utilizar en otra declaración
de hojas de estilo:
@font-face {
font-family: Berenika;
src: url("Berenika-Regular.ttf");
}
En el código anterior font-face ha definido el atributo font-family con
el nombre con el que podrá ser utilizado en el resto del código CSS. Para mayor
claridad en su código, no es mala idea usar un nombre igual o parecido al nombre
del archivo origen de la fuente.
h3{
font-family: Berenika;
}
En la actualidad font-face es soportada por los grandes navegadores, pero
los tipos de formato para las fuentes no son universalmente soportados por todos
ellos, por lo que la experimentación es algo requerido. Éstos son los formatos que
cuentan con mayor soporte actualmente:
x
TTF. El estándar TrueType es ampliamente soportado, pero no por todos los
navegadores. Muchas fuentes de estándar abierto usan este formato.
x
OTF. El estándar OpenType es un estándar realmente abierto. Todos los
navegadores, excepto Internet Explorer los soportan.
x
WOFF. Web Open Font Format es soportado por las últimas versiones de
todos los navegadores mayores.
x
EOT. Embedded OpenType Format es un formato propietario de Microsoft
que sólo trabaja en Internet Explorer.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
154
Nuevo y mejorado CSS3
Nota
Hay ocasiones en que algunas fuentes tienen problemas en algunos navegadores, haga diversas pruebas con éstos y la fuentes de su interés.
El estilo @font-face permite descargar la fuente que está utilizando, pero
tenga en cuenta que esto significa implícitamente que usted está distribuyendo una
fuente que posiblemente sea propietaria, por lo que como desarrollador debe ser
respetuoso de la propiedad intelectual.
La Fig. 7.9 muestra una página con ejemplos para las propiedades textshadow, text-stroke y el estilo @font-face.
Fig. 7.9 Ejemplo de texto y fuente descargable con CSS3.
Apoyo en la
En los materiales adicionales encontrará los archivos
estiloscss3_transparencia.html y Berenika-Regular.ttf
7.9 Herramientas de selección
A lo largo del uso de CSS es evidente que uno de los aspectos más poderosos y
utilizado es la capacidad de selección de grupos de elementos usando el nombre de
una clase, el tipo de etiqueta o individualmente con un identificador. Pero CSS3
proporciona nuevos métodos de selección conocidos en inglés como selectors.
Hay varios métodos de selección o selectors, algunos no en su forma definitiva, ahora verá algunos de los mejor consolidados y de mayor uso.
7.9.1 Selección por atributo
Usted puede aplicar un estilo a cualquier elemento que contenga un atributo con un
valor específico. Por ejemplo, imagine que de una etiqueta <input> desea dar
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
155
estilo solamente a los campos de texto, si recuerda usted bien, en este caso el atributo type, sería igual a text, por lo tanto se podría emplear el siguiente código:
input[type="text"]{
border-color: #ff0000
}
Apoyo en la
En los materiales adicionales encontrará el archivo
estiloscss3_selector_atributo.html
Existen variaciones interesantes para seleccionar por atributo en diferentes
situaciones:
SELECTOR
EJEMPLO
[atributo^=value]
a[src^="https"]
[atributo$=value]
a[src$=".pdf"]
[attribute*=value]
a[src*="alfaomega"]
DESCRIPCIÓN
Selecciona todos los enlaces (<a>)
donde el valor de su atributo src
comienza con la cadena de texto
https.
Selecciona todos los enlaces (<a>)
donde el valor de su atributo src
termina con la cadena de texto
.pdf.
Selecciona todos los enlaces (<a>)
donde el valor de su atributo src
contiene la cadena de texto
alfaomega.
7.9.2 Selección por relación padre-hijo
Al construir una página, probablemente se ha percatado de la relación jerárquica o
de árbol familiar que tienen los elemento HTML, es decir, todos los elementos en
la estructura visual de una página están agrupados dentro de la etiqueta
<body>…</body>, por lo tanto, se podría decir que <body> es la etiqueta padre
de muchos otros elementos, como enlaces, párrafos, listas etc., continuando con
esa lógica, no sería erróneo afirmar que si un enlace estuviera acompañando al
texto dentro de un párrafo, entonces <a> es hijo de <p>.
Explotando esa relación de padre-hijo que tienen los elementos HTML, hoy
CSS3 permite hacer selecciones muy interesantes, por ejemplo, usted tiene varios
párrafos con varios elementos dentro, como etiquetas, imágenes, enlaces, etc.,
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
156
Nuevo y mejorado CSS3
usted sabe que siempre tiene etiquetas <label> como primer elemento en los
párrafos y quiere darles un color rojo, pero no desea modificar directamente a las
etiquetas por su tipo, ya que no quiere afectar al resto de las etiquetas <label>
que no están dentro de un párrafo. Una posible solución a esta situación es sólo
seleccionar al primer elemento, dentro de cada párrafo utilizando nth-child:
p>label:nth-child(1){
color: red;
}
Apoyo en la
En los materiales adicionales encontrará el archivo
estiloscss3_selector_nth.html
El código utiliza el selector nth-child con su único parámetro que describe
la posición del elemento que desea seleccionar. Existen aún más herramientas de
selección para sacar provecho de la relación padre-hijo:
SELECTOR
:nth-last-child(n)
:nth-of-type(n)
:nth-last-of-type(n)
EJEMPLO
label:nth-lastchild(2)
label:nth-oftype(2)
label:nth-lastof-type(2)
DESCRIPCIÓN
Selecciona todos los encabezados
<label> que sean el último hijo
de su respectivo padre, a partir del
segundo hijo.
Selecciona cada elemento que sea
de tipo <label> que sea el
segundo hijo de su respectivo
padre.
Selecciona el último elemento de
su respectivo padre que sea de
tipo <label> a partir del segundo
hijo.
7.9.3 Selección inversa (not)
En ocasiones es muy rápido y útil hacer una selección inversa. Suponga una página
donde tiene múltiples párrafos, la mitad de los párrafos pertenece a la clase
importante y el resto pertenece a otras clases o a ninguna. Si quisiera seleccionar
todos aquellos párrafos que no pertenecen a la clase importante, podría emplear el
siguiente código:
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
157
p:not(.importante) {
border: 2px solid green;
}
Apoyo en la
En los materiales adicionales encontrará el archivo
estiloscss3_selector_not.html
El código presentado anteriormente coloca un borde color verde con 2 pixeles
de ancho en todos aquellos párrafos que no pertenecen a la clase especial.
Nota
Existen varias herramientas de selección adicionales, algunas existentes desde
CSS1 y CSS2, que escapan del objetivo de este libro, véase la lista de enlaces
al final del capítulo para conocer más.
Actividades para el lector
Construya una página con una lista donde inserte:
x Un elemento HTML que haga un tipo de transición.
x Otro elemento HTML que haga una trasformación.
Como complemento de su página redacte e inserte un texto con
sombra, un borde de 3 pixeles en color azul
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
158
Nuevo y mejorado CSS3
RESUMEN
En este capítulo se ha conocido la nueva especificación CSS3:
x
Sus nuevas capacidades.
x
Las mejoras a las capacidades ya existentes.
x
Las limitantes entre CSS3 y los navegadores mayores.
x
El uso de nuevos elementos visuales, efectos en texto y fuentes
descargables.
x
Introducción a las nuevas herramientas de selección.
Autoevaluación
1. ¿Qué es CSS3?
2. ¿Qué son los motores de renderizado?
3. ¿Qué tipo de bordes se pueden hacer con CSS3?
4. ¿Cuál es la diferencia entre transformación y transición en términos de CSS3?
5. ¿Cuál es el estilo que permite descargar una fuente que no tiene el usuario?
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Nuevo y mejorado CSS3
159
EVIDENCIA
Construyó una página con una lista, insertó en ella al menos un
elemento que realiza transiciones.
En la misma lista insertó otro elemento que hace transformaciones.
Complementó su página con un texto con efecto de sombra y un borde
de 3 pixeles en color azul.
REFERENCIAS
Bibliografía
Hogan, Brian (2011). HTML5 and CSS3. Develop with Tomorrow’s Standards Today,
1a. ed., Pragmatic Bookshelf, EUA.
Gillenwater, Zoe (2011). Stunning CSS3, 1a. ed., New Riders, EUA.
Páginas Web recomendadas
http://www.w3schools.com/cssref/default.asp
http://www.impressivewebs.com/
http://css-tricks.com/
http://www.w3.org/TR/css3-selectors/
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
160
Nuevo y mejorado CSS3
Respuestas sugeridas a las preguntas de autoevaluación
1. Es la nueva versión del lenguaje de hojas de estilo en cascada.
2. Es el código de programación que forma el motor que permite a los navegadores
desplegar los elementos HTML.
3. Con bordes redondeados, con sombra y con imagen.
4. Las transformaciones afectan la forma, color u orientación del elemento,
mientras que la transición cambia su posición.
5. El estilo @font-face.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
8
Reflexione y responda las preguntas siguientes:
¿Qué es lo nuevo en JavaScript para HTML5?
¿Cuáles son las nuevas herramientas para seleccionar elementos HTML con
JavaScript?
¿Cuáles son y cómo se utilizan las nuevas herramientas de selección de JavaScript?
¿Qué es el API de almacenamiento Web y en qué consiste?
¿Qué es el API Web offline de HTML5 y en qué consiste?
¿Qué es el API de geolocalización de HTML5 y en qué consiste?
¿Qué es el API WebSocket de HTML5 y en qué consiste?
¿Qué es el API Web worker de HTML5 y en qué consiste?
Contenido
Novedades en JavaScript
Introducción
8.1 Nuevas herramientas de selección
8.2 Almacenamiento de sesión y local
8.3 Web offline
8.4 Geolocalización
8.5 WebSocket
8.6 Web workers
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
162
Novedades en JavaScript
Expectativa
Conocer las nuevas características disponibles en JavaScript para su uso en la
creación de documentos HTML5.
Después de estudiar este capítulo, el lector será capaz de:
x
x
x
x
x
x
Conocer las generalidades de las nuevas características en JavaScript.
Comprender las nuevas opciones de selección de elementos HTML en
JavaScript.
Conocer las nuevas capacidades del almacenamiento de información del
lado cliente de HTML5.
Comprender la nueva característica de geolocalización de HTML5.
Comprender las bases de la programación con WebSockets.
Usar la nueva programación por hilos con Web workers.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
163
INTRODUCCIÓN
JavaScript es actualmente una tecnología vital en lo que al desarrollo de aplicaciones modernas para la Web se refiere. Todos los navegadores se han estado
esforzando en dar un mejor soporte y rendimiento para JavaScript, adicionalmente
otros grupos han creado extensiones muy interesantes para esta tecnología
Todos los desarrolladores Web hoy en día estarán de acuerdo con las anteriores afirmaciones, pero lo que hace a JavaScript aún más importante es que está
acompañando en su evolución a HTML5, lo que hace de la Web ya no sólo un
asunto de alojar páginas para después mostrarlas, sino la convierte en una
verdadera plataforma de desarrollo para aplicaciones.
Este capítulo habla principalmente de los cambios y novedades que se han
hecho a JavaScript. Para poder hablar en el contexto de lo nuevo en JavaScript se
asume que usted está familiarizado con el lenguaje y con la programación en
general. Si usted recién comienza con JavaScript, por favor consulte una bibliografía
especializada antes de abordar este capítulo.
8.1 Nuevas herramientas de selección
Cuando se programa con JavaScript en documento HTML constantemente se
utilizan los método getElementById() y getElementByTagName() para crear
variables basadas en un elemento HTML. Siendo esto posible, quizá usted en algún
momento (al igual que el autor de este libro) se ha preguntado ¿por qué no existe un
getElementsByClassName()?, bueno pues ahora no sólo existe, sino que
viene con más.
8.1.1 getElementsByClassName()
El nuevo método getElementsByClassName() permite ahora seleccionar
varios elementos que pertenecen a la misma clase y los devuelve en un arreglo, al
cual puede usted hacer referencia elemento a elemento. Considere el siguiente
ejemplo:
function detectar(){
elemento = document.getElementsByClassName("prueba");
for (i = 0; i < elemento.length; i++){
alert(elemento[i].innerHTML);
}
}
Observe que el código anterior utiliza un bucle para ir recuperando cada
elemento del arreglo y lanzar un mensaje con el contenido de cada uno de ellos.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
164
Novedades en JavaScript
Apoyo en la
En los materiales adicionales encontrará el archivo:
javascript_selectorclass.html
8.1.2 getElementsByTagName
El método getElementsByTagName() permite seleccionar de una sola vez a
todos los elementos de un solo tipo de etiqueta. Usted podría obtener, por ejemplo,
a todos los párrafos de un documento. De la misma forma que hace
getElementsByClassName() el resultado devuelve un arreglo, que se puede
recorrer con un bucle y manejado como mejor convenga. Observe el siguiente
código:
function detectar(){
elemento = document. getElementsByTagName("p");
for (i = 0; i < elemento.length; i++){
alert(elemento[i].innerHTML);
}
}
Apoyo en la
En los materiales adicionales encontrará el archivo:
javascript_selectortag.html
8.1.3 querySelector()
Usando la misma sintaxis que utiliza CSS para seleccionar elementos DOM, el
método querySelector() permite seleccionarlos también. Algunas librerías
como JQuery proporcionaban la habilidad de hacer esto desde hace algún tiempo,
pero ahora es parte nativa de JavaScript. El siguiente código selecciona el primer
párrafo precedido por una etiqueta <div> que encuentre.
function detectar(){
elemento = document.querySelector("div + p");
alert(elemento.innerHTML);
}
El código anterior únicamente selecciona un solo elemento, si desea encontrar
a todos los que cumplan con el criterio elegido, entonces deberá usar el método
querySelectorAll(), el cual se aborda a continuación.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
Apoyo en la
165
En los materiales adicionales encontrará el archivo:
javascript_selectorquery.html
8.1.4 querySelectorAll()
Utilizando exactamente el mismo mecanismo que querySelector(), el método
querySelectorAll() permite seleccionar todos los elementos que coincidan
con el criterio proporcionado. El siguiente código selecciona todos los párrafos
precedidos por una etiqueta <div>.
function detectar(){
elemento = document.querySelectorAll("div + p");
for (i = 0; i < elemento.length; i++){
alert(elemento[i].innerHTML);
}
}
En la función en el código anterior querySelectorAll()coloca los
elementos obtenidos en un arreglo que después se recorren uno a uno con un bucle
for.
Apoyo en la
En los materiales adicionales encontrará el archivo:
javascript_selectorqueryall.html
Actividades para el lector
Elabore una página en la que utilice las herramientas de selección
getElementsByClassName, getElementsByTagName, querySelector, querySelectorAll para dar diversos estilos a los elementos
seleccionados.
8.2 Almacenamiento de sesión y local
Actualmente la Web se ha convertido y se consolida como una plataforma de desarrollo, por lo cual el almacenamiento de datos se convertido en un tema de importancia. Las aplicaciones cliente siempre han estado limitadas para almacenar datos
del lado cliente con el objetivo de prevenir las malas intenciones de algún posible
código malicioso, esto es algo bueno, pero al mismo tiempo complica el desarrollo
de aplicaciones en los navegadores.
Debido a las cuestiones de seguridad, y a otras causas, los desarrolladores
utilizan tecnologías de acceso a datos del lado servidor (como las variables de
sesión de ASP o PHP, entre otras), pero todos estos mecanismos se reducen al
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
166
Novedades en JavaScript
almacenamiento de cookies en el navegador, las cookies son útiles, pero su
capacidad es muy reducida debido a que pueden almacenar muy poca información
(alrededor de 4k), y son ineficientes, ya que se pueden refrescar, y dado que se
envían en cada petición HTTP resulta que la misma información se envía una y otra
vez haciendo más lento el rendimiento de una aplicación. HTML5 proporciona algo
nuevo para cubrir estos problemas, el API de almacenamiento Web, compuesto por
dos objetos básicos para guardar información del lado cliente, el almacenamiento
por sesión y el almacenamiento local.
8.2.1 Almacenamiento por sesión
Uno de los problema más comunes en el desarrollo Web cuando se usa el enfoque
de las cookies, es controlar su consistencia a lo largo de una aplicación, por
ejemplo, cuando el mismo usuario, en el mismo navegador pero en diferentes
ventanas o pestañas hace operaciones diferentes pero comparte las mismas
cookies, puede ocasionar errores de consistencia en ellas, es decir, si no se tiene
cuidado con esto, podría ocasionar errores como comprar un boleto para un
concierto 2 veces sin darse cuenta.
Para resolver situaciones como la descrita anteriormente puede utilizar
sessionStorage, ya que los objetos instanciados por este objeto sólo persistirán
hasta que la ventana o pestaña del navegador donde se inicializaron sea cerrada.
En el punto 8.2.3 “Asignando y recuperando datos”, se estudiará cómo inicializar el objeto y asignar información que se pueda utilizar.
8.2.2 Almacenamiento local
Otra manera que se tiene para almacenar información del lado cliente es utilizando
el objeto localStorage, el cual, a diferencia de sessionStorage (y por
supuesto de la cookies) tiene la característica de que la información que guardan
persiste más allá de la vida de una simple ventana o una pestaña, además de que
es accesible desde diferentes instancias del navegador. En estos casos es cuando
es mejor utilizar localStorage.
8.2.3 Asignando y recuperando datos de sessionStorage y localStorage
Como se observa en los dos puntos anteriores, la diferencia básica entre
sessionStorage y localStorage es que la duración de los datos del primero
no dependen de la vida de la ventana o pestaña del navegador, pero ambos objetos
trabajan con el mismo mecanismo, la única diferencia es el nombre del objeto, pero
la sintaxis es idéntica y sus métodos también.
Asignar un valor se logra fácilmente para sessionStorage con la siguiente
sintaxis:
sessionStorage.setItem(miIdentificador, miValor);
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
167
Es Igualmente fácil para localStorage con la sintaxis:
localStorage.setItem(miIdentificador, miValor);
El método al que se llama setItem utiliza dos parámetros en formato de
cadena de caracteres, esto es importante porque aunque la especificación dice que
soporta otro tipo de datos, los navegadores solamente pasan cadenas de caracteres
actualmente.
El primer parámetro miIdentificador que utiliza setItem será lo que sirva más
tarde como un nombre clave para recuperar el valor que ha colocado en el
parámetro miValor. El método que se utiliza para recuperar los valores guardados es
getItem y funciona de igual manera para sessionStorage y localStorage.
Sintaxis para sessionStorage:
sessionStorage.getItem(miIdentificador);
Misma sintaxis para localStorage:
localStorage.getItem(miIdentificador);
Ahora que ya conoce cómo asignar un valor con setItem, almacene con
sessionStorage un nombre, para ello utilice la siguiente función:
function detectar(){
elnombre = sessionStorage.getItem("nombre");
if (elnombre == "null" || elnombre == null){
alert("Nadie ha estado aquí");
sessionStorage.setItem("nombre", "Juan");
}else{
alert(elnombre + " ya ha estado aquí");
}
}
Lo que hace esta función es tratar de obtener el valor señalado como nombre del
objeto sessionStorage con el método getItem, después verifica si el valor existe o
no, si no existe lanza el mensaje “Nadie ha estado aquí” y coloca el valor “Juan” con
setItem, pero si lo encuentra entonces lanzará el mensaje “Juan ya ha estado aquí”.
El único momento en que el mensaje “Nadie ha estado aquí” aparece, es la primera vez
que cargue la página en una ventana o pestaña nueva, el resto de las veces el mensaje
será “Juan ya ha estado aquí”, para regresar al estado original tiene que cerrar la
pestaña o la ventana y entonces volver a cargar la página.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
168
Novedades en JavaScript
Ahora observe cómo sería este mismo ejemplo pero empleando localStorage,
el mecanismo es prácticamente el mismo pero se emplea una función adicional:
function detectar(){
elapellido = localStorage.getItem("apellido");
if (elapellido == "null" || elapellido == null){
alert("Nadie ha estado aquí")
localStorage.setItem("apellido", "Pérez");
}else{
alert("El Sr. " + elapellido + " ya ha estado aquí");
}
}
function limpiar(){
elapellido = localStorage.getItem("apellido");
if (elapellido != "null" & elapellido != null){
alert("Limpiando " + elapellido )
localStorage.removeItem("apellido");
}else{
alert("Nada que limpiar")
}
}
Si observa la función detectar() notará que las únicas diferencia con el
ejemplo anterior es el uso del objeto localStorage y el uso de un apellido en
lugar del nombre (esto último es irrelevante) el mecanismo es igual, sin embargo, la
diferencia real radica en que, pasada la primera vez que cargue la página, aunque
usted cierre la ventana o la pestaña donde ejecuta esta página, el mensaje “El Sr.
Pérez ya ha estado aquí” aparecerá, incluso si abre una nueva ventana de
navegador sin importar si cierra o no la primera, este mensaje seguirá apareciendo.
La única manera de regresar al estado original es removiendo explícitamente el
valor guardado.
Cuando desea borrar un valor específico debe utilizar el método removeItem(),
remover el valor es justamente el objetivo del código de la función limpiar(), la cual
es llamada en este caso con un elemento <button>. Su funcionamiento es determinar
si el valor “apellido” existe, si es así entonces lanza el mensaje “Limpiando Pérez” y
elimina el valor, si no hay valor llamado “apellido” entonces el mensaje será “Nada que
limpiar”.
Apoyo en la
En los materiales adicionales encontrará los archivos:
javascript_session_storage.html y javascript_local_storage.html
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
169
8.2.3 Métodos y propiedades de sessionStorage y localStorage
El API de almacenamiento de HTML5 potenciado con el uso de JavaScript es una de
las cosas más simples y potentes de HTML5.
A continuación se muestra el juego completo de métodos y propiedades que
tienen sessionStorage y localStorage:
x
setItem(identificador, value). Coloca un valor en almacenamiento identificado con
un nombre clave, o reemplaza a un valor si es que éste usa el mismo nombre clave.
Tenga en cuenta que es posible recibir un error si el usuario decide apagar la
característica de almacenamiento, o si el espacio de almacenamiento ha sido
llenado al máximo, si se da alguno de estos casos, un error QUOTA_EXEED_ERR
será lanzado. Asegúrese de manejar apropiadamente el caso de este error.
x
getItem(identificador). Permite recuperar el valor señalado por nombre
clave. En caso de que el identificador no esté almacenado (no exista), el
método regresará un valor null.
x
removeItem(identificador). Si un valor existe bajo el nombre clave indicado el
método lo removerá, si no existe, ninguna acción será efectuada.
x
clear(). Este método remueve todos los valores de una lista de almacenamiento.
Considere que una vez borrados todos los elementos en almacenamiento, no
existe forma de recuperarlos.
x
key(posición). Dado un número en posición el método traerá al nombre clave
que esté en dicha posición. No hay manera de garantizar el orden de los
nombres clave, por lo que este método normalmente se usa en un bucle
para traer todos los nombres clave.
x
length. Este atributo especifica cuántos pares identificador-valor existen
actualmente en el espacio de almacenamiento. Tenga en cuenta que este
dato está en el contexto de un solo origen, es decir, no estarán en el mismo
conteo elementos que se originan en un sitio y los que se originan en otro.
8.3 Web offline (caché)
Aunque las conexiones a internet están cada vez más a la mano y las personas que
viven en los países más desarrollados comienzan a tener la sensación de que pueden
estar en línea todo el tiempo y en todo lugar, tristemente la realidad es que esto no es
así. Existen muchas regiones del mundo y situaciones donde no es posible estar en línea
de forma permanente, o simplemente existen fallas de cualquier tipo que causan
intermitencia en su conexión, sobre todo si se piensa en dispositivos móviles
Éstas son las causas que hacen que una aplicación Web pueda mantener el
funcionamiento offline algo atractivo y deseable. Para cubrir estas situaciones,
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
170
Novedades en JavaScript
HTML5 ofrece un mecanismo para que el navegador pueda salvar todos los
recursos que utiliza una página para desplegarse correctamente.
Hasta este momento, todos los navegadores mayores, con excepción de Internet
Explorer, soportan el API para aplicaciones Web offline. Para poder verificarlo, puede
utilizar el detector de características HTML5 que se puso a su disposición desde el Cap.
2, la Fig. 8.1 muestra el estado existente del API:
Fig. 8.1 Detector HTML5 valida la existencia del API para aplicaciones Web offline.
Imagine que quiere hacer una pequeña aplicación de una página, consta del
documento HTML, un archivo para hojas de estilo y una imagen. Para incluir soporte
offline requiere añadir el atributo manifest a la etiqueta <html>, como se
muestra en el siguiente código:
<!DOCTYPE html>
<html manifest="aplicacion.manifest">
.
.
.
</html>
El archivo manifiesto es un archivo de texto simple, el cual para este caso se
debe llamar aplicacion.manifest, y lo que contiene es la lista de archivos que
la página necesita:
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
171
CACHE MANIFEST
javascript_offline.html
estilo_offline.css
ClockworkOrange.jpg
El archivo .manifest debe de comenzar con CACHE MANIFEST (tal cual), los
archivos pueden usar rutas relativas.
Otro aspecto importante para que todo esto funcione es que debe de configurar a
un tipo MIME específico para el archivo .manifest en su servidor Web. El tipo MIME que
debe agregar es:
text/cache-manifest
Para el archivo:
.manifest
La manera en que agrega el tipo MIME varía dependiendo de cuál servidor
Web utilice. Puede experimentar con servidor Web local, o bien, puede pedir la
ayuda de su administrador de servidor.
El resto del proceso es exactamente igual al que usaría cuando crea otra
página de internet. La prueba final para verificar si su cache offline está
funcionando es cargar la página, dar permisos de almacenamiento local si el
navegador lo solicita, desconectarse de Internet e intentar cargar la página
nuevamente, si la página se despliega, entonces la misma está usando el API
para aplicaciones web offline correctamente.
No hay que confundir con el caché tradicional de los navegadores, la forma de
caché que está utilizando es diferente. Si realiza cambios en el archivo .manifest los
cambios no se verán hasta después de un par de horas.
Apoyo en la
Alfaomega
En los materiales adicionales encontrará los archivos:
javascript_offline.html, estilo_offline.css,
aplicacion.manifest y ClockworkOrange.jpg
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
172
Novedades en JavaScript
8.4 Geolocalización
Hoy en día hay situaciones donde la localización es particularmente útil porque
puede proporcionar interesantes servicios, sobre todo para aplicaciones móviles.
Como por ejemplo, ubicar e informar al usuario de lugares y servicios de su interés
que se ubiquen cerca de su posición actual.
Por supuesto, hay que estar consciente de que aunque HTML5 proporciona el
API para geolocalización, hay muchos otros factores que influyen y no hay garantía
de que el resultado del posicionamiento sea veraz.
Es importante tener en mente esta última situación, porque mientras algunos
dispositivos móviles cuentan con un GPS que permite una localización más precisa
por una triangulación de antenas y satélites, otros sólo cuentan con conexión vía el
ISP que da el servicio de conexión, y el navegador típicamente tomará esta información por IP o por triangulación por puntos de acceso Wi-Fi.
Para implementar la geolocalización primeramente debe asegurarse de que el
navegador soporta la API de geolocalización de HTML5, para ello puede utilizar el detector de características HTML5 que se ha puesto a su disposición desde el Cap. 2. La Fig.
8.2 muestra la existencia del API:
Fig. 8.2 Detector HTML5 validando la existencia del API para geolocalización.
Usted puede recuperar la geolocalización del usuario una sola vez, o
por petición, esto sería útil en algunos casos, por ejemplo, imagine que
tiene hambre a la hora del almuerzo y quiere saber qué restaurante está
cerca de su posición actual. Para lograr esto, el objeto que debe utilizar es
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
173
navigator.geolocation , y la función básica para este caso es
getCurrentposition() , su sintaxis es:
getCurrentPosition(FuncionExito[, FuncionError], Opciones);
x
Parámetro FuncionExito. Este parámetro le dice al navegador a cuál función
debería llamar si los datos de localización han sido encontrados como
disponibles. La función indicada toma los datos de la localización obtenida y
actúa en consecuencia.
x
Parámetro FuncionError. En los escenarios de programación siempre es
buena idea tener un plan en caso de alguna falla, es ésta la razón para que
este parámetro llame a una función en caso de que la petición de localización falle por alguna razón que escapa de su control. Este parámetro es
opcional, pero es buen hábito usarlo siempre.
x
Parámetro Opciones. El parámetro opciones maneja internamente a su vez
tres parámetros opcionales que se encierran entre los símbolos “{}”:
o Opción enableHighAccuracy. Este atributo le indica al navegador
que utilice una fuente de información más exacta si está disponible.
Los valores posibles son true o false, usted no puede controlar la
fuente de información. Tenga cuidado si coloca el valor a true, porque
puede ocasionar que la computadora o dispositivo utilice más tiempo y
energía para completar la localización.
o Opción Timeout. Le indica al navegador el monto máximo de tiempo
del que dispone para calcular la posición actual. Si el cálculo no se
completa en el tiempo indicado, la función de error se dispara. El valor
se da en milisegundos
o Opción maximumAge. Señala qué tan vieja puede ser la información de
localización antes de volver a recalcularla. El valor también se indica en
milisegundos.
Implemente las siguientes funci o n e s J a v a Scr ip t , p ue d e l l a m a r a
cargaLocalizacion() desde el evento onload del elemento <body>:
function cargaLocalizacion(){
navigator.geolocation.getCurrentPosition(muestraMapa,
MuetraError, {timeout:10000});
}
function muestraMapa(posicion){
var longitud = posicion.coords.longitude;
var latitud = posicion.coords.latitude;
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
174
Novedades en JavaScript
var enlace = "http://maps.google.com/?ll=" + latitud + "," +
longitud + "&z=14";
document.getElementById("long").innerHTML = "Longitud: " +
longitud ;
document.getElementById("lat").innerHTML = "Latitud: " + latitud;
document.getElementById("enlace").href= enlace;
}
function MuetraError(error){
alert(error.code);
}
</script>
El código HTML es:
<body onload="cargaLocalizacion();">
<h1>Geolocalización</h1>
<p id="info">
<label id="long"></label><br/>
<label id="lat"></label><br/>
<label id="prec"></label><br/>
<a id="enlace" target="_blank">Enlace de mapa</a><br/>
</p>
</body>
Lo que está sucediendo en este código es sencillo, observe el siguiente análisis paso
a paso:
1. Cuando la página carga el evento onload en el elemento <body> es
disparado y llama a la función JavaScript cargaLocalizacion(). El
código HTML es muy simple, ya que sólo utiliza tres elementos <label> y
un enlace <a>.
2. Una vez que comienza el llamado a cargaLocalizacion(), la función
llama al método getCurrentPosition, que a su vez llama a la función
muestraMapa en caso de obtener los datos de localización correctamente,
a la función MuestraError en caso de error, e indica que el proceso de
cálculo para la localización debe completarse en 10 000 milisegundos antes
de considerar el proceso de localización como erróneo con la opción
timeout.
3. Si los datos se obtuvieron correctamente, se llama a la función
muestraMapa(posicion), esta función extrae la longitud y la latitud de
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
175
la posición actual. Esto se logra con el objeto position, el cual tiene una
propiedad llamada coords. Al mismo tiempo, la propiedad coords es
también un objeto que posee dos propiedades más, que son latitude y
longitude, estos valores quedan almacenados en las variables locales
longitud y latitud.
4. Una vez que se obtienen los datos de longitud y latitud hay que hacer algo
con ellos. En este caso lo que hace el resto de la función con ellos es
relacionarlos con Google Maps a través de la variable enlace. La variable
enlace únicamente es una cadena donde se concatenan las variables
latitud y longitud.
5. Una vez que se han asignado los valores a las tres variables (longitud, latitud
y enlace) se colocan a las etiquetas HTML <label> con la propiedad
innerHTML y para el enlace a la propiedad href.
6. Finalmente, si los datos no se obtuvieron correctamente y en el tiempo límite
indicado, la función que se ejecutará es MuestraError(error) que
únicamente mostrará el código del error.
Se pueden hacer muchas cosas más, pero el proceso base se mantiene igual,
por ejemplo, se puede interactuar directamente con el API de Google Maps para
hacer más cosas interesantes. La Fig. 8.3 muestra cómo se ve la implementación
del código:
Fig. 8.3 Ejemplo de API de geolocalización HTML5.
Apoyo en la
En los materiales adicionales encontrará el archivo:
javascript_geolocalizacion.html
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
176
Novedades en JavaScript
8.5 WebSocket
El uso de sockets de manera nativa es una característica que sin duda implica uno
de los avances técnicos más dramáticos en lo que se refiere al desarrollo Web por
parte de HTML5, incluso tiene el potencial de cambiar en gran medida el uso que se
le da hoy a Internet.
Para comprender el uso del API WebSocket de HTML 5 (o web sockets) hay que
entender a un nivel un poco más profundo el funcionamiento de la Web hoy en día.
Todas las plataformas de comunicación en Internet utilizan reglas para enviar
información entre sí. La información enviada y recibida a través de la Web no es la
excepción, la mayoría del trabajo en el tráfico de información por la Web es usando
el protocolo HTTP (HyperText Transfer Protocol).
Cuando usted solicita una página remota en su navegador, un servidor Web
responde enviando de regreso la página en cuestión, cuando termina el envío, la
conexión entre su navegador y el servidor Web remoto se termina y se cierra. Debido
a este comportamiento, el protocolo HTTP es un protocolo sin estado, en otras
palabras, cuando una transacción se finaliza, la conexión entre cliente y servidor se
termina, una nueva transacción crea una conexión totalmente nueva. La razón para
este comportamiento es que si un usuario solicitara una página y la conexión no se
cerrara, la máquina del usuario y el servidor Web estarían gastando recursos de
procesamiento y conexión todo el tiempo.
Como ya se mencionó, la Web tiende a convertirse en una plataforma de
desarrollo para aplicaciones, en lugar de permanecer únicamente como un gran
depósito de textos e imágenes intercambiables. Con esta idea en mente, la
naturaleza sin estado del protocolo HTTP se vuelve una limitante importante, para
enfrentar esta situación, han surgido algunas técnicas y recursos para simular el
estado constante de diversas partes en una página web, como por ejemplo, los
controles Web basados en AJAX, que descomponen una solicitud de datos a un
servidor Web en varias solicitudes pequeñas, a veces logrando que el usuario no lo
note. Esto permite una relación más fluida entre página y usuario, pero se puede
ocasionar mayor ineficiencia en el tráfico de datos y el uso de recursos.
La idea de los sockets no es nueva, se utilizaba antes de la Web como se
conoce actualmente. Si usted ha utilizado un cliente FTP, SSH, un cliente local de
correo o Telnet, entonces ha usado programas que usan sockets. Normalmente un
programador crea un socket en el lado servidor (en estado de espera), y un socket
en el lado cliente (en estado de lanzador), estos programas deben de usar el mismo
tipo de reglas de comunicación para poderse comprender, esto es llamado
protocolo de comunicación. Un servidor Web es de hecho un programa
especializado en gestionar información “hablando” principalmente en protocolo
HTTP utilizando sockets.
El programa Telnet es una herramienta cliente multipropósito que se utiliza
principalmente para probar diferentes tipos de socket. Para probar esto, hará uso
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
177
de un servidor conocido, utilice en su consola el programa Telnet, escriba la
siguiente línea de comando y oprima enter:
telnet yahoo.com 80
Después de oprimir enter, verá un mensaje que dirá algo como esto (si el
servidor contesta muy rápido quizá no lo alcance a ver bien):
Conectándose a yahoo.com…
Si marcha bien, es posible que vea un mensaje indicando que se ha conectado
al servidor remoto o podría ver simplemente una ventana vacía (esto varía un poco
de servidor a servidor). En ambos casos usted se ha logrado conectar y el servidor
Web cree que su consola Telnet es un navegador, por lo tanto debe enviarle algo
que tenga sentido en protocolo HTTP para que el servidor regrese alguna respuesta
útil. Escriba la siguiente petición (use enter entre la primera y segunda línea y al
terminar oprima enter dos veces):
GET / HTTP/1.1
host: www.yahoo.com
Si escribió correctamente la petición, después del segundo enter, comenzará a
ver el código de la página que obtuvo como respuesta, si su terminal efectivamente
fuera un navegador, entonces el navegador desplegaría una página normal, pero la
terminal Telnet muestra sólo el resultado de manera literal. Al final verá una línea
similar a ésta:
Se ha perdido la conexión con el host.
La conexión siempre se cerrará al final de la petición debido a que HTTP es un
protocolo sin estado.
Cuando se utiliza WebSocket en una página, se provee de un protocolo adicional, mientras que la página en sí misma sigue trabajando en el mismo HTTP sin
estado. Lo que sucede de esta manera es que mientras se ve una página común y
corriente, WebSocket mantiene la conexión paralelamente, usando su propio
protocolo, y así continúa mientras la página está viva, permitiendo la comunicación
sin tener que restablecer la conexión
Con estas nuevas posibilidades usted puede crear, por ejemplo, un juego
multijugador, un reporteador de información en tiempo real o un chat, entre muchas
otras cosas, basadas completamente en HTML5, CSS3 y JavaScript.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
178
Novedades en JavaScript
Para ver cómo funciona el API de WebSockets, se necesita forzosamente
contar con un socket servidor; crear uno está fuera del alcance de este libro, ya que
para esto requiere de conocer la programación de sockets en algún lenguaje como
C, Python, Java, Visual Basic etc., pero por fortuna existen algunas alternativas
públicas para hacer pruebas, el sitio http://websocket.org/ es una de ellas y es la
que se utilizará.
El sitio http://websocket.org/ ofrece un bonito servidor de repetición (echo
server), lo que hace es simplemente proporcionar un socket que recibe el mensaje
del cliente y lo regresa de la misma manera (ws://echo.websocket.org/). Este
mismo sitio plantea un ejemplo (http://websocket.org/echo.html), el cual se ha
utilizado como base para crear otro ligeramente mejorado en este libro, la Fig. 8.4
muestra cómo se ve en el navegador:
Fig. 8.4 Ejemplo de cliente WebSocket.
El código de este ejemplo se muestra a continuación, luce relativamente largo,
pero en realidad es sencillo, dé un vistazo previo y después verá el análisis con
detenimiento.
<!DOCTYPE html>
<html>
<head>
<title>Web sockets</title>
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
179
<meta charset="iso-8859-1" />
<style type = "text/css">
.conectado {
color: #ffffff;
font-weight: bold;
}
.mensaje {
color: #e7e4dd;
}
.desconectado {
color: #ffffff;
font-weight: bold;
}
.error {
color: red;
}
.response {
color: #eeeeee;
}
#contenedor{
width: 2000px;
}
p {
background-color: rgba(0,0,0,0.5);
padding: 1em;
margin: 0px;
border-bottom: 1px solid #ffffff;
}
#formulario{
font-family: arial;
font-size: 12px;
width: 200px;
float: left;
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
180
Novedades en JavaScript
background-color: #eeeeee;
padding: 1em;
border: 1px solid #cccccc;
box-shadow: 3px 3px 5px #000000;
}
#resultado{
font-family: arial;
font-size: 12px;
width: 500px;
height: 320px;
float: left;
margin-left: 5px;
overflow: auto;
background-color: #f6f6f6;
padding: 1px;
border: 1px solid #cccccc;
box-shadow: 3px 3px 5px #000000;
}
</style>
<script type = "text/javascript">
var resultado;
var websocket;
function iniciar(){
resultado = document.getElementById("resultado");
}
function conectar(){
if ("WebSocket" in window){
txtServidor= document.getElementById("txtServidor");
servidor = txtServidor.value;
websocket = new WebSocket(servidor);
resultado.innerHTML = "Conectando..." ;
//se crean los eventos
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
181
websocket.onopen = onOpen;
websocket.onclose = onClose;
websocket.onmessage = onMessage;
websocket.onerror = onError;
}else{
alert("El API Web sockets de HTML5 (Objeto WebSocket) no
es soportado en este navegador.");
}
}
//función que es llamada en cuanto la conexión se abre
function onOpen(evt){
resultado.innerHTML = "<p class='conectado'>Conectado</p>";
document.getElementById("btnConectar").disabled=true;
}
//función que es llamada en cuanto la conexión se cierra
function onClose(evt){
resultado.innerHTML += "<p
class='desconectado'>Desconectado</p>";
document.getElementById("btnDesonectar").disabled=true;
document.getElementById("btnConectar").disabled=false;
}
//función que es llamada en cuanto se recibe respuesta por
parte del servidor remoto
function onMessage(evt){
resultado.innerHTML += "<p class='response'>Respuesta: " +
evt.data + "</p>";
}
//función que es llamada en caso de error en la conexión
function onError(evt){
resultado.innerHTML += "<p class = 'error'>Error: " +
evt.data + "</p>";
}
function enviarMensaje(){
//se obtiene el texto del campo de texto txtMensaje
txtMensaje= document.getElementById("txtMensaje");
mensaje = txtMensaje.value;
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
182
Novedades en JavaScript
//se envía el mensaje al servidor
websocket.send(mensaje );
resultado.innerHTML += "<p class='mensaje'>Mensaje Enviado:
" + mensaje + "</p>";
}
</script>
</head>
<body onload="iniciar();">
<h1>Web sockets</h1>
<div id="contenedor">
<div id="formulario">
<label for = "txtServidor">
<input type="text" id="txtServidor"
value="ws://echo.websocket.org/" />
</label>
<button id="btnConectar" onclick="conectar();">
Conectar
</button>
<button id="btnDesonectar" onclick="websocket.close();">
Desconectar
</button>
<button onclick="enviarMensaje();">
Enviar Mensaje
</button>
<input type="text" id="txtMensaje" value="Comenzando con
HTML5" />
</div>
<div id="resultado">Clic en botón "Conectar" para iniciar la
conexión con el servidor remoto</div>
</div>
</body>
</html>
Apoyo en la
En los materiales adicionales encontrará el archivo:
javascript_sockets.html
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
183
8.5.1 Creación interfaz
Se requiere crear una interfaz entre el usuario y esta pequeña aplicación Web, de
esta forma el usuario puede indicar los datos requeridos e iniciar y terminar la
conexión cuando él mismo lo crea conveniente. Para el caso del ejemplo se utilizó
un pequeño formulario con tres botones y dos campos de texto siguiendo los pasos
siguientes:
1. Después de crear la estructura básica del documento, se agregó en la
etiqueta <body> el evento onload que llamará a la función JavaScript
iniciar() al cargar la página.
2. Se creó una etiqueta <input> de tipo text para permitir al usuario ingresar el
servidor remoto que desee, sin embargo, previamente capturado aparecerá la
URL del servidor de repetición propuesto ws://echo.websocket.org/.
3. Se colocó un botón para conectar con el servidor remoto haciendo uso del
elemento <button>, se utiliza el evento onclick para llamar a la función
enviarMensaje().
4. Se hizo un botón para desconectar del servidor remoto utilizando el
elemento <button> y se añadió el evento onclick para llamar al método
websocket.close(), note que no fue necesario crear una función
JavaScript adicional.
5. Se creó otro campo <input> de tipo text para colocar el mensaje que se
desea enviar al servidor de repetición.
6. Se agregó un elemento <button> para enviar el mensaje escrito dentro del
campo de texto hecho para este fin, el botón llama a la función
enviarMensaje() con su evento onclick.
7. Se colocó un área para ver el estado de la comunicación con el servidor
remoto utilizando la etiqueta <div>.
8. Finalmente se han incluido estilos para mejorar la interfaz y hacerla más
agradable a los ojos del usuario.
8.5.2 Conexión de sockets
Si ya tiene listo un socket servidor (como es el caso del ejemplo) entonces es fácil
comunicarse con él usando el objeto WebSocket en JavaScript, para esto se utilizaron los pasos siguientes:
1. Primero se crearon las variables globales resultado y websocket. De
inmediato se escribió la función iniciar(), la cual asigna al elemento
HTML resultado a la variable del mismo nombre, creada en este mismo
paso.
2. Se implementó la función conectar(), la cual es importante, ya que
cuando el usuario haga clic en el botón “Conectar” la función será llamada,
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
184
Novedades en JavaScript
en ella se verificará el soporte para el WebSocket por parte del navegador, si
el navegador soporta el API WebSocket, entonces creará el socket cliente y
se asignará a la variable local websocket, es en este momento donde se
utiliza la URL del socket servidor, pera este caso se utilizará
ws://echo.websocket.org/ como opción por default.
3. Enseguida en la misma función conectar(), se inicializan los eventos que
puede manejar el objeto WebSocket instanciado en la variable websocket
y se asigna una función para cada uno, los eventos posibles son:
x
onopen. Este evento se dispara cuando la conexión se abre. La
función utilizada con este evento es Abrir(evt).
x
onclose. El evento se dispara cuando la conexión es cerrada. La
función utilizada con este evento es Cerrar(evt).
x
onError. El evento se dispara si ocurre algún tipo de error durante la
conexión. El valor de la propiedad evt.data contiene la descripción del
error. La función utilizada con este evento es Error(evt).
x
onmessage. Si se recibe una respuesta por parte del servidor
remoto (que no sea un error) el evento se dispara. Para recuperar el
mensaje se utiliza el valor de evt.data. La función utilizada con
este evento es MensajeServ(evt).
8.5.3 Envío de mensaje
Cuando el usuario decide que desea enviar un mensaje al socket servidor hace
clic en el botón “Enviar Mensaje”, esto llama a la función enviarMensaje()
que básicamente hace 3 simples pasos:
1. Obtiene el texto deseado para el mensaje del campo de texto txtMensaje.
En el ejemplo simplemente se usa un método getElemenById() y se
asigna a una variable el valor de txtMensaje.
2. Asigna el texto del mensaje al método send() del objeto WebSocket.
3. Se muestra al usuario el mensaje que se ha enviado en el panel resultado.
Cuando el servidor responde, el evento onmessage se dispara automáticamente
y la respuesta del servidor al usuario también es mostrada en el panel de
resultados.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
185
8.5.4 Algunas puntualizaciones
El API WebSocket de HTML5 es soportado por Chrome y Safari, FireFox soporta
sockets pero utiliza un API desarrollado por la Mozilla Foundation, la cual se llama
MozWebSocket, por lo tanto, el ejemplo no funcionará en FireFox. Opera 11 trabaja
sin problema con WebSocket, pero los permisos necesarios están desactivados por
default, por lo que debe activarlos previamente. Internet Explorer no soporta
WebSocket nativamente, ya que según lo que ha declarado Microsoft esperará a
que el API WebSocket sea más estable, sin embargo, ofrecen un plug-in que permite
a Internet Explorer el uso de sockets: http://html5labs.interoperabilitybridges.com/
y tiene que usar su propio API experimental, por todo esto el ejemplo tampoco
funcionará en IE.
8.6 Web workers
Cuando trabaja en una computadora de escritorio o en una portátil y utiliza
programas que se instalan sobre un sistema operativo moderno, implícitamente
significa que está trabajando con varios programas al mismo tiempo, incluso
aunque no lo note (observe los procesos activos en su administrador de tareas para
comprobarlo), esta capacidad se conoce como multitarea.
Todos los sistemas operativos modernos en el mercado tienen la capacidad de
la multitarea (los móviles, aunque limitada, esencialmente la tienen). Los sistemas
de cómputo tienen uno o más procesadores, memoria, etc., todos estos recursos
son usados por los programas que cualquier persona utiliza, pero lo interesante es
comprender cómo hace un equipo de cómputo y su sistema operativo para prestarle
atención a todos los programas que se ejecutan al mismo tiempo. Los sistemas
operativos usan algoritmos que actúan como controladores de asignación de tareas
(task-switching), y proporcionan a una tarea suficientes recursos y tiempo para
actuar, después saltar a la siguiente y eventualmente regresar a la anterior si es
necesario. Los usuarios, y en muchos casos los mismos desarrolladores,
dependiendo del tipo de programas que se hagan, no tienen que pensar en todo
esto.
Cuando ejecuta un navegador, éste normalmente funciona como un solo
proceso, ya que clásicamente ha trabajado como un medio para consumir un
documento. Ahora un navegador puede actuar de manera similar a un sistema
operativo, ya que puede manejar aplicaciones internamente, con todo lo que esto
implica. Si piensa en el desarrollo Web tradicional, cuando utiliza una instrucción
recursiva como un for en una función JavaScript, y simplemente hace un conteo de
0 a 90 000, el navegador únicamente podrá dedicarse a hacer ese conteo y no
continuará con el resto de sus instrucciones hasta terminar. Si usa un navegador en
forma constante (seguramente alguna vez le ha sucedido que éste deja de
responder totalmente), la interfaz e incluso el puntero del mouse dejan de responder
sobre el navegador. Esto sucede porque cuando el navegador hace todo en un solo
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
186
Novedades en JavaScript
proceso asignado a la CPU, tiene que esperar su turno para hacer todo lo que tiene
que ver con él.
Este tipo de situaciones en aplicaciones tradicionales de escritorio se
resuelven aplicando lo que se llama programación por hilos. Esencialmente un hilo
es un programa pequeño que se ejecuta como un proceso independiente, de esta
manera tiene su propio turno para consumir recursos. Utilizando esta técnica, la
aplicación principal no se congelará si un código muy exigente se encuentra
corriendo paralelamente por detrás, ya que éste hace uso de recursos en su propio
hilo.
Hasta ahora los navegadores no podían enfrentar estos casos de manera
realmente efectiva. Incluso entre desarrolladores no son demasiados aquellos que
usan la programación de hilos, ya que esto se considera programación avanzada,
por esto el uso de hilos es considerada por muchos una especie de magia oculta
que sólo algunos cuantos iniciados utilizan.
Después de todo lo expuesto, HTML5 llega con una nueva característica
sumamente interesante llamada Web worker. Esto es una manera muy fácil y
poderosa de implementar hilos en el navegador.
Para comprenderlo bien, la mejor manera es un ejemplo que ponga en acción
el API Web worker de HTML5. En la Fig. 8.5 puede ver el aspecto del ejemplo que se
analizará para ilustrar mejor este tema:
Fig. 8.5 Ejemplo de página que utiliza un Web worker.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
187
El código que utiliza este ejemplo se presenta a continuación, véalo completo y
después analícelo más detenidamente en los siguientes puntos.
<!DOCTYPE html>
<html>
<head>
<title>Web workers</title>
<meta charset="iso-8859-1" />
<style type = "text/css">
.sinworker{
color: #e7e4dd;
}
.conworker{
color: #ffffff;
font-weight: bold;
}
#contenedor{
width: 2000px;
}
p{
background-color: rgba(0,0,0,0.5);
padding: 1em;
margin: 0px;
border-bottom: 1px solid #ffffff;
}
#formulario{
font-family: arial;
font-size: 12px;
width: 250px;
float: left;
background-color: #eeeeee;
padding: 1em;
border: 1px solid #cccccc;
box-shadow: 3px 3px 5px #000000;
}
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
188
Novedades en JavaScript
#resultado{
font-family: arial;
font-size: 12px;
width: 450px;
height: 320px;
float: left;
margin-left: 5px;
overflow: auto;
background-color: #f6f6f6;
padding: 1px;
border: 1px solid #cccccc;
box-shadow: 3px 3px 5px #000000;
}
</style>
<script type = "text/javascript">
var resultado;
var worker;
function iniciar(){
var i=0;
if (typeof(Worker)){
resultado = document.getElementById("resultado");
chkUsarWorker = document.getElementById("chkUsarWorker");
use_worker = chkUsarWorker.checked;
resultado.innerHTML = "";
document.getElementById("btnIniciar").disabled=true;
document.getElementById("btnDetener").disabled=false;
chkUsarWorker.disabled=true;
if(use_worker){
worker = new Worker("worker.js");
//se asigna función al evento disparado cuando se
recibe mensaje desde el web worker
worker.onmessage=mensajeWorker;
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
189
//se le indica al web worker que arranque
worker.postMessage("arranca");
document.getElementById("btnDetener").disabled=false;
}else{
for (i=0; i<=700; i++){
resultado.innerHTML += "<p class='sinworker'>" + i +
"</p>";
if (i==700){
reiniciaBotones();
}
}
}
}else{
alert("El API Web Workers de HTML5 no es soportado en
este navegador.");
}
}
//función que es llamada cuando se recibe respuesta por parte
del Web worker
function mensajeWorker(evt){
resultado.innerHTML += "<p class='conworker'>Respuesta del
web worker: " + evt.data + "</p>";
if (evt.data==="terminado"){
reiniciaBotones()
}
}
function detenerWorker(){
worker.terminate();
reiniciaBotones();
}
function reiniciaBotones(){
document.getElementById("btnIniciar").disabled=false;
document.getElementById("btnDetener").disabled=true;
document.getElementById("chkUsarWorker").disabled=false;
}
</script>
</head>
<body>
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
190
Novedades en JavaScript
<h1>Web workers</h1>
<div id="contenedor">
<form id="formulario">
<button id="btnIniciar" onclick="iniciar();">
Iniciar
</button>
<button id="btnDetener" disabled="disabled"
onclick="detenerWorker();">
Detener
</button>
<input type="checkbox" id="chkUsarWorker">
Usar Worker
</input>
</form>
<div id="resultado">Clic en botón "Iniciar" para comenzar
conteo</div>
</div>
</body>
</html>
Apoyo en la
En los materiales adicionales encontrará el archivo:
javascript_workers.html y worker.js
8.6.1 Creación de interfaz
Para permitir que el usuario interactúe con esta pequeña aplicación Web, se creó
una sencilla interfaz siguiendo los pasos siguientes:
1. Se colocó un botón para iniciar un conteo de 1 a 700 utilizando un bucle
for. El bucle puede ser llamado desde el hilo de un web worker o desde la
página principal (véase el paso 3).
2. Se creó un botón para detener el bucle utilizado en el web worker. Este
botón sólo tendrá efecto cuando haga el proceso del bucle utilizando el hilo
web worker, si el proceso se hace desde la página principal, este botón no
funcionará.
3. Se ha colocado una caja de selección o checkbox para que pueda
experimentar la diferencia en el conteo de 1 a 700 cuando utiliza el hilo de
un web Yorker, de cuando lo hace todo desde la página principal. El web
worker sólo será utilizado si se marca la caja de selección.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
191
4. Se utilizó <div> para visualizar el conteo y el comportamiento del bucle y
del web worker de manera más clara.
5. Finalmente se incluyeron estilos para mejorar la interfaz del usuario.
Nota
Tenga en cuenta que las interfaces que disparan un web worker, en la realidad
serán mucho más sutiles, ya que el objetivo es lograr una mejor experiencia
para el usuario y no necesariamente hacer notar cómo se logra.
8.6.2 Llamar al web worker
Lo que se ha hecho podría catalogarse como programación avanzada, aunque de
hecho el código es bastante simple. En este caso lo que se ha planteado es
solamente la posibilidad de elegir entre dos maneras de ejecutar una instrucción
for, una con un web worker y otra sin él. Analice los siguientes pasos:
1. Se crearon las variables globales resultado y worker. A la primera se le
asigna un elemento <div> para mostrar cómodamente los resultados en
esa misma etiqueta. La segunda variable es para asignarle a ésta el objeto
Worker que se crea.
2. Se usaron cuatro funciones para este ejemplo, aunque sólo 3 son realmente
relevantes para el funcionamiento de la aplicación. La función Iniciar() es
la que desencadena el conteo del ciclo for utilizando el web worker o sólo la
página principal. La función MensajeWorker(evt) será convocada cuando
el web worker envíe mensajes a la página principal. La otra función importante
es detenerWorker(), que por supuesto terminará el hilo abierto por el
worker. La función reiniciaBotones() únicamente activa y desactiva los
botones y la caja de selección para regresar al estado apropiado para relanzar el
conteo.
3.
En la función Iniciar() primeramente se verifica la existencia del API Web
worker con la instrucción if (typeof(Worker)), si el API existe el proceso
continuará, y dependiendo de si el usuario marcó la caja de selección
chkUserWorker el conteo se efectuará con el web worker o en la página principal.
Cuando el usuario decide usar el web worker se inicializa el objeto Worker y se
asigna el archivo worker.js. Si el usuario decide no usar el web worker, la página
simplemente ejecutará el ciclo for y el navegador dejará de responder hasta
terminarlo, será hasta entonces cuando se mostrarán los resultados y el usuario
recuperará el control del navegador.
4. Una vez inicializado el objeto Worker se debe designar una función al evento
onmessage que en este caso es mensajeWorker. Este evento y la
función designada se dispararán cuando el worker envíe un mensaje de
regreso a la página principal (más detalles en el paso 5).
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
192
Novedades en JavaScript
5. Para iniciar el worker se debe enviar un mensaje que el código dentro de él
pueda reconocer para comenzar a funcionar. En este caso se asignó la
cadena “arranca” como mensaje para este fin.
6. En el paso 4 se asignó la función mensajeWorker para recibir los mensajes que
envía el web worker. La función, por supuesto, debe tener el mismo nombre y
debe de recibir un parámetro que contendrá el mensaje enviado, la función
finalmente es mensajeWorker(evt). Esta misma función se encargará de
comunicar los mensajes obtenidos escribiendo en resultado (variable que
contiene al elemento <div> con ese identificador) y su propiedad innerHTML el
valor del elemento evt.data.
7. Si el usuario desea detener el funcionamiento del web worker mientras aún
se está ejecutando, entonces presionará el botón “Detener” y la función
detenerWorker() hará el trabajo llamando al método terminate(), el
cual destruye al web worker.
8.6.3 Construir el código del web worker
Hasta este punto lo único que falta para completar el proceso de construcción de
ejemplo es el web worker como tal, por fortuna es realmente fácil crearlo. El web
worker es un archivo JavaScript con extensión .js común y corriente. Este archivo
será ejecutado como un programa independiente, pero tenga presente que al ser
manejado en un hilo de procesamiento diferente, este archivo no tiene acceso a los
elementos u objetos de la página principal (como window o document), la única
manera de comunicar al worker con la página y viceversa, es con el envío de
mensajes con el método postMessage. Éste es el código utilizado para el del
worker, el archivo nombrado worker.js:
onmessage = conteoWorker;
function conteoWorker(evt){
if (evt.data==="arranca"){
for (i=0; i<=700; i++){
postMessage(i);
}
postMessage("terminado");
}
}
Como puede ver, el código del worker es muy breve y simple, los pasos utilizados
para crearlo fueron los siguientes:
1. Se asignó función al evento onmessage para ejecutar de inmediato, ésta es
conteoWorker. A la función automáticamente se le pasa el argumento
evt, la función finalmente es conteoWorker(evt).
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
193
2. Dentro la función conteoWorker(evt) se colocó una condición para
verificar que el mensaje fue recibido desde la página principal, de manera
que el código pesado comenzará sólo si el mensaje es la cadena “arranca”.
3.
Se colocó el código que exige demasiados recursos, que en este caso es un conteo de
0 a 700. Por cada ciclo se envía un mensaje a la página principal usando el método
postMessage y se disparará la función mensajeWorker() (véase el paso 6 del
punto 8.6.2).
4. Finalmente se añadió otro mensaje que indica que el proceso ha terminado.
En el ejemplo este mensaje se utiliza para indicar a la página principal en
qué momento regresar los botones de control al estado en que se puedan
usar nuevamente para hacer un conteo nuevo.
8.6.4 Resumen: pasos para crear un Web worker
En lo que se ha visto hasta el momento, se ha explicado en qué consiste y cómo
implementar el ejemplo propuesto, pero no es mala idea plantear algunos criterios
generales para la implementación general de cualquier Web worker:
1. Normalmente los web workers se utilizan como alternativa al código crítico
que está consumiendo demasiados recursos, de manera que comience sus
páginas como lo haría normalmente. Después de probar el rendimiento de
su código, es entonces cuando puede identificar cuál parte moverá a un
Web worker.
2. Prepare un archivo .js (JavaScript) por separado para contener el código pesado.
En este archivo podrán existir una o varias funciones que normalmente
contendrán bucles pesados o inicialización de datos numerosos.
3. En la página principal se debe identificar y relacionar al archivo JavaScript
que ha creado, esto lo hará utilizando el objeto Worker.
4. Asigne al evento onmessage una función para llamar cuando el web worker
envíe mensajes a la página principal. La página principal y el web worker
serán considerados dos procesos separados para la CPU de una
computadora, por lo que la única manera que tienen de comunicarse entre
sí es utilizando el método postMessage, es por esto que es importante
que tenga vinculados el evento onmessage y una función.
5. Planee e indique los mensajes que va a enviar al web worker. Los mensajes
que envía serán la única manera en que el web worker sabrá qué hacer.
6. En el código del worker asigne al evento onmessage una función para
llamar cuando la página principal envíe mensajes. Justo como hizo en la
página principal.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
194
Novedades en JavaScript
7. Debido a que el web worker no está al tanto de los elementos existentes en
la página principal, debe procurar siempre mandar los mensajes apropiados
en el momento apropiado de regreso a ella con postMessage.
8. Cuando el proceso del web worker termine, recuerde finalizarlo con el
método terminate(), de lo contrario el proceso se quedará en memoria y
continuará consumiendo recursos.
8.6.5 Algunas puntualizaciones entre Web workers y navegadores
Todos los navegadores mayores, con excepción de Internet Explorer 9 y menores,
soportan Web workers, sin embargo, hasta el momento Chrome en su versión 14 y
Safari 5, no tienen muy buen rendimiento con ellos. Microsoft ha anunciado y hecho
demostraciones indicando que soportará Web workers en su versión 10. Firefox y
Opera tienen un notable rendimiento con Web workers.
Actividades para el lector
Pruebe el ejemplo tratado a lo largo del punto 8.6, en todos los
navegadores mayores (y los que guste incluir), escriba un reporte
con sus impresiones acerca del comportamiento del web worker de
cada uno de ellos.
Actividades para el lector
Construya su propia versión del ejemplo utilizado para explicar los
web workers e implemente un control de formulario adicional para
permitir al usuario introducir el límite superior para el conteo.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
195
RESUMEN
En este capítulo se expusieron las características más novedosas en cuanto al
lenguaje JavaScript para su interacción con HTML5:
x
Las nuevas alternativas para seleccionar elementos HTML5 con JavaScript.
x
Las nuevas alternativas para el almacenamiento local de información.
x
La manera de crear una página offline.
x
La nueva posibilidad para manejar la geolocalización.
x
La capacidad de hacer programación con sockets en el navegador.
x
La nueva característica de crear procesos con programación por hilos utilizando web workers.
Autoevaluación
1. ¿Para qué sirven las nuevas herramientas de selección de JavaScript?
2. ¿Cuáles son las nuevas maneras para almacenar información del lado cliente?
3. ¿Qué es una página offline?
4. ¿Qué es y para qué puede servir el concepto de Geolocalización?
5. ¿Qué tipo de aplicación podría utilizar websockets?
6. ¿Para qué sirve utilizar un web worker?
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
196
Novedades en JavaScript
EVIDENCIA
Construyó una página con las herramientas de selección
getElementsByClassName, getElementsByTagName, querySelector,
querySelectorAll, para dar diversos estilos a sus elementos.
Construyó su propia versión del ejemplo utilizado para explicar los web
workers.
Construyó su propia versión del ejemplo utilizado para explicar los web
workers e implementó un control de formulario adicional para permitir
al usuario introducir el límite superior para el conteo.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Novedades en JavaScript
197
REFERENCIAS
Bibliografía
Lubbers, Peter. Brian Albers y Frank Salim (2010). Pro HTML5. Programming, 1a.
ed., Apress, EUA.
Harris, Andy (2011). HTML5 for Dummies, 1a. ed., Willey Publishing, EUA.
Pilgrim, Mark (2010). HTML5: Up and Running, 1a. ed., O’Reilly, EUA.
Páginas Web recomendadas
https://developer.mozilla.org/en/Gecko_DOM_Reference
http://diveintohtml5.org/storage.html
http://www.w3.org/TR/offline-webapps/
http://dev.w3.org/geo/api/spec-source.html
http://www.w3.org/TR/websockets/
http://websocket.org/
http://dev.w3.org/html5/workers/
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
198
Novedades en JavaScript
Respuestas sugeridas a las preguntas de autoevaluación
1. Permiten seleccionar los elementos de un documento HTML5 de maneras
más flexibles más allá de sólo seleccionar por identificador o por clase.
2. El API de almacenamiento local de HTM5 permite almacenamiento por
sesión o almacenamiento local.
3. Es el almacenamiento de los recursos de una página, como imágenes y
archivos de manera local, para poder acceder a ellos sin conexión y
desplegar una página correctamente.
4. Para crear aplicaciones que utilizan la posición geográfica del usuario y en
función a esta proporcionar información de utilidad.
5. Aplicaciones de comunicación, colaboración o información remota en
tiempo real
6. Cuando una operación exige demasiados recursos en una página, se puede
aislar a ésta en un hilo de proceso separado con un web Yorker, para que la
página principal pueda continuar con su propio proceso.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
9
Utilizar Canvas
Reflexione y responda las preguntas siguientes:
¿Qué es y para qué sirve el elemento Canvas de HTML5?
¿Cómo preparar el elemento Canvas para su uso?
¿Cómo dibujar textos dentro de Canvas?
¿Cómo dibujar figuras con diversas formas dentro de Canvas?
¿Cómo utilizar imágenes dentro de Canvas?
¿Cómo aplicar transformaciones a los dibujos dentro de Canvas?
¿Cómo realizar animaciones básicas dentro de Canvas?
Contenido
Utilizando Canvas
Introducción
9.5 Transformaciones
9.1 Primeros pasos con Canvas
9.6 Animación
9.2 Dibujando textos
9.2 Dibujando figuras rectangulares
9.3 Dibujando caminos (paths)
9.4 Utilizando imágenes
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
200
Utilizar Canvas
Expectativa
Conocer la nueva experiencia en el manejo de gráficos que proporciona HTML5 con
el uso del API Canvas.
Después de estudiar este capítulo, el lector será capaz de:
x
x
x
x
x
Conocer las bases del trabajo con el elemento Canvas.
Dibujar textos como parte del contenido del elemento Canvas.
Dibujar rectángulos, arcos, círculos y figuras de mayor complejidad
utilizando caminos en el elemento Canvas.
Explotar el uso de imágenes dentro de Canvas.
Manipular el color, posición e incluso brindar animación a los elemento
dentro de Canvas.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
201
INTRODUCCIÓN
El elemento Canvas sin duda es una de las características más interesantes en lo
que respecta a HTML5 y entusiasma principalmente a los desarrolladores
multimedia. El API Canvas proporciona un área que adquiere un contexto gráfico
dentro de un documento HTML.
Cuando se utiliza un elemento Canvas se cuenta también con una serie de
métodos y propiedades para dibujar. Las posibilidades para crear gráficos bajo este
esquema llevan al desarrollo Web hacia un nuevo rumbo lleno de posibilidades.
Hasta hace poco tiempo las únicas maneras de crear juegos, RIA (Rich Internet
Application) o elementos visuales realmente interesantes en la Web era haciendo
uso de Flash o Java. Con Canvas se tiene una nueva y flexible manera de crear en
varios casos ese mismo tipo de contenido, lo cual lleva a serias implicaciones en la
relación entre aplicaciones Web, la experiencia del usuario y el uso de recursos.
Canvas lo desarrolló inicialmente Apple para su navegador Safari y luego lo
utilizó y estandarizó la organización WHATWG (comunidad muy activa en el
desarrollo de HTML) para incorporarlo a HTML5. La propiedad intelectual de Canvas
fue sujeto de polémica hasta que Apple decidió finalmente liberar esta propiedad
intelectual y la W3C pudo incluir la idea a la especificación HTML5.
Canvas es un elemento que actualmente está soportado por todos los
navegadores mayores en sus últimas versiones, esto es algo muy bueno, ya que
usted no tendrá problemas de compatibilidad.
Para poder manejar este elemento debe contar con conocimientos básicos de
JavaScript, por favor tenga esto en cuenta al leer este capítulo.
9.1 Primeros pasos con Canvas
Hay que comenzar por los aspectos más sencillos de <canvas> para comenzar a
armar su arsenal de recursos y después logre con ello elaborar gráficos y
comportamientos mucho más interesantes y divertidos.
9.1.1 Preparación del elemento Canvas
Cuando se habla del elemento Canvas y al ser tan prometedor pudiera pensar que
es complejo colocarlo dentro de un documento HTML, pero nada más lejos de la
verdad, en términos de HTML no es más que otra etiqueta con muy pocos
parámetros. Lo único que debe hacer es colocar la etiqueta con cierre <canvas> y
proporcionar valores para sus atributos:
x
x
Atributo width. Indica el ancho del Canvas en el documento HTML.
Atributo height. Indica el alto del Canvas en el documento HTML.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
202
Utilizar Canvas
También deberá dar un valor al identificador de la etiqueta usando el atributo
id, sólo con esto tendrá lista su área para dibujar. La implementación HTML de
<canvas> se observa de la manera siguiente:
<canvas id="miCanvas" width="300" height="300">
<p>El elemento canvas requiere soporte HTML5<p>
</canvas>
Dentro del inicio de la etiqueta <canvas> y el cierre </canvas> puede
colocar cualquier otro elemento HTML, pero éstos sólo se considerarán si el
navegador que utiliza no cuenta con soporte para este elemento.
La traducción de la palabra Canvas es lienzo, lo que significa que así como
sucede con el lienzo de una pintura, para que valga la pena su existencia debería de
“pintar” algo interesante en él. En el caso de la etiqueta <canvas> nada
interesante sucederá hasta que usted decida interactuar con el API Canvas de
HTML5 utilizando JavaScript para dibujar dentro. Podría utilizar por ejemplo el
siguiente código para dibujar un par de rectángulos dentro de un Canvas:
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
//color de relleno a negro
contexto.fillStyle = '#000000';
//dibuja un rectángulo
contexto.fillRect(0, 0, 600, 600);
//cambio de color de estilo de relleno a rojo
contexto.fillStyle = '#cc0000';
//dibujo otro rectángulo
contexto.fillRect(10, 10, 280, 280);
}
Este pequeño ejemplo muestra en general cuál es el mecanismo que utiliza el
API Canvas. Para resumirlo de manera sencilla podría establecer los siguientes
pasos:
1. Crear el área donde se dibujará utilizando la etiqueta <canvas>.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
203
2. Asignar a una variable la referencia al Canvas mediante su atributo id. Para
hacer esto se utilizará por supuesto getElementoById().
3. Hay que obtener el contexto gráfico del Canvas utilizando el método
getContext() del API Canvas. Para el caso actual el contexto gráfico sólo
puede ser 2d, pero es muy posible que pronto sea también 3d.
4. Establecer el color del dibujo. Usted puede asignar colores usando cualquier
notación de color CSS3 al método fillStyle (dibujos con el color
indicado como relleno) o strokeStyle (dibujos con el color indicado sólo
en el perímetro y sin relleno). Para este caso, dado que se desean
rectángulos con relleno, se usó fillStyle.
5. Se establece qué tipo de dibujo se quiere realizar, pueden ser rectángulos,
cuadros, texto, etc. Para el caso en el ejemplo se dibujaron cuadros con
colores de relleno, por lo que se utilizó el método fillRect().
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_ini.html.
9.1.2 La cuadrícula y su eje de coordenadas
Primero debe pensar en Canvas como una cuadrícula con un eje de coordenadas, ya
que de hecho lo es.
Para posicionar elementos en el Canvas debe tener en cuenta su eje de
coordenadas en dos dimensiones, que comienzan en la esquina superior izquierda
del elemento. El lienzo o Canvas creado tendrá las dimensiones indicadas con los
atributos width y height en la etiqueta, por lo tanto, la esquina superior izquierda
será el punto (0,0) y la esquina inferior derecha el punto definido por width y
height, es decir, el punto máximo de coordenadas marcado por el ancho y el alto
indicados.
Normalmente una unidad en la cuadrícula corresponderá a un pixel en el
lienzo o Canvas. La Fig. 9.1 ilustra este concepto:
Fig. 9.1 Cuadrícula y ejes imaginarios dentro de un elemento Canvas.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
204
Utilizar Canvas
9.2 Dibujar textos
La etiqueta <canvas> y el API que la soporta tienen métodos y propiedades para
desplegar texto en cualquier punto del lienzo. Los métodos para dibujar texto son
dos y tienen la misma sintaxis:
strokeText(texto, x, y)
fillText(texto, x, y)
x
Parámetro texto. Indica la cadena de caracteres que formarán el texto
deseado.
x
Parámetro x. Establece la posición de izquierda a derecha relativa al
contenedor para la esquina superior izquierda del texto.
x
Parámetro y. Establece la posición de arriba a abajo relativa al contenedor
para la esquina superior izquierda del texto.
El primer método strokeText() dibujará sólo la línea perimetral de cada
carácter, mientras que el método fillText() dibujará un texto lleno con algún
color o imagen como patrón (pattern).
Las propiedades disponibles para el texto son:
x
Propiedad font. Especifica la fuente del texto del mismo modo en que se
hace en CSS.
x
Propiedad textAlign. Especifica la alineación horizontal del texto. Los
valores posibles son: start, end, left, right, center. El valor por
default es start.
x
Propiedad textBaseline. Especifica la alineación vertical del texto. Los
valores posibles son: top, hanging, middle, alphabetic,
ideographic, bottom. El valor por default es alphabetic.
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
contexto.fillStyle = '#FFCC00';
contexto.font = 'italic 30px sans-serif';
contexto.textBaseline = 'top';
contexto.fillText('Hola mundo!', 0, 0);
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
205
contexto.strokeStyle = '#FFCC00';
contexto.font = 'bold 30px sans-serif';
contexto.strokeText('Hola mundo!', 0, 50);
}
Los pasos para colocar los dos textos que se utilizaron en este ejemplo son:
1. En la etiqueta <body> se llama a la función dibuja() usando el evento
onload. Se prepara el código HTML donde se coloca el elemento <canvas>.
Este paso se dará por hecho en todos los ejemplos posteriores.
2. Se establece el estilo que se desea para los textos con las propiedades
fillStyle y strokeStyle.
3. Se selecciona la fuente que se desea usar.
4. Se indica la línea de base que se desea utilizar con la propiedad
textBaseline. Note que sólo se utilizó esta propiedad explícitamente
para el primer texto.
5. Finalmente se coloca el texto deseado.
La Fig. 9.2 muestra el resultado del ejemplo anterior en el navegador:
Fig. 9.2 Página que dibuja texto en el elemento Canvas.
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas text.html.
Actividades para el lector
1. Cree el esqueleto básico de un documento HTML5 preparado para usar un
elemento <canvas> (HTML y JavaScript).
2. En el documento creado dibuje dentro de su Canvas el texto con la leyenda
“Hola mundo”.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
206
Utilizar Canvas
9.3 Dibujar figuras rectangulares
Las únicas figuras básicas que se puede dibujar directamente utilizando la etiqueta
<canvas> son rectángulos. No se alarme, el API Canvas proporciona funciones de
dibujo por caminos que permiten hacer figuras mucho más complejas, pero eso se
verá hasta el siguiente punto.
Por ahora eche un vistazo a los rectángulos. Existen tres métodos para dibujar
rectángulos:
MÉTODOS
DESCRIPCIÓN
fillRect(x,y,ancho,alto)
Dibuja un rectángulo relleno.
strokeRect(x,y,ancho,alto)
Dibuja el contorno de un rectángulo.
clearRect(x,y, ancho,alto)
Limpia un área rectangular y la hace
totalmente transparente.
Cada una de estas funciones usa los mismos parámetros:
x
Parámetro x. Establece la posición de izquierda a derecha relativa al
contenedor, donde se colocará el ángulo superior izquierdo del rectángulo.
x
Parámetro y. Establece la posición de arriba a abajo relativa al contenedor,
donde se colocará el ángulo superior izquierdo del rectángulo.
x
Parámetro ancho. La longitud horizontal del rectángulo.
x
Parámetro alto. La longitud vertical del rectángulo.
Modificando la función dibuja() y utilizando todas las funciones para
dibujar rectángulos se ha eleborado el siguiente código:
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
contexto.fillRect(10,10,300,300);
contexto.clearRect(40,40,230,230);
contexto.strokeRect(50,50,210,210);
}
El método fillRect() dibuja un rectángulo relleno (el color por default es
negro), enseguida con la función clearRect() se crea un área rectangular
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
207
transparente sobre el rectángulo negro y finalmente se dibuja el perímetro de un
rectángulo con el método strokeRect() centrado sobre los dos anteriores. La
Fig. 9.3 muestra este código en ejecución.
Fig. 9.3 Página donde se dibujan rectángulos.
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_rect.html.
9.4 Dibujar caminos (paths)
Cuando trabaja con Canvas existen diversas funciones que pueden servir para
dibujar siluetas como a usted convenga, éstas se utilizan para realizar figuras más
complejas. El mecanismo consiste en situarse en un punto inicial dentro del Canvas,
luego definir un punto nuevo, como resultado una línea será trazada entre el
primero y el segundo, después puede elegir un tercer punto y una nueva línea será
trazada entre el segundo y el tercero, de esa manera se continúa cuantas veces sea
necesario. Puede pensar en esta lógica como hacer trazos con un lápiz de un punto
a otro sin despegar la punta del papel hasta terminar su figura.
Los métodos comunes para dibujar cualquier tipo de camino o path utilizan los
siguientes métodos:
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
208
Utilizar Canvas
MÉTODO
beginPath()
closePath()
DESCRIPCIÓN
Método que indica al contexto del Canvas
que se va a comenzar a dibujar un path.
Método que cierra un path trazando una
línea desde el punto actual al punto inicial.
stroke()
Traza sólo la línea que se ha formado tras
colocar los puntos en el camino o path.
fill()
Dibuja la figura rellena que resulta después
de trazar el camino o path con los puntos
dados.
Si mantiene presentes estos nuevos métodos, el proceso para crear un camino
o path nuevo no es muy complejo, puede seguir los siguientes pasos generales:
1. Generar todo el contexto gráfico. Hay que crear el Canvas, la referencia y el
contexto 2d.
2. Hay que indicar el estilo de la línea con la propiedad strokeStyle o si se
desea el estilo de relleno con la propiedad fillStyle para el path. Esto
puede ser un color o una imagen que trabaja como patrón (pattern).
3. Comenzar el camino. El paso con que comienza realmente a crear una ruta
es llamar al método beginPath(). Internamente, las rutas se almacenan
como una lista de subcaminos (líneas, arcos, etc.), que en conjunto forman
una figura. Cada vez que se llama a este método, esa lista se vacía y puede
empezar a dibujar nuevas figuras.
4. Continuar con el dibujo del camino. El siguiente paso es llamar a los métodos que
realmente indican la ruta que seguirá el path o camino. Estos métodos se
abordarán en breve.
5. Éste es un paso opcional, puede llamar al método closepath(). Este
método trata de cerrar la figura trazando una línea recta desde el punto
actual hasta el punto de inicio. Si la figura ya se cerró o sólo hay un punto en
el path, esta función no hará nada.
6. El último paso será llamar a los métodos stroke() y/o fill(). Cuando
se ha llamando a uno de éstos es cuando en realidad se dibuja la figura en
el lienzo o Canvas. Se utiliza stroke()para dibujar la línea perimetral de la
figura, mientras que fill() se utiliza para pintar el relleno de una figura
“sólida”.
Para darle más sentido a todo lo anterior, pondrá en práctica todo esto
mientras aprende métodos para crear diferentes caminos o paths, como por
ejemplo el mostrado en la Fig. 9.4.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
209
Fig. 9.4 Página con ejemplo del uso de caminos (paths).
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_path.html.
9.4.1 moveTo ()
Para lograr la imagen de la Fig. 9.4 se utilizó el método moveTo() el cual es muy
útil, aunque realmente no dibuja nada, sin embargo, indica dónde ubicar al primer
punto imaginario donde se comienza a hacer el path y es el primer miembro de la
lista de rutas que se mencionó anteriormente. Como ya se señaló, puede pensar en
esto como usar una pluma o un lápiz sobre un pedazo de papel que comienza a
trazar líneas de un punto al siguiente.
Recibe como parámetro los puntos x y y, que es el lugar donde ha de moverse
el puntero imaginario para comenzar un trazo. Considere el siguiente código como
ejemplo:
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
contexto.strokeStyle = "black";
contexto.beginPath();
contexto.moveTo(50,5);
contexto.lineTo(100,85);
contexto.lineTo(50,165);
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
210
Utilizar Canvas
contexto.lineTo(0,85);
contexto.fill();
}
El resultado de este código se muestra en la Fig. 9.5.
Fig. 9.5 Página con ejemplo del uso del método moveTo().
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_moveto.html
9.4.2 lines()
Para trazar líneas rectas se utiliza el método lineTo(). Este método toma dos
argumentos x y y, que son las coordenadas del punto final de la línea. El punto de
partida depende de los trazos anteriores, es decir, el punto final de la trayectoria
anterior es el punto de partida para el siguiente, etc. El punto de partida también se
puede cambiar mediante el uso del método moveTo().
Si dibujara dos triángulos, uno lleno y otro sólo con el esbozo del perímetro, en
primer lugar debe llamar al método beginPath() para iniciar un camino para una
nueva figura. A continuación se utiliza el método moveTo() para mover el punto de
partida hasta la posición deseada. Continúe con el proceso utilizando lineTo(), y
para terminar el triángulo lleno simplemente llame al método fill(). Para el caso
del triángulo sin relleno tendrá que usar una vez más moveTo()o closePath().
Observe una posible implementación de este ejemplo:
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
211
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
contexto.strokeStyle = "black";
//triángulo con relleno
contexto.beginPath();
contexto.moveTo(10,10);
contexto.lineTo(110,10);
contexto.lineTo(10,110);
contexto.fill();
//perímetro del triángulo
contexto.beginPath();
contexto.moveTo(120,10);
contexto.lineTo(220,10);
contexto.lineTo(120,120);
contexto.closePath();
contexto.stroke();
}
Notará la diferencia entre el triángulo relleno y el vacío. Esto es, como se mencionó
anteriormente, ya que las figuras se cierran automáticamente cuando el path o camino
está lleno, pero no cuando se utiliza stroke() sólo para trazar el perímetro. Si no se
hubiera utilizado closepath() para el triángulo vacío, sólo dos líneas hubieran sido
dibujadas, no un triángulo completo. El resultado del código utilizado lo puede ver en la Fig.
9.6.
Apoyo en la
Alfaomega
En los materiales adicionales encontrará el archivo:
canvas_lineto.html.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
212
Utilizar Canvas
Fig. 9.6 Página con ejemplo del uso del método lineTo().
9.4.3 arc ()
Para crear arcos y círculos se utiliza el método arc(). La sintaxis para este método
es la siguiente:
arc(x, y, radio, anguloInicio, anguloFin, sentido);
x
Parámetro x. Establece la posición de izquierda a derecha relativa al
contenedor, donde se colocará el centro del arco o círculo.
x
Parámetro y. Establece la posición de arriba hacia abajo relativa al
contenedor, donde colocará el centro del arco o círculo.
x
Parámetro anguloInicio. Define el punto inicial del arco indicado en radianes.
x
Parámetro anguloFin. Define el punto final del arco indicado en radianes.
x Parámetro sentido. Parámetro opcional, es un valor booleano (true o
false) para indicar si el arco se trazará en contra del sentido de las
manecillas del reloj (true) o en sentido de ellas (false), el valor por
default es false.
Nota
Los ángulos en el método arc() se miden en radianes, no en grados. Para
convertir grados a radianes se puede utilizar la siguiente expresión JavaScript:
variable = radianes (Math.PI/180) * grados
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
213
Para comprender mejor los radianes, así como la referencia sobre los ejes x y y
observe la Fig. 9.7.
Fig. 9.7 Visualización de ejes y radianes para un arco.
En la Fig. 9.7 tenemos varios valores de radianes:
x
0 radianes son cero grados y es el punto marcado por 0PI, en el eje de las x
y a la derecha del centro de la circunferencia.
x
0.5PI radianes son 90 grados y es el punto del eje de las y abajo del centro.
x
1PI radianes es media circunferencia o 180 grados.
x
1.5PI radianes es el equivalente a 270 grados.
x
2PI radianes son 360 grados, es decir, la circunferencia completa y corresponde con el mismo punto que los cero grados.
Analice el siguiente código que utiliza ángulos finales diferentes, para poner en
práctica todos estos parámetros, y dibujar diferentes arcos en su versión sólo de
línea de circunferencia y también con rellenos.
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
214
Utilizar Canvas
//primer arco
contexto.strokeStyle = "black";
contexto.beginPath();
contexto.arc(150,150,100,0,Math.PI*2);
contexto.stroke();
//segundo arco
contexto.strokeStyle = '#ff8800';
contexto.beginPath();
contexto.arc(150,150,80,Math.PI*0,Math.PI*1.5,false);
contexto.stroke();
//tercer arco
contexto.strokeStyle = '#ff0000';
contexto.beginPath();
contexto.arc(150,150,60,Math.PI*0,Math.PI,false);
contexto.stroke();
//cuarto arco
contexto.strokeStyle = '#00ff00';
contexto.beginPath();
contexto.arc(150,150,40,0,Math.PI*0.5,false);
contexto.stroke();
//arcos rellenos
//primer arco lleno
contexto.fillStyle = "black";
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
215
contexto.beginPath();
contexto.arc(400,150,100,0,Math.PI*2);
contexto.moveTo(400,150);
contexto.fill();
//segundo arco lleno
contexto.fillStyle = '#ff8800';
contexto.beginPath();
contexto.arc(400,150,80,Math.PI*0,Math.PI*1.5,false);
contexto.fill();
//tercer arco lleno
contexto.fillStyle = '#ff0000';
contexto.beginPath();
contexto.arc(400,150,60,Math.PI*0,Math.PI,false);
contexto.fill();
//cuarto arco lleno
contexto.fillStyle = '#00ff00';
contexto.beginPath();
contexto.arc(400,150,40,0,Math.PI*0.5,false);
contexto.fill();
}
El elemento <canvas> se hizo un poco más ancho para este ejemplo
modificando la propiedad width:
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
216
Utilizar Canvas
<canvas id="miCanvas" width="700" height="300">
<p>El elemento canvas requiere soporte HTML5<p>
</canvas>
Puede ver el resultado del código en la Fig. 9.8.
Fig. 9.8 Página con ejemplo del uso del método arc().
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_arc.html.
9.4.4 Curvas cuadráticas
Existen dos métodos para crear curvas en un Canvas, uno de ellos es para dibujar
curvas cuadráticas, que es un tipo de curva que cuenta con un punto de inicio y un
punto final, sin embargo, la línea entre estos dos puntos es afectado por un punto
de control, el método es quadraticCurveTo(). La sintaxis para este método es:
quadraticCurveTo(PuntoControl1x, PuntoControl1y, x, y)
x
Parámetro PuntoControl1x. Establece la posición de izquierda a derecha
relativa al contenedor, del punto de control.
x
Parámetro PuntoControl1y. Establece la posición de arriba hacia abajo
relativa al contenedor, del punto de control.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
217
x
Parámetro x. Establece la posición de izquierda a derecha relativa al
contenedor del punto de final de la curva.
x
Parámetro y. Establece la posición de arriba hacia abajo relativa al
contenedor del punto de final de la curva.
Cabe mencionar que el punto de control usualmente no está en la trayectoria
de la curva, es decir, este punto determina la “tendencia” de la curva. Dé un vistazo
al siguiente código, en él se incluye, además de una curva cuadrática, una función
para mostrar en dónde se encuentra el punto de control:
var micanvas;
var contexto;
function dibuja(){
micanvas = document.getElementById('miCanvas');
contexto = micanvas.getContext('2d');
contexto.strokeStyle = "black";
contexto.lineWidth = 5;
contexto.beginPath();
contexto.moveTo(50,150);
contexto.quadraticCurveTo(150,10,250,150);
contexto.stroke();
//para mostrar el punto de control
muestraPunto(150, 10, "orange");
}
function muestraPunto(x, y, color){
contexto.fillStyle = color;
contexto.beginPath();
contexto.arc(x, y, 5, 0, Math.PI*2, true);
contexto.fill();
contexto.closePath();
}
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
218
Utilizar Canvas
Una vez armado el esqueleto del archivo creando el elemento <canvas> y el
contexto gráfico en la función, el proceso de implementación de este código es
simple:
1. Se utiliza el método moveTo() para establecer la posición del puntero de
dibujo en el primer punto de la curva cuadrática.
2. Se coloca el punto de control con los primeros dos parámetros del método
quadraticCurveTo(). Ese punto no se ve explícitamente en la curva,
como se ha mencionado, simplemente sirve para definir la tendencia de la
curvatura.
3. Con los dos parámetros finales de quadraticCurveTo() se coloca el
tercer punto. Éste es el final de la curva.
La Fig. 9.9 muestra el resultado del ejemplo en el navegador:
Fig. 9.9 Página con curva cuadrática.
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_curva_cuadratica.html.
9.4.5 Curvas bezier
El segundo método para crear curvas en un Canvas es bezierCurveTo() los
parámetros son muy similares a los del método, pero este tipo de curva toma un
segundo punto de control. La sintaxis para este método es:
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
219
bezierCurveTo(PuntoControl1x, PuntoControl1y, PuntoControl2x,
PuntoControl2y, x, y)
x
Parámetro PuntoControl1x. Establece la posición de izquierda a derecha
relativa al contenedor para el primer punto de control.
x
Parámetro PuntoControl1y. Establece la posición de arriba hacia abajo
relativa al contenedor para el primer punto de control.
x
Parámetro PuntoControl2x. Establece la posición de izquierda a derecha
relativa al contenedor para el segundo punto de control.
x
Parámetro PuntoControl2y. Establece la posición de arriba hacia abajo
relativa al contenedor para el segundo punto de control.
x
Parámetro x. Establece la posición de izquierda a derecha relativa al
contenedor del punto de final de la curva.
x
Parámetro y. Establece la posición de arriba hacia abajo relativa al
contenedor del punto de final de la curva.
A continuación se propone un código para dibujar una curva bezier, y al igual
que en el ejemplo de curva cuadrática, se utiliza una función para mostrar los dos
puntos de control:
var micanvas;
var contexto;
function dibuja(){
micanvas = document.getElementById('miCanvas');
contexto = micanvas.getContext('2d');
contexto.strokeStyle = "black";
contexto.lineWidth = 5;
contexto.beginPath();
contexto.moveTo(10,100);
contexto.bezierCurveTo(110, 10, 180, 190, 290, 100);
contexto.stroke();
//para mostrar los puntos de control
muestraPunto(110, 10, "orange");
muestraPunto(180, 190, "orange");
}
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
220
Utilizar Canvas
function muestraPunto(x, y, color){
contexto.fillStyle = color;
contexto.beginPath();
contexto.arc(x, y, 5, 0, Math.PI*2, true);
contexto.fill();
contexto.closePath();
}
El mecanismo de la curva bezier es el mismo que para la curva cuadrática, a
excepción de requerir las coordenadas del segundo punto de control en el método
bezierCurveTo().
La Fig. 9.10 muestra el resultado del código del ejemplo en el navegador.
Fig. 9.10 Página con curva bezier.
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_curva_bezier.html.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
221
Actividades para el lector
1. Cree un documento y dibuje una estrella de cinco picos llena con color verde
utilize caminos.
2. Cree otro documento y dibuje un cuadro perfecto y un medio círculo sin
relleno.
9.5 Utilizar imágenes
Sin duda las imágenes han sido importantes de los documentos HTML desde
hace bastante tiempo, pero ahora con la etiqueta <canvas> las imágenes
adquieren un nuevo dinamismo integrándose a las capacidades de dibujo
vectorial, características de transformación y animación, entre otras novedades
que proporciona el elemento.
Las imágenes provenientes de archivos gráficos pueden incluirse en el área de
un elemento Canvas, de esta manera puede conseguir que sus documentos sean
más ricos que si sólo dibuja con las funciones JavaScript del API Canvas de HTML5.
Con un poco de creatividad y código JavaScript, puede lograr resultados
basados en imágenes realmente interesantes. La única restricción es que el
navegador soporte el formato de las imágenes que utiliza.
9.5.1 drawImage()
El método utilizado para dibujar una imagen dentro del lienzo formado por la
etiqueta <canvas> es drawImage(), su sintaxis es:
drawImage(objetoImagen, x, y)
x
Parámetro objetoImagen. Indica la imagen que se desea incluir dentro del
Canvas.
x
Parámetro x. Establece la posición de izquierda a derecha relativa al
contenedor para la esquina superior izquierda de la imagen.
x
Parámetro y. Establece la posición de arriba hacia abajo relativa al
contenedor para la esquina superior izquierda de la imagen.
En el siguiente ejemplo se muestra el código que utiliza drawImage() para
colocar una imagen; se emplea el objeto Image() como primera técnica para dibujar la
imagen dinámicamente sólo con JavaScript y después se usa el método
getElementById() para tomar un elemento <img> y colocarlo directamente en el lienzo:
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
222
Utilizar Canvas
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
var img = new Image();
var img2 = document.getElementById('clockwork');
//llamando a la imagen dinámicamente
img.src = 'ClockworkOrange_small.jpg';
contexto.drawImage(img, 10, 10);
//llamando a un elemento <img>
contexto.drawImage(img2 , 100, 100);
}
El código HTML que complementa este ejemplo es:
<canvas id="miCanvas" width="300" height="300">
<p>El elemento canvas requiere soporte HTML5<p>
</canvas>
<img class="hidden" id="clockwork" src="ClockworkOrange_small.jpg"
alt="ClockWork Orange" />
A continuación se proporcionan más detalladamente los pasos que se
describieron con anterioridad para implementar este ejemplo:
1.
2.
3.
Se prepara el código HTML donde además del elemento <canvas> se incluye
una etiqueta <img>, que por supuesto llama a una imagen.
En la función JavaScript se crean dos variables. La primera variable es img y
se le asigna el objeto Image de JavaScript. La segunda img2 se le asigna
directamente el elemento <img> con id con valor clockwork utilizando el
método getElementById().
Se dibuja la primera imagen de manera dinámica utilizando JavaScript. A la
propiedad src se le asigna la ruta de la imagen que se desea usar. Se utiliza
el método drawImage() usando el objeto guardado en la variable img, y las
coordenadas deseadas para la posición de la imagen.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
4.
223
Se dibuja la misma imagen, pero ahora se utiliza la variable img2 que
contiene directamente el elemento <img>. Se asigna al método
drawImage() la variable img2 y las coordenadas deseadas para la
posición de la imagen.
La Fig. 9.11 muestra el resultado del ejemplo anterior en el navegador.
Fig. 9.11 Página que dibuja imágenes en el elemento Canvas.
Apoyo en la
En los materiales adicionales encontrará los archivos:
canvas_image.html
ClockworkOrange_small.jpg
9.5.2 Escalar imagen con drawImage ()
El método drawImage() tiene algunas variantes, una de éstas permite escalar
una imagen, es decir, permite redimensionar su tamaño. El mecanismo para usar
drawImage () se mantiene, pero se agregan dos parámetros adicionales:
drawImage(objetoImagen, x, y, ancho, alto)
Observe la definición de los nuevos parámetros, para ver la definición de los
primeros véase el punto 9.4.1.
x
Parámetro ancho. Es el ancho deseado para la imagen que se desea incluir
dentro del Canvas.
x
Parámetro alto. Es la altura deseada para la imagen que se desea incluir
dentro del Canvas.
Observe el código de la función de ejemplo que se muestra a continuación:
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
224
Utilizar Canvas
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
var img = new Image();
//llamando a la imagen dinámicamente
img.src = 'ClockworkOrange_small.jpg';
contexto.drawImage(img, 10, 10, 170, 250);
}
El mecanismo no tiene ninguna diferencia con el método original, a excepción
claro de los parámetros adicionales de ancho y alto.
La Fig. 9.12 muestra el resultado esperado en el navegador.
Fig. 9.12 Página que dibuja y escala una imagen en el elemento Canvas.
Apoyo en la
En los materiales adicionales encontrará los archivos:
canvas_image_resize.html y ClockworkOrange_small.jpg
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
225
9.5.3 Recortar y dibujar parte de una imagen con drawImage ()
El último modo de invocar al método drawImage() es un poco más complejo, ya
que debe de indicar nueve datos para poder recortar y colocar la imagen antes de
dibujarla realmente en el Canvas. La sintaxis es:
drawImage(objetoImagen, imgX, imgY, imgAncho, imgAlto, x, y, ancho,
alto)
x
Parámetro objetoImagen. Indica la imagen que se desea incluir dentro del
Canvas.
x
Parámetro imgX. Establece la posición de izquierda a derecha relativa a la
imagen origen.
x
Parámetro imgY. Establece la posición de arriba hacia abajo relativa a la
imagen origen.
x
Parámetro imgAncho. Indica el ancho de la selección realizada relativa a la
imagen de origen.
x
Parámetro imgAlto. Indica el alto de la selección realizada relativa a la
imagen de origen.
x
Parámetro x. Establece la posición de izquierda a derecha relativa al
contenedor para colocar la imagen cortada.
x
Parámetro y. Establece la posición de arriba hacia abajo relativa al
contenedor para colocar la imagen cortada.
x
Parámetro ancho. Es el ancho deseado para la imagen cortada que se desea
incluir dentro del Canvas.
x
Parámetro alto. Es la altura deseada para la imagen cortada que se desea
incluir dentro del Canvas.
Observe con detenimiento la siguiente función que implementa esta
modalidad del método drawImage():
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
var img = new Image();
var img2 = document.getElementById('clockwork');
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
226
Utilizar Canvas
//llamando a la imagen dinámicamente
img.src = 'ClockworkOrange.jpg';
contexto.drawImage(img, 100, 135, 200, 70, 10, 10, 300, 95);
}
En lugar de describir los pasos realizados para crear este ejemplo, será más
claro utilizar la Fig. 9.13 como ilustración para mostrarlo de manera gráfica. En la
parte izquierda está la imagen que se utiliza, y en la parte derecha el resultado del
corte dentro del área descrita para el Canvas. Ponga especial atención en los
nombres de los parámetros:
Fig. 9.13 Se muestra el uso de los parámetros para cortar y colocar imágenes.
En la Fig. 9.14 se muestra el aspecto que debe tener la imagen cortada
cuando finalmente la coloca dentro del lienzo indicado por <canvas> en el
navegador.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
227
Fig. 9.14 Página que dibuja imágenes en el elemento Canvas.
Apoyo en la
En los materiales adicionales encontrará los archivos:
canvas_image_cut.html
ClockworkOrange.jpg
9.6 Transformaciones
Las transformaciones son operaciones matemáticas que se aplican a cualquier
dibujo o imagen que se encuentra en el área del Canvas. Se cuenta con tres tipos
de transformaciones básicas:
x
Translación. Mueve un elemento de un punto a otro.
x
Rotación. Rota sobre un punto específico.
x
Escala. Cambia el tamaño del objeto X y el objeto Y.
Quizá ya haya notado que la manipulación precisa de los gráficos dentro del
elemento <canvas> se acerca más a las matemáticas que al diseño gráfico.
Cuando transforma un objeto realmente no lo mueve, rota o escala como lo haría un
paquete gráfico, en realidad, lo que hace es modificar coordenadas y grados, de
manera que obtiene el resultado deseado, en otras palabras, está manipulando
elementos gráficos a un nivel más profundo.
Para llevar a cabo estas operaciones de manera un poco más fácil en el
contexto de Canvas, la mejor manera es manipular elementos en un sistema de
coordenadas independiente, ya sea para cada elemento o por grupos, esto con el fin
de aplicar determinadas transformaciones sólo al elemento o elementos que le
interesan sin afectar a otros. Antes de entrar de lleno a las trasformaciones se
expondrá más acerca de este mecanismo.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
228
Utilizar Canvas
9.6.1 Guardar y restaurar el estado
Antes de examinar los métodos de transformación, conozca dos métodos que serán
indispensables una vez que comience a generar dibujos de mayor complejidad:
save()
restore()
Los métodos save() y restore() se utilizan para guardar y recuperar un
sistema de coordenadas. Puede ver un sistema de coordenadas dentro de un Canvas
como una fotografía instantánea de todos los estilos y transformaciones que se han
aplicado en él. Ambos métodos no requieren parámetros.
Cuando se llama al método save() todos los dibujos en el sistema de
coordenadas actual se guarda en una pila o matriz de datos, esto incluye las
transformaciones, estilos y valores en general que se hayan utilizado.
Puede llamar al método save() cuantas veces sea necesario. El método
restore() recuperará el último estado guardado y todos los datos almacenados,
en esa posición de la pila se restauran. Un ejemplo sencillo para mostrar esta lógica:
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
//rectángulo con estado inicial
contexto.fillStyle = '#FFAC42';
contexto.fillRect(0,0,200,200);
//guarda el estado incial del sistema de coordenadas
contexto.save();
//se hacen los cambios deseados
contexto.fillStyle = '#6600FF';
contexto.fillRect(10,10,150,150);
//guarda el estado actual (con los cambios indicados)
contexto.save();
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
229
//una vez más se hacen los cambios deseados
contexto.fillStyle = '#eeee33';
contexto.fillRect(20,20,112,112);
//restaura el último estado guardado
contexto.restore();
//dibuja rectángulo con los cambios hechos en el estado
restaurado
contexto.fillRect(30,30,84,84);
//restaura el estado inicial
contexto.restore();
//dibuja rectángulo con los valores de estado incial (que es el
estado restaurado)
contexto.fillRect(40,40,63,63);
}
Lo que sucede en este código se puede resumir en los pasos siguientes:
1. Se dibuja un rectángulo lleno convencional con un color específico, en este
caso es un color de tono naranja.
2. Se guarda el estado con el método save(). Es aquí cuando comienza a
hacer cambios en un nuevo sistema de coordenadas, ya que el original ha
quedado guardado en la memoria.
3. Se dibuja un nuevo rectángulo con un color morado en el nuevo sistema de
coordenadas que se obtuvo desde el paso anterior.
4. Una vez más se guarda el sistema de coordenadas actual con el método
save().
5. Se dibuja otro nuevo rectángulo con color amarillo en el nuevo sistema de
coordenadas que se obtuvo desde el paso anterior.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
230
Utilizar Canvas
6. Ahora se utiliza por primera vez el método restore(). Con esto se
recupera el último sistema de coordenadas guardado. Una vez restaurado
un estado se elimina de la pila de almacenamiento.
7. Se dibuja un nuevo rectángulo de color morado, pero note que este
rectángulo ya no requiere de especificar de nuevo el color de relleno. Esto
sucede porque el sistema de coordenadas restaurado contiene todos los
cambios realizados en él.
8. Por segunda vez se llama al método restore() para restaurar al primer
estado guardado que encuentre, que en este caso será el estado del
sistema de coordenadas original.
9. Una vez más se dibuja un rectángulo que no requiere especificar el color de
relleno, ya que toma el que se indicó en el estado del sistema de coordenadas
restaurado, es decir, el rectángulo vuelve a ser naranja.
La Fig. 9.15 muestra el resultado del código descrito.
Fig. 9.15 Página que guarda y restaura estados en el elemento Canvas.
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_save_restore.html
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
231
9.6.2 translate ()
El primero de los métodos de transformación que se analizará será translate().
Este método se utiliza para mover el sistema de coordenadas actual y su contenido
a un punto diferente. Su sintaxis es simple:
translate(x, y)
Sólo usa dos argumentos: x sirve para elegir el nuevo destino del eje de
coordenadas con base en la línea horizontal de izquierda a derecha, y el parámetro
y para determinar la nueva posición vertical de arriba hacia abajo.
Lo mejor que puede hacer cuando desea usar una transformación es guardar
el estado del sistema de coordenadas de manera previa, ya que en la mayoría de los
casos, es más fácil llamar al método restore()que hacer un translate() con
valores para volver al estado original. También si usted está usando translate()
en un bucle y no guardar y restaura el estado actual del sistema de coordenadas en
el Canvas, se puede perder parte de su dibujo, ya que podría quedar fuera de la
cuadrícula.
Observe el siguiente código:
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
var img = new Image();
//se guarda el sistema de coordenadas original
contexto.strokeStyle = "orange";
contexto.save();
//mover sistema de coordenadas
contexto.translate(50, 50);
//llamando a la imagen dinámicamente
img.src = 'ClockworkOrange_small.jpg';
contexto.drawImage(img, 0, 0);
contexto.restore();
contexto.strokeRect(0, 0, 300, 300);
}
Lo que sucede en este ejemplo es que después de crear todo lo necesario
para dibujar es:
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
232
Utilizar Canvas
1. Se establece un estilo de línea perimetral de color naranja.
2. Se guarda el estado con el método save().
3. Se llama al método translate () y se ubica al sistema de coordenadas en
50,50
4. Se dibuja una imagen, note que se utilizan los valores 0,0 para los
parámetros x, y. Esto, sin embargo, equivale a dibujar una imagen en 50,50
en el sistema de coordenadas original, pero dado que hemos transladado la
actual cuadrícula a 50,50, el valor apropiado en este nuevo contexto es 0,0.
5. Se dibuja el perímetro de un rectángulo abarcando toda el área del
elemento <canvas>, pero note que previamente se restauró el sistema de
coordenadas original con el método restore(). De no haber restaurado
previamente se hubiera perdido parte de este rectángulo, ya que se hubiera
ubicado en las coordenadas de la cuadrícula con transformación y no en la
original.
La Fig. 9.16 muestra el resultado del código descrito.
Fig. 9.16 Página con transformación Translate.
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_translate.html
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
233
9.6.3 rotate ()
El segundo método de transformación es rotate(). Se utiliza para girar el lienzo
alrededor de la posición 0,0 del sistema de coordenadas actual. Su sintaxis es
bastante sencilla:
rotate(ángulo)
Este método sólo toma un parámetro que representa el ángulo del sistema de
coordenadas que se gira. Éste es un giro en el sentido de las manecillas del reloj y
se mide en radianes.
El punto central de la rotación es siempre el origen 0,0 del sistema de
coordenadas. Para cambiar el punto central, tendrá que mover el lienzo mediante el
uso del método translate().
Vea y analice el siguiente código:
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
var img = new Image();
//se guarda el sistema de coordenadas original
contexto.strokeStyle = "orange";
contexto.save();
//mover sistema de coordenadas
contexto.translate(50, 50);
//rotar 315 grados
contexto.rotate(Math.PI * 1.75);
//llamando a la imagen dinámicamente
img.src = 'ClockworkOrange_small.jpg';
contexto.drawImage(img, 0, 0);
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
234
Utilizar Canvas
contexto.restore();
contexto.strokeRect(0, 0, 300, 300);
}
El ejemplo es igual al que se utiliza para el método translate() pero
inmediatamente después de mover el sistema de coordenadas se ha añadido el
método rotate(), que en este caso girará la imagen 315 grados a la derecha.
La Fig. 9.17 muestra cómo se ve este ejemplo en el navegador.
Fig. 9.17 Página con transformación Rotate.
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_rotate.html
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
235
9.6.4 scale ()
El siguiente método de transformación es Scale(). Sirve para aumentar o
disminuir las dimensiones del sistema de coordenadas actual. El método puede ser
utilizado para dibujar versiones reducidas o ampliadas de figuras vectoriales y
mapas de bits. Su sintaxis es:
scale(escalaX, escalaY)
Este método tiene dos parámetros. escalaX, que es el factor de escala en la
dirección horizontal y escalaY es el factor de escala en la dirección vertical. Ambos
parámetros deben ser números reales, y no necesariamente positivos. Valores
inferiores a 1.0 reducen el tamaño del sistema de coordenadas y los valores
mayores a 1.0 lo aumentan de tamaño. Establecer el factor de escala con valor 1.0
no afecta el tamaño. El uso de números negativos puede hacer un efecto de espejo
(por ejemplo, utilizando translate(0, canvas.height) y scale(1, -1),
usted tendrá al sistema de coordenadas actual, con origen en la esquina inferior
izquierda).
Por defecto una unidad en el Canvas es exactamente un pixel. Si se aplica, por
ejemplo, un factor de escala de 0.5, la unidad resultante se convertiría en 0.5
pixeles y por lo tanto las figuras se establecerían en la mitad del tamaño. De manera
similar el ajuste del factor de escala a 2.0 incrementaría el tamaño de la unidad y
una unidad actual se convierte en dos pixeles. Esto se traduce en figuras que se
dibujan dos veces más grandes.
Considere como ejemplo el siguiente código:
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
var img = new Image();
//se guarda el sistema de coordenadas original
contexto.strokeStyle = "orange";
contexto.save();
//mover sistema de coordenadas
contexto.translate(50, 50);
//escala el sistema de coordenadas 50% más
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
236
Utilizar Canvas
contexto.scale(1.5,1);
//llamando a la imagen dinámicamente
img.src = 'ClockworkOrange_small.jpg';
contexto.drawImage(img, 0, 0);
contexto.restore();
contexto.strokeRect(0, 0, 300, 300);
}
El ejemplo también se utilizó para el método translate(), pero en este
caso después de mover el sistema de coordenadas se agrega el método
scale(), que aumentará un 50% más de longitud a lo ancho al sistema de
coordenadas actual.
La Fig. 9.18 muestra cómo se ve este ejemplo en el navegador.
Fig. 9.18 Página con transformación Scale.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
237
Actividades para el lector
1. En un nuevo documento HTML5 coloque de manera centrada una imagen
dentro de un elemento <canvas>.
2. Aplique transformaciones de movimiento, rotación y escala a la imagen
insertada.
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_scale.html
9.7 Animación
Una de las grandes preguntas cuando se trata este tema en HTML5 es si esto es lo
suficientemente bueno para sustituir a Flash como recurso para crear animaciones
y juegos. Podrá escuchar o leer muchas opiniones al respecto, pero la realidad es
que la respuesta está aún por contestarse.
A diferencia de HTML5, Flash fue concebido desde el principio como una
herramienta para crear animaciones, que poco a poco ha ido adquiriendo mayor
poder vía programación. Canvas, por otro lado, se diseñó para controlar su
contenido vía la programación con un script desde el principio, por lo que hay
limitaciones en cuanto a la animación pura se refiere.
Quizá la mayor limitación es que una vez que se ha dibujado alguna figura, se
mantiene en su forma original. Si tiene que mover la figura, entonces tiene que
volver a dibujarla junto con todo lo que había dibujado antes. Por tanto, se necesita
mucho tiempo para volver a dibujar los fotogramas complejos, además de que los
resultados dependen en gran medida del rendimiento del equipo de cómputo que
los ejecute en ese momento.
Los pasos básicos para realizar una animación son:
1. Inicialización. Es la creación de todos los recursos necesarios, como
imágenes de fondo o cualquier otro objeto que se vaya a utilizar. Los objetos
a los cuales se les hace algún tipo de manipulación en tiempo real
comúnmente se les llama sprites. Normalmente el proceso de inicialización
tiene lugar la primera vez que el código se ejecuta para animar y se
aprovecha para definir valores que no cambiarán a lo largo de la animación.
2. Velocidad de los fotogramas (frame rate). Las animaciones en general
trabajan llamando a un cuadro o fotograma (frame en inglés) cada cierta
cantidad de tiempo. En HTML5 por lo general usted llamará a una función
repetidamente para formar un fotograma. La función que usará por lo
general es setInterval () con la cual llamará a otra función cada cierto
intervalo de tiempo. Entre más corto sea este intervalo más alto será la
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
238
Utilizar Canvas
velocidad en que llama al fotograma, es decir, su frame rate será más alto.
Debe tener en cuenta que a mayor frame rate más recursos de cómputo
consumirá.
3. Evaluación y creación del contenido del fotograma. Debe analizar qué
objetos va a incluir en el fotograma actual y por qué. Una vez tomadas las
decisiones generales, proceda a colocar los objetos pertinentes.
4. Guardar el estado. Si desea que algo de lo que ha hecho en el fotograma
actual persista en los siguientes debe salvar el estado.
5. Limpiar el nuevo fotograma. Si ha cambiado de fotograma para iniciar uno
nuevo, normalmente comenzará limpiándolo para deshacerse de elementos
del fotograma anterior.
6. Dibujar nuevamente sprites y/o restaurar el estado guardado. Puede
restaurar un estado anterior para recuperar algo que le interesa mantener
en el fotograma nuevo (como una imagen de fondo). Enseguida vuelva a
dibujar los sprites que deben sufrir alguna modificación de localización,
orientación, etcétera.
9.7.1 Control de una animación
Las figuras se dibujan en el área <canvas> mediante el uso directo de los métodos
del objeto Canvas o llamando a funciones personalizadas. En circunstancias
normales, sólo verá que los resultados aparecen en el Canvas cuando el script
finaliza la ejecución. Por ejemplo, no es posible hacer una animación desde un
bucle.
Por lo anterior, necesita una manera de ejecutar sus funciones de dibujo en un
periodo. Existen dos formas de controlar una animación como ésta. Tenemos las
funciones setInterval() y setTimeout() que se pueden utilizar para llamar
a una función específica durante un periodo determinado. La sintaxis de estas
funciones es:
setInterval(funciónDibuja, milisegundos);
setTimeout(funciónDibuja, milisegundos);
Ambas funciones utilizan los mismos parámetros:
x
Parámetro funciónDibuja. Indica a qué función debe llamarse para dibujar
elementos.
x
Parámetro milisegundos. Para setInterval() establece cada cuántos
milisegundos se llama a la función indicada. Para setTimeout() indica
después de cuántos milisegundos se llamará una sola vez a la función
indicada.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
239
Si no desea ninguna interacción con el usuario, lo más adecuado es utilizar la
función setInterval() que ejecuta repetidamente el código de la función a la que
llama.
El segundo método se puede utilizar para controlar una animación respondiendo
a un evento disparado por el usuario. Si deseara hacer un juego, podría utilizar los
eventos del teclado o el ratón para controlar la animación. Preparando configuración
de eventos para la captura de cualquier interacción del usuario puede ejecutar sus
funciones de animación.
En los siguientes ejemplos se utiliza el primer método para controlar la
animación.
Ejemplo 1
Observe el siguiente código ejemplo donde se creará un reloj con una manecilla
rotando al marcar los segundos:
var reloj = new Image();
var manecilla = new Image();
function inicia(){
reloj.src = 'reloj_base.png';
manecilla.src = 'reloj_manecilla1.png';
setInterval(dibuja,100);
}
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto= micanvas.getContext('2d');
var img = new Image();
//para que las nuevas figuras aparezcan detrás de las más nuevas
contexto.globalCompositeOperation = 'destination-over';
//para limpiar el canvas
contexto.clearRect(0,0,300,300);
contexto.fillStyle = 'rgba(0,0,0,0.4)';
contexto.strokeStyle = 'rgba(0,153,255,0.4)';
contexto.save();
contexto.translate(150,148);
// Manecilla
var tiempo = new Date();
/*
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
240
Utilizar Canvas
Math.PI*2
es igual a una vuelta completa
Math.PI*2/60 para obtener la fraccion de grados por un segundo
multiplica los grados por segundo por los segundos actuales
según el la hora enviada por el navegador (tiempo.getSeconds())
*/
contexto.rotate( (Math.PI*2/60) * tiempo.getSeconds());
contexto.drawImage(manecilla,0,0);
contexto.restore();
contexto.drawImage(reloj,39,39);
}
Observe que en el código anterior se usan dos funciones: inicia() y
dibuja(). A diferencia de los ejemplos anteriores, el evento onload del elemento
<body> llama a inicia() en lugar de dibuja(), para así cumplir con los dos
primeros pasos descritos anteriormente.
El código en la función dibuja() no hace nada nuevo en realidad, la única
novedad es que se utiliza una fórmula un poco más elaborada para determinar el
ángulo en radianes para la transformación rotate() con base en la hora
proporcionada por el navegador, con el uso del objeto Date() de JavaScript y su
método getSeconds() para extraer los segundos de la hora obtenida.
La Fig. 9.19 muestra el código del ejemplo en ejecución.
Fig. 9.19 Página que muestra una animación en Canvas.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
Apoyo en la
241
En los materiales adicionales encontrará los archivos:
canvas_animacion1.html
reloj_base.png
reloj_manecilla1.png
Ejemplo 2
En este ejemplo verá cómo se dibujan veinte círculos para crear el efecto de
burbujas flotando:
var width = 300;
var height = 300;
var items = new Array();
function burbuja(x,y,w,h,paso){
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.paso = paso;
}
function inicia(){
for (i = 0; i < 20; i++) {
x = Math.floor(Math.random()*(width + 1)); // 0-width;
y = Math.floor(Math.random()*(height + 1)); // 0-height;
w = Math.floor(Math.random()*30) + 1; // 1-30;
h = Math.floor(Math.random()*51) + 50; // 50-100
paso = Math.floor(Math.random()*9) - 4; // -4 - 4
var esta_burbuja = new burbuja(x, y, w, h, paso);
items.push(esta_burbuja);
}
setInterval(dibuja,100);
}
function dibuja(){
var micanvas = document.getElementById('miCanvas');
var contexto= micanvas.getContext('2d');
//para limpiar el canvas
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
242
Utilizar Canvas
contexto.clearRect(0,0,300,300);
contexto.fillStyle = "orange";
for (i in items) {
contexto.beginPath();
contexto.arc(items[i].x, items[i].y, items[i].w, 0, Math.PI*2,
true);
contexto.fill();
items[i].y = items[i].y + items[i].paso;
if (items[i].y > height + items[i].w)
items[i].y = -items[i].w;
else if (items[i].y < -items[i].w)
items[i].y = height + items[i].w;
}
}
Este ejemplo muestra lo que es posible hacer sólo redibujando los elementos
que desee sin guardar ni restaurar ningún elemento de fotogramas anteriores. En
este caso se dibujan una serie de círculos de color naranja con algunas propiedades
al azar, que varían su posición vertical en el eje Y.
La Fig. 9.20 muestra el ejemplo en el navegador.
Fig. 9.20 Página que muestra una animación en Canvas.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
243
Apoyo en la
En los materiales adicionales encontrará el archivo:
canvas_animacion2.html
Ejemplo 3
Finalmente. en el último ejemplo se utiliza la función setTimeout () para
controlar el tiempo que debe de pasar antes de dibujar un nuevo fotograma. En este
caso se tiene la imagen de una mira de tiro que reacciona cuando el usuario mueve
las teclas direccionales:
window.addEventListener('keydown',aplicaKeyDown,true)
var width = 300;
var height = 300;
var mira = new Image();
var fondo = new Image();
var miraObj = {x:100, y:100};
function inicia(){
mira.src = 'target-100.png';
fondo.src = 'duck_hunt_wallpaper_1600x1200.png';
dibujaMira();
}
function dibujaMira(){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
contexto.drawImage(mira , miraObj.x, miraObj.y);
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
244
Utilizar Canvas
}
function mueveMira(dir){
var micanvas = document.getElementById('miCanvas');
var contexto = micanvas.getContext('2d');
contexto.clearRect(miraObj.x,miraObj.y,100,100);
if(dir == 'arriba'){
if(miraObj.y > 0){
miraObj.y -= 10;
}
}
if(dir == 'abajo'){
if(miraObj.y < (height - mira.height) ){
miraObj.y += 10;
}
}
if(dir == 'izquierda'){
if(miraObj.x > 0){
miraObj.x -= 10;
}
}
if(dir == 'derecha'){
if(miraObj.x < (width - mira.width) ){
miraObj.x += 10;
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
245
}
}
setTimeout(dibujaMira,100)
}
function aplicaKeyDown(evt){
//alert(evt.keyCode);
if(evt.keyCode == 38)
mueveMira('arriba')
if(evt.keyCode == 40)
mueveMira('abajo')
if(evt.keyCode == 37)
mueveMira('izquierda')
if(evt.keyCode == 39)
mueveMira('derecha')
}
En el código anterior en la función mueveMira() se llama a setTimeout()
para que después de un periodo de 100 milisegundos llame a la función que dibuja
el siguiente fotograma.
La Fig. 9.21 muestra el código desplegado en el navegador.
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
246
Utilizar Canvas
Fig. 9.21 Animación que utiliza el método setTimeout() en Canvas.
Apoyo en la
En los materiales adicionales encontrará los archivos:
canvas_animacion3.html
target-100.png
Actividades para el lector
1. Elabore un documento con una animación donde desplace un círculo a lo
ancho del área de un elemento <canvas> con 700 pixeles de longitud de
izquierda a derecha.
2. Usando el documento anterior como base construya otro donde el círculo en
movimiento al llegar al lado derecho desaparezca y surja de nuevo por el
lado izquierdo para reiniciar el recorrido.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
247
RESUMEN
En este capítulo se han mostrado las bases indispensables para elaborar gráficos y
animaciones utilizando las prestaciones del API Canvas de HTML5, cubriendo los
siguientes puntos:
x
La manera de crear figuras rectangulares sólo con líneas perimetrales o
llenas con color.
x
La manera de crear diversos tipos de caminos para crear figuras de mayor
complejidad.
x
El uso de imágenes dentro del elemento Canvas.
x
Las transformaciones fundamentales que se pueden aplicar sobre los
gráficos en un Canvas.
x
Los fundamentos de las técnicas de animación utilizadas en el elemento
Canvas.
Autoevaluación
1. ¿Qué es el elemento Canvas?
2. ¿Cuál es la diferencia entre las propiedades strokeStyle y fillStyle?
3. ¿Por qué no existe un método para crear círculos, como sucede con los
rectángulos?
4. ¿Qué son los caminos o paths?
5. ¿Qué es una transformación?
6. ¿Cuál es la diferencia entre los métodos setInterval() y setTimeout()?
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
248
Utilizar Canvas
EVIDENCIA
Construyó una página con los elementos de curvas bezier dibujo una
estrella de cinco picos rena con color verde.
Creó un documento donde dibujó una cuadrícula de 2 por 2 cuadros.
Elaboró una página con animación donde se muestra un círculo
desplazándose de manera horizontal a lo largo de un Canvas de 700
pixeles de ancho.
Elaboró una versión de la actividad anterior, donde el círculo
desaparece al llegar al extremo derecho del mismo Canvas y aparece
de nuevo en el lado izquierdo.
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
Alfaomega
Utilizar Canvas
249
REFERENCIAS
Bibliografía
Fulton, Steve, Jeff Fulton (2011), HTML5 Canvas, 1a. ed., O’Reilly, EUA.
Harris, Andy (2011). HTML5 for Dummies, 1a. ed., Willey Publishing, EUA.
Pilgrim, Mark (2010). HTML5: Up and Running, 1a. ed., O’Reilly, EUA.
Páginas Web recomendadas
http://sixrevisions.com/html/canvas-element/
http://www.html5canvastutorials.com/
http://www.w3schools.com/html5/html5_canvas.asp
http://dev.opera.com/articles/view/html-5-canvas-the-basics/
Alfaomega
ARRANCAR CON HTML5. CURSO DE PROGRAMACIÓN – EMMANUEL HERRERA
250
Utilizar Canvas
Respuestas sugeridas a las preguntas de autoevaluación
1. Es un elemento o etiqueta HTML5 (<canvas>) que utiliza JavaScript para dibujar
gráficos en una página web.
2. Cuando utiliza la propiedad strokeStyle se define el estilo sólo para la línea
perimetral de un figura, si utiliza fillStyle entonces se definirá el estilo de
relleno de la figura.
3. En el contexto del API Canvas de HTML5 es redundante, ya que la función
arc()establece a un círculo como un arco con ángulo de 360 grados.
4. Un path o camino es básicamente una secuencia de líneas que se conectan
sucesivamente para formar diferentes figuras.
5. Una transformación es cuando algún elemento en un Canvas es afectado en su
forma, color o posición.
6. El método setInterval() llamará a una función repetidas veces en el
intervalo de tiempo indicado, mientras que setTimeout() llamará a la
función señalada sólo una vez y después de que transcurra el tiempo indicado.
Descargar