martes, 20 de septiembre de 2011

Construir un cubo 3D con HTML5 y CSS3

Construir un cubo 3D con HTML5 y CSS3:

post thumbnail


HTML5 y CSS aportan nuevas novedades a los diseñadores, muy útiles y más fáciles de implementar que las de CSS2. Os enseñaré a crear un cubo 3D con CSS, parecido al que os mostré anteriormente. Las letras del cubo son las siglas del logotipo de WebProNews.


Para empezar, necesitamos 3 imágenes separadas, cada imagen de 100 x 100 píxeles, degradado de claro a oscuro. Incluye las letras W, P y N en cada imagen respectiva, después añade dos píxeles de borde. Tendría que quedar así:



Código CSS


Ahora que tenemos nuestras imágenes, vamos a empezar a crear el código CSS.


.cube {


 position: absolute;
top: 100px;
left: 100px;
}

El contenedor de nuestro cubo se llamará .cube, no necesitamos aplicarle altura y anchura, pero es recomendable aplicarle posición absoluta.


.face {
position: relative;
width: 100px;
height: 100px;
overflow: hidden;
}

Después necesitamos crear una característica global para cada cara de nuestro cubo. En esta parte si será necesario utilizar el posicionamiento absoluto. Indicaremos una altura y anchura de 100 píxeles, y ocultaremos el overflow para que si las imágenes son más largas, no destruyan el cubo.


.top {
top: 0;
left: 89px;
background: #ffffff;
-webkit-transform: rotate(-45deg) skew(15deg, 15deg);
-moz-transform: rotate(-45deg) skew(15deg, 15deg);
}

Ahora posicionaremos la imagen superior del cubo con top y left. Después añadiremos el color de fondo, que no es necesario pero queda mejor. La siguiente parte seguramente sea la más importante, la nueva propiedad CSS3 transform. Muchos navegadores ya soportan esta propiedad, por lo que no tendremos problemas. Necesitamos incluir dos líneas extra para navegadores basados en webkit y para Firefox con el objetivo de que se muestre correctamente. Rotaremos el cubo 45º en el sentido de las agujas del reloj, 15º en posición oblicua para hacerlo coincidir con las otras caras del cubo.


.left {


 top: 77px;
left: 44px;
background: #ffffff;
color: #ffffff;
-webkit-transform: rotate(15deg) skew(15deg, 15deg);
-moz-transform: rotate(15deg) skew(15deg, 15deg);
}

La cara izquierda del cubo está establecida muy cerca que la superior, por lo que únicamente deberemos moverla 77 píxeles desde la parte superior del contenedor y 44 píxeles a la izquierda. Después necesitaremos rotar la cara 15º y mantenerla oblicua como la superior.


.right {
top: 77px;
left: 133px;
background: #ffffff;
color: #ffffff;
-webkit-transform: rotate(-15deg) skew(-15deg, -15deg);
-moz-transform: rotate(-15deg) skew(-15deg, -15deg);
}

Después debemos construir un espejo de la cara izquierda con la derecha, es decir, las mimas propiedades de forma invertida.


Código HTML


La parte de HTML es la más sencilla, el formato sería así:














Con HTML estructuraremos las imágenes. El ejemplo final sería así:




Contenido exclusivo para los suscriptores del Feed RSS


¡Gracias por seguirnos cada día!. Tu fidelidad será premiada con contenidos exclusivos. Hoy puedes descargar:


Haz clic aquí para iniciar la descarga Invitación al servicio Basekit








Twitter Facebook Delicious Google Reader Google Buzz Meneame Blinklist FriendFeed Google Bookmarks Google Gmail Netvibes Share Tumblr Compartir/Guardar




Artículos relacionados

Puede que tengas interés por ver algunos de estos artículos muy relacionados con esta entrada:




Un hombre que anda gracias a CSS

Un hombre que anda gracias a CSS:

post thumbnail


Está claro que con CSS se pueden hacer maravillas, existen un montón de usos útiles y demostraciones que podemos realizar con CSS. Andrew-Hoyer nos presenta una creación suya, un experimento, en el que se puede comprobar cómo se mueve un hombre (que casualmente es él) gracias a CSS3, nada de Javascript.


