Controla el scope de tus import CSS con meta.load-css en Sass

#scss

En contraste con la regla @import de Sass, el nuevo @use solo puede ser usado al inicio de un archivo, antes de cualquier declaraciĆ³n. Usarlo dentro de un selector de CSS no esta permitido. Por ejemplo:

.dark-theme {
  // Funciona
  @import "./dark-theme.scss";

  // NO funciona
  @use "./dark-theme.scss";
}

Pero sigue existiendo una forma de controlar el scope de las importaciones. La funciĆ³n meta.load-css nos permite importar un archivo SCSS dentro de un selector y hacer que el scope se quede ne ese selector:

@use "sass:meta";

.dark-theme {
  @include meta.load-css("./dark-theme.scss");
}

A diferencia de @import, meta.load-css no afecta el parent selector & en la importacion del archivo. Dado el siguiente archivo:

// dark-theme.scss
button {
  & + & {
    margin-inline-start: 1rem;
  }
}

Importarlo con @import puede resultar en un selector CSS que tecnicamente es valido pero puede ser uno que no queremos:

// Usando @import da como resultado:
.dark-theme button + .dark-theme button {
  margin-inline-start: 1rem;
}

Nota: Si usamos un @mixin le pasaria lo mismo al selector CSS que si usaremos un @import.

Usando meta.load-css no rompe el parent selector:

// Ussando meta.load-css da como resultado:
.dark-theme button + button {
  margin-inline-start: 1rem;
}