Cómo crear un campo de texto con botón de borrar integrado

El titulo parece confuso pero el tema es bastante sencillo, es acerca de cómo crear un campo de texto con un botón incluido para borrar el campo, como el que usan las aplicaciones nativas de iPhone o Google, te muestro una imagen para que se entienda mejor:

Google y su campo de texto con botón para limpiar

En este tutorial voy a explicar cómo conseguir el efecto en webkit, específicamente para iPhone/iPod Touch, aunque con algunos cambios se puede llevar a muchos otros navegadores.

Para empezar

Crear el campo es bastante sencillo, básicamente es el HTML de toda la vida, el efecto se logra con CSS y un poco de Javascript. Para hacerlo solo necesitas un editor de texto o HTML y un navegador que utilice webkit, de preferencia Safari.

El resultado final es un “campo de texto” como este

Campo de texto con botón de borrado

Escribo “campo de texto” entre comillas porque en realidad son tres elementos, una etiqueta (label), un campo de texto (input text) y un boton (input button).

Campo de texto sin estilo

Integrar los 3 elementos y conseguir un super campo de texto

HTML

Como ya lo dije mencione antes, el efecto esta en CSS, aunque vamos a empezar con el HTML:

<label for="txtNombre" class="ts-txtReset ts-label">Nombre:</label>
<input id="txtNombre" class="ts-txtReset ts-txt"type="text" />
<input id="btnNombre" class="ts-txtReset ts-btn" type="button" value="txtNombre" />

Si te puedes dar cuenta no hay nada extraordinario, quizás solo el nombre de las clases y el valor del botón que es el mismo que id del campo de texto, de momento no nos sirve y lo veremos más adelante, en el código javascript.

Las clases no tienen nada especial, excepto que todas comienzan con ts-, esto es porque el ejemplo es parte de un framework en el que estoy trabajando, Touchscript, y nada más que eso.

Estilo CSS

Ahora vamos con el estilo del campo de texto. La idea es engañar al ojo haciendolo creer que es un solo campo de texto, cuando en realidad son tres.

Etiqueta (ts-txtReset ts-label)

Cree el estilo la etiqueta con bordes redondeados, excepto del lado derecho que es donde se une con el campo de texto, también especifique el padding y el tamaño de letra, ambos para ajustarlo al campo de texto (con el padding por defecto no encajan y la fuente varia). Además cambie el color de la fuente a gris (#555) para resaltar la diferencia.

.ts-txtReset.ts-label{
 border:solid 1px #aaa;
 border-width:1px 0 1px 1px;
 padding:2px 0px 3px 4px;
 background:#fff;
 color:#555;
 margin:0;
 font-size:1em;
 /* WEBKIT */
 -webkit-appearance: none;
 -webkit-border-top-left-radius:4px;
 -webkit-border-bottom-left-radius:4px;
}

Campo de texto (ts-txtReset ts-txt)

Con el campo de texto es prácticamente lo mismo, añadir bordes excepto de los lados para ajustar a la etiqueta y el botón. Además añadí una regla exclusiva de webkit y que pudieron ver arriba, es -webkit-appearance: none;. Esta sirve para eliminar la sombra que Safari añade al campo de texto, de no quitar la sombra se perdería el efecto porque la etiqueta y el botón no tienen esa sombra y se nota “el salto”. También puedes ver que quite los bordes redondeados con -webkit-border-radius:0;

.ts-txtReset.ts-txt{
 border:solid 1px #aaa;
 border-width:1px 0 1px;
 padding:3px 2px 2px 0;
 font-size:1em;
 background:#fff;
 margin:0;
 /* WEBKIT */
 -webkit-appearance: none;
 -webkit-border-radius:0;
}

Botón (ts-txtReset ts-btn)

Casi para cerrar los estilos añade el del botón, de nuevo la misma que los anteriores pero con dos cambios notables. El primero es la imagen de fondo y el segundo es que no muestra texto (aunque si tiene value).

El fondo lo incluyo con background y con bastante padding lateral(10px) para hacer el botón más grande.

El texto se oculta con text-indent:-500em (lo envía muy lejos ;) ) y por si acaso agrego overflow:hidden (para ocultar lo que este muy lejos).