Aunque existen fallos en la versión 4.2.1 del iOS, es muy curioso verlo funcionar en un dispositivo Android, iPhone, iPod o iPad. Podemos verlo tanto en versión canvas como en imagen. A continuación os explicaré más detalladamente cómo lo ha creado, resulta curioso ver la imaginación de la mente, y lo flexible que puede resultar CSS, con usos inimaginables.



Se ha creado usando animaciones CSS (-webkit-animation), transformaciones CSS (-webkit-transformations) y HTML simple. Se puede ver correctamente sólo con navegadores basados en WebKit (Safari o Chrome), pero, los que no tengan este navegador, pueden ver un vídeo:



La idea de su estructura es aplicar CSS transformations a un elemento que también lo aplica a sus “hijos”. El código HTML es así:


<div class="torso">

<div class="left bicep">
<div class="left forearm"></div>
</div> <!--brazo izquierdo -->

<div class="right bicep">
<div class="right forearm"></div>
</div> <!-- brazo derecho -->

<div class="left thigh">
<div class="left shin">
<div class="left foot">
<div class="left toes"></div>
</div>
</div>
</div> <!-- pierna izquierda -->

<div class="right thigh">
<div class="right shin">
<div class="right foot">
<div class="right toes"></div>
</div>
</div>
</div> <!--pierna derecha -->

</div> <!-- torso -->

Se aplica la propiedad z-index para mostrar el brazo izquierdo al igual que las piernas detrás del torso además de mover las espinillas y los antebrazos detrás de los muslos y los bíceps, respectivamente. Tuvo algunos problemas con esta propiedad y webkit, ya que cuando quería animarlo, se destruía la estructura, así que añadió unas variaciones, que no hizo el código más semántico, pero resolvió todos los problemas anteriores:


<div class='me'>
<div class="torso">

<div class="left leg">
<div class="left thigh">
<div class="left shin">
<div class="left foot">
<div class="left toes"></div>
</div>
</div>
</div>
</div> <!-- pierna izquierda -->

<div class="right leg">
<div class="right thigh">
<div class="right shin">
<div class="right foot">
<div class="right toes"></div>
</div>
</div>
</div>
</div> <!-- pierna derecha -->

<div class="left arm">
<div class="left bicep">
<div class="left forearm"></div>
</div>
</div> <!-- brazo izquierdo -->

<div class="right arm">
<div class="right bicep">
<div class="right forearm"></div>
</div>
</div> <!-- brazo derecho -->

</div> <!-- torso -->
</div> <!-- yo -->

Sólo cambió dos cosas, lo primero fue envolver cada miembro en otro div, que era la solución principal. Después se trasladaron los brazos por encima de las piernas.


Para las animaciones, se hicieron animaciones separadas de la parte izquierda y derecha, usando únicamente los valores 0%, 25%, 50%, 75%, 100%, para evitar cálculos y complicaciones.


Abajo del ejemplo, como podrás comprobar, hay dos enlaces que ocultan y muestras los bordes del elemento. Uno es un enlace “#canvas”, y el otro, “#”. Aprovechando el pseudo-selector, Andy añadió unas cuantas líneas de CSS, quedando un curioso efecto de silueta:


<style type="text/css" media="screen">

#canvas:target div:not(.overlay) {
border: 1px solid black;
}

#canvas:target div.me div{
background: rgba(255, 255, 255, 0.25);
}

</style>

<p style='text-align: center'>
<a href='#canvas'>Show</a> /
<a href="#">Hide</a>
Element Borders.
</p>

El código final sería este:


<style type=”text/css” media=”screen”>

#canvas {

height: 600px;

margin: 0;

padding: 0;

position: relative;

overflow: hidden;

}

#canvas div {

position: absolute;

-webkit-animation-iteration-count: infinite;

-webkit-animation-timing-function: linear;

}


#canvas:target div:not(.overlay) {

border: 1px solid black;

}


#canvas:target div.me div{

background: rgba(255, 255, 255, 0.25);

}


.me {

top: 50px; left: 350px;

-webkit-animation-name: me;

}


.me, .me div {

background-repeat: no-repeat;

-webkit-animation-duration: 1750ms;

}


.torso {

width: 86px; height: 275px;

background-image: url(me/torso.png);

}


.arm {

left: 12px;

-webkit-transform-origin: 20px 10px;

}


.right.arm {

top: 93px;

-webkit-animation-name: right-bicep;

}

.left.arm {

top: 87px;

-webkit-animation-name: left-bicep;

}


