HTML5 y CSS3
Índice
- 1.Introducción
- 2.HTML5
- 3.CSS3
- 3.1.Introducción al CSS
- 3.2.Breve historia de CSS
- 3.3.Familias de navegadores
- 3.4.Beneficios del uso del CSS3
- 3.5.Novedades CSS3
- 3.5.1.Nuevos selectores
- 3.5.2.Selectores de atributos
- 3.5.3.Combinadores
- 3.5.4.Seudoclases
- 3.5.5.Colores y opacidad
- 3.5.6.Opacidad (opacity)
- 3.5.7.Nuevas propiedades
- 3.5.8.Sombras (box-shadow, text-shadow)
- 3.5.9.Múltiples imágenes de fondo
- 3.5.10.Filetes (borders) con imágenes
- 3.5.11.Columnas de texto
- 3.5.12.WebFonts
- 3.5.13.Media queries
- 3.5.14.Transiciones CSS
- 3.5.15.Flexbox, el nuevo modelo de cajas flexibles
- 3.6.Ejercicios
- 4.Preprocesadores CSS
- 4.1.Ventajas de utilizar preprocesadores
- 4.2.Desventajas de los preprocesadores
- 4.3.Variables
- 4.4.Anidación
- 4.5.Funciones y mixins
- 4.6.Modularizar el código
- 4.7.Errores comunes
- 4.8.Cómo escoger un preprocesador
- 4.9.SASS
- 4.9.1.Instalar SASS
- 4.9.2.Grunt y SASS
- 4.9.3.SASS / SCSS
- 4.9.4.Propiedades
- 4.9.5.Selectores multilínea
- 4.9.6.Importaciones
- 4.10.LESS
- 4.10.1.Instalación
- 4.10.2.Variables
- 4.10.3.Mixins
- 4.10.4.Anidación de selectores
- 4.10.5.Funciones y operaciones
- 4.10.6.Compilar archivos LESS
- 4.11.Stylus
- 4.11.1.Compilar archivos Stylus
- 5.Bootstrap
1.Introducción
2.HTML5
2.1.¿Qué es HTML5?
-
un «clásico» HTML (texto/html), conocida como HTML5 y
-
una variante XHTML conocida como XHTML5, que es declarada como XML (XHTML) (application/xhtml+xml).
2.2.El largo camino entre HTML4 y HTML5
-
La compatibilidad con la web ya existente, que evita tener que aprender algún lenguaje nuevo.
-
Añade nuevas y potentes características de HTML que antes solo estaban disponibles en la web utilizando tecnologías como plugin de Flash y/o JavaScript.
-
Es más apto para escribir aplicaciones dinámicas que las versiones anteriores de HTML.
-
Tiene un algoritmo de interpretación de documentos HTML claramente definido, de forma que todos los navegadores que lo implementen serán capaces de crear un mismo modelo DOM a partir de un mismo documento marcado.
2.3.Novedades en HTML5
2.4.Diferencias entre HTML4 y HTML5
3.CSS3
3.1.Introducción al CSS
3.2.Breve historia de CSS
3.3.Familias de navegadores
3.4.Beneficios del uso del CSS3
3.5.Novedades CSS3
3.5.1.Nuevos selectores
3.5.2.Selectores de atributos
/* Todos los span con el atributo "lang" en negrita */ span [lang] {font-weight: bold;) /* Todos los span en portugués en verde */ span [lang="pt"] {color: green;} /* Todos los span en inglés americano en azul */ span [lang ~="en-us"] {color: blue;} /* Cualquier campo en chino en rojo, selecciona chino simplificado (zh-CN) y tradicional (zh-TW) */ span [lang |="zh"] {color: red;} /* Todos los enlaces internos con el fondo dorado */ a[href ^="#"] {background-color: gold} /* Todos los enlaces en los que la URL finaliza en ".cn" en rojo */ a[href $=".cn"] {color: red;} /* Todos los enlaces en los que la URL contiene "ejemplo" con el fondo gris */ a[href *="ejemplo"] {background-color: #CCCCCC;}
3.5.3.Combinadores
-
Combinador descendente E F: Selecciona un elemento F que desciende de E. Los descendientes de E son sus elementos hijos, nietos, etc. El elemento combinador es el espacio entre E y F.
-
Combinador hijo E>F: Selecciona un elemento F que es hijo de E, pero no selecciona los descendientes con más profundidad (nietos, biznietos, etc.). El carácter > es el elemento combinador.
-
Combinador hermanos adyacentes E + F: Cuando dos elementos E y F comparten el mismo padre, se selecciona F si es inmediatamente precedido por E. El carácter + es el elemento combinador.
<style> h2~p { color:green; } </style> <div id="uno"> <p>Este elemento no será visible porque es hermano pero anterior</p> <h2>This is a test</h2> <p>Este p es hermano de h2</p> <p>Este otro p también es hermano de h2</p> </div> <div id="dos"> <p>Este p no se pintará</p> </div>
3.5.4.Seudoclases
-
:nth-child(n) selecciona elementos basándose en la posición de los hijos. Puede utilizar números, expresiones y las palabras odd (impar) y even (par). De este modo podemos hacer el típico zebrado en las tablas de forma muy sencilla.
-
:nth-last-child(n) sigue la misma idea que el anterior, pero selecciona a partir del último elemento.
-
:last-child selecciona el último elemento de una lista (es lo mismo que :nth-child(1)).
-
:only-child es equivalente a: :first-child:last-child, o bien a: :nth-child(1):nth-last-child(1), seleccionando un elemento que es hijo único (es primero y último hijo).
-
:nth-of-type(n)
-
:nth-last-of-type(n)
-
:first-of-type que es igual a :nth-of-type(1)
-
:last-of-type que es igual a :nth-last-of-type(1)
-
:only-of-type que es igual a :first-of-type:last-of-type y también es igual a :nth-of-type(1):nth-last-of-type(1)
-
:checked selecciona los elementos de tipo input que estén seleccionados
-
:disabled selecciona los elementos de tipo input que estén deshabilitados
-
:enabled selecciona los elementos de tipo input que estén habilitados
-
:empty selecciona elementos que están vacíos, es decir que no tienen hijos
-
:not selecciona elementos que no cumplen la declaración especificada
-
:required selecciona elementos de tipo input que tengan el atributo «required» especificado
3.5.5.Colores y opacidad
p { color: rgba(0,0,0,0.5) }
background:hsl(320, 100%, 10%); background:hsl(320, 80%, 30%); background:hsl(320, 60%, 50%); background:hsl(320, 40%, 70%); background:hsl(320, 20%, 90%);
3.5.6.Opacidad (opacity)
<img src="img_02.jpg" style="opacity:0.2"> <img src="img_02.jpg" style="opacity:0.4"> <img src="img_02.jpg" style="opacity:0.6"> <img src="img_02.jpg" style="opacity:0.8"> <img src="img_02.jpg" style="opacity:1">
filter: alpha(opacity = 50);
3.5.7.Nuevas propiedades
.bordered { -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; }
border-radius: 5px 10px 5px 10px / 10px 5px 10px 5px; border-radius: 5px; border-radius: 5px / 10px;
3.5.8.Sombras (box-shadow, text-shadow)
-moz-box-shadow: 10px 10px 5px #888; -webkit-box-shadow: 10px 10px 5px #888; box-shadow: 10px 10px 5px #888;
box-shadow: 0 0 10px 5px black, -20px 0px 50px blue;
text-shadow: 2px 2px #aaa;
text-shadow: 2px 2px 5px #666;
text-shadow: 2px 2px 5px #666;
3.5.9.Múltiples imágenes de fondo
#example1 { width: 500px; height: 250px; background-image: url(fondo1.png), url(fondo2.png); background-position: center bottom, left top; background-repeat: no-repeat; }
3.5.10.Filetes (borders) con imágenes
background-image: url(fondo1.png) 25% repeat;
#uno { padding:30px; border-width:10px 10px 10px 10px; border-image: url('fondo.png') 10 100 10 10 repeat stretch; background-color:#fff; }
3.5.11.Columnas de texto
-webkit-column-count: 3; -moz-column-width: 200px; -webkit-column-width:200px; -moz-column-gap: 20px; -webkit-column-gap: 20px;
3.5.12.WebFonts
@font-face { font-family: Gentium; src: url(gentium.otf); }
@font-face { font-family: 'UbuntuRegular'; src: url('webfont.eot'); src: url('webfont.eot?#iefix') formato('embedded-opentype'), url('webfont.woff') formato('woff'), url('webfont.ttf') formato('truetype'), url('webfont.svg#UbuntuRegular') formato('svg'); font-weight: normal; font-style: normal; }
3.5.13.Media queries
@media screen and (max-width: 600px) { .class { background: #ccc; } }
<link rel="stylesheet" media="screen and (min-width: 600px)" href="small.css" />
3.5.14.Transiciones CSS
<a href="#" class="boto">Botón por transición</a>
a.boto { text-decoration:none; color:#fff; padding: 5px 10px; background: #f76c6c; -webkit-transition-property:background; -webkit-transition-duration: 0.5s; -webkit-transition-timing-function:ease; } a.boto:hover { background: #d22828; }
-
La transición no se tiene que poner dentro del evento (en este caso el selector hover) sino en el elemento que tiene que cambiar.
-
Lo que definimos en la transición es la propiedad que queremos animar, en este caso el background.
-
Podemos definir la duración y también la interpolación de tiempo. En este caso utiliza una función de aceleración. Disponemos de las siguientes funciones: ease, linear, ease-in, ease-out, ease-in-out y cubic-bezier.
-
También podemos definir un retraso en la ejecución de la animación con la propiedad -webkit-transition-delay: 0.5s.
-
Se puede escribir de manera compacta en una sola línea:
-webkit-transition: background 0.3s ease 0.5s;
-webkit-transition: background .3s ease, color 0.2s linear;
transition: all 3s ease, color 0.2s linear;
3.5.15.Flexbox, el nuevo modelo de cajas flexibles
<div class="contenedor"> <div class="element">1</div> <div class="element">2</div> <div class="element">3</div> <div class="element">4</div> <div class="element">5</div> <div class="element">6</div> <div class="element">7</div> </div>
.contenedor{ display:flex; } .elemento{ width:25%; }
-
row - Establece la dirección del eje principal en horizontal
-
row-reverse - Establece la dirección del eje principal en horizontal (invertido)
-
column - Establece la dirección del eje principal en vertical
-
column-reverse - Establece la dirección del eje principal en vertical (invertido)
3.6.Ejercicios
Adobe Typekit
Blink (Wikipedia)
https://es.wikipedia.org/wiki/Blink
CSS Flexbox (W3schools)
https://www.w3schools.com/css/css3_flexbox.asp
CSS Selectors (W3schools)
https://www.w3schools.com/cssref/css_selectors.asp
CSS3 transition properties (W3)
http://www.w3.org/TR/css3-transitions/#properties-from-css-
Google Chrome (Wikipedia)
https://es.wikipedia.org/wiki/Google_Chrome
Google Fonts
Media queri
Usando las cajas flexibles (MDN docs)
https://developer.mozilla.org/es/docs/Web/CSS/CSS_Flexible_Box_Layout/Usando_las_cajas_flexibles_CSS
Webfont Generator (Font Squirrel)
https://www.fontsquirrel.com/tools/webfont-generator
WebKit (Wikipedia)
4.Preprocesadores CSS
4.1.Ventajas de utilizar preprocesadores
-
Reducción del tiempo de desarrollo, puesto que se puede escribir menos código y de manera más limpia.
-
Reutilización. Por ejemplo, si varias clases tienen que usar un color, podemos almacenarlo en una variable, evitando escribir varias veces el mismo valor en formatos incómodos como RGB o hexadecimal.
-
Características dinámicas. Utilización de hojas de estilo CSS con comportamientos dinámicos (variables, clases, operaciones, sentencias, métodos y funciones). Por ejemplo, se puede asignar al ancho de un bloque un valor dinámico, expresado a través de una operación aritmética que pueda incluir variables. De este modo, el ancho no tendrá un valor fijo en píxeles ni uno relativo a las dimensiones de la pantalla, sino que dependerá del factor que se ha determinado.
-
Código más organizado. Se puede hacer un uso mejorado de la propiedad @import de CSS, lo que permite separar el código en varios archivos para mejorar la organización y que al compilar a CSS se genere un solo archivo minificado, que será el que descargará el usuario final.
-
Proyectos más fáciles de mantener. Al poder separar el código en múltiples archivos, resulta más fácil mantener los proyectos, puesto que se pueden organizar de forma modular.
4.2.Desventajas de los preprocesadores
-
Código complejo. Si el lenguaje no se escribe correctamente, el código compilado puede ser repetitivo y tener una gran cantidad de líneas de código innecesarias, aumentando así el peso del archivo CSS que se descarga el usuario final.
-
Malas prácticas. Utilizar un metalenguaje de CSS sin conocer a fondo el verdadero lenguaje puede malacostumbrar a los desarrolladores inexpertos a depender de herramientas de terceros.
-
Tienen que aprender a usarse. A pesar de que la curva de aprendizaje no es demasiado pronunciada, el hecho de tener que aprender una nueva tecnología desmotiva a algunos desarrolladores, especialmente a los maquetadores de la «vieja escuela».
4.3.Variables
4.4.Anidación
ul {} ul li {} ul li a {}
ul { li { a { ... } } }
4.5.Funciones y mixins
4.6.Modularizar el código
4.7.Errores comunes
div { p { ... } }
div {} div p {}
html { body { div { p { span {...} } } } }
html {} html body {} html body div {} html body div p {} html body div p span {}
4.8.Cómo escoger un preprocesador
4.9.SASS
4.9.1.Instalar SASS
gem install sass
sass entrada.scss salida.css
sass --watch entrada.scss:salida.css
sass --watch ruta/carpetasass
sass --watch ruta/carpetasass:ruta/carpetacss
sass --watch ruta/carpetasass:ruta/carpetacss
4.9.2.Grunt y SASS
modulo.exports = function(grunt) { grunt.initConfig({ sass: { dist: { files: { 'css/estilos.css' : 'scss/estilos.scss' } } }, watch: { css: { files: 'scss/*.scss', tasks: ['sass'] } } }); grunt.loadNpmTasks('grunt-contrib-sass'); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.registerTask('default',['watch']); }
4.9.3.SASS / SCSS
#main { color: grey; font-size: 0.9em; }
#main color: grey font-size: 0.9em
#main { color: grey; font-size: 0.9em; a { font: { weight: bold; family: serif; } &:hover { background-color: #eee; } } }
#main color: grey font-size: 0.9em a font: weight: bold family: serif &:hover background-color: #eee
4.9.4.Propiedades
#main :color grey :font-size 0.9em
4.9.5.Selectores multilínea
.users #userTab, .posts #postTab width: 100px height: 30px
4.9.6.Importaciones
@import "themes/dark"; @import "font.sass";
@import themes/dark @import font.sass
4.10.LESS
4.10.1.Instalación
<script type="text/javascript"> less = { env: "development", // o "production" async: false, // carga las importaciones de manera asíncrona fileAsync: false, // carga las importaciones async cuando una // página usa un protocolo de archivos poll: 1000, // Tiempo (en milisegundos) entre las consultas // mientras se encuentra en modo de seguimiento (watch) functions: {}, // funciones del usuario, especificadas por nombre dumpLineNumbers: "comments", // o "mediaQuery" o "all" relativeUrls: false,// ajusta las URLS relativas si false, // relativas respecto al fichero less de entrada rootpath: ":/a.com/"// ruta para añadir al principio de las URLS }; </script> <script src="less.js"></script>
<link rel="stylesheet/less" type="text/css" href="styles.less" />
$ npm install -g less
4.10.2.Variables
@color-principal: #1D365D; @color-secundario: #172B4A; @color-texto: #222; @anchura-imágenes: 300px; @radio: 5px;
@colorbase: red; body{ @colorbase: blue; color: @colorbase; } //Salida CSS: body { color: blue; }
4.10.3.Mixins
.bordered { -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; }
.box { border: 1px solid #ccc; color: #444; .bordered; }
.box { border: 1px solid #ccc; color: #444; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; }
// LESS .rounded-corners (@radius: 5px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; -ms-border-radius: @radius; -o-border-radius: @radius; border-radius: @radius; } .box { .rounded-corners; } footer { .rounded-corners(10px); } /* CSS compilado */ .box { -webkit-border-radius: 5px; -moz-border-radius: 5px; -ms-border-radius: 5px; -o-border-radius: 5px; border-radius: 5px; } footer { -webkit-border-radius: 10px; -moz-border-radius: 10px; -ms-border-radius: 10px; -o-border-radius: 10px; border-radius: 10px; }
4.10.4.Anidación de selectores
// LESS header { h1 { font-size: 26px; font-weight: bold; } p { font-size: 12px; a { text-decoration: none; &:hover { border-width: 1px } } } } /* CSS compilado */ header h1 { font-size: 26px; font-weight: bold; } header p { font-size: 12px; } header p a { text-decoration: none; } header p a:hover { border-width: 1px; }
4.10.5.Funciones y operaciones
// LESS @the-border: 1px; @base-color: #111; @red: #842210; #header { color: (@base-color * 3); border-left: @the-border; border-right: (@the-border * 2); } #footer { color: (@base-color + #003300); border-color: desaturate(@red, 10%); } /* CSS compilado */ #header { color: #333; border-left: 1px; border-right: 2px; } #footer { color: #114411; border-color: #7d2717; }
4.10.6.Compilar archivos LESS
$ lessc styles.less
4.11.Stylus
$ npm install -g stylus
/* Código Stylus */ body { font-family Roboto font-size 16px color #444 }
/* Código Stylus */ body font-family: Roboto; font-size: 16px; color: #444;
/* Código Stylus */ body font-family: Roboto font-size: 16px color: #444
4.11.1.Compilar archivos Stylus
stylus estil.styl
stylus –w estil.styl
stylus –w –c ruta/carpetastylus –o ruta/carpetacss
5.Bootstrap
5.1.¿Qué es Bootstrap?
5.2.Descarga e instalación de Bootstrap
-
los archivos compilados (su nombre empieza por bootstrap.*)
-
los archivos compilados y comprimidos (su nombre empieza por bootstrap.min* )
5.3.Descarga y enlace de Bootstrap
<!- Última versión compilada y comprimida del CSS --> <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/ bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"></link> <!-Tema opcional --> < link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/ bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"></link> <!-Última versión compilada y comprimida del Javascript --> <s script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script >
5.4.Diseño responsive en rejilla
-
Pantallas grandes (llamadas LG) a partir de 1.200 píxeles
-
Pantallas medianas (llamadas MD) a partir de 992 píxeles
-
Pantallas tipo mesita (llamadas SM) a partir de 768 píxeles
-
Pantallas de dispositivos móviles (llamadas XS), por debajo de 768 píxeles.
-
Resolución LG: queremos los 4 bloques en fila. Como hay 12 columnas, cada bloque ocupará 3 columnas.
-
Resolución MD: queremos 3 bloques por fila, Como hay 12 columnas, necesitaremos que cada bloque ocupe 4 columnas.
-
Resolución SM: queremos 2 bloques por fila. Como hay 12 columnas, cada bloque ocupará 6 columnas.
-
Resolución XS: queremos 1 bloque por fila: es decir, cada elemento ocupará las 12 columnas.
<div class="row"> <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">bloque 1</div> <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">bloque 2</div> <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">bloque 3</div> <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">bloque 4</div> </div>
Grupo de clases |
CSS display |
---|---|
.visible-*-block |
display: block; |
.visible-*-inline |
display: inline; |
.visible-*-inline-block |
display: inline-block; |
<div class="row"> <div class="col-sm-4 col-sm-push-8">bloque1</div> <div class="col-sm-8 col-sm-pull-4">bloque2</div> </div>
<div class="row"> <div class="col-md-4">bloque 1</div> <div class="col-md-4 col-md-offset-4">bloque 2</div> </div>
<div class="clearfix visible-xs"></div>
5.5.El elemento container
|
XS (<768 px) |
SM (>=768 px) |
MD (>=992 px) |
LG (>= 1.200 px) |
---|---|---|---|---|
Prefijo de la clase |
col-xs |
col-sm |
col-md |
col-lg |
Anchura máxima contenedor |
Ninguno (auto) |
728 px |
940 px |
1.170 px |
Anchura máxima columna |
Auto |
60 px |
78 px |
95 px |
Separación entre columnas |
30 px (15 px a cada lado) |
|||
Permite anidación |
Sí |
Sí |
Sí |
Sí |
Permite desplazar columnas |
No |
Sí |
Sí |
Sí |
Permite reordenar columnas |
No |
Sí |
Sí |
Sí |
5.6.Configuración inicial
<!DOCTYPE html> <html lang="es">
<meta name="viewport" content="width=device-width, initial-scale=1">
5.7.Otros elementos Bootstrap
-
Tipografía
-
Código
-
Tablas
-
Formularios
-
Botones
-
Imágenes
-
Mensajes de información y ayuda