.ts-txtReset.ts-btn{
 border:solid 1px #aaa;
 border-width:1px 1px 1px 0;
 padding:2px 7px 3px;
 font-size:1em;
 margin:0;
 background:#fff url(icono-reset.png) no-repeat center center;
 text-indent:-500em;
 overflow:hidden;
 /* WEBKIT */
 -webkit-appearance: none;
 -webkit-border-radius:0;
 -webkit-border-top-right-radius:4px;
 -webkit-border-bottom-right-radius:4px;
}

Termino el estilo agregando un estilo “base” al body:

body{font-family:helvetica, arial, sans-serif;}

Hasta aquí conseguiste el efecto visual del cuadro de texto, ahora hay que agregar la funcionalidad con javascript,

Hacer que el botón de borrar borre

La funcionalidad del botón de borrar igual es sencilla y se logra con javascript.

Lo primero es crear la función de borrar, o limpiar como le digo yo.

// TouchScript txtReset Limpia
function tsTxtResetLimpia(ev){
 txtVictima=document.getElementById(ev["target"].value);
 if(txtVictima){
  txtVictima.value="";
  txtVictima.focus();
 }
}

El parámetro ev es un objeto de evento, el “lanzador” del evento lo envía automáticamente, y de él lo único que importa es el campo target, que es lo mismo que el botón que disparo el evento (en nuestro ejemplo btnNombre). Del botón (target) tomamos el campo value que contiene el id del campo de texto que debe borrar (esa era la idea de usar el id del campo de texto en el value del botón). Luego compruebo si ese id existe, si existe borro el contenido y lanzo la función focus para el campo de texto.

La función de limpiar esta lista, ahora hay que asignársela al botón (btnNombre) usando addEventListener y el evento click.

// Inicializa las acciones al cargar la pagina
addEventListener('load',function(){
 // Asigna el evento click al boton btnNombre
 document.getElementById('btnNombre').addEventListener('click',tsTxtResetLimpia,false);
},false);

Safari en PC muestra una diferencia en el padding respecto a la de Safari mobile (iPhone/iPod) y para que se vea bien en ambos agregue un “mini hack”.

//Mini hack para corregir padding superior en Safari para PC
if(navigator.platform!="iPhone"&amp;&amp;navigator.platform!="iPod"){
 document.write('&lt;style&gt;.ts-txtReset.ts-label{padding-top:3px;}&lt;/style&gt;');
}

Listo, con eso tienes un campo de texto con etiqueta y botón de borrar integrados. El código completo del ejemplo lo puedes ver en txtreset.txt, te recomiendo revisarlo para no olvidar cosas como la etiqueta meta viewport.

Ejemplo final

Notas

  • El ejemplo es una muestra de lo simple que es mejorar un control para formulario y mejorar la usabilidad de una página web.
  • Por la misma razón que solo es un ejemplo, aún se puede mejorar en muchos sentidos. Especialmente hacerlo con código no intrusivo, para no interferir si javascript esta desactivado, y poderlo hacer compatible con más navegadores además de Safari, o webkit en general.
  • Más adelante incluiré este campo de texto en Touchscript para que sea más fácil usarlo.

Material

Vamos a enlazar el mundo

Si vamos a enlazar el mundo,
el móvil será nuestro mouse.

frase vista en una muy buena presentación de John Pettengill acerca de la web móvil llamada An Internet Watered Down or, hot to save the mobile web. Si estas diseñando para la web móvil, o piensas hacerlo, debes ver esta presentación.

Tips de desarrollo de widgets para móviles

Mobile Widgets por Dan Taylor (CC)

Mobile Widgets por Dan Taylor (CC)

Hoy en el blog de Betavine, Mobile Web Widgets, encontré una lista de consejos al desarrollar widgets para móviles. Me gusta la lista, especialmente porque aplica en el desarrollo web móvil.

Los dejo con una traducción un poco libre de Technical tips for mobile widget development:

  • Automaticamente selecciona el campo principal cuando sea posible, es más fácil que usar el joystick del teléfono para llegar a él.
  • Los efectos al colocarte encima de un elemento (Hover) son importantes para la usabilidad. Haz evidentes los botones porque a veces es difici llegar a ellos.
  • Asegurate que el móvil tenga la fuente que tu usas y especialmente que se vea bien. las fuentes cursivas pueden no verse bien.
  • No redimensiones imágenes usando HTML, los teléfonos lo hacen mal y se ve mal.
  • Asegurate de tener un buen icono que se vea genial en el “Administrador de Widgets”.
  • Usa CSS Sprites porque es más fácil migrar tu widget a la web..
  • No hay un manejador de evento keypress, tenlo presente si planeas crear un juego.
  • Recuerda, el teléfono es rápido, pero no tan rápido como tu computadora. Tampoco la conexión a Internet, optimiza lo más que puedas.

