Ostatnia aktualizacja:

3 września 2025

Opublikowano:

23 marca 2017

LESS vs Sass

LESS vs Sass

„Który preprocesor CSS użyć?” to pytanie, które zadaje sobie każdy początkujący front-end developer. Nawet w X-Coding zdarzały się dyskusje o przewagach jednego nad drugim. To, co mnie cieszy, to fakt, że nikt już specjalnie nie kwestionuje, czy w ogóle używać preprocesora, a dyskusja zeszła na porównanie, którego użyć.

W tym artykule dowiesz się:
  1. Trochę (ale tylko trochę) historii
  2. Preprocesory CSS
  3. To Sass czy Less?

Dzisiaj spróbujemy zmierzyć się z różnicami pomiędzy Sass i LESS, żebyś sam mógł zdecydować, co jest ciekawsze dla Ciebie. Poznasz też moją opinię, ale dopiero na sam koniec 🙂

Trochę (ale tylko trochę) historii

Arkusze styli CSS zostały opracowane przez organizację W3C w 1996r. Dzisiaj nie ma frontend developera, który by nie był biegły w CSS3, bo to dzięki niemu tworzy się styl prezentacji danej strony WWW.

CSS decyduje o tym, jak elementy mają zostać wyświetlone w przeglądarce, jakie kolory będzie widział użytkownik czy ustala rozmiar odstępów pomiędzy poszczególnymi fragmentami strony.

Przed pojawieniem się CSS wszystkie informacje dotyczące wyglądu były zawarte w znacznikach HTML. Wraz z pojawieniem się języka CSS te informacje zostały przeniesione do osobnego pliku (chociaż deklaracje stylu mogą nadal być osadzane inline). Zamiast definiowania stylu np. dla nagłówka w każdym miejscu gdzie został użyty w kodzie, w pliku CSS jedna reguła jest odpowiedzialna za wygląd wszystkich nagłówków, np.: dla h1. W ten sposób kod HTML stał się bardziej czytelny i łatwiejszy w utrzymaniu.

Preprocesory CSS

To, czego od zawsze brakowało CSS-om, to podstawowe elementy programowania. Czasami aż prosiło się, żeby wyciągnąć jakiś kolor do zmiennej i łatwiej w ten sposób panować nad użyciem. Takich przykładów można mnożyć bardzo długo.

Po to powstały dynamiczne języki arkuszy stylów. Dzięki nim praca wemasterów jest szybsza i bardziej wydajna. Pomagają także zapanować nad długiem technologicznym. Oczywiście nadal musisz znać podstawy CSS, żeby pracować z preprocesorami, ale to chyba nie powinno nikogo dziwić. Inwestycja zwraca się w postaci łatwiejszego stylowania strony.

Dwa najbardziej popularne dziś to Sass i LESS. Obydwa udostępniają nam podstawowe konstrukcje, takie jak zmienne, funkcje czy instrukcje warunkowe. Możemy też zagnieżdżać reguły, co pozytywnie wpływa na uporządkowanie samego arkusza. Który zatem wybrać? Wymienimy sobie różnice pomiędzy tymi dwoma preprocesorami.

Zmienne

/ Sass
$background: #000000; 
body {
    background-color: $background;
}

// LESS
@background: #00000; 
body {
    background-color: @background;
}

Nie ma większej różnicy pomiędzy zmiennymi. Sass używa dolara, LESS małpy. W użyciu bardziej zaawansowanym warto pamiętać, że redeklaracja zmiennej w zagnieżdżeniu w Sass działa globalnie a w LESS tylko lokalnie.

Zagnieżdżanie

Zagnieżdżanie kodu to jedna z bardziej przydatnych rzeczy w preprocesorach. Przyspiesza pracę i sprawia, że kod jest bardziej czytelny. Tu nie ma różnic pomiędzy preprocesorami:

nav { 
    ul { ... } 
    li { ... } 
}

Mixiny

Mixiny, czyli reużywalne style, przyspieszają stylowanie HTML. Główna róznica, to fakt, że w LESS wszystko jest jednocześnie definicją mixin, a w Sass definicji służy selektor @mixin. Inaczej wygląda też renderowanie do CSS:

// Sass
 @mixin border-radius($radius) { 
    -webkit-border-radius: $radius; 
    -moz-border-radius: $radius; 
    -ms-border-radius: $radius; 
    border-radius: $radius; } 

