Sass Import 📦
Organize your stylesheets with modular imports and scalable architecture patterns.
What is Sass Import?
Sass @import allows you to split your stylesheets into multiple files and combine them into a single CSS output. This enables modular architecture, better organization, and more maintainable codebases.
🏗️ Modular Architecture
Split styles into logical components
📁 Better Organization
Group related styles together
⚡ Maintainability
Easier to find and update code
Basic Sass Import
Core Concepts:
- Partials: Files prefixed with _ (_filename.scss)
- @import: Combine multiple files into one output
- File Organization: Logical folder structure
- Import Order: Dependencies and cascade matter
- Single Output: All imports compile to one CSS file
Basic Import Implementation
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sass Import - Modular CSS Architecture</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', sans-serif;
line-height: 1.6;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 2rem;
color: #2c3e50;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
.header {
text-align: center;
margin-bottom: 3rem;
color: white;
}
.header h1 {
font-size: 3rem;
margin-bottom: 1rem;
text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}
.comparison-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
margin-bottom: 3rem;
}
.code-panel {
background: white;
border-radius: 10px;
padding: 1.5rem;
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
}
.code-panel h3 {
color: #2c3e50;
margin-bottom: 1rem;
padding-bottom: 0.5rem;
border-bottom: 2px solid #3498db;
}
.sass-code, .css-code {
background: #2c3e50;
color: #ecf0f1;
padding: 1rem;
border-radius: 5px;
font-family: 'Fira Code', monospace;
font-size: 0.9rem;
line-height: 1.4;
overflow-x: auto;
}
.comment { color: #7f8c8d; }
.keyword { color: #e74c3c; font-weight: bold; }
.selector { color: #9b59b6; }
.property { color: #3498db; }
.value { color: #2ecc71; }
.file-structure {
background: #34495e;
color: white;
padding: 1.5rem;
border-radius: 8px;
margin: 1rem 0;
font-family: 'Fira Code', monospace;
}
.file-item {
margin: 0.5rem 0;
padding-left: 1rem;
}
.folder {
color: #3498db;
font-weight: bold;
}
.file {
color: #2ecc71;
}
.demo-area {
background: white;
border-radius: 15px;
padding: 2rem;
margin: 2rem 0;
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
}
.card {
background: white;
border-radius: 10px;
padding: 2rem;
margin: 1rem 0;
box-shadow: 0 4px 8px rgba(0,0,0,0.1);
border-left: 4px solid #3498db;
}
.btn {
display: inline-block;
padding: 1rem 2rem;
margin: 0.5rem;
border: none;
border-radius: 5px;
font-size: 1rem;
cursor: pointer;
transition: all 0.3s ease;
}
.btn-primary {
background: #3498db;
color: white;
}
.btn-primary:hover {
background: #2980b9;
transform: translateY(-2px);
}
@media (max-width: 768px) {
.comparison-grid {
grid-template-columns: 1fr;
}
.header h1 {
font-size: 2rem;
}
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>📦 Sass Import</h1>
<p>Organize your stylesheets with modular imports</p>
</div>
<div class="comparison-grid">
<div class="code-panel">
<h3>🏗️ Basic Import Structure</h3>
<div class="file-structure">
<div class="folder">styles/</div>
<div class="file-item file">main.scss</div>
<div class="file-item file">_variables.scss</div>
<div class="file-item file">_mixins.scss</div>
<div class="file-item file">_buttons.scss</div>
<div class="file-item file">_cards.scss</div>
<div class="file-item file">_layout.scss</div>
</div>
<div class="sass-code">
<span class="comment">// main.scss - Main entry point</span><br>
<span class="keyword">@import</span> <span class="value">'variables'</span>;<br>
<span class="keyword">@import</span> <span class="value">'mixins'</span>;<br>
<span class="keyword">@import</span> <span class="value">'layout'</span>;<br>
<span class="keyword">@import</span> <span class="value">'buttons'</span>;<br>
<span class="keyword">@import</span> <span class="value">'cards'</span>;<br><br>
<span class="comment">// Global styles</span><br>
<span class="selector">body</span> {<br>
<span class="property">font-family</span>: <span class="variable">$font-family-base</span>;<br>
<span class="property">background</span>: <span class="variable">$background-color</span>;<br>
<span class="property">color</span>: <span class="variable">$text-color</span>;<br>
}
</div>
</div>
<div class="code-panel">
<h3>📁 Partial Files</h3>
<div class="sass-code">
<span class="comment">// _variables.scss - Variables partial</span><br>
<span class="variable">$font-family-base</span>: <span class="value">'Inter', sans-serif</span>;<br>
<span class="variable">$primary-color</span>: <span class="value">#3498db</span>;<br>
<span class="variable">$secondary-color</span>: <span class="value">#2ecc71</span>;<br>
<span class="variable">$background-color</span>: <span class="value">#f8f9fa</span>;<br>
<span class="variable">$text-color</span>: <span class="value">#2c3e50</span>;<br><br>
<span class="comment">// _mixins.scss - Mixins partial</span><br>
<span class="keyword">@mixin</span> <span class="selector">flex-center</span> {<br>
<span class="property">display</span>: <span class="value">flex</span>;<br>
<span class="property">justify-content</span>: <span class="value">center</span>;<br>
<span class="property">align-items</span>: <span class="value">center</span>;<br>
}<br><br>
<span class="comment">// _buttons.scss - Button components</span><br>
<span class="selector">.btn</span> {<br>
<span class="property">display</span>: <span class="value">inline-block</span>;<br>
<span class="property">padding</span>: <span class="value">1rem 2rem</span>;<br>
<span class="property">border</span>: <span class="value">none</span>;<br>
<span class="property">border-radius</span>: <span class="value">5px</span>;<br>
<span class="property">cursor</span>: <span class="value">pointer</span>;<br>
<span class="property">transition</span>: <span class="value">all 0.3s ease</span>;<br>
}<br><br>
<span class="selector">.btn-primary</span> {<br>
<span class="property">background</span>: <span class="variable">$primary-color</span>;<br>
<span class="property">color</span>: <span class="value">white</span>;<br>
}
</div>
</div>
</div>
<div class="comparison-grid">
<div class="code-panel">
<h3>🎯 Import Order & Dependencies</h3>
<div class="sass-code">
<span class="comment">// Correct import order</span><br>
<span class="keyword">@import</span> <span class="value">'abstracts/variables'</span>;<br>
<span class="keyword">@import</span> <span class="value">'abstracts/mixins'</span>;<br>
<span class="keyword">@import</span> <span class="value">'abstracts/functions'</span>;<br><br>
<span class="keyword">@import</span> <span class="value">'base/reset'</span>;<br>
<span class="keyword">@import</span> <span class="value">'base/typography'</span>;<br><br>
<span class="keyword">@import</span> <span class="value">'layout/header'</span>;<br>
<span class="keyword">@import</span> <span class="value">'layout/footer'</span>;<br>
<span class="keyword">@import</span> <span class="value">'layout/grid'</span>;<br><br>
<span class="keyword">@import</span> <span class="value">'components/buttons'</span>;<br>
<span class="keyword">@import</span> <span class="value">'components/cards'</span>;<br>
<span class="keyword">@import</span> <span class="value">'components/forms'</span>;<br><br>
<span class="keyword">@import</span> <span class="value">'pages/home'</span>;<br>
<span class="keyword">@import</span> <span class="value">'pages/about'</span>;<br><br>
<span class="keyword">@import</span> <span class="value">'themes/dark'</span>;<br>
<span class="keyword">@import</span> <span class="value">'themes/light'</span>;<br><br>
<span class="keyword">@import</span> <span class="value">'shame'</span>; <span class="comment">// For quick fixes</span>
</div>
</div>
<div class="code-panel">
<h3>📄 Compiled CSS Output</h3>
<div class="css-code">
<span class="comment">/* Combined CSS from all imports */</span><br><br>
<span class="selector">body</span> {<br>
<span class="property">font-family</span>: <span class="value">'Inter', sans-serif</span>;<br>
<span class="property">background</span>: <span class="value">#f8f9fa</span>;<br>
<span class="property">color</span>: <span class="value">#2c3e50</span>;<br>
}<br><br>
<span class="selector">.btn</span> {<br>
<span class="property">display</span>: <span class="value">inline-block</span>;<br>
<span class="property">padding</span>: <span class="value">1rem 2rem</span>;<br>
<span class="property">border</span>: <span class="value">none</span>;<br>
<span class="property">border-radius</span>: <span class="value">5px</span>;<br>
<span class="property">cursor</span>: <span class="value">pointer</span>;<br>
<span class="property">transition</span>: <span class="value">all 0.3s ease</span>;<br>
}<br><br>
<span class="selector">.btn-primary</span> {<br>
<span class="property">background</span>: <span class="value">#3498db</span>;<br>
<span class="property">color</span>: <span class="value">white</span>;<br>
}<br><br>
<span class="comment">/* ... and all other imported styles */</span>
</div>
</div>
</div>
<div class="demo-area">
<h3>🚀 Live Demo - Import Architecture</h3>
<h4>Component-Based Structure</h4>
<div class="file-structure">
<div class="folder">src/</div>
<div class="file-item folder">scss/</div>
<div class="file-item file" style="margin-left: 2rem;">main.scss</div>
<div class="file-item folder" style="margin-left: 2rem;">abstracts/</div>
<div class="file-item file" style="margin-left: 4rem;">_variables.scss</div>
<div class="file-item file" style="margin-left: 4rem;">_mixins.scss</div>
<div class="file-item folder" style="margin-left: 2rem;">components/</div>
<div class="file-item file" style="margin-left: 4rem;">_buttons.scss</div>
<div class="file-item file" style="margin-left: 4rem;">_cards.scss</div>
<div class="file-item file" style="margin-left: 4rem;">_forms.scss</div>
<div class="file-item folder" style="margin-left: 2rem;">layout/</div>
<div class="file-item file" style="margin-left: 4rem;">_header.scss</div>
<div class="file-item file" style="margin-left: 4rem;">_footer.scss</div>
<div class="file-item file" style="margin-left: 4rem;">_grid.scss</div>
</div>
<h4>Imported Components in Action</h4>
<div style="text-align: center; margin: 2rem 0;">
<button class="btn btn-primary">Imported Button</button>
<button class="btn" style="background: #2ecc71; color: white; margin-left: 1rem;">Secondary Button</button>
</div>
<div style="background: #f8f9fa; padding: 2rem; border-radius: 8px; margin: 1rem 0;">
<h4>Card Component (from _cards.scss)</h4>
<p>This card demonstrates styles imported from a partial file.</p>
</div>
</div>
<div class="card">
<h3>💡 Why Use @import?</h3>
<ul>
<li><strong>Modular Architecture:</strong> Break styles into logical components</li>
<li><strong>Better Organization:</strong> Group related styles together</li>
<li><strong>Reusability:</strong> Share variables, mixins, and components</li>
<li><strong>Maintainability:</strong> Find and update styles more easily</li>
<li><strong>Team Collaboration:</strong> Multiple developers can work on different parts</li>
<li><strong>Performance:</strong> Only compile what you need</li>
</ul>
</div>
</div>
</body>
</html>Advanced Import Techniques
7-1 Architecture
Professional folder structure with 7 folders and 1 main file.
Conditional Import
Import files conditionally based on configuration variables.
Advanced Techniques Implementation
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sass Import - Advanced Techniques & Architecture</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', sans-serif;
line-height: 1.6;
background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);
min-height: 100vh;
padding: 2rem;
color: #2c3e50;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
.header {
text-align: center;
margin-bottom: 3rem;
color: white;
}
.header h1 {
font-size: 3rem;
margin-bottom: 1rem;
text-shadow: 2px 2px 4px rgba(0,0,0,0.3);
}
.feature-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(500px, 1fr));
gap: 2rem;
margin-bottom: 3rem;
}
.feature-card {
background: white;
border-radius: 15px;
padding: 2rem;
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
}
.code-comparison {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
margin: 1rem 0;
}
.sass-code, .css-code {
background: #2c3e50;
color: #ecf0f1;
padding: 1rem;
border-radius: 5px;
font-family: 'Fira Code', monospace;
font-size: 0.8rem;
line-height: 1.4;
overflow-x: auto;
}
.comment { color: #7f8c8d; }
.keyword { color: #e74c3c; font-weight: bold; }
.selector { color: #9b59b6; }
.property { color: #3498db; }
.value { color: #2ecc71; }
.file-structure {
background: #34495e;
color: white;
padding: 1.5rem;
border-radius: 8px;
margin: 1rem 0;
font-family: 'Fira Code', monospace;
}
.file-item {
margin: 0.5rem 0;
padding-left: 1rem;
}
.folder {
color: #3498db;
font-weight: bold;
}
.file {
color: #2ecc71;
}
.demo-section {
background: #f8f9fa;
padding: 2rem;
border-radius: 10px;
margin: 2rem 0;
}
.architecture-diagram {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
margin: 2rem 0;
}
.arch-item {
background: white;
padding: 1.5rem;
border-radius: 8px;
text-align: center;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.arch-icon {
font-size: 2rem;
margin-bottom: 1rem;
}
@media (max-width: 768px) {
.feature-grid {
grid-template-columns: 1fr;
}
.code-comparison {
grid-template-columns: 1fr;
}
.header h1 {
font-size: 2rem;
}
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>⚡ Advanced Sass Import</h1>
<p>Scalable Architecture, Namespacing, and Performance</p>
</div>
<!-- 7-1 Architecture -->
<div class="feature-card">
<h3>🏗️ 7-1 Architecture Pattern</h3>
<div class="code-comparison">
<div class="sass-code">
<span class="comment">// main.scss - 7-1 Architecture</span><br>
<span class="keyword">@import</span> <span class="value">'abstracts/index'</span>;<br>
<span class="keyword">@import</span> <span class="value">'vendors/index'</span>;<br>
<span class="keyword">@import</span> <span class="value">'base/index'</span>;<br>
<span class="keyword">@import</span> <span class="value">'layout/index'</span>;<br>
<span class="keyword">@import</span> <span class="value">'components/index'</span>;<br>
<span class="keyword">@import</span> <span class="value">'pages/index'</span>;<br>
<span class="keyword">@import</span> <span class="value">'themes/index'</span>;<br><br>
<span class="comment">// abstracts/_index.scss</span><br>
<span class="keyword">@import</span> <span class="value">'variables'</span>;<br>
<span class="keyword">@import</span> <span class="value">'mixins'</span>;<br>
<span class="keyword">@import</span> <span class="value">'functions'</span>;<br>
<span class="keyword">@import</span> <span class="value">'placeholders'</span>;<br><br>
<span class="comment">// components/_index.scss</span><br>
<span class="keyword">@import</span> <span class="value">'buttons'</span>;<br>
<span class="keyword">@import</span> <span class="value">'cards'</span>;<br>
<span class="keyword">@import</span> <span class="value">'forms'</span>;<br>
<span class="keyword">@import</span> <span class="value">'navigation'</span>;
</div>
<div class="file-structure">
<div class="folder">scss/</div>
<div class="file-item file">main.scss</div>
<div class="file-item folder">abstracts/</div>
<div class="file-item file" style="margin-left: 2rem;">_index.scss</div>
<div class="file-item file" style="margin-left: 2rem;">_variables.scss</div>
<div class="file-item file" style="margin-left: 2rem;">_mixins.scss</div>
<div class="file-item file" style="margin-left: 2rem;">_functions.scss</div>
<div class="file-item folder">base/</div>
<div class="file-item file" style="margin-left: 2rem;">_index.scss</div>
<div class="file-item file" style="margin-left: 2rem;">_reset.scss</div>
<div class="file-item file" style="margin-left: 2rem;">_typography.scss</div>
<div class="file-item folder">components/</div>
<div class="file-item file" style="margin-left: 2rem;">_index.scss</div>
<div class="file-item file" style="margin-left: 2rem;">_buttons.scss</div>
<div class="file-item file" style="margin-left: 2rem;">_cards.scss</div>
</div>
</div>
<div class="demo-section">
<h4>7-1 Architecture Layers</h4>
<div class="architecture-diagram">
<div class="arch-item">
<div class="arch-icon">🎯</div>
<h5>Abstracts</h5>
<p>Variables, Mixins, Functions</p>
</div>
<div class="arch-item">
<div class="arch-icon">📦</div>
<h5>Vendors</h5>
<p>Third-party styles</p>
</div>
<div class="arch-item">
<div class="arch-icon">🔧</div>
<h5>Base</h5>
<p>Reset, Typography</p>
</div>
<div class="arch-item">
<div class="arch-icon">📐</div>
<h5>Layout</h5>
<p>Header, Footer, Grid</p>
</div>
<div class="arch-item">
<div class="arch-icon">🧩</div>
<h5>Components</h5>
<p>Buttons, Cards, Forms</p>
</div>
<div class="arch-item">
<div class="arch-icon">📄</div>
<h5>Pages</h5>
<p>Page-specific styles</p>
</div>
<div class="arch-item">
<div class="arch-icon">🎨</div>
<h5>Themes</h5>
<p>Dark, Light themes</p>
</div>
</div>
</div>
</div>
<!-- Conditional Import -->
<div class="feature-card">
<h3>🎯 Conditional Import & Configuration</h3>
<div class="code-comparison">
<div class="sass-code">
<span class="comment">// _config.scss - Configuration</span><br>
<span class="variable">$enable-dark-mode</span>: <span class="value">true</span> !default;<br>
<span class="variable">$enable-rtl</span>: <span class="value">false</span> !default;<br>
<span class="variable">$enable-components</span>: <span class="value">true</span> !default;<br><br>
<span class="comment">// main.scss - Conditional imports</span><br>
<span class="keyword">@import</span> <span class="value">'config'</span>;<br><br>
<span class="comment">// Base styles</span><br>
<span class="keyword">@import</span> <span class="value">'base/reset'</span>;<br>
<span class="keyword">@import</span> <span class="value">'base/typography'</span>;<br><br>
<span class="comment">// Conditional components</span><br>
<span class="keyword">@if</span> <span class="variable">$enable-components</span> {<br>
<span class="keyword">@import</span> <span class="value">'components/buttons'</span>;<br>
<span class="keyword">@import</span> <span class="value">'components/cards'</span>;<br>
<span class="keyword">@import</span> <span class="value">'components/forms'</span>;<br>
}<br><br>
<span class="comment">// Theme conditional</span><br>
<span class="keyword">@if</span> <span class="variable">$enable-dark-mode</span> {<br>
<span class="keyword">@import</span> <span class="value">'themes/dark'</span>;<br>
}<br><br>
<span class="comment">// RTL support</span><br>
<span class="keyword">@if</span> <span class="variable">$enable-rtl</span> {<br>
<span class="keyword">@import</span> <span class="value">'layout/rtl'</span>;<br>
}
</div>
<div class="sass-code">
<span class="comment">// Component-specific import</span><br>
<span class="keyword">@import</span> <span class="value">'../abstracts/variables'</span>;<br>
<span class="keyword">@import</span> <span class="value">'../abstracts/mixins'</span>;<br><br>
<span class="comment">// _buttons.scss</span><br>
<span class="selector">.btn</span> {<br>
<span class="property">display</span>: <span class="value">inline-block</span>;<br>
<span class="property">padding</span>: <span class="variable">$spacing-md</span> <span class="variable">$spacing-lg</span>;<br>
<span class="property">border</span>: <span class="value">none</span>;<br>
<span class="property">border-radius</span>: <span class="variable">$border-radius</span>;<br>
<span class="keyword">@include</span> <span class="selector">transition</span>;<br>
}<br><br>
<span class="comment">// Import within component for variants</span><br>
<span class="keyword">@import</span> <span class="value">'buttons/primary'</span>;<br>
<span class="keyword">@import</span> <span class="value">'buttons/secondary'</span>;<br>
<span class="keyword">@import</span> <span class="value">'buttons/outline'</span>;
</div>
</div>
</div>
<!-- Namespacing -->
<div class="feature-card">
<h3>📛 Import Namespacing</h3>
<div class="code-comparison">
<div class="sass-code">
<span class="comment">// With namespacing</span><br>
<span class="keyword">@import</span> <span class="value">'utils/mixins'</span> <span class="keyword">as</span> mixins;<br>
<span class="keyword">@import</span> <span class="value">'components/buttons'</span> <span class="keyword">as</span> buttons;<br><br>
<span class="comment">// Usage with namespace</span><br>
<span class="selector">.my-component</span> {<br>
<span class="keyword">@include</span> mixins.<span class="selector">flex-center</span>;<br>
<span class="keyword">@extend</span> buttons.<span class="selector">btn-base</span>;<br>
}<br><br>
<span class="comment">// Alternative: Forward and use</span><br>
<span class="keyword">@use</span> <span class="value">'utils/mixins'</span>;<br>
<span class="keyword">@use</span> <span class="value">'components/buttons'</span>;<br><br>
<span class="selector">.my-component</span> {<br>
<span class="keyword">@include</span> mixins.<span class="selector">flex-center</span>;<br>
<span class="keyword">@extend</span> buttons.<span class="selector">btn-base</span>;<br>
}
</div>
<div class="sass-code">
<span class="comment">// Forwarding modules</span><br>
<span class="comment">// _index.scss in utils/</span><br>
<span class="keyword">@forward</span> <span class="value">'mixins'</span>;<br>
<span class="keyword">@forward</span> <span class="value">'functions'</span>;<br>
<span class="keyword">@forward</span> <span class="value">'variables'</span>;<br><br>
<span class="comment">// Main file using forwarded modules</span><br>
<span class="keyword">@use</span> <span class="value">'utils'</span>;<br><br>
<span class="selector">.component</span> {<br>
<span class="property">padding</span>: utils.<span class="function-name">spacing</span>(<span class="value">2</span>);<br>
<span class="keyword">@include</span> utils.<span class="selector">flex-center</span>;<br>
}<br><br>
<span class="comment">// With configuration</span><br>
<span class="keyword">@use</span> <span class="value">'utils'</span> <span class="keyword">with</span> (<br>
<span class="variable">$primary-color</span>: <span class="value">#3498db</span>,<br>
<span class="variable">$font-size-base</span>: <span class="value">16px</span><br>
);
</div>
</div>
</div>
</div>
</body>
</html>Import Best Practices
File Organization
Follow consistent naming conventions and logical folder structures to make your codebase maintainable and scalable.
Best Practices Implementation
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sass Import - Best Practices & Migration</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', sans-serif;
line-height: 1.6;
background: linear-gradient(135deg, #ff9a9e 0%, #fecfef 100%);
min-height: 100vh;
padding: 2rem;
color: #2c3e50;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
.header {
text-align: center;
margin-bottom: 3rem;
}
.header h1 {
font-size: 3rem;
margin-bottom: 1rem;
color: #2c3e50;
}
.practices-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 2rem;
margin-bottom: 3rem;
}
.practice-card {
background: white;
border-radius: 15px;
padding: 2rem;
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
}
.do-dont {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
margin: 1rem 0;
}
.do {
background: #d4edda;
border: 2px solid #c3e6cb;
padding: 1rem;
border-radius: 5px;
}
.dont {
background: #f8d7da;
border: 2px solid #f5c6cb;
padding: 1rem;
border-radius: 5px;
}
.good-example, .bad-example {
padding: 1rem;
margin: 1rem 0;
border-radius: 5px;
font-family: 'Fira Code', monospace;
font-size: 0.8rem;
}
.good-example {
background: #d1ecf1;
border-left: 4px solid #17a2b8;
}
.bad-example {
background: #f8d7da;
border-left: 4px solid #dc3545;
}
.migration-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
margin: 2rem 0;
}
.migration-card {
background: #f8f9fa;
padding: 2rem;
border-radius: 10px;
}
.performance-tips {
background: #fff3cd;
border-left: 4px solid #ffc107;
padding: 1.5rem;
margin: 1rem 0;
border-radius: 5px;
}
.workflow-steps {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1rem;
margin: 2rem 0;
}
.step {
background: white;
padding: 1.5rem;
border-radius: 10px;
text-align: center;
box-shadow: 0 2px 10px rgba(0,0,0,0.1);
}
.step-number {
background: #3498db;
color: white;
width: 40px;
height: 40px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
margin: 0 auto 1rem;
font-weight: bold;
}
@media (max-width: 768px) {
.practices-grid {
grid-template-columns: 1fr;
}
.do-dont {
grid-template-columns: 1fr;
}
.migration-grid {
grid-template-columns: 1fr;
}
.header h1 {
font-size: 2rem;
}
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>✅ Sass Import Best Practices</h1>
<p>Organized Architecture, Performance, and Modern Migration</p>
</div>
<div class="practices-grid">
<div class="practice-card">
<h3>📏 File Organization</h3>
<p>Structure your imports logically:</p>
<div class="do-dont">
<div class="do">
<strong>✅ Organized Structure</strong>
<div class="good-example">
scss/<br>
├── abstracts/<br>
├── base/<br>
├── components/<br>
├── layout/<br>
├── pages/<br>
└── main.scss
</div>
</div>
<div class="dont">
<strong>❌ Disorganized</strong>
<div class="bad-example">
styles/<br>
├── style1.scss<br>
├── style2.scss<br>
├── buttons.css<br>
└── main.css
</div>
</div>
</div>
</div>
<div class="practice-card">
<h3>🎯 Import Order</h3>
<p>Follow a logical import sequence:</p>
<div class="do-dont">
<div class="do">
<strong>✅ Logical Order</strong>
<div class="good-example">
// 1. Abstracts<br>
@import 'abstracts';<br><br>
// 2. Vendors<br>
@import 'vendors';<br><br>
// 3. Base<br>
@import 'base';<br><br>
// 4. Components<br>
@import 'components';<br><br>
// 5. Pages<br>
@import 'pages';
</div>
</div>
<div class="dont">
<strong>❌ Random Order</strong>
<div class="bad-example">
@import 'components';<br>
@import 'variables';<br>
@import 'base';<br>
@import 'mixins';<br>
@import 'layout';
</div>
</div>
</div>
</div>
<div class="practice-card">
<h3>⚡ Performance Considerations</h3>
<p>Optimize import performance:</p>
<div class="performance-tips">
<strong>💡 Performance Tips:</strong>
<ul>
<li>Avoid circular dependencies between imports</li>
<li>Use partials (_filename.scss) to prevent direct compilation</li>
<li>Group related imports in index files</li>
<li>Consider using @use instead of @import for new projects</li>
<li>Remove unused imports regularly</li>
</ul>
</div>
<div class="do-dont">
<div class="do">
<strong>✅ Efficient</strong>
<div class="good-example">
// _index.scss in components/<br>
@import 'buttons';<br>
@import 'cards';<br>
@import 'forms';<br><br>
// main.scss<br>
@import 'components';
</div>
</div>
<div class="dont">
<strong>❌ Inefficient</strong>
<div class="bad-example">
// main.scss<br>
@import 'components/buttons';<br>
@import 'components/cards';<br>
@import 'components/forms';<br>
@import 'components/nav';<br>
@import 'components/footer';<br>
// ... many more individual imports
</div>
</div>
</div>
</div>
<div class="practice-card">
<h3>🔧 Naming Conventions</h3>
<p>Use consistent naming patterns:</p>
<div class="do-dont">
<div class="do">
<strong>✅ Clear Names</strong>
<div class="good-example">
_variables.scss<br>
_mixins.scss<br>
_buttons.scss<br>
_card-component.scss<br>
_layout-grid.scss<br>
_dark-theme.scss
</div>
</div>
<div class="dont">
<strong>❌ Unclear Names</strong>
<div class="bad-example">
vars.scss<br>
mix.scss<br>
btn.scss<br>
card.scss<br>
grid.scss<br>
dark.scss
</div>
</div>
</div>
</div>
</div>
<div class="practice-card">
<h3>🔄 Migration: @import to @use</h3>
<div class="migration-grid">
<div class="migration-card">
<h4>Legacy @import</h4>
<div class="good-example">
// Old way with @import<br>
@import 'utils/variables';<br>
@import 'utils/mixins';<br><br>
.component {<br>
color: $primary-color;<br>
@include flex-center;<br>
}
</div>
</div>
<div class="migration-card">
<h4>Modern @use</h4>
<div class="good-example">
// New way with @use<br>
@use 'utils/variables' as vars;<br>
@use 'utils/mixins';<br><br>
.component {<br>
color: vars.$primary-color;<br>
@include mixins.flex-center;<br>
}
</div>
</div>
</div>
<div class="performance-tips">
<strong>💡 Migration Benefits:</strong>
<ul>
<li><strong>Namespacing:</strong> Avoid naming conflicts</li>
<li><strong>Performance:</strong> Faster compilation</li>
<li><strong>Explicit Dependencies:</strong> Clear module relationships</li>
<li><strong>Private Members:</strong> Hide internal variables/mixins</li>
<li><strong>Configuration:</strong> Configure modules with with{}</li>
</ul>
</div>
</div>
<div class="practice-card">
<h3>🚀 Workflow Best Practices</h3>
<div class="workflow-steps">
<div class="step">
<div class="step-number">1</div>
<h4>Plan Structure</h4>
<p>Design your folder architecture before coding</p>
</div>
<div class="step">
<div class="step-number">2</div>
<h4>Use Partials</h4>
<p>Prefix files with _ to create partials</p>
</div>
<div class="step">
<div class="step-number">3</div>
<h4>Logical Order</h4>
<p>Follow abstract → base → components → pages order</p>
</div>
<div class="step">
<div class="step-number">4</div>
<h4>Regular Audit</h4>
<p>Remove unused imports and optimize structure</p>
</div>
</div>
</div>
<div class="practice-card">
<h3>⚠️ Common Pitfalls to Avoid</h3>
<div class="do-dont">
<div class="do">
<strong>✅ Do These:</strong>
<ul>
<li>Use partials for organization</li>
<li>Follow logical import order</li>
<li>Use index files for grouping</li>
<li>Keep imports in single entry point</li>
<li>Use meaningful file names</li>
</ul>
</div>
<div class="dont">
<strong>❌ Avoid These:</strong>
<ul>
<li>Circular dependencies</li>
<li>Importing CSS files directly</li>
<li>Over-nesting folder structures</li>
<li>Mixing @import and @use randomly</li>
<li>Ignoring performance implications</li>
</ul>
</div>
</div>
</div>
</div>
</body>
</html>@import vs @use
📦 @import
Legacy, global namespace
🚀 @use
Modern, namespaced modules
🔄 Migration
Gradual transition path
@import vs @use Comparison
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sass @import vs @use - Modern Module System</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', sans-serif;
line-height: 1.6;
background: linear-gradient(135deg, #a8edea 0%, #fed6e3 100%);
min-height: 100vh;
padding: 2rem;
color: #2c3e50;
}
.container {
max-width: 1200px;
margin: 0 auto;
}
.header {
text-align: center;
margin-bottom: 3rem;
}
.header h1 {
font-size: 3rem;
margin-bottom: 1rem;
color: #2c3e50;
}
.comparison-section {
background: white;
border-radius: 15px;
padding: 2rem;
margin-bottom: 2rem;
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
}
.comparison-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
margin: 2rem 0;
}
.sass-code {
background: #2c3e50;
color: #ecf0f1;
padding: 1.5rem;
border-radius: 10px;
font-family: 'Fira Code', monospace;
font-size: 0.9rem;
line-height: 1.4;
}
.comment { color: #7f8c8d; }
.keyword { color: #e74c3c; font-weight: bold; }
.selector { color: #9b59b6; }
.property { color: #3498db; }
.value { color: #2ecc71; }
.variable { color: #f39c12; }
.feature-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 2rem;
margin: 2rem 0;
}
.feature-card {
background: #e8f4fd;
padding: 2rem;
border-radius: 10px;
text-align: center;
}
.feature-icon {
font-size: 3rem;
margin-bottom: 1rem;
}
.decision-guide {
background: #d4edda;
border-left: 4px solid #28a745;
padding: 2rem;
border-radius: 10px;
margin: 2rem 0;
}
.migration-steps {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
margin: 2rem 0;
}
.migration-step {
background: #f8f9fa;
padding: 1.5rem;
border-radius: 10px;
}
.demo-area {
background: #fff3cd;
padding: 2rem;
border-radius: 10px;
margin: 2rem 0;
}
@media (max-width: 768px) {
.comparison-grid {
grid-template-columns: 1fr;
}
.header h1 {
font-size: 2rem;
}
}
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>⚖️ Sass @import vs @use</h1>
<p>Understanding the modern Sass module system</p>
</div>
<div class="comparison-section">
<h2>📊 Fundamental Differences</h2>
<div class="comparison-grid">
<div class="sass-code">
<span class="comment">// Legacy: @import</span><br>
<span class="keyword">@import</span> <span class="value">'utils/variables'</span>;<br>
<span class="keyword">@import</span> <span class="value">'utils/mixins'</span>;<br><br>
<span class="comment">// Global namespace - potential conflicts</span><br>
<span class="selector">.component</span> {<br>
<span class="property">color</span>: <span class="variable">$primary-color</span>;<br>
<span class="keyword">@include</span> <span class="selector">flex-center</span>;<br>
}<br><br>
<span class="comment">// All variables/mixins are global</span><br>
<span class="comment">// No way to configure imports</span><br>
<span class="comment">// Can cause naming conflicts</span>
</div>
<div class="sass-code">
<span class="comment">// Modern: @use</span><br>
<span class="keyword">@use</span> <span class="value">'utils/variables'</span> <span class="keyword">as</span> vars;<br>
<span class="keyword">@use</span> <span class="value">'utils/mixins'</span>;<br><br>
<span class="comment">// Namespaced - no conflicts</span><br>
<span class="selector">.component</span> {<br>
<span class="property">color</span>: vars.<span class="variable">$primary-color</span>;<br>
<span class="keyword">@include</span> mixins.<span class="selector">flex-center</span>;<br>
}<br><br>
<span class="comment">// Explicit dependencies</span><br>
<span class="comment">// Configurable modules</span><br>
<span class="comment">// Better performance</span>
</div>
</div>
</div>
<div class="comparison-section">
<h2>🚀 @use Features & Benefits</h2>
<div class="feature-grid">
<div class="feature-card">
<div class="feature-icon">📛</div>
<h3>Namespacing</h3>
<p>Avoid naming conflicts with explicit namespaces</p>
</div>
<div class="feature-card">
<div class="feature-icon">⚡</div>
<h3>Performance</h3>
<p>Faster compilation with explicit dependencies</p>
</div>
<div class="feature-card">
<div class="feature-icon">🔧</div>
<h3>Configuration</h3>
<p>Configure modules with default variables</p>
</div>
<div class="feature-card">
<div class="feature-icon">🎯</div>
<h3>Explicit Dependencies</h3>
<p>Clear module relationships and dependencies</p>
</div>
<div class="feature-card">
<div class="feature-icon">🔒</div>
<h3>Private Members</h3>
<p>Hide internal variables and mixins</p>
</div>
<div class="feature-card">
<div class="feature-icon">📦</div>
<h3>Module System</h3>
<p>Modern JavaScript-like module system</p>
</div>
</div>
</div>
<div class="demo-area">
<h3>🏗️ Advanced @use Examples</h3>
<div class="comparison-grid">
<div class="sass-code">
<span class="comment">// Configuration with @use</span><br>
<span class="keyword">@use</span> <span class="value">'theme'</span> <span class="keyword">with</span> (<br>
<span class="variable">$primary-color</span>: <span class="value">#3498db</span>,<br>
<span class="variable">$font-size-base</span>: <span class="value">16px</span>,<br>
<span class="variable">$border-radius</span>: <span class="value">8px</span><br>
);<br><br>
<span class="comment">// Forwarding modules</span><br>
<span class="comment">// _index.scss in utils/</span><br>
<span class="keyword">@forward</span> <span class="value">'variables'</span>;<br>
<span class="keyword">@forward</span> <span class="value">'mixins'</span>;<br>
<span class="keyword">@forward</span> <span class="value">'functions'</span>;<br><br>
<span class="comment">// Using forwarded bundle</span><br>
<span class="keyword">@use</span> <span class="value">'utils'</span>;<br><br>
<span class="selector">.component</span> {<br>
<span class="property">padding</span>: utils.<span class="function-name">spacing</span>(<span class="value">2</span>);<br>
<span class="keyword">@include</span> utils.<span class="selector">flex-center</span>;<br>
}
</div>
<div class="sass-code">
<span class="comment">// Private members with - or _</span><br>
<span class="comment">// _config.scss</span><br>
<span class="variable">$-private-var</span>: <span class="value">#fff</span>; <span class="comment">// private</span><br>
<span class="variable">$public-var</span>: <span class="value">#000</span>; <span class="comment">// public</span><br><br>
<span class="comment">// Load once with @use</span><br>
<span class="keyword">@use</span> <span class="value">'sass:meta'</span>;<br>
<span class="keyword">@use</span> <span class="value">'sass:color'</span>;<br><br>
<span class="comment">// Conditional loading</span><br>
<span class="keyword">@if</span> meta.<span class="function-name">feature-exists</span>(<span class="value">'at-use'</span>) {<br>
<span class="keyword">@use</span> <span class="value">'modern-features'</span>;<br>
}<br><br>
<span class="comment">// Color manipulation</span><br>
<span class="selector">.dark-theme</span> {<br>
<span class="property">background</span>: color.<span class="function-name">adjust</span>(<span class="value">#3498db</span>, <span class="property">$lightness</span>: <span class="value">-20%</span>);<br>
}
</div>
</div>
</div>
<div class="comparison-section">
<h2>🔄 Migration Steps</h2>
<div class="migration-steps">
<div class="migration-step">
<h4>Step 1: Update Dependencies</h4>
<p>Ensure you're using Dart Sass 1.23.0 or later</p>
<div class="sass-code" style="font-size: 0.8rem;">
npm install sass@latest
</div>
</div>
<div class="migration-step">
<h4>Step 2: Replace @import</h4>
<p>Change @import statements to @use with namespaces</p>
<div class="sass-code" style="font-size: 0.8rem;">
// Before: @import 'utils';<br>
// After: @use 'utils' as u;
</div>
</div>
<div class="migration-step">
<h4>Step 3: Update References</h4>
<p>Add namespace prefixes to variables and mixins</p>
<div class="sass-code" style="font-size: 0.8rem;">
// Before: $color, @include mixin<br>
// After: u.$color, @include u.mixin
</div>
</div>
<div class="migration-step">
<h4>Step 4: Use @forward</h4>
<p>Create index files with @forward for bundles</p>
<div class="sass-code" style="font-size: 0.8rem;">
// _index.scss<br>
@forward 'variables';<br>
@forward 'mixins';
</div>
</div>
</div>
</div>
<div class="decision-guide">
<h3>🎯 When to Use Each</h3>
<p><strong>Use @import when:</strong> Working with legacy codebases, using LibSass/node-sass,
or when migrating isn't feasible. @import will be deprecated but remains supported.</p>
<p><strong>Use @use when:</strong> Starting new projects, wanting better performance,
needing namespacing, or working with team projects where naming conflicts are likely.</p>
<p><strong>Recommendation:</strong> Use @use for all new projects and gradually migrate
existing projects to benefit from the modern module system.</p>
</div>
<div class="comparison-section">
<h2>🔮 Future of Sass Modules</h2>
<p>The @import rule is being gradually phased out in favor of the more powerful @use and @forward.
Here's what to expect:</p>
<div class="feature-grid">
<div class="feature-card">
<div class="feature-icon">⚠️</div>
<h3>@import Deprecation</h3>
<p>@import will be deprecated but remain available</p>
</div>
<div class="feature-card">
<div class="feature-icon">🚀</div>
<h3>@use as Standard</h3>
<p>@use becomes the recommended approach</p>
</div>
<div class="feature-card">
<div class="feature-icon">📚</div>
<h3>Ecosystem Migration</h3>
<p>Libraries and frameworks adopting @use</p>
</div>
<div class="feature-card">
<div class="feature-icon">🛠️</div>
<h3>Tooling Support</h3>
<p>Better IDE and build tool support for @use</p>
</div>
</div>
</div>
</div>
</body>
</html>Practical Applications
🏗️ Project Architecture
- 7-1 Pattern for large projects
- Component-based architecture
- Theme system organization
- Multi-site style sharing
- Design token management
🔧 Team Workflows
- Modular development
- Parallel team work
- Code review efficiency
- Onboarding new developers
- Maintenance and updates
💡 Pro Tips for Effective Imports
Structure:
- Use partials for organization
- Follow logical import order
- Use index files for grouping
- Keep single entry point
Performance:
- Avoid circular dependencies
- Use @use for new projects
- Remove unused imports
- Consider migration to @use
Ready to Master Sass Import? 📦
Start organizing your stylesheets with modular imports and scalable architecture patterns that make your codebase maintainable and team-friendly.