Jorge Hoya
Servicio de Informática de la Universidad de Cantabria
Web: http://www.jorgehoya.es/
Email: jorge.hoya@gestion.unican.es
Versión imprimible
For handouts, its often useful to include extra notes using a div element with class="handout" following each slide, as in:
Desde la publicación de HTML 4.01, la actividad de estandarización de HTML se detuvo y el W3C se centró en el desarrollo del estándar XHTML. Por este motivo, en el año 2004, las empresas Apple, Mozilla y Opera mostraron su preocupación por la falta de interés del W3C en HTML y decidieron organizarse en una nueva asociación llamada WHATWG (Web Hypertext Application Technology Working Group), cuya actividad actual se centra en el futuro estándar HTML 5, del que se publicó un primer borrador oficial el 22 de enero de 2008. Debido a la fuerza de las empresas que forman el grupo WHATWG y a la publicación de los borradores de HTML 5.0, en marzo de 2007 el W3C decidió retomar la actividad estandarizadora de HTML.
HTML = CONTENIDOS
CSS = PRESENTACIÓN
El desarrollo Web siguiendo los estándares deberá ser vuestro modo de vida, no debiérais crear página HTML alguna sin tenerlos siempre en mente.
¿Por qué se debe especificar el doctype? Porque determina qué versión de (X)HTML utiliza el documento, y esa es una información clave que necesitan los navegadores u otras herramientas que procesen el documento.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <!-- HTML 4.01 Strict --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!-- HTML 4.01 Transitional --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> <!-- HTML 4.01 Frameset --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!-- XHTML 1.0 Strict --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!-- XHTML 1.0 Transitional --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> <!-- XHTML 1.0 Frameset --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <!-- XHTML 1.1 --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"> <!-- XHTML Basic 1.1 --> <!DOCTYPE HTML> <!-- HTML5 -->
<!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN" "http://www.w3.org/TR/MathML2/dtd/mathml2.dtd"> <!DOCTYPE math SYSTEM "http://www.w3.org/Math/DTD/mathml1/mathml.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
Documento XHTML 1.0 mínimo.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <title> mundo</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> </head> <body> <p> mundo</p> <!-- comentario --> </body> </html>
Documento HTML 4.01 mínimo.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <HTML> <HEAD> <TITLE>My first HTML document</TITLE> </HEAD> <BODY> mundo <!-- comentario --> </BODY> </HTML>
Documento HTML 5 mínimo.
<!DOCTYPE html> <head> <title> mundo</title> </head> <body> <p> mundo</p> </body> </html>
Trabajaremos con XHTML 1.0 Strict (el transational debe ser usado como tránsito entre el HTML 4 y el XHTML 1). Además de las etiquetas que XHTML declara como obsoletas, las principales diferencias son:
Más información en la Especificación del XHTML1 en W3C
Ejemplos
<br /> <input type="submit" value="Enviar" id='p' /> <textarea readonly="readonly">Solo-lectura</textarea>
Un ejemplo algo más completo
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <title> mundo</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <!-- capa de presentacion --> <link rel="stylesheet" type="text/css" title="Hoja de estilos por defecto" href="css/style.css" media="print,screen" /> <link rel="alternate stylesheet" type="text/css" title="Hoja de estilos opcional" href="css/style2.css" media="screen" /> <link rel="shortcut icon" href="img/favicon.ico" /> <link rel="next" title="Pagina siguiente" href="pagina_siguiente.jsp" /> <!-- información para los buscadores --> <meta name="keywords" content="palabras separadas por comas que estén vinculadas con la Web" /> <meta name="description" content="Descripción de la Web de unos 50-150 caracteres" /> <meta name="author" content="Mr. Bing" /> <!-- inclusion de javascript --> <!-- CDATA: el texto que le sigue será excluido del parser XML --> <script type="text/javascript"> <![CDATA[ function matchwo(a,b) { if (a < b && a > 0) { return 1; } else { return 0; } } ]]> </script> </head> <body> <p> mundo</p> <!-- comentario --> </body> </html>
Ejemplo de documento web con posibilidad de escoger el CSS a utilizar.
<h1>Encabecado de primer nivel</h1> - <h2>Encabecado de segundo nivel</h2> <ul> <li>Primer elemento</li> <li>Segundo elemento</li> </ul> <a href="http://www.unican.es/" title="Texto descriptivo del enlace">Universidad de Cantabria</a> <a href="#punto-de-destino-interno" title="">Enlace interno</a> <a name="punto-de-destino-interno"></a> <!-- ancla o punto de destino interno -->
a:active { color: #02293F; } a:link { color:#C6EAF9; } a:visited { color: #ccc;} a:hover { color: #990000;}
01: Código HTML y estructura semántica
La inclusión de las hojas de estilo en cascada, CSS, en nuestros documentos se hará dentro del bloque head de nuestra página (aunque los navegadores modernos son capaces de interpretarlas si se añaden dentro del body)
<!-- inserción de CSS en un documento HTML --> <link rel="[alternate] stylesheet" type="text/css" title="Hoja de estilos por defecto" href="css/style.css" media="print,screen" /> <style type="text/css"> @import url("css/style.css") print /* Problemas con IE */ </style> <style type="text/css" media="print"> @import url("css/style.css") </style> <style type="text/css"> /* instrucciones CSS */ </style>
Estructura de un documento CSS
/* Comentario en un documento CSS */ h1{} /* redefinición de una etiqueta HTML */ #footer{} /* definición de un elemento existente en el HTML con id="footer" (=selector)*/ .nombreDeClase{} /* definición de una clase */ a:hover, /* definición de una pseudo-clase */ a:link, a:visited, a:active, a:focus{} #footer ul li span:first-child{} /* definición del comportamiento visual de la primera etiqueta span que esté dentro de un elemento de lista en el elemento HTML con id = 'footer' */ .resaltado { font-family: "Vistant Malinkus Gran", Tahoma, Verdana, sans-serif; font-size: 100%; /* ó 0.8em ó 9px */ /* IMP!!! */ font-weight: bold; font-style: italic; text-transform: uppercase; text-align: right; background-color: #990099; /* rgb(0,150,255)*/ background: #990099 url("url_a_la_imagen") top left no-repeat; color: #000; vertical-align: super; }
<p class="resaltado">Texto del párrafo al que aplicamos el estilo 'resaltado'</p> <p id="footer">Texto del párrafo identificador como 'footer'</p>
Una vez que el agente de usuario ha analizado el documento y construido el arbol del documento, debe establecer, para cada elemento del árbol, un valor para cada propiedad que le asigna cada tipo de 'media'. Este valor final de la propiedad es el resultado de un cálculo de 4 pasos:
Examinando la herencia con Firebug:
3.4 Utilice unidades relativas en lugar de absolutas al especificar los valores en los atributos de los marcadores de lenguaje y en los valores de las propiedades de las hojas de estilo. [Prioridad 2]
Qué significa:
La maquetación, la presentación y los contenidos de texto de una página deben tener la posibilidad de adaptación a la interfaz utilizada por el usuario, sin superposiciones o perdida de informaciones en caso de redimensionamiento (ampliación o reducción de visualización y/o de los carácteres).
Marco Giacomuzzi
Esquema del modelo de caja de la W3C
Los elementos HTML se puede agrupar en dos grupos: aquellos que de por sí son considerados como bloques, o cajas, (div, p, blockquote, h1, etc) y los que lo son como elementos de línea (span)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <title>CSS: elementos de bloque y en línea</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <style type="text/css"> body { font-family: "Lucida Sans Unicode", Tahoma, Verdana, sans-serif; font-size: 80%; } h1 { font-weight: normal; text-align: center; border: 1px solid green; } div, .resaltado { border: 0.05em solid red; /* En Chrome no se ven los bordes */ border: 1px solid red; margin:0.5em; } </style> </head> <body> <div id="layout"> <div id="header"> <h1>CSS: elementos de bloque y en línea</h1> </div> <div id="content"> <p><span class="resaltado">Cabárceno</span> entrenó a los dos leones marinos invidentes que fueron rechazados en otro parque. Él es el doble de grande que su amiga, y cada noche le guarda un sitio fijo a su lado para que se...</p> </div> <div id="footer"> <p> </p> </div> </div> </body> </html>
Cuando el contenido sobrepasa las dimensiones indicadas podemos configurar cómo debe, el navegador, comportarse a tal efecto.
Permite definir la visibilidad de un objeto. De todos sus posibles valores los más usados son:
Permite establecer la ubicación de los elementos dentro de la pantalla.
El valor de la propiedad z-index especifica el nivel de apilamiento de los elementos que están siendo posicionados.
Permite establecer si un elemento de bloque puede flotar respecto a otros.
La propiedad clear: left/right/both; sirve para eliminar el flotado de elementos.
Ejemplo de tabla en la que establecemos los atributos frame y rules.
1 | 2 | 3 |
4 | 5 | 6 |
7 | 8 | 9 |
<table border="5" frame="vsides" rules="cols"> <tr> <td>1 <td>2 <td>3 <tr> <td>4 <td>5 <td>6 <tr> <td>7 <td>8 <td>9 </table>
Vamos a ver una tabla de ejemplo que utiliza lo antes descrito.
Primer y Segundo Ciclo | Espacio Europeo | Tercer Ciclo | ||
---|---|---|---|---|
Grado | Doctorado | Doctorado Antigüo | Estudios Propios | |
Total: 2 | Total: 4 | Total: 4 | Total: 3 | Total: 3 |
Manuel Pérez | Alberto Romón | Luis Roberto Merino | María Manteca | |
Antonio Machado | Antonio Iglesias | Jordi Estadella | Mariano Rajoy | |
Maria Iglesias | Jordi Estadella | Jose Luís Rodriguez Zapatero | Mariano Rajoy | |
2 Antonio Iglesias | Jordi Estadella | Jose Luís Rodriguez Zapatero | Mariano Rajoy |
Veamos el código del ejemplo anterior:
<table summary="Pequeña descripción sobre el contenido de la tabla para los agentes de usuario" border="1"> <caption>Listado de alumnos de la UC</caption> <thead> <!-- A la hora de imprimir, si la tabla se parte nos incluirá en cada hoja el thead y el tfoot, excepto con IE --> <tr> <th scope="col">Primer y Segundo Ciclo</th> <th colspan="2" scope="colgroup">Espacio Europeo</th> <th colspan="2" scope="colgroup">Tercer Ciclo</th> </tr> <tr> <th /> <th scope="col">Grado</th> <th scope="col">Doctorado</th> <th scope="col">Doctorado Antigüo</th> <th scope="col">Estudios Propios</th> </tr> </thead> <tfoot> <!-- A la hora de imprimir, si la tabla se parte nos incluirá en cada hoja el thead y el tfoot, excepto con IE --> <tr> <td>Total: 2</td> <td>Total: 4</td> <td>Total: 4</td> <td>Total: 3</td> <td>Total: 3</td> </tr> </tfoot> <tbody> <tr> <td>Manuel Pérez</td> <td>Alberto Romón</td> <td>Luis Roberto Merino</td> <td>María Manteca</td> <td /> </tr> <tr> <td>Machado</td> <td>Maria Iglesias</td> <td>Jordi Estadella</td> <td /> <td>Mariano Rajoy</td> </tr> <tr> <td /> <td>Antonio Iglesias</td> <td>Jordi Estadella</td> <td>Jose Luís Rodriguez Zapatero</td> <td>Mariano Rajoy</td> </tr> </tbody> <tbody> <tr> <td /> <td>2 Antonio Iglesias</td> <td>Jordi Estadella</td> <td>Jose Luís Rodriguez Zapatero</td> <td>Mariano Rajoy</td> </tr> </tbody> </table>
Las Tablas son elementos HTML destinados a la presentación de datos tabulares, no para maquetar. ( Linearización de la UC). Pautas de accesibilidad:
Una correcta sintaxis del formulario impone que se tenga en cuenta:
Vinculación explícita
<form name="frmPrueba"> <label>Nombre: <input type="text" name="txtNombre" value="Indica tu nombre" tabindex="1" /></label> </form>
Vinculación implícita
<form name="frmPrueba"> <label for="txtNombre">Nombre: </label><input type="text" name="txtNombre" id="txtNombre" value="Indica tu nombre" tabindex="1" /> </form>
Puntos de verificación según las WCAG 1.0
Posible solución: Periódico de la UC
Especificiones oficiales: ECMA y ECMAScript
function name ( [arguments] ) { //code here }
Cuando tenemos muchas funciones JS, generalmente desde la inclusión de varios ficheros, podemos tener problemas de sobrescritura de las mismas. Para ayudar a evitarlo, se pueden definir funciones como métodos de un Objeto (tal y como sucede con los objetos String o Date).
myScript = new Object(); myScript.init = function() { //code here }; myScript.otherMethod = function() { // more code here; } // uso de las funciones init(); // error, no existe. myScript.init() // correcto.
En esta misma línea, para evitar tener que repetir el nombre del objeto en todas las declaraciones de los métodos, se puede usar la notación object literal (literal de objeto) que crea el objeto y aplica las funciones como métodos del mismo (en lugar de como funciones aisladas).
var myScript = { variable:'hello'; varArray:['bye', 'out']; init:function() { //code here } otherMethod:function() { // more code here; } } // uso de las funciones myScript.init();
World Wide Web Consortium (W3C)
Probablemente lo mejor que JS ofrece al desarrollador centrado en la interfaz del usuario (uno de los temas más confusos, no porque sea dificil sino por la interpretación que de él hacen los distintos navegadores)
Modelos de eventos
Desde hace tiempo hay alternativas a tener que escribir todo nuestro código javascript. Para eso están los frameworks:
Usarlas implícita, quizás en muchos casos, aumentar el tamaño final de nuestro código javascript pero las facilidades de uso compensan el aumento de peso de la página en total
Por cercanía usaremos jQuery. ¿Qué hay que hacer?
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Pruebas con jQuery</title> <!-- <link rel="home" href="/" /> --> <meta name="author" content="Jorge Hoya" /> <meta name="MSSmartTagsPreventParsing" content="TRUE" /> <meta name="distribution" content="public" /> <meta name="robots" content="ALL" /> <meta name="revisit-after" content="3 days" /> <meta name="language" content="es" /> <meta name="Description" content="Pruebas con jQuery" /> <meta name="keywords" content="jquery, javascript, tabs, droppable" /> <!-- inclusión de jQuery --> <script src="js/jquery-1.7.1.min.js" type="text/javascript"></script> </head> <body> <script type="type/javascript"> /* Evento: http://api.jquery.com/ready/ */ $(document).ready(function(){ /* Selectores: http://api.jquery.com/category/selectors/ */ $('#box').html('<p> mundo</p>'); }); </script> <div id="box"></div> </body> </html>
Conjunto de tecnologías que vienen a responder al uso real de HTML y de XHTML en la Web, además de incluir funcionalidades específicas de navegadores. Intenta definir un marcado, que puede ser escrito en HTML o en XHTML, aportar nuevas API's
La accesibilidad web, cualidad íntimamente relacionada con la usabilidad, se refiere a la capacidad de acceso a la Web y a sus contenidos por todas las personas independientemente de la discapacidad (física, intelectual o técnica) que presenten o de las que se deriven del contexto de uso (tecnológicas o ambientales). Al hablar de Accesibilidad web se está haciendo referencia a un diseño Web que va a permitir que estas personas puedan percibir, entender, navegar e interactuar con la Web, aportando a su vez contenidos. La accesibilidad Web también beneficia a otras personas, incluyendo personas de edad avanzada que han visto mermadas sus habilidad a consecuencia de la edad.
¿Por qué es importante? La Web es un recurso muy importante para diferentes aspectos de la vida: educación, empleo, gobierno, comercio, sanidad, entretenimiento y muchos otros. Es muy importante que la Web sea accesible para así proporcionar un acceso equitativo e igualdad de oportunidades a las personas con discapacidad. Una página Web accesible puede ayudar a personas con discapacidad a que participen más activamente en la sociedad.
Una de las funciones de la Iniciativa de Accesibilidad Web (WAI) es desarrollar pautas y técnicas que proporcionen soluciones accesibles para el software Web y para los desarrolladores Web. Las pautas de WAI son consideradas como estándares internacionales de accesibilidad Web.
Conscientes de la necesidad de proporcionar soluciones accesibles para software Web y para los desarrolladores Web, se han creado una serie de recursos que permiten especificar las características que han de cumplir los contenidos disponibles mediante tecnologías Web en Internet, Intranets y otro tipo de redes informáticas, para que puedan ser utilizados por la mayor parte de las personas, incluyendo personas con discapadicad y personas de edad avanzada, de forma autónoma o mediante las ayudas técnicas pertinentes.
Entre estos recursos destacan:
Para la revisión del nivel de accesibilidad de una Web hay herramientas automáticas que intentar ayudar en el proceso. No obstante, y esto es algo importante, ninguna herramienta en sí misma puede determinar si un sitio cumple o no las pautas de accesibilidad. Para determinar si un sitio Web es accesible, es necesaria la evaluación humana.
Para hacer el contenido Web accesible, el World Wide Web Consortium (W3C), en especial su grupo de trabajo Web Accessibility Initiative (WAI), han desarrollado, enre otras, las denominadas Pautas de Accesibilidad al Contenido en la Web (WCAG) (en sus dos versiones WCAG 1.0 de 1999 y WCAG 2.0 y de 2008) cuya función principal es guiar el diseño de páginas Web hacia un diseño accesible, reduciendo de esta forma barreras a la información. WCAG consiste en 14 pautas que proporcionan soluciones de diseño y que utilizan como ejemplo situaciones comunes en las que el diseño de una página puede producir problemas de acceso a la información. Las Pautas contienen además una serie de puntos de verificación que ayudan a detectar posibles errores.
Cada punto de verificación está asignado a uno de los tres niveles de prioridad establecidos por las pautas.
En función a estos puntos de verificación se establecen los niveles de conformidad:
Las pautas describen cómo hacer páginas Web accesibles sin sacrificar el diseño, ofreciendo esa flexibilidad que es necesaria para que la información sea accesible bajo diferentes situaciones y proporcionando métodos que permiten su transformación en páginas útiles e inteligibles.
En concreto, las pautas creadas por la WAI se dividen en tres bloques:
Desde el año 2002, en España se han desarrollado varias leyes que definen los niveles de accesibilidad y fechas de cumplimiento[2] :
Especificación del Javascript que soportan los dispositivos móviles: ECMAScript Mobile Profile (en PDF).
<link href="Coordinador_files/mobile.css" type="text/css" rel="stylesheet" media="handheld, only screen and (max-device-width: 480px)">
Opera mobile emulator emulando un Samsung Galaxy S