.box1 { 
    @include border-radius(10px); 
}

// wynik CSS
.box1 { 
    -webkit-border-radius: 10px; 
    -moz-border-radius: 10px; 
    -ms-border-radius: 10px; 
    border-radius: 10px; 
}

i dla porównania LESS:

// LESS
.box1 { 
    color:red; 
} 

.boxClass { 
    .box1; 
}

// wynik CSS
.box1 { 
    color: red; 
} 

.boxClass { 
    color: red; 
}

W LESS również do konstrukcji możemy przekazać argumenty (w szczególności pusty, jeśli nie chcemy, żeby jakaś klasa była renderowana):

// LESS
.class1() { 
    color:red; 
} 

.boxClass { 
    .class1(); 
}

// wynik CSS
.boxClass { 
    color: red; 
}


// LESS
.class2(@color) { 
    color:@color; 
} 

.boxClass { 
    .class2(blue); 
}

// wynik CSS
.boxClass { 
    color: blue;
}

Funkcje + , – , * , /

// Sass
$base-line-height: 16px * 1.5; 

@function emCalc($size-in-pixels, $base : $base-font-size) { 
    @return $size-in-pixels / $base * 1em; 
} 

h1 { 
    font-size: emCalc(72px); 
    margin-bottom: emCalc($base-line-height, 72px); 
}

// LESS
@color: #888; 
@width: 10px; 

div { 
    border-top-color: 
    @color + #111; 
    border-right-color: @color - 100; 
    border-bottom-color: @color * 2; 
    border-left-color: @color / 2.5; 
    border-width: @width / 5; 
}

Dziedziczenie

// Sass
.box2 { 
    color: red; 
}

.box1 { 
    @extend .box2; 
    background: blue; 
} 

// LESS
.box2 { 
    color: red; 
}

.box1 { 
    &:extend(.box2); 
    background: blue; 
} 

Pętle

Ostatnia kwestia to pętle, które też mają nieco inną składnię. Najpierw kilka przykładów Sass:

// Sass
@for $i from 0 through 2 { 
    .mb-#{$i*10} { 
        margin-bottom: 10px * $i; 
    } 
} 

@for $i from 0 to 2 { 
    .mt-#{$i*10} { 
        margin-top: 10px * $i; 
    } 
}


// wynik CSS
.mb-0 { 
    margin-bottom: 0px; 
} 

.mb-10 { 
    margin-bottom: 10px; 
} 

.mt-0 { 
    margin-top: 0px; 
} 

.mt-10 { 
    margin-top: 10px; 
}
// Sass
@each $icon in facebook, gplus, twitter { 
    .icon-#{$icon} { 
        background-image: url('/img/icon/#{$icon}.png'); 
    } 
} 

$vehicles: (car, plane, bike); 
@each $icon in $vehicles { 
    .icon-#{$icon} { 
        background-image: url('/img/icon/#{$icon}.png'); 
    } 
}

// wynik CSS
.icon-facebook { 
    background-image: url("/img/icon/facebook.png"); 
} 
.icon-gplus { 
    background-image: url("/img/icon/gplus.png"); 
} 
.icon-twitter { 
    background-image: url("/img/icon/twitter.png"); 
}
.icon-car { 
    background-image: url("/img/icon/car.png"); 
}
.icon-plane { 
    background-image: url("/img/icon/plane.png"); 
}
.icon-bike { 
    background-image: url("/img/icon/bike.png"); 
}
// Sass
$i: 10; 
@while $i >= 0 { 
    .p-#{$i*10} { 
        padding: 10px * $i; 
    } 
    $i: $i - 2; 
}

// wynik CSS
.p-100 { 
    padding: 100px; 
} 
.p-80 { 
    padding: 80px; 
} 
.p-60 {
    padding: 60px; 
} 
.p-40 { 
    padding: 40px; 
} 
.p-20 { 
    padding: 20px; 
} 
.p-0 { 
    padding: 0px; 
}

i dla porównania konstrukcja pętli w LESS:

// LESS
.loop(@counter) when (@counter > 0) { 
    .loop((@counter - 1)); 
    width: (10px * @counter); 
} 

div { 
    .loop(5); 
}

