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.