Blog: CSS

Moving from LESS to SCSS


LESS has been such a handy way to work with CSS - especially when paired with CodeKit. When looking at which preprocessor to use, it was between LESS and SASS. And LESS won hands down for its so-close-to-CSS syntax. Basically CSS with variables and helpers.

But more and more was seeing modern frameworks use SCSS, especially when starting to look at Laravel's base setup.

So I took a look at what SCSS had to offer.

Like LESS, the syntax is like reading CSS - it's CSS with variables and helpers.

I know this is such a small thing, but I really prefer SCSS's variables. LESS started with an @, where as SCSS starts with a $. Given my experience with PHP development, the $ just felt so much more natural.

SCSS also uses the idea of @mixin to define helper "functions" - which makes so much more sense than in LESS where it just looks like a class that accepts variables.

Here's an example of a helper function in LESS and SCSS to apply the translateX for a given amount and position. SCSS just reads more like a function - keeps me happy. Oh, and remember, using CodeKit allows me to use Autoprefixer to output the final CSS with vendor-specific prefixes.

.translateX(@amount: 50%, @pos: relative) {
position: @pos;
left: @amount;
transform: translateX(-@amount);
@mixin translateX($amount: 50%, $pos: relative) {
position: $pos;
left: $amount;
transform: translateX(-$amount);

It's just the little differences, but I am really happy with the way SCSS is working, and starting the process of migrating the development workflow at Mity Digital to use SCSS.

There is one thing I do miss about the LESS world though (when using CodeKit).

With LESS I could use the @import in my main LESS file and either include the imported file's contents, or even just use it as a reference (i.e. pick up its variables for use in other files).

@import (reference) "variables.less";

If I had a project with multiple LESS files that need compiling, this would allow me to have common helpers and variables included, but nothing else in that file processed (think maybe reset CSS for example).

But in SCSS, all you can do is import. Period. The parser itself will do one of two things:

  1. If the file is SCSS (or SASS), it will process it and include its output in the calling file
  2. If the file is anything else, it will spit it out as an @import statement again

The (reference) call was so handy to use.

A workaround is to approach my structure a little differently. I'll now have:

  1. a reset style sheet (and the usual defaults that I tend to use)
  2. a generic "helper" SCSS file (with mixins, but no direct output)
  3. a project-specific "helper" SCSS file (with variables and project-specific mixins)
  4. a main site SCSS (for above the fold, including all of the above plus additional external SCSS files)
  5. additional SCSS (if below the fold loading is needed, a dedicated print sheet, etc, including the generic and project-specific helpers)

This means that I can still use the same concept as LESS's "reference", but just need to have more files to do this.

But besides this, I have embraced the switch to SCSS, and even written some really cool helper functions for a project that needed to repeat styles based on an array of colours. Neat!


View all

2020: refreshing the life of a long term developer

2020 has been incredibly refreshing. Let’s also be blunt, it’s been completely shit for so many too – including isolation from family and months of Stage...

Continue reading...


Astro's Playroom

Astro’s Playroom. It’s free, and comes pre-installed on your PS5. It is basically a tech demo wrapped up in a platformer. And a pretty fun platformer too. And...

Continue reading...


Creating a TinyMCE addon for Statamic 3

It’s no secret: I do love TinyMCE. It provides an excellent authoring experience, that produces clean and reliable HTML, and can easily be customised and extended...

Continue reading...


Installing and review of the Sonos Wall Mount with the Sonos One SL

I’m new to the Sonos ecosystem, and after setting up the Sonos Arc and Sub combination, I wanted more, so splurged on a pair of One SL speakers for surrounds....

Continue reading...

I am the Development Director (and co-owner) at Mity Digital, a Melbourne-based digital agency specialising in responsive web design, custom web development and graphic design.
Mity Digital