Ver Mensaje Individual
  #3 (permalink)  
Antiguo 30/01/2011, 09:26
Avatar de stingofung
stingofung
 
Fecha de Ingreso: enero-2011
Ubicación: Mcbo
Mensajes: 52
Antigüedad: 13 años, 3 meses
Puntos: 1
Respuesta: ¿Cómo modificar el estilo de un recuadro de búsqueda?

Saludos "craigchek",

Las técnicas usadas para crear esos efectos en las cajas de busquedas se logran usando CSS + JAVASCRIPT.

Entre los efectos usados tenemos:

* Auto-foco al cargar la página.
* Resaltado de la caja cuando recibe el foco.
* Mostrado / ocultado del texto por defecto.


Suponte que la estructura de tu documento HTML es la siguiente:

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es-ES">
  3.     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  4.     <title>Mejorando las cajas de búsqueda</title>
  5.     <link rel="stylesheet" href="main.css" type="text/css" media="screen" />
  6. </head>
  7.     <div class="wrapper">
  8.         <div class="section">
  9.             <h1>Ejemplo con auto-foco al cargar la página + resaltado</h1>
  10.             <input id="search1" type="text" class="text" value="Buscar en la web..." />
  11.         </div>
  12.         <div class="section">
  13.             <h1>Ejemplo de resaltado + ocultado / mostrado texto por defecto</h1>
  14.             <input id="search2" type="text" class="text" value="Buscar en la web..." />
  15.         </div>
  16.     </div>
  17.     <script type="text/javascript" src="jquery.js"></script>
  18.     <script type="text/javascript" src="main.js"></script>
  19. </body>
  20. </html>

Entonces los pasos a seguir son los siguientes:

Paso 1: Añadir estilo con CSS

Utilizo lo que se conoce como CSS Reset, que no es más que una declaración inicial de todos (o casi todos) los atributos HTML al inicio del documento CSS que “tiende a cero o nulo”.

Código CSS:
Ver original
  1. @CHARSET "UTF-8";
  2.  
  3. /*  RESET */
  4. html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em,
  5. font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody,
  6.  tfoot, thead, tr, th, td {
  7. border:0pt none;
  8. font-family:inherit;
  9. font-size:100&#37;;
  10. font-style:inherit;
  11. font-weight:inherit;
  12. margin:0pt;
  13. padding:0pt;
  14. vertical-align:baseline;
  15. }
  16. body{
  17.     line-height: 1em;
  18.     font-size: 12px;
  19.     background: #262626 url(img/bg.png) repeat scroll 0 0;
  20.     font-family: Myriad Pro, Arial, Helvetica, sans-serif;
  21.     margin: 0pt;
  22.     cursor: default;
  23. }
  24. table{
  25.     border-collapse: separate;
  26.     border-spacing: 0pt;
  27. }
  28. strong{
  29.     font-weight: 700;
  30. }
  31. caption, th, td{
  32.     font-weight:normal;
  33.     text-align:left;
  34. }
  35. blockquote:before, blockquote:after, q:before, q:after{
  36.     content:"";
  37. }
  38. blockquote, q{
  39.     quotes:"" "";
  40. }
  41. pre{
  42.     font-family: Arial, Helvetica, sans-serif;
  43. }
  44. input{
  45.     border: 0;
  46.     margin: 0;
  47.     font-family: Arial, Helvetica, sans-serif;
  48. }
  49. textarea{
  50.     font-family: Arial, Helvetica, sans-serif;
  51.     color: #888888;
  52.     padding: 7px 3px 0 4px;
  53.     font-size: 11px;
  54. }
  55. select{
  56.     font-size: 11px;
  57.     color: #888888;
  58.     background: #fff;
  59.     font-family: Arial, Helvetica, sans-serif;
  60.     border: 1px solid #CAD2CE;
  61. }
  62. ul{
  63.     list-style: none;
  64.     list-style-type: none;
  65.     list-style-position: outside;
  66. }
  67. a{
  68.     cursor: pointer;
  69.     color: #296ba5;
  70.     text-decoration: none;
  71.     outline: none !Important;
  72. }
  73. html,body{
  74.     height:100%;
  75. }
  76. .clear{
  77.     clear: both;
  78.     height: 0;
  79.     visibility: hidden;
  80.     display: block;
  81.     line-height: 0;
  82. }
  83. .clearfix{
  84.     overflow: hidden;
  85. }
  86. .fleft{
  87.     float: left;
  88. }
  89. .fright{
  90.     float: right;
  91. }
  92. .italic{
  93.     font-style: italic;
  94. }
  95. /*  RESET */
  96.  
  97. /* CONTENT */
  98. .wrapper
  99. {
  100.     width: 800px;
  101.     margin: 0pt auto;
  102.     padding-top: 50px;
  103. }
  104. h1{
  105.     color: #fff;
  106.     font-size: 18px;
  107.     line-height: 3em;
  108. }
  109. .section{
  110.     margin-bottom: 25px;
  111. }
  112. input.text{
  113.     width: 90%;
  114.     background: #171717 url(img/search.png) no-repeat scroll right 2px;
  115.     padding: 13px;
  116.     color: #8c8c8c;
  117.     border: 1px solid #393939;
  118.     margin-bottom: 30px;
  119.     border-radius: 5px;
  120.     -moz-border-radius: 5px;
  121.     -webkit-border-radius: 5px;
  122.     -khtml-border-radius: 5px;
  123.     font-size: 16px;
  124. }
  125. input.text.active{
  126.     background: #343434 url(img/search.png) no-repeat scroll right -43px;
  127.     border-color: #000;
  128.     color: #fff;
  129. }

Paso 2: Añadir magia con jQuery

Todo el código que viene a continuación iría en un único documento javascript, en mi ejemplo se llama “main.js“.

a) Declaración de variables

Código Javascript:
Ver original
  1. //variables globales
  2. var searchBoxes = $(".text");
  3. var searchBox1 = $("#search1");
  4. var searchBox2 = $("#search2");
  5. var defaultText = "Search MDN";

b) Gestionando los eventos focus y blur

Código Javascript:
Ver original
  1. //efectos en el evento focus (foto) para ambas cajas de busqueda
  2. searchBoxes.focus(function(){
  3.     $(this).addClass("active");
  4. });
  5. searchBoxes.blur(function(){
  6.     $(this).removeClass("active");
  7. });

c) Activando el autofoco
Mediante la llamada de la función focus() haremos un autofoco en la primera de las cajas de búsqueda, simulando el mismo efecto que hace Google cuando entramos en su buscador.

Código Javascript:
Ver original
  1. //Activamos y auto activamos el foco en la primera caja de busqueda #search1, cuando el documento esta listo
  2. searchBox1.focus();

d) Mostrando / Ocultando el texto por defecto
Aqui lo que se hace es que si el usuario pincha en la caja de busqueda esta reciba el foco y se vaya el texto por defecto y que si salimos de la caja, vuelva a aparecer. Cabe destacar que esto sólo ocurrirá si el texto es el original, el texto por defecto, no para textos distintos introducidos por nosotros.

Código Javascript:
Ver original
  1. //Mostramos / ocultamos el texto por defecto si es necesario
  2. searchBox2.focus(function(){
  3.     if($(this).attr("value") == defaultText) $(this).attr("value", "");
  4. });
  5. searchBox2.blur(function(){
  6.     if($(this).attr("value") == "") $(this).attr("value", defaultText);
  7. });


Ya tienes todo listo para emular el efecto que viste en la página MDN, espero y te sea de ayuda.