Advertisement
  1. Web Design
  2. UX/UI
  3. Forms

Experimentos de CSS con un Formulario de Búsqueda y su Botón

Scroll to top
Read Time: 15 min

() translation by (you can also view the original English article)

En este tutorial, me gustaría explorar cómo puedes embellecer un sencillo formulario de búsqueda. No estaremos haciendo nada loco, por el contrario exploraremos cuatro tomas diferentes sobre cómo engalanar una entrada de búsqueda con la ayuda de las transiciones de CSS.

Ya Tienes un Caja de Búsqueda Básica

En tu archivo HTML necesitarás crear un formulario de búsqueda para comenzar. Si miras el código a continuación, notarás cuatro cosas diferentes: un div .box un div .container-1 un div .icon y la entrada de búsqueda en sí misma.

1
<div class="box">
2
  <div class="container-1">
3
      <span class="icon"><i class="fa fa-search"></i></span>
4
      <input type="search" id="search" placeholder="Search..." />
5
  </div>
6
</div>

Todos los cuatro ejemplos tendrán una caja de búsqueda - naturalmente - así como un bien parecido ícono. Cada uno de los cuatro ejemplos serán alojados en un contenedor de manera que puedas manipular la entrada de búsqueda independientemente. Por último, la caja div es responsable por mantener el contenedor centrado.

Añadiendo Font Awesome

Font Awesome es una librería de iconos. Puedes aprender más sobre el proyecto en el propio sitio web de Font Awesome

1
<i class="fa fa-search"></i>

El fragmento de código anterior es un ejemplo de como puedes incluir el icono dentro de tu marcado. Sin embargo, en orden de que se muestre el icono también necesitarás incluir un link a la librería de Font Awesome, demostrada en el fragmento a continuación. Incluye este enlace dentro del head de tu documento. 

1
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet">

Estilo Básico

Ahora vamos a agregar algunos estilos en una hoja de estilos separada (la cual también necesitarás enlazar desde dentro del head del documento).

1
body{
2
  background: #343d46;
3
}
4
5
.box{
6
  margin: 100px auto;
7
  width: 300px;
8
  height: 50px;
9
}

En el fragmento de CSS anterior estamos agregando algunos estilos básicos a la página. El estilo de las cajas de búsqueda serán de color marino de manera que el fondo no debe ser totalmente blanco. La clase box también esta siendo centrada en la página para los propósitos de este tutorial.

Embelleciendo la Caja de Búsqueda

Este tutorial es sobre aprender cómo embellecer la caja de búsqueda. En este primer ejemplo explicaré que está pasando con más detalle; quiero asegurarme de que sabes exactamente lo que está pasando. En el resto de los tres ejemplos, simplemente te mostraré cómo puedes lograr las diferentes transiciones.

#1.  Fondo Desvanecido

El primer ejemplo que vamos a abordar es para cambiar el fondo onhover del campo de búsqueda.  También añadiremos una transición de manera que el cambio no sea discorde.

El HTML

Ya has visto el HTML con el marcado básico. Este fragmento será similar para todos los ejemplos.

1
<div class="box">
2
  <div class="container-1">
3
      <span class="icon"><i class="fa fa-search"></i></span>
4
      <input type="search" id="search" placeholder="Search..." />
5
  </div>
6
</div>

El CSS

Para comenzar a darle estilo, necesitamos definir el estilo CSS de la caja de búsqueda en si misma. Agreguemos las diferentes reglas de CSS una por una así sabrás exactamente qué está pasando.

1
.container-1{
2
  width: 300px;
3
  vertical-align: middle;
4
  white-space: nowrap;
5
  position: relative;
6
}

Primero, queremos darle estilo a la clase container. La propiedad más importante es posiblemente position:relative Está configurada específicamente de manera que el icono pueda ser puesto arriba de la entrada como lo verás en breve.

1
.container-1 input#search{
2
  width: 300px;
3
  height: 50px;
4
  background: #2b303b;
5
  border: none;
6
  font-size: 10pt;
7
  float: left;
8
  color: #63717f;
9
  padding-left: 45px;
10
  -webkit-border-radius: 5px;
11
  -moz-border-radius: 5px;
12
  border-radius: 5px;
13
}

Input

