Desarrolla un increíble formulario de inicio de sesión con jQuery
Spanish (Español) translation by Steven (you can also view the original English article)
Una lucha que aún permanece hoy en día en el diseño web es mostrar toda la información redundante en cada página. Por ejemplo, un formulario de inicio de sesión. ¿Qué pasaría si hubiera una manera de hacer que el contenido sea fácilmente accesible en cada página, pero mantenerlo oculto hasta que sea necesario? Bueno, tu puedes hacer un panel superior que al hacer clic, se revelará tu propia identidad y tu contenido. Pero tenemos que hacer que esto se vea bien, así que también lo animaremos.
En este tutorial, crearemos un panel deslizante, que se desliza para revelar más
contenido, utilizando JQuery para animar la altura del panel. En este caso, lo haremos
creando un inicio de sesión hipotético para la nueva área tutsplus que estará disponible próximamente.
Paso 1 - Diseño de Photoshop
Primero necesitamos planificar nuestro diseño y hacer que se vea bien con Photoshop. Gracias
a Collis, y sus increíbles habilidades en Photoshop, tenemos un diseño elegante para trabajar.
Puedes obtener el archivo PSD anterior y posterior para una inspección adicional en la fuente
del archivo zip. Pero es bastante evidente. Tampoco tiene gradientes, así que
deberíamos poder hacer esto fácilmente con CSS.


Así debería lucir. Aquí puedes ver cómo se verá la demostración en su estado normal.


Y así después de hacer clic sobre el botón. Así es como se verá la demostración cuando el panel se deslice hacia abajo.
Paso 2 - Planificación de la estructura.
En primer lugar, necesitamos construir la estructura de la página. Para crear el diseño de arriba,
¿qué necesitamos todos estructuralmente en el HTML?
hasta que insertemos JQuery.
lo lograremos a través de una regla horizontal (hr).
Bien, entonces el diseño de la página es bastante simple. Aquí está:
1 |
|
2 |
<div></div> <!--Header--> |
3 |
|
4 |
<hr> <!--Header Stripe--> |
5 |
|
6 |
|
7 |
<div> <!--Contains the button and panel--> |
8 |
<div> <!--Contains the panel itself--> |
9 |
|
10 |
<div> This div will serve as the background of the panel</div> |
11 |
|
12 |
</div>
|
13 |
<div><a>Login Here</a></div> <!--Will be the button to slide the panel down--> |
14 |
|
15 |
<div><a>Hide</a></div> <!--Toggles to this when the panel is slid down--> |
16 |
</div>
|
17 |
</div>
|
18 |
|
19 |
|
20 |
<div>
|
21 |
|
22 |
All of the Content will go here |
23 |
</div>
|
Wow... sin clases o contenido dentro, parece una gran cantidad de divs sin sentido,
pero todo será necesario para el CSS y JQuery más adelante. Ahora empezaremos a añadir
clases en preparación para el CSS.
Paso 3 - Preparación de CSS: Clases e ID's
Ahora tenemos que cambiar el esqueleto en un sitio real con CSS. Bien
¡comienza agregando clases e ID a todos esos divs! Puedes hacerlo fácilmente
imprimiendo el diseño de Photoshop y luego marcando las áreas y las clases asociadas
con un sharpie. Para esta demostración, haré lo mismo solo en Photoshop.
Aunque puede ser extremadamente feo, esperamos que te muestre las diferentes regiones
de la página.


