141
LESS, UN PREPROCESADOR CSS ADOLFO SANZ DE DIEGO SEPTIEMBRE 2014

LESS un preprocesador CSS

Embed Size (px)

DESCRIPTION

Empiezo con una breve introducción, contando qué es 'Less' y cuales son sus principales ventajas. Sigo explicando las distintas formas con las que podemos trabajar con 'Less' En tercer lugar, hago un breve resumen de las principales características, entrando seguidamente a explicar con más detalle cada una de ellas: variables, extends, mixins, mixins paramétricos, mixins condicionales, merges, ... Para terminar, enumero las distintas funciones que posee, ya sean de numéricas, de texto o relacionadas con el color.

Citation preview

Page 1: LESS un preprocesador CSS

LESS,UNPREPROCESADORCSS

ADOLFOSANZDEDIEGOSEPTIEMBRE2014

Page 2: LESS un preprocesador CSS

1ELAUTOR

Page 3: LESS un preprocesador CSS

1.1ADOLFOSANZDEDIEGOAntiguoprogramadorwebJEE(6años)Hoyendía:ProfesordeFP(6años):Hardware,SistemasOperativosRedes,Programación

FormadorFreelance(3años):Java,AndroidJavaScript,jQueryJSF,Spring,HibernateGroovy&Grails

Page 4: LESS un preprocesador CSS

1.2ALGUNOSPROYECTOSFundadory/ocreador:HackathonLovers:TweetsSentiment:MarkdownSlides:

Co-fundadory/oco-creador:PeliTweets:PasswordManagerGenerator:

http://hackathonlovers.comhttp://tweetssentiment.com

https://github.com/asanzdiego/markdownslides

http://pelitweets.com

http://pasmangen.github.io

Page 5: LESS un preprocesador CSS

1.3¿DONDEENCONTRARME?Minick:asanzdiegoAboutMe:GitHub:Twitter:Blog:LinkedIn:Google+:

http://about.me/asanzdiegohttp://github.com/asanzdiegohttp://twitter.com/asanzdiego

http://asanzdiego.blogspot.com.eshttp://www.linkedin.com/in/asanzdiego

http://plus.google.com/+AdolfoSanzDeDiego

Page 6: LESS un preprocesador CSS

2INTRODUCCIÓN

Page 7: LESS un preprocesador CSS

2.1¿QUÉES?Lessesunpre-procesadordeCSS.Añadecaracterísticascomovariables,mixins,funciones,etc.

Page 8: LESS un preprocesador CSS

2.2VENTAJASElCSSesasímásfácildemantener,personalizableyextensible.Less(conrespectoaotrospre-procesadoresCSS)tieneunasintaxisparecidaaCSS.

Page 9: LESS un preprocesador CSS

2.3CARACTERÍSTICASLesssepuedeejecutardesdeNodeJS,desdeunnavegador,odesdeRhino.Ademásexistenmuchasherramientasquepermitencompilarlosarchivosyverloscambiosencaliente.

Page 10: LESS un preprocesador CSS

3USANDOLESS

Page 11: LESS un preprocesador CSS

3.1INSTALACIÓNLaformamássencilladeinstalarLess,esatravésdelanpm,elgestordepaquetesdeNodeJS:$npminstall-gless

Page 12: LESS un preprocesador CSS

3.2LÍNEADECOMANDOSUnavezinstalado,sepuedecompilardesdelalíneadecomandos:$lesscstyles.less>styles.css

Page 13: LESS un preprocesador CSS

3.3DESDENODEJS(I)Elsiguientecódigo:

varless=require('less');

less.render('.class{width:(1+1)}',function(e,css){console.log(css);});

Page 14: LESS un preprocesador CSS

3.4DESDENODEJS(II)Sacaráporpantalla:

.class{width:2;}

Page 15: LESS un preprocesador CSS

3.5CONRHINORhinotepermiteusarJavaScriptdesdeunaMáquinaVirtualdeJavajava-jarjs.jar-fless-rhino-<version>.jslessc-rhino-<version>.jsstyles.lessstyles.css

