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 문서 변환, 탐색, 서식 있는 출력 생성 기능을 제공한다. -
공식 웹사이트에 알 수 없는 변수를 사용한 문서 -
브루클린 미술관
브루클린 미술관은 1823년 브루클린 견습생 도서관으로 시작하여 현재 약 50만 점의 소장품을 보유한 뉴욕 브루클린 소재의 미술관으로, 다양한 분야의 예술 작품을 전시하며 특히 아프리카 미술과 여성주의 미술에 대한 기여가 크다. -
공식 웹사이트에 알 수 없는 변수를 사용한 문서 -
광주지방기상청
광주지방기상청은 광주광역시와 전라남도 지역의 기상 예보, 특보, 관측, 기후 정보 제공 등의 업무를 수행하는 기상청 소속 기관으로, 1949년 광주측후소로 설치되어 1992년 광주지방기상청으로 개편되었으며, 기획운영과, 예보과, 관측과, 기후서비스과와 전주기상지청, 목포기상대를 두고 있다. -
자유 라이브러리 -
Tk (소프트웨어)
Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다. -
자유 라이브러리 -
SQLite
SQLite는 D. 리처드 히프가 설계한 서버리스 구조의 임베디드 SQL 데이터베이스 엔진으로, 별도의 DBMS 없이 프로그램에 통합되어 작동하며 전체 데이터베이스를 단일 파일로 저장하는 특징이 있고, 다양한 운영체제와 환경에서 널리 사용된다.
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 | 윈도우 | 구문 강조, 콘텐츠 지원, 컴파일러 |