LESS (язык стилей)
Последнее изменение этой страницы: 01:21, 22 мая 2016.
Спроектировано | Alexis Sellier |
---|---|
Разработчики | Alexis Sellier, Дмитрий Фадеев |
Первый появившийся | 2009 |
Стабильная версия | 2.5.1 / 21 мая 2015 |
Печать дисциплины | динамическая |
OS | Кроссплатформенный |
Лицензия | Apache License 2 |
Портал: | http://lesscss.org/ |
Под влиянием | |
CSS, Sass | |
Влияние | |
Sass, Less Fraemwork |
LESS — это динамический язык стилей, который разработал Alexis Sellier, созданый под влиянием языка стилей Sass, и оказавший влияние на его новый синтаксис «SCSS», в котором также использован синтаксис, являющийся расширением СSS. Это продукт с открытым исходным кодом. Первоначально был написан на Ruby, однако в последующих версиях было решено отказаться от использования этого языка программирования в пользу JavaScript. Less — это вложенный метаязык: валидный CSS будет валидной less-программой с аналогичной семантикой. Он обеспечивает следующие расширения CSS: переменные, вложенные блоки, миксины, операторы и функции, и может работать на стороне клиента (Internet Explorer 6+, WebKit, Firefox) или на стороне сервера под управлением Node.js или Rhino.
Содержание
Как использовать LESS
Есть два способа использования LESS. Вы можете создать LESS файл и конвертировать его при помощи Javascript или скомпилировать его заранее и использовать получившийся CSS файл.
Используем LESS и Javascript файл
Для начала нужно скачать с official LESS Javascript файл и привязать его к страничке как любой другой js скрипт.
<script src="less.js" type="text/javascript">
Затем создать файл с расширением .less
и привять его с помощью такого кода:
<link rel="stylesheet/less" type="text/css" href="style.less">
Удостоверьтесь, что LESS файл прикреплен перед JS.Теперь LESS файл будет работать также как и обычный CSS.
Компилируем LESS файл
Хотя этот способ немного утомительней, но иногда он является более предпочтительным. Чтобы не конвертировать код при каждой загрузке страницы можно использовать результирующий CSS файл. Конвертеры: для Windows – Winless и LESS.app для Мака.
Укрощаем мощь LESS
Рассмотрим LESS код. Его очень легко читать и понимать, поскольку LESS обеспечивает расширения для CSS: переменные, вложенные блоки, примеси(mixins), функции и операторы.
Переменные
Переменные в LESS работают так же как в PHP, JS и в большинстве других языков программирования. Вы можете использовать их для хранения значения, и затем использовать переменные вместо самого значения всякий раз, когда вам это нужно.
@header-font: Georgia;
h1, h2, h3, h4 {
font-family: @header-font;
}
.large {
font-family:@header-font;
}
В примере выше объявляется переменная @header-font
и записывается туда значение «Georgia». Теперь можно использовать эту переменную всегда, когда надо установить шрифт Georgia. Если же надо будет изменить шрифт, то просто следует изменить значение переменной.
С LESS мы можем модифицировать и одновременно документировать наш рабочий процесс.
/* Colors for my Website */
@color-orange: #ff9900;
@color-gray_light: #cccccc;
@color-black_dark: #333333;
@color-black_medium: #454545;
body {
background: @color-black_dark;
color: @color-black_medium;
}
a {
color:@color-orange;
}
h1, h2, h3, h4, h5, h6 {
color: @color-black_dark;
}
Область видимости переменных
Область видимости переменных описывает места, где они доступны. Если вы определите переменную в самом начале LESS файла, то она будет доступна для любого кода написанного после.
Также можно определять переменную внутри CSS правила. В этом случае переменные не будут доступны вне этого правила, они могут быть использованы локально.
a {
@color: #ff9900;
color:@color<nowiki>;</nowiki>
}
button {
background: @color;
}
В этом примере LESS не будет сконвертирован из-за ошибки, @color
не определена для использования внутри элемента button. Если переменная объявлена вне элемента и внутри другого элемента, то она будет доступна только локально.
@color: #222222;
a {
@color: #ffffff;
color:@color;
}
button {
background: @color;
}
Здесь ссылка будет окрашена в белый, а у кнопки будет черный фон.
Переменные в переменных
Если вы писали на PHP, то знаете, что можно объявить имя переменной в другой переменной.
@color-chirstmas_red: #941f1f;
@name-of-color: "color-chirstmas_red";
@color: @name-of-color;
Вложенность
Во время написания CSS используется каскадный стиль. Чтобы изменить поля у параграфа только внутри статьи можно использовать следующий код:
article.post p{
margin: 0 0 12px 0;
}
Нет ничего плохого в таком подходе, но если нам надо также изменить стиль ссылок, цитат, заголовков и т.д. только внутри статьи, нужно будет использовать префикс “article.post” для каждого элемента. Это делает написание кода более скучным и усложняет его чтение.В LESS можно вложить эти правила, что даст более короткую и логичную версию стилей. Например:
article.post {
p{
margin: 0 0 12px 0;
}
a {
color: red;
}
a:hover {
color: blue;
}
img {
float:left;
}
}
Отступы не обязательны, но они делают код более читабельным. Уровни вложенности не ограничены.
a {
color:red;
}
p {
margin:0px;
}
article {
a {
color: green;
}
p {
color: #555
a {
color:blue;
}
}
}
Примеси (mixins)
Примеси в LESS избавят от набора излишнего кода. Пример создания закругленной рамки, в которой только верхние углы скруглены:
.tab {
-webkit-border-top-left-radius: 6px;
-webkit-border-top-right-radius: 6px;
-moz-border-radius-topleft: 6px;
-moz-border-radius-topright: 6px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
}
И так каждый раз…. С LESS все это можно изменить, создав примесь. Примеси – элементы многоразового использования, которые можно добавить к любому элементу как правило. И даже не нужно изучать новый синтаксис.
.rounded_top {
-webkit-border-top-left-radius: 6px;
-webkit-border-top-right-radius: 6px;
-moz-border-radius-topleft: 6px;
-moz-border-radius-topright: 6px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
}
.tab {
background: #333;
color: #fff;
.rounded_top;
}
.submit {
.rounded_top;
}
В вышеприведенном коде определяем элемент .rounded_top
для округления верхних углов. Когда мы добавляем его к любому другому элементу как примесь (смотрите .tab
), мы по существу импортируем правила, которые создали для него. Благодаря такому синтаксису можем использовать любой элемент в качестве примеси.
.rounded_top {
-webkit-border-top-left-radius: 6px;
-webkit-border-top-right-radius: 6px;
-moz-border-radius-topleft: 6px;
-moz-border-radius-topright: 6px;
border-top-left-radius: 6px;
border-top-right-radius: 6px;
}
.tab {
background: #333;
color: #fff;
.rounded_top;
}
.submit {
.tab;
background: red;
}
Стили у элемента .submit
— это скругленные углы наверху, белый цвет и красный фон (background переопределен).
Примеси с параметрами
Примеси с параметрами, звучит сложно, они решают проблему очень простым способом. В примерах выше вы видели как можно определить элемент с радиусом в 6px на верхних углах. А если захочется создать элемент с радиусом в 3px? Надо объявлять разные примеси для всех пиксельных значений? Конечно же ответ нет, надо использовать примеси с параметрами! Они сходны с функциями, потому что при их вызове можно менять значения. Перепишем пример с border-radius, чтобы посмотреть, как это работает.
.rounded_top(@radius) {
-webkit-border-top-left-radius: @radius;
-webkit-border-top-right-radius: @radius;
-moz-border-radius-topleft: @radius;
-moz-border-radius-topright: @radius;
border-top-left-radius: @radius;
border-top-right-radius: @radius;
}
.tab {
background: #333;
color: #fff;
.rounded_top(6px);
}
.submit {
.rounded_top(3px);
}
В вышеприведенном коде радиус у .tab
равен 6px, а .submit
элемент получит значение 3px.
Стандартные значения
Если обычно используется одинаковый border-radius, но иногда необходим другой, нужно задать примеси стандартное значение.
.rounded_top(@radius:6px) {
-webkit-border-top-left-radius: @radius;
-webkit-border-top-right-radius: @radius;
-moz-border-radius-topleft: @radius;
-moz-border-radius-topright: @radius;
border-top-left-radius: @radius;
border-top-right-radius: @radius;
}
.tab {
background: #333;
color: #fff;
.rounded_top;
}
.submit {
.rounded_top(3px);
}
В этом примере .tab
получит стандартное значение в 6px, а .submit
– 3px.
Множественные параметры
Вы также можете использовать множественные параметры, чтобы определить более сложные примеси.
.radius(@radius:6px) {
-webkit-border-radius: @radius;
-moz-border-radius: @radius;
border-radius: @radius;
}
.button(@radius:3px, @background: #e7ba64, @padding: 4px) {
.radius(@radius);
background:@background;
border: 1px solid @background - #222;
padding: @padding;
}
.read_more {
.button(0px);
}
В этом примере класс .read_more
отформатирован с отступом 4px, фоновым цветом #e7ba64
и с border-radius
рывным 0px.
Использование всех аргументов за раз
Еще одна опция при использовании аргументов это их объединение. Сокращённые свойства в CSS имеют множественные значения, записанные одно за другим.
div {
border:1px solid #bbb;
}
Чтобы задать всем необходимым элементам серую границу, можно использовать такую функцию:
.gray_border(@width: 1px, @type: solid, @color: #bbb){
border:@arguments;
}
div {
.gray_border(2px, dashed);
}
@arguments
это специальное ключевое слово, которое выводит все параметры один за другим в заданном порядке. Результатом вышеприведённого LESS кода будет:
div {
border:2px dashed #bbb;
}
Функции и операции.
Можно оперировать значениями или переменными: складывая их, вычитая или умножая. В каких случаях это может пригодиться? Например, при использовании левого фиксированного меню.
@leftMenuWidth: 100px;
.leftMenu {
width: @leftMenuWidth;
height: 100%;
position: fixed;
}
.content {
margin-left: @leftMenuWidth + 20;
}
Таким образом, отступ у блока с классом "content" будет равен "ширина меню + 20px".
Более популярный пример это операции с цветом. В некоторых случаях может понадобится сделать цвет фона или текста темнее или светлее (например, при наведении). Этого можно добиться путем сложения или вычитания цветов:
@exampleColor: #9b59b6;
.example {
// увеличиваем значение HEX на 1
// получаем более светлый оттенок
color: @exampleColor + #111;
&:hover {
// уменьшаем значение HEX на 1
// получаем более темный оттенок
color: @exampleColor - #111;
}
}
Или с использованием встроенных в LESS функций:
@exampleColor: #9b59b6;
.example {
// осветляем цвет на 10%
color: lighten(@exampleColor, 10%);
&:hover {
// затемняем цвет на 10%
color: darken(@exampleColor, 20%);
}
}
Для цветов есть также функции saturate, desaturate, spin и др. С полным списком функций и способами применения можно ознакомиться на оффициальном сайте LESS.
Строковая интерполяция
Строковая интерполяция это еще одно причудливое слово, означающее, что эта произвольная строка может храниться в переменной, а затем использоваться в значении свойства.
@url: "http://mycompany.com/assets/";
background-image: url("@{url}/sprite.png");
Это может быть полезно при создании централизованного фреймворка.
Экранирование
Иногда нужно использовать свойства или значения, которые не являются валидным CSS (правила для IE). Если вы хотите создать градиент в IE, вы должны сделать что-то вроде этого:
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#444444');
Этот CSS не валиден, поэтому LESS не скомпилируется. В этом случае вы можете экранировать это значение, что позволит LESS пропустить его.
.button {
background: -webkit-gradient(linear, left top, left bottom, from(#666666), to(#444444));
background: -moz-linear-gradient(top, #666666, @color - #444444);
filter: ~"progid:DXImageTransform.Microsoft.gradient(startColorstr='#666666', endColorstr='#444444')";
}
Все что нужно сделать, это заключить секцию в кавычки и поставить тильду перед ней. Эта секция не пройдет через LESS процессор и не будет выкинута.
Импорт
Как и в обычном CSS можно импортировать файлы. LESS позволяет импортировать CSS и LESS используя следующий синтаксис:
@import "reset.min.css";
@import "framework.less";
@import "widgets";
Первый импорт достаточно очевиден. Он импортирует CSS правила определённые в reset.min.css без обработки их LESS парсером.Второй импорт вставит содержание framework.less и обработает его как любые другие LESS правила.Третий импорт работает также как и второй. Если расширение не установлено, то препроцессор считает его LESS файлом.
Комметарии
Естественно, многострочные комментарии доступны в LESS в таком же виде, как и в CSS. Также LESS разрешает использование однострочных комментариев как в PHP или Javascript, с помощью двойного обратного слеша.
/*
This is my main LESS file.
It governs how most of the site looks.
*/
body {
padding:0px; // This resets the body padding
}
ISSN 2542-0356
Следуй за Полисом
Оставайся в курсе последних событий
Лицензия
Если не указано иное, содержание этой страницы доступно по лицензии Creative Commons «Attribution-NonCommercial-NoDerivatives» 4.0, а примеры кода – по лицензии Apache 2.0. Подробнее см. Условия использования.