martes, 20 de junio de 2017

Animación en CSS3

Una animación es cualquier elemento o grupo de elementos que se mueve o cambia de aspecto progresivamente.
Hasta la llegada de CSS3 para poder ostentar una animación en la web era necesario hacerlas con Javascript o usar programas como Adobe Flash o Java
El proceso para crear una animación puede ser más o menos complicado según el programa que usemos y el tipo de animación. Para crear la ilusión del movimiento, una imagen se muestra en pantalla sustituyéndose rápidamente por una nueva imagen en un fotograma diferente. Esta técnica es idéntica a la manera en que se logra la ilusión de movimiento en las películas y en la televisión. Este cambio se realiza de manera gradual, de forma que vemos como el elemento va cambiando, la velocidad de cambio debe ser tal que el ojo la perciba como un movimiento continuo (superior a 12 cambios por segundo).
Las animaciones con CSS3 utilizan el método de fotogramas clave al igual que programas como Adobe Flash.
Los fotogramas clave son los que marcan el estado del elemento animado al principio, al final, o cuando éste tenga que variar de forma no previsible.
Por ejemplo, si quisiéramos que un elemento se mueva de arriba hacia abajo, posicionamos en el primer fotograma el elemento en un punto arriba, y en el segundo fotograma lo posicionamos debajo y se indica el tiempo que tiene que tardar de ir de uno a otro; si queremos que después el elemento siga moviéndose hacia la derecha, lo posicionaremos en un tercer fotograma clave, situado en un punto a la derecha del segundo. El elemento recorrerá en línea recta del primero al segundo fotograma y seguidamente del segundo al tercero. Todos los estados intermedios del elemento entre los fotogramas 1, 2 y 3 se calculan automáticamente.
Entrando en materia con CSS3.
La regla @keyframes
En CSS los fotogramas clave se crean mediante la regla @keyframes la cual tiene la siguiente estructura:
@keyframes <nombre> {
      0%{<propiedad: valor>+}
      100%{<propiedad: valor>+}
En la posición del selector escribimos la palabra clave @keyframes seguido de un nombre que le daremos a la animación. Este nombre es necesario para poder dar después otras propiedades de animación, como puede ser el tiempo.
Dentro de la declaración (espacio entre llaves) pondremos los diversos fotogramas clave. los cuales son unas sub-reglas CSS compuestas de:
    Selector: Los selectores indican el punto en el que se coloca el fotograma clave. Se indican en tantos por ciento. El primero debe ser siempre el 0% que indica el principio de la animación, y el último el 100% e indica el final. Entre medio se pueden colocar más fotogramas clave, indicando siempre en tanto por ciento el punto en el que estará el fotograma. Cuando hay sólo dos fotogramas pueden usarse también las palabras clave from para el primero y to para el último.
    Declaración: Dentro de las llaves de los fotogramas pondremos las propiedades CSS del elemento en el momento que se visualice el fotograma. Por ejemplo, en el primero marcamos el color, posición y tamaño inicial; en el último marcamos color, posición y tamaño final. Las propiedades, siempre que puedan, (propiedades que contienen números, medida, color, etc.) cambiarán gradualmente del primero al último durante el tiempo que dure la animación.
Compatibilidad con navegadores: Los principales navegadores admiten en sus últimas versiones la regla @keyframes. Los que incorporan la forma estándar son Firefox, Opera e Internet Explorer mayor a partir de su versión 10. Safari y Chrome siguen utilizando la forma experimental con el prefijo -webkit- (@-webkit-keyframes).
Propiedades de animación.
Para crear una animación simple en primer lugar debemos indicar qué elemento de la página es el que tiene la animación. Esto se hace mediante la propiedad:
#animacion { animation-name: <nombre> }
El nombre que pongamos como valor debe ser el mismo que lleva la regla @keyframe; de esa manera quedará asociada al elemento que marca el selector.
En segundo lugar, debemos marcar el tiempo que dura la animación. Este lo indicamos mediante la propiedad:
animation-duration: <tiempo>;
El tiempo lo expresaremos en segundos (ej.: 10s) o en milisegundos (ej.: 4000ms) indicándolo en número seguido de la letra "s" para segundos o "ms" para milisegundos.
Aunque con esto ya podemos hacer una animación muy sencilla, la animación que vamos a hacer como ejemplo tendrá otras dos propiedades, la primera de ellas hará que la animación se repita indefinidamente:
animation-iteration-count: infinite;
El valor "infinite" hace que la animación se repita indefinidamente. Además de este valor, a esta propiedad se le puede dar como valor un número entero positivo, que será el número de veces que se repita la animación.

Por último, queremos que la animación, una vez llegue al final, recorra el camino inverso, viéndose otra vez todo al revés. Para ello utilizaremos la propiedad:
animation-direction: alternate;
el valor "alternate" hace que la animación al llegar al final se repita en sentido inverso. También puede tener el valor normal que hace que la animación vaya sólo en una dirección.
Compatibilidad con navegadores: Al igual que la regla @keyframes las propiedades de animación han sido incorporadas recientemente en su forma estándar en son Firefox, Opera e Internet Explorer mayor a partir de su versión 10. Safari y Chrome siguen utilizando la forma experimental con el prefijo -webkit- (@-webkit-keyframes).
Ejemplo de animación:
Con lo visto hasta ahora ya podemos hacer un ejemplo de animación sencillo. El ejemplo consistirá en un cuadrado que se mueve horizontalmente mientras cambia de color.
Primero la regla @keyframes, para verla en todos los navegadores la pondremos primero en la versión estándar, y luego en la forma para Safari y Chrome:
/*Regla keyframes en forma estándar*/
@keyframes animacion {
   from { left: 50px; background-color:red } /*Fotograma inicio*/
   to { left: 600px; background-color:blue } /*Fotograma final*/
}
/*Regla keyframes para Chrome y Safari*/
@-webkit-keyframes animacion {
   from { left: 50px; background-color:red } /*Fotograma inicio*/
   to { left: 600px; background-color:blue } /*Fotograma final*/
}
En los fotogramas clave marcamos en el de inicio la posición de partida (maring-left: 50px) así como el color que tendrá cuando esté en esa posición (background-color:red); y en el fotograma final la posición y color que tendrá cuando llegue al final maring-left: 600px; background-color:blue). Hemos usado aquí las palabras clave from para el inicio y to para el final, que equivalen al 0% y 100% respectivamente.