Luego queremos darle estilos al input actual. Todo lo anterior es puramente estético ya que el radio del borde o el color de fondo no afecta el funcionamiento del input. Ten en cuenta la propiedad left padding. Está ahí para hacerle cuarto al icono pues no está literalmente arriba del texto dentro del input.

A continuación tenemos cuatro reglas diferentes que le darán color al texto del placeholder, el cual en nuestro ejemplo es Search Las reglas desafortunadamente necesitan ser separadas para cada prefijo de proveedores y no pueden ser consolidadas en atajos de reglas escritas. ¡Esto es un poco molesto y lo verás repetidamenet en cada ejemplo!

1
.container-1 input#search::-webkit-input-placeholder {
2
   color: #65737e;
3
}
4
5
.container-1 input#search:-moz-placeholder { /* Firefox 18- */
6
   color: #65737e;  
7
}
8
9
.container-1 input#search::-moz-placeholder {  /* Firefox 19+ */
10
   color: #65737e;  
11
}
12
13
.container-1 input#search:-ms-input-placeholder {  
14
   color: #65737e;  
15
}

Icono

Por último, le daremos estilos al icono.  Lo más importante es que estamos estableciendo su posición para que sea ubicado arriba de la entrada al configurar su posición como position:absolute Las márgenes ayudan a posicionar el icono y en adición a configurar su posición de arriba en 50%

1
.container-1 .icon{
2
  position: absolute;
3
  top: 50%;
4
  margin-left: 17px;
5
  margin-top: 17px;
6
  z-index: 1;
7
  color: #4f5b66;
8
}

Agregando Efectos al Hover

El siguiente conjunto de reglas que tenemos que crear es lo que le sucede a la caja de búsqueda cuando se hace hover sobre ella. En este ejemplo sólo queremos cambiarle el color de fondo. En orden de evitar el destello amarillo o azul alrededor del input (que es agregado por los navegadores algunas veces) configuramos outline:none.

1
.container-1 input#search:hover, .container-1 input#search:focus, .container-1 input#search:active{
2
    outline:none;
3
    background: #ffffff;
4
  }

Como ves en el fragmento anterior, hemos agregado dos estados adicionales - focus y active. De esta manera el efecto no desaparece cuando dejas de pasar el mouse por encima del input. Lo más importante, es que el efecto también sea prominente cuando el input esté en uso.

Creando la Transición

En orden de hacer que suceda la transición necesitamos agregar unas pocas líneas de código. Regresa de vuelta a la regla donde definimos el estilo del input - .container-1 input#search. Antes de los corchetes de cierre agrega el siguiente fragmento:

1
  -webkit-transition: background .55s ease;
2
  -moz-transition: background .55s ease;
3
  -ms-transition: background .55s ease;
4
  -o-transition: background .55s ease;
5
  transition: background .55s ease;

Estamos definiendo el atajo de la propiedad de transición, pero podríaamos a cambio definir esos tres parámetros individualmente. Primero que todo, estamos diciendo que la transición debería afectar sólo la propiedad background. Luego, estamos diciendo que la transición debería tomarse un poco más de medio segundo. Por último definimos el efecto de la transición para que sea ligero. El efecto para suavizar ease, no es el único efecto que podría trabajar aquí, también podríamos usar linear o ease-in, por ejemplo. Simplemente podría parecer un poco diferente. Mejor pruébalos por ti mismo para ver si te gustan.

El estilo del input debería ahora verse como el siguiente código.

1
.container-1 input#search{
2
  width: 300px;
3
  height: 50px;
4
  background: #2b303b;
5
  border: none;
6
  font-size: 10pt;
7
  float: left;
8
  color: #262626;
9
  padding-left: 45px;
10
  -webkit-border-radius: 5px;
11
  -moz-border-radius: 5px;
12
  border-radius: 5px;
13
14
  
15
    -webkit-transition: background .55s ease;
16
  -moz-transition: background .55s ease;
17
  -ms-transition: background .55s ease;
18
  -o-transition: background .55s ease;
19
  transition: background .55s ease;
20
}

¿Cómo trabajan las Transiciones de CSS?

Si no sabes nada acerca de las transiciones en CSS, déjame darte un breve resumen.  Primero, en orden de que la transición funcione, la propiedad necesita ser definida en un estado por defecto y no en hover, active o focus.