Como pueden ver, no son consejos fuera de este mundo, son consejos muy básicos pero siempre debemos tener en cuenta al desarrollar para la web móvil, o los widgets para móviles.

Cambiar el user agent en Safari

En Firefox para cambiar el user agent usamos User Agent Switcher, pero en Safari es diferente porque la opción ya esta integrada sin necesidad de ninguna extensión. Además tenemos la ventaja de que Safari Mobile, el navegador del iPhone y iTouch, usa el mismo motor que Safari, así que la experiencia es prácticamente la misma.

La forma de cambiar el User Agent en Safari es distinta, básicamente porque Safari ya incluye una lista de user agents configurados que hace más fácil todo, aunque por otro lado es más limitado porque solo permite tener un user agent personalizado, y no muchos como User Agent Switcher.

Para cambiar el user agent en Safari primero tienes que activar el menú de desarrollo:

  1. Edición –> Preferencias…

Menú de edición de Safari

  1. Ve a la pestaña Avanzado –> Activa la opciónMostrar el menú de Desarrollo en la barra de menús

Editor de preferencias de Safari

Listo, ya tienes el menú de desarrollo con la lista de User agent que puedes usar, incluyendo el user agent del iPhone y iPod Touch

User agents en Safari

Para agregar un user agent extra usa la opción “Otra…” al final del menú

Usar otro user agent en Safari

y luego escribe el user agent que deseas usar

Cambiar el user agent de Safari

Recuerda que Safari solo te deja utilizar un user agent personalizado a la vez, así que elige sabiamente cual vas a usar o usa Firefox ;-)

En el tema anterior, acerca de User Agent Switcher, encuentras una lista de user agents de móviles.

Disfraza Firefox de móvil con User Agent Switcher

En el artículo anterior comentaba acerca de Web Developer Toolbar como ayuda para desarrollar webs para móviles, en este artículo vamos a ver User Agent Switcher, también para Firefox, que es muy útil cuando trabajamos con móviles.

User Agent Switcher sirve, como su nombre lo dice, para cambiar el User Agent del navegador, en este caso Firefox, por el que nosotros queramos. El User Agent es un texto que usan los navegadores para identificarse con los servidores en Internet y en donde comparten características y alguna otra información útil. Por ejemplo, el User Agent del iPhone se ve así:

Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F136 Safari/525.20

¿Para qué sirve User Agent Switcher en el desarrollo para móviles?
La mayoría de métodos para detectar cuando móvil ingresa a un sitio web se basan en el user agent, por eso es bastante útil disfrazar a Firefox de móvil cambiándole el User Agent. Puedes navegar por cualquier sitio como si de un móvil se tratará.

Cómo cambiar el User Agent con User Agent Switcher

  1. Lo primero es instalar User Agent Switcher (UAS) y reiniciar Firefox.
  2. Luego debes agregar un User Agent usando el botón UAS ->  Options –> Options…

    Opciones de User Agent Switcher

  3. Selecciona el área de User Agents y luego el botón Add

    Agregar User Agent a User Agent Switcher

  4. Ingresa la información del User Agent de la siguiente forma, no es necesario llenar todos los datos, aunque si tienes la información es bueno hacerlo. A continuación el ejemplo con el User Agent del iPhone

    user-agent-switcher-options-add-user-agent

Lista de User Agent de móviles