.bicep {

height: 124px; width: 51px;

}


.right.bicep { background-image: url(me/right-bicep.png); }

.left.bicep { background-image: url(me/left-bicep.png); }


.forearm {

top: 108px; left: 14px;

width: 36px; height: 121px;

-webkit-transform-origin: 3px 7px;

}


.right.forearm {

background-image: url(me/right-forearm.png);

-webkit-animation-name: right-forearm;

}


.left.forearm {

background-image: url(me/left-forearm.png);

-webkit-animation-name: left-forearm;

}


.leg {

left: 6px;

-webkit-transform-origin: 30px 20px;

-webkit-animation-name: thigh;

}


.right.leg {

top: 235px;

-webkit-animation-name: right-thigh;

}


.left.leg {

top: 225px;

-webkit-animation-name: left-thigh;

}


.thigh {

width: 70px; height: 145px;

}


.left.thigh { background-image: url(me/left-thigh.png); }

.right.thigh { background-image: url(me/right-thigh.png); }


.shin {

top: 115px;

width: 50px; height: 170px;

background-image: url(me/shin.png);

-webkit-transform-origin: 30px 25px;

}


.right.shin { -webkit-animation-name: right-shin; }

.left.shin { -webkit-animation-name: left-shin; }


.foot {

top: 155px; left: 2px;

width: 67px; height: 34px;

background-image: url(me/foot.png);

-webkit-transform-origin: 0 50%;

}


.right.foot { -webkit-animation-name: right-foot; }

.left.foot { -webkit-animation-name: left-foot; }


.toes {

top: 9px; left: 66px;

width: 28px; height: 25px;

background-image: url(me/toes.png);

-webkit-transform-origin: 0% 100%;

}


.right.toes { -webkit-animation-name: right-toes; }

.left.toes { -webkit-animation-name: left-toes; }


.shadow {

width: 200px; height: 70px;

left: 270px; bottom: 5px;

background-image: url(misc/shadow.png);

-webkit-animation-name: shadow;

}


/* setting proper z-indexes so that limbs show up correctly */


div.right.arm { z-index: 1; }

div.left.arm { z-index: -3; }

div.arm > div.bicep > div.forearm { z-index: -1; }


div.right.leg { z-index: -1; }

div.left.leg { z-index: -2; }

div.leg > div.thigh > div.shin { z-index: -1; }


/* animations */


@-webkit-keyframes me {

0% { -webkit-transform: rotate(5deg) translate( 5px, 0px); }

25% { -webkit-transform: rotate(5deg) translate(-5px, -14px); }

50% { -webkit-transform: rotate(5deg) translate( 5px, 0px); }

75% { -webkit-transform: rotate(5deg) translate(-5px, -14px); }

100% { -webkit-transform: rotate(5deg) translate( 5px, 0px); }

}


@-webkit-keyframes right-bicep {

0% { -webkit-transform: rotate(26deg); }

50% { -webkit-transform: rotate(-20deg); }

100% { -webkit-transform: rotate(26deg); }

}


@-webkit-keyframes left-bicep {

0% { -webkit-transform: rotate(-20deg); }

50% { -webkit-transform: rotate(26deg); }

100% { -webkit-transform: rotate(-20deg); }

}


@-webkit-keyframes right-forearm {

0% { -webkit-transform: rotate(-10deg); }

50% { -webkit-transform: rotate(-45deg); }

100% { -webkit-transform: rotate(-10deg); }

}


@-webkit-keyframes left-forearm {

0% { -webkit-transform: rotate(-45deg); }

50% { -webkit-transform: rotate(-10deg); }

100% { -webkit-transform: rotate(-45deg); }

}


@-webkit-keyframes right-thigh {

0% { -webkit-transform: rotate(-45deg); }

50% { -webkit-transform: rotate(10deg); }

100% { -webkit-transform: rotate(-45deg); }

}


@-webkit-keyframes left-thigh {

0% { -webkit-transform: rotate(10deg); }

50% { -webkit-transform: rotate(-45deg); }

100% { -webkit-transform: rotate(10deg); }

}


@-webkit-keyframes right-shin {

0% { -webkit-transform: rotate(30deg); }

25% { -webkit-transform: rotate(20deg); }

50% { -webkit-transform: rotate(20deg); }

75% { -webkit-transform: rotate(85deg); }

100% { -webkit-transform: rotate(30deg); }

}


