Overview Back

1. Variables

@nice-blue: #5B83AD;
@light-blue: @nice-blue + #111;

#header {
    color: @light-blue;
}
#header {
    color: #6c94be;
}

Note that variables are actually "constants" in that they can only be defined once.

2. Mixins

Mixins are a way of including a bunch of properties from one rule-set into another rule-set.

.bordered {
    border-top: dotted 1px black;
    border-bottom: solid 2px black;
}

#id {
    border: solid 1px black;
}
#menu a {
    color: #111;
    .bordered;
}

.post a {
    color: red;
    .bordered;
    #id;
}

3. Nested Rules

Less gives you the ability to use nesting instead of, or in combination with cascading.

Like the following CSS:

#header {
    color: black;
}
#header .navigation {
    font-size: 12px;
}
#header .logo {
    width: 300px;
}

We can code it with Less:

#header {
    color: black;
    .navigation {
        font-size: 12px;
    }
    .logo {
        width: 30px;
    }
}

When bundling pseudo-selectors, you can use & to reference the current selector parent:

Like the following CSS:

.clearfix {
    display: block;
    zoom: 1;
}

.clearfix:after {
    content: " ";
    display: block;
    font-size: 0;
    height: 0;
    clear: both;
    visibility: hidden;
}

We can code it with Less:

.clearfix {
    display: block;
    zoom: 1;
    &:after {
        content: " ";
        display: block;
        font-size: 0;
        height: 0;
        clear: both;
        visibility: hidden;
    }
}

When it comes to directives like @media or @keyframe, we can also use this rule to nest them:

Like the following CSS:

@media screen {
    .item {
        color: green;
    }
}

@media screen and (min-width: 768px) {
    .item {
        color: red;
    }
}

@media tv {
    .item {
        color: black;
    }
}

We can code it with Less:

.item {
    @media screen {
        color: green;

        @media (min-width: 768px) {
            color: red;
        }
    }

    @media tv {
        color: black;
    }
}

Remaining non-conditional directives, for example @font-face or @keyframes, are bubbled up too. Their bodies do not change:

#a {
    color: blue;

    @font-face {
        src: made-up-url;
    }

    padding: 2;
}

Will be converted into CSS like this:

#a {
    color: blue;
}

@font-face {
    src: made-up-url;
}

#a {
    padding: 2;
}

4. Operations

Arithmetical operations +, -, *, / can operate on any number, color or variable. If possible, these operations will firstly convert them into numbers, like px, cm, or %.

@conversion-1: 5cm + 10mm; /** => 6cm */
@conversion-2: 2 - 3cm - 5mm; /** => -1.5cm */

@incompatible-conversion: 2 + 5px - 3mm; /** => 4px */

/** variables */
@base: 5%;
@filter: @base * 2; /** => 10% */
@other: @base + @filter; /** => 15% */

Multiplication and division do not convert numbers, as it would not be meaningful in most cases.

@base: 2cm * 3mm; /** => 6cm */

In the case when calculating color values, there should be cases in which values are bigger than ff or smaller than 00. They will be rounded to either ff or 00. Alpha values calculating is same as color values, like 1.1 will be rounded to 1.0.

@color: #224488 / 2; /** => 112244 */

.item {
    background-color: @color + #111; /** => 223355 */
}

5. Functions

Less provides a variety of functions which transform colors, manipulate strings and do maths.

@base: #f04615;
@width: 0.5;

.class {
    width: percentage(@width); /** => 50% */
    color: saturate(@base, 5%);
    background-color: spin(lighten(@base, 25%), 8);
}

6. Namespaces and Accessors

Sometimes, we can use Less to bundle some mixins and variables under a rule block like #bundle for later reuse:

#bundle {
    .button {
        display: block;
        border: 1px solid black;
        background-color: grey;
        &:hover {
            background-color: white
        }
    }
    .tag {
        display: inline-block;
    }
}

Then if we want to reuse the rule of .button, we can code like this:

.item {
    color: red;
    #bundle > .button;
}

7. Scope

Variables and mixins are first looked for locally, and if they aren't found, the compiler will look in the parent scope, and so on.

@var: red;

#page {
    @var: white;
    #header {
        color: @var; /** => white */
    }
}

The difference is they do not have to be declared before being used:

@var: red;

#page {
    #header {
        color: @var; /** => white */
    }
    @var: white;
}

8. Importing

Importing works pretty much as expected. You can import a .less file, and all the variables in it will be available.

@import "library"; /** library.less */
@import "typo.css";

results matching ""

    No results matching ""