Mostrando entradas con la etiqueta CSS. Mostrar todas las entradas
Mostrando entradas con la etiqueta CSS. Mostrar todas las entradas

martes, 28 de mayo de 2013

Learn Experiment: Usando los estilos de FirefoxOS

Este artículo comienza una serie basada en la migración de una aplicación real de Android (Hiragana Learn Experiment) a FirefoxOS. Pretendo con ello ver la programación necesaria para crear una aplicación real, paso a paso. Vamos a empezar en esta ocasión con la creación del menú principal, y junto con este introduciremos el uso de los estilos propios de FirefoxOS. A continuación dejo algunos enlaces útiles:
Respecto a la aplicación, es un conjunto de ejercicios para aprender Hiragana (el silabario japonés). En esta ocasión desarrollaremos tan solo el menú principal,  que no es más que una lista con los tres tipos de ejercicios: "Escoger el hiragana correcto", "Escribir en romaji" y "Escribir el hiragana". Por hoy nos limitaremos a mostrar estas opciones, pero además daremos a la app el estilo de FirefoxOS. Empecemos por ver el contenido del <body>, dado que el resto de la página es casi idéntico a lo que vimos en anteriores ocasiones:

<body role="application">
   <section  role="region" id="list-view">
      <header>
         <h1>Hiragana</h1>
      </header>
   
      <article id="appList" data-type="list">
         <ul>
            <li><a href="#"><p>Escoger el hiragana</p></a></li>
            <li><a href="#"><p>Escribir en romaji</p></a></li>
            <li><a href="#"><p>Escribir el hiragana</p></a></li>
         </ul>
      </article>
    </section>
</body>

Esta estructura es importante conservarla tal cual por que al usar estilos predefinidos, estos solo se aplicarán sobre una estructura con el siguiente formato:
  • El bloque <section> que divide el contenido en secciones, compuestas por un <header> y un <article>
  • El bloque <header>, en donde hemos situado el título <h1>, pero donde podría haber también botones y herramientas.
  • El <article> que contiene el contenido de la página/sección.
  • La lista <ul> que contiene tres elementos <li> los cuales consisten en un enlace <a> (que actualmente no enlazan a nada) y dentro de los cuales se incluye un párrafo <p> con el título de la opción.
Veamos ahora la hoja de estilos (css) necesaria para dar a este contenido el aspecto adecuado:

@import url(firefoxos/responsive.css);
@import url(firefoxos/headers.css);
@import url(firefoxos/lists.css);

html, body{
 margin:0;
 font-family:sans-serif;
 font-size:10px;
}

Como podéis ver los estilos son muy sencillos de nuevo, pero esto es por que estamos haciendo uso de otras hojas de estilo definidas por otros programadores. Por ello en la nuestra tan solo usamos:

  • La instrucción "@import url(....);", que nos permite cargar otras hojas de estilo. En este caso usamos las hojas de estilo ya definidas por FirefoxOS, ahorrándonos casi todo el trabajo
  • Una definición de estilos con el selector "html, body", en donde la coma simplemente indica que el estilo se aplica tanto al elemento <html> como al <body>
  • Lo primero que hacemos es aplicar un margen nulo, para que no quede un espacio en blanco con el borde de la página, que es lo que sucedería por defecto.
  • Por último indicamos un tamaño de fuente a toda la página de 10 píxeles, e indicamos que se use un tipo de letra "sans-serif", que son los tipos de letra que carecen de remates en los extremos y pueden ser más fáciles de leer en ciertas pantallas.
El resultado lo podemos ver a continuación. Como podréis entender, tanto la cabecera naranja, como el fondo azul que se "ilumina" al pulsar una opción son el resultado de usar las hojas de estilo de FirefoxOS con la estructura apropiada:


En conclusión

En este artículo hemos visto como aplicar los estilos por defecto de FirefoxOS. Con ello no solo nos ahorramos trabajo sino que logramos un diseño más consistente con las demás aplicaciones del teléfono. Poco a poco iremos viendo nuevos elementos del interfaz y como utilizarlos. En el próximo artículo empezaremos a desarrollar la navegación dentro de la aplicación, incluyendo la generación dinámica de contenidos de los menús.

miércoles, 15 de mayo de 2013

