Un proceso de desarrollo en WordPress usando Sass y Compass
() translation by (you can also view the original English article)
En este artículo, veremos cómo usar Sass y Compass en nuestro proceso de desarrollo de temas de WordPress. Estructuraremos nuestras hojas de estilo temáticas de manera SMACSS y aprovecharemos el poder de Compass para generar imágenes de imagen tanto para dispositivos de retina como de no retina.
Tenga en cuenta que este artículo no es una introducción a Sass; sin embargo, si usted es un principiante, siéntase libre de seguirlo.
Requerimientos
Antes de saltar, asegúrese de que tiene Sass y Compass instalados en su máquina. Si aún no los ha instalado, siga las instrucciones en:
Hay pocas aplicaciones Sass y Compass basadas en GUI, pero usaré el Terminal (si está en Windows, entonces puede usar el Símbolo del sistema). Siéntete libre de usar la herramienta con la que te sientas más cómodo.
Configuración del proyecto
Empecemos creando una carpeta para nuestro proyecto. Crea una nueva carpeta en tu escritorio y llámala tutsplus
. Dentro de ella se crean dos nuevas carpetas: sass
e imáges
. La carpeta sass
contendrá nuestros archivos Sass que formarán nuestra hoja de estilo del tema, el style.css
.
Abra la carpeta images
y cree dos nuevos directorios para nuestros iconos temáticos. Llama a los directorios icons
e icons@2x
. Más adelante, usaremos las imágenes de estas carpetas para crear sprites de imagen para nuestro tema. En este punto, la estructura de sus carpetas debe tener el siguiente aspecto:



Configuración de Compass
Usaremos Compass para watch
los cambios de archivos dentro de la carpeta sass
y, cuando ocurra un cambio, utilizará Sass para compilar nuestras hojas de estilo. Cada vez que iniciamos Compass, buscará un archivo de
configuración en el directorio actual. Ese archivo se llama
config.rb
.
Para crear el archivo de configuración, abra su terminal y navegue a la carpeta tutsplus
en su escritorio:
1 |
cd /Desktop/tutsplus/
|
Luego llame al comando compass config config.rb
. Este comando de relleno genera el archivo de configuración para usted. Abra el archivo en su editor de texto favorito y realice los siguientes cambios:
- Cambie de
css_dir = "stylesheets"
a:css_dir = "/"
. Esto le indicará a Compass que genere los archivos CSS generados dentro de nuestra carpeta de raíz de tema, ya que aquí es donde WordPress buscará nuestrostyle.css
del tema. - Establezca su estilo de salida preferido para el CSS generado. Aquí, lo estableceré en estilo expandido escribiendo en la línea 12
output_style = :expanded
.
- Descomente las líneas 14 y 17 eliminando el símbolo de hash anterior para que las siguientes líneas parezcan a
relative_assets = true
yline_comments = false
.
Guarda tus cambios. Ahora su archivo config.rb
debería verse como el siguiente:
1 |
# Require any additional compass plugins here.
|
2 |
|
3 |
# Set this to the root of your project when deployed:
|
4 |
http_path = "/" |
5 |
css_dir = "/" |
6 |
sass_dir = "sass" |
7 |
images_dir = "images" |
8 |
javascripts_dir = "javascripts" |
9 |
|
10 |
# You can select your preferred output style here (can be overridden via the command line):
|
11 |
# output_style = :expanded or :nested or :compact or :compressed
|
12 |
output_style = :expanded |
13 |
|
14 |
# To enable relative paths to assets via compass helper functions. Uncomment:
|
15 |
relative_assets = true |
16 |
|
17 |
# To disable debugging comments that display the original location of your selectors. Uncomment:
|
18 |
line_comments = false |
19 |
|
20 |
# If you prefer the indented syntax, you might want to regenerate this
|
21 |
# project again passing --syntax sass, or you can uncomment this:
|
22 |
# preferred_syntax = :sass
|
23 |
# and then run:
|
24 |
# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass
|
Esté atento a los cambios
¡Todo bien! Ahora que tenemos el archivo de configuración, es el momento de crear nuestro primer archivo Sass. Crea un nuevo archivo dentro de la carpeta sass
y llámalo style.scss
. A continuación, inicie su Terminal y navegue al directorio /Desktop/tutsplus/
.
Ejecutar el comando compass watch
. Este comando iniciará un proceso que buscará continuamente los cambios de archivos Sass dentro de nuestra carpeta sass
. Encontrará nuestro archivo style.scss
y generará su representación CSS como style.css
dentro de nuestro directorio tutsplus
.
Tenga en cuenta que todos los archivos dentro de nuestra carpeta sass
cuyos nombres no comienzan con guión bajo se procesarán y generarán en la carpeta tutsplus
. Esto es exactamente lo que queremos para el archivo style.scss
.
Una cosa importante a recordar: no haga cambios directos dentro de los archivos CSS generados, ya que sus cambios se perderán una vez que vuelva a compilar sus archivos Sass.
Descomponer
Vamos a separar nuestro style.scss
en pequeños componentes utilizando las guías de estilo definidas en SMACSS (Arquitectura escalable y modular para CSS). El autor de SMACSS es Jonathan Snook y ha publicado un libro sobre este tema que les invito a leer. Si eres miembro de Tuts+, puedes descargar una copia desde aquí.
SMACSS clasifica sus reglas de CSS en cinco grupos:
- Base
- Diseño
- Módulo
- Estado
- Tema
Vamos a crear una carpeta para cada una de esas categorías dentro de nuestra carpeta sass
. Utilice los siguientes nombres: base
, layouts
, modules
, states
y themes
.