@-webkit-keyframes left-shin {

0% { -webkit-transform: rotate(20deg); }

25% { -webkit-transform: rotate(85deg); }

50% { -webkit-transform: rotate(30deg); }

75% { -webkit-transform: rotate(20deg); }

100% { -webkit-transform: rotate(20deg); }

}


@-webkit-keyframes right-foot {

0% { -webkit-transform: rotate(-5deg); }

25% { -webkit-transform: rotate(-7deg); }

50% { -webkit-transform: rotate(-16deg); }

75% { -webkit-transform: rotate(-10deg); }

100% { -webkit-transform: rotate(-5deg); }

}


@-webkit-keyframes left-foot {

0% { -webkit-transform: rotate(-16deg); }

25% { -webkit-transform: rotate(-10deg); }

50% { -webkit-transform: rotate(-5deg); }

75% { -webkit-transform: rotate(-7deg); }

100% { -webkit-transform: rotate(-16deg); }

}


@-webkit-keyframes right-toes {

0% { -webkit-transform: rotate(0deg); }

25% { -webkit-transform: rotate(-10deg); }

50% { -webkit-transform: rotate(-10deg); }

75% { -webkit-transform: rotate(-25deg); }

100% { -webkit-transform: rotate(0deg); }

}


@-webkit-keyframes left-toes {

0% { -webkit-transform: rotate(-10deg); }

25% { -webkit-transform: rotate(-25deg); }

50% { -webkit-transform: rotate(0deg); }

75% { -webkit-transform: rotate(-10deg); }

100% { -webkit-transform: rotate(-10deg); }

}


@-webkit-keyframes shadow {

0% { opacity: 1; }

25% { opacity: 0.75; }

50% { opacity: 1; }

75% { opacity: 0.75; }

100% { opacity: 1; }

}


.overlay {

width: 100%; height: 100%;

background: url(misc/gradient-left.png) repeat-y top left,

url(misc/gradient-right.png) repeat-y top right;

}


.sky div {

background-repeat: no-repeat;

-webkit-animation-name: prop-1200;

}


.cloud-1, .cloud-2 {

width: 82px; height: 90px;

background-image: url(clouds/1.png);

-webkit-animation-duration: 120s;

}


.cloud-3, .cloud-4 {

top: 70px;

width: 159px; height: 90px;

background-image: url(clouds/2.png);

-webkit-animation-duration: 80s;

}


.cloud-5, .cloud-6 {

top: 30px;

width: 287px; height: 62px;

background-image: url(clouds/3.png);

-webkit-animation-duration: 140s;

}


.cloud-7, .cloud-8 {

top: 100px;

width: 94px; height: 81px;

background-image: url(clouds/4.png);

-webkit-animation-duration: 90s;

}


.cloud-1 { left: 0px; }

.cloud-2 { left: 1200px; }


.cloud-3 { left: 250px; }

.cloud-4 { left: 1450px; }


.cloud-5 { left: 500px; }

.cloud-6 { left: 1700px; }


.cloud-7 { left: 950px; }

.cloud-8 { left: 2150px; }


.horizon {

top: 350px;

width: 1800px; height: 50px;

background: url(misc/horizon.png) repeat-x;

-webkit-animation-name: prop-600;

-webkit-animation-duration: 40s;

}


.ground div {

background-repeat: no-repeat;

-webkit-animation-name: prop-2000;

}


.sign-all-css {

width: 160px; height: 188px;

top: 325px; left: 1600px;

background-image: url(signs/all-css.png);

-webkit-animation-duration: 35s;

}


.sign-lots-of-divs {

width: 102px; height: 120px;

top: 345px; left: 1150px;

background-image: url(signs/lots-of-divs.png);

-webkit-animation-duration: 56s;

}


.sign-no-js {

width: 65px; height: 77px;

top: 348px; left: 1150px;

background-image: url(signs/no-js.png);

-webkit-animation-duration: 71s;

}


.sign-best {

width: 43px; height: 50px;

top: 350px; left: 1000px;

background-image: url(signs/best.png);

-webkit-animation-duration: 95s;

}


@-webkit-keyframes prop-600 {

0% { -webkit-transform: translateX(0px); }

100% { -webkit-transform: translateX(-600px); }

}


@-webkit-keyframes prop-1200 {

0% { -webkit-transform: translateX(0px); }

100% { -webkit-transform: translateX(-1200px); }

}