Estructura.Nota: Planeo tener la imagen normal no resaltada al desplazar.
Aquí está la página con las clases e ID añadidas:
1 |
|
2 |
|
3 |
<div id="header"> |
4 |
</div>
|
5 |
|
6 |
<hr id="header_stripe"/> |
7 |
|
8 |
<div id="wrapper"> |
9 |
<div id="toppanel"> |
10 |
|
11 |
<div id="panel"> |
12 |
<div id="panel_contents"> </div> |
13 |
</div>
|
14 |
<div class="panel_button"><a href="#">Login Here</a></div> |
15 |
|
16 |
<div class="panel_button"><a href="#">Hide</a></div> |
17 |
</div>
|
18 |
</div>
|
19 |
<div id="content"> |
20 |
|
21 |
</div>
|
En este momento, te mostraría una captura de pantalla de lo que tenemos hasta ahora, pero ya no hablamos de
tener cualquier cosa excepto una regla horizontal y dos enlaces sin estilo. Tienes la idea
Ahora podemos darle estilos a la página.
Paso 4 - Vinculando los archivos
Antes de continuar, debemos introducir el archivo CSS en el maquetado.
Creé una hoja de estilo titulada "style.css". Mientras estamos agregando código
en el head, también podríamos agregar javascript y jQuery. Aquí está el
head de la página:
1 |
|
2 |
<head>
|
3 |
<title>Nettuts JQuery Sliding Panel</title> |
4 |
<style type="text/css"> |
5 |
@import url(style.css); |
6 |
</style>
|
7 |
<script src="jquery.js" type="text/javascript"></ |
8 |
<wbr> |
9 |
script> <script src="javascript.js" type="text/javascript"></<wbr>script> |
10 |
</head> |
Paso 5 - Darle estilos al maquetado: Header
Ahora tenemos que estilizar ese esqueleto de divs. Vamos a empezar de arriba a abajo. Primero
necesitamos el estilo del encabezado así como la etiqueta del cuerpo:
1 |
|
2 |
body { |
3 |
background: #202020; |
4 |
text-align: center; |
5 |
margin: 0px; |
6 |
}
|
7 |
|
8 |
#header { |
9 |
margin-left: auto; |
10 |
margin-right: auto; |
11 |
width: 100%; |
12 |
height: 135px; |
13 |
background: #3f3f3f url(images/header.png) no-repeat center ; |
14 |
position: relative; |
15 |
border-bottom: 1px solid #4a4a4a; |
16 |
}
|
Afortunadamente, no tenemos gradientes de los que preocuparnos aquí. Pero todavía tenemos un fondo con
imagen. También agregué un borde de 1px a la parte inferior del encabezado para un descanso visual.
La imagen de fondo es opcional. Me gustó tanto la fuente Bell Gothic BT, decidí
convertirlo en una imagen. Alternativamente, puedes elegir simplemente darle estilo al texto plano
agregando estilo a las etiquetas h1 y h2:
1 |
|
2 |
#header h1{ |
3 |
font-family: Arial, Helvetica, sans-serif; |
4 |
font-weight: bold; |
5 |
position: relative; |
6 |
top: 30px; |
7 |
font-size: 40px; |
8 |
color: white; |
9 |
}
|
10 |
|
11 |
#header h2{ |
12 |
font-family: Arial, Helvetica, sans-serif; |
13 |
font-weight: bold; |
14 |
font-size: 16px; |
15 |
color: #7e7e7e; |
16 |
}
|
Y luego modificando el encabezado a esto:
1 |
|
2 |
<div id="header"> |
3 |
|
4 |
<h1>Sliding Panel</h1> |
5 |
<br /> |
6 |
<h2>jQuery Sliding Panel Demonstration for NETTUTS</h2> |
7 |
</div>
|
Así que ahora la página debería verse así:
Puedes ver el paso 5 aquí.


Con la línea horizontal.Paso 6 - Diseñar la regla horizontal
Aunque tenemos el borde inferior del encabezado para separar visualmente las secciones,
También necesitamos un borde más grueso y más visual. Como no podemos aplicar dos fondos
al encabezado, solo podemos darle estilos a la regla horizontal (hr):
1 |
|
2 |
hr#header_stripe{ |
3 |
height: 12px; |
4 |
position: relative; |
5 |
top: -7px; |
6 |
background-color: #191919; |
7 |
border: none; |
8 |
color: #191919; |
9 |
|
10 |
}
|
Ahora tenemos una separación más gruesa para agregar al borde de 1px:


