less는 CSS 기반의 확장 기술
.less는 파서(예: 코알라)를 통해 파일 형식을 CSS로 변환합니다.
@+변수 이름+값
구문
변수
LESS 개발자는 전역 스타일에 사용할 수 있는 변수를 사용자 정의할 수 있습니다. 변수를 사용하면 스타일을 더 쉽게 수정할 수 있습니다.
다음 코드에서 변수의 용도와 기능을 이해할 수 있습니다.
Listing 3 LESS file
@border-color: #b5bcc7;
border : 1px solid @border-color;
}
컴파일된 CSS 파일은 다음과 같습니다.
목록 4. CSS 파일
.mythemes tableBorder {
border: 1px solid #b5bcc7;
}
위 코드를 보면 VALUE(값) 수준에서 변수가 재사용되고, 동일한 값을 통합 관리용 변수로 정의할 수 있음을 알 수 있습니다.
이 기능은 테마를 정의하는 데 적합합니다. 배경색, 글꼴 색상, 테두리 속성 등 일반 스타일을 일률적으로 정의할 수 있으므로 테마마다 다른 변수 파일을 정의하면 됩니다. 물론 이 기능은 CSS RESET(스타일 시트 재설정)에도 적용됩니다. 웹 개발에서는 브라우저의 기본 스타일 동작을 보호해야 하고 브라우저의 기본 동작을 재정의하기 위해 스타일 시트를 재정의해야 하는 경우가 많습니다. 여기서 LESS 변수를 사용할 수 있습니다. 스타일 시트를 다른 프로젝트 간에 재사용할 수 있도록 필요에 따라 다른 프로젝트 스타일 시트의 변수를 다시 할당하면 됩니다.
LESS의 변수는 다른 프로그래밍 언어와 마찬가지로 값을 재사용할 수 있습니다. 또한 범위(변수 범위, 개발자는 이를 일반적으로 범위라고 부릅니다)라는 수명 주기가 있습니다. 변수를 검색하는 순서는 먼저 지역 정의에서 검색하고, 찾을 수 없으면 전역 정의까지 상위 정의를 검색하는 것입니다. 아래에서는 간단한 예를 통해 Scope를 설명합니다.
목록 5. LESS 파일
@width : 20px;
#homeDiv {
@width : 30px;
#centerDiv{
width : @width;// 최근 정의한 변수 width 값은 30px
}
}
#leftDiv {
width : @width; // 위에서 정의한 변수 width 값은 20px 이어야 합니다
컴파일된 CSS 파일은 다음과 같습니다.
목록 6. CSS 파일
#homeDiv #centerDiv {
width: 30px;
}
#leftDiv {
width: 20px;
}
Mixins(Mixin)
Mixins(Mixin) 기능은 개발자에게 낯설지 않습니다. 많은 동적 언어가 다중 상속인 Mixins(Mixin) 기능을 지원합니다. LESS에서 혼합이란 현재 CLASS에 속성을 추가하는 것과 마찬가지로 정의된 또 다른 CLASS를 CLASS에 도입하는 것을 의미합니다.
LESS에서 Mixins의 사용을 간략하게 살펴보겠습니다.
목록 7. LESS 파일
// 스타일 선택기 정의
.roundedCorners(@radius:5px) {
-moz -border-radius: @radius;
-webkit-border-radius: @radius;
border-radius:
}
// 다른 스타일 선택기에서 #header {
.roundedCorners;
}
#footer {
.roundedCorners(10px);
}
컴파일된 CSS 파일은 다음과 같습니다.
목록 8. CSS 파일
#header {
-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
}
#footer {
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px;
}
위 코드에서 볼 수 있습니다. 일종의 중첩으로, 하나의 클래스를 다른 클래스에 포함할 수 있습니다. 간단히 말해서 Mixins는 실제로 규칙 수준 재사용입니다.
Mixins에는 Parametric Mixins(매개 변수 혼합)이라는 형식도 있으며 LESS도 이 기능을 지원합니다.
목록 9. LESS 파일
// 스타일 선택기 정의
.borderRadius(@radius) {
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
border-radius:
}
// 정의된 스타일 선택기 사용
#header {
.borderRadius(10px); // 스타일 선택기에 매개변수로 10px를 전달합니다.
}
.btn {
.borderRadius(3px);// // 3px을 전달합니다. 스타일 선택기에 대한 매개변수
}
经过编译生成的 CSS 文件如下:
清单 10. CSS 文件
#header {
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
border-radius: 10px;
}
.btn {
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
我们还可以给 Mixins 的参数定义一人默认值,如
清单 11. LESS 文件
.borderRadius(@radius:5px){
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
border-radius: @radius;
}
.btn {
.borderRadius;
}
经过编译生成的 CSS 文件如下:
清单 12. CSS 文件
.btn {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}
像 JavaScript 中 arguments一样,Mixins 也有这样一个变量:@arguments。@arguments 在 Mixins 中具是一个很特别的参数,当 Mixins 引用这个参数时,该参数表示所有的变量,很多情况下,这个参数可以省去你很多代码。
清单 13. LESS 文件
.boxShadow(@x:0,@y:0,@blur:1px,@color:#000){
-moz-box-shadow: @arguments;
-webkit-box-shadow: @arguments;
box-shadow: @arguments;
}
#header {
.boxShadow(2px,2px,3px,#f36);
}
经过编译生成的 CSS 文件如下:
清单 14. CSS 文件
#header {
-moz-box-shadow: 2px 2px 3px #FF36;
-webkit-box-shadow: 2px 2px 3px #FF36;
box-shadow: 2px 2px 3px #FF36;
}
Mixins 是 LESS 中很重要的特性之一,这里也写了很多例子,看到这些例子你是否会有这样的疑问:当我们拥有了大量选择器的时候,特别是团队协同开发时,如何保证选择器之间重名问题?如果你是 java 程序员或 C++ 程序员,我猜你肯定会想到命名空间 Namespaces,LESS 也采用了命名空间的方法来避免重名问题,于是乎 LESS 在 mixins 的基础上扩展了一下,看下面这样一段代码:
清单 15. LESS 文件
#mynamespace {
.home {...}
.user {...}
}
这样我们就定义了一个名为 mynamespace 的命名空间,如果我们要复用 user 这个选择器的时候,我们只需要在需要混入这个选择器的地方这样使用就可以了。#mynamespace > .user。
嵌套的规则
在我们书写标准 CSS 的时候,遇到多层的元素嵌套这种情况时,我们要么采用从外到内的选择器嵌套定义,要么采用给特定元素加 CLASS 或 ID 的方式。在 LESS 中我们可以这样写:
清单 16. HTML 片段