El elemento animado debe tener las siguientes propiedades:
-          Position (relative o absolute para poder usar las propiedades de posicion left, right, top, bottom)
-          Height (para que el elemento tenga un alto)
-          Width (para que el elemento tenga un ancho)
-          Además de las propiedades de animación necesarias para que la animación funcione, que son las indicadas anteriormente. Al igual que con la regla @keyframes debemos repetirlas en su forma experimental para que puedan verse en Chrome y Safari.
#div {
 /*posicionamiento, anchura, altura y borde elemento. */
position: relative;
                width: 10px;
height: 10px;
/*propiedades de animación*/
        animation-name: animacion; /*referencia nombre*/
        animation-duration: 5s; /*tiempo*/
        animation-iteration-count: infinite; /*repeticion indefinida*/
        animation-direction: alternate; /*repetir al revés*/                           
        /*Para Chrome y Safari*/
        -webkit-animation-name: mianim; /*referencia nombre*/
        -webkit-animation-duration: 5s; /*tiempo*/
        -webkit-animation-iteration-count: infinite; /*repeticion indefinida*/
        -webkit-animation-direction: alternate; /*repetir al revés*/
      }
Guardamos el archivo CSS (animiacion.css) y creamos el archivo HTML:
<!DOCTYPE HTML>
<html>
<head>
  <title>Animación en CSS3</title>
  <link rel="stylesheet" type="text/css" href="animacion.css" />
</head>
<body>
  <h1>Animación en CSS3</h1>
  <div id="div"></div>
</body>
</html>
Espero les haya servido de ayuda.
{ Leer Más }


lunes, 12 de junio de 2017

Elementos Básicos sobre Normalización en Bases de Datos. Parte II



El presente artículo da continuidad al anterior titulado: Elementos Básicos sobre Normalización en Bases de Datos. Parte I, en el cual se abarcaron los dos primeros niveles de Formalización/Normalización (F/N). Para tener un buen punto de partida debe estudiarse la Parte I del tema en cuestión.

Recordando

Iniciaremos haciendo un breve recordatorio del Segundo nivel de F/N:


1. Crear tablas separadas para aquellos grupos de datos que se aplican a varios registros.
2. Relacionar estas tablas mediante una clave externa.

id
nombre
empresa
dirección_empresa
1
Pedro
LCT
Lacetel, Miramar, Habanal
2
Jorge
CGR
Cubagran, Bayamo, Granma



email_id
user_id
email
1
1
direccion@lacetel.com
2
1
economia@lacetel.com
3
2
direccion@cubagran.com
4
2
economia@cubagran.com

De este ejemplo quedó pendiente la siguiente pregunta:

  • ¿Pero qué ocurre cuando queremos añadir otro empleado a la empresa LCT? ¿o 500 empleados?