Así debería verse la línea horizontal.Puedes ver el paso 6 aquí.
Paso 7 - Diseño del panel
Ahora tenemos que diseñar el panel. Hasta que agreguemos JQuery, vamos a dar estilos
al panel como este fue expandido. Cuando hayamos terminado con el CSS, vamos
a animar la altura del panel a cero, y luego volver a la altura máxima; por lo tanto
necesitamos asegurarnos de que cuando cambiemos la altura, se mantenga igual.
Aquí está el código CSS, lo explicaré después:
1 |
|
2 |
#wrapper{ |
3 |
margin-left: auto; |
4 |
margin-right: auto; |
5 |
width: 900px; |
6 |
text-align: center; |
7 |
}
|
8 |
#toppanel { |
9 |
position: absolute; |
10 |
top: 135px; |
11 |
width: 900px; |
12 |
z-index: 25; |
13 |
text-align: center; |
14 |
margin-left: auto; |
15 |
margin-right: auto; |
16 |
}
|
17 |
#panel { |
18 |
width: 900px; |
19 |
position: relative; |
20 |
top: 1px; |
21 |
height: 400px; |
22 |
margin-left: auto; |
23 |
margin-right: auto; |
24 |
z-index: 10; |
25 |
overflow: hidden; |
26 |
text-align: left; |
27 |
}
|
28 |
#panel_contents { |
29 |
background: black; |
30 |
filter:alpha(opacity=70); |
31 |
-moz-opacity:0.70; |
32 |
-khtml-opacity: 0.70; |
33 |
opacity: 0.70; |
34 |
height: 100%; |
35 |
width: 904px; |
36 |
position: absolute; |
37 |
z-index: -1; |
38 |
}
|


Algo de espacio para el panel.
Ok, eso es mucho código para una caja. Bueno, es más que eso. Trata de inspeccionar
con Firefox Extension Firebug o Web Developer, y verás
todo lo que hace CSS.
Echa un vistazo al paso 7 que actualmente
luce así.
que empuje todo el contenido debajo de él. Añadimos un wrapper, que envuelva
alrededor de todo lo demás, y luego lo centre. Si dejamos el wrapper fuera, el panel,
se va a posicionar como absoluto, no podría centrarse tan fácilmente.
los botones del panel.
es la caja que ves expandida ahora. Hice la altura 100%, de modo que si aumentamos
o disminuimos la altura del #toppanel, la altura de #panel será la misma.
Además, el desbordamiento está oculto, por lo que si se reduce la altura del panel superior,
se cortará del contenido del panel.
Este div, aunque vacío, nos permite tener el fondo transparente, mientras que todavía
mantenemos el contenido dentro opaco.
Paso 8 - Añadir contenido al Panel
Antes de probar el panel, necesitamos agregar algo de contenido, para ver si lo oculta
correctamente. En este ejemplo, estamos creando un área de inicio de sesión, por lo que necesitamos agregar un formulario,
y también agregaremos una imagen para equilibrarla. Este paso es solo para agregar contenido
para la demo. Es menos importante y es más básico, así que no lo explicaré como
tanto como todo lo demás. Aquí está el código:
CSS:
1 |
|
2 |
.border { |
3 |
border: 15px #1d1d1d solid; |
4 |
}
|
5 |
|
6 |
img.border_pic { |
7 |
border: 15px #1d1d1d solid; |
8 |
position: absolute; |
9 |
top: 110px; |
10 |
float: left; |
11 |
margin-left: 150px; |
12 |
width: 250px; |
13 |
height: 150px; |
14 |
z-index: 30; |
15 |
}
|
16 |
div#login { |
17 |
width: 240px; |
18 |
height: 150px; |
19 |
position: absolute; |
20 |
right: 150px; |
21 |
top: 110px; |
22 |
background: #46392f; |
23 |
text-align: left; |
24 |
padding-left: 10px; |
25 |
}
|
26 |
div#login p { |
27 |
color: #CCCCCC; |
28 |
font-family: Century Gothic, Georgia, "Times New Roman", Times, serif; |
29 |
line-height: 25px; |
30 |
}
|
31 |
div#login input#password { |
32 |
position: relative; |
33 |
right: -6px; |
34 |
}
|
35 |
div#login input#login_btn { |
36 |
border: 1px #899690 solid; |
37 |
cursor: pointer; |
38 |
position: relative; |
39 |
top: 30px; |
40 |
left: 86px; |
41 |
}
|
HTML:
1 |
|
2 |
|
3 |
<img class="border_pic" src="images/tutsplus.jpg" alt="Screenshot" /> |
4 |
<div class="border" id="login"> |
5 |
|
6 |
<p>Username:
|
7 |
<input type="text" size="15" name="username" id="username" /> |
8 |
|
9 |
<br /> |
10 |
Password: |
11 |
<input type="password" size="15" name="password" id="password" /> |
12 |
|
13 |
<br /> |
14 |
<input type="button" accesskey="l" id="login_btn" name="login" value="Login" /> |
15 |
|
16 |
</p>
|
17 |
</div>
|