// wynik CSS
div { 
    width: 10px; 
    width: 20px; 
    width: 30px; 
    width: 40px; 
    width: 50px;
}
// LESS
.generate-columns(@n, @i: 1) when (@i =< @n) { 
    .column-@{i} { 
        width: (@i * 100% / @n); 
    } 
    .generate-columns(@n, (@i + 1)); 
}

.generate-columns(4);

// wynik CSS
.column-1 {
    width: 25%; 
} 
.column-2 { 
    width: 50%; 
} 
.column-3 { 
    width: 75%; 
} 
.column-4 { 
    width: 100%; 
}

To Sass czy Less?

Jeśli miałbyś zaufać mojej opinii, powiem: Sass. Jest bardziej rozwinięty, bardziej rozwijany i staje się powoli standardem, który wypiera LESS. Dlatego inwestycja w Sass wydaje się bardziej przyszłościowa. LESS jest z drugiej strony trochę łatwiejszy dla początkujących, więc może warto spróbować zacząć właśnie od niego z myślą o przeniesieniu się na „wyższy poziom” nieco później.

Pamiętaj jednak początek artykułu: po pierwsze, dobrze że używasz czegokolwiek. Po drugie, preprocesor ma Ci przyspieszyć pracę, więc jeśli już używasz LESS na co dzień i nie czujesz jakichś wielkich braków, chyba nie ma sensu się „przebranżawiać”. Ostatecznie to technologia jest dla nas, a nie odwrotnie, nieprawdaż?

Ostatnia aktualizacja:

3 września 2025

Opublikowano:

23 marca 2017

W tym artykule dowiesz się:
  1. Trochę (ale tylko trochę) historii
  2. Preprocesory CSS
  3. To Sass czy Less?

Polecane artykuły

Jak wdrożyć e-Commerce B2B w branży medycznej? - wideo

Jak wdrożyć e-Commerce B2B w branży medycznej?

W branży medycznej coraz więcej sprzedaży odbywa się w kanale elektronicznym. Nic dziwnego, tak jest wygodniej i szybciej dla obydwu stron. Jeśli szukasz sposobu na to, żeby Twoi handlowcy pracowali efektywnie, a konkurencja Ci nie uciekła - na pewno warto rozważyć wdrożenie e-Commerce B2B. W tym nagraniu omawiam wszystkie korzyści płynące z takiego wdrożenia i podpowiadam, na jakie funkcje warto zwrócić uwagę, żeby nie skończyć z projektem, który nikomu się nie przyda.

Czytaj więcej
Magiczne metody PHP

Magiczne metody PHP

Magiczne metody w PHP’ie, to metody z zarezerwowanym prefiksem w postaci podwójnego podkreślenia „__”. Funkcje te nie są bezpośrednio używane przez programistę, lecz są one automatycznie wywoływane przez interpreter w odpowiedzi na poszczególne zachowania danej klasy, dlatego są nazwane ‘magicznymi’. __construct() Funkcja odpala się w momencie utworzenia obiektu, wykorzystujemy ją do przygotowania wszystkich potrzebnych danych […]

Czytaj więcej
Narzędzia do testowania manualnego

Narzędzia do testowania manualnego

Testowanie manualne jest niezbędnym etapem w pracy nad wytworzeniem oprogramowania lub aplikacji. Nawet przy zautomatyzowaniu pewnych powtarzających się procesów, potrzebne są testy czarnoskrzynkowe — one w pierwszym etapie wykonywane są manualnie. Niekiedy testowanie manualne i sprawdzanie poszczególnych funkcjonalności, wymaga zastosowania odpowiednich narzędzi: prostych, skutecznych, których nauka nie zajmuje wiele czasu oraz takich, które będą zawsze […]

Czytaj więcej
Gulp vs grunt

Gulp vs Grunt

W jednym z poprzednich artykułów poruszony został temat preprocesorów CSS. Natomiast w niniejszym porównam dwa narzędzia przydatne do automatyzacji pracy każdego web developera. Ułatwiają pracę z preprocesorami, takimi jak Sass czy LESS, optymalizują zasobu CSS czy JavaScript oraz wczytują zmiany automatycznie za każdym razem, gdy plik zostanie zapisany. Instalacja Gulp i Grunt Oba narzędzia oparte […]

Czytaj więcej

Skontaktuj się z nami

Opowiedz nam o swoich ambicjach związanych z e-commerce i pozwól nam wspólnie je zrealizować.

Skontaktuj się z nami