HTML5 Boilerplate

De WikiEducator
Saltar a: navegación, buscar

Usuario:Juanda/html5/nav

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 :-)

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

Estructura básica

Esta es la estructura básica sugerida por HTML5 Boilerplate:

.
├── css
│   ├── main.css
│   └── normalize.css
├── doc
├── img
├── js
│   ├── main.js
│   ├── plugins.js
│   └── vendor
│       ├── jquery.min.js
│       └── modernizr.min.js
├── .htaccess
├── 404.html
├── index.html
├── humans.txt
├── robots.txt
├── crossdomain.xml
├── favicon.ico
  • Página index.html
<!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>


Hacks en CSS

  • Comentarios condicionales

Creados por Microsoft para su navegador. Cualquier otro navegador lo entenderá como un comentario.

<!--[if CONDICION]> Código HTML <![endif]–>

Ejemplo:

<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->

Para indicar a IExplorer que utilice la última versión de su rendering engine (puede tener varias) o Google Chrome Frame si está instalado:

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

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.
<meta name="viewport" content="width=device-width, initial-scale=1">

Establecemos el viewport de nuestra web igual al viewport que tiene por defecto el dispositivo.

  • 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:
@viewport {
  width: 980px;
  min-zoom: 0.25;
  max-zoom: 5;
}
  • 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.

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).
<link rel="stylesheet" href="css/normalize.css">
  • Ejemplo:
/**
 * 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;
}
  • 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)


Librería main.css

<link rel="stylesheet" href="css/main.css">
  • 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:
/* ==========================================================================
   Author's custom styles
   ========================================================================== */

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!
<script src="js/vendor/modernizr-2.6.1.min.js"></script>

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.
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.8.0.min.js"><\/script>')</script>

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
        <script src="js/plugins.js"></script>
        <script src="js/main.js"></script>

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.
        <!-- 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>
  • Veremos Google Analytics con más detalle cuando tratemos el SEO


Personalización

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:
ErrorDocument 404 /404.html
  • 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).

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" />
  • Ver ejemplo
  • Como usarlo
  • En minúsculas

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
User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /~joe/
  • En minúsculas
  • Se ve con más detalle cuando estudiemos SEO.

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:
<link rel="shortcut icon" href="http://example.com/myicon.ico" />
  • Si utilizamos una imagen png, en vez de ico (cada vez más habitual), se debe especificar el type:
<link rel="icon" type="image/png" href="http://example.com/image.png" />

Modernizr

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.
<script>
  if (Modernizr.canvas) {
    alert("This browser supports HTML5 canvas!");
  }
</script>
  • No se fija en el User Agent (propiedad navigator.userAgent) -> "feature detection" (mejor).
  • Permite usar polyfills.

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.
  • 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.

Modernizr.load()

  • Normalmente para no recargar la página web de Polyfills, se hace un cargado condicional, basándonos en la libreria de JavaScript yepnope.js
  • Ejemplo de uso: Si el navegador no soporta geolocalización, se descargará el polyfill:
Modernizr.load({
  test: Modernizr.geolocation,
  yep : 'geo.js',
  nope: 'geo-polyfill.js'
});
<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>
  • 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).