Abajo te dejo una lista de los user agents usados por móviles, intente incluir uno por cada marca o navegador importante, aunque la lista podría ser “interminable”.

  • Android:
    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Google Wireless Transcoder;)
  • iPhone:
    Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; en-us) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F136 Safari/525.20
  • iPod Touch 2.0:
    Mozilla/5.0 (iPod; U; CPU iPhone OS 2_0 like Mac OS X; de-de) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5A347 Safari/525.20
  • Blackberry 8830:
    BlackBerry8330/4.3.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 VendorID/105
  • Opera Mini 4.1:
    Opera/9.60 (J2ME/MIDP; Opera Mini/4.1.11320/608; U; en) Presto/2.2.0
  • Sony Ericsson K550i (NetFront browser):
    SonyEricssonW850i/R1ED Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1
  • Sony Ericsson K700i (NetFront browser):
    SonyEricssonK700i/R2N SEMC-Browser/4.0.1 Profile/MIDP-2.0 Configuration/CLDC-1.1
  • HTC TyTN Windows Mobile 6.1:
    Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)
  • LG Voyager:
    Mozilla/4.1 (compatible; MSIE 6.0; ) 400×240 LGE VX10000
  • Motorola Razor V3:
    MOT-V3r/08.BD.43R MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1
  • Nokia N95:
    Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN95/10.0.018; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413
  • Samsung SGH-E900:
    samsung sgh-e900 /netfront 3.2

Encuentras una lista mucho más completa de user agents en la página web de Zytrax: Mobile Browser ID (User-Agent) Strings.

Importar user agents en User Agent Switcher

Agregar la lista anterior de user agents puede ser algo tedioso, menos mal tenemos la opción de importar la lista, para hacerlo sigue estos pasos:

  • Descarga el archivo con los user agents de user-agents-moviles.xml (3.07kb, Click y guardar como…)
  • Entra a las opciones UAS y selecciona la opción de importar. Si activas la opción Overwrite existing user agents when importing los user agents que tengas se reemplazaran por los del archivo:user-agent-switcher-options-import
  • Buscas el archivo que descargaste y lo cargas. Listo, con eso tendrás la lista de user agents actualizada.

Usar User Agent Switcher te evita estar probando páginas de tu móvil porque “engaña” a los servidores de Internet haciéndolos creer que los visitas desde un móvil, también si usas diferentes versiones (o si usas algún plugin como MobilePress) te permite probar cómo verían tus visitantes el sitio web, saber si están viendo la versión correcta.

Si tienes dudas y sugerencias son bienvenidas en los comentarios.

Desarrollar para móviles con ayuda de Web Developer Toolbar

En Firefox existe una extensión, Web Developer, bastante famosa entre desarrolladores por ser muy completa. En resumen, Web Developer Toolbar agrega una barra de herramientas más a Firefox con recursos para desarrolladores, como mostrar los estilos CSS e incluso modificarlos, desactivar Javascript, cambiar el tamaño de la ventana, revisar información de formularios y muchas características más que sirven en el desarrollo web.

Por defecto no incluye ninguna ayuda para desarrollar para móviles pero si la opción de agregar herramientas, de esta forma podemos configurarla para trabajar webs para móviles, y es justo lo que voy a explicar en este artículo.

Agrega validadores para web móvil

Los validadores nos ayudan a “certificar” la calidad del código en base a una serie de lineamientos, que si los cumplimos podremos obtener mejores resultados mientras que trabajamos con buenas practicas. Existen dos validadores famosos para web móvil, el primero (y “oficial”) es el W3C MobileOk Checker, y el segundo, un test para evaluar buenas practicas, es el de ready.mobi.

  1. Para agregar un validador a Web Developer Toolbar debes ir a Tools –> Edit Tools…

    webdeveloper-toolbar-edit-tools

  2. Presiona el botón Add y te mostrará una ventana para que ingreses datos

    webdeveloper-toolbar-edit-tools-add

  3. Agrega el validador del W3C de esta forma:

    Description: W3C MobileOK Checker (o cómo quieras llamarle)
    Keyboard Shortcut: (agrega una letra para usarla como atajo si quieres)
    Tool Type: Selecciona URL.
    URL: http://validator.w3.org/mobile/?checkasync=true&view=cat&docAddr=

    webdeveloper-toolbar-w3c-mobile-checker

  4. Repite los dos pasos anteriores para agregar el validador de Ready.mobi, solo que ahora con esta información:

    Description: Ready.mobi
    Tool Type: Selecciona URL.
    URL: http://ready.mobi/results.jsp?uri=

    webdeveloper-toolbar-ready-mobi

Personaliza las resoluciones de pantalla

Web Developer Toolbar incluye la opción de modificar las dimensiones del navegador solo seleccionando una opción del menú. En el caso de los móviles es muy útil para darnos una idea aproximada del resultado final, en la imagen se puede ver Firefox en una ventana de 320×480 (HVGA) simulando la resolución del iPhone:

