#Wakkos CSS Framework - Grunt Edition
Añadido Grunt al FrameWork de Wakkos para el pre-procesado automático mientras se trabaja.
Añadida sección JavaScript basada en el artículo JavaScript orientado a eventos/ de Enrique Fdez. Guerra.
##¿Qué necesitas?
Grunt requiere Node.js >= 0.8.0 y su gestor de paquetes npm.
Una vez clonado el repositorio, y habiendo instalado las dependencias, ejecutamos en el directorio raíz:
npm install
Esto instalará todas las dependencias descritas en el fichero package.json
.
##¿Qué puede realizar Grunt por nosotros?
Dentro de Gruntfile.js tenemos las diferentes tareas configuradas. Dichas tareas las podemos ejecutar por separado o invocar a otra tarea configurada con registerTask
que no es más que una lista de tareas a realizar.
###codekit
Nos permite utilizar la sintaxis del programa CodeKit para modularizar usando ficheros HTML sin necesidad de ningún lenguaje por la parte de servidor (véase: PHP, ASP, Java...).
###sass
Compila nuestros ficheros scss
a css
. Está separada en dos entornos:
- dev: el entorno de desarrollo. En este entorno se añade información adicional para depuración.
- prod: el entorno de producción.
###cssmin
Minimiza nuestro código CSS resultante para que ocupe menos y así ser más liviano.
###concat
Concatena los ficheros que queramos; en este caso, JavaScript. Solo se ha configurado el entorno de producción dado que en ambos casos nos interesa tener solo un fichero por comodidad de inclusión en el proyecto. Se generará el fichero js/scripts.js
que luego será utilizado por uglify
para minimizar y ofuscar el código.
###uglify
El encargado de minimizar y ofuscar el JavaScript
del proyecto. El fichero fuente será el generado por concat
y lo guardará como js/scripts.min.js
.
###favicons
Utiliza el fichero fuente src/images/logo.jpg
para generar todos los favicons necesarios para el proyecto. En caso de querer utilizar un logo .png
, u otro formato, se debería modificar en el fichero Gruntfile.js
.
###imagemin
Optimiza las imágenes de nuestro directorio img
para que así ocupen lo mínimo posible y nuestro proyecto sea más ligero.
###watch
Es de lo más útil que se ha inventado en tiempo. Según la configuración que hay acutalmente, está a la espera de cambios en los ficheros sass
,javascript
y CodeKit
para realizar ciertas acciones.
css
: está pendiente de cambios en los ficherosscss
. En caso de detectar algún cambio, ejecuta la compilación y recarga el navegador ( Chrome ) automáticamente; si la extensión está activa.js
: concatena, minimiza y ofusca los ficherosJavaScript
del proyecto. También recarga el navegador.codekit
: de varios ficheros HTML nos genera uno.
###concurrent
Nos permite ejecutar varias tareas en paralelo para aprovechar las posibilidades multihilo y así acelerar el proceso. El único requisito a tener en cuenta es que no podemos ejecutar tareas dependientes entre ellas en la misma concurrencia. Por ejemplo, no podemos ejecutar la compilación de SASS y el minimizado de CSS dado que este último debe esperar a que el código SASS esté compilado.
1.dev
. Ejecutamos la compilación de CSS y la concatenación de JavaScript.
2.prepare
. Prepara los ficheros para la posterior minimización y optimización.
3.optimize
. Optimiza y minimiza CSS, JavaScript e imágenes.
###default
Se trata de la acción por defecto. Dicha acción se ejecutará si lanzamos grunt
sin argumentos y ejecutará las siguientes tareas:
1.sass:dev
2.concat:prod
###build
Se trata de la acción previa a lanzar a producción. Para ello hemos de ejecutar grunt build
y ejecutará las siguientes tareas:
1.concurrent:prepare
2.concurrent:optimize
Que ya han sido explicadas anteriormente.
Todas las tareas mencionadas pueden ejecutarse de forma individual: grunt tarea
.
##Entorno de desarrollo
Una vez clonado el repositorio e instaladas las dependencias, arrancamos en una consola:
grunt watch
: inspeccionará los cambios en los ficheros y actuará en consecuencia. La consola nos mostrará los errores en tiempo de compilación.
Configura primeramente el archivo scss/style.scss
con los archivos que quieres incluir.
Si no quieres incluir el archivo _fuentes.scss porque no los vas a usar o cualquiero otro
archivo por cualqueir otra razón, comenta esa línea para que no compile CSS de más y
optimizar en peso.
Pasa a configurar las variables y diferentes opciones de la atmósfera de diseño,
nos vamos a variables.scss
donde podremos configurar colores, fuentes, tamaños,
etc...
Los breakpoints los he colocado en EM en vez de pixels para que el diseño no se vea afectado por acciones como el ZOOM. Para más info leer a Chris Coyer y a Lyza Gardner con argumentos al respecto.
$bp1 : 30em; // 480px
$bp2 : 37.5em; // 600px
$bp3 : 48em; // 768px
$bp4 : 56.25em; // 900px
$bp5 : 68.75em; // 1100px
La convención de nombre sigue este patrón:
.bloque{}
.bloque__elemento{}
.bloque--modificador{}
- '.bloque' representa el primer nivel de una abstracción o componente.
- '.bloque__element' representa un descendente de '.bloque' que se ayuda de '.bloque' como un conjunto.
- '.bloque--modificador' representa un estado diferente de '.bloque'.
Una analogía del funcionamiento de las clases BEM sería:
.persona{}
.persona--mujer{}
.persona__mano{}
.persona__mano--izquierda{}
.persona__mano--derecha{}
Para más info podéis leer mi traducción de la guía de CSS de Harry Roberts a la cual me he ajustado en su mayoría para crear este framework.
También tenemos espacio entre secciones para que sea fácil de ubicar al ver el
archivo compilado style.css
.
Los archivos de SCSS están todos dentro de la carpeta scss
y distribuidos
de la siguiente manera:
--scss
_contenido.scss
debug.scss
lt-ie9.scss
style.scss
--componentes
_botones.scss
_elementos.scss
_formularios.scss
_fuentes.scss
_links.scss
_navegacion.scss
_normalize
_paginacion.scss
_reset.scss
_tablas.scss
_texturas.scss
_tipografia.scss
--layout
_2x.scss
_breakpoints.scss
_sitio.scss
--lib
_mixins.scss
_placeholders.scss
_variables.scss
El archivo contenido.scss
se compila al principio del style.css
para dar una
guía de donde tenemos nuestros elementos y su nombre, gracias a los comentarios
BEM na búsqueda cmd/ctrl + f
en SublimeText que empiece por $NOMBREDESECCION
nos ayudará mucho a encontrar el contenido.
A su vez están todas las secciones separadas unas de las otras para ubicar rápidamente cuando echamos un vistazo.
El archivo _debug.scss
viene comentado, pero lo puedes incluir para tener una
pequeña guía de la semántica de tu documento html.
El archivo lt-ie9.scss
incluye un fallback para todo lo que incluimos en los
mediaqueries con la clase .ie8-sucks
. Si os da corte con vuestro cliente,
podéis cambiar la clase en el archivo _variables.scss
.
Iré adaptándolo a Codekit pero sin que afecte a los que no lo usan. De momento si
usas Codekit, incluyo el archivo config.codekit
y todos los .scss
son compilados
en la carpeta css
.
Siempre necesito una guía de estilos o de patrones para hacerme una idea de la
atmósfera de diseño de la web. Para esto tengo la carpeta patrones
donde tengo
el index.html
que me da un pequeño resumen de los elementos de la web y se ajusta
a la configuración de nuestro CSS.
Me gustaría poner código en cada elemento para así hacer que sea funcional no solo al diseñador sino al frontend, pero ese trabajo va a tener que esperar.
Modulariza todo lo que puedas, el archivo style.scss
es para meter archivos. Crea módulos, divide tu CSS en tantos archivos como puedas;
el CSS del header en header.scss
, content-home.scss
, footer.scss
, etc...