Base
En su carpeta base
, coloque todas sus hojas de estilo que cumplan con las Reglas de estilo base de SMACSS. Esas hojas de estilo deben aplicar estilos solo en los selectores de elementos. Este es también un buen lugar para poner tu navegador para restablecer CSS.
Compass viene con reinicio del navegador basado en la hoja de estilo de reinicio de Eric Meyer. Para este proyecto, voy a utilizar normalize.css. Descargue el archivo normalize.css
y colóquelo dentro del directorio base
, luego cambie su nombre a _normalize.scss
. Asegúrese de cambiar su extensión de archivo de css
a scss
.
A continuación, debemos importar la hoja de estilo normalize
en nuestro style.scss
. Para hacer esto abre el style.scss
y agrega:
1 |
// Base |
2 |
@import "base/normalize"; |
Como puede ver, estamos omitiendo el guión bajo en el nombre del archivo y su extensión. El preprocesador Sass es lo suficientemente inteligente como para importar el archivo que queríamos.
Diseños
Aquí, coloque sus estilos de diseño de tema. Por ejemplo, esto incluirá su encabezado, barra lateral, pie de página y diseños de página como _header.scss
, _sidebar.scss
, _footer.scss
y _page.scss
.
Puede usar el prefijo l-
para sus nombres de clase de diseño:
1 |
// _header.scss |
2 |
.l-main-header { |
3 |
margin: 30px; |
4 |
padding: 20px; |
5 |
font-size: 16px; |
6 |
}
|
7 |
|
8 |
// _navigation.scss |
9 |
.l-main-nav { |
10 |
position: relative; |
11 |
}
|
Este es también un buen lugar para su hoja de estilo de cuadrícula. También puede leer más sobre las reglas de diseño de SMACSS.
Módulos
Los módulos son elementos de contenido reutilizables. Por ejemplo, una publicación de blog es un módulo en el que sus reglas se reutilizan en varias instancias del mismo módulo.
Los widgets, códigos cortos e íconos también son un tipo de módulo.Un módulo puede contener submódulos. Aquí hay un ejemplo de módulo widget y su submódulo de título:
1 |
<li class="widget"> |
2 |
<h4 class="widget__title">Recent Posts</h4> |
3 |
</li>
|
1 |
.widget { |
2 |
padding: 10px; |
3 |
}
|
4 |
|
5 |
.widget__title { |
6 |
font-size: 15px; |
7 |
}
|
Aquí estamos usando la convención de nomenclatura de clase BEM (modificador de elemento de bloque).
Estados
Coloque aquí sus hojas de estilo que controlan la apariencia de sus elementos dependiendo de algún estado. Si está creando un tema de respuesta, haga clic aquí en su hoja de estilos de consultas de medios.
Vamos a crear uno ahora mismo.
Cree un nuevo archivo en su editor de texto y guárdelo como _media_queries.scss
en la carpeta /sass/states/
. Pegue estas reglas comunes de tamaño de pantalla dentro del archivo:
1 |
/*! =Media Queries
|
2 |
-------------------------------------------------------------- */
|
3 |
|
4 |
/* 956-768px */
|
5 |
@media only screen and (min-width: 768px) and (max-width: 959px) { |
6 |
|
7 |
}
|
8 |
|
9 |
/* 767-480px */
|
10 |
@media only screen and (min-width: 480px) and (max-width: 767px) { |
11 |
|
12 |
}
|
13 |
|
14 |
/* 479px */
|
15 |
@media only screen and (max-width: 479px) { |
16 |
|
17 |
}
|
No olvide importar nuestra hoja de estilos recién creada en nuestro archivo style.scss
:
1 |
// Base |
2 |
@import "base/normalize"; |
3 |
|
4 |
// States |
5 |
@import "states/media_queries" |
Si tiene, por ejemplo, un menú de navegación fuera de la pantalla, aquí puede colocar los estilos que controlarán la apariencia cuando su navegación se abra o se cierre, .is-open
o .is-closed
, pero en la mayoría de los casos los colocará en el archivo de diseño o módulo. para la navegación off-canvas.
Temas
Este es un buen lugar para poner los estilos de sus complementos personalizados de WordPress. Por ejemplo, aquí puede colocar sus estilos personalizados para, por ejemplo, el complemento Contact Form 7.
Información del tema
El archivo style.css
de cada tema de WordPress debe contener metainformación sobre el tema, como el nombre del tema, el autor, la versión y más. Podemos aprovechar las variables de Sass para cambiar esa información para cada tema que creamos.
Primero cree un nuevo archivo llamado _vars.scss
y guárdelo dentro de la carpeta sass
. En este archivo pondremos todas nuestras variables. Si encuentra que este archivo crece demasiado, separe su contenido en archivos más pequeños.
Abra el archivo recién creado e ingrese las siguientes variables:
1 |
// Theme Information |
2 |
//--------------------------------------------// |
3 |
$theme_name: "My Theme"; |
4 |
$theme_uri: "#"; |
5 |
$theme_description: "My WordPress Theme"; |
6 |
$theme_version: "1.0"; |
7 |
$theme_author: "my name"; |
8 |
$theme_author_uri: "#"; |
9 |
$theme_license: "GPL"; |
10 |
$theme_tags: "responsive-layout, post-formats"; |
Ahora necesitamos crear un archivo que usará las variables anteriores. Con el editor de texto que elija, cree un nuevo archivo llamado _theme_info.scss
y guárdelo en la carpeta sass
. Llene el _theme_info.scss
con el siguiente contenido:
1 |
/*!
|
2 |
|
3 |
Theme Name: #{ $theme_name }
|
4 |
Theme URI: #{ $theme_uri }
|
5 |
Description: #{ $theme_description }
|
6 |
Version: #{ $theme_version }
|
7 |
Author: #{ $theme_author }
|
8 |
Author URI: #{ $theme_author_uri }
|
9 |
License: #{ $theme_license }
|
10 |
License URI: License.txt
|
11 |
Tags: #{ $theme_tags }
|
12 |
|
13 |
*/
|
El paso final es importar nuestros archivos recién creados dentro de style.scss
, también importemos los componentes de Compass:
1 |
@import "compass"; |
2 |
|
3 |
@import "vars"; |
4 |
@import "theme_info"; |
5 |
|
6 |
// Base |
7 |
@import "base/normalize"; |
8 |
|
9 |
// States |
10 |
@import "states/media_queries"; |
Ahora, si abre el archivo style.css
procesado, contendrá el bloque de comentarios de información del tema de WordPress con los valores de las variables que estableció en el archivo _vars.scss
.
Ayudantes
Es una buena práctica usar clases CSS más genéricas más pequeñas para diseñar un elemento en lugar de usar un selector demasiado específico. Sigue el principio DRY - No te repitas. Podemos crear una hoja de estilo para nuestras clases de pequeños ayudantes. Para darles un ejemplo, definiré algunos ayudantes de diseño y tipografía.
Cree un nuevo archivo llamado _helpers.scss
y guárdelo dentro de la carpeta sass
. Nuevamente, al igual que con el archivo de variables, si su archivo auxiliar es demasiado grande para mantener, considere dividirlo en archivos más pequeños.
Abre el archivo recién creado y pégalo en:
1 |
/*! =Helpers
|
2 |
-------------------------------------------------------------- */
|
3 |
|
4 |
// Layout |
5 |
//--------------------------------------------// |
6 |
.left { |
7 |
float: left; |
8 |
}
|
9 |
|
10 |
.right { |
11 |
float: right; |
12 |
}
|
13 |
|
14 |
.clear { |
15 |
clear: both; |
16 |
}
|
17 |
|
18 |
.hide { |
19 |
display: none; |
20 |
}
|
21 |
|
22 |
.hidden { |
23 |
opacity: 0; |
24 |
visibility: hidden; |
25 |
}
|
26 |
|
27 |
.clearfix { |
28 |
|
29 |
&:before,
|
30 |
&:after { |
31 |
content: " "; |
32 |
display: table; |
33 |
}
|
34 |
|
35 |
&:after { |
36 |
clear: both; |
37 |
}
|
38 |
}
|
39 |
|
40 |
.center-block { |
41 |
display: block; |
42 |
margin: 0 auto; |
43 |
}
|
44 |
|
45 |
// Typography |
46 |
//--------------------------------------------// |
47 |
.f-normal { |
48 |
font-weight: normal; |
49 |
}
|
50 |
|
51 |
.f-bold { |
52 |
font-weight: bold; |
53 |
}
|
54 |
|
55 |
.f-italic { |
56 |
font-style: italic; |
57 |
}
|
58 |
|
59 |
.t-strike { |
60 |
text-decoration: line-through; |
61 |
}
|
62 |
|
63 |
.t-overline { |
64 |
text-decoration: overline; |
65 |
}
|
66 |
|
67 |
.t-underline { |
68 |
text-decoration: underline; |
69 |
}
|
70 |
|
71 |
.t-left { |
72 |
text-align: left; |
73 |
}
|
74 |
|
75 |
.t-right { |
76 |
text-align: right; |
77 |
}
|
78 |
|
79 |
.t-center { |
80 |
text-align: center; |
81 |
}
|
Como puede ver aquí, estamos usando el prefijo f-
para las clases relacionadas con la fuente y t-
para las clases relacionadas con el texto. Guarda tu archivo e impórtalo dentro de style.scss
:
1 |
@import "compass"; |
2 |
|
3 |
@import "vars"; |
4 |
@import "theme_info"; |
5 |
|
6 |
// Base |
7 |
@import "base/normalize"; |
8 |
|
9 |
// Helpers |
10 |
@import "helpers"; |
11 |
|
12 |
// States |
13 |
@import "states/media_queries"; |
Generando Sprites
Compass viene con métodos prácticos para generar sprites de imagen. Colocaremos nuestros íconos dentro de nuestras carpetas icons
e icons@2x
, donde estos últimos contendrán los mismos íconos pero en el doble del tamaño
para dispositivos con pantalla retina.
Para este ejemplo, pondré dentro de dos archivos de iconos: checkmark.png
y star.png
que puedes encontrar en el paquete de descarga asociado con esta publicación.



