SlideShare una empresa de Scribd logo
1 de 141
Descargar para leer sin conexión
LESS, UN 
PREPROCESADOR CSS 
ADOLFO SANZ DE DIEGO 
SEPTIEMBRE 2014
1 EL AUTOR
1.1 ADOLFO SANZ DE DIEGO 
Antiguo programador web JEE (6 años) 
Hoy en día: 
Profesor de FP (6 años): 
Hardware, Sistemas Operativos 
Redes, Programación 
Formador Freelance (3 años): 
Java, Android 
JavaScript, jQuery 
JSF, Spring, Hibernate 
Groovy & Grails
1.2 ALGUNOS PROYECTOS 
Fundador y/o creador: 
Hackathon Lovers: 
Tweets Sentiment: 
MarkdownSlides: 
Co-fundador y/o co-creador: 
PeliTweets: 
Password Manager Generator: 
http://hackathonlovers.com 
http://tweetssentiment.com 
https://github.com/asanzdiego/markdownslides 
http://pelitweets.com 
http://pasmangen.github.io
1.3 ¿DONDE ENCONTRARME? 
Mi nick: asanzdiego 
AboutMe: 
GitHub: 
Twitter: 
Blog: 
LinkedIn: 
Google+: 
http://about.me/asanzdiego 
http://github.com/asanzdiego 
http://twitter.com/asanzdiego 
http://asanzdiego.blogspot.com.es 
http://www.linkedin.com/in/asanzdiego 
http://plus.google.com/+AdolfoSanzDeDiego
2 INTRODUCCIÓN
2.1 ¿QUÉ ES? 
Less es un pre-procesador de CSS. 
Añade características como variables, mixins, 
funciones, etc.
2.2 VENTAJAS 
El CSS es así más fácil de mantener, 
personalizable y extensible. 
Less (con respecto a otros pre-procesadores CSS) 
tiene una sintaxis parecida a CSS.
2.3 CARACTERÍSTICAS 
Less se puede ejecutar desde NodeJS, desde un 
navegador, o desde Rhino. 
Además existen muchas herramientas que 
permiten compilar los archivos y ver los cambios 
en caliente.
3 USANDO LESS
3.1 INSTALACIÓN 
La forma más sencilla de instalar Less, es a través 
de la npm, el gestor de paquetes de NodeJS: 
$ npm install -g less
3.2 LÍNEA DE COMANDOS 
Una vez instalado, se puede compilar desde la línea 
de comandos: 
$ lessc styles.less > styles.css
3.3 DESDE NODEJS (I) 
El siguiente código: 
var less = require('less'); 
less.render( 
'.class { width: (1 + 1) }', 
function (e, css) { 
console.log(css); 
} 
);
3.4 DESDE NODEJS (II) 
Sacará por pantalla: 
.class { 
width: 2; 
}
3.5 CON RHINO 
Rhino te permite usar JavaScript desde una 
Máquina Virtual de Java 
java -jar js.jar 
-f less-rhino-<version>.js 
lessc-rhino-<version>.js 
styles.less styles.css
3.6 DESDE EL NAVEGADOR (I) 
Es la forma más fácil para empezar, pero no es 
recomendable usarlo así en producción. 
Se recomienda pre-compilar usando NodeJS, 
Rhino, o una de las muchas herramientas de 
terceros disponibles.
3.7 DESDE EL NAVEGADOR (II) 
Enlazar tu archivo less que quieras precompilar: 
<link rel="stylesheet/less" 
type="text/css" 
href="styles.less" />
3.8 DESDE EL NAVEGADOR (II) 
Descargar: 
Enlazar el js de less: 
https://github.com/less/less.js/archive/master.zip 
<script src="less.js" 
type="text/javascript"> 
</script>
3.9 DESDE EL NAVEGADOR (III) 
Consejos; 
Enlaza tus archivos a precompilar antes que la 
librería de less. 
Si hay más de un archivo a precompilar, estos se 
compilan de forma independiente.
4 CARACTERÍSTICAS
4.1 VARIABLES (I) 
El siguiente código: 
@nice-blue: #5B83AD; 
@light-blue: @nice-blue + #111; 
#header { 
color: @light-blue; 
}
4.2 VARIABLES (II) 
Les compila a: 
#header { 
color: #6c94be; 
} 
Nota: las variables son en realidad "constantes" 
ya que sólo pueden ser definidas una vez.
4.3 EXTEND 
Son una forma de herencia: 
.animal { 
background-color: black; 
color: white; 
}. 
bear { 
&:extend(.animal); 
background-color: brown; 
}
4.4 MIXINS (I) 
Los Mixins son una forma de reutilizar 
propiedades ya definidas: 
Imaginemos la clase .bordered: 
.bordered { 
border-top: dotted 1px black; 
border-bottom: solid 2px black; 
}
4.5 MIXINS (II) 
Lo podemos usar así: 
#menu a { 
color: #111; 
.bordered; 
} 
.post a { 
color: red; 
.bordered; 
} 
Nota: Además de clases, también se pueden 
utilizar #ids como mixins.
4.6 REGLAS ANIDADAS (I) 
Supongamos que tenemos el siguiente CSS: 
#header { 
color: black; 
} 
#header a { 
color: blue; 
} 
#header a:hover { 
color: red; 
}
4.7 REGLAS ANIDADAS (II) 
Pues con Less se puede escribir así: 
#header { 
color: black; 
a { 
color: blue; 
&:hover { 
color: red; 
} 
} 
} 
Se pueden usar pseudo-elementos, y llamar 
al selector padre actual, con &:
4.8 MEDIAS QUERIES ANIDADAS (I) 
El siguiente código: 
@media screen { 
.screencolor { color: green; } 
} 
@media screen and (min-width: 768px) { 
.screencolor { color: red; } 
} 
@media tv { 
.screencolor { color: black; } 
}
4.9 MEDIAS QUERIES ANIDADAS (II) 
Se podría escribir: 
.screencolor{ 
@media screen { 
color: green; 
@media (min-width:768px) { 
color: red; 
} 
} 
@media tv { 
color: black; 
} 
}
4.10 OPERACIONES (I) 
Less puede hacer operaciones con números, 
colores o variables. 
Además sabe diferenciar cuando es un 
número o un color.
4.11 OPERACIONES (II) 
@base: 5%; 
@filler: @base * 2; 
@other: @base + @filler; 
@base-color: #888 / 4; 
background-color: @base-color + #111; 
height: 100% / 2 + @other;
4.12 FUNCIONES 
Less dispone de una variedad de funciones 
matemáticas, que manipulan cadenas, y que 
transforman los colores: 
@base: #f04615; 
@list: 200, 500, 1200; 
.class { 
width: extract(@list, 3); 
color: saturate(@base, 5%); 
background-color: 
lighten(@base, 25%); 
}
4.13 NAMESPACES (I) 
A veces, podemos querer agrupar mixins, por 
motivos de organización, o simplemente para 
encapsularlos.
4.14 NAMESPACES (II) 
Veamos como podemos agrupar varios mixins: 
#bundle { 
.button { 
border: 1px solid black; 
background-color: grey; 
} 
.tab { ... } 
.citation { ... } 
}
4.15 NAMESPACES (III) 
Ahora podemos utilizar el mixin .button que está en 
el namespace #bundle de esta forma: 
#header a { 
color: orange; 
#bundle > .button; 
}
4.16 SCOPE 
Los ámbitos de las variables en Less es muy 
similar a otros lenguajes: 
@var: red; 
#page { 
@var: white; 
#header { 
color: @var; // white 
} 
}
4.17 COMENTARIOS 
Con //... y con /* ... */ 
/* One hell of a block 
style comment! */ 
@var: red; 
// Get in line! 
@var: white;
4.18 IMPORTS 
// foo.less is imported 
@import "foo"; 
// foo.less is imported 
@import "foo.less"; 
// foo.php imported as a less file 
@import "foo.php"; 
// foo.css imported as a css file 
@import "foo.css";
5 VARIABLES
5.1 ¿POR QUÉ? (I) 
Las variables se usan para no tener que repetir 
constantemente los mismos valores, con lo 
que se consigue además un código más fácil de 
mantener: 
a, 
.link { 
color: #428bca; 
}. 
widget { 
color: #fff; 
background: #428bca; 
}
5.2 ¿POR QUÉ? (II) 
Con Less quedaría: 
@color: #428bca 
a, 
.link { 
color: @color; 
}. 
widget { 
color: #fff; 
background: @color; 
}
5.3 SELECTORES (I) 
También se pueden usar como selectores: 
@mySelector: banner; 
.@{mySelector} { 
font-weight: bold; 
line-height: 40px; 
margin: 0 auto; 
}
5.4 SELECTORES (II) 
Compilado con Less quedaría: 
.banner { 
font-weight: bold; 
line-height: 40px; 
margin: 0 auto; 
}
5.5 URLS 
También se pueden usar URLs: 
@images: "../img"; 
body { 
color: #444; 
background: url("@{images}/white-sand.png"); 
}
5.6 PROPIEDADES (I) 
También se pueden usar como propiedades: 
@property: color; 
.widget { 
@{property}: #0ee; 
background-@{property}: #999; 
}
5.7 PROPIEDADES (II) 
Compilado con Less quedaría: 
.widget { 
color: #0ee; 
background-color: #999; 
}
5.8 NOMBRES DE LAS VARIABLES (I) 
También se pueden usar variables como nombres 
de otras variables: 
@fnord: "I am fnord."; 
@var: "fnord"; 
content: @@var;
5.9 NOMBRES DE LAS VARIABLES (II) 
Compilado con Less quedaría: 
content: "I am fnord.";
5.10 CARGA PEREZOSA (I) 
Las variables no tienen que ser declaradas 
antes de ser utilizados. 
Eso es válido: 
.lazy-eval { 
width: @var; 
} 
@var: @a; 
@a: 9%;
5.11 CARGA PEREZOSA (II) 
Compilado con Less quedaría: 
.lazy-eval { 
width: 9%; 
}
5.12 ÁMBITOS (I) 
Al definir una variable dos veces, se utiliza la 
última definición de la variable: 
@var: 0; 
.class { 
@var: 1; 
.brass { 
@var: 2; 
three: @var; 
@var: 3; 
} 
one: @var; 
}
5.13 ÁMBITOS (II) 
Compilado con Less quedaría: 
.class { 
one: 1; 
}. 
class .brass { 
three: 3; 
}
6 EXTEND
6.1 CASO DE USO (I) 
Imagino que tenemos lo siguiente: 
.animal { 
background-color: black; 
color: white; 
} 
Y queremos tener un subtipo de animal que 
sobrescriba la propiedad background-color.
6.2 CASO DE USO (II) 
Podemos hacer lo siguiente: 
<a class="animal bear">Bear</a> 
.animal { 
background-color: black; 
color: white; 
}. 
bear { 
background-color: brown; 
}
6.3 CASO DE USO (III) 
O podemos simplificar el html y usar extend: 
<a class="bear">Bear</a> 
.animal { 
background-color: black; 
color: white; 
}. 
bear { 
&:extend(.animal); 
background-color: brown; 
}
6.4 REDUCE EL TAMAÑO DEL CSS (I) 
Ejemplo de mixin: 
.my-inline-block() { 
display: inline-block; 
font-size: 0; 
}. 
thing1 { 
.my-inline-block; 
}. 
thing2 { 
.my-inline-block; 
}
6.5 REDUCE EL TAMAÑO DEL CSS (II) 
Less lo compila a: 
.thing1 { 
display: inline-block; 
font-size: 0; 
}. 
thing2 { 
display: inline-block; 
font-size: 0; 
}
6.6 REDUCE EL TAMAÑO DEL CSS (III) 
Con extends: 
.my-inline-block { 
display: inline-block; 
font-size: 0; 
}. 
thing1 { 
&:extend(.my-inline-block); 
}. 
thing2 { 
&:extend(.my-inline-block); 
}
6.7 REDUCE EL TAMAÑO DEL CSS (IV) 
Less lo compila a: 
.my-inline-block, 
.thing1, 
.thing2 { 
display: inline-block; 
font-size: 0; 
}
7 MIXINS
7.1 SELECTORES 
Se pueden hacer Mixins tanto con selectores de 
clase como con selectores de identificación: 
.a, #b { 
color: red; 
}. 
mixin-class { 
.a(); 
}. 
mixin-id { 
#b(); 
}
7.2 NO EXPORTAR MIXINS (I) 
Si no quieres que el Mixin sea exportado al CSS, 
utiliza los paréntesis: 
.my-mixin { 
color: black; 
}. 
my-other-mixin() { 
background: white; 
}. 
class { 
.my-mixin; 
.my-other-mixin; 
}
7.3 NO EXPORTAR MIXINS (II) 
Less lo compila a: 
.my-mixin { 
color: black; 
}. 
class { 
color: black; 
background: white; 
}
7.4 PSEUDO-CLASES (I) 
Los Mixins también soportan pseudo-clases: 
.my-hover-mixin() { 
&:hover { 
border: 1px solid red; 
} 
} 
button { 
.my-hover-mixin(); 
}
7.5 PSEUDO-CLASES (II) 
Less lo compila a: 
button:hover { 
border: 1px solid red; 
}
7.6 NAMESPACES (I) 
Podemos crear un namespace con varios mixins: 
#outer { 
.inner { 
color: red; 
} 
}
7.7 NAMESPACES (II) 
Para llamar al Mixin, los parentesis, el espacio y el 
> es opcional, así que se puede hacer de todas 
estas formas: 
#outer > .inner; 
#outer > .inner(); 
#outer .inner; 
#outer .inner(); 
#outer.inner; 
#outer.inner();
7.8 !IMPORTANT KEYWORD (I) 
Detrás de un Mixin, al compilar pone todo como 
importante: 
.foo () { 
background: #f5f5f5; 
color: #fff; 
}. 
unimportant { 
.foo(); 
}. 
important { 
.foo() !important; 
}
7.9 !IMPORTANT KEYWORD (II) 
Less lo compila a: 
.unimportant { 
background: #f5f5f5; 
color: #fff; 
}. 
important { 
background: #f5f5f5 !important; 
color: #fff !important; 
}
8 MIXINS PARAMÉTRICOS
8.1 PARÁMETROS (I) 
Los Mixins también puede tomar parámetros: 
.border-radius(@radius) { 
-webkit-border-radius: @radius; 
-moz-border-radius: @radius; 
border-radius: @radius; 
} 
#header { 
.border-radius(4px); 
}
8.2 PARÁMETROS (II) 
Less lo compila a: 
#header { 
-webkit-border-radius: 4px; 
-moz-border-radius: 4px; 
border-radius: 4px; 
}
8.3 VALOR POR DEFECTO (I) 
Los Mixins también puede tomar parámetros con 
un valor por defecto: 
.border-radius(@radius: 5px) { 
-webkit-border-radius: @radius; 
-moz-border-radius: @radius; 
border-radius: @radius; 
} 
#header { 
.border-radius; 
}
8.4 VALOR POR DEFECTO (II) 
Less lo compila a: 
#header { 
-webkit-border-radius: 5px; 
-moz-border-radius: 5px; 
border-radius: 5px; 
}
8.5 PARÁMETROS MÚLTIPLES (I) 
Los parámetros se pueden separar por coma (,) 
o por punto y coma (;). 
Se recomienda el punto y coma (;).
8.6 PARÁMETROS MÚLTIPLES (II) 
La coma (,) tiene doble sentido: se puede 
interpretar como un separador de 
parámetros Mixin o como separador de los 
elementos de una lista. 
Si el compilador encuentra al menos un punto y 
coma (;) asume que los argumentos se 
separan por punto y coma y los comas 
pertenecen a listas.
8.7 PARÁMETROS MÚLTIPLES (III) 
.name(1, 2, 3; something, else) 
2 parámetros, cada uno es una lista 
.name(1, 2, 3) 
3 parámetros, cada uno contiene un número 
.name(1, 2, 3;) 
1 parámetro, que es una lista 
.name(@param1: red, blue;) 
1 parámetro, con una lista como valor 
predeterminado
8.8 PARÁMETROS MÚLTIPLES (IV) 
Se puede tener varios mixins con el mismo 
nombre y el mismo número de parámetros, 
pues Less utilizará todos los posibles: 
.mixin(@color) { 
color: @color; 
}. 
mixin(@color; @padding:2) { 
padding: @padding; 
}. 
mixin(@color; @padding; @margin: 2) { 
margin: @margin; 
}. 
some .selector div { 
.mixin(#008000); 
}
8.9 PARÁMETROS MÚLTIPLES (V) 
Less lo compila a: 
.some .selector div { 
color-1: #008000; 
padding-2: 2; 
}
8.10 PARÁMETROS CON NOMBRES (I) 
Se pueden usar parámetros con nombre: 
.mixin( @color: black; 
@margin: 10px; 
@padding: 20px) { 
... 
}. 
class1 { 
.mixin( @margin: 20px; 
@color: #33acfe); 
}. 
class2 { 
.mixin( #efca44; 
@padding: 40px); 
}
8.11 PARÁMETROS CON NOMBRES (II) 
Less lo compila a: 
.class1 { 
color: #33acfe; 
margin: 20px; 
padding: 20px; 
}. 
class2 { 
color: #efca44; 
margin: 10px; 
padding: 40px; 
}
8.12 @ARGUMENTS (I) 
Podemos coger todos los parámetros de 
entrada juntos: 
.box-shadow( 
@x: 0; 
@y: 0; 
@blur: 1px; 
@color: #000) { 
-webkit-box-shadow: @arguments; 
-moz-box-shadow: @arguments; 
box-shadow: @arguments; 
}. 
big-block { 
.box-shadow(2px; 5px); 
}
8.13 @ARGUMENTS (II) 
Less lo compila a: 
.big-block { 
-webkit-box-shadow: 
2px 5px 1px #000; 
-moz-box-shadow: 
2px 5px 1px #000; 
box-shadow: 
2px 5px 1px #000; 
}
8.14 ... 
Podemos permitir que el Mixin admita varios 
parámetros: 
// matches 0-N arguments 
.mixin(...) { 
// matches exactly 0 arguments 
.mixin() { 
// matches 0-1 arguments 
.mixin(@a: 1) { 
// matches 0-N arguments 
.mixin(@a: 1; ...) { 
// matches 1-N arguments 
.mixin(@a; ...) {
8.15 @REST 
Coge todos los parámetros de ...: 
.mixin(@a; @rest...) { 
/* @rest recoge todos 
los parámetros 
después de @a */ 
/* @arguments recoge todos 
los parámetros 
(incluido @a) */ 
}
8.16 PATTERN MATCHING (I) 
Si queremos que se ejecute un mixin 
dependiendo del valor de una variable: 
.mixin(dark; @color) { 
color: darken(@color, 10%); 
}. 
mixin(light; @color) { 
color: lighten(@color, 10%); 
}. 
mixin(@_; @color) { /* all */ 
display: block; 
} 
@switch: light; 
.class { 
.mixin(@switch; #888); 
}
8.17 PATTERN MATCHING (II) 
Less lo compila a: 
.class { 
color: #a2a2a2; 
display: block; 
}
8.18 MIXINS COMO FUNCIONES (I) 
Todas las variables definidas en un mixin son 
visibles y pueden ser utilizados en el ámbito 
de donde es llamado: 
.mixin() { 
@width: 100%; 
@height: 200px; 
} 
.caller { 
.mixin(); 
width: @width; 
height: @height; 
}
8.19 MIXINS COMO FUNCIONES (II) 
Less lo compila a: 
.caller { 
width: 100%; 
height: 200px; 
}
8.20 MIXINS COMO FUNCIONES (III) 
Otro ejemplo: 
.average(@x, @y) { 
@average: ((@x + @y) / 2); 
} 
div { 
// "call" the mixin 
.average(16px, 50px); 
// use its "return" value 
padding: @average; 
}
8.21 MIXINS COMO FUNCIONES (IV) 
Less lo compila a: 
div { 
padding: 33px; 
}
9 MIXINS CONDICIONALES
9.1 SINTAXIS (I) 
Muy parecida a las Media Queries: 
.mixin (@a) 
when (lightness(@a) >= 50%) { 
background-color: black; 
}. 
mixin (@a) 
when (lightness(@a) < 50%) { 
background-color: white; 
}. 
mixin (@a) { 
color: @a; 
}. 
class1 { .mixin(#ddd) } 
.class2 { .mixin(#555) }
9.2 SINTAXIS (II) 
Less lo compila a: 
.class1 { 
background-color: black; 
color: #ddd; 
}. 
class2 { 
background-color: white; 
color: #555; 
}
9.3 OPERADORES 
Se pueden usar los operadores >, >=, =, =<, < 
@media: mobile; 
.mixin (@a) 
when (@media = mobile) { ... } 
.mixin (@a) 
when (@media = desktop) { ... } 
.max (@a; @b) 
when (@a > @b) { width: @a } 
.max (@a; @b) 
when (@a < @b) { width: @b }
9.4 AND 
Como en las Media Queries, usando AND todas las 
sentencias se tienen que cumplir: 
.mixin (@a) 
when (isnumber(@a)) 
and (@a > 0) { ... }
9.5 COMA (,) 
Como en las Media Queries, separar sentencias con 
comas (,) equivale a un OR, por lo que se 
entrará en el Mixin en cuanto se cumpla una de las 
sentencias: 
.mixin (@a) 
when (@a > 10), 
(@a < -10) { ... }
9.6 NOT 
Como en las Media Queries, usando NOT se niega 
una sentencia: 
.mixin (@b) 
when not (@b > 0) { ... }
9.7 COMPROBAR TIPOS 
Tenemos las siguientes funciones para comprobar 
tipos: 
isnumber 
isstring 
iscolor 
iskeyword 
isurl
9.8 COMPROBAR UNIDADES 
Tenemos las siguientes funciones para comprobar 
unidades: 
ispixel 
isem 
ispercentage 
isunit
9.9 LOOPS (I) 
Los Mixins se pueden llamar así mismos. Con esta 
recursividad se pueden crear loops: 
.loop(@counter) 
when (@counter > 0) { 
// next iteration 
.loop((@counter - 1)); 
// code for each iteration 
width: (10px * @counter); 
} 
div { 
.loop(5); // launch the loop 
}
9.10 LOOPS (II) 
Less lo compila a: 
div { 
width: 10px; 
width: 20px; 
width: 30px; 
width: 40px; 
width: 50px; 
}
9.11 LOOPS (III) 
Podríamos hacer un grid de CSS: 
.generate-columns(4); 
.generate-columns(@n, @i: 1) 
when (@i =< @n) { 
.column-@{i} { 
width: (@i * 100% / @n); 
} 
.generate-columns(@n, (@i + 1)); 
}
9.12 LOOPS (IV) 
Less lo compila a: 
.column-1 { 
width: 25%; 
}. 
column-2 { 
width: 50%; 
}. 
column-3 { 
width: 75%; 
}. 
column-4 { 
width: 100%; 
}
10 MERGE
10.1 ¿QUÉ ES? 
Permite combinar propiedades con coma (,) o 
con espacio ( ), en una sola propiedad.
10.2 COMA (I) 
Ejemplo con coma (,): 
.mixin() { 
box-shadow+: inset 0 0 10px #555; 
}. 
myclass { 
.mixin(); 
box-shadow+: 0 0 20px black; 
}
10.3 COMA (II) 
Less lo compila a: 
.myclass { 
box-shadow: 
inset 0 0 10px #555, 
0 0 20px black; 
}
10.4 ESPACIO (I) 
Ejemplo con espacio ( ): 
.mixin() { 
transform+_: scale(2); 
}. 
myclass { 
.mixin(); 
transform+_: rotate(15deg); 
}
10.5 ESPACIO (II) 
Less lo compila a: 
.myclass { 
transform: scale(2) rotate(15deg); 
}
10.6 EXPLICITO 
Para prevenir cualquier join involuntario, merge 
requiere que pongas + o +_ de forma 
explícita en la declaración de cada uno de los jois.
11 SELECTOR PADRE
11.1 EL OPERADOR & (I) 
El operador & representa el selector padre, y 
suele ser usado para modificar clases o usar 
pseudoclases: 
a { 
color: blue; 
&:hover { 
color: green; 
} 
}
11.2 EL OPERADOR & (II) 
Less locompila a: 
a { 
color: blue; 
} 
a:hover { 
color: green; 
}
11.3 CLASES REPETITIVAS (I) 
Otro uso, a parte de las pseudoclases, es el de 
producir nombres de clases repetitivos: 
.button { 
&-ok { 
background-image: 
url("ok.png"); 
} 
&-cancel { 
background-image: 
url("cancel.png"); 
} 
&-custom { 
background-image: 
url("custom.png"); 
} 
}
11.4 CLASES REPETITIVAS (II) 
Less lo compila a: 
.button-ok { 
background-image: url("ok.png"); 
}. 
button-cancel { 
background-image: url("cancel.png"); 
}. 
button-custom { 
background-image: url("custom.png"); 
}
11.5 MULTIPLES & (I) 
Se puede repetir el padre: 
.link { 
& + & { 
color: red; 
} 
& & { 
color: green; 
} 
&& { 
color: blue; 
} 
&, &ish { 
color: cyan; 
} 
}
11.6 MULTIPLES & (II) 
Less lo compila a : 
.link + .link { 
color: red; 
}. 
link .link { 
color: green; 
}. 
link.link { 
color: blue; 
}. 
link, .linkish { 
color: cyan; 
}
11.7 MULTIPLES & (III) 
Otro ejemplo: 
.grand { 
.parent { 
& > & { 
color: red; 
} 
& & { 
color: green; 
} 
&& { 
color: blue; 
} 
&, &ish { 
color: cyan; 
} 
} 
}
11.8 MULTIPLES & (IV) 
Less lo compila a : 
.grand .parent > .grand .parent { 
color: red; 
}. 
grand .parent .grand .parent { 
color: green; 
}. 
grand .parent.grand .parent { 
color: blue; 
}. 
grand .parent, .grand .parentish { 
color: cyan; 
}
11.9 CAMBIAR EL ORDEN (I) 
En algunos caso puede ser util cambiar el orden del 
hijo con respecto al padre: 
.header { 
.menu { 
border-radius: 5px; 
.no-borderradius & { 
background-image: 
url('img.png'); 
} 
} 
}
11.10 CAMBIAR EL ORDEN (II) 
Less lo compila a: 
.header .menu { 
border-radius: 5px; 
}. 
no-borderradius .header .menu { 
background-image: 
url('img.png'); 
}
11.11 EXPLOSIÓN COMBINATORIA (I) 
El operador & puede ser usado para generar todas 
las posibles permutaciones de los selectores padre: 
a, ul, li { 
border-top: 2px dotted #366; 
& + & { 
border-top: 0; 
} 
}
11.12 EXPLOSIÓN COMBINATORIA (II) 
Less lo compila a: 
a, ul, li { 
border-top: 2px dotted #366; 
} 
a + a, a + ul, a + li, 
ul + a, ul + ul, ul + li, 
li + a, li + ul, li + li { 
border-top: 0; 
}
12 FUNCIONES
12.1 RESUMEN 
Misc Functions 
String Functions 
List Functions 
Math Functions 
Type Functions 
Color Functions 
http://lesscss.org/functions/
12.2 MISC FUNCTIONS 
http://lesscss.org/functions/#misc-functions 
color 
convert 
data-uri 
default 
unit 
get-unit 
svg-gradient
12.3 STRING FUNCTIONS 
: 
http://lesscss.org/functions/#string-functions 
escape 
e 
% format 
replace
12.4 LIST FUNCTIONS 
http://lesscss.org/functions/#list-functions 
length 
extract
12.5 MATH FUNCTIONS (I) 
http://lesscss.org/functions/#math-functions 
ceil 
floor 
percentage 
round 
sqrt 
abs 
pow 
mod 
min 
max
12.6 MATH FUNCTIONS (II) 
http://lesscss.org/functions/#math-functions 
sin 
asin 
cos 
acos 
tan 
atan 
pi
12.7 TYPE FUNCTIONS 
http://lesscss.org/functions/#type-functions 
isnumber 
isstring 
iscolor 
iskeyword 
isurl 
ispixel 
isem 
ispercentage 
isunit
12.8 COLOR DEFINITION FUNCTIONS 
rgb 
rgba 
argb 
hsl 
hsla 
hsv 
hsva 
http://lesscss.org/functions/#color-definitions
12.9 COLOR CHANNEL FUNCTIONS 
hue 
saturation 
lightness 
hsvhue 
hsvsaturation 
hsvvalue 
red 
green 
blue 
alpha 
luma 
luminance 
http://lesscss.org/functions/#color-channel
12.10 COLOR OPERATION FUNCTIONS 
saturate 
desaturate 
lighten 
darken 
fadein 
fadeout 
fade 
spin 
mix 
greyscale 
contrast 
http://lesscss.org/functions/#color-operations
12.11 COLOR BLENDING FUNCTIONS 
multiply 
screen 
overlay 
softlight 
hardlight 
difference 
exclusion 
average 
negation 
http://lesscss.org/functions/#color-blending
13 ACERCA DE
13.1 LICENCIA 
Estas transparencias están hechas con: 
MarkdownSlides: 
https://github.com/asanzdiego/markdownslides 
Estas transparencias están bajo una licencia 
Creative Commons Reconocimiento-CompartirIgual 
3.0: 
http://creativecommons.org/licenses/by-sa/3.0/es
13.2 FUENTES 
Transparencias: 
https://github.com/asanzdiego/curso-interfaces-web- 
2014/tree/master/04-less/slides 
Código: 
https://github.com/asanzdiego/curso-interfaces-web- 
2014/tree/master/01-less/src
13.3 BIBLIOGRAFÍA 
Documentación oficial de Less 
http://lesscss.org

Más contenido relacionado

La actualidad más candente

desarrolo de sitios web php y mysql
desarrolo de sitios web php y mysqldesarrolo de sitios web php y mysql
desarrolo de sitios web php y mysqlJuan Timoteo Cori
 
WordCamp Bilbao - De HTML a WordPress - @DarioBF
WordCamp Bilbao - De HTML a WordPress - @DarioBFWordCamp Bilbao - De HTML a WordPress - @DarioBF
WordCamp Bilbao - De HTML a WordPress - @DarioBFDarío BF
 
Presentacion Wp Versión PDF
Presentacion Wp Versión PDFPresentacion Wp Versión PDF
Presentacion Wp Versión PDFJosé Fonseca
 
Optimiza WordPress y a correr - WordCamp Cantabria 2015 - @DarioBF
Optimiza WordPress y a correr - WordCamp Cantabria 2015 - @DarioBFOptimiza WordPress y a correr - WordCamp Cantabria 2015 - @DarioBF
Optimiza WordPress y a correr - WordCamp Cantabria 2015 - @DarioBFDarío BF
 
Tutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigTutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigMarcos Labad
 

La actualidad más candente (7)

desarrolo de sitios web php y mysql
desarrolo de sitios web php y mysqldesarrolo de sitios web php y mysql
desarrolo de sitios web php y mysql
 
WordCamp Bilbao - De HTML a WordPress - @DarioBF
WordCamp Bilbao - De HTML a WordPress - @DarioBFWordCamp Bilbao - De HTML a WordPress - @DarioBF
WordCamp Bilbao - De HTML a WordPress - @DarioBF
 
HTML5 y CSS3 ¿Imprescindibles?
HTML5 y CSS3 ¿Imprescindibles?HTML5 y CSS3 ¿Imprescindibles?
HTML5 y CSS3 ¿Imprescindibles?
 
Presentacion Wp Versión PDF
Presentacion Wp Versión PDFPresentacion Wp Versión PDF
Presentacion Wp Versión PDF
 
Manual de introducción a CSS3
Manual de introducción a CSS3Manual de introducción a CSS3
Manual de introducción a CSS3
 
Optimiza WordPress y a correr - WordCamp Cantabria 2015 - @DarioBF
Optimiza WordPress y a correr - WordCamp Cantabria 2015 - @DarioBFOptimiza WordPress y a correr - WordCamp Cantabria 2015 - @DarioBF
Optimiza WordPress y a correr - WordCamp Cantabria 2015 - @DarioBF
 
Tutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigTutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. Twig
 

Similar a LESS un preprocesador CSS

Guia bootstrap
Guia bootstrapGuia bootstrap
Guia bootstrapljds
 
Guía Básica de CSS
Guía Básica de CSSGuía Básica de CSS
Guía Básica de CSSMariano Jofre
 
Laboratorio 3 Andres Moreno
Laboratorio 3 Andres MorenoLaboratorio 3 Andres Moreno
Laboratorio 3 Andres MorenoFelipe Moreno
 
Programacion - Php
Programacion - PhpProgramacion - Php
Programacion - PhpPROD LARD
 
Acceso a-base-de-datos-en-php
Acceso a-base-de-datos-en-phpAcceso a-base-de-datos-en-php
Acceso a-base-de-datos-en-phpJulio Cesar Salas
 
Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Juan Fede
 
2-Diseñando el encabezado.pptx
2-Diseñando el encabezado.pptx2-Diseñando el encabezado.pptx
2-Diseñando el encabezado.pptxCarlosMora267870
 
Manual de la conexión de php con sqlserver 2012
Manual de la conexión de php con sqlserver 2012Manual de la conexión de php con sqlserver 2012
Manual de la conexión de php con sqlserver 2012Gustavo Inocente Chacón
 
Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterandrewzg
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5Cycle-IT
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5Cycle-IT
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Frameworkricsoc
 
Creación de extensiones nativas
Creación de extensiones nativasCreación de extensiones nativas
Creación de extensiones nativasAngel Vazquez
 

Similar a LESS un preprocesador CSS (20)

Bootstrap, un framework CSS
Bootstrap, un framework CSSBootstrap, un framework CSS
Bootstrap, un framework CSS
 
Guia bootstrap
Guia bootstrapGuia bootstrap
Guia bootstrap
 
19 tips para css
19 tips para css19 tips para css
19 tips para css
 
Guía Básica de CSS
Guía Básica de CSSGuía Básica de CSS
Guía Básica de CSS
 
Laboratorio 3 Andres Moreno
Laboratorio 3 Andres MorenoLaboratorio 3 Andres Moreno
Laboratorio 3 Andres Moreno
 
Presentación CSS y HTML en Gummurcia
Presentación CSS y HTML en GummurciaPresentación CSS y HTML en Gummurcia
Presentación CSS y HTML en Gummurcia
 
Programacion - Php
Programacion - PhpProgramacion - Php
Programacion - Php
 
nn
nnnn
nn
 
Acceso a-base-de-datos-en-php
Acceso a-base-de-datos-en-phpAcceso a-base-de-datos-en-php
Acceso a-base-de-datos-en-php
 
Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7Tutorial CodeIgniter + Netbeans 7
Tutorial CodeIgniter + Netbeans 7
 
Capas en html
Capas en htmlCapas en html
Capas en html
 
2-Diseñando el encabezado.pptx
2-Diseñando el encabezado.pptx2-Diseñando el encabezado.pptx
2-Diseñando el encabezado.pptx
 
Manual de la conexión de php con sqlserver 2012
Manual de la conexión de php con sqlserver 2012Manual de la conexión de php con sqlserver 2012
Manual de la conexión de php con sqlserver 2012
 
Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniter
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5
 
Tutorial hacer un crud con prado
Tutorial hacer un crud con pradoTutorial hacer un crud con prado
Tutorial hacer un crud con prado
 
Desarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend FrameworkDesarrollo Aplicaciones Zend Framework
Desarrollo Aplicaciones Zend Framework
 
Creación de extensiones nativas
Creación de extensiones nativasCreación de extensiones nativas
Creación de extensiones nativas
 
Manual html
Manual htmlManual html
Manual html
 

Más de Adolfo Sanz De Diego

De 0 a 100 con Bash Shell Scripting y AWK
De 0 a 100 con Bash Shell Scripting y AWKDe 0 a 100 con Bash Shell Scripting y AWK
De 0 a 100 con Bash Shell Scripting y AWKAdolfo Sanz De Diego
 
Desarrollo de aplicaciones descentralizadas en la Blockchain de Ethereum
Desarrollo de aplicaciones descentralizadas en la Blockchain de EthereumDesarrollo de aplicaciones descentralizadas en la Blockchain de Ethereum
Desarrollo de aplicaciones descentralizadas en la Blockchain de EthereumAdolfo Sanz De Diego
 
Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterAdolfo Sanz De Diego
 
Codemotion 2017 - La Revolución del Software Libre
Codemotion 2017 - La Revolución del Software LibreCodemotion 2017 - La Revolución del Software Libre
Codemotion 2017 - La Revolución del Software LibreAdolfo Sanz De Diego
 
Open Expo 2017 - La Revolución del Software Libre
Open Expo 2017 - La Revolución del Software LibreOpen Expo 2017 - La Revolución del Software Libre
Open Expo 2017 - La Revolución del Software LibreAdolfo Sanz De Diego
 
JustiApps #hackTheJustice - Y si quiero desarrollar mi propia app, ¿qué debo ...
JustiApps #hackTheJustice - Y si quiero desarrollar mi propia app, ¿qué debo ...JustiApps #hackTheJustice - Y si quiero desarrollar mi propia app, ¿qué debo ...
JustiApps #hackTheJustice - Y si quiero desarrollar mi propia app, ¿qué debo ...Adolfo Sanz De Diego
 
¿Qué es un hackathon y por qué deberías asistir?
¿Qué es un hackathon y por qué deberías asistir?¿Qué es un hackathon y por qué deberías asistir?
¿Qué es un hackathon y por qué deberías asistir?Adolfo Sanz De Diego
 
Nuestro primer HackLab -We want you for HackthonLovers #wantu4hl
Nuestro primer HackLab -We want you for HackthonLovers #wantu4hlNuestro primer HackLab -We want you for HackthonLovers #wantu4hl
Nuestro primer HackLab -We want you for HackthonLovers #wantu4hlAdolfo Sanz De Diego
 

Más de Adolfo Sanz De Diego (20)

Redes
RedesRedes
Redes
 
Computación
ComputaciónComputación
Computación
 
Angular
AngularAngular
Angular
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Java 8
Java 8Java 8
Java 8
 
De 0 a 100 con Bash Shell Scripting y AWK
De 0 a 100 con Bash Shell Scripting y AWKDe 0 a 100 con Bash Shell Scripting y AWK
De 0 a 100 con Bash Shell Scripting y AWK
 
Desarrollo de aplicaciones descentralizadas en la Blockchain de Ethereum
Desarrollo de aplicaciones descentralizadas en la Blockchain de EthereumDesarrollo de aplicaciones descentralizadas en la Blockchain de Ethereum
Desarrollo de aplicaciones descentralizadas en la Blockchain de Ethereum
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipster
 
Codemotion 2017 - La Revolución del Software Libre
Codemotion 2017 - La Revolución del Software LibreCodemotion 2017 - La Revolución del Software Libre
Codemotion 2017 - La Revolución del Software Libre
 
Git, Github y Markdown
Git, Github y MarkdownGit, Github y Markdown
Git, Github y Markdown
 
Open Expo 2017 - La Revolución del Software Libre
Open Expo 2017 - La Revolución del Software LibreOpen Expo 2017 - La Revolución del Software Libre
Open Expo 2017 - La Revolución del Software Libre
 
JustiApps #hackTheJustice - Y si quiero desarrollar mi propia app, ¿qué debo ...
JustiApps #hackTheJustice - Y si quiero desarrollar mi propia app, ¿qué debo ...JustiApps #hackTheJustice - Y si quiero desarrollar mi propia app, ¿qué debo ...
JustiApps #hackTheJustice - Y si quiero desarrollar mi propia app, ¿qué debo ...
 
¿Qué es un hackathon y por qué deberías asistir?
¿Qué es un hackathon y por qué deberías asistir?¿Qué es un hackathon y por qué deberías asistir?
¿Qué es un hackathon y por qué deberías asistir?
 
Codemotion 2016 - Hackathones 101
Codemotion 2016 - Hackathones 101Codemotion 2016 - Hackathones 101
Codemotion 2016 - Hackathones 101
 
Hackeando el #psd2Hackathon
Hackeando el #psd2HackathonHackeando el #psd2Hackathon
Hackeando el #psd2Hackathon
 
Open Expo 2016 - Ética Hacker
Open Expo 2016 - Ética HackerOpen Expo 2016 - Ética Hacker
Open Expo 2016 - Ética Hacker
 
Nuestro primer HackLab -We want you for HackthonLovers #wantu4hl
Nuestro primer HackLab -We want you for HackthonLovers #wantu4hlNuestro primer HackLab -We want you for HackthonLovers #wantu4hl
Nuestro primer HackLab -We want you for HackthonLovers #wantu4hl
 
T3chFest - 2016 - Ética Hacker
T3chFest - 2016 - Ética HackerT3chFest - 2016 - Ética Hacker
T3chFest - 2016 - Ética Hacker
 

Último

Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 

Último (20)

Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 

LESS un preprocesador CSS

  • 1. LESS, UN PREPROCESADOR CSS ADOLFO SANZ DE DIEGO SEPTIEMBRE 2014
  • 3. 1.1 ADOLFO SANZ DE DIEGO Antiguo programador web JEE (6 años) Hoy en día: Profesor de FP (6 años): Hardware, Sistemas Operativos Redes, Programación Formador Freelance (3 años): Java, Android JavaScript, jQuery JSF, Spring, Hibernate Groovy & Grails
  • 4. 1.2 ALGUNOS PROYECTOS Fundador y/o creador: Hackathon Lovers: Tweets Sentiment: MarkdownSlides: Co-fundador y/o co-creador: PeliTweets: Password Manager Generator: http://hackathonlovers.com http://tweetssentiment.com https://github.com/asanzdiego/markdownslides http://pelitweets.com http://pasmangen.github.io
  • 5. 1.3 ¿DONDE ENCONTRARME? Mi nick: asanzdiego AboutMe: GitHub: Twitter: Blog: LinkedIn: Google+: http://about.me/asanzdiego http://github.com/asanzdiego http://twitter.com/asanzdiego http://asanzdiego.blogspot.com.es http://www.linkedin.com/in/asanzdiego http://plus.google.com/+AdolfoSanzDeDiego
  • 7. 2.1 ¿QUÉ ES? Less es un pre-procesador de CSS. Añade características como variables, mixins, funciones, etc.
  • 8. 2.2 VENTAJAS El CSS es así más fácil de mantener, personalizable y extensible. Less (con respecto a otros pre-procesadores CSS) tiene una sintaxis parecida a CSS.
  • 9. 2.3 CARACTERÍSTICAS Less se puede ejecutar desde NodeJS, desde un navegador, o desde Rhino. Además existen muchas herramientas que permiten compilar los archivos y ver los cambios en caliente.
  • 11. 3.1 INSTALACIÓN La forma más sencilla de instalar Less, es a través de la npm, el gestor de paquetes de NodeJS: $ npm install -g less
  • 12. 3.2 LÍNEA DE COMANDOS Una vez instalado, se puede compilar desde la línea de comandos: $ lessc styles.less > styles.css
  • 13. 3.3 DESDE NODEJS (I) El siguiente código: var less = require('less'); less.render( '.class { width: (1 + 1) }', function (e, css) { console.log(css); } );
  • 14. 3.4 DESDE NODEJS (II) Sacará por pantalla: .class { width: 2; }
  • 15. 3.5 CON RHINO Rhino te permite usar JavaScript desde una Máquina Virtual de Java java -jar js.jar -f less-rhino-<version>.js lessc-rhino-<version>.js styles.less styles.css
  • 16. 3.6 DESDE EL NAVEGADOR (I) Es la forma más fácil para empezar, pero no es recomendable usarlo así en producción. Se recomienda pre-compilar usando NodeJS, Rhino, o una de las muchas herramientas de terceros disponibles.
  • 17. 3.7 DESDE EL NAVEGADOR (II) Enlazar tu archivo less que quieras precompilar: <link rel="stylesheet/less" type="text/css" href="styles.less" />
  • 18. 3.8 DESDE EL NAVEGADOR (II) Descargar: Enlazar el js de less: https://github.com/less/less.js/archive/master.zip <script src="less.js" type="text/javascript"> </script>
  • 19. 3.9 DESDE EL NAVEGADOR (III) Consejos; Enlaza tus archivos a precompilar antes que la librería de less. Si hay más de un archivo a precompilar, estos se compilan de forma independiente.
  • 21. 4.1 VARIABLES (I) El siguiente código: @nice-blue: #5B83AD; @light-blue: @nice-blue + #111; #header { color: @light-blue; }
  • 22. 4.2 VARIABLES (II) Les compila a: #header { color: #6c94be; } Nota: las variables son en realidad "constantes" ya que sólo pueden ser definidas una vez.
  • 23. 4.3 EXTEND Son una forma de herencia: .animal { background-color: black; color: white; }. bear { &:extend(.animal); background-color: brown; }
  • 24. 4.4 MIXINS (I) Los Mixins son una forma de reutilizar propiedades ya definidas: Imaginemos la clase .bordered: .bordered { border-top: dotted 1px black; border-bottom: solid 2px black; }
  • 25. 4.5 MIXINS (II) Lo podemos usar así: #menu a { color: #111; .bordered; } .post a { color: red; .bordered; } Nota: Además de clases, también se pueden utilizar #ids como mixins.
  • 26. 4.6 REGLAS ANIDADAS (I) Supongamos que tenemos el siguiente CSS: #header { color: black; } #header a { color: blue; } #header a:hover { color: red; }
  • 27. 4.7 REGLAS ANIDADAS (II) Pues con Less se puede escribir así: #header { color: black; a { color: blue; &:hover { color: red; } } } Se pueden usar pseudo-elementos, y llamar al selector padre actual, con &:
  • 28. 4.8 MEDIAS QUERIES ANIDADAS (I) El siguiente código: @media screen { .screencolor { color: green; } } @media screen and (min-width: 768px) { .screencolor { color: red; } } @media tv { .screencolor { color: black; } }
  • 29. 4.9 MEDIAS QUERIES ANIDADAS (II) Se podría escribir: .screencolor{ @media screen { color: green; @media (min-width:768px) { color: red; } } @media tv { color: black; } }
  • 30. 4.10 OPERACIONES (I) Less puede hacer operaciones con números, colores o variables. Además sabe diferenciar cuando es un número o un color.
  • 31. 4.11 OPERACIONES (II) @base: 5%; @filler: @base * 2; @other: @base + @filler; @base-color: #888 / 4; background-color: @base-color + #111; height: 100% / 2 + @other;
  • 32. 4.12 FUNCIONES Less dispone de una variedad de funciones matemáticas, que manipulan cadenas, y que transforman los colores: @base: #f04615; @list: 200, 500, 1200; .class { width: extract(@list, 3); color: saturate(@base, 5%); background-color: lighten(@base, 25%); }
  • 33. 4.13 NAMESPACES (I) A veces, podemos querer agrupar mixins, por motivos de organización, o simplemente para encapsularlos.
  • 34. 4.14 NAMESPACES (II) Veamos como podemos agrupar varios mixins: #bundle { .button { border: 1px solid black; background-color: grey; } .tab { ... } .citation { ... } }
  • 35. 4.15 NAMESPACES (III) Ahora podemos utilizar el mixin .button que está en el namespace #bundle de esta forma: #header a { color: orange; #bundle > .button; }
  • 36. 4.16 SCOPE Los ámbitos de las variables en Less es muy similar a otros lenguajes: @var: red; #page { @var: white; #header { color: @var; // white } }
  • 37. 4.17 COMENTARIOS Con //... y con /* ... */ /* One hell of a block style comment! */ @var: red; // Get in line! @var: white;
  • 38. 4.18 IMPORTS // foo.less is imported @import "foo"; // foo.less is imported @import "foo.less"; // foo.php imported as a less file @import "foo.php"; // foo.css imported as a css file @import "foo.css";
  • 40. 5.1 ¿POR QUÉ? (I) Las variables se usan para no tener que repetir constantemente los mismos valores, con lo que se consigue además un código más fácil de mantener: a, .link { color: #428bca; }. widget { color: #fff; background: #428bca; }
  • 41. 5.2 ¿POR QUÉ? (II) Con Less quedaría: @color: #428bca a, .link { color: @color; }. widget { color: #fff; background: @color; }
  • 42. 5.3 SELECTORES (I) También se pueden usar como selectores: @mySelector: banner; .@{mySelector} { font-weight: bold; line-height: 40px; margin: 0 auto; }
  • 43. 5.4 SELECTORES (II) Compilado con Less quedaría: .banner { font-weight: bold; line-height: 40px; margin: 0 auto; }
  • 44. 5.5 URLS También se pueden usar URLs: @images: "../img"; body { color: #444; background: url("@{images}/white-sand.png"); }
  • 45. 5.6 PROPIEDADES (I) También se pueden usar como propiedades: @property: color; .widget { @{property}: #0ee; background-@{property}: #999; }
  • 46. 5.7 PROPIEDADES (II) Compilado con Less quedaría: .widget { color: #0ee; background-color: #999; }
  • 47. 5.8 NOMBRES DE LAS VARIABLES (I) También se pueden usar variables como nombres de otras variables: @fnord: "I am fnord."; @var: "fnord"; content: @@var;
  • 48. 5.9 NOMBRES DE LAS VARIABLES (II) Compilado con Less quedaría: content: "I am fnord.";
  • 49. 5.10 CARGA PEREZOSA (I) Las variables no tienen que ser declaradas antes de ser utilizados. Eso es válido: .lazy-eval { width: @var; } @var: @a; @a: 9%;
  • 50. 5.11 CARGA PEREZOSA (II) Compilado con Less quedaría: .lazy-eval { width: 9%; }
  • 51. 5.12 ÁMBITOS (I) Al definir una variable dos veces, se utiliza la última definición de la variable: @var: 0; .class { @var: 1; .brass { @var: 2; three: @var; @var: 3; } one: @var; }
  • 52. 5.13 ÁMBITOS (II) Compilado con Less quedaría: .class { one: 1; }. class .brass { three: 3; }
  • 54. 6.1 CASO DE USO (I) Imagino que tenemos lo siguiente: .animal { background-color: black; color: white; } Y queremos tener un subtipo de animal que sobrescriba la propiedad background-color.
  • 55. 6.2 CASO DE USO (II) Podemos hacer lo siguiente: <a class="animal bear">Bear</a> .animal { background-color: black; color: white; }. bear { background-color: brown; }
  • 56. 6.3 CASO DE USO (III) O podemos simplificar el html y usar extend: <a class="bear">Bear</a> .animal { background-color: black; color: white; }. bear { &:extend(.animal); background-color: brown; }
  • 57. 6.4 REDUCE EL TAMAÑO DEL CSS (I) Ejemplo de mixin: .my-inline-block() { display: inline-block; font-size: 0; }. thing1 { .my-inline-block; }. thing2 { .my-inline-block; }
  • 58. 6.5 REDUCE EL TAMAÑO DEL CSS (II) Less lo compila a: .thing1 { display: inline-block; font-size: 0; }. thing2 { display: inline-block; font-size: 0; }
  • 59. 6.6 REDUCE EL TAMAÑO DEL CSS (III) Con extends: .my-inline-block { display: inline-block; font-size: 0; }. thing1 { &:extend(.my-inline-block); }. thing2 { &:extend(.my-inline-block); }
  • 60. 6.7 REDUCE EL TAMAÑO DEL CSS (IV) Less lo compila a: .my-inline-block, .thing1, .thing2 { display: inline-block; font-size: 0; }
  • 62. 7.1 SELECTORES Se pueden hacer Mixins tanto con selectores de clase como con selectores de identificación: .a, #b { color: red; }. mixin-class { .a(); }. mixin-id { #b(); }
  • 63. 7.2 NO EXPORTAR MIXINS (I) Si no quieres que el Mixin sea exportado al CSS, utiliza los paréntesis: .my-mixin { color: black; }. my-other-mixin() { background: white; }. class { .my-mixin; .my-other-mixin; }
  • 64. 7.3 NO EXPORTAR MIXINS (II) Less lo compila a: .my-mixin { color: black; }. class { color: black; background: white; }
  • 65. 7.4 PSEUDO-CLASES (I) Los Mixins también soportan pseudo-clases: .my-hover-mixin() { &:hover { border: 1px solid red; } } button { .my-hover-mixin(); }
  • 66. 7.5 PSEUDO-CLASES (II) Less lo compila a: button:hover { border: 1px solid red; }
  • 67. 7.6 NAMESPACES (I) Podemos crear un namespace con varios mixins: #outer { .inner { color: red; } }
  • 68. 7.7 NAMESPACES (II) Para llamar al Mixin, los parentesis, el espacio y el > es opcional, así que se puede hacer de todas estas formas: #outer > .inner; #outer > .inner(); #outer .inner; #outer .inner(); #outer.inner; #outer.inner();
  • 69. 7.8 !IMPORTANT KEYWORD (I) Detrás de un Mixin, al compilar pone todo como importante: .foo () { background: #f5f5f5; color: #fff; }. unimportant { .foo(); }. important { .foo() !important; }
  • 70. 7.9 !IMPORTANT KEYWORD (II) Less lo compila a: .unimportant { background: #f5f5f5; color: #fff; }. important { background: #f5f5f5 !important; color: #fff !important; }
  • 72. 8.1 PARÁMETROS (I) Los Mixins también puede tomar parámetros: .border-radius(@radius) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } #header { .border-radius(4px); }
  • 73. 8.2 PARÁMETROS (II) Less lo compila a: #header { -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; }
  • 74. 8.3 VALOR POR DEFECTO (I) Los Mixins también puede tomar parámetros con un valor por defecto: .border-radius(@radius: 5px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } #header { .border-radius; }
  • 75. 8.4 VALOR POR DEFECTO (II) Less lo compila a: #header { -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; }
  • 76. 8.5 PARÁMETROS MÚLTIPLES (I) Los parámetros se pueden separar por coma (,) o por punto y coma (;). Se recomienda el punto y coma (;).
  • 77. 8.6 PARÁMETROS MÚLTIPLES (II) La coma (,) tiene doble sentido: se puede interpretar como un separador de parámetros Mixin o como separador de los elementos de una lista. Si el compilador encuentra al menos un punto y coma (;) asume que los argumentos se separan por punto y coma y los comas pertenecen a listas.
  • 78. 8.7 PARÁMETROS MÚLTIPLES (III) .name(1, 2, 3; something, else) 2 parámetros, cada uno es una lista .name(1, 2, 3) 3 parámetros, cada uno contiene un número .name(1, 2, 3;) 1 parámetro, que es una lista .name(@param1: red, blue;) 1 parámetro, con una lista como valor predeterminado
  • 79. 8.8 PARÁMETROS MÚLTIPLES (IV) Se puede tener varios mixins con el mismo nombre y el mismo número de parámetros, pues Less utilizará todos los posibles: .mixin(@color) { color: @color; }. mixin(@color; @padding:2) { padding: @padding; }. mixin(@color; @padding; @margin: 2) { margin: @margin; }. some .selector div { .mixin(#008000); }
  • 80. 8.9 PARÁMETROS MÚLTIPLES (V) Less lo compila a: .some .selector div { color-1: #008000; padding-2: 2; }
  • 81. 8.10 PARÁMETROS CON NOMBRES (I) Se pueden usar parámetros con nombre: .mixin( @color: black; @margin: 10px; @padding: 20px) { ... }. class1 { .mixin( @margin: 20px; @color: #33acfe); }. class2 { .mixin( #efca44; @padding: 40px); }
  • 82. 8.11 PARÁMETROS CON NOMBRES (II) Less lo compila a: .class1 { color: #33acfe; margin: 20px; padding: 20px; }. class2 { color: #efca44; margin: 10px; padding: 40px; }
  • 83. 8.12 @ARGUMENTS (I) Podemos coger todos los parámetros de entrada juntos: .box-shadow( @x: 0; @y: 0; @blur: 1px; @color: #000) { -webkit-box-shadow: @arguments; -moz-box-shadow: @arguments; box-shadow: @arguments; }. big-block { .box-shadow(2px; 5px); }
  • 84. 8.13 @ARGUMENTS (II) Less lo compila a: .big-block { -webkit-box-shadow: 2px 5px 1px #000; -moz-box-shadow: 2px 5px 1px #000; box-shadow: 2px 5px 1px #000; }
  • 85. 8.14 ... Podemos permitir que el Mixin admita varios parámetros: // matches 0-N arguments .mixin(...) { // matches exactly 0 arguments .mixin() { // matches 0-1 arguments .mixin(@a: 1) { // matches 0-N arguments .mixin(@a: 1; ...) { // matches 1-N arguments .mixin(@a; ...) {
  • 86. 8.15 @REST Coge todos los parámetros de ...: .mixin(@a; @rest...) { /* @rest recoge todos los parámetros después de @a */ /* @arguments recoge todos los parámetros (incluido @a) */ }
  • 87. 8.16 PATTERN MATCHING (I) Si queremos que se ejecute un mixin dependiendo del valor de una variable: .mixin(dark; @color) { color: darken(@color, 10%); }. mixin(light; @color) { color: lighten(@color, 10%); }. mixin(@_; @color) { /* all */ display: block; } @switch: light; .class { .mixin(@switch; #888); }
  • 88. 8.17 PATTERN MATCHING (II) Less lo compila a: .class { color: #a2a2a2; display: block; }
  • 89. 8.18 MIXINS COMO FUNCIONES (I) Todas las variables definidas en un mixin son visibles y pueden ser utilizados en el ámbito de donde es llamado: .mixin() { @width: 100%; @height: 200px; } .caller { .mixin(); width: @width; height: @height; }
  • 90. 8.19 MIXINS COMO FUNCIONES (II) Less lo compila a: .caller { width: 100%; height: 200px; }
  • 91. 8.20 MIXINS COMO FUNCIONES (III) Otro ejemplo: .average(@x, @y) { @average: ((@x + @y) / 2); } div { // "call" the mixin .average(16px, 50px); // use its "return" value padding: @average; }
  • 92. 8.21 MIXINS COMO FUNCIONES (IV) Less lo compila a: div { padding: 33px; }
  • 94. 9.1 SINTAXIS (I) Muy parecida a las Media Queries: .mixin (@a) when (lightness(@a) >= 50%) { background-color: black; }. mixin (@a) when (lightness(@a) < 50%) { background-color: white; }. mixin (@a) { color: @a; }. class1 { .mixin(#ddd) } .class2 { .mixin(#555) }
  • 95. 9.2 SINTAXIS (II) Less lo compila a: .class1 { background-color: black; color: #ddd; }. class2 { background-color: white; color: #555; }
  • 96. 9.3 OPERADORES Se pueden usar los operadores >, >=, =, =<, < @media: mobile; .mixin (@a) when (@media = mobile) { ... } .mixin (@a) when (@media = desktop) { ... } .max (@a; @b) when (@a > @b) { width: @a } .max (@a; @b) when (@a < @b) { width: @b }
  • 97. 9.4 AND Como en las Media Queries, usando AND todas las sentencias se tienen que cumplir: .mixin (@a) when (isnumber(@a)) and (@a > 0) { ... }
  • 98. 9.5 COMA (,) Como en las Media Queries, separar sentencias con comas (,) equivale a un OR, por lo que se entrará en el Mixin en cuanto se cumpla una de las sentencias: .mixin (@a) when (@a > 10), (@a < -10) { ... }
  • 99. 9.6 NOT Como en las Media Queries, usando NOT se niega una sentencia: .mixin (@b) when not (@b > 0) { ... }
  • 100. 9.7 COMPROBAR TIPOS Tenemos las siguientes funciones para comprobar tipos: isnumber isstring iscolor iskeyword isurl
  • 101. 9.8 COMPROBAR UNIDADES Tenemos las siguientes funciones para comprobar unidades: ispixel isem ispercentage isunit
  • 102. 9.9 LOOPS (I) Los Mixins se pueden llamar así mismos. Con esta recursividad se pueden crear loops: .loop(@counter) when (@counter > 0) { // next iteration .loop((@counter - 1)); // code for each iteration width: (10px * @counter); } div { .loop(5); // launch the loop }
  • 103. 9.10 LOOPS (II) Less lo compila a: div { width: 10px; width: 20px; width: 30px; width: 40px; width: 50px; }
  • 104. 9.11 LOOPS (III) Podríamos hacer un grid de CSS: .generate-columns(4); .generate-columns(@n, @i: 1) when (@i =< @n) { .column-@{i} { width: (@i * 100% / @n); } .generate-columns(@n, (@i + 1)); }
  • 105. 9.12 LOOPS (IV) Less lo compila a: .column-1 { width: 25%; }. column-2 { width: 50%; }. column-3 { width: 75%; }. column-4 { width: 100%; }
  • 107. 10.1 ¿QUÉ ES? Permite combinar propiedades con coma (,) o con espacio ( ), en una sola propiedad.
  • 108. 10.2 COMA (I) Ejemplo con coma (,): .mixin() { box-shadow+: inset 0 0 10px #555; }. myclass { .mixin(); box-shadow+: 0 0 20px black; }
  • 109. 10.3 COMA (II) Less lo compila a: .myclass { box-shadow: inset 0 0 10px #555, 0 0 20px black; }
  • 110. 10.4 ESPACIO (I) Ejemplo con espacio ( ): .mixin() { transform+_: scale(2); }. myclass { .mixin(); transform+_: rotate(15deg); }
  • 111. 10.5 ESPACIO (II) Less lo compila a: .myclass { transform: scale(2) rotate(15deg); }
  • 112. 10.6 EXPLICITO Para prevenir cualquier join involuntario, merge requiere que pongas + o +_ de forma explícita en la declaración de cada uno de los jois.
  • 114. 11.1 EL OPERADOR & (I) El operador & representa el selector padre, y suele ser usado para modificar clases o usar pseudoclases: a { color: blue; &:hover { color: green; } }
  • 115. 11.2 EL OPERADOR & (II) Less locompila a: a { color: blue; } a:hover { color: green; }
  • 116. 11.3 CLASES REPETITIVAS (I) Otro uso, a parte de las pseudoclases, es el de producir nombres de clases repetitivos: .button { &-ok { background-image: url("ok.png"); } &-cancel { background-image: url("cancel.png"); } &-custom { background-image: url("custom.png"); } }
  • 117. 11.4 CLASES REPETITIVAS (II) Less lo compila a: .button-ok { background-image: url("ok.png"); }. button-cancel { background-image: url("cancel.png"); }. button-custom { background-image: url("custom.png"); }
  • 118. 11.5 MULTIPLES & (I) Se puede repetir el padre: .link { & + & { color: red; } & & { color: green; } && { color: blue; } &, &ish { color: cyan; } }
  • 119. 11.6 MULTIPLES & (II) Less lo compila a : .link + .link { color: red; }. link .link { color: green; }. link.link { color: blue; }. link, .linkish { color: cyan; }
  • 120. 11.7 MULTIPLES & (III) Otro ejemplo: .grand { .parent { & > & { color: red; } & & { color: green; } && { color: blue; } &, &ish { color: cyan; } } }
  • 121. 11.8 MULTIPLES & (IV) Less lo compila a : .grand .parent > .grand .parent { color: red; }. grand .parent .grand .parent { color: green; }. grand .parent.grand .parent { color: blue; }. grand .parent, .grand .parentish { color: cyan; }
  • 122. 11.9 CAMBIAR EL ORDEN (I) En algunos caso puede ser util cambiar el orden del hijo con respecto al padre: .header { .menu { border-radius: 5px; .no-borderradius & { background-image: url('img.png'); } } }
  • 123. 11.10 CAMBIAR EL ORDEN (II) Less lo compila a: .header .menu { border-radius: 5px; }. no-borderradius .header .menu { background-image: url('img.png'); }
  • 124. 11.11 EXPLOSIÓN COMBINATORIA (I) El operador & puede ser usado para generar todas las posibles permutaciones de los selectores padre: a, ul, li { border-top: 2px dotted #366; & + & { border-top: 0; } }
  • 125. 11.12 EXPLOSIÓN COMBINATORIA (II) Less lo compila a: a, ul, li { border-top: 2px dotted #366; } a + a, a + ul, a + li, ul + a, ul + ul, ul + li, li + a, li + ul, li + li { border-top: 0; }
  • 127. 12.1 RESUMEN Misc Functions String Functions List Functions Math Functions Type Functions Color Functions http://lesscss.org/functions/
  • 128. 12.2 MISC FUNCTIONS http://lesscss.org/functions/#misc-functions color convert data-uri default unit get-unit svg-gradient
  • 129. 12.3 STRING FUNCTIONS : http://lesscss.org/functions/#string-functions escape e % format replace
  • 130. 12.4 LIST FUNCTIONS http://lesscss.org/functions/#list-functions length extract
  • 131. 12.5 MATH FUNCTIONS (I) http://lesscss.org/functions/#math-functions ceil floor percentage round sqrt abs pow mod min max
  • 132. 12.6 MATH FUNCTIONS (II) http://lesscss.org/functions/#math-functions sin asin cos acos tan atan pi
  • 133. 12.7 TYPE FUNCTIONS http://lesscss.org/functions/#type-functions isnumber isstring iscolor iskeyword isurl ispixel isem ispercentage isunit
  • 134. 12.8 COLOR DEFINITION FUNCTIONS rgb rgba argb hsl hsla hsv hsva http://lesscss.org/functions/#color-definitions
  • 135. 12.9 COLOR CHANNEL FUNCTIONS hue saturation lightness hsvhue hsvsaturation hsvvalue red green blue alpha luma luminance http://lesscss.org/functions/#color-channel
  • 136. 12.10 COLOR OPERATION FUNCTIONS saturate desaturate lighten darken fadein fadeout fade spin mix greyscale contrast http://lesscss.org/functions/#color-operations
  • 137. 12.11 COLOR BLENDING FUNCTIONS multiply screen overlay softlight hardlight difference exclusion average negation http://lesscss.org/functions/#color-blending
  • 139. 13.1 LICENCIA Estas transparencias están hechas con: MarkdownSlides: https://github.com/asanzdiego/markdownslides Estas transparencias están bajo una licencia Creative Commons Reconocimiento-CompartirIgual 3.0: http://creativecommons.org/licenses/by-sa/3.0/es
  • 140. 13.2 FUENTES Transparencias: https://github.com/asanzdiego/curso-interfaces-web- 2014/tree/master/04-less/slides Código: https://github.com/asanzdiego/curso-interfaces-web- 2014/tree/master/01-less/src
  • 141. 13.3 BIBLIOGRAFÍA Documentación oficial de Less http://lesscss.org