Preprocesadores CSS
Preprocesadores CSS
LESS Y SASS
1
Índice Preprocesadores de Lenguajes de Estilo
0. Introducción Preprocesadores..........................................................................................................4
1. El Preprocesador Less......................................................................................................................4
1.2. Instalación Less.........................................................................................................................4
1.3 Sintaxis Compilador Less..........................................................................................................5
1.4 Principales Características.........................................................................................................5
1.5 Variables.....................................................................................................................................6
1.6 Mixins........................................................................................................................................6
1.7 Anidando....................................................................................................................................8
1.8 Ámbito de las variables Less...................................................................................................10
1.9 Bubbling...................................................................................................................................11
1.10 Operadores.............................................................................................................................12
1.11 La excepción Calc()...............................................................................................................13
1.12 Bucles en Less.......................................................................................................................13
1.13 Abreviando reglas..................................................................................................................14
1.14 Funciones Less.......................................................................................................................14
1.15 Namespaces...........................................................................................................................15
1.16 Extends...................................................................................................................................16
1.17 Comentarios...........................................................................................................................17
1.18 Importar archivos...................................................................................................................17
2. Parte práctica – Creando un estilo para IES Celia Viñas................................................................17
2.1 Archivo [Link]..............................................................................................................18
2.2 Archivo [Link]..................................................................................................................19
2.3 Archivo [Link]..................................................................................................................20
2.4 Archivo [Link]...................................................................................................................21
2.5 Archivo HTML........................................................................................................................22
2.5.1 Cabecera...........................................................................................................................22
2.5.2 Área de navegación..........................................................................................................23
2.5.3 Sección Proyectos............................................................................................................25
2.5.5. Sección Actividades Extraescolares................................................................................27
2.5.6 Sección Pie de Página......................................................................................................28
0. Introducción a Sass.........................................................................................................................30
1. El preprocesador SASS..................................................................................................................30
1.1 Instalación Sass........................................................................................................................30
1.2 Variables...................................................................................................................................32
1.3 Operadores aritméticos............................................................................................................32
1.4 Anidando..................................................................................................................................33
1.5 Propiedades anidadas...............................................................................................................35
1.6 Reglas @ y directivas..............................................................................................................36
1.6.1 @import...........................................................................................................................36
1.6.2 Hojas de estilos parciales.................................................................................................36
1.6.3. @media...........................................................................................................................37
1.6.4. @extend..........................................................................................................................38
1.7 Directivas de control y expresiones.........................................................................................39
1.7.1 La directiva @if...............................................................................................................39
1.7.2 La directiva @for.............................................................................................................40
1.7.3 La directiva @each..........................................................................................................41
1.7.4 La directiva @while.........................................................................................................42
1.8 Mixins......................................................................................................................................42
2
2. Caso práctico – Página principal IES Celia Viñas.....................................................................44
2.1 Principales diferencias.............................................................................................................45
3
LESS
0. Introducción Preprocesadores.
Un preprocesador CSS es un lenguaje que permite generar código CSS a partir de su sintaxis única.
1. El Preprocesador Less
Less es el primero de los preprocesadores que vamos a estudiar. Less, cuyo significado es “Leaner
Style Sheets”, tiene como principal característica compilar y convertir el código implementado en
código CSS.
Less es de código abierto y está escrito en JavaScript. Su última versión estable es del 27 de febrero
de 2014 (según Wikipedia). En principio Less nos proporciona los siguientes mecanismos:
• variables
• anidamiento
• operadores
• mixins
• funciones
Instalaremos Less usando npm (el manejador de paquetes por defecto para [Link]). En el caso de
que no tengamos instalado el manejador de paquetes, podemos instalarlo usando el siguiente
comando:
sudo apt install npm
Una vez instalado ya podemos ejecutar:
npm install less -g
La opción -g instala el comando lessc para que esté disponible de forma global. En el caso de que
necesites otra versión puedes añadir @version después del nombre del paquete, es decir:
Ya podemos usar el comando lessc para compilar nuestros proyectos Less y generar los archivos css
para nuestros proyectos.
4
1.3 Sintaxis Compilador Less.
Por ejemplo:
lessc [Link] [Link]
5
Para ello, crearemos una web desde cero haciendo uso de esta tecnología, al igual que haremos con
Sass para ver las diferencias entre un preprocesador y otro.
Nuestra idea es generar un sistema de Grid, en el que dividiremos nuestra página en filas de 12
columnas. Todos los contenidos se ajustarán a un número de filas entre 1 y 12.
Necesitamos conocer al menos las siguientes tecnologías: HTML5, CSS3 y algo de JavaScript (o
jQuery). En archivos Less, mezclaremos lenguaje CSS con lenguaje Less. Una vez generados los
ficheros Less, se compilarán y se generará el archivo CSS correspondiente.
1.5 Variables.
Less nos permite definir, como si se tratase de un lenguaje de programación, variables para trabajar
con ellas. Para declarar una variable, hay que anteponer el símbolo “@” antes del nombre de la
variable seguido de “:”, el valor de la misma y finalizado en “;”:
@nombreVariable: valor;
Por ejemplo:
@altura: 15px;
@anchura: @altura+22px;
#capaPrincipal {
width: @altura;
height: @anchura;
}
#capaPrincipal {
width: 15px;
height: 37px;
}
1.6 Mixins.
Los Mixins son una de las características que hacen a estos prepocesadores tan potentes. Consiste
en la reutilización de código. Es decir, un Mixin contiene una serie de reglas que podemos reutilizar
dentro de cualquier otra serie de reglas. Por ejemplo
.bordes {
border-top: 1px dotted black;
border-bottom: 2px solid black;
}
6
Ahora la clase bordes podemos usarla dentro de cualquier otro conjunto de reglas, reutilizando así
estas reglas del mixin.
#menu a {
color: #111;
.bordes;
}
Ahora las propiedades de .bordes aparecerán dentro de #menu a además del color establecido.
A partir de la versión 3.5 podemos usar mixins y reglas con valores preestablecidos.
#colores() {
primario: blue;
secundario: green;
.boton {
color #colores[primario];
}
La salida generada en el fichero CSS sería:
.boton {
color: blue;
}
También es muy interesante hacer uso de parámetros. En el caso práctico que se propone de
ejemplo, se usa funciones con parámetros para calcular la anchura de cada una de las clases
columnas:
.columnas (@n){
width: 100/@n;
#primera {
.columnas(4);
background: #840;
}
El código CSS generado será:
7
#primera {
width: 25%;
background: #840;
1.7 Anidando.
Otra de las características más potentes es la anidación de estilos, lo cual permite ahorrar bastante
código. Veámoslo con un sencillo ejemplo:
#cabecera {
color: red;
}
#cabecera .navegacion {
font-size: 12px;
}
#cabecera .logotipo {
width: 300px;
}
En Less podemos generar este mismo código de una forma más sencilla:
#cabecera {
color:red;
.navegacion {
font-size: 12px;
}
.logotipo {
width: 300px;
}
}
Cómo se puede observar, el código resulta más claro, sencillo y corto con respecto a CSS puro.
Una característica importante que debemos tener en cuenta es el uso de pseudoclases, tales como
:hover, :focus, :first, :last, etc.
Para poder hacer uso de anidaciones y pseudoclases, usaremos el pseudoelemento &, el cuál hace
referencia al elemento padre de la anidación. Veamos un ejemplo:
tr {
border: 1px dotted black;
8
th {
font-weight: bolder;
text-align: center;
}
/* La siguiente regla hace referencia al evento de pasar el
ratón por encima de una fila. Es decir el elemento & hace
referencia al elemento tr */
&:hover{
background-color: orange;
}
&:first {
background-color: #333;
color: #eee;
}
}
Transformado a CSS:
tr {
border: 1px dotted black;
}
tr th {
font-weight: bolder;
text-align: center;
}
tr:hover {
background-color: orange;
}
tr:first {
background-color: #333;
color: #eee;
}
Otro uso habitual del pseudoelemento & es el de generar clases de forma repetitiva con
nomenclaturas parecidas. Por ejemplo:
.boton {
&-confirmar {
background-color: green;
}
&-cancelar {
background-color: red;
}
&-defecto {
9
background-color: blue;
}
}
.boton-confirmar {
background-color: green;
}
.boton-cancelar {
background-color: red;
}
.boton-defecto {
background-color: blue;
}
La anidación de elementos, permite definir el ámbito de las variables en la hoja de estilos. En Less
el ámbito de la variable puede variar cuando se anidan estructuras, y debemos tener especial
cuidado al usarlas. Podemos observar en el siguiente ejemplo, como varía el valor de la variable
@tamano:
@tamano: 1.5em;
#contenido {
.cabecera {
@tamano: 2em;
nav {
font-size: @tamano; //El valor total es 2em
}
}
.articulo {
font-size: @tamano + 0.2em; //El valor total es 1.7em
}
}
El ámbito en Less de variables y mixins es muy similar al ámbito en CSS. Es decir, las variables y
mixins en primer lugar se buscan de forma local, y si no se encuentran, se cogería siempre el del
elemento padre (inherit).
@var: red;
#pagina {
10
@var: white;
#cabecera {
}
En Less, el orden en el que se definen las propiedades no es importante, por lo que no es necesario,
en el caso de nuestro ejemplo, que la declaración de @var: white se encuentre antes de la
declaración de cabecera. El siguiente ejemplo obtiene el mismo resultado que el anterior:
@var: red;
#pagina {
#cabecera {
@var: white;
1.9 Bubbling.
Así como anidamos selectores, también podemos anidar reglas como @media y @supports. Este
tipo de reglas se colocarán al principio (como padre del selector en cuestión) cuando se transforme
en código CSS. Por esto hay que tener muy en cuenta el orden en el que colocamos las reglas. A
este tipo de reglas se les llama Bubbling. Por ejemplo:
.contenido {
width: 300px;
@media (min-width: 768px) {
width: 600px;
@media (min-resolution: 192dpi) {
background-image: url(img/[Link]);
}
}
11
.contenido {
width: 300px;
}
}
@media (min-width: 1280px) {
.contenido {
width: 800px;
}
}
1.10 Operadores.
//conversión imposible
@unidades-incompatibles: 2 + 5px – 3cm; //resultado es 4 px ya que
siempre coge la unidad de más
//a la izquierda
//uso de variables
@base: 5%;
@doble: @base * 2; //el resultado es 10
@otro: @base + @doble; //resultado es 15%
12
Less opera con números y les asigna una determinada unidad en el resultado. Además nos permite
hacer operaciones aritméticas sobre colores:
Esta función (que pertenece a las características de CSS3) no evalúa expresiones matemáticas, pero
evaluará variables y operaciones matemáticas en funciones anidadas.
En realidad, calc() nos va a ayudar a realizar cálculos con unidades de medida relativas (%, em, px,
…), pudiendo incluso mezclarlas.
Por ejemplo:
**Viewport → es el área visible que tiene el usuario sobre la página web. Este área varía con el
dispositivo, y puede ser desde un dispositivo móvil pequeño hasta la pantalla de un PC.
13
}
.grid(@i+1);
}
De esta forma se crearán tantos estilos como columnas definamos en la variable @columnas.
Además debemos pasar como parámetro el valor inicial, que en este caso puede ser 1. Por ejemplo,
si definimos @columnas=6 y hacemos la llamada .grid(1) se generarán los estilos: col-1,
col-2,…, col-6. Este nombre viene especificado en la regla:
...
.col-@{i}{
...
@minimo: ~”(min-width:768px)”;
.elementoClase {
@media @minimo {
font-size: 1.2em;
}
}
@media (min-width:768px){
.elementoClase {
font-size: 1.2em;
}
}
Hay que tener en cuenta, que la regla @media siempre se pondrá dentro del elemento al que se
aplicará este media query.
14
Por ejemplo, este código convierte un valor en porcentaje, satura el color de letra en un 5% y
establece un color de fondo aclarado en un 25% y girado en 8 grados.
@base: #f04615 //Color base para el fondo
@width: 0.5;
.clase {
1.15 Namespaces.
Algunas veces puedes necesitar agrupar tus mixins, ya sea por cuestiones de organización o
simplemente por ofrecer encapsulamiento en tu código. Less ofrece vías para realizar esto de una
forma clara y sencilla. Lo vemos con un ejemplo que quedará más claro:
#encapsula() {
.boton {
display: block;
background-color: grey;
&:hover {
background-color: white;
.tabulador {
.citas {
15
Si ahora quieres usar el míxin del .boton (es decir, sus estilos) en “#cabecera a”, se podría hacer lo
siguiente:
#cabecera a {
color:orange;
#[Link]();
1.16 Extends
Less permite la extensión o ampliación de tipos. Por ejemplo, imagina que tenemos la clase animal:
.animal {
background-color: black;
font-size: 1.5em;
color:red;
}
Ahora queremos especificar el subtipo de animal clase perro. Esta clase, tendrá como color de
fondo brown y además un efecto de subrayado. Haciendo uso de extends podríamos especificar el
siguiente código:
.perro {
&:extend(.animal);
background-color: brown;
text-decoration: underline;
}
16
1.17 Comentarios.
En Less se pueden crear dos tipos de comentarios:
• comentarios de una línea.
//Comentario de una línea
• Comentarios de varias líneas.
/* Comentario de
varias
líneas */
@import “[Link]”;
17
Crearemos un sistema de grid sencillo y parecido al usado por varios frameworks (como por
ejemplo el que usa Bootstrap). Para ello dividiremos la interfaz web en filas, y cada fila estará
dividida en 12 columnas, de tal forma que podemos usar y disponer de estas 12 columnas como
deseemos a la hora de crear contenido.
Usaremos las siguientes clases, las cuales aplicaremos a elementos div, article o section:
- .fila → Se usa para declarar una fila con 12 columnas.
- .col-n → Se usa para especificar el número de columnas (n) que usaremos en cada fila.
**Debemos usar 12 columnas exactamente, ni más ni menos, para que la interfaz sea correcta.
Por ejemplo:
col-6 col-6
.col-2 .col-5 .col-5
.col-1 .col-1 .col-4 .col-4 .col-2
A la hora de crear nuestros documentos Less, la idea es crear distintos archivos con distinto tipo de
contenido (variables, mixins,...) para luego importarlos en el archivo Less principal, que para
nosotros será [Link].
18
//Colores
@colorPrincipal: #042351;
@colorSecundario: #c70000;
@columnas: 12;
//Tipografía
@tipoLetra: 'Tahoma', 'Verdana', 'sans-serif';
@tamanoLetra: 0.8em;
@regular: 300;
@negrita: 700;
@claro: 100;
@colorHover: #ddd;;
@colorHiperenlace: #f2f2f2;
//Otros
@logotipo: "../img/[Link]";
19
.grid(@i) when (@i<=@columnas){
.col-@{i}{
.columna(@i);
border: 1px solid black;
}
.grid(@i+1);
}
Como se puede observar, en esta parte de código es donde hacemos uso de estructuras de control
repetitivas, como en cualquier lenguaje de programación. Para ello, cuando se realice la llamada a la
clase .grid, habrá que indicarle un parámetro, @i, indicando el inicio de la iteración. En nuestro
caso, será 1, ya que vamos a usar desde filas con 1 columna hasta filas con 12 columnas.
También se ha puesto una clase para centrar en la página cualquier tipo contenido:
.centrado{
display: block;
margin-left: auto;
margin-right: auto;
}
20
}
[Link] {
padding: 15px;
text-align: center;
}
}
Notar que no es necesario especificar la extensión, siempre y cuando sean archivos .less. Una vez
importados los ficheros, generaremos los estilos principales de la página, los que especifican el
layout o la interfaz de la misma:
#contenedor {
max-width: 960px;
margin: 0 auto;
width: 90%;
font-family: @tipoLetra;
.fila {
&:before,
&:after {
content: " "; /* 1 */
display: table; /* 2 --> Estos estilos se definen ya que, al tener los
elementos de las filas en posición flotante, el resto de elementos puede
que se superpongan (por la definición propia de los elementos flotantes).
Por ello estableciendo estos estilos se evita tal efecto.*/
}
&:after {
clear: both;
}
}
.fila {
width: 100%;
max-width: 1080px;
21
margin: 10px auto;
.grid(1); // Realizamos la llamada al bucle que generará todas las clases de
columna, es decir, col-1, col-2,...
}
}
…
2.5.1 Cabecera
Como se ha comentado, la cabecera de nuestra página estará dividida en en dos secciones: una para
la imagen del logotipo de 4 columnas y el resto para el título de la página.
El código HTML es el siguiente:
<div class='fila' id="cabecera">
<div class='col-4' id="inicio">
<img src="img/[Link]" alt="Logotipo">
</div>
<div class="col-8">
<h1>I.E.S Celia Viñas - Practicando con Less</h1>
</div>
</div>
22
Para una mejor adaptación de la plantilla se han asignado los siguientes estilos en el archivo
[Link]:
#cabecera {
img{
width: 20%;
.centrado;
}
h1{
text-align: center;
color: @colorPrincipal;
font-weight: @negrita;
}
}
.navegacion {
23
background-color:spin(lighten(@colorPrincipal, 25%), 8);
overflow: hidden;
}
a, h1, h2, h3, h4 {
color: spin(lighten(@colorPrincipal, 25%), 8);
}
Con este código conseguiremos el estilo deseado para el área de navegación, la cuál, será siempre
visible.
24
2.5.3 Sección Proyectos.
A modo ejemplo, publicaremos algunos proyectos en los que el centro está implicado. Para ello y
como hemos comentado anteriormente, la sección de proyectos se divide en 3 zonas. Una zona para
los últimos proyectos (3 columnas), otra zona para los proyectos más visitados (5 columnas) y por
último los enlaces a las “supuestas” entidades colaboradoras.
<div class="fila contenido" id="proyectos">
<h1>Últimos proyectos</h3>
<h2>BiblioWeb</h4>
<h2>Museo Virtual</h2>
<p>Para poder verlos solo tienes que pinchar en el siguiente enlace: <a
href="[Link] alt="Imagen museo virtual">Museo
Virtual</a></p>
</div>
25
<p>Gracias a este programa y al esfuerzo de profesores y alumnos se ha
conseguido realizar intercambios con otros centros de Europa: Eslovaquia,
Letonia, Inglaterra... </p>
</div>
<h3>Junta de Andalucía</h3>
<a href="[Link]
src="img/[Link]" alt="Amigos de la Alcazaba" /></a>
<h3>Amigos de la Alcazaba</h3>
<a href="[Link]
tic/04001151/biblioweb2/inicio"><img src="img/[Link]" alt="Amigos de la
Alcazaba" /></a>
<h3>Bibliotecas Virtuales</h3>
</div>
a {
font-weight: @negrita;
}
#nuevos{
img {
width: 80%;
.centrado;
}
padding: 1.2em;
}
#masVisitados {
img {
width: 50%;
.centrado;
}
padding: 1.2em;
}
26
#colaboradores{
img {
width: 50%;
margin: 0 auto;
display: block;
}
h3 {
text-align: center;
text-decoration: underline;
}
}
}
<div class="gallery">
<a target="_blank" href="img/[Link]">
<img src="img/[Link]" alt="Colegio Aparejadores" >
</a>
<div class="desc">Colegio de Aparejadores Almería</div>
</div>
…<!-- todas las imágenes que queramos poner -->
</div>
<div class="col-4">
<h2>Nuestros Viajes</h2>
<ul>
27
<li><a href="[Link] >Viaje a
París</a></li>
<li><a href="[Link] Greco-
Latino</a></li>
<li><a href="[Link]
arquitectura-tecnica/">Visita al Colegio de Aparejadores</a></li>
</ul>
</div>
</div>
<div class="col-12">
<p>Proyecto realizado para el Grupo de Trabajo del IES Celia Viñas: </p>
<ul>
<li>Pablo Escobar</li>
<li>Manuel Piñero</li>
<li>Alejandro Ramallo</li>
</ul>
28
</div>
</div>
El código Less:
#pie {
p, ul{
font-size: .7em;
text-align: center;
color: @colorPrincipal;
}
ul {
list-style-type: none;
margin-left: 28.5%;
}
ul li {
float: left;
margin-left: .6em;
}
margin-bottom: .7em;
}
Una vez generado el documento [Link], desde la carpeta raíz de la página web ejecutaremos en
un terminal el siguiente comando:
lessc less/[Link] css/[Link]
Si no hemos cometido ningún error se generará el archivo [Link] en la carpeta
correspondiente.
29
SASS
0. Introducción a Sass
Sass (Syntactically Awesome StyleSheets), es otro preprocesador CSS, el cuál permite, al igual que
Less, el uso de variables, anidamientos, mixins, importación de hojas de estilo y otras muchas
características. El famoso framework Bootstrap, desde su versión 4, usa este lenguaje para
implementar sus archivos CSS. Anteriormente se hacía uso de Less. Conociendo Less y Sass
podemos adaptar estos frameworks a nuestro gusto y hacer diseños mucho más personalizados y
adaptados.
1. El preprocesador SASS.
Sass usa dos sintaxis:
• una sintaxis en la que los anidamientos se especifican con llaves y cada regla termina en
punto y coma.
• una “sintaxis indentada”, de forma que el anidamiento de selectores CSS se indica con
tabulaciones en vez de con llaves, y las propiedades se separan con saltos de línea en vez de
con puntos y coma.
Cualquiera de las dos es una notación válida y podemos exportar documentos de una notación a
otra.
Para los ficheros, usaremos la extensión “.scss” o la extensión “.sass”, el primero usará sintaxis
con llaves y puntos y comas y la segunda una sintaxis indentada.
Antes de nada, veremos como realizar la instalación de SASS en nuestro equipo.
30
• [Link]
• Koala
• Live Reload
En primer lugar instalamos Sass para todo el sistema usando siguiente comando:
npm install -g sass
Una vez instalado el paquete podemos usar el comando sass cuya sintaxis es:
sass [Link] [Link]
Existe una opción muy interesante del comando sass que permite indicarle a Sass que vuelva a
generar el archivo CSS cada vez que hagamos modificaciones en el archivo sass:
sass --watch [Link] [Link]
Dentro de las opciones que podemos aplicar al comando podemos destacar:
SINTÁXIS SIGNIFICADO
sass --help Muestra un mensaje de ayuda con todas las
opciones y salidas.
sass --scss Usa la sintaxis SCSS.
sass --stdin Lee de la entrada estándar los datos en lugar de
un fichero.
sass --trace Muestra un resumen completo de los errores.
Una vez instalado el intérprete, la sintaxis que debe interpretar depende de la extensión de cada
archivo. Sin embargo, en ocasiones el código Sass no está definido en ningún archivo y no es
posible determinar automáticamente cuál es su sintaxis. Por defecto, usará la sintaxis tabulada, pero
se puede usar la opción –scss para forzar la sintaxis SCSS. También se puede usar el comando scss,
el cuál considera la sintaxis por defecto la de SCSS.
31
1.2 Variables.
Para definir variables, usaremos el carácter $ seguido del nombre de la variable:
$variable: valor;
Por ejemplo:
$altura: 15px;
$anchura: $altura+22px;
#capaPrincipal {
width: $altura;
height: $anchura;
}
#capaPrincipal {
width: 15px;
height: 37px;
}
width: 1in+8pt;
}
Producirá el siguiente código:
p {
width: 1.111in;
}
El único problema que puede surgir a la hora de usar el operador de división, ya que en CSS este
carácter es un shorthand que se usa para especificar como primer valor el tamaño de letra y el
segundo el alto de línea. Por ejemplo:
32
p {
font: 12px/10px sans-serif;
/*Especifica 12 píxeles de tamaño de letra y 10 píxeles como
alto de línea.*/
}
Este código sass generaría el mismo código en CSS. Sin embargo, existen ciertas situaciones en las
que este carácter se va a interpretar siempre como una operación aritmética:
• Si uno de los operandos de la división es una variable o el resultado devuelto por una
función.
• Si el valor está encerrado en paréntesis.
• Si el valor se utiliza como parte de una operación matemática.
p {
font: 12px/10px sans-serif;
/*Especifica 12 píxeles de tamaño de letra y 10 píxeles como
alto de línea.*/
$anchura: 1000px;
width: $anchura/2;
width: round(2.4)/2;
height: (445px/2);
padding: 5px + 8px/2px;
Si lo que necesitamos es utilizar este carácter de forma normal en todas las situaciones usaremos
#{}:
p {
$tamano-fuente: 12px;
$tamano-interlineado: 18px;
font: #{$tamano-fuente}/#{$tamano-interlineado};
}
1.4 Anidando.
Al igual que Less, Sass permite anidar las reglas CSS para que las hojas sean más claras y fáciles de
escribir. A los selectores interiores se les prefija el selector padre una vez que se compile:
#principal p {
color: blue;
33
padding: 1.5em;
.cajaroja {
background-color:red;
color: #000000;
}
}
#principal p .cajaroja {
background-color:red;
color: #000000;
}
#principal a:hover {
text-decoration: underline;
font-size: 1.3em;
34
}
Se le pueden aplicar más propiedades a este selector. Si el selector se acompaña de un sufijo, éste se
le aplicará al selector padre:
#principal {
color: #00ff00;
&-lateral {
border: 1px solid #11ee00;
}
}
El código CSS:
#principal {
color: #00ff00;
}
#principal-lateral {
border: 1px solid #11ee00;
}
En CSS existen cierto tipo de propiedades que están agrupadas. Normalmente este tipo de reglas
usan un método abreviado que resulta algo tedioso de comprender. En Sass, además de poder anidar
selectores, podemos anidar este tipo de reglas. Una de las reglas que usa este método es la
propiedad font con todas sus variantes:
#principal {
font: {
family: sans-serif;
size: 3em;
weight: bold;
}
}
35
font-size: 3em;
font-weight: bold;
}
1.6.1 @import
Usamos “@import” para importar archivos CSS, SCSS y Sass. Todos los archivos importados,
acaban fusionándose antes de generar el archivo CSS final. De esta forma, cualquier mixin o
variable definido en un archivo importado se podrán usar en el archivo principal en el que se
importan.
Esta regla tiene como parámetro el archivo a importar. Por defecto busca un archivo Sass y lo
importa directamente, . Si no se indica extensión, Sass tratará de buscar un archivo con ese nombre
y con las extensiones .scss o .sass.
36
1.6.3. @media
Este tipo de reglas funcionan igual que en CSS, salvo que se pueden anidar dentro de las reglas
CSS. Si incluimos una regla @media dentro de una regla CSS, ésta se aplicará a todos los selectores
que se encuentren desde esa regla hasta el primer nivel de la hoja de estilos. Esto lo hace realmente
útil para definir estilos dependientes de los dispositivos sin tener que repetir los selectores. Por
ejemplo:
.lateral {
width: 300px;
@media screen and (orientation: landscape) {
width: 500px;
}
}
Además, las reglas @media también pueden contener variables, funciones y operadores, tanto en
los nombres como en los valores:
$dispositivo: screen;
$caracteristica: webkitmin-device-pixel-ratio;
$valor: 1.5;
37
.lateral{
width: 500px;
}
}
1.6.4. @extend
Aplicaremos esta regla cuando queramos extender a otras, un concepto parecido al de herencia en
algunos lenguajes de programación. Es decir, a veces es necesario usar los estilos aplicados a algún
selector y ampliarlos con algunos otros. Por ejemplo, imagina que tenemos los siguientes estilos:
.animal {
color: brown;
font-size: 13px;
}
.perro {
text-decoration: underline;
}
Siempre que queramos utilizar la clase perro, deberíamos usar también la clase animal:
<div class=”animal perro”>...</div>
Si hacemos lo siguiente:
.animal {
color: brown;
font-size: 13px;
}
.perro {
@extend .animal;
text-decoration: underline;
}
Ahora todos los estilos definidos para el selector .animal también se aplican automáticamente al
selector .perro por lo que no sería necesario aplicar esta clase en la capa correspondiente. Cualquier
otra regla que se aplique a .animal se aplicará igualmente a .perro.
Cuando usamos la directiva @media existen algunas restricciones a la hora del uso de @extend. Por
ejemplo no está permitido extender dentro de una directiva @media si la clase que se quiere
extender está fuera del ámbito de @media. Es decir:
- Incorrecto:
.animal {
color: brown;
38
font-size: 13px;
}
@media print {
.perro {
@extend .animal;
text-decoration:underline;
}
}
- Correcto:
@media print {
.animal {
color: brown;
font-size: 13px;
}
.perro {
@extend .animal;
text-decoration:underline;
}
}
p {
}
Este código se compilará en:
39
p {
}
A su vez, y como en los lenguajes de programación, la directiva @if puede ir seguida de una @else
if o una @else. Por ejemplo:
$tipo: gato;
p {
color: brown;
color: black;
color: blue;
} @else {
color: red;
}
Este código se compilará como:
p {
color: black;
40
Por ejemplo, para crear un grid de 12 columnas por fila podríamos hacer:
@for $i from 1 through 12 {
estilos
}
Con esta directiva se recorre toda la lista o mapa y en cada iteración, se asigna un valor diferente a
la variable $variable antes de compilar los estilos. Por ejemplo:
@each $animal in leon, puma, perro, gato {
.#{animal}-icon {
background-image: url(‘/imagenes/#{$animal}.png’);
}
El código Sass se compila de la siguiente forma:
.leon-icon {
background-image: url(‘/imagenes/[Link]’);
.puma-icon {
background-image: url(‘/imagenes/[Link]’);
.perro-icon {
41
background-image: url(‘/imagenes/[Link]’);
.gato-icon {
background-image: url(‘/imagenes/[Link]’);
estilos;
}
Por ejemplo:
$contador: 5;
@while $i>0 {
$i: $i - 2;
}
Esto se traducirá en:
.capa-6 {width: 12em;}
1.8 Mixins
Los mixins, al igual que ocurría con Less, permite definir estilos reutilizables en toda la hoja de
estilos. Los mixins también contener reglas CSS y cualquier otro tipo de elemento definido por
Sass, incluso adminten el uso de argumentos, como si usáramos funciones en un lenguaje de
programación.
Los mixins se definen con la directiva @mixin seguida del nombre del mixin y los argumentos (si es
que los tiene). A continuación se establece el contenido que definen los estilos del mixin. Por
ejemplo:
@mixin texto-grande {
42
font: {
family: Arial;
size: 20px;
weight: bold;
color: #ff0000;
}
Para poder usar los mixins es necesario usar la directiva @include seguida del nombre del mixin. Es
decir:
#principal .titulo {
@include texto-grande;
padding: 4px;
margin: 10px 0 0 0;
}
Este código se traduce a:
#principal .titulo{
font-family: Arial;
font-size: 20px;
font-weight: bold;
color: #ff0000;
}
Uso de argumentos.
Los argumentos pueden estar formados por cualquier expresión. Estos argumentos estarán
disponibles dentro del mixin en forma de variable. Al definir un argumento, estos aparecerán como
variables separadas por comas y entre paréntesis. Cuando se use el mixin, se deben poner estos
argumentos en el mismo orden.
Por ejemplo:
@mixin borde-estilo ($color, $ancho){
border: {
color: $color;
43
width: $anchura;
style: dashed;
border-color: blue;
border-width: 1in;
border-style: dashed;
}
Para establecer un valor por defecto a un argumento, establecemos ese valor directamente al lado
del argumento y separado por “:”, es decir:
@mixin borde-estilo ($color, $ancho: 5px){
border: {
color: $color;
width: $anchura;
style: dashed;
}
Ahora si se realiza la llamada y no se establece valor para ese argumento, tomará por defecto el
valor establecido: 5px. Podríamos hacer la llamada al mixin de la siguiente forma:
@include borde-estilo(red);
o
@include borde-estilo(red, 10px);
44
Igualmente tendremos los siguientes archivos:
- [Link]. Archivo destinado a almacenar las principales variables que configurarán el archivo
de estilos.
- [Link]. Código reutilizable que se usará en el código sass del archivo principal, [Link].
- [Link]. Estilos para la galería de fotos.
- [Link]. Archivo principal scss de la página web.
45