La imgen y el formulario para iniciar sesiín.El paso 8 está disponible aquí.
Paso 9 - Probar el CSS
Ahora debemos asegurarnos de que si usamos jQuery para animar la altura de la parte superior
del panel, funcionará sin problemas. Ahora que tenemos contenido, vamos a cambiar el
alto del panel a 200 y ver qué pasa:


Espaciado. Maravilloso. Puedes ver el paso 9 aquí.
Ahora vamos a cambiarlo a 0:


Con 0.Perfecto. Ahora sabemos que el diseño funcionará con JQuery.
Paso 10 - Diseñando el botón
Si examinas el producto terminado, puedes ver que el botón que desliza el
panel abajo, cambia una vez que haces clic en él una vez. Esto significa que cambia. Por lo tanto,
necesitamos dos botones, y alternaremos su visibilidad. Antes de esconder uno de ellos,
sin embargo, necesitamos agregarles CSS.
Si recuerdas, les agregamos la clase ".panel_button". Aquí está el
código. Lo explicaré después:
1 |
|
2 |
.panel_button { |
3 |
margin-left: auto; |
4 |
margin-right: auto; |
5 |
position: relative; |
6 |
top: 1px; |
7 |
width: 173px; |
8 |
height: 54px; |
9 |
background: url(images/panel_button.png); |
10 |
z-index: 20; |
11 |
filter:alpha(opacity=70); |
12 |
-moz-opacity:0.70; |
13 |
-khtml-opacity: 0.70; |
14 |
opacity: 0.70; |
15 |
cursor: pointer; |
16 |
}
|
17 |
.panel_button a { |
18 |
text-decoration: none; |
19 |
color: #545454; |
20 |
font-size: 20px; |
21 |
font-weight: bold; |
22 |
position: relative; |
23 |
top: 5px; |
24 |
left: 10px; |
25 |
font-family: Arial, Helvetica, sans-serif; |
26 |
}
|
27 |
.panel_button a:hover { |
28 |
color: #999999; |
29 |
}
|


Estilos de los botones.Botones del panel del paso 10
y añadimos un fondo del botón. También agregamos toda esa información de estilo
para adaptarse a todas las preferencias de los diferentes navegadores. Y hacer el
botón clikable haciendo que el cursor sea un puntero, cuando se desplaza sobre él. Esta
solo mejora la usabilidad.
así como posicionamiento.
Paso 11 - Botón HTML
Ahora, en preparación para el JQuery, necesitamos configurar los botones, con su HTML.
En primer lugar, vamos a agregar una imagen a cada botón y posicionarla con CSS,
verás el HTML en un segundo:
1 |
|
2 |
.panel_button img{ |
3 |
position: relative; |
4 |
top: 10px; |
5 |
border: none; |
6 |
}
|
Ahora, también necesitamos ocultar el botón Hide por ahora. Por mucho que odie, el estilo en línea,
creo que es más fácil agregar este CSS en línea, así que aquí está el nuevo código HTML para
los botones, con las imágenes:
1 |
|
2 |
<div class="panel_button" style="display: visible;"><img src="images/expand.png" alt="expand"/> |
3 |
<a href="#">Login Here</a> |
4 |
|
5 |
</div>
|
6 |
<div class="panel_button" id="hide_button" style="display: none;"><img src="images/collapse.png" alt="collapse" /> |
7 |
|
8 |
<a href="#">Hide</a> |
9 |
</div>
|
Ok, así que, fíjate, ahora mismo, el botón de ocultar está oculto con un estilo en línea. Esto
se cambiará más tarde con jQuery. Aviso, también agregué un ID al segundo botón, así que
podemos apuntarlo más tarde fácilmente.