Las transiciones de CSS permiten que gradualmente un efecto cambie y puedes definir parámetros específicos para controlarlo, tales como cuál propiedad será afectadam la duración de la transición y la clase de transición. Puedes tener un set de múltiples transiciones para un elemento. Pero, lo más importante, deberías siempre incluir prefijos de proveedores con el fin de acomodarlo a los varios navegadores, ya que el soporte para esta propiedad aún no es universal.

Para más información échale un vistazo a: Transiciones y Transformación en CSS3 desde Ceros

#2.  Expandir el Input en Hover

En este ejemplo la búsqueda comenzará sólo como el icono de lupa. Cuando pases el ratón sobre el icono, la caja de búsqueda se expandirá hasta el punto en que puedas escribir tu consulta. La mayor parte del código en este ejemplo será muy similar al ejemplo previo.

El HTML

1
<div class="box">
2
  <div class="container-2">
3
      <span class="icon"><i class="fa fa-search"></i></span>
4
      <input type="search" id="search" placeholder="Search..." />
5
  </div>
6
</div>

El CSS

1
.container-2{
2
  width: 300px;
3
  vertical-align: middle;
4
  white-space: nowrap;
5
  position: relative;
6
}

El estilo del input en esta transición es diferente El input es significativamente más pequeño de manera que el icono puede aparecer detrás de un cuadrado. Todas las propiedades restantes, como el fondo o el color de la fuente, son las mismas ya que no queremos cambiar el estilo de la búsqueda completamente.

1
.container-2 input#search{
2
  width: 50px;
3
  height: 50px;
4
  background: #2b303b;
5
  border: none;
6
  font-size: 10pt;
7
  float: left;
8
  color: #262626;
9
  padding-left: 35px;
10
  -webkit-border-radius: 5px;
11
  -moz-border-radius: 5px;
12
  border-radius: 5px;
13
  color: #fff;
14
15
  -webkit-transition: width .55s ease;
16
  -moz-transition: width .55s ease;
17
  -ms-transition: width .55s ease;
18
  -o-transition: width .55s ease;
19
  transition: width .55s ease;
20
}

Como también puedes ver, he redefinido la propiedad de la transición para afectar sólo el ancho. He mantenido el tiempo igual porque es lo suficientemente rápido como para no enojar a los usuarios, pero lo suficientemente largo para crear unn buen efecto.

Abajo está el código para recolorear el texto del placeholder.

1
.container-2 input#search::-webkit-input-placeholder {
2
   color: #65737e;
3
}
4
5
.container-2 input#search:-moz-placeholder { /* Firefox 18- */
6
   color: #65737e;  
7
}
8
9
.container-2 input#search::-moz-placeholder {  /* Firefox 19+ */
10
   color: #65737e;  
11
}
12
13
.container-2 input#search:-ms-input-placeholder {  
14
   color: #65737e;  
15
}

Una vez más tenemos el estilo CSS del icono. Debería ser el mismo como en el ejemplo anterior.

1
.container-2 .icon{
2
  position: absolute;
3
  top: 50%;
4
  margin-left: 17px;
5
  margin-top: 17px;
6
  z-index: 1;
7
  color: #4f5b66;
8
}

Añadiendo los efectos del hover.

Lo último que necesitamos hacer es definir cómo se verá la búsqueda cuando se hace hover sobre ella. En el siguiente fragmento la primera regla asegura que el formulario no tenga el brillo autogenerado por el navegador en el borde y que cuando estés usando la entrada - cuando escribas en ella - la caja de búsqueda permanezca expandida.  La regla de la mitad tan sólo expande la entrada a un ancho completo en estado hover.

1
.container-2 input#search:focus, .container-2 input#search:active{
2
  outline:none;
3
  width: 300px;
4
}
5
6
.container-2:hover input#search{
7
width: 300px;
8
}
9
10
.container-2:hover .icon{
11
  color: #93a2ad;
12
}

Lo último que succede en el código anterior es que en hover el icono cambia de color. Es sólo un pequeño detalle para mostrarle rápidamente al usuario que la caja de búsqueda está activa y trabajando, más que ser un input ocioso. El cambio no es implementado por una traducción.

#3. Incrementando el Tamaño del icono en Hover

