Less (스타일시트 언어)
1. 개요
Less는 CSS를 확장하는 스타일시트 언어이다. 변수 정의, 믹스인, 중첩, 함수 및 연산 등의 기능을 제공하여 CSS 코드를 더욱 효율적으로 작성할 수 있도록 돕는다. Sass와 유사하게 CSS 전처리기로서, CSS를 프로그래밍 방식으로 작성할 수 있게 해준다. Less는 다양한 컴파일러, 편집기 및 플러그인을 통해 지원되며, 윈도우, macOS, 리눅스 등 다양한 플랫폼에서 사용 가능하다.
이미지 준비중입니다.
| 출시일 | 2009년 |
|---|---|
| 설계자 | Alexis Sellier |
| 개발자 | Alexis Sellier, Dmitry Fadeyev |
| 프로그래밍 언어 | 자바스크립트 |
| 최신 버전 | 4.1.2 |
| 최신 버전 출시일 | 2021년 10월 4일 |
| 자료형 체계 | 동적 |
| 영향을 받은 언어 | CSS, Sass |
| 영향을 준 언어 | Sass, Less 프레임워크, 부트스트랩 (v3) |
| 운영 체제 | 크로스 플랫폼 |
| 라이선스 | 아파치 라이선스 2.0 |
| 웹사이트 | LESS 공식 웹사이트 |
| 파일 확장자 | .less |
-
스타일시트 언어 -
CSS
CSS는 마크업 언어로 작성된 문서의 스타일을 정의하는 스타일 시트 언어로서, 웹 페이지의 시각적 표현을 담당하며 디자인과 사용자 경험을 향상시키고, W3C에 의해 표준이 관리되며 다양한 프레임워크와 디자인 방법론을 가진다. -
스타일시트 언어 -
XSL
XSL은 XML 문서의 스타일 정의 및 변환에 사용되는 언어로, XSLT, XPath, XSL-FO 등의 사양으로 구성되어 XML 문서 변환, 탐색, 서식 있는 출력 생성 기능을 제공한다. -
자유 라이브러리 -
Tk (소프트웨어)
Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다. -
자유 라이브러리 -
SQLite
SQLite는 D. 리처드 히프가 설계한 서버리스 구조의 임베디드 SQL 데이터베이스 엔진으로, 별도의 DBMS 없이 프로그램에 통합되어 작동하며 전체 데이터베이스를 단일 파일로 저장하는 특징이 있고, 다양한 운영체제와 환경에서 널리 사용된다. -
자바스크립트 라이브러리 -
구글 웹 툴킷
구글 웹 툴킷(GWT)은 자바 코드를 자바스크립트로 변환하여 웹 애플리케이션 개발을 지원하는 도구로, 개발자가 자바 언어로 Ajax 애플리케이션을 개발하고 GWT 컴파일러를 통해 최적화된 자바스크립트 파일로 변환할 수 있게 한다. -
자바스크립트 라이브러리 -
AngularJS
AngularJS는 동적 웹 애플리케이션 개발을 용이하게 하기 위해 설계된 오픈 소스 자바스크립트 프레임워크로, MVC 패턴 적용, 의존성 주입, HTML 확장 디렉티브 제공, 양방향 데이터 바인딩 등의 특징을 가지며, 장기 지원은 종료되었지만 웹 개발에 중요한 영향을 미쳤다.
2. 기능
Less는 CSS 전처리기(preprocessor)로서, CSS의 기능을 확장하여 코드의 재사용성과 유지보수성을 높여준다. Less의 주요 기능은 다음과 같다.
* 변수: 골뱅이표(@)를 사용하여 변수를 정의하고, 콜론(:)을 사용하여 값을 할당한다. 변수는 코드 내에서 반복되는 값을 쉽게 관리하고 수정할 수 있게 해준다.
* 믹스인 (Mixin): 믹스인은 클래스의 속성을 다른 클래스에 포함시켜 코드의 반복을 줄이고, 마치 함수처럼 인수를 받아 동적으로 스타일을 생성할 수 있게 한다. CSS는 믹스인을 지원하지 않기 때문에 Less의 유용한 기능 중 하나이다.
* 중첩 (Nesting): Less는 CSS 선택자를 중첩하여 코드의 가독성을 높이고, 상속 관계를 명확하게 표현할 수 있다.
* 함수 및 연산: Less는 덧셈, 뺄셈, 곱셈, 나눗셈 등의 연산을 지원하여 속성 간의 관계를 표현하고, 함수를 통해 값을 조작할 수 있다.
2.1. 변수
Less는 변수 정의를 허용한다. Less에서 변수는 골뱅이표(@)로 정의되며, 변수 할당은 콜론(:)을 통해 이루어진다.
변환 중에 변수의 값들은 출력 CSS 문서에 삽입된다.
```less
@pale-green-color: #4D926F;
#header {
color: @pale-green-color;
}
h2 {
color: @pale-green-color;
}
```
위의 Less 코드는 다음의 CSS 코드로 컴파일된다.
```css
#header {
color: #4D926F;
}
h2 {
color: #4D926F;
}
2.2. 믹스인 (Mixin)
믹스인(mixin)은 클래스 이름을 속성 중 하나로 포함시킴으로써 클래스의 모든 속성을 다른 클래스 안으로 포함시키는 것을 허용하며, 이로써 일종의 상수나 변수처럼 동작한다. 이들은 마치 함수처럼 동작하며 인수를 취한다. CSS 자체는 믹스인을 지원하지 않으므로, 반복되는 코드는 각 위치에 반복되어야 한다. 믹스인은 더 효율적이고 깨끗한 코드 반복을 허용하며 쉬운 코드 변경 또한 가능케 한다.
```less
.rounded-corners (@radius: 5px 10px 8px 2px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
#header {
.rounded-corners;
}
#footer {
.rounded-corners(10px 25px 35px 0px);
}
```
위의 Less 코드는 다음의 CSS 코드로 컴파일된다:
```css
#header {
-webkit-border-radius: 5px 10px 8px 2px;
-moz-border-radius: 5px 10px 8px 2px;
border-radius: 5px 10px 8px 2px;
}
#footer {
-webkit-border-radius: 10px 25px 35px 0px;
-moz-border-radius: 10px 25px 35px 0px;
border-radius: 10px 25px 35px 0px;
}
```
Less는 파라메트릭 믹스인(parametric mixin)이라는 특별한 타입의 룰셋(ruleset)이 있어서 클래스처럼 믹스가 가능하지만 파라미터를 수락한다.
```less
#header {
h1 {
font-size: 26px;
font-weight: bold;
}
p {
font-size: 16px;
a {
text-decoration: none;
color: red;
&:hover {
border-width: 1px;
color: #fff;
}
}
}
}
```
위의 Less 코드는 다음의 CSS 코드로 컴파일된다:
```css
#header h1 {
font-size: 26px;
font-weight: bold;
}
#header p {
font-size: 16px;
}
#header p a {
text-decoration: none;
color: red;
}
#header p a:hover {
border-width: 1px;
color: #fff;
}
```
2.3. 중첩 (Nesting)
CSS는 논리적인 중첩을 지원하지만, 코드 블록 자체가 중첩되어 있지는 않다. LESS를 사용하면 다른 선택자 내부에 중첩이 가능하며, 명확한 상속과 간소화에 도움이 된다.
다음은 LESS 코드 예시이다.
```less
#header {
h1 {
font-size: 26px;
font-weight: bold;
}
p {
font-size: 12px;
a {
text-decoration: none;
&:hover {
border-width: 1px;
}
}
}
}
```
위 코드는 다음과 같이 CSS로 컴파일된다.
```css
#header h1 {
font-size: 26px;
font-weight: bold;
}
#header p {
font-size: 12px;
}
#header p a {
text-decoration: none;
}
#header p a:hover {
border-width: 1px;
}
2.4. 함수 및 연산
Less는 속성 값과 색상에 대한 덧셈, 뺄셈, 나눗셈, 곱셈 등의 연산을 지원하여 속성 간의 복잡한 관계를 표현할 수 있다. 또한, 함수는 자바스크립트 코드와 일대일로 매핑되어 값을 조작할 수 있게 한다.
```less
@the-border: 1px;
@base-color: #111;
@red: #842210;
#header {
color: @base-color * 3;
border-left: @the-border;
border-right: @the-border * 2;
}
#footer {
color: @base-color + #003300;
border-color: desaturate(@red, 10%);
}
```
위 Less 코드는 다음과 같이 CSS로 컴파일된다.
```css
#header {
color: #333;
border-left: 1px;
border-right: 2px;
}
#footer {
color: #114411;
border-color: #7d2717;
}
3. Sass와의 비교
Sass는 Less와 함께 널리 사용되는 CSS 전처리기 중 하나로, 프로그래밍 구문을 통해 CSS를 효율적으로 작성하도록 돕는다. Less는 Sass에서 영감을 받아 개발되었다.
Sass는 초기에 CSS를 간소화하고 확장하는 데 중점을 두어 중괄호({})와 같은 요소를 제거했다. 반면 Less는 CSS와의 호환성을 최대한 유지하도록 설계되어, 기존 CSS 코드를 Less에서도 그대로 사용할 수 있었다. 이후 Sass는 SCSS(Sassy CSS)라는 새로운 구문을 도입하여 CSS와 유사한 형태로 작성할 수 있게 되었다. Less는 버전 1.4부터 네스팅(nesting)과 `&:extends`, `@extends` 의사(pseudo) 선택자를 통한 상속을 지원한다.
더 자세한 구문 비교는 여기에서 확인할 수 있다.
4. Less 소프트웨어
Less 코드를 CSS로 컴파일하는 다양한 도구들이 존재한다. 윈도우, 맥 OS X, 리눅스 등 다양한 플랫폼에서 사용할 수 있는 컴파일러, 편집기, 플러그인 등이 있다.
| 이름 | 설명 | 소프트웨어 라이선스 | 플랫폼 | 기능 |
|---|---|---|---|---|
| LessEngine | Less 컴파일러 | 무료 | OpenCart 플러그인 | 컴파일러 |
| SimpLESS | Less 컴파일러 | 무료 (명시적인 라이선스 없음) | 윈도우, Mac OS X, 리눅스 | 컴파일러 |
| Chirpy | Less 컴파일러 | Ms-PL | Visual Studio 플러그인 | 컴파일러 |
| Mindscape Web Workbench | Less 및 Sass용 구문 강조 및 IntelliSense | 독점 | Visual Studio 플러그인 | 컴파일러, 구문 강조 |
| Eclipse Plugin for Less | Eclipse 플러그인 | EPL 1.0 | Eclipse 플러그인 | 구문 강조, 콘텐츠 지원, 컴파일러 |
| mod_less | 즉석에서 Less를 컴파일하는 Apache2 모듈 | 오픈 소스 | 리눅스 | 컴파일러 |
| grunt-contrib-less | Less를 CSS로 변환하는 Node.js Grunt 작업 | MIT | Node.js | 컴파일러 |
| clessc | 순수 C++ 컴파일러 | MIT | 최소 윈도우, 리눅스, MacOS | 컴파일러 |
| Less WebCompiler | 웹 기반 컴파일러 | MIT | 최소 윈도우, 리눅스, MacOS | 컴파일러, 구문 강조, 최소화 도구 |
4.1. 주요 Less 소프트웨어 목록
| 이름 | 설명 | 소프트웨어 라이선스 | 플랫폼 | 기능 |
|---|---|---|---|---|
| WinLess | 윈도우용 GUI Less 컴파일러 | 아파치 2.0 | 윈도우 | 컴파일러 |
| Crunch | Less 편집기 및 컴파일러 (Adobe AIR 필요) | GPL | 윈도우, Mac OS X | 컴파일러, 편집기 |
| less.js-windows | 윈도우용 명령줄 유틸리티 | MIT 라이선스 | 윈도우 | 컴파일러 |
| less.app | Mac OS X용 Less 컴파일러 | 독점 | Mac OS X | 컴파일러 |
| CodeKit | Mac OS X용 Less 컴파일러 | 독점 | Mac OS X | 컴파일러 |
| Web Essentials | Less 및 Sass를 지원하는 Visual Studio 확장 | 아파치 2.0 | 윈도우 | 구문 강조, 콘텐츠 지원, 컴파일러 |