Page 16: LESS un preprocesador CSS

3.6DESDEELNAVEGADOR(I)Eslaformamásfácilparaempezar,peronoesrecomendableusarloasíenproducción.Serecomiendapre-compilarusandoNodeJS,Rhino,ounadelasmuchasherramientasdetercerosdisponibles.

Page 17: LESS un preprocesador CSS

3.7DESDEELNAVEGADOR(II)Enlazartuarchivolessquequierasprecompilar:

<linkrel="stylesheet/less"type="text/css"href="styles.less"/>

Page 18: LESS un preprocesador CSS

3.8DESDEELNAVEGADOR(II)Descargar:

Enlazareljsdeless:https://github.com/less/less.js/archive/master.zip

<scriptsrc="less.js"type="text/javascript"></script>

Page 19: LESS un preprocesador CSS

3.9DESDEELNAVEGADOR(III)Consejos;Enlazatusarchivosaprecompilarantesquelalibreríadeless.Sihaymásdeunarchivoaprecompilar,estossecompilandeformaindependiente.

Page 20: LESS un preprocesador CSS

4CARACTERÍSTICAS

Page 21: LESS un preprocesador CSS

4.1VARIABLES(I)Elsiguientecódigo:

@nice-blue:#5B83AD;@light-blue:@nice-blue+#111;

#header{color:@light-blue;}

Page 22: LESS un preprocesador CSS

4.2VARIABLES(II)Lescompilaa:

#header{color:#6c94be;}

Nota:lasvariablessonenrealidad"constantes"yaquesólopuedenserdefinidasunavez.

Page 23: LESS un preprocesador CSS

4.3EXTENDSonunaformadeherencia:

.animal{background-color:black;color:white;}.bear{&:extend(.animal);background-color:brown;}

Page 24: LESS un preprocesador CSS

4.4MIXINS(I)LosMixinssonunaformadereutilizarpropiedadesyadefinidas:Imaginemoslaclase.bordered:.bordered{border-top:dotted1pxblack;border-bottom:solid2pxblack;}

Page 25: LESS un preprocesador CSS

4.5MIXINS(II)Lopodemosusarasí:

#menua{color:#111;.bordered;}

.posta{color:red;.bordered;}

Nota:Ademásdeclases,tambiénsepuedenutilizar#idscomomixins.

Page 26: LESS un preprocesador CSS

4.6REGLASANIDADAS(I)SupongamosquetenemoselsiguienteCSS:

#header{color:black;}#headera{color:blue;}#headera:hover{color:red;}

Page 27: LESS un preprocesador CSS

4.7REGLASANIDADAS(II)PuesconLesssepuedeescribirasí:

#header{color:black;a{color:blue;&:hover{color:red;}}}

Sepuedenusarpseudo-elementos,yllamaralselectorpadreactual,con&:

Page 28: LESS un preprocesador CSS

4.8MEDIASQUERIESANIDADAS(I)Elsiguientecódigo:

@mediascreen{.screencolor{color:green;}}@mediascreenand(min-width:768px){.screencolor{color:red;}}@mediatv{.screencolor{color:black;}}

Page 29: LESS un preprocesador CSS

4.9MEDIASQUERIESANIDADAS(II)Sepodríaescribir:

.screencolor{@mediascreen{color:green;@media(min-width:768px){color:red;}}@mediatv{color:black;}}

Page 30: LESS un preprocesador CSS

4.10OPERACIONES(I)Lesspuedehaceroperacionesconnúmeros,coloresovariables.Ademássabediferenciarcuandoesunnúmeroouncolor.

Page 31: LESS un preprocesador CSS

4.11OPERACIONES(II)@base:5%;@filler:@base*2;@other:@base+@filler;@base-color:#888/4;

background-color:@base-color+#111;height:100%/2+@other;

Page 32: LESS un preprocesador CSS

4.12FUNCIONESLessdisponedeunavariedaddefuncionesmatemáticas,quemanipulancadenas,yquetransformanloscolores:@base:#f04615;@list:200,500,1200;