Para cada ícono generaremos una clase de CSS por separado utilizando una lista Sass con todos los nombres de archivo de íconos. Abra el archivo _vars.scss
y agregue el siguiente código:
1 |
// Icons |
2 |
//--------------------------------------------// |
3 |
// map *.png icon files |
4 |
$icons_sprite: sprite-map( "icons/*.png" ); |
5 |
$icons_sprite2x: sprite-map( "icons@2x/*.png" ); |
6 |
|
7 |
// generate the icons sprites |
8 |
$sprites_file: sprite-url( $icons_sprite ); |
9 |
$sprites2x_file: sprties-url( $icons_sprite2x ); |
10 |
|
11 |
$sprites_url: url( "images/" + sprite-path( $icons_sprite ) ); |
12 |
$sprites2x_url: url( "images/" + sprite-path( $icons_sprite2x ) ); |
13 |
|
14 |
// list with theme icons file names (found in icons and icons@2x folders) |
15 |
$theme_icons: ( "checkmark", "star" ); |
Compass encontrará todos los archivos de imagen *.png
dentro de nuestras carpetas de iconos y generará dos sprites de imagen en la carpeta images
. Ahora queremos generar clases de CSS para esas imágenes.
Para encontrar la posición del icono dentro de la imagen del sprite, crearemos dos mixins de ayuda. Para hacerlo, cree un nuevo archivo y llámelo _mixins.scss
, luego ábralo y péguelo en el siguiente código:
1 |
// Icons |
2 |
//--------------------------------------------// |
3 |
@mixin sprite_icon( $name, $sprite ) { |
4 |
|
5 |
@include sprite-dimensions( $sprite, $name ); |
6 |
background-position: sprite-position( $sprite, $name ); |
7 |
} |
8 |
|
9 |
@mixin retina_sprite_icon( $name, $sprite ) { |
10 |
|
11 |
$pos: sprite-position( $sprite, $name ); |
12 |
background-position: nth( $pos, 1 ) nth( $pos, 2 ) / 2; |
13 |
@include background-size( ceil( image-width( sprite-path( $sprite ) ) / 2 ) auto ); |
14 |
} |
Ambas combinaciones están aceptando un nombre de icono más un mapa de sprites como argumentos. Esos mixins establecerán el ancho, la altura y la posición de fondo para el icono dentro del sprite de imagen generado. El retina_sprite_icon
también establecerá el tamaño de fondo adecuado para los iconos de retina.
Ahora es el momento de generar nuestras clases de iconos. Cree un nuevo archivo llamado _icons.scss
y guárdelo dentro de la carpeta /sass/modules/
. A continuación, pegue dentro del siguiente contenido:
1 |
/*! =Icons
|
2 |
-------------------------------------------------------------- */
|
3 |
@if ( length( $theme_icons ) > 0 ) { |
4 |
|
5 |
.icon { |
6 |
display: inline-block; |
7 |
background: $sprites_url no-repeat; |
8 |
}
|
9 |
|
10 |
@each $icon in $theme_icons { |
11 |
|
12 |
.#{ "icon--" + $icon } { |
13 |
|
14 |
@include sprite_icon( $icon, $icons_sprite ); |
15 |
}
|
16 |
}
|
17 |
|
18 |
@media
|
19 |
only screen and (-webkit-min-device-pixel-ratio: 2), |
20 |
only screen and ( min--moz-device-pixel-ratio: 2), |
21 |
only screen and ( -o-min-device-pixel-ratio: 2/1), |
22 |
only screen and ( min-device-pixel-ratio: 2), |
23 |
only screen and ( min-resolution: 192dpi), |
24 |
only screen and ( min-resolution: 2dppx) { |
25 |
|
26 |
.icon { |
27 |
background: $sprites2x_url; |
28 |
}
|
29 |
|
30 |
@each $icon in $theme_icons { |
31 |
|
32 |
.#{ "icon--" + $icon } { |
33 |
|
34 |
@include retina_sprite_icon( $icon, $icons_sprite2x ); |
35 |
}
|
36 |
}
|
37 |
}
|
38 |
|
39 |
}
|
Aquí, repasamos nuestra lista de nombres de íconos que se identifica con $theme_icons
y generamos reglas de estilo retina y no retina usando nuestros íconos mixin. A partir de ahí, generamos una clase llamada .icon
que será el módulo base para nuestros íconos y luego las clases de modificadores de módulo para cada ícono en la lista.
En este ejemplo, generará las clases .icon--checkmark
y .icon--star
. Aquí hay un ejemplo de uso del icono de estrella:
1 |
<i class="icon icon--star"></i> |
Finalmente, importemos nuestro módulo de mixins e íconos dentro del archivo style.scss
:
1 |
@import "compass"; |
2 |
|
3 |
@import "vars"; |
4 |
@import "mixins"; |
5 |
@import "theme_info"; |
6 |
|
7 |
// Base |
8 |
@import "base/normalize"; |
9 |
|
10 |
// Helpers |
11 |
@import "helpers"; |
12 |
|
13 |
// Modules |
14 |
@import "modules/icons"; |
15 |
|
16 |
// States |
17 |
@import "states/media_queries"; |
Conclusión
Sass y Compass son dos potentes utilidades y pueden contribuir en gran medida a mejorar el desarrollo de su tema de WordPress y el desarrollo del complemento de WordPress. Esta guía apunta a ponerlo en camino para crear un proceso más refinado para trabajar con WordPress.
Para aquellos que tengan curiosidad y quieran leer más sobre parte de la información cubierta en este tutorial, revise los siguientes artículos: