Creación de una aplicación Web impulsada por APIs con HTML y CSS
Spanish (Español) translation by Elías Nicolás (you can also view the original English article)



Después de haber diseñado algunos simulacros visuales para ayudar a guiarnos en la construcción de nuestra pequeña aplicación para el navegador, ¡vamos a llegar a la parte emocionante y empezar a crear!
Estructura de archivos
Vamos a configurar nuestra estructura de archivos para el proyecto. Se verá algo como esto (con cada activo respectivo viviendo en su carpeta correspondiente):
1 |
. |
2 |
├── index.html |
3 |
└── assets |
4 |
├── css |
5 |
├── img |
6 |
├── js |
7 |
└── sketch |
Ahora
tenemos una carpeta para cada uno de nuestros activos, así como el
archivo .sketch
que creamos anteriormente, el cual contiene nuestros
mocks de página.
HTML inicial
Basado en nuestra estructura de archivos, vamos a configurar nuestro documento HTML básico con enlaces a nuestros activos (que vamos a crear en un momento).
1 |
<!doctype html>
|
2 |
<html lang="en-US"> |
3 |
<head>
|
4 |
<meta charset="utf-8"> |
5 |
<title>Gimmie Dat iCon</title> |
6 |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
7 |
<link href="https://fonts.googleapis.com/css?family=Pacifico" rel="stylesheet" type="text/css"> |
8 |
<link rel="stylesheet" href="assets/css/styles.css"> |
9 |
</head>
|
10 |
<body>
|
11 |
<header></header>
|
12 |
<main></main>
|
13 |
<footer></footer>
|
14 |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> |
15 |
<script src="assets/js/main.js"></script> |
16 |
</body>
|
17 |
</html>
|
Esto es lo que tenemos hasta ahora:
- Estructura de página HTML básica con encabezado, contenido principal y áreas de pie de página.
- Enlace a nuestro CSS personalizado (que vamos a crear)
- Enlace a Pacifico en Google Fonts (como se mencionó anteriormente, esta es la fuente que usaremos para mostrar el nombre de nuestra pequeña aplicación)
- Enlaces a nuestro javascript personalizado (que vamos a crear), así como la biblioteca jQuery en Google Hosted Libraries CDN
CSS inicial
Debido a que esta pequeña aplicación es relativamente pequeña y simple, voy a favor de usar CSS de vainilla en este proyecto (no preprocesador), pero obviamente puede escribir su CSS en la forma que desee.
Comencemos configurando algunos estilos de página básicos y haciendo referencias de comentarios a los colores que usaremos. En assets/css/styles.css
vamos a hacer lo siguiente:
1 |
/*
|
2 |
General Styles
|
3 |
|
4 |
Colors
|
5 |
@highlight: #196E76
|
6 |
@text: #4A4A4A;
|
7 |
@text-light: #9A9A9A
|
8 |
@body-background: #EEEEEE;
|
9 |
*/
|
10 |
|
11 |
*,
|
12 |
*:before, |
13 |
*:after { |
14 |
box-sizing: inherit; |
15 |
margin: 0; |
16 |
padding: 0; |
17 |
}
|
18 |
|
19 |
html { |
20 |
box-sizing: border-box; |
21 |
background: #EEEEEE; |
22 |
text-align: center; |
23 |
}
|
24 |
|
25 |
body { |
26 |
font-size: 1em; |
27 |
line-height: 1.5; |
28 |
font-family: Lucida Grande, sans-serif; |
29 |
max-width: 43.75em; /* 880/16 */ |
30 |
margin: 0 auto; |
31 |
padding: 0; |
32 |
color: #4A4A4A; |
33 |
}
|
34 |
|
35 |
img { |
36 |
max-width: 100%; |
37 |
height: auto; |
38 |
}
|
39 |
|
40 |
a { |
41 |
color: inherit; |
42 |
}
|
Aquí
hemos configurado algunos estilos básicos de páginas que rigen las
imágenes, los enlaces y el modelo de cuadro que usaremos. Como usted puede haber notado, estamos usando la etiqueta body
como envoltura fijando su max-width
. Esto mantendrá todo nuestro contenido centrado en el centro de la página sin extenderse más allá de un cierto ancho.
Observe que también definimos los valores de color que usaremos en los comentarios superiores. Puesto que no estamos utilizando un preprocesador que nos permita establecer variables, éstas resultarán útiles a medida que continuamos escribiendo nuestros estilos.
Encabezado de la aplicación
Vamos a crear el encabezado de nuestra aplicación. Recuerde, en Sketch hemos diseñado esto:



Por lo tanto, vamos a crear el HTML para que coincida con nuestro simulacro. Vamos a poner este contenido en el elemento header
que creamos anteriormente.
1 |
<header>
|
2 |
<h1><a href="./">Gimmie Dat iCon</a></h1> |
3 |
<p>Retrieve full-sized icon artwork for iOS & Mac apps.</p> |
4 |
</header>
|
Ahora tenemos el nombre y la descripción de nuestra aplicación en la parte superior de la página. Pero los estilos son bastante básicos.



Vamos a escribir algunos estilos para nuestro encabezado de página que va más en consonancia con nuestro simulacro:
1 |
/*
|
2 |
Header Styles
|
3 |
*/
|
4 |
header { |
5 |
margin: 1em 0 2em; |
6 |
color: #196E76; |
7 |
}
|
8 |
|
9 |
header h1 { |
10 |
font-family: 'Pacifico', serif; |
11 |
font-size: 3em; |
12 |
text-shadow: 0 4px 2px rgba(0, 0, 0, .1); |
13 |
margin: 0; |
14 |
}
|
15 |
|
16 |
header h1 a { |
17 |
text-decoration: none; |
18 |
}
|
19 |
|
20 |
header p { |
21 |
margin-top: -.625em; |
22 |
text-indent: 7.75em; /* indent slightly */ |
23 |
text-shadow: 0 1px 0px rgba(0, 0, 0, .15); |
24 |
font-size: .875em; /* 14/16 */ |
25 |
}
|
He aquí un breve resumen de lo que hicimos:
- Color y espaciamiento para el contenedor de encabezado
- Elnombre de la aplicación
header h1
está configurado para utilizar la fuente Pacifico de Google (recuerde, establecemos un enlace a este recurso en nuestro encabezado) - La descripción de la aplicación
header p
está ligeramente compensado para evitar que se ejecute en el descensor del "G" en el nombre de la aplicación.
Ahora tenemos nuestra cabecera que se parece más al diseño:



Sin embargo, !recuerde que nuestra aplicación va a ser adaptable! Así
que si verificamos estos estilos en un ancho más estrecho usando las
herramientas de desarrollo de Chrome, notarás que el ajuste de texto
para la descripción es un poco funky debido a nuestro text-indent
.



Para
aliviar esto, con anchos más estrechos, eliminaremos la sangría de
texto y golpearemos el texto de descripción hacia abajo con un margin-top
para que la envoltura se vea más natural. Escribamos una consulta de medios para ayudarnos a:
1 |
@media screen and (max-width: 600px) { |
2 |
header p { |
3 |
text-indent: 0; |
4 |
margin-top: .5em; |
5 |
}
|
6 |
}
|
¡Allí, ahora tenemos un encabezado adaptable!



Entrada de la aplicación
La siguiente etapa es pasar a las áreas de entrada y salida de nuestro simulacro. Recuerde que se parecía a algo así:



Primero, vamos a agregar el campo de entrada al elemento HTML main
que creamos anteriormente:
1 |
<main>
|
2 |
<!-- input -->
|
3 |
<form class="submit"> |
4 |
<input type="url" placeholder="iTunes Link..."> |
5 |
<button type="submit">Gimmie</button> |
6 |
</form>
|
7 |
<!-- ./input -->
|
8 |
</main>
|
Ahora tenemos un formulario con una entrada y un botón de envío. Buena semántica hasta el momento, pero no está muy mirando cómo lo queremos. Necesitaremos agregar algunos estilos.



Añadamos algunos estilos a nuestros elementos de entrada y de botón de formulario.
1 |
/*
|
2 |
Form Input
|
3 |
Styles for the form input and button
|
4 |
*/
|
5 |
form { |
6 |
position: relative; |
7 |
}
|
8 |
|
9 |
form input{ |
10 |
width: 100%; |
11 |
display: block; |
12 |
font-size: 1em; |
13 |
padding: .625em .85em; |
14 |
padding-right: 7em; |
15 |
line-height: 1.5; |
16 |
margin: 0; |
17 |
border: 1px solid #bbb; |
18 |
box-shadow: 0 1px 3px rgba(0, 0, 0, .1) inset, |
19 |
0 2px 4px rgba(0, 0, 0, .1); |
20 |
border-radius: 3px; |
21 |
}
|
22 |
|
23 |
form input:focus { |
24 |
border-color: #298cda; |
25 |
}
|
26 |
|
27 |
form button { |
28 |
text-decoration: none; |
29 |
background: #196E76; |
30 |
height: 100%; |
31 |
position: absolute; |
32 |
right: 0; |
33 |
top: 0; |
34 |
line-height: 1.5; |
35 |
color: white; |
36 |
font-size: 1em; |
37 |
border-radius: 0 3px 3px 0; |
38 |
border: 0; |
39 |
outline: 0; |
40 |
text-align: center; |
41 |
-webkit-appearance: none; |
42 |
margin: 0; |
43 |
padding: 0 1em; |
44 |
font-family: 'Pacifico', serif; |
45 |
}
|
46 |
form button:hover { |
47 |
cursor: pointer; |
48 |
}
|
49 |
|
50 |
form button:disabled { |
51 |
opacity: .5; |
52 |
}
|
Aquí
hemos añadido algunos estilos a nuestro formulario de entrada y el
botón, así como algunos estados diferentes como :hover
, :focus
, y :disabled
. Esto nos ha dado un estilo de entrada tal y como lo diseñamos en nuestro simulacro.



Salida de la aplicación
En este punto podemos crear lo que hemos llamado el área de "salida". Aquí es donde renderizaremos dinámicamente el icono devuelto por la API de iTunes. Sin embargo, en la carga inicial de la página, el usuario aún no ha solicitado nada. Así que vamos a utilizar nuestro diseño de estado cero por ahora. Recuerda de nuestros simulacros, se ven así:



Seguiremos agregando al elemento HTML main
en el que hemos estado trabajando:
1 |
<main>
|
2 |
<!-- input -->
|
3 |
<form class="submit"> |
4 |
<input type="url" placeholder="iTunes Link..."> |
5 |
<button type="submit">Gimmie</button> |
6 |
</form>
|
7 |
<!-- ./input -->
|
8 |
<!-- output -->
|
9 |
<div class="wrapper"> |
10 |
<div class="content"> |
11 |
<p><strong>Enter a valid iTunes app store link, i.e.</strong> <a href="https://itunes.apple.com/us/app/twitter/id333903271?mt=8">https://itunes.apple.com/us/app/twitter/id333903271?mt=8</a></p> |
12 |
<img src="assets/img/icon-placeholder.svg" alt="Icon placeholder" /> |
13 |
</div>
|
14 |
</div>
|
15 |
<!-- ./output -->
|
16 |
</main>
|
Tenga en cuenta que hemos añadido la salida HTML justo después de nuestro HTML de entrada. Se
compone de un envoltorio, que actúa como el gran cuadro blanco en
nuestro diseño, y el contenido, que se centra dentro de eso. Utilizaremos
CSS para establecer el elemento .content
para que tenga un max-width
de 512 píxeles, ya que es el tamaño más grande en el que mostraremos
nuestro icono. Por ahora sin embargo, tenemos algo que se parece a esto:



Tenga en cuenta que nuestro marcador de posición del icono está ausente. Si volvemos a nuestro documento de Sketch, podemos mostrar fácilmente ese recurso como SVG para su uso en el navegador.



Ahora deberíamos tener la imagen apareciendo en el navegador.



Vamos a añadir algunos estilos a nuestro cuadro de salida.
1 |
/*
|
2 |
Content Styles
|
3 |
Main container for content, i.e. the icons, error messages, etc
|
4 |
*/
|
5 |
.wrapper { |
6 |
background: #fff; |
7 |
border: 1px solid #ccc; |
8 |
text-align: center; |
9 |
padding: 2em; |
10 |
margin: .5em 0 2em; |
11 |
box-shadow: 0 2px 4px rgba(0, 0, 0, .1); |
12 |
border-radius: 3px; |
13 |
position: relative; |
14 |
}
|
15 |
|
16 |
.content { |
17 |
max-width: 512px; |
18 |
margin: 0 auto; |
19 |
position: relative; |
20 |
word-wrap: break-word; /* for long urls */ |
21 |
}
|
22 |
|
23 |
.content * { /* do a simple reset on elements in .content */ |
24 |
margin: 0; |
25 |
padding: 0; |
26 |
}
|
27 |
|
28 |
.content strong { |
29 |
font-weight: bold; |
30 |
display: block; |
31 |
}
|
La mayoría de los CSS que hemos agregado aquí tiene comentarios en el código para explicarlo. Añadimos estilos a nuestro envoltorio externo, entonces, porque no hicimos un restablecimiento completo de CSS en la página, realizamos un restablecimiento simple en elementos HTML dentro de nuestro área de contenido aplicando .content *
Por último, hemos añadido un estilo para elementos en negrita en nuestro estado cero. ¡Ahora deberíamos tener algo parecido a nuestro simulacro!



¡Gran trabajo!
Ahora que tenemos nuestra estructura HTML toda la configuración, junto con los estilos correspondientes, estamos listos para saltar y manejar las interacciones de la página con JavaScript!
En el siguiente (y final) tutorial de esta serie, averiguaremos cómo tomar la entrada del usuario, hacer una solicitud de API y mostrar la salida en el navegador. ¡Te veo allí!