Firefox simulando la resolución del iPhone

  1. Para agregar una nueva resolución de pantalla usa Resize –> Edit Resize Dimensions…

    Resize - Edit Resize Dimensions

  2. Presiona el botón Add… y agrega la resolución que quieres usar:
    Description: (Cómo quieras llamarla)
    Width: Ancho en pixeles
    Height: Alto en pixeles
    Resize the viewport: Activado. Se usa para que las medidas se apliquen directamente al área de la página y no a toda la ventana, evita que las barras de herramientas y demás arruinen el efecto de simular las dimensiones.

    Ventana para crear nuevas dimensiones

Resoluciones de pantalla más populares en móviles

Abajo te dejo una lista de las resoluciones de pantalla más populares en móviles:

  • 128×128 px. Una de las resoluciones más pequeñas y ahora anticuada.
  • 176×220 px. Popular en modelos de Sony Ericsson y algunos Nokia
  • 240×320 px. o QVGA. Popular en PDAs con Windows Mobile, Nokia N96 y otros similares.
  • 320 x 480 px. o HVGA. Anteriormente esta resolución era extraña, ahora con la llegada del iPhone se volvió muy popular, también la usa el iPod Touch, HTC Dream y el nuevo Palm Pre.
  • 640 x 320 px. Usada en el Nokia N97
  • 640 x 480 px. HTC Touch Diamond usa esta resolución, igual que el HTC Touch Pro o el HTC Advantage.
  • 800 x 480 px. Usada por el Nokia N810.

Desactivar Javascript o cargar CSS Handheld

Los validadores y modificar el tamaño de la ventana son dos herramientas útiles para desarrollar para la web móvil, pero en general Web Developer toolbar es una herramienta bastante completa que incluye muchas más opciones para desarrollo web, por ejemplo puede desactivar Javascript (ver imagen) o cargar la hoja de estilos CSS Handheld, aunque es poco usada por los navegadores en móviles. Puedes leer el artículo Return of the Mobile Style Sheet que trata más acerca del tema de las hojas de estilo en móviles.

Desactivar javascript usando web developer toolbar

Eso es todo por ahora con Web Developer Toolbar, más adelante escribiré sobre cómo simular una visita desde el móvil usando User Agent Switcher. Dudas y sugerencias son completamente bienvenidas :)

Prefieren los móviles

Accessing the Web from a mobile device is not something users do because they have to, it is something they do because they want to

Que en una traducción un tanto libre dice:

Accesar a la web desde un dispositivo móvil no es algo que los usuarios hagan porque pueden, es algo que hacen porque quieren

yahoo - portadaUna frase escrita por el MWI Team blog basada en IBM Study Finds Consumers Prefer a Mobile Device Over the PC, un estudio de IBM realizado el pasado octubre en Estados Unidos, China y el Reino Unido. El estudio mostró que al menos el 50% de las personas, de las 600 que participaron, han sustituido la computadora por un dispositivo móvil. Algo impresionante y que en mi caso es totalmente cierto. Además se espera que en el 2013 la cifra aumente de 50% a 80%, aunque personalmente no apostaría por eso.

Siguiendo con los resultados del estudio, muestran que uno de los mayores usos, además de comunicación, es el consumo de información a través de la web móvil, y que gracias a esto se espera que aumente el número de personas que prefieren los móviles. Los usuarios esperan usar más el internet desde el móvil para el 2011, además de tener más contenido disponible, incluyendo redes sociales y mensajería instantánea.

Recomendaciones para desarrolladores

También dentro del documento hacen algunas recomendaciones para la gente que trabaja con móviles acerca de cómo actuar frente esta adopción. Abajo los dejo tres de los cinco puntos que conciernen a la web móvil:

  • Definir una estrategia respecto al Internet móvil para entender el comportamiento de los consumidores y poder identificar la estrategia que mejor aproveche los puntos fuertes.
  • Transformar el modelo de negocios para integrarlo la estrategia respecto al internet móvil, esto incluye áreas de investigación y desarrollo, mercadeo y ventas (marketing and sales) o servicios de entrega (service delivery).
  • Apoyar la adopción de estándares libre y open source para hacer crecer y nutrir el ecosistema(móvil).