De todos los cuatro ejemplos, este es el más sutil, tanto en términos de código como de efecto visual. En este caso el icono de búsqueda saltará ligeramente e incrementará su tamaño.

El HTML

Una vez más el marcado en HTML del icono y la caja de búsqueda es lo mismo como en el ejemplo anterior. La excepción, claro, es el div .container-3.

1
<div class="box">
2
  <div class="container-3">
3
      <span class="icon"><i class="fa fa-search"></i></span>
4
      <input type="search" id="search" placeholder="Search..." />
5
  </div>
6
</div>

El CSS

El CSS de este ejemplo no es nada especial. Para la mayoría de las partes comienza muy similar a los primeros ejemplo donde el estado por defecto no es muy diferente del todo. El siguiente es el código para el contenedor y el input. Ten en cuenta que no hay una transición en el input esta vez.

1
.container-3{
2
  width: 300px;
3
  vertical-align: middle;
4
  white-space: nowrap;
5
  position: relative;
6
}
7
8
.container-3 input#search{
9
  width: 300px;
10
  height: 50px;
11
  background: #2b303b;
12
  border: none;
13
  font-size: 10pt;
14
  float: left;
15
  color: #262626;
16
  padding-left: 45px;
17
  -webkit-border-radius: 5px;
18
  -moz-border-radius: 5px;
19
  border-radius: 5px;
20
  color: #fff;
21
}

Una vez más tenemos las reglas del placeholder.

1
.container-3 input#search::-webkit-input-placeholder {
2
   color: #65737e;
3
}
4
5
.container-3 input#search:-moz-placeholder { /* Firefox 18- */
6
   color: #65737e;  
7
}
8
9
.container-3 input#search::-moz-placeholder {  /* Firefox 19+ */
10
   color: #65737e;  
11
}
12
13
.container-3 input#search:-ms-input-placeholder {  
14
   color: #65737e;  
15
}

Ahora, para su aspecto, el icono para este ejemplo también es el mismo. Es del mismo color, la misma posición y sucesivamente. Sin embargo, le he agregado una transición. Estas transiciones le apuntan a todas las propiedades, lo cual es un acercamiento más corto más que detallarlas individualmente.

1
.container-3 .icon{
2
  position: absolute;
3
  top: 50%;
4
  margin-left: 17px;
5
  margin-top: 17px;
6
  z-index: 1;
7
  color: #4f5b66;
8
9
   -webkit-transition: all .55s ease;
10
  -moz-transition: all .55s ease;
11
  -ms-transition: all .55s ease;
12
  -o-transition: all .55s ease;
13
  transition: all .55s ease;
14
}

Añadiendo los Efectos del Hover.

1
.container-3 input#search:focus, .container-3 input#search:active{
2
    outline:none; 
3
}
4
5
.container-3:hover .icon{
6
  margin-top: 16px;
7
  color: #93a2ad;
8
9
  -webkit-transform:scale(1.5); /* Safari and Chrome */
10
  -moz-transform:scale(1.5); /* Firefox */
11
  -ms-transform:scale(1.5); /* IE 9 */
12
  -o-transform:scale(1.5); /* Opera */
13
   transform:scale(1.5);
14
  }

Hay un par de cosas sucediendo en el código anterior. Primero que todo estamos cambiando el color del icono en el hover y moviéndolo a ser un poco más altoasí que está centrado verticalmente cuando es más grande. En segundo término, estamos añadiendo una transformación al elemento icono en el hover así que será de hecho 1.5 veces su tamaño original. Ya que la transición definida anteriormente fue configurada para impactar en todas las propiedades, aparece como si el icono creciera en tamaño en hover,

De nuevo, echa un vistazo a las Transiciones y Transformaciones en CSS3 desde Cero para aprender más sobre la propiedad de transformación.

#4. Botón en Hover.

Diferente a los últimos tres ejemplos, este en particular será más complejo. En hover, un botón se deslizará hacia arriba del input para dejarte continuar - como el Enviar o Ir El botón tendrá el icono de buscar dentro de él.

El HTML

1
<div class="box">
2
  <div class="container-4">
3
    <input type="search" id="search" placeholder="Search..." />
4
    <button class="icon"><i class="fa fa-search"></i></button>
5
  </div>
6
</div>