@-webkit-keyframes prop-2000 {

0% { -webkit-transform: translateX(0px); }

100% { -webkit-transform: translateX(-2000px); }

}


</style>


<div id=”canvas”>

<div class=”sky”>

<div class=”cloud-1″></div>

<div class=”cloud-2″></div>

<div class=”cloud-3″></div>

<div class=”cloud-4″></div>

<div class=”cloud-5″></div>

<div class=”cloud-6″></div>

<div class=”cloud-7″></div>

<div class=”cloud-8″></div>

</div>


<div class=”horizon”></div>


<div class=”ground”>

<div class=”sign-best”></div>

<div class=”sign-no-js”></div>

<div class=”sign-lots-of-divs”></div>

<div class=”sign-all-css”></div>

</div>


<!– skeleton and shadow –>

<div class=’shadow’></div>


<div class=’me’>


<div class=”torso”>

<div class=”left leg”>

<div class=”left thigh”>

<div class=”left shin”>

<div class=”left foot”>

<div class=”left toes”></div>

</div>

</div>

</div>

</div> <!– left leg –>


<div class=”right leg”>

<div class=”right thigh”>

<div class=”right shin”>

<div class=”right foot”>

<div class=”right toes”></div>

</div>

</div>

</div>

</div> <!– right leg –>


<div class=”left arm”>

<div class=”left bicep”>

<div class=”left forearm”></div>

</div>

</div> <!– left arm –>


<div class=”right arm”>

<div class=”right bicep”>

<div class=”right forearm”></div>

</div>

</div> <!– right arm –>


</div> <!– torso –>

</div> <!– me –>


<div class=”overlay”></div>


</div> <!– canvas –>


<p style=’text-align: center’><a href=’#canvas’>Show</a> / <a href=”#”>Hide</a> Element Borders.</p>









Twitter Facebook Delicious Google Reader Google Buzz Meneame Blinklist FriendFeed Google Bookmarks Google Gmail Netvibes Share Tumblr Compartir/Guardar




Artículos relacionados

Puede que tengas interés por ver algunos de estos artículos muy relacionados con esta entrada:




lunes, 19 de septiembre de 2011

Rejuvenecer un rostro con Photoshop

Rejuvenecer un rostro con Photoshop: A continuación explicaré en pocos pasos cómo rejuvenecer a una persona utilizando Adobe Photoshop.

Paso 1: Suavizar


Obviamente, primero seleccionamos la foto de la persona a la que deseamos rejuvenecer. En mi caso utilizaré una foto del viejo Bill Gates.



Para dotar de lozanía a la piel aplicaremos un filtro. Ve al menú: Filter > Noise > Median.



[nota:d78f8f3e2c]Puedes aumentar el valor radius siempre y cuando tu imagen no se distorsione demasiado.[/nota:d78f8f3e2c]

Luego de aplicar el filtro abre el panel History, ubica la capa que contiene el filtro Median y haz click en la casilla vacía, en el lado izquierdo de la capa, para activar el History Brush, y luego haz click en la capa inmediatamente superior.



Al hacer esto notarás que se deshará la última operación realizada, es decir, el filtro Median, y Bill lucirá tan arrugado como al inicio. Entonces, selecciona la herramienta History Brush (Y ) y dibuja libremente sobre el rostro para restaurar el filtro Median. De esta forma tienes más control sobre el filtro y puedes aplicarlo sólo en las zonas más convenientes en lugar de toda la imagen.



Paso 2: Quitar arrugas



El próximo paso consiste en remover las arrugas y para ello utilizaremos la herramienta Spot Healing Brush (J). Cuidadosamente, con movimientos cortos, elimina todas las arrugas y manchas de su rostro, incluyendo la de los ojos y frente.



[nota:d78f8f3e2c]Al utilizar esta herramienta es posible que se produzca una mancha o se clone una parte de la imagen que no deseamos, si esto ocurre sólo vuelve a pasar el pincel sobre el área afectada hasta que el resultado te satisfaga. También puedes ayudarte con la herramienta Clone Stamp (S).[/nota:d78f8f3e2c]

Paso 3: Quitar canas



Selecciona el cabello y las cejas en modo máscara. Para ello presiona la tecla (Q), dibuja con un pincel suave todas las áreas que desees seleccionar y luego presiona nuevamente Q para salir del modo máscara.