Pues bien, podemos decir que tenemos el nombre de la empresa y su dirección duplicándose, otra situación que puede inducirnos a introducir errores en nuestros datos. Para evitar esto tendremos que aplicar el tercer nivel de F/N:

Tercer nivel de F/N:

  • Eliminar aquellos campos que no dependan de la clave.

Nuestro nombre de empresa y su dirección no tienen nada que ver con el campo id, así que tienen que tener su propio id_empresa como se muestra aquí:

usuarios
id
nombre
id_empresa_fk
1
Pedro
1
2
Jorge
2

empresas
id_empresa
empresa
dirección_empresa
1
LCT
Lacetel, Miramar, Habanal
2
CGR
Cubagran, Bayamo, Granma


emails
email_id
user_id
email
1
1
direccion@lacetel.com
2
1
economia@lacetel.com
3
2
direccion@cubagran.com
4
2
economia@cubagran.com

Ahora tenemos la clave primaria id_empresa en la tabla empresas, relacionada con la clave externa id_empresa_fk en la tabla usuarios, y podemos añadir 500 usuarios mientras que sólo tenemos que insertar el nombre 'LCT' una vez. Nuestras tablas de usuarios y emails pueden crecer todo lo que quieran sin duplicación ni corrupción de datos. Muchos desarrolladores dirían que con aplicar hasta el tercer nivel de F/N es suficiente, que nuestro esquema de datos puede manejar fácilmente los datos obtenidos de una cualquier empresa en su totalidad, esto será cierto en una buena parte de los casos.

Sin embargo, miremos la tabla emails ¿Se puede apreciar la duplicación de datos? Esto es perfectamente aceptable si le pedimos al usuario de nuestra aplicación la entrada de datos del campo email, y por lo tanto es sólo una coincidencia que Pedro y Jorge teclearan los mismos emails. ¿Pero qué pasaría si en lugar de entrada libre de texto usáramos un menú desplegable con varios emails predefinidos? Es aquí donde tendríamos que ir al siguiente nivel de F/N, el cuarto, muchos desarrolladores lo pasan por alto porque depende mucho de un tipo muy específico de relación, la relación 'muchos a muchos’, la cual aún no hemos visto.

Relaciones entre Datos

Antes de entrar en detalles acerca del cuarto nivel de F/N es preciso tener presente tres tipos de relaciones que se establecen entre los datos, estas son:

1.    Uno a uno
2.    Uno a muchos
3.    Muchos a muchos

La relación muchos a muchos, es ligeramente más compleja que las dos primeras. Observa en el ejemplo del Tercer Nivel de F/N que tenemos a un usuario relacionado con varios emails. Entonces, vamos a cambiar la estructura para permitir que varios usuarios estén relacionados con varios emails y así tendremos una relación muchos a muchos. Esta es la forma en la que quedarían las tablas:

usuarios
id
nombre
id_empresa_fk
1
Pedro
1
2
Jorge
2

empresas
id_empresa
empresa
dirección_empresa
1
LCT
Lacetel, Miramar, Habanal
2
CGR
Cubagran, Bayamo, Granma


emails
email_id
email
1
direccion@lacetel.com
2
economia@lacetel.com
3
direccion@cubagran.com
4
economia@cubagran.com

emails_relations
relation_id
email_id
user_id
1
1
1
2
1
2
3
2
1
4
2
2

Para disminuir la duplicación de los datos (proceso que nos llevará al Cuarto Nivel de F/N), hemos creado una tabla que sólo tiene claves externas y primarias emails_relations. Ahora podemos expresar fielmente la relación que ambos Pedro y Jorge tienen entre cada uno de ellos, y entre ambos, los emails. Así que veamos exactamente qué pasa en el Cuarto Nivel de F/N:

Cuarto nivel de F/N:

  • En las relaciones muchos a muchos, entidades independientes no pueden ser almacenadas en la misma tabla.

Hemos optimizado nuestra tabla emails eliminado duplicados y hemos puesto las relaciones en su propia tabla.

Quinto nivel de F/N:

En la mayoría de los casos no es necesario aplicar este quinto nivel:

  • La tabla original debe ser reconstruida desde las tablas resultantes en las cuales ha sido divida en partes.

La correcta aplicación de esta regla proporciona la seguridad de que no has creado ninguna columna extraña en tus tablas y que la estructura de las tablas que has creado sea del tamaño justo que tiene que ser.
Es una buena práctica aplicar esta regla, pero a no ser que estés tratando con una extensa estructura de datos probablemente no la necesitarás.
{ Leer Más }


IconIconIcon