Stop 03 · CSS3Styling Tools & Libraries · 3/5

SCSS/SASS

Part of the Frontend Developer Roadmap

In short

Sass adds nesting, mixins, loops and partial files to CSS. It gets compiled into normal CSS, so browsers never know it was there.

A CSS preprocessor adding variables, nesting, mixins and functions to plain CSS, compiled down to regular CSS the browser understands. Preprocessors can improve organization and reuse, although modern CSS now provides many capabilities—such as custom properties, nesting, and functions—that reduce the need for preprocessing.

The jaadu mascot kneads atta dough in a steel bowl next to a fresh puffed roti on a plate.

Think of it like this

Atta dough vs the roti

You knead dough with water, salt and oil, but what lands on the plate is a roti. Sass is the dough: you write with extra tools, and the compiler 'cooks' it into plain CSS that the browser eats.

Watch it happen

From SCSS to plain CSS

_tokens
main.scss
Sass
main.css
Browser

1/5The partial holds the $brand variable and the md mixin. Its underscore means it isn't compiled alone.

The big ideas

What you need to know

SCSS vs Sass

SCSS uses braces and semicolons like CSS, so any CSS file is valid SCSS. The older Sass syntax uses indentation instead.

Nesting and &

Nest rules inside their parent and use & for the parent itself, like &:hover or &--active.

Mixins and functions

@mixin saves a group of styles you can include anywhere, like a reusable breakpoint.

Partials with @use

Split files like _buttons.scss and load them with @use. The older @import is deprecated in Sass.

See it in code

Walk through the code

scss
1// _tokens.scss2$brand: #ec4899;3@mixin md { @media (min-width: 768px) { @content; } }4 5// main.scss6@use "tokens" as t;7 8.card {9  padding: 1rem;10  border: 1px solid rgba(t.$brand, 0.3);11 12  &__title { color: t.$brand; }13  &:hover { border-color: t.$brand; }14 15  @include t.md { padding: 2rem; }16}

1/4The partial defines a colour variable and a reusable min-width mixin.

&__title compiles to .card__title, which pairs nicely with BEM. The md mixin wraps a media query you can reuse.

Save yourself the pain

Common mistakes

Oops

Nesting five levels deep because you can.

Do this instead

Keep nesting to two or three levels. Deep nesting creates long, over-specific selectors.

Oops

Using @import to split files in new projects.

Do this instead

Use @use and @forward. They avoid duplicate output and keep variables scoped.

Your mission

Sass up a project

~30 min

Quick check

Inside .btn { &--primary { ... } }, what selector does Sass output?

Go deeper

  1. 1Convert a plain CSS file to SCSS using nesting and variables. Validate your understanding by applying it in a small practical example.
  2. 2Write a reusable mixin (e.g. for flex centering) and use it in multiple places. Validate your understanding by applying it in a small practical example.
  3. 3Learn `@use`/`@forward` for splitting styles into partial files.

More styling tools & libraries at this stop

Stuck on this topic? Ask an Insider

Get 1:1 guidance from people who've walked this exact path — on the InsideEdge app.

Download
InsideEdge