Aquí el HTML es un poco diferente.  El input aún está allí, claro, pero el icono ahora está dentro del elemento botón el cual viene después del input. Es importante que el botón esté después del input ya que tiene relación con cómo el efecto hover será creado en el CSS.

El CSS

¡El CSS en este ejemplo es diferente así que presta atención! Abajo está el fragmente para darle estilo al contenedor. Primero, el position:relative se ha perdido; ya no es más importante ya que el icono no confía en él para ser ubicado encima del input. Sin embargo hemos hecho el overflow:hidden. Esto previene el botón de mostrarse cuando no está en hover. Técnicamente el botón que aparece se presenta a la derecha del input, pero gracias a overflow:hidden no se muestra cuando cae más allá del ancho del contenedor - el contenedor y el input tienen el mismo ancho.

1
.container-4{
2
  overflow: hidden;
3
  width: 300px;
4
  vertical-align: middle;
5
  white-space: nowrap;
6
}

Abajo el input no tiene la transición porque el elemento no está siendo afectado esta vez.

1
.container-4 input#search{
2
  width: 300px;
3
  height: 50px;
4
  background: #2b303b;
5
  border: none;
6
  font-size: 10pt;
7
  float: left;
8
  color: #fff;
9
  padding-left: 15px;
10
  -webkit-border-radius: 5px;
11
  -moz-border-radius: 5px;
12
  border-radius: 5px;
13
}

El siguiente es el fragmento para darle un nuevo color a los placeholders.

1
.container-4 input#search::-webkit-input-placeholder {
2
   color: #65737e;
3
}
4
5
.container-4 input#search:-moz-placeholder { /* Firefox 18- */
6
   color: #65737e;  
7
}
8
9
.container-4 input#search::-moz-placeholder {  /* Firefox 19+ */
10
   color: #65737e;  
11
}
12
13
.container-4 input#search:-ms-input-placeholder {  
14
   color: #65737e;  
15
}

Abajo está el código para darle estilo al botón que aparece en hover. El truco para hacer que se deslice hacia adentro desde el lado, es ubicarlo detrás del input, y hacerlo invisible amenos de que esté en hover. El botón es el elemento que cambia - se mueve - por lo tanto es el único donde la transición está definida. Para hacer las cosas más simples, he definido la transición para impactar todas las propiedades.

1
.container-4 button.icon{
2
  -webkit-border-top-right-radius: 5px;
3
  -webkit-border-bottom-right-radius: 5px;
4
  -moz-border-radius-topright: 5px;
5
  -moz-border-radius-bottomright: 5px;
6
  border-top-right-radius: 5px;
7
  border-bottom-right-radius: 5px;
8
9
  border: none;
10
  background: #232833;
11
  height: 50px;
12
  width: 50px;
13
  color: #4f5b66;
14
  opacity: 0;
15
  font-size: 10pt;
16
17
  -webkit-transition: all .55s ease;
18
  -moz-transition: all .55s ease;
19
  -ms-transition: all .55s ease;
20
  -o-transition: all .55s ease;
21
  transition: all .55s ease;
22
}

Añadiendo los Efectos del Hover

Para aparecer gradualmente el botón, necesita ser movido encima del input. Esto se hace através de un margen negativo. Previamente hemos establecido la opacidad del botón en 0 así que tenemos que resetearlo a 1 para que el botón pueda ser visible también.

La última regla sólo cambia el fondo del botón si haces hover sobre el botón. Está bien dejarle saber al usuario que el botón está activo y que puede hacerle clic para enviar la búsqueda; no hay sentido en tener un botón que parezca inactivo.

1
.container-4:hover button.icon, .container-4:active button.icon, .container-4:focus button.icon{
2
    outline: none;
3
    opacity: 1;
4
    margin-left: -50px;
5
  }
6
7
  .container-4:hover button.icon:hover{
8
    background: white;
9
  }

Conclusión

¡Bien, esto nos trae al final de nuestros experimentos con CSS!  Tomamos un formulario de búsquedas básico y utilizamos un pequeña selección de efectos para cambiar su comportamiento. ¿Cómo más sugieres cambiar el formulario de búsqueda como estos? ¿A qué otros aspectos aplicarías transiciones o transformaciones de CSS? ¡Déjanos saberlo en los comentarios!

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.