Botón de ingreso.Botón del panel del paso 11
Paso 12 - Agregar el contenido
Este es un paso rápido, pero necesario, agregando contenido. Escribí una oración y añadí
Un párrafo de texto ficticio. Lo centré usando la técnica de margen automático, y
lo he coloreado de un color gris:
1 |
|
2 |
#content { |
3 |
margin-left: auto; |
4 |
margin-right: auto; |
5 |
width: 600px; |
6 |
position: relative; |
7 |
top: 90px; |
8 |
text-align: left; |
9 |
color: #545454; |
10 |
font-family: Arial, Helvetica, sans-serif; |
11 |
font-size: 12px; |
12 |
padding-bottom: 30px; |
13 |
}
|


Párrafo de fondo.Mira el texto detrás del panel en el paso 12.
Paso 13 - ¡Hora del JQuery!
Bien, para la parte final del tutorial, JQuery puedes usar la última versión JQuery
en jQuery.com. Si recién estás comenzando, asegúrate de revisar este otro
tutorial de Nettuts por Jeffrey Way, para excelentes recursos de JQuery. Ya he tomado
una copia de JQuery.com, y ya la ha vinculado a la página en el Paso 4.
Paso 14 - Piensa en lo que necesitamos
Primero pensemos en lo que necesitamos que haga JQuery antes de escribir el código.
Paso 15 - Escribe el código
Así que primero comenzamos por preparar el script con el siguiente JQuery:
1 |
|
2 |
$(document).ready(function() { |
3 |
});
|
4 |
|
5 |
Now we write the code that goes inside there: |
6 |
|
7 |
$(document).ready(function() { |
8 |
$("div.panel_button").click( |
9 |
<wbr> |
10 |
function(){ $("div#panel").animate({ height: "400px" }); $("div.panel_button").toggle()<wbr>; |
11 |
}); $("div#hide_button").click(<wbr>function(){ |
12 |
$("div#panel").animate({ |
13 |
height: "0px" |
14 |
});
|
15 |
});
|
16 |
});
|


Panel animado.Panel en movimiento en el paso 15.
Al principio, cuando examinas el código anterior, algunos de ustedes se preguntarán por qué yo solo
estoy alternando en la primera acción. Bueno, hay que recordar que el botón de ocultar
también tiene una clase de panel_button. Por lo tanto, cuando haces clic en el botón 'Ocultar'
en realidad estás aplicando ambas acciones.
Paso 16 - Hacer que la animación se vea "real"
Así que ahora se ve bastante bien, pero aún podemos hacer más; como hacer que la animación
luzca mejor. Al animar, generalmente es importante tratar de imitar la vida real
cuanto más se pueda. En este caso, pienso en un ejemplo de la vida real, como un menú desplegable
proyectado en la pantalla. Recuerda que cuando tiras de ellos, lo haces más abajo y luego
se hará, luego vuelve a subir un poco. De la misma manera, cuando quieras ponerlo
retrocede, bájalo un poco antes de que suba muy rápido.
Tratemos de imitar eso:
1 |
|
2 |
$(document).ready(function() { |
3 |
$("div.panel_button").click( |
4 |
<wbr> |
5 |
function(){ $("div#panel").animate({ height: "500px" }) .animate({ |
6 |
height: "400px" }, "fast"); $("div.panel_button").toggle()<wbr>; |
7 |
}); $("div#hide_button").click(<wbr>function(){ |
8 |
$("div#panel").animate({ |
9 |
height: "0px" |
10 |
|
11 |
}, "fast"); |
12 |
});
|
13 |
});
|
Ten en cuenta que animamos el panel a una altura de 500 antes de ir a 400. También
agregamos una diferencia de velocidad como en la vida real, al hacer que ciertas partes sean más lentas. Si
miras la demostración, verás que cuando ocultas el panel, sigue apareciendo
500 primero. Nuevamente, esto es porque ambos botones tienen la misma clase. Así que realmente cuando
ocultas el panel, pasa por este proceso:
Ahora tenemos un panel deslizante que funciona con JQuery. Espero que hayas encontrado útil este tutorial.
Si es así, envíalo a Digg, StumbleUpon, DZone, etc.