Seguidamente, invierte la selección (Ctrl+Shift+ I) y ajusta el color con curvas (Ctrl + M) utilizando todos los canales que sean necesarios.



Eso es todo, ahora el viejo Bill está rejuvenecido.


Estos tres pasos constituyen el procedimiento básico para rejuvenecer a una persona utilizando Photoshop. Al final, si es necesario, puedes perfeccionar el proceso corrigiendo algunos detalles menores con el filtro Liquify (Ctrl+ Shift+X) y la herramienta Clone Stamp (S) para que se vea mucho más joven aún.

Como pueden apreciar, este tip es sumamente sencillo y rápido. Espero que les sea útil.

Enviar comentario



El fin del Flash Player

El fin del Flash Player: Internet Explorer 10 no tendrá plugins en Windows 8 (modo Metro). Safari los abandona también. En el internet de la siguiente decada, a Flash no le quedan aliados.

El Flash Player de Adobe funcionaba bajo la idea que los plugins son esenciales para la web, perpetuado desde los ActiveX de IE5. Apple destruyó esa premisa con Safari Mobile en iPhone/iPad y ahora Microsoft se une.

La semana pasada, Microsoft anunció Windows 8, con un cambio total de interfaz llamado "Metro". Windows 8 será un sistema hibrido que funcionará con el mismo código en PCs, laptops y tablets similares al iPad.


El anuncio grande: Internet Explorer 10 soportará todo el estandar aprobado de HTML5 y CSS3, pero NO tendrá plugins en su versión "Metro". Ni Silverlight, ni Flash, ni nada.

Esto no es para tablets, esto es para TODOS los PCs o laptops con Windows 8. La única forma de usar Flash Player en el IE de Windows 8 será desactivar la interfaz "Metro" y usar la interfaz tradicional. Los usuarios normales nunca desactivan el Aero de Windows 7.








El final del Flash Player será invisible para los usuarios


Somos geeks. Podemos usar Firefox o Chrome que tienen (por ahora) plugins. Pero el grueso de la población ni siquiera sabe qué es un navegador. Usará la bola azul en forma de E. Y al hacerlo no notarán que el player no está.

Dos años de iPad han hecho que los sitios más visitados eliminen su dependencia de SWFs, agreguen CSS3, Javascript compatible y cambien sus videos por HTML5.

Youtube, Vimeo, blip.tv y Dailymotion funcionan perfecto con sólo HTML5, así como sitios de videos más nicho como Break.com o College Humor. Los únicos realmente afectados son los juegos online, pero ya hay Angry Birds en sólo Javascript y frameworks de desarrollo de juegos con JS y Canvas. No falta mucho para un Farmville HTML5.

El poder del empujón de Microsoft y Apple


Nadie pensaba en un mundo sin plugins hasta que Apple decidió expulsarlos del iOS. El mercado gigante del iPhone y del iPad empujó a millones de websites a eliminar Flash. Pero ahora ha empujado a Microsoft a descartar incluso a su Silverlight ¿Qué empresa sigue?

Google está dejando de usar Flash en todos los lugares donde dependía, empezando por Analytics y Youtube. ¿Veremos un Chrome sin plugins? ¿Qué tal Androids sin plugins?

Probablemente Firefox y Opera seguirán soportando el Flash Player, pero cuando la gente migre a Windows 8 y el uso de teléfonos móviles aumente, el player perderá su famoso "99% instalado" y pasaremos a algo más cercano al 30%.


¿Entonces para donde va Flash?


La respuesta oficial de Adobe es que "Flash sigue siendo vigente porque las apps hechas en AIR correrán en Windows 8 y Metro". Adobe le apunta a apps nativas para móviles, tablets y desktops creadas con Flash, Flex y demás creadores de SWF. ¿Y el player?

El player se está muriendo y decir lo contrario es mentir o estar ciego. Flash está transicionando a un futuro donde no será parte de la web, sino de las apps. Hay muchos usos aun para Flash, pero la era de una web con Flash está llegando a su fin.

¿Y Adobe? Adobe aún tiene Photoshop, además de estar trabajando fuertemente en herramientas de autoría para HTML5, CSS3 y Javascript. Wallaby, Edge, Muse y hasta Dreamweaver. Por la empresa no se preocupen, pero si usas Flash para la web, quizás sea hora de empezar a aprender HTML5.

Enviar comentario