HTML5 & CSS3 Hernán
Nuevo en HTML5 Nuevas etiquetas semánticas (Navegadores debe entender los contenidos) Video, audio y animación sin plugins (Acceso universal: cualquier dispositivo, cualquier navegador, cualquier versión) Nuevos elementos de formularios (Más usabilidad y menor uso de JavaScript)
Nuevo en CSS3 Usar cualquier tipografía Efectos decorativos: sombras, RGBa, bordes redondeados, gradientes, (menor uso de imágenes) Movimientos: transformaciones, transiciones, animaciones (menor uso de JavaScript) Diseño adaptable: Media Queries Selectores más precisos (menor uso de marcado innecesario)
Nuevo en Scripts Animaciones con Canvas Drag & Drop Geolocalización del usuario Trabajo offline (cache de aplicaciones) Web Storage (session y local) File System API (archivos enteros) Bases de datos del lado del cliente Web sockets (actualización en vivo, tipo Ajax) Hilos (threads) Web Workers
Aceptar diferencias entre dispositivos......pero también aceptar diferencias entre navegadores y sus versiones. En el fondo, el concepto clave es aplicar Diseño Adaptable (responsive design)
La web es (múltiples dispositivos, múltiples navegadores)
La web es MUY flexible: (¿Para cuál resolución diseñar? Para TODAS!!) Y más!...
Antes: W3C definía reglas, que luego los navegadores iban aplicando
Estructuras nuevas Article: contenido fundamental, independiente Aside: contenido accesorio, no fundamental Nav: barra de navegación Section: una sección o bloque (ex DIV) Header: introducción / orientación sobre sección Footer: final de una sección Hgroup: grupo de encabezados Figure: contenido relacionado (imagen, video, audio, canvas, gráficos, tablas estadísticas, etc.) Figcaption: leyenda de un elemento Figure
Ejemplos: Antes: Esta foto habla de... Ahora: Esta foto habla de...
Secciones explícitas Article Aside Nav Section
1. Article Es el contenido importante de cada página Puede haber uno, o varios por página Ver ejemplo
2. Aside Es información secundaria, que podría no estar. Ej.: Barras laterales, banners. Ver ejemplo
3. Nav Una barra de navegación. Puede haber una, o varias por página Ver ejemplo
4. Section Una sección explícita. Puede haber una, o varias por página Ver ejemplo
4.a Section = “parte de...” Puede haber una o más sections dentro de un article: Datos del Autor Comentarios Ver ejemplo
4.b Section = “contenedor de...” Una section puede tener articles dentro (¡con sections dentro!): Noticia de hoy Noticia de ayer Ver ejemplo
Headers & Footers Pertenecen a secciones (article, aside, nav y section) además del body. Ver ejemplo
Figure No es solo para fotos (diagramas, SVG, MathML, listas de código) que puedan ser referenciados (apéndice, índice, etc.) Bla Ver ejemplo
Textos más semánticos Mark: resultados resaltados (en vez de span, em o strong) Time: Hora, Fecha, o ambas cosas Meter: Medidas dentro de una escala Progress: Medidas dinámicas, cambiantes
que cambiaron A puede envolver varias cosas (bloques) Address pertenece a una sección, no solo a la página entera B estilo “diferente”, pero no más importante ni negrita I cambio de entonación (en otro idioma, tecnicismos) Strong es algo importante, aunque no se vea distinto Cite ahora es para “título” de la obra citada, no para “autor” Hr cambio de tema entre párrafos (Ej.: viñeta entre estrofas) Small es la letra chica de los contratos, términos legales
nuevos type: search, tel, url, , number, range, datetime, datetime-local, date, month, week, time, color
Search: -Botón “x” para “limpiar” -No permite saltos de línea -Degrada en “text”
Tel: -Puede incluir espacios o guiones -Degrada en “text” -Por ahora, es solo semántica
URL: Valida que sea una URL absoluta
Verifica que la casilla sea válida. Puede llevar el atributo multiple y en ese caso acepta varias casillas separadas por comas.
Number: Formato: e+90 (puede ser negativo, usa punto para decimales, e para exponente, más signo y potencia)
Range: Usar si no importa la precisión del número, sino la usabilidad.
Date: Puede llevar min, max (rango permitido) y step (por default, de a 1 día) Formato:
Datetime: Fecha y hora en formato UTC: T10:55: :00
Month: -Mismos atributos que Date (min, max, step) -Formato: ¿vencimiento de tarjeta de crédito?
Week: Mismos atributos que Date (min, max, step) Formato: 2011-W17
Time: Mismos atributos que date. Formato: 11:59 Formato con segundos (opcionales): 11:59:59
Color: Opera 11+
Atributos nuevos
Multiple Se usa en inputs de tipo file o
Autocomplete (por default)
Campos obligatorios
Autofocus (a un solo campo, o solo tomará el último)
Placeholder (tener en cuenta que el placeholder se esconde si hay autofocus)
Pattern Nro. de Tarjeta de Crédito:
Datalist (auto-suggest)
No validar: Para usar validación propia (con JavaScript)
Compatibilizar formularios para navegadores viejos
Multimedia HTML5: Audio, video y animaciones
Audio Contenido alternativo.
Formatos soportados. mp3 - Chrome y Safari.ogg - Firefox y Opera ¿Explorer? Fallback con Player.flv
Video Contenido alternativo.
Formatos soportados. mp4 – Chrome 6, Safari 5, Explorer 9.ogg y WebM – Chrome, Firefox y Opera ¿Explorer viejo? Fallback con.flv
Valores de Preload preload="none" (no descarga nada) preload="metadata" (no baja el video, pero sí sus metadatos -tamaño, etc.-) preload="auto" (lo baja por adelantado) preload="" (igual a auto, lo baja) Si no es declarado, cada navegador decide, aunque especificación dice que debe aplicar “metadata”.
Poster poster="imagen_inicial.jpg“ Imagen que se ve antes de dar play
Video con fallback
Animaciones “a la HTML5” (sin Flash) 3 tecnologías: 1) Canvas (bitmap) 2) SVG (vectorial) -poco soporte- 3) CSS3 Animations
Ejemplos de Canvas
Libros sobre Canvas
Asegurar soporte:
Referencias oficiales de HTML5: Versión aprobada (vieja): Versión borrador “vivo”: Versión del WHATWG:
Hacemos un break! Y seguimos con: Posibilidades de CSS3
Nuevas posibilidades estéticas Textos: Fuentes, columnas, wrap. Colores: transparencia, degradé. Elementos decorativos: bordes, sombras de cajas y de textos, efectos 3D, fondos múltiples.
1. Tipografías
@font-face{ font-family:Mifuente; src: fuente.woff; } #titulos{ font-family: Mifuente, arial, helvetica, sans-serif; }
@font-face { font-family: 'Mega'; /* Nombre a usar */ src: url('mega.eot'); /* Compat. c/IE 9 */ src: url('mega.eot?#iefix') format('embedded- opentype'), /* IE 6-8 */ url('mega.woff') format('woff'), /* resto */ url('mega.ttf') format('truetype'), /* Safari, Android, iOS */ url('mega.svg#MegalopolisExtraRegular') format('svg'); /* iOS versiones viejas */ }
Columnas column-count: Cuántas column-width: Ancho column-gap: Hueco column-rule: Rayita
.tres_columnas{ column-count: 3; column-width: 120px; column-gap: 24px; column-rule: 1px solid #999; }
2. Colores en CSS3 RGBa HSL HSLa Degradés Transparencias
Translucidez RGBa body{ background-color:rgb(100,20,40); /* Fallback sólido */ background- color:rgba(100,20,40,0.5); } A diferencia de opacity, no se hereda! RGBa(0,0,0,0) es transparente total
¿Y Explorer? Comentarios Condicionales:
Dentro de hojaexplorer.css:.translucido { background:transparent; filter:progid:DXImageTransform. Microsoft.gradient(startColorstr=# ,endColorstr=# ); /* mismo valor de inicio y fin / zoom: 1; }
Formato startColorstr AARRGGBB AA = Alpha, 00 transparente, FF sólido RR = Red GG = Green BB = Blue Conversor RGB a Hexadecimal:
Tono, saturación, brillo: HSL body{ background-color: hsl(360,100%,20%); } Valor de Tono: 0 a 360 (0 rojo, 120 verde, 240 azul, 360 rojo) Conversor para fallback:
Tono, saturación, brillo + Translucidez: HSLa body{ background-color: hsla(300,130%,65%,10%); } HSL con translucidez Alpha
Generador de Degradés
Bordes redondeados #algo { border-radius:10px; }
Border-image #algo{ border-image: url("borde.png") 12 repeat round; }
Ejemplo de border-image
Ejemplo de Box-shadow.sombra { box-shadow: 10px 10px 5px #999; }
Sombra en Explorer.sombra { zoom: 1; filter: progid:DXImageTransform.Microsoft. Shadow(color='#969696', Direction=135, Strength=3); }
Text-shadow.sombra { text-shadow: 10px 10px 5px #999; }
Media queries (consultas sobre el medio) Detectan características de un dispositivo, para aplicarle distintos estilos
queri.es
Media “a la antigua” En el HTML:
Media dentro de screen { h1 { font-size: 2em; } }
Características detectables width, height, device-width, device-height, orientation, aspect-ratio, device-aspect- ratio, color, color-index, monochrome, resolution, scan, grid
Condiciones (Queries):
Detectar orientación
Detección de screen and (min-width: 400px) and (max-width: 2900px) { /* solo leerán esto en PCs */ }
iPhone, iPad y PC
Criterio antiguo (actual!): Sitio PC + media queries = Sitio móvil??????
La ausencia de detección de Media Queries debe ser el primer filtro!
Mejor: Sitio Móvil + media queries = Sitio PC (Progressive enhancement)
Móvil primero:
Compatibilidad para navegadores viejos:
TODOS los fallbacks:
Transformaciones, transiciones y animaciones con CSS3
Transformación = “estática”, cambia valor de una propiedad Transición = “dinámica”, cambia entre dos estados Animación = “serie de” transiciones, con timing
Transformaciones
Funciones posibles de transform: 1. scale 2. rotate 3. skew 4. translate 5. matrix
1. Scale transform: scale(1.5); /* Aumenta 50% ambos sentidos */ transform:scale(1.5,0.5); /* Aumenta 50% horizontal y reduce 50% vertical */
Escalar en Explorer <9 zoom: 1; /* Siempre al principio, para activar hasLayout */ /* Ahora sí, reducimos o ampliamos */ zoom: 1.5; /* Aumenta tamaño */
2. Rotate transform:rotate(45deg); Positivo: sentido agujas del reloj Negativo: contra reloj
3. Skew transform: skew(5deg,-5deg); Por separado: skewX(grados) skewY(grados)
4. Translate transform: translate(30px,10px); Por separado: translateX(distancia) translateY(distancia)
Transiciones Cambio de valor de una propiedad en un tiempo
Ejemplo: a { color: white; background: red; } a:hover { color: yellow; background: blue; -webkit-transition: 1s; -moz-transition: 1s; -o-transition: 1s; transition: 1s; }
Propiedades por separado transition-property: Propiedad(es) CSS a ser animadas. transition-duration: En segundos. Por defecto el valor es 0. transition-timing-function: Define ease (por defecto), linear, ease-in, ease-out y ease-in-out. transition-delay: Pausa antes de iniciar animación.
Editor online de timing de transiciones: Comparación de timings: Valores de timing por defecto:
Animaciones solo con CSS! Referencia oficial del W3C:
Pasos: 1. Defino keyframes (similar a “capa” en Flash) 2. Relaciono con objeto y defino propiedades
1. Defino nombre { 0% { transform:funcion(valor); } 20% { transform:funcion(valor); } 100% { transform:funcion(valor); } }
2. Relaciono con objeto y defino propiedades: #objeto { -webkit-animation-name: nombre; -webkit-animation-duration: 20s; -webkit-animation-iteration-count: infinite; -webkit-animation-timing-function: ease-in-out; }