.class{width:extract(@list,3);color:saturate(@base,5%);background-color:lighten(@base,25%);}

Page 33: LESS un preprocesador CSS

4.13NAMESPACES(I)Aveces,podemosquereragruparmixins,pormotivosdeorganización,osimplementeparaencapsularlos.

Page 34: LESS un preprocesador CSS

4.14NAMESPACES(II)Veamoscomopodemosagruparvariosmixins:

#bundle{.button{border:1pxsolidblack;background-color:grey;}.tab{...}.citation{...}}

Page 35: LESS un preprocesador CSS

4.15NAMESPACES(III)Ahorapodemosutilizarelmixin.buttonqueestáenelnamespace#bundledeestaforma:#headera{color:orange;#bundle>.button;}

Page 36: LESS un preprocesador CSS

4.16SCOPELosámbitosdelasvariablesenLessesmuysimilaraotroslenguajes:@var:red;

#page{@var:white;#header{color:@var;//white}}

Page 37: LESS un preprocesador CSS

4.17COMENTARIOSCon//...ycon/*...*/

/*Onehellofablockstylecomment!*/@var:red;

//Getinline!@var:white;

Page 38: LESS un preprocesador CSS

4.18IMPORTS//foo.lessisimported@import"foo";

//foo.lessisimported@import"foo.less";

//foo.phpimportedasalessfile@import"foo.php";

//foo.cssimportedasacssfile@import"foo.css";

Page 39: LESS un preprocesador CSS

5VARIABLES

Page 40: LESS un preprocesador CSS

