Diferencia entre revisiones de «Usuario:Juanda/html5/Introducción»
De WikiEducator
(Página creada con '{{Usuario:juanda/html5/nav }} {{#widget:Slides}} {{MiTitulo| HTML5}} <div class="slides layout-regular template-default"> <div class="slide"> ==H5BP== </div> <div class="slide…') |
(→Modernizr.load()) |
||
(63 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
{{Usuario:juanda/html5/nav }} | {{Usuario:juanda/html5/nav }} | ||
− | {{#widget:Slides}} {{MiTitulo| HTML5}} | + | {{#widget:Slides}} {{MiTitulo| HTML5 Boilerplate}} |
<div class="slides layout-regular template-default"> | <div class="slides layout-regular template-default"> | ||
<div class="slide"> | <div class="slide"> | ||
− | + | =H5BP= | |
</div> | </div> | ||
+ | |||
<div class="slide"> | <div class="slide"> | ||
− | === Estructura básica === | + | ====Introducción==== |
+ | *Utilizaremos la versión 4.3.0 de HTML5 BoilerPlate, de septiembre de 2013 | ||
+ | *Es una plantilla que ayuda a confeccionar un sitio web en múltiples aspectos: compatibilidad navegadores, configuración servidor Web, estadísticas de la web, rendimiento... | ||
+ | *Quizá haya conceptos que queden todavía un poco "desconocidos". Tocaremos muchos temas durante el curso. | ||
+ | *Echa otro ojo a este documento otra vez cuando acabes el curso :-) | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Pasos para crear un sitio web==== | ||
+ | *Establecer la estructura básica del sitio web. | ||
+ | *Añadir contenidos, estilo y funcionalidad | ||
+ | *Probarla de forma local | ||
+ | *Opcionalmente ejecutar un script para automatizar la optimización de la web: ant build script o node build script. | ||
+ | *Desplegar el sitio web | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ==== Estructura básica ==== | ||
+ | Esta es la estructura básica sugerida por HTML5 Boilerplate: | ||
+ | <pre> | ||
. | . | ||
├── css | ├── css | ||
Línea 27: | Línea 47: | ||
├── crossdomain.xml | ├── crossdomain.xml | ||
├── favicon.ico | ├── favicon.ico | ||
− | + | </pre> | |
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | *Página index.html | ||
+ | <source lang="html4strict"> | ||
+ | <!DOCTYPE html> | ||
+ | <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> | ||
+ | <!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]--> | ||
+ | <!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> | ||
+ | <!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--> | ||
+ | <head> | ||
+ | <meta charset="utf-8"> | ||
+ | <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||
+ | <title></title> | ||
+ | <meta name="description" content=""> | ||
+ | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||
+ | |||
+ | <!-- Place favicon.ico and apple-touch-icon.png in the root directory --> | ||
+ | |||
+ | <link rel="stylesheet" href="css/normalize.css"> | ||
+ | <link rel="stylesheet" href="css/main.css"> | ||
+ | <script src="js/vendor/modernizr-2.6.2.min.js"></script> | ||
+ | </head> | ||
+ | <body> | ||
+ | <!--[if lt IE 7]> | ||
+ | <p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade your browser</a> to improve your experience.</p> | ||
+ | <![endif]--> | ||
+ | |||
+ | <!-- Add your site or application content here --> | ||
+ | <p>Hello world! This is HTML5 Boilerplate.</p> | ||
+ | |||
+ | <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> | ||
+ | <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.10.2.min.js"><\/script>')</script> | ||
+ | <script src="js/plugins.js"></script> | ||
+ | <script src="js/main.js"></script> | ||
+ | |||
+ | <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. --> | ||
+ | <script> | ||
+ | (function(b,o,i,l,e,r){b.GoogleAnalyticsObject=l;b[l]||(b[l]= | ||
+ | function(){(b[l].q=b[l].q||[]).push(arguments)});b[l].l=+new Date; | ||
+ | e=o.createElement(i);r=o.getElementsByTagName(i)[0]; | ||
+ | e.src='//www.google-analytics.com/analytics.js'; | ||
+ | r.parentNode.insertBefore(e,r)}(window,document,'script','ga')); | ||
+ | ga('create','UA-XXXXX-X');ga('send','pageview'); | ||
+ | </script> | ||
+ | </body> | ||
+ | </html> | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | |||
+ | <div class="slide"> | ||
+ | ====Hacks en CSS==== | ||
+ | *Comentarios condicionales | ||
+ | Creados por Microsoft para su navegador. Cualquier otro navegador lo entenderá como un comentario. | ||
+ | <source lang="html4strict"> | ||
+ | <!--[if CONDICION]> Código HTML <![endif]–> | ||
+ | </source> | ||
+ | Ejemplo: | ||
+ | <source lang="html4strict"> | ||
+ | <!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]--> | ||
+ | </source> | ||
+ | Para indicar a IExplorer que utilice la última versión de su rendering engine (puede tener varias) o Google Chrome Frame si está instalado: | ||
+ | <source lang="html4strict"> | ||
+ | <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====viewport==== | ||
+ | *Por defecto los navegadores móviles muestran con un ancho determinado la página (en el caso del iPhone, 980px, por ejemplo). | ||
+ | *Las páginas no sólo se mostrarán reducidas, sino que además no se aplicarán nunca nuestras @media queries que afecten a dispositivos móviles. | ||
+ | *Lo ideal suele ser usar la palabra clave device-width (que representa el ancho del dispositivo), utilizando diseños fluidos y responsivos. | ||
+ | <source lang="html4strict"> | ||
+ | <meta name="viewport" content="width=device-width, initial-scale=1"> | ||
+ | </source> | ||
+ | Establecemos el viewport de nuestra web igual al viewport que tiene por defecto el dispositivo. | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | *Para páginas con contenido de un ancho fijo (no fluido), es posible usar un valor estático en píxels. | ||
+ | *En este ejemplo veremos la web "a pantalla completa" pero con una configuración de zoom que provoca que no se vea bien: | ||
+ | <source lang="html4strict"> | ||
+ | @viewport { | ||
+ | width: 980px; | ||
+ | min-zoom: 0.25; | ||
+ | max-zoom: 5; | ||
+ | } | ||
+ | </source> | ||
+ | *Esto no encajaría en todos los user agent!! | ||
+ | *con un mínimo zoom de 0.25 para un display de 240px de anchura, nos quedarían 20px sin poder ver. | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Librería normalice==== | ||
+ | *Librería que hace que los diferentes elementos renderizados por el navegador se comporten según estándares. | ||
+ | *Es el equivalente mejorado a librerías anteriores que hacían un reset a los CSS del navegador. | ||
+ | *Esta librería es mucho más popular que reset.css, corrige bugs y es menos intrusiva (no hace un unstyled completo de los css del navegador). | ||
+ | <source lang="html4strict"> | ||
+ | <link rel="stylesheet" href="css/normalize.css"> | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | *Ejemplo: | ||
+ | <source lang="html4strict"> | ||
+ | /** | ||
+ | * Correct `block` display not defined in IE 6/7/8/9 and Firefox 3. | ||
+ | */ | ||
+ | article, | ||
+ | aside, | ||
+ | details, | ||
+ | figcaption, | ||
+ | figure, | ||
+ | footer, | ||
+ | header, | ||
+ | hgroup, | ||
+ | main, | ||
+ | nav, | ||
+ | section, | ||
+ | summary { | ||
+ | display: block; | ||
+ | } | ||
+ | </source> | ||
+ | *Las etiquetas html5 que no existen en determinados navegadores, se les dará un display de tipo block | ||
+ | *Para hacer que "existan" será necesario crearlas mediante JavaScript utilizando por ejemplo Modernizr (html5shiv) | ||
+ | </div> | ||
+ | |||
+ | |||
+ | <div class="slide"> | ||
+ | ====Librería main.css==== | ||
+ | <source lang="html4strict"> | ||
+ | <link rel="stylesheet" href="css/main.css"> | ||
+ | </source> | ||
+ | *Viene con unos css por defecto, principalmente por las diferencias de estilos entre navegadores | ||
+ | *Hay un espacio donde podríamos poner nuestro css específico: | ||
+ | <source lang="html4strict"> | ||
+ | /* ========================================================================== | ||
+ | Author's custom styles | ||
+ | ========================================================================== */ | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Librería Modernizr==== | ||
+ | * Librería JavaScript que detecta si el navegador del usuario implementa las características de html5 y CSS3 de la página actual. | ||
+ | *Único javascript que necesita estar en la parte superior del documento: ¡antes de que se empiece a renderizar la página! | ||
+ | <source lang="html4strict"> | ||
+ | <script src="js/vendor/modernizr-2.6.1.min.js"></script> | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====jQuery: ¿CDN o local?==== | ||
+ | *CDN significa content delivery network: se suelen utilizar servidores cercanos y utilizados frecuentemente para que la carga de la página sea rápida: normalmente el js ya estará descargado de alguna otra página que utilice el mismo origen. | ||
+ | *Si window.jQuery es undefined habrá habido algún problema al obtenerlo del CDN. | ||
+ | *En este caso, procederemos a insertar en nuestra página la versión local de jQuery. | ||
+ | <source lang="javascript"> | ||
+ | <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.0.min.js"><\/script>')</script> | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | |||
+ | ====plugins.js y main.js==== | ||
+ | *plugin.js: Para los plugin que instalemos (también se pueden incluir en el directorio vendor) | ||
+ | *main.js: Para nuestro propio javascript | ||
+ | <source lang="javascript"> | ||
+ | <script src="js/plugins.js"></script> | ||
+ | <script src="js/main.js"></script> | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Google Analytics==== | ||
+ | *Herramienta de análisis de las visitas a un sitio web. | ||
+ | *Google recomienda ponerla en la parte superior, para contar todas las visitas | ||
+ | *En la parte inferior, optimizamos el tiempo de carga de nuestra web. | ||
+ | <source lang="javascript"> | ||
+ | <!-- Google Analytics: change UA-XXXXX-X to be your site's ID. --> | ||
+ | <script> | ||
+ | var _gaq=[['_setAccount','UA-XXXXX-X'],['_trackPageview']]; | ||
+ | (function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0]; | ||
+ | g.src=('https:'==location.protocol?'//ssl':'//www')+'.google-analytics.com/ga.js'; | ||
+ | s.parentNode.insertBefore(g,s)}(document,'script')); | ||
+ | </script> | ||
+ | </source> | ||
+ | *Veremos Google Analytics con más detalle cuando tratemos el SEO | ||
+ | </div> | ||
+ | |||
+ | |||
+ | <div class="slide"> | ||
+ | =Personalización= | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Fichero .htaccess==== | ||
+ | *Se trata de un fichero con directivas Apache que sobreescriben a las originales del servidor, a partir del directorio don de se cuelga el fichero | ||
+ | *Se utiliza por ejemplo para: | ||
+ | :Definir un documento html de personalización de errores | ||
+ | :Definir cuando expiran las páginas por temas de caché | ||
+ | :Configuración de mime-types | ||
+ | :Definir reescrituras de URL's | ||
+ | *Ejemplo: | ||
+ | <source lang="html4strict"> | ||
+ | ErrorDocument 404 /404.html | ||
+ | </source> | ||
+ | *Si tenemos acceso al servidor, por temas de rendimiento, es mejor poner las directivas anteriores en la configuración del servidor (fichero httpd.conf normalmente). | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Fichero humans.txt==== | ||
+ | *Se coloca en la raíz del site y contiene la información de las personas que han colaborado en la web: | ||
+ | :http://www.google.com/humans.txt | ||
+ | *Se puede colgar sin más o también linkarlo mediante: <link rel="author" href="humans.txt" /> | ||
+ | *[http://humanstxt.org/humans.txt Ver ejemplo] | ||
+ | *[http://humanstxt.org/ES/Standard.html Como usarlo] | ||
+ | *En minúsculas | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Fichero robots.txt==== | ||
+ | *Se coloca en la raíz del site y contiene información sobre tu web para los buscadores: que directorios deben indexar y cuales no, con que frecuencia... | ||
+ | *Ejemplo: Para cualquier robot indicamos que no deben indexar los directorios /cgi-bin, /tmp y /~joe | ||
+ | <source lang="html4strict"> | ||
+ | User-agent: * | ||
+ | Disallow: /cgi-bin/ | ||
+ | Disallow: /tmp/ | ||
+ | Disallow: /~joe/ | ||
+ | </source> | ||
+ | *En minúsculas | ||
+ | *Se ve con más detalle cuando estudiemos SEO. | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Fichero favicon.ico==== | ||
+ | *Se coloca en la raíz del site, será el icono de nuestra web y aparece junto al título de la misma. | ||
+ | *El nombre del fichero va en minúsculas | ||
+ | *Si el nombre no es favicon.ico, o cambiamos el directorio, se debe indicar en el html: | ||
+ | <source lang="html4strict"> | ||
+ | <link rel="shortcut icon" href="http://example.com/myicon.ico" /> | ||
+ | </source> | ||
+ | *Si utilizamos una imagen png, en vez de ico (cada vez más habitual), se debe especificar el type: | ||
+ | <source lang="html4strict"> | ||
+ | <link rel="icon" type="image/png" href="http://example.com/image.png" /> | ||
+ | </source> | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | *Más cosas: sitemap, Canonical URL, Feeds... [https://github.com/h5bp/html5-boilerplate/blob/master/doc/extend.md lee documento de personalización] | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | =Modernizr= | ||
+ | </div> | ||
+ | |||
+ | <div class="slide"> | ||
+ | ====Introducción==== | ||
+ | *Librería para detectar la disponibilidad nativa de html5 o css3 en el navegador. | ||
+ | *Se coloca siempre en el head, justo después de las hojas de estilos. | ||
+ | *Hay dos versiones, desarrollo y producción (custom build, en la que seleccionaremos exclusivamente los componentes necesarios). | ||
+ | *Detecta mediante decenas de tests en milisegundos, las características que funcionan o no del navegador actual y añade unas clases en caliente a los componentes de nuestra página: | ||
+ | : <html> por ejemplo pasa a ser <html class="js flexbox canvas canvastext webgl no-touch...."> | ||
+ | : Las clases con prefijo no, representan las características que el navegador no soporta. | ||
+ | <source lang="html4strict"> | ||
+ | <script> | ||
+ | if (Modernizr.canvas) { | ||
+ | alert("This browser supports HTML5 canvas!"); | ||
+ | } | ||
+ | </script> | ||
+ | </source> | ||
+ | *No se fija en el User Agent (propiedad navigator.userAgent) -> "feature detection" (mejor). | ||
+ | *Permite usar polyfills. | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ====Polyfills==== | ||
+ | *Código javascript para replicar el comportamiento de la API de html5 en navegadores antiguos. | ||
+ | *Existe un polyfill para casi cualquier característica de html5 que Modernizr detecta. | ||
+ | *[https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-browser-Polyfills Lista de Polyfills] | ||
+ | *El uso de varios polyfills en una página puede afectar el tiempo de carga de la página. | ||
+ | *No hay regla de oro: Podemos optar por no usarlos y dar menos funcionalidad con navegadores antiguos. | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | ====Modernizr.load()==== | ||
+ | *Normalmente para no recargar la página web de Polyfills, se hace un cargado condicional, basándonos en la libreria de JavaScript [http://yepnopejs.com/ yepnope.js] | ||
+ | *Ejemplo de uso: Si el navegador no soporta geolocalización, se descargará el polyfill: | ||
+ | <source lang="html4strict"> | ||
+ | Modernizr.load({ | ||
+ | test: Modernizr.geolocation, | ||
+ | yep : 'geo.js', | ||
+ | nope: 'geo-polyfill.js' | ||
+ | }); | ||
+ | </source> | ||
+ | </div> | ||
+ | <div class="slide"> | ||
+ | *Otro ejemplo con el input type="date" que [http://caniuse.com/#search=date no está muy soportado] | ||
+ | <source lang="html4strict"> | ||
+ | <script src="modernizr.js"></script> | ||
+ | <script>Modernizr.load({ | ||
+ | test: Modernizr.inputtypes.date, | ||
+ | nope: ['http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js', 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.7/jquery-ui.min.js', 'jquery-ui.css'], | ||
+ | complete: function () { | ||
+ | $('input[type=date]').datepicker({ | ||
+ | dateFormat: 'yy-mm-dd' | ||
+ | }); | ||
+ | } | ||
+ | }); | ||
+ | </script> | ||
+ | </source> | ||
+ | *En el ejemplo, se carga el componente de datetime del famework de JQuery User Interface. Para ello se debe cargar primero jQuery y luego jQuery User Interace (js y css). | ||
+ | </div> | ||
</div> | </div> |