Tips・Tools you wonder if you still need

Is Sass still necessary?

With variables and nesting available in plain CSS, learning Sass has dropped down the priority list. Here's a table of what plain CSS absorbed, what remains Sass-only, and how to read a .scss file when you meet one.

The short answer: learning Sass has dropped down the priority list. The reason is simple—variables and nesting, Sass’s main selling points, can now be written in plain CSS.

But “not required” and “not worth knowing” are different. It’s still widely used in existing work, so you do want to be able to read a .scss file. This article sorts out what plain CSS absorbed and what remains Sass-only.

What Sass was solving

Sass spread as a tool that filled four gaps in CSS.

  • Variables—give colours and spacing names, and manage them in one place
  • Nesting—write parent-child relationships as nested blocks
  • @mixin—give a chunk of declarations a name and reuse it
  • File splitting—split by component, then emit one CSS file

CSS at the time could do none of it, so on larger sites Sass was practically mandatory.

The first two are plain CSS now

Variables (custom properties)

:root {
  --main-color: #ff8a3d;
  --space: 16px;
}
.button {
  background: var(--main-color);
  padding: var(--space);
}

Sass’s $main-color corresponds to plain CSS’s --main-color. And plain CSS variables can do things Sass variables can’t.

  • They can be overridden later—dark mode or theme switching can swap just the variable’s value
  • JavaScript can read and write them—you can change values while the page runs

Sass variables are resolved at build time and then gone, so neither is possible. On this point plain CSS is stronger—that’s the honest assessment today.

CSSManage colors in one place with CSS variablesHow to use CSS variables, in this lesson of the CSS course

Nesting

.card {
  padding: 16px;

  .title {
    font-size: 20px;
  }

  &:hover {
    background: #fff3ea;
  }
}

That’s plain CSS. It works with no Sass at all. Being able to nest removes another reason to reach for Sass.

What Sass is still better at

Some features haven’t landed in plain CSS. This is why people keep using it.

Sass featureWhat it doesIn plain CSS
@mixin / @includeName a chunk of declarations and reuse itMissing (variables only carry values)
@each / @forGenerate rules in a loopMissing
@functionYour own function returning a valueMissing (partly covered by calc(), color-mix())
&__title joiningUse & to build the name block__titleMissing (& exists, joining doesn’t)
@use / file splittingCombine several files into one output@import exists but slows loading

The ones that really earn their keep are @mixin and @each. “Use the same chunk of declarations in ten places,” “generate twenty classes from a list of colour names”—Sass does those in a few lines. The bigger the codebase, the more Sass is worth.

How to read a .scss file

Just the things worth knowing when you meet one in an existing project.

$ is a variable

$main-color: #ff8a3d;

.button {
  background: $main-color;
}

The equivalent of plain CSS’s var(--main-color). See $, think “variable.”

& is “the parent selector itself”

.card {
  &:hover { ... }      // → .card:hover
  &.is-open { ... }    // → .card.is-open
  &__title { ... }     // → .card__title  ← the form plain CSS lacks
  .title & { ... }     // → .title .card
}

Only the third—joining class names—is missing from plain CSS. Not knowing it makes “where is this class name even defined?” untraceable.

@include is “call a chunk”

@mixin card-shadow {
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
  border-radius: 12px;
}

.card {
  @include card-shadow;   // the chunk above is expanded here
}

See @include, and go find the @mixin of the same name to see the contents.

@use is “load another file”

@use 'variables';
@use 'mixins';

A file-splitting declaration. A file whose name starts with an underscore, like _variables.scss, means “a part that isn’t emitted on its own”—so that’s where the variable definitions live.

Using Sass means adding a build

This is the biggest practical difference. Browsers can’t read .scss, so you need a step that converts it to CSS.

That means “save and reload the browser” no longer covers it, and something has to run the conversion. That extra step is exactly why a beginner can leave Sass for later.

CoursenpmActually running that conversion once, in the npm course

Deciding whether to use it

SituationWhat to do
You’re learningDeepen plain CSS. Variables and nesting are already there
A personal or small sitePlain CSS is enough; a build isn’t worth adding
Joining an existing projectMatch the project. Reading it is enough
Large codebase reusing the same declarations a lotSass earns its keep (@mixin, @each)
Using an agency templateIf it’s Sass inside, match it

“Fewer reasons to choose it new, but alive in existing work”—a similar position to jQuery. Unlike jQuery, though, Sass is still sometimes chosen for new work (at scale, where @mixin pays off).

TipsIs jQuery still necessary?The same “is it still necessary?” call, for jQuery

Summary

  1. Sass’s main selling points—variables and nesting—are writable in plain CSS
  2. CSS variables can be overridden later and read from JS—stronger than Sass here
  3. Sass still wins on @mixin, @each, and &__title joining
  4. To read .scss: “$ is a variable, & is the parent, @include calls a chunk”
  5. Sass needs a build—which is why a beginner can leave it for later
CourseCSSTo learn plain CSS from the basics, the CSS course

Widening what you can write in plain CSS builds more skill than adding tools. Sass will wait until the day you actually need it.

FAQ

Do I need to learn Sass now?
As a beginner priority, it's low. Sass's main selling points—variables and nesting—can be written in plain CSS. But it's still used in existing projects and agency templates, so being able to read a .scss file keeps you out of trouble.
Are Sass and SCSS different things?
They're two syntaxes for the same tool. SCSS uses braces and semicolons and stays close to CSS; it's what people use today. The .sass syntax expresses structure with indentation and is the older form.
Is nesting in plain CSS the same as in Sass?
Basic nesting is written almost identically. What plain CSS lacks is Sass's & used to join class names (writing &__title to build block__title). That's the biggest remaining difference.
What do I need in order to use Sass?
Browsers can't read .scss, so you need something that converts it to CSS. Installing it through npm is standard—meaning you're adding a build step.