5.1¿PORQUÉ?(I)Lasvariablesseusanparanotenerquerepetirconstantementelosmismosvalores,conloqueseconsigueademásuncódigomásfácildemantener:a,.link{color:#428bca;}.widget{color:#fff;background:#428bca;}

Page 41: LESS un preprocesador CSS

5.2¿PORQUÉ?(II)ConLessquedaría:

@color:#428bca

a,.link{color:@color;}.widget{color:#fff;background:@color;}

Page 42: LESS un preprocesador CSS

5.3SELECTORES(I)Tambiénsepuedenusarcomoselectores:

@mySelector:banner;

.@{mySelector}{font-weight:bold;line-height:40px;margin:0auto;}

Page 43: LESS un preprocesador CSS

5.4SELECTORES(II)CompiladoconLessquedaría:

.banner{font-weight:bold;line-height:40px;margin:0auto;}

Page 44: LESS un preprocesador CSS

5.5URLSTambiénsepuedenusarURLs:

@images:"../img";

body{color:#444;background:url("@{images}/white-sand.png");}

Page 45: LESS un preprocesador CSS

5.6PROPIEDADES(I)Tambiénsepuedenusarcomopropiedades:

@property:color;

.widget{@{property}:#0ee;background-@{property}:#999;}

Page 46: LESS un preprocesador CSS

5.7PROPIEDADES(II)CompiladoconLessquedaría:

.widget{color:#0ee;background-color:#999;}

Page 47: LESS un preprocesador CSS

5.8NOMBRESDELASVARIABLES(I)Tambiénsepuedenusarvariablescomonombresdeotrasvariables:@fnord:"Iamfnord.";@var:"fnord";content:@@var;

Page 48: LESS un preprocesador CSS

5.9NOMBRESDELASVARIABLES(II)CompiladoconLessquedaría:

content:"Iamfnord.";

Page 49: LESS un preprocesador CSS

5.10CARGAPEREZOSA(I)Lasvariablesnotienenqueserdeclaradasantesdeserutilizados.Esoesválido:.lazy-eval{width:@var;}

@var:@a;@a:9%;

Page 50: LESS un preprocesador CSS

5.11CARGAPEREZOSA(II)CompiladoconLessquedaría:

.lazy-eval{width:9%;}

Page 51: LESS un preprocesador CSS

5.12ÁMBITOS(I)Aldefinirunavariabledosveces,seutilizalaúltimadefinicióndelavariable:@var:0;.class{@var:1;.brass{@var:2;three:@var;@var:3;}one:@var;}

Page 52: LESS un preprocesador CSS

5.13ÁMBITOS(II)CompiladoconLessquedaría:

.class{one:1;}.class.brass{three:3;}

Page 53: LESS un preprocesador CSS

6EXTEND

Page 54: LESS un preprocesador CSS

6.1CASODEUSO(I)Imaginoquetenemoslosiguiente:

.animal{background-color:black;color:white;}

Yqueremostenerunsubtipodeanimalquesobrescribalapropiedadbackground-color.

Page 55: LESS un preprocesador CSS

6.2CASODEUSO(II)Podemoshacerlosiguiente:

<aclass="animalbear">Bear</a>

.animal{background-color:black;color:white;}.bear{background-color:brown;}

Page 56: LESS un preprocesador CSS

6.3CASODEUSO(III)Opodemossimplificarelhtmlyusarextend:

<aclass="bear">Bear</a>

.animal{background-color:black;color:white;}.bear{&:extend(.animal);background-color:brown;}

Page 57: LESS un preprocesador CSS

6.4REDUCEELTAMAÑODELCSS(I)Ejemplodemixin:

.my-inline-block(){display:inline-block;font-size:0;}.thing1{.my-inline-block;}.thing2{.my-inline-block;}

Page 58: LESS un preprocesador CSS

6.5REDUCEELTAMAÑODELCSS(II)Lesslocompilaa:

.thing1{display:inline-block;font-size:0;}.thing2{display:inline-block;font-size:0;}

Page 59: LESS un preprocesador CSS

6.6REDUCEELTAMAÑODELCSS(III)Conextends:

.my-inline-block{display:inline-block;font-size:0;}.thing1{&:extend(.my-inline-block);}.thing2{&:extend(.my-inline-block);}

Page 60: LESS un preprocesador CSS

6.7REDUCEELTAMAÑODELCSS(IV)Lesslocompilaa:

.my-inline-block,.thing1,.thing2{display:inline-block;font-size:0;}

Page 61: LESS un preprocesador CSS

7MIXINS

Page 62: LESS un preprocesador CSS

7.1SELECTORESSepuedenhacerMixinstantoconselectoresdeclasecomoconselectoresdeidentificación:.a,#b{color:red;}.mixin-class{.a();}.mixin-id{#b();}

Page 63: LESS un preprocesador CSS

7.2NOEXPORTARMIXINS(I)SinoquieresqueelMixinseaexportadoalCSS,utilizalosparéntesis:.my-mixin{color:black;}.my-other-mixin(){background:white;}.class{.my-mixin;.my-other-mixin;}

Page 64: LESS un preprocesador CSS

7.3NOEXPORTARMIXINS(II)Lesslocompilaa:

.my-mixin{color:black;}.class{color:black;background:white;}

Page 65: LESS un preprocesador CSS

7.4PSEUDO-CLASES(I)LosMixinstambiénsoportanpseudo-clases:

.my-hover-mixin(){&:hover{border:1pxsolidred;}}button{.my-hover-mixin();}

Page 66: LESS un preprocesador CSS

7.5PSEUDO-CLASES(II)Lesslocompilaa:

button:hover{border:1pxsolidred;}

Page 67: LESS un preprocesador CSS

7.6NAMESPACES(I)Podemoscrearunnamespaceconvariosmixins:#outer{.inner{color:red;}}

Page 68: LESS un preprocesador CSS

7.7NAMESPACES(II)ParallamaralMixin,losparentesis,elespacioyel>esopcional,asíquesepuedehacerdetodasestasformas:#outer>.inner;#outer>.inner();#outer.inner;#outer.inner();#outer.inner;#outer.inner();

Page 69: LESS un preprocesador CSS

7.8!IMPORTANTKEYWORD(I)DetrásdeunMixin,alcompilarponetodocomoimportante:.foo(){background:#f5f5f5;color:#fff;}.unimportant{.foo();}.important{.foo()!important;}

Page 70: LESS un preprocesador CSS

7.9!IMPORTANTKEYWORD(II)Lesslocompilaa:

.unimportant{background:#f5f5f5;color:#fff;}.important{background:#f5f5f5!important;color:#fff!important;}

Page 71: LESS un preprocesador CSS

8MIXINSPARAMÉTRICOS

Page 72: LESS un preprocesador CSS

8.1PARÁMETROS(I)LosMixinstambiénpuedetomarparámetros:.border-radius(@radius){-webkit-border-radius:@radius;-moz-border-radius:@radius;border-radius:@radius;}

#header{.border-radius(4px);}

Page 73: LESS un preprocesador CSS

8.2PARÁMETROS(II)Lesslocompilaa:

#header{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}

Page 74: LESS un preprocesador CSS

8.3VALORPORDEFECTO(I)LosMixinstambiénpuedetomarparámetrosconunvalorpordefecto:.border-radius(@radius:5px){-webkit-border-radius:@radius;-moz-border-radius:@radius;border-radius:@radius;}

#header{.border-radius;}

Page 75: LESS un preprocesador CSS

8.4VALORPORDEFECTO(II)Lesslocompilaa:

#header{-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;}

Page 76: LESS un preprocesador CSS

8.5PARÁMETROSMÚLTIPLES(I)Losparámetrossepuedensepararporcoma(,)oporpuntoycoma(;).Serecomiendaelpuntoycoma(;).

Page 77: LESS un preprocesador CSS

8.6PARÁMETROSMÚLTIPLES(II)Lacoma(,)tienedoblesentido:sepuedeinterpretarcomounseparadordeparámetrosMixinocomoseparadordeloselementosdeunalista.Sielcompiladorencuentraalmenosunpuntoycoma(;)asumequelosargumentosseseparanporpuntoycomayloscomaspertenecenalistas.

Page 78: LESS un preprocesador CSS

8.7PARÁMETROSMÚLTIPLES(III).name(1,2,3;something,else)2parámetros,cadaunoesunalista

.name(1,2,3)3parámetros,cadaunocontieneunnúmero

.name(1,2,3;)1parámetro,queesunalista

.name(@param1:red,blue;)1parámetro,conunalistacomovalorpredeterminado

Page 79: LESS un preprocesador CSS

8.8PARÁMETROSMÚLTIPLES(IV)Sepuedetenervariosmixinsconelmismonombreyelmismonúmerodeparámetros,puesLessutilizarátodoslosposibles:.mixin(@color){color:@color;}.mixin(@color;@padding:2){padding:@padding;}.mixin(@color;@padding;@margin:2){margin:@margin;}.some.selectordiv{.mixin(#008000);}

Page 80: LESS un preprocesador CSS

8.9PARÁMETROSMÚLTIPLES(V)Lesslocompilaa:

.some.selectordiv{color-1:#008000;padding-2:2;}

Page 81: LESS un preprocesador CSS

8.10PARÁMETROSCONNOMBRES(I)Sepuedenusarparámetrosconnombre:

.mixin(@color:black;@margin:10px;@padding:20px){...}.class1{.mixin(@margin:20px;@color:#33acfe);}.class2{.mixin(#efca44;@padding:40px);}

Page 82: LESS un preprocesador CSS

8.11PARÁMETROSCONNOMBRES(II)Lesslocompilaa:

.class1{color:#33acfe;margin:20px;padding:20px;}.class2{color:#efca44;margin:10px;padding:40px;}

Page 83: LESS un preprocesador CSS

8.12@ARGUMENTS(I)Podemoscogertodoslosparámetrosdeentradajuntos:.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);}

Page 84: LESS un preprocesador CSS

8.13@ARGUMENTS(II)Lesslocompilaa:

.big-block{-webkit-box-shadow:2px5px1px#000;-moz-box-shadow:2px5px1px#000;box-shadow:2px5px1px#000;}

Page 85: LESS un preprocesador CSS

8.14...PodemospermitirqueelMixinadmitavariosparámetros://matches0-Narguments.mixin(...){

//matchesexactly0arguments.mixin(){

//matches0-1arguments.mixin(@a:1){

//matches0-Narguments.mixin(@a:1;...){

//matches1-Narguments.mixin(@a;...){

Page 86: LESS un preprocesador CSS

8.15@RESTCogetodoslosparámetrosde...:

.mixin(@a;@rest...){

/*@restrecogetodoslosparámetrosdespuésde@a*/

/*@argumentsrecogetodoslosparámetros(incluido@a)*/}

Page 87: LESS un preprocesador CSS

8.16PATTERNMATCHING(I)Siqueremosqueseejecuteunmixindependiendodelvalordeunavariable:.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);}

Page 88: LESS un preprocesador CSS

8.17PATTERNMATCHING(II)Lesslocompilaa:

.class{color:#a2a2a2;display:block;}

Page 89: LESS un preprocesador CSS

8.18MIXINSCOMOFUNCIONES(I)Todaslasvariablesdefinidasenunmixinsonvisiblesypuedenserutilizadosenelámbitodedondeesllamado:.mixin(){@width:100%;@height:200px;}

.caller{.mixin();width:@width;height:@height;}

Page 90: LESS un preprocesador CSS

8.19MIXINSCOMOFUNCIONES(II)Lesslocompilaa:

.caller{width:100%;height:200px;}

Page 91: LESS un preprocesador CSS

8.20MIXINSCOMOFUNCIONES(III)Otroejemplo:

.average(@x,@y){@average:((@x+@y)/2);}

div{

//"call"themixin.average(16px,50px);

//useits"return"valuepadding:@average;}

Page 92: LESS un preprocesador CSS

8.21MIXINSCOMOFUNCIONES(IV)Lesslocompilaa:

div{padding:33px;}

Page 93: LESS un preprocesador CSS

9MIXINSCONDICIONALES

Page 94: LESS un preprocesador CSS

9.1SINTAXIS(I)MuyparecidaalasMediaQueries:

.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)}

Page 95: LESS un preprocesador CSS

9.2SINTAXIS(II)Lesslocompilaa:

.class1{background-color:black;color:#ddd;}.class2{background-color:white;color:#555;}

Page 96: LESS un preprocesador CSS

9.3OPERADORESSepuedenusarlosoperadores>,>=,=,=<,<@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}

Page 97: LESS un preprocesador CSS

9.4ANDComoenlasMediaQueries,usandoANDtodaslassentenciassetienenquecumplir:.mixin(@a)when(isnumber(@a))and(@a>0){...}

Page 98: LESS un preprocesador CSS

9.5COMA(,)ComoenlasMediaQueries,separarsentenciasconcomas(,)equivaleaunOR,porloqueseentraráenelMixinencuantosecumplaunadelassentencias:.mixin(@a)when(@a>10),(@a<-10){...}

Page 99: LESS un preprocesador CSS

9.6NOTComoenlasMediaQueries,usandoNOTseniegaunasentencia:.mixin(@b)whennot(@b>0){...}

Page 100: LESS un preprocesador CSS

9.7COMPROBARTIPOSTenemoslassiguientesfuncionesparacomprobartipos:isnumberisstringiscoloriskeywordisurl

Page 101: LESS un preprocesador CSS

9.8COMPROBARUNIDADESTenemoslassiguientesfuncionesparacomprobarunidades:ispixelisemispercentageisunit

Page 102: LESS un preprocesador CSS

9.9LOOPS(I)LosMixinssepuedenllamarasímismos.Conestarecursividadsepuedencrearloops:.loop(@counter)when(@counter>0){

//nextiteration.loop((@counter-1));

//codeforeachiterationwidth:(10px*@counter);}

div{.loop(5);//launchtheloop}

Page 103: LESS un preprocesador CSS

9.10LOOPS(II)Lesslocompilaa:

div{width:10px;width:20px;width:30px;width:40px;width:50px;}

Page 104: LESS un preprocesador CSS

9.11LOOPS(III)PodríamoshacerungriddeCSS:

.generate-columns(4);

.generate-columns(@n,@i:1)when(@i=<@n){

.column-@{i}{width:(@i*100%/@n);}.generate-columns(@n,(@i+1));}

Page 105: LESS un preprocesador CSS

9.12LOOPS(IV)Lesslocompilaa:

.column-1{width:25%;}.column-2{width:50%;}.column-3{width:75%;}.column-4{width:100%;}

Page 106: LESS un preprocesador CSS

10MERGE

Page 107: LESS un preprocesador CSS

10.1¿QUÉES?Permitecombinarpropiedadesconcoma(,)oconespacio(),enunasolapropiedad.

Page 108: LESS un preprocesador CSS

10.2COMA(I)Ejemploconcoma(,):

.mixin(){box-shadow+:inset0010px#555;}.myclass{.mixin();box-shadow+:0020pxblack;}

Page 109: LESS un preprocesador CSS

10.3COMA(II)Lesslocompilaa:

.myclass{box-shadow:inset0010px#555,0020pxblack;}

Page 110: LESS un preprocesador CSS

10.4ESPACIO(I)Ejemploconespacio():

.mixin(){transform+_:scale(2);}.myclass{.mixin();transform+_:rotate(15deg);}

Page 111: LESS un preprocesador CSS

10.5ESPACIO(II)Lesslocompilaa:

.myclass{transform:scale(2)rotate(15deg);}

Page 112: LESS un preprocesador CSS

10.6EXPLICITOParaprevenircualquierjoininvoluntario,mergerequierequepongas+o+_deformaexplícitaenladeclaracióndecadaunodelosjois.

Page 113: LESS un preprocesador CSS

11SELECTORPADRE

Page 114: LESS un preprocesador CSS

11.1ELOPERADOR&(I)Eloperador&representaelselectorpadre,ysueleserusadoparamodificarclasesousarpseudoclases:a{color:blue;&:hover{color:green;}}

Page 115: LESS un preprocesador CSS

11.2ELOPERADOR&(II)Lesslocompilaa:

a{color:blue;}

a:hover{color:green;}

Page 116: LESS un preprocesador CSS

11.3CLASESREPETITIVAS(I)Otrouso,apartedelaspseudoclases,eseldeproducirnombresdeclasesrepetitivos:.button{&-ok{background-image:url("ok.png");}&-cancel{background-image:url("cancel.png");}&-custom{background-image:url("custom.png");}}

Page 117: LESS un preprocesador CSS

11.4CLASESREPETITIVAS(II)Lesslocompilaa:

.button-ok{background-image:url("ok.png");}.button-cancel{background-image:url("cancel.png");}.button-custom{background-image:url("custom.png");}

Page 118: LESS un preprocesador CSS

11.5MULTIPLES&(I)Sepuederepetirelpadre:

.link{&+&{color:red;}&&{color:green;}&&{color:blue;}&,&ish{color:cyan;}}

Page 119: LESS un preprocesador CSS

11.6MULTIPLES&(II)Lesslocompilaa:

.link+.link{color:red;}.link.link{color:green;}.link.link{color:blue;}.link,.linkish{color:cyan;}

Page 120: LESS un preprocesador CSS

11.7MULTIPLES&(III)Otroejemplo:

.grand{.parent{&>&{color:red;}&&{color:green;}&&{color:blue;}&,&ish{color:cyan;}}}

Page 121: LESS un preprocesador CSS

11.8MULTIPLES&(IV)Lesslocompilaa:

.grand.parent>.grand.parent{color:red;}.grand.parent.grand.parent{color:green;}.grand.parent.grand.parent{color:blue;}.grand.parent,.grand.parentish{color:cyan;}

Page 122: LESS un preprocesador CSS

11.9CAMBIARELORDEN(I)Enalgunoscasopuedeserutilcambiarelordendelhijoconrespectoalpadre:.header{.menu{border-radius:5px;.no-borderradius&{background-image:url('img.png');}}}

Page 123: LESS un preprocesador CSS

11.10CAMBIARELORDEN(II)Lesslocompilaa:

.header.menu{border-radius:5px;}.no-borderradius.header.menu{background-image:url('img.png');}

Page 124: LESS un preprocesador CSS

11.11EXPLOSIÓNCOMBINATORIA(I)Eloperador&puedeserusadoparagenerartodaslasposiblespermutacionesdelosselectorespadre:a,ul,li{border-top:2pxdotted#366;&+&{border-top:0;}}

Page 125: LESS un preprocesador CSS

11.12EXPLOSIÓNCOMBINATORIA(II)Lesslocompilaa:

a,ul,li{border-top:2pxdotted#366;}

a+a,a+ul,a+li,ul+a,ul+ul,ul+li,li+a,li+ul,li+li{border-top:0;}

Page 126: LESS un preprocesador CSS

12FUNCIONES

Page 127: LESS un preprocesador CSS

12.1RESUMEN

MiscFunctionsStringFunctionsListFunctionsMathFunctionsTypeFunctionsColorFunctions

http://lesscss.org/functions/

Page 128: LESS un preprocesador CSS

12.2MISCFUNCTIONS

colorconvertdata-uridefaultunitget-unitsvg-gradient

http://lesscss.org/functions/#misc-functions

Page 129: LESS un preprocesador CSS

12.3STRINGFUNCTIONS:

escapee%formatreplace

http://lesscss.org/functions/#string-functions

Page 130: LESS un preprocesador CSS

12.4LISTFUNCTIONS

lengthextract

http://lesscss.org/functions/#list-functions

Page 131: LESS un preprocesador CSS

12.5MATHFUNCTIONS(I)

ceilfloorpercentageroundsqrtabspowmodminmax

http://lesscss.org/functions/#math-functions

Page 132: LESS un preprocesador CSS

12.6MATHFUNCTIONS(II)

sinasincosacostanatanpi

http://lesscss.org/functions/#math-functions

Page 133: LESS un preprocesador CSS

12.7TYPEFUNCTIONS

isnumberisstringiscoloriskeywordisurlispixelisemispercentageisunit

http://lesscss.org/functions/#type-functions

Page 134: LESS un preprocesador CSS

12.8COLORDEFINITIONFUNCTIONS

rgbrgbaargbhslhslahsvhsva

http://lesscss.org/functions/#color-definitions

Page 135: LESS un preprocesador CSS

12.9COLORCHANNELFUNCTIONS

huesaturationlightnesshsvhuehsvsaturationhsvvalueredgreenbluealphalumaluminance

http://lesscss.org/functions/#color-channel

Page 136: LESS un preprocesador CSS

12.10COLOROPERATIONFUNCTIONS

saturatedesaturatelightendarkenfadeinfadeoutfadespinmixgreyscalecontrast

http://lesscss.org/functions/#color-operations

Page 137: LESS un preprocesador CSS

12.11COLORBLENDINGFUNCTIONS

multiplyscreenoverlaysoftlighthardlightdifferenceexclusionaveragenegation

http://lesscss.org/functions/#color-blending

Page 138: LESS un preprocesador CSS

13ACERCADE

Page 139: LESS un preprocesador CSS

13.1LICENCIAEstastransparenciasestánhechascon:MarkdownSlides:

EstastransparenciasestánbajounalicenciaCreativeCommonsReconocimiento-CompartirIgual3.0:

https://github.com/asanzdiego/markdownslides

http://creativecommons.org/licenses/by-sa/3.0/es

Page 140: LESS un preprocesador CSS

13.2FUENTESTransparencias:

Código:

https://github.com/asanzdiego/curso-interfaces-web-2014/tree/master/04-less/slides

https://github.com/asanzdiego/curso-interfaces-web-2014/tree/master/01-less/src

Page 141: LESS un preprocesador CSS

13.3BIBLIOGRAFÍADocumentaciónoficialdeLesshttp://lesscss.org