1. Code
  2. JavaScript
  3. jQuery

Desarrolla un increíble formulario de inicio de sesión con jQuery

Scroll to top

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.

BeforeBeforeBefore Así debería lucir.

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

AfterAfterAfter 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?

  • En primer lugar, necesitamos un encabezado que se extienda por todo el ancho de la página.
  • También necesitaremos un panel superior, que por ahora, fingiremos que está expandido permanentemente 
    hasta que insertemos JQuery.
  • Necesitaremos un área para el contenido normal de la página.
  • Finalmente, necesitaremos un descanso visual entre el encabezado y el contenido de la página, que
    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.

    AreasAreasAreas 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í.

    step 5step 5step 5 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:

    step6step6step6 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
    }
    

    step7step7step7 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í.

  • En primer lugar, necesitamos que el panel se coloque en absoluto, o bien, cuando se expanda,
    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.
  • A continuación, agregamos la información de estilo para el panel superior como un todo. Como puedes ver, esto incluye 
    los botones del panel.
  • Después de eso, agregamos la información de estilo para el panel que normalmente está oculto. Esta 
    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.
  • Si examinas el HTML anterior, verás el div con el ID de panel_contents.
    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>
    
    step8step8step8 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:

    step9step9step9 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
    }
    
    101010 Estilos de los botones.

    Botones del panel del paso 10

  • Primero centramos el botón utilizando la técnica de margen automático. Luego lo posicionamos 
    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.
  • También vamos a envolver el texto en un enlace, para proporcionar un efecto sobre la marcha, 
    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.

    111111 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
    }
    
    121212 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.

  • Queremos activar la animación en el botón 'div.panel_button'.
  • Luego queremos animar la altura del panel a 400px.
  • También queremos cambiar el botón.
  • Luego queremos activar la animación inversa al hacer clic en 'div # hide_button'.
  • Por último queremos animar la altura de nuevo a 0px

  • 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
    });
    
    BeforeBeforeBefore 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:

  • Animar a 500 y alternar
  • Animar de nuevo a 400 rapido
  • Animar de nuevo a 0 rapido
  • 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.