Diseño Web
Diseño Web
Diseño Web
Etiquetas que extienden a las actuales, como <video> , <audio> o <canvas> , y que
además añaden nuevas funcionalidades a los documentos HTML, que podemos
controlar desde JavaScript y
2.1.1 DOCTYPE
El estándar XHTML deriva de XML, por lo que comparte con él muchas de sus normas y
sintaxis. Uno de los conceptos fundamentales de XML es la utilización del DTD o
Document Type Definition ("Definición del Tipo de Documento"). El estándar XHTML
define el DTD que deben seguir las páginas y documentos XHTML. En este documento se
definen las etiquetas que se pueden utilizar, los atributos de cada etiqueta y el tipo de
valores que puede tener cada atributo.
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html>
<html xmlns=http://www.w3.org/1999/xhtml
lang="en"
xml:lang="en">
El primer elemento del que podemos prescindir es el atributo xmlns . Se trata de una
herencia de XHTML 1.0, que dice que los elementos de esta página están en el espacio
de nombres XHTML, http://www.w3.org/1999/xhtml . Sin embargo, los elementos de
HTML5 están siempre en este espacio de nombres, por lo que ya no es necesario
declararlo explícitamente. Eliminar el atributo xmlns nos deja con este elemento de la
siguiente manera:
En este caso ocurre lo mismo con el atributo xml:lang , es una herencia de XHTML que
podemos eliminar, quedando finalmente la etiqueta de la siguiente manera:
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>My Weblog</title>
<link rel="stylesheet" type="text/css" href="style-original.css" />
<link rel="alternate" type="application/atom+xml"
title="My Weblog feed"
href="/feed/" />
<link rel="search" type="application/opensearchdescription+xml"
Semántica | HTML5
<meta charset="utf-8">
2.1.3.2 LINKS
Dentro del elemento head , las etiquetas <link> son una manera de acceder o declarar
contenido externo al documento actual, que puede cumplir distintos objetivos:
Es una hoja de estilo contiene las reglas CSS que su navegador debe aplicar al
presente documento.
Es un feed que contiene el mismo contenido que esta página, pero en un formato
estándar (RSS).
Enlaces a recursos externos que se van a utilizar para mejorar el documento actual,
y enlaces de hipervínculos que son enlaces a otros documentos.
Esta relación es utilizada para indicar el archivo donde se almacenan las reglas CSS que
se desean aplicar al documento. Una pequeña optimización que se puede hacer en
HTML5 es eliminar el atributo type . Sólo hay un lenguaje de estilo para la web, CSS, así
que ese es el valor predeterminado para el atributo type :
Este tipo de etiquetas que componen la web semántica nos sirven para que cualquier
mecanismo automático (un navegador, un motor de búsqueda, un lector de feeds...) que
lea un sitio web sepa con exactitud qué partes de su contenido corresponden a cada una
de las partes típicas de un sitio. Observando esas etiquetas semánticas estructurales,
Semántica | HTML5
cualquier sistema podrá procesar la página y saber cómo está estructurada. Veamos
algunas de estas etiquetas que introduce HTML5 en este sentido.
<nav></nav> : representa una sección de una página que enlaza a otras páginas o a
otras partes dentro de la página. No todos los grupos de enlaces en una página
necesita estar en un elemento nav , sólo las secciones que constan de bloques de
navegación principales son apropiados para el elemento de navegación.
<time> : representa o bien una hora (en formato de 24 horas), o una fecha precisa
en el calendario gregoriano (en formato ISO), opcionalmente con un tiempo y un
desplazamiento de zona horaria.
Semántica | HTML5
</div>
<div class="articles">
<div class="article">
<p class="post-date">October 22, 2009</p>
<h2>
<a href="#" title="link to this post">Travel day</a>
</h2>
<div class="content">
Content goes here...
</div>
<div class="comments">
<p><a href="#">3 comments</a></p>
</div>
</div>
</div>
<div class="aside">
<div class="related"></div>
<div class="related"></div>
<div class="related"></div>
</div>
<div id="footer">
<p>§</p>
<p>© 2013–9 <a href="#">Arkaitz Garro</a></p>
</div>
</body>
</html>
<!DOCTYPE html>
<html>
Semántica | HTML5
<body>
<header>
<a href="/"><img src=logo.png alt="home"></a>
<hgroup>
<h1>Title</h1>
<h2 class="tagline">
A lot of effort went into making this effortless.
</h2>
</hgroup>
</header>
<nav>
<ul>
<li><a href="#">home</a></li>
<li><a href="#">blog</a></li>
<li><a href="#">gallery</a></li>
<li><a href="#">about</a></li>
</ul>
</nav>
<section class="articles">
<article>
<time datetime="2009-10-22">October 22, 2009</time>
<h2>
<a href="#" title="link to this post">Travel day</a>
</h2>
<div class="content">
Content goes here...
</div>
<section class="comments">
<p><a href="#">3 comments</a></p>
</section>
</article>
</section>
<aside>
<div class="related"></div>
<div class="related"></div>
<div class="related"></div>
</aside>
<footer>
<p>§</p>
<p>© 2013–9 <a href="#">Arkaitz Garro</a></p>
</footer>
</body>
</html>
Partiendo de la anterior estructura, parece evidente las nuevas etiquetas que debemos
utilizar. Esto no siempre es así, y cuando estructuramos contenidos de mucho mayor
alcance, lo normal es que nos surjan dudas. Un sencillo algoritmo que nos puede ayudar
Semántica | HTML5
En nuestro ejemplo, y en la mayoría de los sitios web, la cabecera contiene los primeros
elementos de la página. Tradicionalmente el título de la web, su logo, enlaces para
volver al inicio... De la manera más simple, nuestra cabecera quedaría de esta forma:
<header>
<a href="/"><img src=logo.png alt="home"></a>
<h1>Title</h1>
</header>
También es muy común que los sitios web muestren un lema o subtítulo bajo el título
Semántica | HTML5
principal. Para dar mayor importancia a este subtítulo, y relacionarlo de alguna manera
con el título principal de la web, es posible agrupar los dos titulares bajo un elemento
<hgroup> .
<header>
<a href="/"><img src=logo.png alt="home"></a>
<hgroup>
<h1>Title</h1>
<h2 class="tagline">
A lot of effort went into making this effortless.
</h2>
</hgroup>
</header>
2.4.2 <NAV>
Según la especificación, un elemento <nav> representa lo siguiente:
El elemento <nav> representa una sección de una página que enlaza con otras
páginas o partes de la misma página: una sección con enlaces de navegación.
Como ocurre con los elementos <header> , <footer> y el resto de nuevas etiquetas, no
estamos obligados a utilizar un único elemento <nav> en toda la página. Es posible que
tengamos una navegación principal en la cabecera de la página, una tabla de contenidos
o enlaces en el pie de la página, que apuntan a contenidos secundarios. Todos ellos son
candidatos a pertenecer a un elemento <nav> .
<nav>
<ul>
<li><a href="#">home</a></li>
<li><a href="#">blog</a></li>
<li><a href="#">gallery</a></li>
<li><a href="#">about</a></li>
</ul>
</nav>
2.4.3 <FOOTER>
Según la especificación, un elemento <footer> representa lo siguiente:
Semántica | HTML5
Al igual que ocurre con el elemento <nav> , podemos tener tantos elementos <footer>
como sea necesario. Lo normal es que nuestro sitio web disponga de al menos un pie
principal, que contiene los avisos legales (privacidad, condiciones del servicio,
copyright...), mapa del sitio web, accesibilidad, contacto y otros muchos enlaces que
pueden ir incluidos en un elemento <nav> .
2.4.4 <ARTICLE>
Según la especificación, un elemento <article> representa lo siguiente:
Cuando los artículos están anidados, los artículos interiores representan contenido
que en principio está relacionado con el artículo que los contiene. Por ejemplo, una
entrada de un blog puede aceptar comentarios de usuarios, que están incluidos
dentro del contenido principal y relacionados con el mismo.
Por lo tanto, la etiqueta <article> se utiliza para encapsular contenido, que tiene
significado en sí mismo, y que puede ser distribuido y reutilizado en otros formatos de
datos. No nos referimos únicamente a contenidos clásicos de texto, sino que incluso un
contenido multimedia con su transcripción, un mapa o email pueden ser totalmente
válidos para ser incluidos en una etiqueta <article> .
<section>
<h1>Comments</h1>
<article id="c1">
<footer>
<p>Posted by: <span>George Washington</span></p>
<p><time datetime="2009-10-10">15 minutes ago</time></p>
</footer>
<p>Yeah! Especially when talking about your lobbyist friends!</p>
</article>
<article id="c2">
<footer>
<p>Posted by: <span itemprop="name">George Hammond</span></p>
<p><time datetime="2009-10-10">5 minutes ago</time></p>
</footer>
<p>Hey, you have the same first name as me.</p>
Semántica | HTML5
</article>
</section>
2.4.5 <SECTION>
A diferencia del elemento <article> , este elemento es utilizado para dividir el
documento (o artículos) en diferentes áreas, o como su propio nombre indica, en
secciones. Según la especificación, un elemento <section> representa lo siguiente:
En este caso, y desde un punto de vista semántico, es complicado deducir si el texto Vital
caveat about the information above: does not apply on the first Thursday of the month.
pertenece al contenido completo o está relacionado con la sección Fan Club uniforms.
Gracias a la etiqueta <section> , es muy sencillo separar e identificar a qué sección
pertenece cada contenido:
<article>
<h1>Rules for Munchkins</h1>
<section>
<h2>Yellow Brick Road</h2>
<p>It is vital that Dorothy follows it—so no selling
bricks as "souvenirs"</p>
</section>
<section>
<h2>Fan Club uniforms</h2>
<p>All Munchkins are obliged to wear their "I’m a friend
of Dorothy!" t-shirt when representing the club</p>
</section>
<p><strong>Vital caveat about the information above:
does not apply on the first Thursday of the month.</strong></p>
</article>
Semántica | HTML5
<article>
<h1>Rules for Munchkins</h1>
<section>
<h2>Yellow Brick Road</h2>
<p>It is vital that Dorothy follows it—so no selling
bricks as "souvenirs"</p>
</section>
<section>
<h2>Fan Club uniforms</h2>
<p>All Munchkins are obliged to wear their "I’m a friend
of Dorothy!" t-shirt when representing the club</p>
<p><strong>Vital caveat about the information above:
does not apply on the first Thursday of the month.</strong></p>
</section>
</article>
Como podemos observar en los dos ejemplos anteriores, es muy sencillo agrupar
contenido que pertenece a una misma sección, permitiendo incluirlo dentro de un
contexto semántico.
Otra de las posibilidades que nos ofrece esta etiqueta, es la de dividir nuestro documento
en secciones, que incluyen contenido de temáticas diferentes entre sí. Si además
queremos separar estos contenidos visualmente en dos columnas, lo lógico sería utilizar
las tradicionales etiquetas <div> para agrupar los artículos según su temática, y
posteriormente aplicar estilos CSS o JavaScript para presentarlos en forma de pestañas.
En este caso, la etiqueta <div> no nos aporta ningún significado semántico, tan sólo
estructural. La etiqueta <section> es la encargada de añadir semántica en estos casos:
<section>
<h1>Articles about llamas</h1>
<article>
<h2>The daily llama: Buddhism and South American camelids</h2>
<p>blah blah</p>
</article>
<article>
<h2>Shh! Do not alarm a llama</h2>
<p>blah blah</p>
</article>
</section>
<section>
<h1>Articles about root vegetables</h1>
<article>
<h2>Carrots: the orange miracle</h2>
<p>blah blah</p>
</article>
Semántica | HTML5
<article>
<h2>Eat more Swedes (the vegetables, not the people)</h2>
<p>blah blah</p>
</article>
</section>
2.4.6 <ASIDE>
Según la especificación, un elemento <aside> representa lo siguiente:
Dentro de un artículo, por ejemplo, puede ser utilizado para mostrar contenido
relacionado como citas u otros artículos relacionados.
2.4.7 <FIGURE>
Según la especificación, un elemento <figure> representa lo siguiente:
The figure element represents some flow content, optionally with a caption, that is
self-contained and is typically referenced as a single unit from the main flow of the
document.
The element can be used to annotate illustrations, diagrams, photos, code listings,
etc. This includes, but is not restricted to, content referred to from the main part of
the document, but that could, without affecting the flow of the document, be
moved away from that primary content, e.g. to the side of the page, to dedicated
pages, or to an appendix.
Hasta ahora, no había una manera correcta de poder añadir un subtítulo o una leyenda a
un contenido concreto, como explicar una figura o atribuir una imagen a un fotógrafo.
Gracias a la etiqueta <figure> podemos contener una imagen (o un vídeo, ilustración o
bloque de código) en un elemento y relacionarlo con un contenido concreto:
<figure>
<img src="welcome.jpg" alt="Alternative text">
<figcaption>
Bruce and Remy welcome questions
<small>Photo © Bruce’s mum</small>
</figcaption>
</figure>
Semántica | HTML5
En conveniente recordar que el atributo alt indica el texto a mostrar cuando la imagen
no está disponible, y no está pensada para contener una descripción de la imagen, y
mucho menos para duplicar lo ya indicado en la etiqueta <figcaption> .
Ejercicio 1
Ver enunciado
2.5.1 ACCESSKEY
El atributo accesskey permite a los desarrolladores especificar un atajo de teclado que
permite activar un elemento a asignarle el foco. Este atributo ya existía en HTML 4,
aunque ha sido utilizado en muy pocas ocasiones. Como HTML5 está pensado para
aplicaciones, y algunos usuarios siguen prefiriendo los atajos de teclado, este atributo no
ha sido eliminado, y ahora está disponible para cualquier elemento.
Para evitar conflictos con otros atajos de teclado, o con los propios del navegador, ahora
esta etiqueta permite asignar alternativas en este atributo. Un ejemplo incluido en la
especificación:
Esto quiere decir que este elemento es accesible a través de dos atajos de teclado, a
través de la tecla s o a través de la tecla 0 (en ese orden).
2.5.2 CONTENTEDITABLE
Inventado por Microsoft, e implementado por el resto de los navegadores, la etiqueta
contenteditable es ahora parte de la especificación oficial.
Primero, los usuarios pueden editar los contenidos de un elemento que incluya esta
etiqueta. Este elemento debe ser seleccionable y el navegador debe proporcionar
una marca que indique la posición actual del cursor.
Este atributo es de tipo booleano, por lo que su valor puede ser true o false. Al acceder
desde JavaScript a este atributo, hay que tener en cuenta su notación lowerCamelCase,
siendo el nombre de la propiedad del DOM contentEditable . Además, existe otra
propiedad llamada isContentEditable , que indica si el elemento es editable o no.
Semántica | HTML5
document.designMode = 'on';
<ul id="vegetable-seeds">
<li data-spacing="10cm" data-sowing-time="March to June">Carrots</li>
<li data-spacing="30cm" data-sowing-time="February to March">Celery</li>
<li data-spacing="3cm" data-sowing-time="March to September">Radishes</li>
</ul>
2.5.4 DRAGGABLE
Este atributo indica que el elemento indicado puede ser arrastable.
Lo veremos en el capítulo correspondiente.
Practica 02
Semántica | HTML5
Index.Html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
Semántica | HTML5
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex" />
<title>My Weblog</title>
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="alternate" type="application/atom+xml" title="My Weblog feed"
href="/feed/" />
<link rel="search" type="application/opensearchdescription+xml" title="My
Weblog search" href="opensearch.xml" />
</head>
<body>
<div id="header">
<h1>My Weblog</h1>
<p class="tagline">A lot of effort went into making this effortless.</p>
<div id="nav">
<ul>
<li><a href="../semantics.html">home</a></li>
<li><a href="../semantics.html">blog</a></li>
<li><a href="../semantics.html">gallery</a></li>
<li><a href="../semantics.html">about</a></li>
</ul>
</div>
</div>
<div class="entry">
<p class="post-date">October 22, 2009</p>
<h2>
<a href="../semantics.html" rel="bookmark" title="link to this post">Travel
day</a>
</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec hendrerit
felis accumsan turpis pretium tempor. Duis eu turpis nunc, ut euismod nisl.
Aliquam erat volutpat. Proin eu eros mollis dui fringilla sodales. Curabitur
venenatis tincidunt felis ac congue. Maecenas at odio dui, sit amet congue
sapien. Proin placerat feugiat eros, non mollis quam pharetra at. Duis gravida
eleifend ligula nec auctor. Fusce nulla diam, fringilla non ultrices in, iaculis eu
tellus. Sed mollis consequat turpis sit amet facilisis. Donec pretium luctus
aliquet. Curabitur placerat varius purus vel congue. Aliquam erat volutpat.
Curabitur vitae eros sed turpis sollicitudin mattis. Morbi venenatis pulvinar nunc,
at vulputate massa placerat a. Nam et tortor id nisi consequat tempor eget sit
amet risus. Praesent bibendum, velit eu hendrerit porttitor, elit mauris posuere
nisl, non pellentesque est leo a quam.</p>
</div>
Semántica | HTML5
<div class="entry">
<p class="post-date">October 17, 2009</p>
<h2>
<a href="../semantics.html" rel="bookmark" title="link to this post">I'm
going to Prague!</a>
</h2>
<p>Sed ante mi, sagittis sed euismod sit amet, convallis et nibh. Etiam sit
amet odio dui, id semper turpis. Mauris risus mauris, imperdiet pulvinar vehicula
et, hendrerit vitae dui. Phasellus ultrices lacus rhoncus purus posuere rutrum.
Maecenas mattis eleifend scelerisque. Nulla quam sem, facilisis ac ultrices et,
tincidunt eu dolor. Mauris arcu est, porttitor eu blandit nec, pulvinar sed enim.
Praesent diam felis, cursus at facilisis eu, mollis ut elit. Praesent rutrum porta
euismod. Nulla facilisi. Suspendisse potenti. In auctor ultricies eleifend. Proin erat
dolor, malesuada non tempus nec, tincidunt in mi.</p>
</div>
<table id="arc">
<tr><th>October</th><td></td></tr>
<tr><th>5</th><td><a href="../semantics.html">Vos vestros servate, meos
mihi linquite mores</a></td></tr>
<tr><th>September</th><td></td></tr>
<tr><th>30</th><td><a href="../semantics.html">Ut sementem feceris ita
metes</a></td></tr>
<tr><th>August</th><td></td></tr>
<tr><th>4</th><td><a href="../semantics.html">Risu inepto res ineptior nulla
est</a></td></tr>
<tr><th>July</th><td></td></tr>
<tr><th>6</th><td><a href="../semantics.html">Vitanda est improba siren
desidia</a></td></tr>
<tr><th>April</th><td></td></tr>
<tr><th>21</th><td><a href="../semantics.html">Mendacem oportet esse
memorem</a></td></tr>
<tr><th>7</th><td><a href="../semantics.html">Libenter homines id quod
volunt credunt</a></td></tr>
<tr><th>March</th><td></td></tr>
<tr><th>27</th><td><a href="../semantics.html">Gutta cavat
lapidem</a></td></tr>
<tr><th>21</th><td><a href="../semantics.html">Amoto quaeramus seria
ludo</a></td></tr>
<tr><th>18</th><td><a href="../semantics.html">Non est ars quae ad
effectum casu venit</a></td></tr>
<tr><th>January</th><td></td></tr>
<tr><th>11</th><td><a href="../semantics.html">Quid rides?...De te fabula
narratur</a></td></tr>
</table>
<div id="footer">
Semántica | HTML5
<p class=sectionSign>
</div>
</body>
</html>
Style.css
html{background:white;color:black}
body{font:normal medium 'Gill Sans','Gill Sans MT','Goudy Bookletter
1911','Linux Libertine O','Liberation Serif',Candara,serif;padding:0;margin:0
auto;width:40em;line-height:1.75;word-spacing:0.1em}
a{background:transparent;text-decoration:none;border-bottom:1px dotted}
a:hover{border-bottom:1px solid}
a:link{color:#1b67c9}
a:visited{color:darkorchid}
h1 a,h2 a,h3 a{color:inherit !important}
h2,h3,p{margin:1.75em 0}
h1,h2,h3{font-size:medium}
h1{letter-spacing:1em;text-align:center;margin:0}
#header{background:black;color:white;margin:0;padding:1.75em 0}
#header p{text-align:center;font-size:medium;line-height:2.154}
#header a{color:white}
#arc th,#arc td{list-style:none;margin:0;padding:0}
#arc th{text-align:right}
#footer,.c{text-align:center;clear:both}
#arc th{padding:0 1.75em 0 0;vertical-align:baseline}
#arc{border-collapse:collapse}
.post-date{float:right;font-size:small;margin:2px 0 0 0}
#nav ul{margin:0;padding:0 1em 0 0;text-align:center}
#nav li{display:inline;padding-left:1em}
.sectionSign:before{content:'\00A7'}