Conceptos generales
Rich Internet Applications
Single Page Applications
AJAX
Separación entre contenido y estilos
Herramientas de desarrollo
¿Qué es una web?
Medio de transmitir información
Información = "contenidos"
Contenidos vs propiedades visuales
¿Cómo me envía el servidor una web?
Peticiones del cliente, respuestas del servidor
Varias peticiones de varios recursos, cada uno con su URL
Waterfall
Motores de renderizado
Gecko: Firefox
Webkit: Chrome y Safari
Trident: IE
HTML
Lenguaje de marcas (etiquetas)
Cada etiqueta marca el inicio y el fin de un elemento
HTML estructura el texto y le da significado
CSS
Lenguaje que define cómo se presentan los elementos del HTML
Separa contenido de propiedades visuales
CSS 3
HTML
Apertura y cierre
Atributos
Anidaciones (sangrado)
DOM
Esqueleto mínimo
Emmet
Comentarios
Elementos HTML del <head>
Título
Etiquetas meta
meta charset
meta viewport
CSS
JavaScript
Favicon (generador)
Elementos HTML del <body>
Elementos de bloque vs. elementos en línea
Elementos para el layout:
div
section
main
article
aside
nav
header
footer
Elementos HTML del <body>
Encabezados (h1-h6)
Párrafos (p)
Saltos de línea (br)
Listas (ul, ol, li)
Hiperenlace (a)
Imagen (img)
Icono (i)
Importante (strong)
Elemento de texto sin semántica (span)
Hojas de estilos
¿Qué es una hoja de estilos?
¿Dónde se cargan las hojas de estilos?
Hojas de estilo de navegador, de usuario y de autor
Reglas CSS
Selectores
Por etiqueta
Por clase
Por id
Por parentesco:
descendiente
hijo directo
hermano
siguiente hermano
Selectores
Por pseudoclase:
:hover
:visited
first-child, last-child, nth-child(n)
first-of-type, last-of-type, nth-of-type(n)
:focus
Por atributo
Mezcla
Box model
Contenido + padding + borde + margen
Medidas totales
La propiedad box-sizing
Unidades en CSS
px
%
calc()
em
Flow
El flujo
Cambiar entre block e inline: la propiedad display
Rompiendo el flujo: position
relative
absolute
fixed
Elementos flotantes
Clearfix
Flexbox
SASS
Código fuente -> código compilado
Modularización con @import
Anidaciones
Entorno de desarrollo
IDE: Visual Studio Code (Atom, Angular IDE...)
NodeJS y npm
npm
Instalar última versión después de instalar nodeJS
Repositorio de módulos distribuibles
Módulos globales y módulos locales
La carpeta node_modules
El archivo package.json
npm init
npm install (--production)
JavaScript
Interpretado, compilado y ejecutado en el navegador
Cada navegador programa su propio motor de JS
Estandarización: ECMAScript
La versión ES6 o ES2015
Transpiladores: Babel, TypeScript
Organización del código JavaScript
Ejemplo de uso clásico de JS: utilizar un plugin de jQuery en nuestra web, o implementar alguna interacción con el usuario
Pocas líneas de código, todas en un mismo archivo
Organización del código JavaScript
Programar toda la UI de una página
¿2000 líneas en un solo archivo?
Ventajas
Inconvenientes
Organización del código JavaScript
Optimización: dividir el código en varios archivos/módulos
Ventajas
Inconvenientes
Organización del código JavaScript
Dependencias: es difícil asegurar el orden, y no es posible tener dependencias circulares
Organización del código JavaScript: módulos
Module loaders: ellos gestionan las dependencias y cargan los módulos (RequireJS, SystemJS)
Module bundlers: además de lo anterior, generan un solo código encadenado y minificado (browserify, webpack)
Organización del código JavaScript: módulos
¿Puedo escribir mis módulos como yo quiera? ¿hay un estándar?
¿AMD, CommonJS, UMD, ES6?
Webpack
ES6 -> Babel -> ES5 -> webpack -> bundle -> browser
ES6
let y const
Template literals
for ... of
Funciones
Arrow function
Clases
Módulos
Iterables
Propiedad length
Métodos:
forEach
map
filter
reduce
find
indexOf
Encadenamiento
Webpack
Module bundler
Paquete npm
webpack.config.js
webpack-dev-server
Loaders:
css-loader, style-loader
sass-loader
file-loader
babel-loader (con babel-core)
raw-loader
jQuery
Framework JS
Manipulación del DOM
El objeto jQuery
Evento DOMContentLoaded
HTMLElement
Seleccionando
Selectores CSS
Navegando por el DOM
prev(), next(), siblings()
parent(), closest()
children(), find()
first(), last(), eq()
Manipulando el DOM
Crear elementos e insertarlos en el DOM
append(), appendTo()
prepend(), prependTo()
after(), insertAfter()
Acceder al nodo de texto ( text() )
Acceder a la cadena HTML ( html() )
Accediendo a los atributos
attr()
addClass(), removeClass(), hasClass()
css()
Templates
lodash ( _ )
<script type="text/html"></script>
_.template()
<%= %>
<% _.each(datos, function(dato, i) { }) { } %>
Variables en forma de objeto
Links