Diseñando aplicaciones I: Interfaces con HTML

Un interfaz es la parte de una aplicación que el usuario "ve", y con la que se comunica. En las aplicaciones de FirefoxOS (como en las aplicaciones web) este interfaz está definido mediante HTML, usándose generalmente un archivo HTML para cada pantalla de la aplicación.

Pero HTML fue originalmente un lenguaje para escribir documentos en la web, y creo necesario señalar las diferencias que implica el usarlo para desarrollar aplicaciones. Este artículo por tanto se ajustará a un nivel básico de conocimientos, así que disculpad si algunas de las cosas que comento ya las conocéis.

Si habéis aprendido HTML para hacer páginas web seguro que conoceréis muchas etiquetas (<p>, <ol>, <strong>, <em>, <h1>,...). La buena noticia para los que no las conozcan es que para programar aplicaciones casi nos basta con usar una sola: el bloque <div>. Mientras que las otras etiquetas tienen un aspecto y comportamiento predefinido, esta otra está pensada para adoptar cualquiera que necesitemos:


Como se muestra en la imagen anterior, todo interfaz lo podemos dividir en un conjunto de bloques identificables, los cuales adoptarán su aspecto y comportamiento final usando respectivamente CSS y javascript. Respecto al aspecto podemos usar distintas letras, márgenes, fondos, colores, bordes,... Respecto al comportamiento podemos cambiar el texto de un bloque, hacer que realice cálculos al pulsarlo, que muestre el progreso mediante una barra que se alarga o acorta,...

Pero para poder hacer todo eso necesitamos una manera de identificar dichos bloques y es aquí donde entran los atributos más importantes de HTML: "id" y "class". El primero identifica un bloque de manera única, mientras que el segundo admite una lista de palabras que puede compartir con otros bloques:

<div id="boton_continuar" class="boton destacado">
</div>

En el ejemplo anterior el bloque podría ser identificado por ser un bloque <div>, por su identificador "boton_actual" o por sus clases "boton" o "destacado". Por ejemplo, en CSS:

div{
   margin:1em;
}

.boton{
   border-radius:3em;
}

#boton_continuar{
   background:green;
}

Este código haría que el bloque anterior tuviese un margen por ser un div, tuviese las esquinas redondeadas por tener la clase "boton", y el fondo verde por ser el "boton_continuar". Fijaos que mientras la etiqueta se pone tal cual, la clase se identifica poniendo un punto delante, y el identificador usando una almuhadilla (#).

Javascript no tiene una manera equivalente de identificar los bloques, pero se han creado librerías que permiten hacerlo. En concreto nosotros usaremos una llamada jQuery:

$('.boton').click(
   // Aquí iria una función que se ejecuta al pulsar
   // cualquier bloque con la clase "boton"
)

// La siguiente instrucción pone el texto "Continuar"
// En el botón identificado como "boton_continuar"
$('#boton_continuar').text('Continuar')

Como podéis observar jQuery utiliza una el símbolo del dolar ($), seguido de unos paréntesis entre los que se introduce el selector al que le queremos aplicar el efecto, ya sea asociarle un evento o modificarlo de manera dinámica. Hay formas más complejas de definir selectores, como seleccionar solo los bloques que estén dentro de otros dados, o solo los bloques pares o impares,... Lo importante por ahora es saber que podemos usar estos selectores tanto para definir el aspecto de los bloques con CSS, como para definir su comportamiento con jQuery.

Otras etiquetas HTML

Aunque con los bloques <div> tenemos casi toda la funcionalidad que necesitamos, quería mencionar algunas de las otras etiquetas que se suelen utilizar en aplicaciones HTML y la razón para usarlas:
  • Los bloques <span>: Son genéricos como los <div> pero pensados para ser usados dentro de párrafos de texto, aunque en realidad pueden 
  • Las imágenes <img>: Siguen siendo necesarias para mostrar imágenes dentro de la aplicación.
  • Las listas <ul>, <li>: Se suelen utilizar para definir menús o listados de elementos
  • Los enlaces <a>: Aunque se podrían programar con javascript, siguen siendo una manera rápida de enlazar con otros contenidos.
  • Los elementos de formulario <input> y <textarea>: Interesantes sobre todo a la hora de meter campos de edición de texto.