{"id":1557,"date":"2024-08-02T07:19:32","date_gmt":"2024-08-02T05:19:32","guid":{"rendered":"https:\/\/blog.sutilweb.eu\/?page_id=1557"},"modified":"2024-08-02T07:19:32","modified_gmt":"2024-08-02T05:19:32","slug":"efectos-visuales-y-movimiento","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/css3\/efectos-visuales-y-movimiento\/","title":{"rendered":"Efectos visuales y movimiento"},"content":{"rendered":"\n<h2>1. Sombras<\/h2>\n<h3>1.1 box-shadow<\/h3>\n<p>Se le pueden aplicar 3 tipos de sombras:<\/p>\n<ul>\n<li>Sombra a la caja<\/li>\n<li>Sombra al texto<\/li>\n<li>drop-shadow<\/li>\n<\/ul>\n<p><!--more--><\/p>\n<p>La propiedad que da sombra a las cajas se denomina <strong><em>box-shadow<\/em><\/strong>, y puede tener los siguientes valores:<\/p>\n<ul>\n<li><strong><em>box-shadow<\/em><\/strong>: (la distancia en x) (la distancia en y) (blur o desenfoque radial) (expansi\u00f3n del desenfoque) (color) (sombra interna o externa).<\/li>\n<\/ul>\n<p>Estos son los valores posibles que podemos aplicar a la sombra. Se puede utilizar cualquier unidad de medida que prefiramos. Se pueden aplicar valores negativos, con lo que la sombra se mover\u00eda al otro lado. Se puede trabajar el color aplicando opacidad, con la siguiente sintaxis:<\/p>\n<pre>box-shadow: 1rem 1rem 1rem 1rem color: #0005 inset;<\/pre>\n<p>Las sombras pueden ser externas (<strong><em>outlet<\/em><\/strong>) o internas (<strong><em>inset<\/em><\/strong>). Pero no escribir <strong><em>outset<\/em><\/strong>, si queremos sombra interna escribimos al final <strong><em>inset<\/em><\/strong>. <strong>Ejm<\/strong><\/p>\n<div>\n<div>\n<pre>&lt;!DOCTYPE html&gt;<br \/>&lt;html lang=\"en\"&gt;<br \/>\u00a0 &lt;head&gt;<br \/>\u00a0 \u00a0 &lt;meta charset=\"UTF-8\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;<br \/>\u00a0 \u00a0 &lt;title&gt;Ejm01&lt;\/title&gt;<br \/>\u00a0 \u00a0 &lt;style&gt;<br \/>\u00a0 \u00a0 \u00a0 .box {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 border: thick solid black;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 margin-left: auto;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 margin-right: auto;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 200px;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 height: 200px;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .box-shadow {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 box-shadow: 1rem 1rem 1rem 1rem #0005;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 &lt;\/style&gt;<br \/>\u00a0 &lt;\/head&gt;<br \/>\u00a0 &lt;body&gt;<br \/>\u00a0 \u00a0 &lt;h1&gt;Ejm01 - Jon Mircha&lt;\/h1&gt;<br \/>\u00a0 \u00a0 &lt;p&gt;Vamos a dibujar una caja con sombra&lt;\/p&gt;<br \/>\u00a0 \u00a0 &lt;div class=\"box box-shadow\"&gt;&lt;\/div&gt;<br \/>\u00a0 &lt;\/body&gt;<br \/>&lt;\/html&gt;<\/pre>\n<\/div>\n<\/div>\n<h3>1.2 text-shadow<\/h3>\n<p>Tambi\u00e9n podemos aplicar <strong>sombras<\/strong> al texto con esta propiedad.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>p {\ntext-shadow: 1px (ancho) 1px (alto) 1px (blur)\n}<\/pre>\n<p>Se pueden aplicar <strong>sombras m\u00faltiples<\/strong>, para ello separamos con coma las nuevas propiedades, de la siguiente manera.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>div {\nbox-shadow: 1px 1px 1px 1px navy, 2px 2px 2px 3px green, -1rem -1rem 1rem 1rem yellow;\n}<\/pre>\n<p>Les podemos dar valores negativos, no s\u00f3lo positivos. Las <strong>sombras m\u00faltiples<\/strong> tambi\u00e9n se pueden hacer con los textos. <strong>La propiedad <em>filter<\/em><\/strong> Podemos usar esta propiedad para poner filtros a nuestras cajas y textos. La sintaxis es<\/p>\n<pre>filter: drop-shadow (mov-x mov-y blur-radius color)<\/pre>\n<p><strong>Ejm<\/strong><\/p>\n<pre>div {\nfilter: drop-shadow(1rem 1rem 1rem red);\n}<\/pre>\n<p>Dentro del div si incluimos una imagen con extensi\u00f3n <em>PNG<\/em>, se le aplicar\u00e1 un filtro con color rojo, lo podemos probar y funcionar\u00e1 perfectamente. NO se pueden aplicar efectos m\u00faltiples con el filtro de <strong><em>drop-shadow<\/em><\/strong>. Con <strong><em>box-shadow<\/em><\/strong> s\u00ed se pod\u00eda.<\/p>\n<h2>2. Degradados (gradients)<\/h2>\n<p>Existen 3 tipos de degradados:<\/p>\n<ul>\n<li>Degradado lineal<\/li>\n<li>Degradado radial<\/li>\n<li>Degradado c\u00f3nico<\/li>\n<\/ul>\n<p>Hay herramientas online que nos ayudan con los degradados, una de las m\u00e1s utilizadas es <a href=\"https:\/\/cssgradient.io\/\">https:\/\/cssgradient.io\/.<\/a><\/p>\n<h3>2.1 Degradado lineal<\/h3>\n<p>Los degradados trabajan sobre la propiedad <strong><em>background-color<\/em><\/strong> de la siguiente manera.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background-image: linear-gradient(red, green);\nbackground-image: linear-gradient (red, green, blue);<\/pre>\n<p>Como primer par\u00e1metro le podemos pasar los <strong>grados<\/strong>, cuya unidad en CSS es deg, de la siguiente manera.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background-image: linear-gradient(0deg, red, green, blue);<\/pre>\n<p>Si subimos los grados se ir\u00e1 moviendo el degradado en sentido de las manecillas del reloj. Pod\u00e9mos utilizar tb las palabras.<\/p>\n<ul>\n<li>to right<\/li>\n<li>to top<\/li>\n<li>to left<\/li>\n<li>to bottom<\/li>\n<\/ul>\n<p>de la siguiente manera.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background-image: linear-gradient(to right, red, green, blue);<\/pre>\n<p>Tambi\u00e9n podemos hacer lo siguiente.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background-image: linear-gradient(to top left, red, green, blue);\nbackground-image: linear-gradient(to top right, red, green, blue);<\/pre>\n<p>Se pueden agregar m\u00e1s colores.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background-image: linear-gradient(to left, red, green, blue, grey);<\/pre>\n<p>Podemos usar porcentajes de qu\u00e9 valor a qu\u00e9 valor vayan, de la siguiente manera.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre><span class=\"blue\">background<\/span>: linear-gradient(90deg, rgba(2,0,36,1) 0%, rgba(9,9,121,1) 35%, rgba(0,212,255,1) 100%);<\/pre>\n<p>Si queremos dibujar por ejm 3 colores que no se degraden, hacemos lo siguiente.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background-image: linear-gradient(90deg, green 33%, white 34% 67%, blue  68%);<\/pre>\n<h3>2.2. Degradado radial<\/h3>\n<p>Por defecto el <strong>degradado radial<\/strong> es circular. El uso es el siguiente.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background: radial-gradient(red, blue, green);<\/pre>\n<p>Podemos tener degradados radiales en forma de <strong>c\u00edrculos<\/strong> y <strong>elipses<\/strong>, de la siguiente manera.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background: radial-gradient(circle 2rem, red, blue, green)\nbackground: radial-gradient(ellipse 2rem, red, blue, green):<\/pre>\n<p>Podemos hacer que cada color tenga un porcentaje en el que salga.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background: radial-gradient(circle 4rem, red 30%, blue 31% 67%, yellow);<\/pre>\n<p>Podemos decir desde donde va a empezar el centro del radio, de la siguiente manera.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background: radial-gradient(4rem at top, red, blue, green)<\/pre>\n<p>Los valores posibles de que disponemos son:<\/p>\n<ul>\n<li>at top<\/li>\n<li>at bottom<\/li>\n<li>at left<\/li>\n<li>at right<\/li>\n<li>at center (default)<\/li>\n<\/ul>\n<p>Podemos hacer combinaciones:<\/p>\n<ul>\n<li>at top left<\/li>\n<li>at top right<\/li>\n<li>at bottom left<\/li>\n<li>at bottom right<\/li>\n<\/ul>\n<p>Si vamos a utilizar <strong>elipse<\/strong>, debemos hacer lo siguiente.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background: radial-gradient(ellipse 30px 100px, red, blue, green);<\/pre>\n<p>Los 30px son en el eje X, los 100px afectan al eje Y.<\/p>\n<h3>2.3 Gradiente c\u00f3nico<\/h3>\n<p>Lo que hace es generar una <strong>proyecci\u00f3n c\u00f3nica<\/strong>. La propiedad a usar es <strong><em>conic-gradient<\/em><\/strong>. La sintaxis es.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background: conic-gradient(red, blue, yellow)<\/pre>\n<p>Podemos hacer m\u00e1s cosas, como por ejm.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background: conic-gradient(red 0deg 90deg, blue 90deg 120deg, green 120deg 230deg);<\/pre>\n<p>El rojo ir\u00eda de 0 grados a 90, el azul de 90 a 120, y el verde el resto. No va a haber difuminaci\u00f3n entre el azul y el verde ya que el verde empieza justo cuando termina el azul. Podemos utilizar la palabra clave <strong><em>from<\/em> <\/strong>para elegir desde que grados se comienza la c\u00f3nica.<\/p>\n<pre>background: conic-gradient(from 90deg, red 0deg 90deg, blue 90deg 120deg, green 120deg 230deg);<\/pre>\n<h2>3. Patrones para gradientes<\/h2>\n<p>Hay 3 funciones para ello:<\/p>\n<ul>\n<li><strong><em>repeating-linear-gradient()<\/em><\/strong><\/li>\n<li><strong><em>repeating-radial-gradient()<\/em><\/strong><\/li>\n<li><strong><em>repeating-conic-gradient()<\/em><\/strong><\/li>\n<\/ul>\n<p>Ejm para <strong><em>linear-gradient<\/em><\/strong>.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>background: repeating-linear-gradient(red 0 10px, blue 10px 20px, green 20px 30px);<\/pre>\n<h2>4. Gr\u00e1ficos con degradados CSS<\/h2>\n<p>Vamos a crear 2 gr\u00e1ficas, una de pastel y otra en formato de dona. Veamos dos ejms completos<\/p>\n<div>\n<div>\n<pre>&lt;!DOCTYPE html&gt;<br \/>&lt;html lang=\"en\"&gt;<br \/>\u00a0 &lt;head&gt;<br \/>\u00a0 \u00a0 &lt;meta charset=\"UTF-8\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;<br \/>\u00a0 \u00a0 &lt;style&gt;<br \/>\u00a0 \u00a0 \u00a0 .box {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 200px;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 height: 200px;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .pastel {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 background-image: conic-gradient(<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 cyan 050%,<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 magenta 50% 80%,<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 yellow 80%<br \/>\u00a0 \u00a0 \u00a0 \u00a0 );<br \/>\u00a0 \u00a0 \u00a0 \u00a0 border-radius: 50%;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .donut {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 background-image: radial-gradient(<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 white 40%,<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 black 40% 41%,<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 transparent 43%<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ),<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 conic-gradient(cyan 0 50%, magenta 50% 80%, yellow 80%);<br \/>\u00a0 \u00a0 \u00a0 \u00a0 border-radius: 50%;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 &lt;\/style&gt;<br \/>\u00a0 \u00a0 &lt;title&gt;Document&lt;\/title&gt;<br \/>\u00a0 &lt;\/head&gt;<br \/>\u00a0 &lt;body&gt;<br \/>\u00a0 \u00a0 &lt;div class=\"box pastel\"&gt;&lt;\/div&gt;<br \/>\u00a0 \u00a0 &lt;div class=\"box donut\"&gt;&lt;\/div&gt;<br \/>\u00a0 &lt;\/body&gt;<br \/>&lt;\/html&gt;<\/pre>\n<\/div>\n<\/div>\n<h2>5. Filtros<\/h2>\n<p>Vamos a aprender a hacer filtros que se utilizan en software como <strong>Ilustrator<\/strong>. Comencemos Hay una gran cantidad de filtros CSS que podemos aplicar.<\/p>\n<ol>\n<li><strong><em>filter: blur(0.15rem);<\/em><\/strong> VALORES DE 1 A 0 (DE CLARO A BORROSO)<\/li>\n<li><strong><em>filter: britgthness(0.75);<\/em><\/strong> \/\/ VALORES DE 1 A 0 (DE CLARO A OSCURO)<\/li>\n<li><strong><em>filter: contrast(0);<\/em><\/strong> VALORES DE 0 A 1 (DE OPACO A TRANSPARENTE)<\/li>\n<li><strong><em>filter: grayscale(0);<\/em><\/strong> \/\/ ESCALA DE GRISES DE 0 A 1 (DE MENOS A M\u00c1S GRIS)<\/li>\n<li><strong><em>filter: sepia();<\/em><\/strong> \/\/ DE 0 A 1 (EN 0 NO SE APLICA NADA)<\/li>\n<li><strong><em>filter: hue-rotate(0deg);<\/em><\/strong> \/\/ VA POR GRADOS<\/li>\n<li><strong><em>filter: invert();<\/em><\/strong> VALOR DE 0 A 1, INVIERTE LOS VALORES, EN 0 NO INVIERTE<\/li>\n<li><strong><em>filter: opacity();<\/em><\/strong> VA DE 0 (TRANSPARENTE) A 1 (OPACO)<\/li>\n<li><strong><em>filter: saturate();<\/em><\/strong> VA DE 0 A 1, VALORES MAYORES SOBRESATURAN<\/li>\n<li><strong><em>filter: drop-shadow();<\/em><\/strong> \/\/ MEJOR UTILIZAR IMAGES PNG.<\/li>\n<\/ol>\n<p>Existe la opci\u00f3n de aplicar varios filtros.<\/p>\n<h2>6. Filtros m\u00faltiples a un \u00fanico elemento<\/h2>\n<p>Se pueden a\u00f1adir varios filtros simplemente dejando un espacio entre las funciones.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>filter: blur(0.1) hue-rotate(30deg) saturate(0.3) opacity(0.75)...<\/pre>\n<h2>7. Aplicar fondos<\/h2>\n<p>Para ello utilizamos la propiedad <strong><em>backdrop-filter<\/em><\/strong>. Esta propiedad funciona igual que la propiedad <strong><em>filter<\/em><\/strong>, pero trabaja sobre los fondos de las cajas. Se le pueden aplicar <strong>filtros m\u00faltiples<\/strong> como en <strong><em>filter<\/em><\/strong>, tan s\u00f3lo separando las funciones con un espacio en blanco.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>backdrop-filter: blur(0.50) hue-rotate(120deg)...<\/pre>\n<h2>8. Crear una clase para crear de claro a oscuro<\/h2>\n<p>Para crear un <strong>tema light<\/strong> o <strong>tema dark<\/strong> utilizamos el filtro de la inversi\u00f3n. La sintaxis que tendr\u00edamos que utilizar es.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>.dark-mode {\nbackground-color: white; \/\/ COLOR DE FONDO POR DEFECTO EN LOS NAVEGADORES\ncolor: black; \/\/ COLOR DE LETRA POR DEFECTO EN LOS NAVEGADORES\ninvert(1); \/\/ INVIERTO LOS COLORES\n}<\/pre>\n<h2>9. Modos de mezcla<\/h2>\n<p>Vamos a superponer 2 im\u00e1genes, una sobre la otra. La propiedad que se utiliza es <strong><em>mix-blend-mode<\/em><\/strong> y el valor por defecto es <strong><em>normal<\/em><\/strong><\/p>\n<h2>10. Modos de mezcla en fondos<\/h2>\n<p>Se utiliza la funci\u00f3n <strong><em>background-blend-mode<\/em><\/strong>. Se utiliza para im\u00e1genes de fondo.<\/p>\n<h2>11. clip-path (enmascaramiento)<\/h2>\n<p>La propiedad <strong><em>clip-path<\/em><\/strong> va a hacer uso de 4 funciones:<\/p>\n<ul>\n<li><strong><em>circle()<\/em><\/strong> \/\/ DENTRO LE ESPECIFICAMOS EL RADIO<\/li>\n<li><strong><em>ellipse()<\/em><\/strong> \/\/ PODEMOS DEFINIR EL RADIO X Y EL RADIO Y<\/li>\n<li><strong><em>inset()<\/em><\/strong> \/\/<\/li>\n<li><strong><em>polygon()<\/em><\/strong> \/\/ PARA CREAR UN POL\u00cdGONO PODEMOS UTILIZAR EL SIGUIENTE LINK: <a href=\"https:\/\/bennettfeely.com\/clippy\/\">https:\/\/bennettfeely.com\/clippy\/<\/a><\/li>\n<\/ul>\n<p><strong>Ejm<\/strong><\/p>\n<pre>clip-path: circle(20px at top)\nclip-path: circle(20px at left bottom)\nclip-path: circle(20px at 0 0);\nclip-path: circle(20px at 20% 20%);\nclip-path: ellipse( 20px 30px);\nclip-path: inset(1rem 2rem 3rem 3rem <strong>round<\/strong> 1rem); \/\/ FUNCIONA IGUAL QUE MARGIN O PADDING\nclip-path: polygon(0 0, 100% 0, 50% 100%); \/\/ CREA UN TRI\u00c1NGULO, PODEMOS AGREGAR M\u00c1S NODOS, SI A\u00d1ADIMOS UN CUARTO VALOR<\/pre>\n<p>Podemos utilizar las palabras <strong><em>top<\/em><\/strong>, <strong><em>bottom<\/em><\/strong>&#8230; tambi\u00e9n <strong>porcentajes<\/strong>. Tambi\u00e9n podemos utilizar la palabra <strong><em>inset<\/em><\/strong>. La palabra <strong><em>round<\/em> <\/strong>redondea las esquinas, y puede tener hasta 4 valores, funcionando dichos valores como un <strong><em>margin<\/em> <\/strong>o un <strong><em>padding<\/em><\/strong>.<\/p>\n<h2>12. shape-outside<\/h2>\n<p>Tiene las mismas funciones que <strong><em>clip-path<\/em><\/strong> menos la funci\u00f3n <strong><em>inset()<\/em><\/strong>.<\/p>\n<h2>13. Desplazamiento de la p\u00e1gina<\/h2>\n<p>Vamos a ver un par de efectos relacionados con el desplazamiento de la p\u00e1gina. Esto es lo que se utiliza cuando queremos hacer una sola p\u00e1gina en nuestro sitio web. Hay una propiedad que se llama <strong><em>scroll-margin-top<\/em><\/strong> (tambi\u00e9n existen <strong><em>scroll-margin-left<\/em><\/strong>, <strong><em>scroll-margin-right)<\/em><\/strong> que lo utilizaremos para darle un enfoque elegante, es mejor utilizar \u00e9sta que utilizar <strong><em>margin-top<\/em><\/strong>. El otro efecto que vamos a utilizar es utilizar la propiedad <strong><em>scroll-behavior<\/em><\/strong>, cuyo valor por defecto es <strong><em>none<\/em><\/strong>. Se lo aplicamos directamente a la etiqueta <strong><em>html.\u00a0<\/em><\/strong>Le podemos dar un valor <strong><em>smooth<\/em><\/strong> (suave).<\/p>\n<p><strong>Ejm <\/strong><\/p>\n<div>\n<div>\n<pre>&lt;!DOCTYPE html&gt;<br \/>&lt;html lang=\"en\"&gt;<br \/>\u00a0 &lt;head&gt;<br \/>\u00a0 \u00a0 &lt;meta charset=\"UTF-8\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;<br \/>\u00a0 \u00a0 &lt;style&gt;<br \/>\u00a0 \u00a0 \u00a0 html {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 box-sizing: border-box;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 font-family: sans-serif;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 font-size: 16px;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 scroll-behavior: smooth;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 *,<br \/>\u00a0 \u00a0 \u00a0 *::after,<br \/>\u00a0 \u00a0 \u00a0 *::before {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 box-sizing: inherit;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 body,<br \/>\u00a0 \u00a0 \u00a0 h1,<br \/>\u00a0 \u00a0 \u00a0 h2 {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 margin: 0;<br \/>\u00a0 \u00a0 \u00a0 } \/* HEADER LO FIJAMOS A LA PARTE DE ARRIBA CON position: sticky *\/<br \/>\u00a0 \u00a0 \u00a0 header {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 position: sticky;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 top: 0;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 padding: 0.25rem;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 text-align: center;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 background-color: black;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 color: white;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 header a {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 margin: 01rem;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 color: #00c4d6;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 header a:hover {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 color: #e94cc4;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 [id] {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 scroll-margin-top: 7ex;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 padding: 30px;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .slide {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 100%;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 min-height: 100vh;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 color: black;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 background-color: #1eb345;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .slide:nth-child(even) {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 background-color: antiquewhite;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 &lt;\/style&gt;<br \/>\u00a0 \u00a0 &lt;title&gt;Scroll&lt;\/title&gt;<br \/>\u00a0 &lt;\/head&gt;<br \/>\u00a0 &lt;body&gt;<br \/>\u00a0 \u00a0 &lt;header class=\"header\"&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;h1&gt;Scroll&lt;\/h1&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;nav class=\"nav\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;a href=\"#section-1\"&gt;Secci\u00f3n 1&lt;\/a&gt;<br \/>        &lt;a href=\"#section-2\"&gt;Secci\u00f3n 2&lt;\/a&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;a href=\"#section-3\"&gt;Secci\u00f3n 3&lt;\/a&gt;<br \/>        &lt;a href=\"#section-4\"&gt;Secci\u00f3n 4&lt;\/a&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;a href=\"#section-5\"&gt;Secci\u00f3n 5&lt;\/a&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;\/nav&gt;<br \/>\u00a0 \u00a0 &lt;\/header&gt;<br \/>\u00a0 \u00a0 &lt;section id=\"section-1\" class=\"slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;h2&gt;Secci\u00f3n 1&lt;\/h2&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;p&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 Lorem ipsum dolor sit amet consectetur adipisicing elit. Quidem iste<br \/>\u00a0 \u00a0 \u00a0 \u00a0 rerum eaque, alias dolorum possimus sit dolorem, obcaecati, quas ipsum<br \/>\u00a0 \u00a0 \u00a0 \u00a0 reiciendis qui. Fugit natus aut voluptate similique ratione quis quos?<br \/>\u00a0 \u00a0 \u00a0 &lt;\/p&gt;<br \/>\u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 \u00a0 &lt;section id=\"section-2\" class=\"slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;h2&gt;Secci\u00f3n 2&lt;\/h2&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;p&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 Lorem ipsum dolor sit amet consectetur adipisicing elit. Quidem iste<br \/>\u00a0 \u00a0 \u00a0 \u00a0 rerum eaque, alias dolorum possimus sit dolorem, obcaecati, quas ipsum<br \/>\u00a0 \u00a0 \u00a0 \u00a0 reiciendis qui. Fugit natus aut voluptate similique ratione quis quos?<br \/>\u00a0 \u00a0 \u00a0 &lt;\/p&gt;<br \/>\u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 \u00a0 &lt;section id=\"section-3\" class=\"slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;h2&gt;Secci\u00f3n 3&lt;\/h2&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;p&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 Lorem ipsum dolor sit amet consectetur adipisicing elit. Quidem iste<br \/>\u00a0 \u00a0 \u00a0 \u00a0 rerum eaque, alias dolorum possimus sit dolorem, obcaecati, quas ipsum<br \/>\u00a0 \u00a0 \u00a0 \u00a0 reiciendis qui. Fugit natus aut voluptate similique ratione quis quos?<br \/>\u00a0 \u00a0 \u00a0 &lt;\/p&gt;<br \/>\u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 \u00a0 &lt;section id=\"section-4\" class=\"slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;h2&gt;Secci\u00f3n 4&lt;\/h2&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;p&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 Lorem ipsum dolor sit amet consectetur adipisicing elit. Quidem iste<br \/>\u00a0 \u00a0 \u00a0 \u00a0 rerum eaque, alias dolorum possimus sit dolorem, obcaecati, quas ipsum<br \/>\u00a0 \u00a0 \u00a0 \u00a0 reiciendis qui. Fugit natus aut voluptate similique ratione quis quos?<br \/>\u00a0 \u00a0 \u00a0 &lt;\/p&gt;<br \/>\u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 \u00a0 &lt;section id=\"section-5\" class=\"slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;h2&gt;Secci\u00f3n 5&lt;\/h2&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;p&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 Lorem ipsum dolor sit amet consectetur adipisicing elit. Quidem iste<br \/>\u00a0 \u00a0 \u00a0 \u00a0 rerum eaque, alias dolorum possimus sit dolorem, obcaecati, quas ipsum<br \/>\u00a0 \u00a0 \u00a0 \u00a0 reiciendis qui. Fugit natus aut voluptate similique ratione quis quos?<br \/>\u00a0 \u00a0 \u00a0 &lt;\/p&gt;<br \/>\u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 &lt;\/body&gt;<br \/>&lt;\/html&gt;<\/pre>\n<\/div>\n<\/div>\n<h2>14. <em>scroll-snap-type<\/em>. Ajuste del desplazamiento<\/h2>\n<p>Vamos a aprender a hacer presentaciones tipo <strong>Powerpoint<\/strong>. La propiedad que vamos a usar es <strong><em>scroll-snap-type<\/em><\/strong>, que la tenemos que poner en el contenedor padre, y que recibe dos valores, el primer valor determina que eje quieres controlar, sus valores son:<\/p>\n<ul>\n<li>x<\/li>\n<li>y<\/li>\n<li>inline<\/li>\n<li>block<\/li>\n<li>both<\/li>\n<\/ul>\n<p>Su sintaxis es:<\/p>\n<pre>scroll-snap-type: x mandatory<\/pre>\n<p>Si ponemos el valor <strong><em>x<\/em> <\/strong>o <strong><em>inline<\/em> <\/strong>vamos a controlar el eje X. Si ponemos <strong><em>y<\/em> <\/strong>o <strong><em>block<\/em><\/strong>, vamos a controlar el eje Y. Si utilizamos la palabra <strong><em>both<\/em> <\/strong>queremos controlar tanto X \u00a0como Y. El segundo valor que tenemos que poner es el efecto que vamos a poner, que puede ser:<\/p>\n<ul>\n<li><strong><em>mandatory<\/em><\/strong><\/li>\n<li><strong><em>proximity<\/em><\/strong><\/li>\n<\/ul>\n<p><strong><em>mandatory<\/em> <\/strong>es un movimiento mas duro. Y en los elementos hijos hay que utilizar la propiedad scroll-snap-align que puede tener varios valores, entre ellos el que vamos a utilizar en el siguiente ejm, el que centra tiene el valor center.<\/p>\n<p><strong>Ejm <\/strong><\/p>\n<div>\n<div>\n<pre>&lt;!DOCTYPE html&gt;<br \/>&lt;html lang=\"en\"&gt;<br \/>\u00a0 &lt;head&gt;<br \/>\u00a0 \u00a0 &lt;meta charset=\"UTF-8\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;<br \/>\u00a0 \u00a0 &lt;style&gt;<br \/>\u00a0 \u00a0 \u00a0 html {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 box-sizing: border-box;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 font-family: sans-serif;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 font-size: 16px;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 *,<br \/>\u00a0 \u00a0 \u00a0 *::after,<br \/>\u00a0 \u00a0 \u00a0 *::before {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 box-sizing: inherit;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 body,<br \/>\u00a0 \u00a0 \u00a0 h1,<br \/>\u00a0 \u00a0 \u00a0 h2 {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 margin: 0;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .slides {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 100%;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 height: 100vh;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 overflow-y: scroll; \/* EJE QUE QUIERO CONTROLAR *\/<br \/>\u00a0 \u00a0 \u00a0 \u00a0 scroll-snap-type: blockmandatory; \/* FUNDAMENTAL *\/<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .slide {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 100%;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 height: inherit;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 background-color: #1e2345;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 scroll-snap-align: center; \/* FUNDAMENTAL *\/<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .slide:nth-child(even) {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 background-color: aqua;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .slide-container {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 80%;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 height: inherit;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 margin: 0auto;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 display: flex;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 flex-direction: column;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 justify-content: center;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 align-items: center;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 color: #d98f09;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .slide-containerh2 {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 font-size: 3vw;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .slide-containerp {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 font-size: 1.5vw;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 &lt;\/style&gt;<br \/>\u00a0 \u00a0 &lt;title&gt;Scroll Snap&lt;\/title&gt;<br \/>\u00a0 &lt;\/head&gt;<br \/>\u00a0 &lt;body&gt;<br \/>\u00a0 \u00a0 &lt;main class=\"slides\"&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;section class=\"slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;article class=\"slide-container\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;h2&gt;Slide 1&lt;\/h2&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;p&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 Lorem, ipsum dolor sit amet consectetur adipisicing elit. Velit<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 necessitatibus inventore ut iure natus. At, a excepturi quisquam<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 eligendi eum quas iusto minima unde enim sapiente, incidunt rerum<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 doloremque quaerat.<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;\/p&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;\/article&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;section class=\"slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;article class=\"slide-container\"&gt;&lt;h2&gt;Slide 2&lt;\/h2&gt;&lt;\/article&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;section class=\"slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;article class=\"slide-container\"&gt;&lt;h2&gt;Slide 3&lt;\/h2&gt;&lt;\/article&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;section class=\"slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;article class=\"slide-container\"&gt;&lt;h2&gt;Slide 4&lt;\/h2&gt;&lt;\/article&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;section class=\"slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;article class=\"slide-container\"&gt;&lt;h2&gt;Slide 5&lt;\/h2&gt;&lt;\/article&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 \u00a0 &lt;\/main&gt;<br \/>\u00a0 &lt;\/body&gt;<br \/>&lt;\/html&gt;<\/pre>\n<\/div>\n<\/div>\n<h2>15. <em>scroll-snap-type<\/em> en horizontal (carrusel)<\/h2>\n<p>En este caso vamos a crear una especie de carrusel con la propiedad <strong><em>scroll-snap-type<\/em><\/strong>. Son 3 pasos los que tenemos que seguir siempre en el contenedor padre:<\/p>\n<ul>\n<li>El <strong>contenedor padre<\/strong> que va a recibir los <strong>slides<\/strong> (tanto horizontales como verticales) tiene que tener una anchura (o una altura dependiendo de sobre lo que estemos trabajando) bien definidas.<\/li>\n<li>El <strong>elemento padre<\/strong>, igualmente tiene que tener la propiedad <strong><em>overflow: scroll<\/em><\/strong> (tiene que tener este valor).<\/li>\n<li>Por \u00faltimo definir los valores de <strong><em>scroll-snap-type: x mandatory<\/em><\/strong>.<\/li>\n<\/ul>\n<p>Y en el contenedor hijo hay que tener lo siguiente:<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<ul>\n<li><strong><em>scroll-snap-align: start<\/em><\/strong> (por ejm)<\/li>\n<\/ul>\n<p>Esto es lo que ser\u00eda<\/p>\n<div>\n<pre>\/* ELEMENTO CONTENEDOR *\/\n.carousel-container {\nwidth: 100%;\ndisplay: grid;\ngrid-template-columns: repeat(5, 100%);\noverflow-x: scroll;\noverflow-y: hidden;\nscroll-snap-type: xmandatory;\n}\n\/* ELEMENTO HIJO *\/\n.carousel-slide {\ndisplay: flex;\nflex-direction: column;\njustify-content: center;\nalign-items: center;\nbackground-color: aqua;\nscroll-snap-align: center;\n}<\/pre>\n<\/div>\n<p><strong>Ejm<\/strong><\/p>\n<div>\n<div>\n<pre>&lt;!DOCTYPE html&gt;<br \/>&lt;html lang=\"en\"&gt;<br \/>\u00a0 &lt;head&gt;<br \/>\u00a0 \u00a0 &lt;meta charset=\"UTF-8\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;<br \/>\u00a0 \u00a0 &lt;style&gt;<br \/>\u00a0 \u00a0 \u00a0 html {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 box-sizing: border-box;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 font-family: sans-serif;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 font-size: 16px;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 *,<br \/>\u00a0 \u00a0 \u00a0 *::after,<br \/>\u00a0 \u00a0 \u00a0 *::before {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 box-sizing: inherit;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 body,<br \/>\u00a0 \u00a0 \u00a0 h1,<br \/>\u00a0 \u00a0 \u00a0 h2 {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 margin: 0;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .carousel {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 border: thick solid #9e8f00;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 display: flex;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 50%;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 height: 50vh;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 overflow-x: hidden;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .carousel-container {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 100%;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 display: grid;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 grid-template-columns: repeat(5, 100%);<br \/>\u00a0 \u00a0 \u00a0 \u00a0 overflow-x: scroll;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 overflow-y: hidden;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 scroll-snap-type: x mandatory;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .carousel-slide {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 display: flex;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 flex-direction: column;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 justify-content: center;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 align-items: center;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 background-color: aqua;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 scroll-snap-align: center;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .carousel-slide:nth-child(even) {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 background-color: aquamarine;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 &lt;\/style&gt;<br \/>\u00a0 \u00a0 &lt;title&gt;Carrusel con HTML y CSS&lt;\/title&gt;<br \/>\u00a0 &lt;\/head&gt;<br \/>\u00a0 &lt;body&gt;<br \/>\u00a0 \u00a0 &lt;section class=\"carousel\"&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;div class=\"carousel-container\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;article class=\"carousel-slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div class=\"carousel-slide-content\"&gt;&lt;h3&gt;Slide 1&lt;\/h3&gt;&lt;\/div&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;\/article&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;article class=\"carousel-slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div class=\"carousel-slide-content\"&gt;&lt;h3&gt;Slide 2&lt;\/h3&gt;&lt;\/div&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;\/article&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;article class=\"carousel-slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div class=\"carousel-slide-content\"&gt;&lt;h3&gt;Slide 3&lt;\/h3&gt;&lt;\/div&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;\/article&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;article class=\"carousel-slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div class=\"carousel-slide-content\"&gt;&lt;h3&gt;Slide 4&lt;\/h3&gt;&lt;\/div&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;\/article&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;article class=\"carousel-slide\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 &lt;div class=\"carousel-slide-content\"&gt;&lt;h3&gt;Slide 5&lt;\/h3&gt;&lt;\/div&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;\/article&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;\/div&gt;<br \/>\u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 &lt;\/body&gt;<br \/>&lt;\/html&gt;<\/pre>\n<\/div>\n<\/div>\n<h2>16. Movimiento CSS<\/h2>\n<p>En esta secci\u00f3n veremos como hacer:<\/p>\n<ul>\n<li>transiciones<\/li>\n<li>transformaciones<\/li>\n<li>animaciones.<\/li>\n<\/ul>\n<h3>16.1 Transiciones<\/h3>\n<p>Las propiedades inclu\u00eddas en las transiciones son:<\/p>\n<ul>\n<li><strong><em>transition-property<\/em><\/strong>: la propiedad de la transici\u00f3n.<\/li>\n<li><strong><em>transition-duration<\/em><\/strong>: cuanto tiempo dura la transici\u00f3n.<\/li>\n<li><strong><em>transition-timing-function<\/em><\/strong>: puede tener los valores <strong><em>linear ease<\/em><\/strong> (aceleraci\u00f3n) <strong><em>ease-in<\/em><\/strong> (aceleraci\u00f3n al principio) <strong><em>ease-out<\/em><\/strong> (aceleraci\u00f3n al final) <strong><em>ease-in-out steps none<\/em><\/strong>.<\/li>\n<li><strong><em>transition-delay<\/em><\/strong>: tiempo de espera antes de que comience la transici\u00f3n, se habla en segundos o milisegundos.<\/li>\n<li><strong><em>transition<\/em><\/strong>: es el <strong>shorthand.<\/strong><\/li>\n<\/ul>\n<h3>16.2 Controlar que cada propiedad tenga su propio tiempo<\/h3>\n<p>Hay propiedades que por su naturaleza no son posibles. Las propiedades que s\u00ed son animables o posibles las podemos encontrar en el siguiente link:<\/p>\n<ul>\n<li><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/CSS_animated_properties\">https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/CSS_animated_properties<\/a><\/li>\n<\/ul>\n<blockquote>\n<p><strong>Nota<\/strong>: Para que a\u00f1adamos propiedades que se hagan a la vez, pero se ejecuten en distintos tiempos, tan s\u00f3lo tenemos que separar por comas las propiedades que queremos incluir. IMPORTANTE: En el elemento :hover por ejm, aplicamos las propiedades que queremos cambiar, y en elemento padre incluimos las transiciones, en el siguiente ejm se puede ver como hacerlo<strong>.<\/strong><\/p>\n<\/blockquote>\n<p><strong>Ejm<\/strong><\/p>\n<div>\n<div>\n<pre>&lt;!DOCTYPE html&gt;<br \/>&lt;html lang=\"es\"&gt;<br \/>\u00a0 &lt;head&gt;<br \/>\u00a0 \u00a0 &lt;meta charset=\"UTF-8\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;<br \/>\u00a0 \u00a0 &lt;link rel=\"stylesheet\" href=\"motion.css\" \/&gt;<br \/>\u00a0 \u00a0 &lt;title&gt;Movimiento HTML&lt;\/title&gt;<br \/>\u00a0 &lt;\/head&gt;<br \/>\u00a0 &lt;body&gt;<br \/>\u00a0 \u00a0 &lt;h1&gt;Movimiento CSS&lt;\/h1&gt;<br \/>\u00a0 \u00a0 &lt;section class=\"transitions\"&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;h2&gt;Transiciones&lt;\/h2&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;div class=\"box\"&gt;&lt;\/div&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;article class=\"card\"&gt;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 &lt;img src=\"images\/fondo.jpg\" width=\"599px\" alt=\"Fondo Higgs\" \/&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;\/article&gt;<br \/>\u00a0 \u00a0 &lt;\/section&gt;<br \/>\u00a0 &lt;\/body&gt;<br \/>&lt;\/html&gt;<\/pre>\n<\/div>\n<\/div>\n<p>Y este es el c\u00f3digo CSS<\/p>\n<div>\n<div>\n<pre>html {<br \/>\u00a0 box-sizing: border-box;<br \/>\u00a0 font-family: sans-serif;<br \/>\u00a0 font-size: 16px;<br \/>}<br \/>*,<br \/>*::after,<br \/>*::before {<br \/>\u00a0 box-sizing: inherit;<br \/>}<br \/>body,<br \/>h1,<br \/>h2 {<br \/>\u00a0 margin: 0;<br \/>}<br \/>.box {<br \/>\u00a0 border: thick solid black;<br \/>\u00a0 margin-left: auto;<br \/>\u00a0 margin-right: auto;<br \/>\u00a0 margin-bottom: 5rem;<br \/>\u00a0 width: 200px;<br \/>\u00a0 height: 200px;<br \/>}<br \/>.card {<br \/>\u00a0 border: thick solid black;<br \/>\u00a0 margin-left: auto;<br \/>\u00a0 margin-right: auto;<br \/>\u00a0 margin-bottom: 5rem;<br \/>\u00a0 width: 600px;<br \/>\u00a0 height: 400ox;<br \/>}<br \/>.card-img {<br \/>\u00a0 width: 100%;<br \/>\u00a0 height: 100%;<br \/>\u00a0 object-fit: cover;<br \/>\u00a0 object-position: 050%;<br \/>}<br \/>.transitions .box {<br \/>\u00a0 background-color: magenta;<br \/>\u00a0 transition-property: background-color;<br \/>\u00a0 transition-duration: 500ms;<br \/>\u00a0 transition-timing-function: ease;<br \/>\u00a0 transition-delay: 0.5s; <br \/>  \/* AHORA UTILIZAMOS LA PROPIEDAD transition EN SU SHORTHAND *\/ <br \/>  \/* PODEMOS INCLUIR VARIAS TRANSICIONES SEPARADAS POR COMA *\/<br \/>\u00a0 transition: border-color 1slinear0.3s, background-color 1slinear0.3s; <br \/>  \/* AUNQUE PARA VARIAS TRANSICIONES MEJOR UTILIZAR LA PALABRA all DE LA SIGUIENTE MANERA *\/<br \/>\u00a0 transition: all 1s ease-in-ou t0.3s;<br \/>}<br \/>.transitions .box:hover {<br \/>\u00a0 background-color: aqua;<br \/>\u00a0 border-color: red;<br \/>\u00a0 border-radius: 10%;<br \/>}<br \/>.transitions .card {<br \/>}<br \/>.transitions .car:hover {<br \/>\u00a0 opacity: 0.75;<br \/>\u00a0 border-color: orchid;<br \/>\u00a0 filter: blur(0.15rem);<br \/>\u00a0 box-shadow: 1rem 1rem 2rem 0.5rem black;<br \/>}<\/pre>\n<\/div>\n<\/div>\n<p>La propiedad <strong><em>all<\/em><\/strong> se considera no usarla a no ser que sea necesario.<\/p>\n<h3>16. 3 Transformaciones<\/h3>\n<p>Existen 2 tipos de transformaciones:<\/p>\n<ul>\n<li>en 2D<\/li>\n<li>en 3D<\/li>\n<\/ul>\n<h4>Transformaciones en 2D<\/h4>\n<p>Hay 4 transformaciones en 2D que son las m\u00e1s conocidas, como son:<\/p>\n<ul>\n<li><strong>Traslaci\u00f3n en X y Y<\/strong>: <strong><em>translate()<\/em><\/strong><\/li>\n<li><strong>Rotaci\u00f3n<\/strong>: <strong><em>rotate()<\/em><\/strong><\/li>\n<li><strong>Escala<\/strong>: aumentar o disminuir el tama\u00f1o en X o en Y, o hacerlo proporcionalmente: <strong><em>scale()<\/em><\/strong><\/li>\n<li><strong>Sesgar<\/strong> (<strong>skew<\/strong>): deformar: <strong><em>skew()<\/em><\/strong><\/li>\n<\/ul>\n<p>El valor por defecto de la propiedad <strong><em>transform<\/em> <\/strong>es <strong><em>none<\/em><\/strong>. Veamos las diferentes con <strong><em>translate()<\/em><\/strong>.<\/p>\n<ul>\n<li><strong><em>transform: translateX(valor) \/ translateY()<\/em><\/strong> &#8211; Podemos dar valores negativos<\/li>\n<li><strong><em>transform: translate(4rem, 4rem)<\/em><\/strong> &#8211; en X y en Y<\/li>\n<li>Se pueden tomar valores porcentuales <strong><em>transform: translate(50%, 50%);<\/em><\/strong> o <strong><em>transform: translate(-50%, 50%);<\/em><\/strong><\/li>\n<\/ul>\n<p>La siguiente es <strong><em>scale(valor para X, valor para Y)<\/em><\/strong>, que puede tener <strong><em>scaleX()<\/em><\/strong>, <strong><em>scaleY()<\/em><\/strong>, <strong><em>scaleZ()<\/em><\/strong> para 3D.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>transform: scale(2rem, -1rem);<\/pre>\n<p>La rotaci\u00f3n puede ser positiva o negativa<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>transform: rotateX(), rotateY(), rotate(), rotateZ() para 3D<\/pre>\n<p>Las rotaciones en X e Y no las vamos a notar, pero s\u00ed la rotaci\u00f3n en Z. Dicha rotaci\u00f3n va en sentido de las manecillas del reloj. Es la que vamos a utilizar en 2D ya que, como he dicho, rotaci\u00f3n en X e Y no lo vamos a apreciar. <strong><em>rotateZ()<\/em><\/strong> y <strong><em>rotate()<\/em><\/strong> funcionan igual. <strong><em>skew()<\/em> <\/strong>s\u00f3lo se da en X, y tiene las opciones:<\/p>\n<ul>\n<li><strong><em>skewX()<\/em><\/strong><\/li>\n<li><strong><em>skewY()<\/em><\/strong><\/li>\n<li><strong><em>skew()<\/em><\/strong><\/li>\n<\/ul>\n<p><strong>Ejm<\/strong><\/p>\n<pre>transform: scale();\ntransform: skew();\ntransform: rotate();\ntransform: translate();\ntransform: matrix();<\/pre>\n<p>Existe otra propiedad denominada <strong><em>matrix().\u00a0<\/em><\/strong>Podemos encontrar m\u00e1s sobre esta funci\u00f3n en la p\u00e1gina de Mozilla Developer Network.<\/p>\n<p>Para aplicar m\u00e1s de 1 transformaci\u00f3n Para ello hacemos la siguiente sintaxis.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>transform: scale(2) rotateY(20deg) translate(20rem);<\/pre>\n<p>Lo separamos con un espacio en blanco y con eso es suficiente.<\/p>\n<h4>Transformaciones en 3D<\/h4>\n<p>Lo primero que tenemos que hacer es aplicar la perspectiva 3D. Veamos la sintaxis que hay que utilizar.<\/p>\n<p><strong>Ehn<\/strong><\/p>\n<pre>transform: perspective(1000px) transformX(30rem);<\/pre>\n<p>Hay que utilizar la funci\u00f3n <strong><em>perspective()<\/em><\/strong> con un valor para se\u00f1alar la profundidad que queremos aplicar, en el caso anterior, le hemos dado una profundidad de 1000px. Otra manera es aplicarle la perspectiva al elemento padre.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>transform: translate3d(3rem, 30%, -3rem);<\/pre>\n<p>Tocar\u00eda los ejes x, y, z. Tambi\u00e9n existe el atajo para scale que es la funci\u00f3n <strong><em>scale3d()<\/em><\/strong>. Podemos ver demos en <strong>Mozilla Developer Network<\/strong>. La \u00fanica que queda es la rotaci\u00f3n, que en 2D no sal\u00eda en X ni en Y, s\u00f3lo funcionaba en Z. Tenemos una funci\u00f3n que es rotate3d(2,3,4,45deg), hay que utilizar valores num\u00e9ricos<\/p>\n<ul>\n<li><strong><em>scale3d()<\/em><\/strong><\/li>\n<li><strong><em>translate3d()<\/em><\/strong><\/li>\n<li><strong><em>rotate3d()<\/em><\/strong><\/li>\n<li><strong><em>matrix3d()<\/em><\/strong><\/li>\n<\/ul>\n<p>Para <strong>transformaciones m\u00faltiples<\/strong> s\u00f3lo hay que separarlas por un espacio en la misma l\u00ednea transform. Esto tambi\u00e9n se hace con los filtros. Hay una propiedad que muestra el origen para nuestras transformaciones. Veamos un ejm.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<pre>.transform-origin img {\ntransition: transform 2s ease;\n<strong>transform-origin: x y z\n<\/strong>\/* ESTA ES LA PROPIEDAD QUE HAY QUE INCLUIR PARA CAMBIAR EL PUNTO DESDE EL CUAL NACE LA TRANSFORMACI\u00d3N\nel valor por defecto es\ntransform-origin: 50% 50% 0;\nel transform-origin si tiene tres valores es para 3D\npodemos utilizar palabras clave\ntransform-origin: top left \/ top right \/ top center;\n}\n.transform-origin img:hover {\ntransform: scale3d(2) \/\/ MULTIPLICA POR DOS LA IMAGEN\n}<\/pre>\n<h4>Ejercicio de transformaciones<\/h4>\n<p>Para ello vamos a utilizar una nueva propiedad denominada <strong><em>backface-visibility<\/em><\/strong> que puede tener dos valores: <strong><em>visible<\/em><\/strong> y <strong><em>hidden,\u00a0<\/em><\/strong>hay que trabajar esta propiedad con 3D, por lo que hay que utilizar la funci\u00f3n perspective(). Y adem\u00e1s hay que utilizar la propiedad <strong><em>transform-style()<\/em><\/strong> que dice como se va a comportar la img en el 3D. El valor por defecto es <strong><em>flat<\/em><\/strong>, pero si le damos el valor <strong><em>preserve-3d<\/em><\/strong> los elementos hijos van a tener su propia perspectiva. Esta propiedad la colocamos, junto con la propiedad <strong><em>perspective()<\/em><\/strong> en el elemento padre o contenedor para m\u00e1 info ver 6:35:00<\/p>\n<h3>16.4 Animaciones<\/h3>\n<p>Para crear <strong>animaciones<\/strong> existe la propiedad <strong><em>animation<\/em><\/strong>: (este es el shorthand).<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<div>\n<pre>animation: name duration timing-function delay iteration-count direction fill-mode;<\/pre>\n<\/div>\n<p>Estos son los par\u00e1metros que podemos utilizar para la propiedad <strong><em>animation<\/em><\/strong>. De las 8 valores , las 2 primeras son obligatorias, el resto son opcionales.<\/p>\n<pre>animation-name: le tenemos que dar un nombre a nuestra animaci\u00f3n\nanimation-duration: cuanto tiempo queremos que dure nuestra animaci\u00f3n<\/pre>\n<p>Despu\u00e9s tenemos que utilizar la palabra clave <strong><em>@keyframes<\/em><\/strong> seguida del nombre de nuestra animaci\u00f3n, de la siguiente manera<\/p>\n<pre>@keyframes myanimacion {\nfrom {\n Fotograma n\u00famero 1 (como empiezan los elementos)\nopacity: 0;\n}\nto {\n Fotograma final, como terminan los elementos.\nopacity: 1;\n}\n}\n.animacion {\nanimation: myanimacion 3s;\n}<\/pre>\n<p>Hay que ver que propiedades son animables. El <strong>keyframes<\/strong> ser\u00eda como la l\u00ednea de tiempo sobre la que se mueve el fotograma <strong>Propiedades de la animaci\u00f3n<\/strong> Son las siguientes:<\/p>\n<ol>\n<li><em><strong>animation-name<\/strong><\/em>: nombre de la animaci\u00f3n que queramos poner<\/li>\n<li><em><strong>animation-duration<\/strong><\/em>: en segundos o milisegundos<\/li>\n<li><em><strong>animation-timing-function<\/strong><\/em>: ease, ease-in-out, linear, cubic-bezier (podemos utilizarla vi\u00e9ndola en la p\u00e1gina <a href=\"https:\/\/cubic-bezier.com\/#.17,.67,.83,.67\">https:\/\/cubic-bezier.com\/#.17,.67,.83,.67<\/a>)<\/li>\n<li><em><strong>animation-delay<\/strong><\/em>: el retraso que va a tener nuestra animaci\u00f3n. Si le ponemos 0 no tendr\u00e1 retardo<\/li>\n<li><em><strong>animation-iteration-count<\/strong><\/em>: el n\u00famero de veces que se har\u00e1 la animaci\u00f3n. Tiene el valor <strong><em>infinite<\/em><\/strong> para que se de infinitas veces.<\/li>\n<li><em><strong>animation-direction<\/strong><\/em>: la animaci\u00f3n de la direcci\u00f3n: tiene el valor <strong><em>normal<\/em><\/strong>,\u00a0<strong><em>reverse<\/em><\/strong>, un valor llamado <strong><em>alternate<\/em><\/strong> (que va del punto inicial al final y del final al inicial) y <strong><em>alternate-reverse<\/em><\/strong>.<\/li>\n<li><em><strong>animation-fill-mode<\/strong><\/em>: hay un valor que se llama <strong><em>forwards<\/em><\/strong> que lo hace es quedarse con los estilos finales de la animaci\u00f3n. Existe otro valor que se denomina <strong><em>backwards<\/em><\/strong>, que hace lo contrario, se queda con los estilos iniciales de la animaci\u00f3n. Si queremos tener las ventajas de <strong><em>forwards<\/em><\/strong> y <strong><em>backwards<\/em><\/strong> tomamos el valor <strong><em>both<\/em><\/strong>.<\/li>\n<\/ol>\n<h3>16.5 Fotogramas intermedios en animation<\/h3>\n<p>Es posible que tengamos que agregar m\u00e1s fotogramas clave intermedios. Veamos un ejm completo.<\/p>\n<p><strong>Ejm<\/strong><\/p>\n<div>\n<div>\n<pre>&lt;!DOCTYPE html&gt;<br \/>&lt;html lang=\"en\"&gt;<br \/>\u00a0 &lt;head&gt;<br \/>\u00a0 \u00a0 &lt;meta charset=\"UTF-8\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;<br \/>\u00a0 \u00a0 &lt;style&gt;<br \/>\u00a0 \u00a0 \u00a0 @keyframes my-animation {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 0% {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 opacity: 0;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 \u00a0 50% {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 opacity: 0.5;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 background-color: blanchedalmond;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 transform: rotate(30deg) translate(4rem) scale(1.3);<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 border-radius: 50%;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 \u00a0 100% {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 opacity: 1;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .my-animation {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 300px;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 height: 300px;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 margin-left: auto;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 margin-right: auto;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 background-color: aqua;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 animation: my-animation 3s;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 &lt;\/style&gt;<br \/>\u00a0 \u00a0 &lt;title&gt;Animaci\u00f3n&lt;\/title&gt;<br \/>\u00a0 &lt;\/head&gt;<br \/>\u00a0 &lt;body&gt;<br \/>\u00a0 \u00a0 &lt;h1&gt;Animaci\u00f3n&lt;\/h1&gt;<br \/>\u00a0 \u00a0 &lt;div class=\"my-animation\"&gt;&lt;\/div&gt;<br \/>\u00a0 &lt;\/body&gt;<br \/>&lt;\/html&gt;<\/pre>\n<\/div>\n<\/div>\n<p>A un mismo elemento le podemos aplicar varias aplicaciones, tan s\u00f3lo hay que separarlas por coma como hac\u00edamos con las transiciones.<\/p>\n<h2>17. Ejemplos de movimiento<\/h2>\n<h3>17.1 Ejemplo 1 (Fade In)<\/h3>\n<p>En este primer ejm dejo el c\u00f3digo de un FadeIn FadeOut<\/p>\n<div>\n<div>\n<pre>&lt;!DOCTYPE html&gt;<br \/>&lt;html lang=\"en\"&gt;<br \/>\u00a0 &lt;head&gt;<br \/>\u00a0 \u00a0 &lt;meta charset=\"UTF-8\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;<br \/>\u00a0 \u00a0 &lt;style&gt;<br \/>\u00a0 \u00a0 \u00a0 @keyframes fadein {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 0% {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 opacity: 0;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 \u00a0 100% {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 opacity: 1;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 color: yellowgreen;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .fadein {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 font-size: 3vw;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 animation: fadein 2s linear infinite alternate;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 &lt;\/style&gt;<br \/>\u00a0 \u00a0 &lt;title&gt;Ejercicios Movimiento&lt;\/title&gt;<br \/>\u00a0 &lt;\/head&gt;<br \/>\u00a0 &lt;body&gt;<br \/>\u00a0 \u00a0 &lt;h1&gt;Ejercicios Movimiento&lt;\/h1&gt;<br \/>\u00a0 \u00a0 &lt;h2&gt;Fade In Fade Out&lt;\/h2&gt;<br \/>\u00a0 \u00a0 &lt;div class=\"fadein\"&gt;Hola&lt;\/div&gt;<br \/>\u00a0 &lt;\/body&gt;<br \/>&lt;\/html&gt;<\/pre>\n<\/div>\n<\/div>\n<h3>17.2 Louder de carga (spinner)<\/h3>\n<p><strong>Ejm<\/strong><\/p>\n<div>\n<div>\n<pre>&lt;!DOCTYPE html&gt;<br \/>&lt;html lang=\"en\"&gt;<br \/>\u00a0 &lt;head&gt;<br \/>\u00a0 \u00a0 &lt;meta charset=\"UTF-8\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;<br \/>\u00a0 \u00a0 &lt;style&gt;<br \/>\u00a0 \u00a0 \u00a0 @keyframes spinner {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 0% {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 transform: rotate(0deg);<br \/>\u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 \u00a0 100% {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 transform: rotate(360deg);<br \/>\u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .spinner {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 5vw;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 height: 5vw;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 margin-left: auto;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 margin-right: auto;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 border-radius: 50%;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 border: 0.5vw solid rgba(0, 0, 0, 0.1);<br \/>\u00a0 \u00a0 \u00a0 \u00a0 border-left-color: #09f;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 animation: spinner 1sease-in-out infinite;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 &lt;\/style&gt;<br \/>\u00a0 \u00a0 &lt;title&gt;Document&lt;\/title&gt;<br \/>\u00a0 &lt;\/head&gt;<br \/>\u00a0 &lt;body&gt;<br \/>\u00a0 \u00a0 &lt;div class=\"spinner\"&gt;&lt;\/div&gt;<br \/>\u00a0 &lt;\/body&gt;<br \/>&lt;\/html&gt;<\/pre>\n<\/div>\n<\/div>\n<h3>17.3 Efectos para botones animados (microinteracciones)<\/h3>\n<p><strong>Ejm<\/strong><\/p>\n<div>\n<div>\n<pre>&lt;!DOCTYPE html&gt;<br \/>&lt;html lang=\"en\"&gt;<br \/>\u00a0 &lt;head&gt;<br \/>\u00a0 \u00a0 &lt;meta charset=\"UTF-8\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" \/&gt;<br \/>\u00a0 \u00a0 &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/&gt;<br \/>\u00a0 \u00a0 &lt;style&gt;<br \/>\u00a0 \u00a0 \u00a0 .div {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 text-align: center;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .btn {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 position: relative;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 border: none;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 border-radius: 0.25rem;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 padding: 0.2;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 15rem;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 height: 2.5rem;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 font-size: 1.25rem;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 font-weight: bold;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 cursor: pointer;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 overflow: hidden;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 box-shadow: 0.25rem. 25rem. 5rem. 25rem rgba(0, 0, 0, 0.15);<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .anim-bottom::after {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 content: \"\";<br \/>\u00a0 \u00a0 \u00a0 \u00a0 position: absolute;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 bottom: 0;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 0;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 height: 0.25rem;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 background-color: red;<br \/>\u00a0 \u00a0 \u00a0 \u00a0 transition: width 0.5s ease, left 0.5s ease, right 0.5s ease;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .anim-bottom:hover::after {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 width: 100%;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .to-left::after {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 left: 0;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .to-center::after {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 left: 50%;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .to-center:hover:after {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 left: 0;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 \u00a0 .to-right::after {<br \/>\u00a0 \u00a0 \u00a0 \u00a0 right: 0;<br \/>\u00a0 \u00a0 \u00a0 }<br \/>\u00a0 \u00a0 &lt;\/style&gt;<br \/>\u00a0 \u00a0 &lt;title&gt;Botones animados&lt;\/title&gt;<br \/>\u00a0 &lt;\/head&gt;<br \/>\u00a0 &lt;body&gt;<br \/>\u00a0 \u00a0 &lt;h1&gt;Botones animados&lt;\/h1&gt;<br \/>\u00a0 \u00a0 &lt;div class=\"div\"&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;button class=\"btn anim-bottom to-left\"&gt;Animaci\u00f3n Izda&lt;\/button&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;button class=\"btn anim-bottom to-center\"&gt;Animaci\u00f3n Centro&lt;\/button&gt;<br \/>\u00a0 \u00a0 \u00a0 &lt;button class=\"btn anim-bottom to-right\"&gt;Animaci\u00f3n Dcha&lt;\/button&gt;<br \/>\u00a0 \u00a0 &lt;\/div&gt;<br \/>\u00a0 &lt;\/body&gt;<br \/>&lt;\/html&gt;<\/pre>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":556,"menu_order":6,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","footnotes":""},"class_list":["post-1557","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":null,"_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1557","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=1557"}],"version-history":[{"count":2,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1557\/revisions"}],"predecessor-version":[{"id":1559,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/1557\/revisions\/1559"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/556"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=1557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}