Less ï¼Leaner Style Sheets ç缩åï¼ æ¯ä¸é¨ååå
¼å®¹ç CSS æ©å±è¯è¨ãè¿éåç°çæ¯ Less ç宿¹ææ¡£ï¼ä¸æçï¼ï¼å
å«äº Less è¯è¨ä»¥åå©ç¨ JavaScript å¼åçç¨äºå° Less æ ·å¼è½¬æ¢æ CSS æ ·å¼ç Less.js å·¥å
·ã
å 为 Less å CSS é常åï¼å æ¤å¾å®¹æå¦ä¹ ãèä¸ Less ä»
对 CSS è¯è¨å¢å äºå°è®¸æ¹ä¾¿çæ©å±ï¼è¿å°±æ¯ Less 妿¤æå¦çåå ä¹ä¸ã
Less å°åºä¸º CSS æ·»å äºä»ä¹åè½ï¼ä»¥ä¸å°±æ¯è¿äºæ°å åè½çæ¦è§ã
åéï¼Variablesï¼
æ éå¤è¯´ï¼ç代ç ä¸ç®äºç¶ï¼
@width: 10px;
@height: @width + 10px;
#header {
width: @width;
height: @height;
}
ç¼è¯ä¸ºï¼
#header {
width: 10px;
height: 20px;
}
äºè§£å
³äºåéçæ´å¤ä¿¡æ¯
æ··åï¼Mixinsï¼
æ··åï¼Mixinï¼æ¯ä¸ç§å°ä¸ç»å±æ§ä»ä¸ä¸ªè§åéå
å«ï¼ææ··å
¥ï¼å°å¦ä¸ä¸ªè§åéçæ¹æ³ãå设æä»¬å®ä¹äºä¸ä¸ªç±»ï¼classï¼å¦ä¸ï¼
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
妿æä»¬å¸æå¨å
¶å®è§åéä¸ä½¿ç¨è¿äºå±æ§å¢ï¼æ²¡é®é¢ï¼æä»¬åªéåä¸é¢è¿æ ·è¾å
¥æé屿§çç±»ï¼classï¼åç§°å³å¯ï¼å¦ä¸æç¤ºï¼
#menu a {
color: #111;
.bordered();
}
.post a {
color: red;
.bordered();
}
.bordered ç±»æå
å«ç屿§å°±å°åæ¶åºç°å¨ #menu a å .post a ä¸äºãï¼æ³¨æï¼ä½ ä¹å¯ä»¥ä½¿ç¨ #ids ä½ä¸º mixin 使ç¨ãï¼
äºè§£å
³äºæ··åï¼Mixinï¼çæ´å¤ä¿¡æ¯
åµå¥ï¼Nestingï¼
Less æä¾äºä½¿ç¨åµå¥ï¼nestingï¼ä»£æ¿å±å æä¸å±å ç»å使ç¨çè½åãå设æä»¬æä»¥ä¸ CSS 代ç ï¼
#header {
color: black;
}
#header .navigation {
font-size: 12px;
}
#header .logo {
width: 300px;
}
ç¨ Less è¯è¨æä»¬å¯ä»¥è¿æ ·ä¹¦å代ç ï¼
#header {
color: black;
.navigation {
font-size: 12px;
}
.logo {
width: 300px;
}
}
ç¨ Less 书åçä»£ç æ´å ç®æ´ï¼å¹¶ä¸æ¨¡ä»¿äº HTML çç»ç»ç»æã
ä½ è¿å¯ä»¥ä½¿ç¨æ¤æ¹æ³å°ä¼ªéæ©å¨ï¼pseudo-selectorsï¼ä¸æ··åï¼mixinsï¼ä¸å使ç¨ãä¸é¢æ¯ä¸ä¸ªç»å
¸ç clearfix æå·§ï¼éå为ä¸ä¸ªæ··åï¼mixinï¼ (& 表示å½åéæ©å¨çç¶çº§ï¼ï¼
.clearfix {
display: block;
zoom: 1;
&:after {
content: " ";
display: block;
font-size: 0;
height: 0;
clear: both;
visibility: hidden;
}
}
äºè§£æå
³å¤«éæ©å¨ç详ç»ä¿¡æ¯
@è§ååµå¥ååæ³¡
@ è§åï¼ä¾å¦ @media æ @supportsï¼å¯ä»¥ä¸éæ©å¨ä»¥ç¸åçæ¹å¼è¿è¡åµå¥ã@ è§åä¼è¢«æ¾å¨åé¢ï¼åä¸è§åéä¸çå
¶å®å
ç´ çç¸å¯¹é¡ºåºä¿æä¸åãè¿å«ååæ³¡ï¼bubblingï¼ã
.component {
width: 300px;
@media (min-width: 768px) {
width: 600px;
@media (min-resolution: 192dpi) {
background-image: url(/img/retina2x.png);
}
}
@media (min-width: 1280px) {
width: 800px;
}
}
ç¼è¯ä¸ºï¼
.component {
width: 300px;
}
@media (min-width: 768px) {
.component {
width: 600px;
}
}
@media (min-width: 768px) and (min-resolution: 192dpi) {
.component {
background-image: url(/img/retina2x.png);
}
}
@media (min-width: 1280px) {
.component {
width: 800px;
}
}
è¿ç®ï¼Operationsï¼
ç®æ¯è¿ç®ç¬¦ +ã-ã*ã/ å¯ä»¥å¯¹ä»»ä½æ°åãé¢è²æåéè¿è¡è¿ç®ã妿å¯è½çè¯ï¼ç®æ¯è¿ç®ç¬¦å¨å ãåææ¯è¾ä¹åä¼è¿è¡å使¢ç®ã计ç®çç»æä»¥æå·¦ä¾§æä½æ°çåä½ç±»å为åã妿å使¢ç®æ ææå¤±å»æä¹ï¼å忽ç¥åä½ãæ æçå使¢ç®ä¾å¦ï¼px å° cm æ rad å° % ç转æ¢ã
@conversion-1: 5cm + 10mm;
@conversion-2: 2 - 3cm - 5mm;
@incompatible-units: 2 + 5px - 3cm;
@base: 5%;
@filler: @base * 2;
@other: @base + @filler;
乿³å餿³ä¸ä½è½¬æ¢ãå 为è¿ä¸¤ç§è¿ç®å¨å¤§å¤æ°æ
åµä¸é½æ²¡ææä¹ï¼ä¸ä¸ªé¿åº¦ä¹ä»¥ä¸ä¸ªé¿åº¦å°±å¾å°ä¸ä¸ªåºåï¼è CSS æ¯ä¸æ¯ææå®åºåçãLess å°ææ°åçåæ ·è¿è¡æä½ï¼å¹¶å°ä¸ºè®¡ç®ç»ææå®æç¡®çåä½ç±»åã
@base: 2cm * 3mm;
ä½ è¿å¯ä»¥å¯¹é¢è²è¿è¡ç®æ¯è¿ç®ï¼
@color: (#224488 / 2);
background-color: #112244 + #111;
ä¸è¿ï¼ä½ ä¼åç° Less æä¾ç è²å½©å½æ° æ´æç¨ã
From 4.0, No division is performed outside of parens using / operator.
@color: #222 / 2;
background-color: (#FFFFFF / 16);
You can change Math setting, if you want to make it always work, but not recommended.
calc() ç¹ä¾
Released v3.0.0
为äºä¸ CSS ä¿æå
¼å®¹ï¼calc() å¹¶ä¸å¯¹æ°å¦è¡¨è¾¾å¼è¿è¡è®¡ç®ï¼ä½æ¯å¨åµå¥å½æ°ä¸ä¼è®¡ç®åéåæ°å¦å
¬å¼çå¼ã
@var: 50vh/2;
width: calc(50% + (@var - 20px));
转ä¹ï¼Escapingï¼
转ä¹ï¼Escapingï¼å
è®¸ä½ ä½¿ç¨ä»»æå符串ä½ä¸ºå±æ§æåéå¼ãä»»ä½ ~"anything" æ ~'anything' å½¢å¼çå
容é½å°æåæ ·è¾åºï¼é¤é interpolationã
@min768: ~"(min-width: 768px)";
.element {
@media @min768 {
font-size: 1.2rem;
}
}
ç¼è¯ä¸ºï¼
@media (min-width: 768px) {
.element {
font-size: 1.2rem;
}
}
注æï¼ä» Less 3.5 å¼å§ï¼å¯ä»¥ç®å为ï¼
@min768: (min-width: 768px);
.element {
@media @min768 {
font-size: 1.2rem;
}
}
å¨ Less 3.5+ çæ¬ä¸ï¼è®¸å¤ä»¥åéè¦âå¼å·è½¬ä¹âçæ
åµå°±ä¸åéè¦äºã
彿°ï¼Functionsï¼
Less å
ç½®äºå¤ç§å½æ°ç¨äºè½¬æ¢é¢è²ãå¤çå符串ãç®æ¯è¿ç®çãè¿äºå½æ°å¨Less 彿°æåä¸æè¯¦ç»ä»ç»ã
彿°çç¨æ³é常ç®åãä¸é¢è¿ä¸ªä¾åå°ä»ç»å¦ä½å©ç¨ percentage 彿°å° 0.5 转æ¢ä¸º 50%ï¼å°é¢è²é¥±å度å¢å 5%ï¼ä»¥åé¢è²äº®åº¦éä½ 25% å¹¶ä¸è²ç¸å¼å¢å 8 çç¨æ³ï¼
@base: #f04615;
@width: 0.5;
.class {
width: percentage(@width);
color: saturate(@base, 5%);
background-color: spin(lighten(@base, 25%), 8);
}
åè§ï¼å½æ°æå
å½å空é´å访é®ç¬¦
(ä¸è¦å CSS @namespace æ namespace selectors æ··æ·äº)ã
ææ¶ï¼åºäºç»ç»ç»ææä»
ä»
æ¯ä¸ºäºæä¾ä¸äºå°è£
çç®çï¼ä½ å¸æå¯¹æ··åï¼mixinsï¼è¿è¡åç»ãä½ å¯ä»¥ç¨ Less æ´ç´è§å°å®ç°è¿ä¸éæ±ãåè®¾ä½ å¸æå°ä¸äºæ··åï¼mixinsï¼ååéç½®äº #bundle ä¹ä¸ï¼ä¸ºäºä»¥åæ¹ä¾¿éç¨æååï¼
#bundle() {
.button {
display: block;
border: 1px solid black;
background-color: grey;
&:hover {
background-color: white;
}
}
.tab { ... }
.citation { ... }
}
ç°å¨ï¼å¦ææä»¬å¸ææ .button 类混åå° #header a ä¸ï¼æä»¬å¯ä»¥è¿æ ·åï¼
#header a {
color: orange;
#bundle.button();
}
注æï¼å¦æä¸å¸æå®ä»¬åºç°å¨è¾åºç CSS ä¸ï¼ä¾å¦ #bundle .tabï¼è¯·å° () éå å°å½å空é´ï¼ä¾å¦ #bundle()ï¼åé¢ã
æ å°ï¼Mapsï¼
ä» Less 3.5 çæ¬å¼å§ï¼ä½ è¿å¯ä»¥å°æ··åï¼mixinsï¼åè§åéï¼rulesetsï¼ä½ä¸ºä¸ç»å¼çæ å°ï¼mapï¼ä½¿ç¨ã
#colors() {
primary: blue;
secondary: green;
}
.button {
color: #colors[primary];
border: 1px solid #colors[secondary];
}
è¾åºç¬¦å颿ï¼
.button {
color: blue;
border: 1px solid green;
}
åè§ï¼ æ å°ï¼Mapsï¼
ä½ç¨åï¼Scopeï¼
Less ä¸çä½ç¨åä¸ CSS ä¸çä½ç¨åé常类似ãé¦å
卿¬å°æ¥æ¾åéåæ··åï¼mixinsï¼ï¼å¦ææ¾ä¸å°ï¼åä»âç¶â级ä½ç¨åç»§æ¿ã
@var: red;
#page {
@var: white;
#header {
color: @var;
}
}
ä¸ CSS èªå®ä¹å±æ§ä¸æ ·ï¼æ··åï¼mixinï¼ååéçå®ä¹ä¸å¿
å¨å¼ç¨ä¹åäºå
å®ä¹ãå æ¤ï¼ä¸é¢ç Less 代ç 示ä¾åä¸é¢ç代ç ç¤ºä¾æ¯ç¸åçï¼
@var: red;
#page {
#header {
color: @var;
}
@var: white;
}
åè§ï¼æå è½½
åæ³¨éåè¡æ³¨éé½å¯ä»¥ä½¿ç¨ï¼
@var: red;
@var: white;
导å
¥ï¼Importingï¼
â导å
¥âç工使¹å¼åä½ é¢æç䏿 ·ãä½ å¯ä»¥å¯¼å
¥ä¸ä¸ª .less æä»¶ï¼æ¤æä»¶ä¸çææåéå°±å¯ä»¥å
¨é¨ä½¿ç¨äºã妿坼å
¥çæä»¶æ¯ .less æ©å±åï¼åå¯ä»¥å°æ©å±åçç¥æï¼
@import "library";
@import "typo.css";
äºè§£æ´å¤å
³äºå¯¼å
¥(Importing)çç¥è¯