{"id":1028,"date":"2015-09-04T15:25:12","date_gmt":"2015-09-04T15:25:12","guid":{"rendered":"http:\/\/maquetando.com\/?p=1028"},"modified":"2015-09-04T16:46:50","modified_gmt":"2015-09-04T16:46:50","slug":"sass-y-less-el-futuro-de-css","status":"publish","type":"post","link":"https:\/\/orpot.com\/blog\/sass-y-less-el-futuro-de-css\/","title":{"rendered":"SASS y LESS  : El presente de CSS"},"content":{"rendered":"<p><a href=\"http:\/\/maquetando.com\/wp-content\/uploads\/2015\/09\/less-vs-sass-its-time-to-switch-to-sass-by-Zing-Design.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1037\" src=\"http:\/\/maquetando.com\/wp-content\/uploads\/2015\/09\/less-vs-sass-its-time-to-switch-to-sass-by-Zing-Design.png\" alt=\"less-vs-sass-its-time-to-switch-to-sass-by-Zing-Design\" width=\"580\" height=\"410\" srcset=\"https:\/\/orpot.com\/blog\/wp-content\/uploads\/2015\/09\/less-vs-sass-its-time-to-switch-to-sass-by-Zing-Design.png 580w, https:\/\/orpot.com\/blog\/wp-content\/uploads\/2015\/09\/less-vs-sass-its-time-to-switch-to-sass-by-Zing-Design-300x212.png 300w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p>A medida que la web sigue avanzando m\u00e1s personas est\u00e1n recurriendo a los\u00a0pre-procesadores CSS (si sigues escribiendo\u00a0CSS puro me temo que \u00a0estas perdiendo la mitad tu vida detr\u00e1s de ese ordenador) \u00a0 hoy hablaremos de LESS y SASS\u00a0,\u00a0\u00a0no hay duda\u00a0de que ambos son los preferidos por la comunidad, tambien esta stylus pero lo abordemos en otro post .<\/p>\n<h3>\u00bfQue es un pre-procesador CSS?<\/h3>\n<p>Un preprocesador de CSS es una herramienta que nos permite escribir pseudo-c\u00f3digo CSS que luego ser\u00e1 convertido a CSS real. Ese pseudo-c\u00f3digo se conforma de variables, condiciones, bucles o funciones. Podr\u00edamos decir que tenemos un lenguaje de programaci\u00f3n que genera CSS.<\/p>\n<p>El objetivo de estos preprocesadores es tener un c\u00f3digo m\u00e1s sencillo de mantener y editar. Los preprocesadores incluyen caracter\u00edsticas tales como variables, funciones, mixins, anidaci\u00f3n o modularidad.<\/p>\n<h2>SASS<\/h2>\n<p><a href=\"http:\/\/maquetando.com\/wp-content\/uploads\/2015\/09\/sass.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1035\" src=\"http:\/\/maquetando.com\/wp-content\/uploads\/2015\/09\/sass.png\" alt=\"sass\" width=\"975\" height=\"731\" srcset=\"https:\/\/orpot.com\/blog\/wp-content\/uploads\/2015\/09\/sass.png 1024w, https:\/\/orpot.com\/blog\/wp-content\/uploads\/2015\/09\/sass-600x450.png 600w, https:\/\/orpot.com\/blog\/wp-content\/uploads\/2015\/09\/sass-300x225.png 300w, https:\/\/orpot.com\/blog\/wp-content\/uploads\/2015\/09\/sass-82x60.png 82w, https:\/\/orpot.com\/blog\/wp-content\/uploads\/2015\/09\/sass-65x50.png 65w\" sizes=\"(max-width: 975px) 100vw, 975px\" \/><\/a><\/p>\n<p>SASS se desarrolla en 2007 (si desde 2007 hay pre-procesadores, muchos los descubrimos a\u00f1os despues) , SASS ha convertido en el pre-procesador mas utilizado &#8211; y por una buena raz\u00f3n. A pesar de que ha existido durante casi una d\u00e9cada los desarrolladores\u00a0detr\u00e1s SASS siguen ampliar su funcionalidad .<\/p>\n<p>SASS sobresale al utilizarse con frameworks como Compass y Bourbon , ya que estos anexan la funcionalidad que quiz\u00e1 SASS deber\u00eda tener de forma nativa.<\/p>\n<h3>Sintaxis<\/h3>\n<p>SASS permite el uso de dos sintaxis diferentes para crear sus archivos. La primera, conocida como SCSS (del ingl\u00e9s, Sassy CSS) .<\/p>\n<p>Adem\u00e1s, SCSS es capaz de entender la mayor\u00eda de hacks de CSS y la sintaxis espec\u00edfica de los navegadores, como por ejemplo la vieja sintaxis filter de Internet Explorer. Obviamente esta sintaxis b\u00e1sica de CSS se ha mejorado con las caracter\u00edsticas de Sass.<\/p>\n<p>Los archivos creados con esta sintaxis utilizan la extensi\u00f3n .scss.<\/p>\n<pre class=\"lang:sass decode:true\">\/\/ Variable\r\n$primary-color: hotpink;\r\n\r\n\/\/ Mixin\r\n@mixin border-radius($radius) {\r\n    -webkit-border-radius: $radius;\r\n    -moz-border-radius: $radius;\r\n    border-radius: $radius;\r\n}\r\n\r\n.my-element {\r\n    color: $primary-color;\r\n    width: 100%;\r\n    overflow: hidden;\r\n}\r\n\r\n.my-other-element {\r\n    @include border-radius(5px);\r\n}<\/pre>\n<p>La segunda sintaxis, conocida como \u00absintaxis indentada\u00bb o simplemente \u00absintaxis sass\u00bb permite escribir los estilos CSS de manera m\u00e1s concisa. En este caso, el anidamiento de selectores se indica con tabulaciones en vez de con llaves y las propiedades se separan con saltos de l\u00ednea en vez de con puntos y coma.<\/p>\n<pre class=\"lang:sass decode:true\">\/\/ Variable\r\n!primary-color= hotpink\r\n\r\n\/\/ Mixin\r\n=border-radius(!radius)\r\n    -webkit-border-radius= !radius\r\n    -moz-border-radius= !radius\r\n    border-radius= !radius\r\n\r\n.my-element\r\n    color= !primary-color\r\n    width= 100%\r\n    overflow= hidden\r\n\r\n.my-other-element\r\n    +border-radius(5px)<\/pre>\n<p>Los archivos creados con esta segunda sintaxis utilizan la extensi\u00f3n .sass<\/p>\n<p>Algunos dise\u00f1adores consideran que esta segunda sintaxis es m\u00e1s sencilla de leer y m\u00e1s r\u00e1pida de escribir que SCSS. En cualquier caso, las dos sintaxis tienen exactamente las mismas funcionalidades\u00a0.<\/p>\n<p>Una de las ventajas de\u00a0SASS\u00a0es que los archivos creados con una sintaxis pueden importar cualquier archivo creado con la otra sintaxis. Adem\u00e1s, dispones de una utilidad para la l\u00ednea de comandos que te permite convertir una sintaxis en otra.<\/p>\n<h3>Sass incluye las siguientes caracter\u00edsticas:<\/h3>\n<ul>\n<li>100% compatible con CSS3.<\/li>\n<li>Permite el uso de variables, anidamiento de estilos y mixins.<\/li>\n<li>Incluye numerosas funciones para manipular con facilidad colores y otros valores.<\/li>\n<li>Permite el uso de elementos b\u00e1sicos de programaci\u00f3n como las directivas de control y las librer\u00edas.<\/li>\n<li>Genera archivos CSS bien formateados y permite configurar su formato.<\/li>\n<li>Integraci\u00f3n con Firebug gracias a la extensi\u00f3n FireSass.<\/li>\n<\/ul>\n<h3>Instalaci\u00f3n<\/h3>\n<p>Hay dos formas de utilizar y compilar SASS \u00a0la f\u00e1cil y la dif\u00edcil.<\/p>\n<h3>La \u00abdif\u00edcil\u00bb pero mas potente :<\/h3>\n<p>SASS\u00a0\u00a0utiliza el lenguaje ruby por lo que tendremos que tenerlo instalado en nuestras maquinas \u00a0:<\/p>\n<h4>Linux<\/h4>\n<p>Si est\u00e1s usando una distribuci\u00f3n de Linux, necesitaras instalar Ruby desde el\u00a0\u00a0gestor de paquetes apt, rbenv o RVM.<\/p>\n<pre class=\"lang:ruby decode:true\">sudo su -c \"joya instalar sass\"<\/pre>\n<h4>Windows<\/h4>\n<p>Antes de empezar a usar Sass tendr\u00e1s que \u00a0instalar Ruby. La manera m\u00e1s r\u00e1pida para obtener Rub\u00ed Windows es <a href=\"http:\/\/rubyinstaller.org\/\" target=\"_blank\">utilizar instalador<\/a>\u00a0 super r\u00e1pido.<\/p>\n<p>El programa de instalaci\u00f3n tambi\u00e9n instalar\u00e1 una l\u00ednea de comandos o\u00a0\u00a0powershell Ruby que permitir\u00e1 utilizar las bibliotecas de Ruby.<\/p>\n<h4>Mac<\/h4>\n<p>Instalar SASS\u00a0\u00a0es un proceso bastante r\u00e1pido si est\u00e1s usando un Mac, felicitaciones, Ruby viene pre-instalado .<\/p>\n<h4>Instalar Sass<\/h4>\n<p>La instalaci\u00f3n de \u00a0SASS se realiza\u00a0mediante el uso de la l\u00ednea de comandos:<\/p>\n<p>Abrimos la terminal :<\/p>\n<p>En el Mac e\u00a0terminal.app viene instalado por defecto,se encuentra ubicado en la carpeta \u00abUtilidades\u00bb.<\/p>\n<p>En Windows, ejecuta\u00a0 `cmd`.<\/p>\n<p>Linux : bah! ya sabes.<\/p>\n<pre class=\"lang:ruby decode:true\">gem install sass<\/pre>\n<p>Rub\u00ed utiliza gemas para gestionar sus diversos paquetes de c\u00f3digo como Sass. En el tipo de ventana de terminal abierta:<\/p>\n<p>Esto instalar\u00e1 Sass y sus dependencia , es bastante m\u00e1gico. Si recibes un mensaje de error, entonces es probable que tengas que anteponer el comando sudo \u00a0:<\/p>\n<pre class=\"lang:default decode:true\">sudo gem install sass<\/pre>\n<p>Doble verificaci\u00f3n. Ahora debe tener Sass instalado, pero nunca est\u00e1 de mas la \u00a0doble verificaci\u00f3n, escribe esto en la terminal :<\/p>\n<p><span class=\"lang:ruby decode:true crayon-inline\">sass -v<\/span><\/p>\n<p>Si la respuesta es <span class=\"lang:ruby decode:true crayon-inline \">Sass 3.4.17 (Selective Steve)\u00a0\u00a0<\/span>\u00a0\u00a0perfecto , hemos instalado SASS , ves no doli\u00f3 tanto .<\/p>\n<h3>Compilar nuestro SCSS a CSS<\/h3>\n<p>Ahora compilaremos nuestro archivo SASS a CSS<\/p>\n<pre class=\"lang:ruby decode:true cli\">$ sass hoja_estilos.scss archivo_generado.css<\/pre>\n<p>La gran ventaja de esta forma de utilizar SASS es que es mas potente debido a la cantidad de comandos que tenemos disponibles.<\/p>\n<h3>La forma f\u00e1cil :<\/h3>\n<p><span style=\"line-height: 1.5;\">Hay un gran\u00a0\u00a0n\u00famero de aplicaciones que \u00a0conseguir\u00e1n poner a SASS \u00a0en marcha y funcionando en unos pocos minutos , existen aplicaciones gratuitas y de pago (algunas merecen el gasto) que nos ayudaran a trabajar con SASS :<\/span><\/p>\n<ul class=\"list-feature\">\n<li><a href=\"http:\/\/incident57.com\/codekit\/\">CodeKit<\/a> <span class=\"info\">(Pago)<\/span><\/li>\n<li><a href=\"http:\/\/compass.handlino.com\/\">Compass.app<\/a> <span class=\"info\">(Pago, Open Source)<\/span><\/li>\n<li><a href=\"http:\/\/hammerformac.com\/\">Hammer<\/a> <span class=\"info\">(Pago)<\/span><\/li>\n<li><a href=\"http:\/\/koala-app.com\/\">Koala<\/a> <span class=\"info\">(Open Source)<\/span><\/li>\n<li><a href=\"http:\/\/livereload.com\/\">LiveReload<\/a> <span class=\"info\">(Pago, Open Source)<\/span><\/li>\n<li><a href=\"http:\/\/mixture.io\/\">Mixture<\/a> <span class=\"info\">(Gratis)<\/span><\/li>\n<li><a href=\"https:\/\/prepros.io\/\">Prepros<\/a> <span class=\"info\">(Pago)<\/span><\/li>\n<li><a href=\"http:\/\/mhs.github.io\/scout-app\/\">Scout<\/a> <span class=\"info\">(Open Source)<\/span><\/li>\n<\/ul>\n<p>Para poder compilar nuestro archivo SCSS por ejemplo en Koala , simplemente\u00a0lo seleccionamos y convertimos , listo.<\/p>\n<p>SASS es un tema extenso pero hay suficiente material en la web para aprender, \u00a0 un recurso muy bueno es este <a href=\"https:\/\/librosweb.es\/libro\/sass\/\" target=\"_blank\">Libro Web <\/a>dedicado a SASS.<\/p>\n<h2><a href=\"http:\/\/maquetando.com\/wp-content\/uploads\/2015\/09\/less.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1036\" src=\"http:\/\/maquetando.com\/wp-content\/uploads\/2015\/09\/less.jpg\" alt=\"less\" width=\"745\" height=\"250\" srcset=\"https:\/\/orpot.com\/blog\/wp-content\/uploads\/2015\/09\/less.jpg 745w, https:\/\/orpot.com\/blog\/wp-content\/uploads\/2015\/09\/less-600x201.jpg 600w, https:\/\/orpot.com\/blog\/wp-content\/uploads\/2015\/09\/less-300x101.jpg 300w\" sizes=\"(max-width: 745px) 100vw, 745px\" \/><\/a><\/h2>\n<h2>LESS<\/h2>\n<p>Dos a\u00f1os despu\u00e9s del lanzamiento de Sass otro CSS pre-procesador lleg\u00f3 a la escena web . LESS naci\u00f3 como una gema para Ruby en \u00a02009 como una alternativa a Sass pero\u00a0desde entonces ha sido reescrito en JavaScript.<\/p>\n<p>A pesar de que no es mucha la\u00a0diferencia, algunas personas prefieren usar JavaScript sobre Ruby dicho esto , LESS\u00a0proporciona una funcionalidad muy similar a la de SASS\u00a0,sin embargo, la sintaxis es un poco diferente.<\/p>\n<p>LESS a\u00f1ade comportamiento din\u00e1mico a CSS, por ejemplo variables, mixins, operaciones y funciones. LESS puede ejecutarse del lado del servidor (usando Node.js y Rhino) o del lado del cliente (en navegadores modernos).<\/p>\n<h2>Sintaxis<\/h2>\n<p>LESS proporciona los siguientes mecanismos: variables, anidamiento, operadores, mixins y funciones. La principal diferencia entre LESS y otros pre-procesadores\u00a0CSS es que LESS permite la compilaci\u00f3n en tiempo real.<\/p>\n<p>El \u00e1mbito de las variables en LESS es muy similar al de la mayor\u00eda de lenguajes de programaci\u00f3n. Las variables y los mixins se buscan primero en el \u00e1mbito local, si no son encontrados, el compilador buscar\u00e1 en el \u00e1mbito inmediatamente superior, y as\u00ed sucesivamente.<\/p>\n<p>Una peque\u00f1a diferencia de\u00a0SASS es que usa el s\u00edmbolo @\u00a0para las variables, SASS utiliza la $, que es el signo que\u00a0\u00a0SASS\u00a0utiliza para mixins.<\/p>\n<p>Veamos un ejemplo muy sencillo de LESS :<\/p>\n<pre class=\"lang:css decode:true  \">\/\/ LESS\r\n\r\n@color: #4D926F;\r\n\r\n#header {\r\n  color: @color;\r\n}\r\nh2 {\r\n  color: @color;\r\n       span{\r\n          color:#FFF; \r\n       }\r\n\r\n}\r\n\/* CSS compilado *\/\r\n\r\n#header {\r\n color: #4D926F;\r\n   \r\n}\r\nh2 {\r\n color: #4D926F;\r\n}\r\nh2 span {\r\n     color:#FFF;\r\n}\r\n\/* Ejemplo de funcion  LESS *\/\r\n\r\n.bloqueTexto(@color:#000,@background:#FFF){\r\n       color:@color;\r\n       background:@background;\r\n}\r\n\r\n#miBloqueDeTexto {\r\n            .bloqueTexto(@color:#333,@background:#000);\r\n}\r\n#otroBloqueTexto{\r\n          &amp;nbsp;.bloqueTexto(@background:#000,@color:#FF00000);\r\n}\r\n\r\n\/*RESULTADO REUTILIZANDO LA FUNCION  CSS *\/\r\n#miBloqueDeTexto{\r\n           color:#333;\r\n           background:#000;\r\n     }\r\n#otroBloqueTexto{\r\n    background:#000;\r\n    color:#FF00000;\r\n}<\/pre>\n<p>Como vemos\u00a0por medio de la anidacion y funciones \u00a0podemos evitar reescribir una y otra vez la misma linea en CSS.<\/p>\n<h2>Instalaci\u00f3n :<\/h2>\n<p>Para empezar a utilizar LESS vamos a realizar una tarea muy simple enlazar el archivo less.js y \u00a0 styles.less en nuestro HTML \u00a0:<\/p>\n<pre class=\"lang:js decode:true\">&lt;script src=\"less.js\" type=\"text\/javascript\"&gt;&lt;\/script&gt;<\/pre>\n<p>LESS nos ofrece algunas opciones interesantes \u00a0:<\/p>\n<pre class=\"lang:js decode:true\">&lt;script type=\"text\/javascript\"&gt;\r\n    less = {\r\n        env: \"development\", \/\/ o \"production\"\r\n        async: false,       \/\/ carga las importaciones de manera as\u00edncrona\r\n        fileAsync: false,   \/\/ carga las importaciones de manera as\u00edncrona cuando \r\n                            \/\/ una p\u00e1gina usa un protocolo de archivos\r\n        poll: 1000,         \/\/ cuando est\u00e1 activado el modo guarda, tiempo en ms\r\n                            \/\/ entra consultas\r\n        functions: {},      \/\/ funciones del usuario, especificadas por nombre\r\n        dumpLineNumbers: \"comments\", \/\/ o \"mediaQuery\" o \"all\"\r\n        relativeUrls: false,\/\/ ajusta las urls para que sean relativas si false, \r\n                            \/\/ las urls se considerar\u00e1n relativas respecto al \r\n                            \/\/ fichero less de entrada\r\n        rootpath: \":\/a.com\/\"\/\/ una ruta para a\u00f1adir al comienzo de cada una de las \r\n                            \/\/ urls\r\n    };\r\n&lt;\/script&gt;\r\n<\/pre>\n<p>Depende de nuestras necesidades utilizar esas opciones , por lo regular solo se utiliza env para producci\u00f3n y desarrollo.<\/p>\n<p>Y por ultimo enlazamos nuestro archivo .less que contendr\u00e1 todos nuestros estilos :<\/p>\n<pre><code>&lt;link rel=<span class=\"string\">\"stylesheet\/less\"<\/span> type=<span class=\"string\">\"text\/css\"<\/span> href=<span class=\"string\">\"styles.less\"<\/span> \/&gt;<\/code><\/pre>\n<p><strong>NOTA :<\/strong><\/p>\n<p>Mientras trabajemos en el desarrollo del proyecto es recomendable incluir directamente el archivo SASS , para producci\u00f3n siempre sera mejor incluir el archivo CSS compilado y minimizado previamente.<\/p>\n<p>Listo, ya podemos comenzar con LESS , al igual que SASS el tema es muy extenso , \u00a0 aqui esta una pagina de <a href=\"http:\/\/amatellanes.github.io\/lesscss.org\" target=\"_blank\">referencia en espa\u00f1ol <\/a>\u00a0para que conozcas toda la funcionalidad de LESS<\/p>\n<h3>Conclusi\u00f3n<\/h3>\n<p>Ambos pre-procesadores son excelentes alternativas, LESS podr\u00eda ser mas amigable para comenzar debido a que la sintaxis no es tan \u00a0diferente a escribir CSS y no tendriamos que realizar nada en la linea de comandos , pero en lo personal creo que SASS \u00a0es mas potente , claro dependiendo el proyecto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A medida que la web sigue avanzando m\u00e1s personas est\u00e1n recurriendo a los\u00a0pre-procesadores CSS (si&hellip;<\/p>\n","protected":false},"author":1,"featured_media":1037,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,65,105,1],"tags":[],"_links":{"self":[{"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/posts\/1028"}],"collection":[{"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/comments?post=1028"}],"version-history":[{"count":18,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/posts\/1028\/revisions"}],"predecessor-version":[{"id":1050,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/posts\/1028\/revisions\/1050"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/media\/1037"}],"wp:attachment":[{"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/media?parent=1028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/categories?post=1028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/orpot.com\/blog\/wp-json\/wp\/v2\/tags?post=1028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}