====== LESS ======
Es un lenguaje que compila a CSS.
* [[http://lesscss.org/|Página oficial]]
* [[https://github.com/cloudhead/less.js/wiki|Wiki]]
Página basada en: [[http://www.genbetadev.com/desarrollo-web/less-el-lenguaje-de-hojas-de-estilo-dinamico]].
===== Uso =====
==== Agregar LESS ====
=== En JavaScript ===
=== A partir del compilador ===
Compilar:
$ lessc styles.less styles.css
Compilar en modo minified:
$ lessc styles.less styles.css -x
El compilador, por defecto, funciona con node.js. Puede ser instalado en Ubuntu con:
$ sudo apt-get install rubygems1.8
$ sudo gem install rubygems-update
$ sudo update_rubygems
$ sudo gem install less
===== Código =====
==== Variables ====
=== Definición ===
Se declaran con ''@nombre:valor;'':
@color: #a8b317;
a {
color: @color;
}
h2 {
color: @color;
}
Compila a:
a {
color: #a8b317;
}
h2 {
color: #a8b317;
}
=== Manipulación ===
Podemos operar sobre ellas:
@minWidth: 20%;
@columnLeft: @minWidth * 2;
@columnRight: @columnLeft + @minWidth;
@color: #4a785b;
.sideLeft {
background-color: @color + #111;
width: @columnLeft;
}
.sideRight {
background-color: @color;
width: @columnRight;
}
Compilaría a:
.sideLeft {
background-color: #5b896c;
width: 40%;
}
.sideRight {
background-color: #4a785b;
width: 60%;
}
=== Scope ===
@var: #333;
#page {
@var: #fff;
#header {
color: @var; // #fff
}
}
#footer {
color: @var; // #333
}
=== Inclusión de strings ===
Podemos añadir una variable string dentro de otra...
@url: "http://www.genbetadev.com";
background-image: url("@{url}/images/background.png");
==== Mixins ====
Consiste en agregar las propiedades de una clase a otra. Además podemos incluir parámetros (en el siguiente ejemplo
.round-corners (@radius: 5px) {
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
border-radius: @radius;
}
Que podría ser escrito como:
#header {
.round-corners;
}
#post {
.round-corners(16px);
}
Y compilaría:
#header {
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
}
#post {
border-radius: 16px;
-webkit-border-radius: 16px;
-moz-border-radius: 16px;
}
=== @arguments ===
''@arguments'' engloba todos los parámetros:
.shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) {
-moz-box-shadow: @arguments;
-webkit-box-shadow: @arguments;
box-shadow: @arguments;
}
.shadow(1px, 2px);
==== Anidación de reglas ====
Podemos generar reglas cuando las tenemos anidadas del estilo...
#record {
h1 {
font-family: Helvetica, Arial, sans-serif;
font-weight: bold;
font-size: 2em;
}
p {
font-size: 12px;
a {
text-decoration: none;
&:hover {
color: red;
}
}
}
}
Compilaría:
#record h1{
font-family: Helvetica, Arial, sans-serif;
font-weight: bold;
font-size: 2em;
}
#record p {
font-size: 12px;
}
#record p a {
text-decoration: none;
}
#record p a:hover {
color: red;
}
==== Funciones de color ====
lighten(@color, 10%); // devuelve un color un 10% mas "claro" que @color
darken(@color, 10%); // devuelve un color un 10% mas "oscuro" que @color
saturate(@color, 10%); // devuelve un color un 10% "más" saturado que @color
desaturate(@color, 10%); // devuelve un color un 10% "menos" saturado que @color
fadein(@color, 10%); // devuelve un color un 10% "menos" transparente que @color
fadeout(@color, 10%); // devuelve un color un 10% "más" transparente que @color
spin(@color, 10); // devuelve un color con 10 grados de tono mayor que @color
spin(@color, -10); // devuelve un color con 10 grados de tono menor que @color
hue(@color); // devuelve el canal `hue` de @color
saturation(@color); // devuelve el canal `saturation` de @color
lightness(@color); // devuelve el canal `lightness` de @color
Que luego usuaríamos...
@base: #f04615;
.class {
color: saturate(@base, 5%);
background-color: lighten(spin(@base, 8), 25%);
}
==== Espacios de nombres ====
Podremos crear las siguientes clases (''.logo .slogan .menu'') englobadas dentro de ''#main_header'':
#main_header {
.logo () {
display: block;
border: none;
background: transparent url(../media/logo.png) 0 0 scroll;
}
.slogan { ... }
.menu { ... }
...
}
Para luego, por ejemplo, utilizar ''.logo'' en otro namespace (''#header''):
#header a {
color: green;
#main_header > .logo;
}
==== Otras ====
=== Ignorar elementos ===
Si por alguna razón queremos que el compilador de LESS deje algún elemento tal cual esté escrito (por ejemplo porque no compila bien esa línea) usaremos ''~valor''.
.transparente {
filter: ~"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='image.png')";
}
=== JavaScript ===
Podemos incluir código JavaScript:
@var: `"genbetadev".toUpperCase() + ' mola!'`;
Generaría...
@var: "GENBETADEV mola!";
=== Importar ===
Podemos importar fichero .less y ficheros .css:
@import "lib.less";
@import "lib";
@import "lib.css";