Stylus CSS ✨
The expressive, dynamic, and robust CSS preprocessor with the most flexible syntax.
What is Stylus CSS?
Stylus is a revolutionary CSS preprocessor that provides expressive, dynamic, and robust CSS with a highly flexible syntax. It's built on Node.js and offers the most flexible syntax among all CSS preprocessors, allowing you to write CSS with or without braces, semicolons, and colons.
✨ Flexible Syntax
Write with or without braces, semicolons, colons
⚡ JavaScript Powered
Full Node.js integration and compatibility
🔧 Powerful Mixins
Advanced mixin capabilities with arguments
Stylus CSS Introduction
Why Choose Stylus?
- Flexible Syntax: Write CSS your way - with or without braces
- JavaScript Integration: Perfect for Node.js projects
- Powerful Mixins: Advanced mixin capabilities
- Clean Output: Produces optimized, clean CSS
- Extensible: Easy to create plugins and extensions
Stylus Introduction & Basics
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Stylus CSS - Expressive, Dynamic, Robust CSS Preprocessor</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; } .stylus-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; } .variable { color: #f39c12; } .property { color: #3498db; } .value { color: #2ecc71; } .selector { color: #9b59b6; } .demo-area { background: white; border-radius: 15px; padding: 2rem; margin: 2rem 0; box-shadow: 0 10px 30px rgba(0,0,0,0.1); } .feature-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1rem; margin: 1rem 0; } .feature-card { background: #f8f9fa; padding: 1.5rem; border-radius: 8px; text-align: center; border-left: 4px solid #3498db; } .feature-icon { font-size: 2rem; margin-bottom: 0.5rem; } .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>🎨 Stylus CSS</h1> <p>Expressive, dynamic, robust CSS preprocessor</p> </div> <div class="comparison-grid"> <div class="code-panel"> <h3>🚀 What is Stylus?</h3> <div class="stylus-code"> <span class="comment">// Stylus is an expressive, dynamic CSS preprocessor</span><br> <span class="comment">// It offers the most flexible syntax among preprocessors</span><br><br> <span class="comment">// Key Features:</span><br> <span class="comment">// • Optional syntax (no braces, semicolons, colons)</span><br> <span class="comment">// • Powerful mixins and functions</span><br> <span class="comment">// • Advanced variable handling</span><br> <span class="comment">// • Built-in functions and operations</span><br> <span class="comment">// • JavaScript integration</span><br><br> <span class="comment">// Example: Flexible Stylus syntax</span><br> <span class="variable">primary-color</span> = <span class="value">#3498db</span><br> <span class="variable">padding</span> = <span class="value">1rem</span><br><br> <span class="comment">// With braces (familiar)</span><br> <span class="selector">.button</span> {<br> <span class="property">background</span>: <span class="variable">primary-color</span><br> <span class="property">padding</span>: <span class="variable">padding</span><br> <span class="property">border-radius</span>: <span class="value">4px</span><br> <span class="property">color</span>: <span class="value">white</span><br><br> <span class="selector">&:hover</span> {<br> <span class="property">background</span>: <span class="value">darken(primary-color, 10%)</span><br> }<br> }<br><br> <span class="comment">// Without braces (clean)</span><br> <span class="selector">.button</span><br> <span class="property">background</span>: <span class="variable">primary-color</span><br> <span class="property">padding</span>: <span class="variable">padding</span><br> <span class="property">border-radius</span>: <span class="value">4px</span><br> <span class="property">color</span>: <span class="value">white</span><br><br> <span class="selector">&:hover</span><br> <span class="property">background</span>: <span class="value">darken(primary-color, 10%)</span> </div> </div> <div class="code-panel"> <h3>📄 Compiled CSS</h3> <div class="css-code"> <span class="comment">/* Clean, standard CSS output */</span><br><br> <span class="selector">.button</span> {<br> <span class="property">background</span>: <span class="value">#3498db</span>;<br> <span class="property">padding</span>: <span class="value">1rem</span>;<br> <span class="property">border-radius</span>: <span class="value">4px</span>;<br> <span class="property">color</span>: <span class="value">white</span>;<br> }<br><br> <span class="selector">.button:hover</span> {<br> <span class="property">background</span>: <span class="value">#2980b9</span>;<br> } </div> </div> </div> <div class="comparison-grid"> <div class="code-panel"> <h3>🎯 Why Choose Stylus?</h3> <div class="feature-grid"> <div class="feature-card"> <div class="feature-icon">✨</div> <h5>Flexible Syntax</h5> <p>Write with or without braces, semicolons, colons</p> </div> <div class="feature-card"> <div class="feature-icon">🔧</div> <h5>JavaScript Powered</h5> <p>Runs on Node.js with full JS integration</p> </div> <div class="feature-card"> <div class="feature-icon">⚡</div> <h5>Powerful Mixins</h5> <p>Advanced mixin capabilities</p> </div> <div class="feature-card"> <div class="feature-icon">🎨</div> <h5>Expressive</h5> <p>Clean, readable, and maintainable code</p> </div> </div> </div> <div class="code-panel"> <h3>🔧 Getting Started</h3> <div class="stylus-code"> <span class="comment">// Installation via npm</span><br> <span class="property">npm install</span> -g <span class="value">stylus</span><br><br> <span class="comment">// Compile Stylus to CSS</span><br> <span class="property">stylus</span> <span class="value">styles.styl styles.css</span><br><br> <span class="comment">// Watch for changes</span><br> <span class="property">stylus</span> -w <span class="value">styles.styl -o styles.css</span><br><br> <span class="comment">// Compress output</span><br> <span class="property">stylus</span> -c <span class="value">styles.styl -o styles.css</span><br><br> <span class="comment">// Or use in Node.js</span><br> <span class="property">const</span> stylus = <span class="value">require('stylus')</span>;<br><br> <span class="property">stylus</span>(<span class="value">'body { color: blue }'</span>)<br> .<span class="property">render</span>(<span class="property">function</span>(<span class="property">err</span>, <span class="property">css</span>) {<br> <span class="property">console</span>.<span class="property">log</span>(<span class="property">css</span>);<br> }); </div> </div> </div> <div class="demo-area"> <h3>🚀 Live Demo - Stylus in Action</h3> <h4>Flexible Syntax Examples</h4> <div class="feature-grid"> <div class="feature-card"> <div class="feature-icon">🎯</div> <h5>Traditional CSS</h5> <p>Familiar syntax with braces</p> <div style="background: #3498db; height: 20px; border-radius: 4px; margin-top: 0.5rem;"></div> </div> <div class="feature-card"> <div class="feature-icon">✨</div> <h5>Clean Syntax</h5> <p>No braces, semicolons</p> <div style="padding: 1rem; background: #f8f9fa; border-radius: 4px; margin-top: 0.5rem;"> <div style="color: #3498db;">Clean code</div> </div> </div> <div class="feature-card"> <div class="feature-icon">🔄</div> <h5>Mixins</h5> <p>Powerful reusable blocks</p> <button style="background: #2ecc71; color: white; border: none; padding: 0.5rem 1rem; border-radius: 4px; margin-top: 0.5rem;"> Styled Button </button> </div> <div class="feature-card"> <div class="feature-icon">🔢</div> <h5>Operations</h5> <p>Math calculations</p> <div style="font-size: 1.25rem; color: #e74c3c; margin-top: 0.5rem;">20px text</div> </div> </div> <h4>Stylus-Powered Components</h4> <div style="display: flex; gap: 1rem; flex-wrap: wrap; margin: 1rem 0;"> <button class="btn btn-primary">Primary Button</button> <button class="btn" style="background: #2ecc71; color: white;">Success Button</button> <button class="btn" style="background: #e74c3c; color: white;">Danger Button</button> </div> <div style="background: #f8f9fa; padding: 2rem; border-radius: 8px; margin: 1rem 0;"> <h4>Card Component (Stylus Powered)</h4> <p>This card demonstrates styles that could be generated with Stylus flexible syntax.</p> </div> </div> <div class="card"> <h3>💡 Key Benefits of Stylus</h3> <ul> <li><strong>Flexible Syntax:</strong> Write CSS your way - with or without braces</li> <li><strong>Powerful Mixins:</strong> Advanced mixin capabilities with arguments</li> <li><strong>JavaScript Integration:</strong> Full Node.js compatibility</li> <li><strong>Clean Output:</strong> Produces optimized, clean CSS</li> <li><strong>Extensible:</strong> Easy to create plugins and extensions</li> <li><strong>Active Community:</strong> Growing ecosystem and support</li> </ul> </div> </div> </body> </html>
Stylus vs Sass vs Less
Choose Stylus When
- You value flexible, clean syntax
- Working with Node.js projects
- Need advanced mixin capabilities
- Prefer JavaScript integration
- Want extensible preprocessor
Choose Sass When
- Enterprise projects
- Large teams
- Need extensive community support
- Design system development
- Industry standard adoption
Choose Less When
- Learning CSS preprocessors
- Small to medium projects
- Need browser compilation
- Gentle learning curve needed
- Quick prototyping
Preprocessor Comparison
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Stylus vs Sass vs Less - Preprocessor Comparison</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 1fr; gap: 1rem; margin: 1rem 0; } .stylus-code, .sass-code, .less-code, .css-code { background: #2c3e50; color: #ecf0f1; padding: 1rem; border-radius: 5px; font-family: 'Fira Code', monospace; font-size: 0.7rem; line-height: 1.4; overflow-x: auto; } .comment { color: #7f8c8d; } .variable { color: #f39c12; } .property { color: #3498db; } .value { color: #2ecc71; } .selector { color: #9b59b6; } .comparison-table { width: 100%; border-collapse: collapse; margin: 1rem 0; background: white; border-radius: 8px; overflow: hidden; box-shadow: 0 2px 8px rgba(0,0,0,0.1); } .comparison-table th, .comparison-table td { padding: 1rem; text-align: left; border-bottom: 1px solid #ecf0f1; } .comparison-table th { background: #3498db; color: white; font-weight: 600; } .comparison-table tr:hover { background: #f8f9fa; } .pros-cons { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1rem 0; } .pros { background: #d4edda; padding: 1rem; border-radius: 5px; border-left: 4px solid #28a745; } .cons { background: #f8d7da; padding: 1rem; border-radius: 5px; border-left: 4px solid #dc3545; } .demo-section { background: #f8f9fa; padding: 2rem; border-radius: 10px; margin: 2rem 0; } @media (max-width: 768px) { .feature-grid { grid-template-columns: 1fr; } .code-comparison { grid-template-columns: 1fr; } .pros-cons { grid-template-columns: 1fr; } .header h1 { font-size: 2rem; } } </style> </head> <body> <div class="container"> <div class="header"> <h1>⚖️ Stylus vs Sass vs Less</h1> <p>Choosing the Right CSS Preprocessor for Your Project</p> </div> <!-- Syntax Comparison --> <div class="feature-card"> <h3>📝 Syntax Comparison</h3> <div class="code-comparison"> <div class="stylus-code"> <span class="comment">// Stylus Syntax (Flexible)</span><br> <span class="variable">primary-color</span> = <span class="value">#3498db</span><br> <span class="variable">padding</span> = <span class="value">1rem</span><br><br> <span class="comment">// With braces</span><br> <span class="selector">.button</span> {<br> <span class="property">background</span>: <span class="variable">primary-color</span><br> <span class="property">padding</span>: <span class="variable">padding</span><br> <span class="property">border-radius</span>: <span class="value">4px</span><br><br> <span class="selector">&:hover</span> {<br> <span class="property">background</span>: <span class="value">darken(primary-color, 10%)</span><br> }<br> }<br><br> <span class="comment">// Without braces</span><br> <span class="selector">.button</span><br> <span class="property">background</span>: <span class="variable">primary-color</span><br> <span class="property">padding</span>: <span class="variable">padding</span><br> <span class="property">border-radius</span>: <span class="value">4px</span><br><br> <span class="selector">&:hover</span><br> <span class="property">background</span>: <span class="value">darken(primary-color, 10%)</span> </div> <div class="sass-code"> <span class="comment">// Sass/SCSS Syntax</span><br> <span class="variable">$primary-color</span>: <span class="value">#3498db</span>;<br> <span class="variable">$padding</span>: <span class="value">1rem</span>;<br><br> <span class="selector">.button</span> {<br> <span class="property">background</span>: <span class="variable">$primary-color</span>;<br> <span class="property">padding</span>: <span class="variable">$padding</span>;<br> <span class="property">border-radius</span>: <span class="value">4px</span>;<br><br> <span class="selector">&:hover</span> {<br> <span class="property">background</span>: <span class="value">darken(</span><span class="variable">$primary-color</span>, <span class="value">10%</span><span class="value">)</span>;<br> }<br> }<br><br> <span class="comment">// Mixin in Sass</span><br> <span class="keyword">@mixin</span> <span class="selector">border-radius</span>(<span class="variable">$radius</span>) {<br> <span class="property">border-radius</span>: <span class="variable">$radius</span>;<br> }<br><br> <span class="selector">.card</span> {<br> <span class="keyword">@include</span> <span class="selector">border-radius</span>(<span class="value">8px</span>);<br> } </div> <div class="less-code"> <span class="comment">// Less Syntax</span><br> <span class="variable">@primary-color</span>: <span class="value">#3498db</span>;<br> <span class="variable">@padding</span>: <span class="value">1rem</span>;<br><br> <span class="selector">.button</span> {<br> <span class="property">background</span>: <span class="variable">@primary-color</span>;<br> <span class="property">padding</span>: <span class="variable">@padding</span>;<br> <span class="property">border-radius</span>: <span class="value">4px</span>;<br><br> <span class="selector">&:hover</span> {<br> <span class="property">background</span>: <span class="value">darken(</span><span class="variable">@primary-color</span>, <span class="value">10%</span><span class="value">)</span>;<br> }<br> }<br><br> <span class="comment">// Mixin in Less</span><br> <span class="selector">.border-radius</span>(<span class="variable">@radius</span>) {<br> <span class="property">border-radius</span>: <span class="variable">@radius</span>;<br> }<br><br> <span class="selector">.card</span> {<br> <span class="selector">.border-radius</span>(<span class="value">8px</span>);<br> } </div> </div> </div> <!-- Feature Comparison --> <div class="feature-card"> <h3>🎯 Feature Comparison</h3> <table class="comparison-table"> <thead> <tr> <th>Feature</th> <th>Stylus</th> <th>Sass</th> <th>Less</th> </tr> </thead> <tbody> <tr> <td><strong>Flexible Syntax</strong></td> <td>✅✅ Excellent</td> <td>🟡 Limited</td> <td>🟡 Limited</td> </tr> <tr> <td><strong>Variables</strong></td> <td>✅✅ Advanced</td> <td>✅ Good</td> <td>✅ Good</td> </tr> <tr> <td><strong>Mixins</strong></td> <td>✅✅ Powerful</td> <td>✅✅ Powerful</td> <td>✅ Basic</td> </tr> <tr> <td><strong>Functions</strong></td> <td>✅✅ Extensive</td> <td>✅✅ Extensive</td> <td>✅ Basic</td> </tr> <tr> <td><strong>JavaScript Integration</strong></td> <td>✅✅ Excellent</td> <td>🟡 Limited</td> <td>✅ Good</td> </tr> <tr> <td><strong>Performance</strong></td> <td>✅ Fast</td> <td>✅ Fast</td> <td>✅ Fast</td> </tr> <tr> <td><strong>Community</strong></td> <td>🟡 Growing</td> <td>✅✅ Large</td> <td>✅ Large</td> </tr> <tr> <td><strong>Learning Curve</strong></td> <td>🟡 Moderate</td> <td>🟡 Moderate</td> <td>✅ Gentle</td> </tr> </tbody> </table> </div> <!-- Pros and Cons --> <div class="feature-card"> <h3>⚖️ Pros and Cons</h3> <div class="pros-cons"> <div> <h4>Stylus Advantages</h4> <div class="pros"> <ul> <li><strong>Flexible Syntax:</strong> Write with or without braces</li> <li><strong>JavaScript Integration:</strong> Full Node.js compatibility</li> <li><strong>Powerful Mixins:</strong> Advanced mixin capabilities</li> <li><strong>Clean Output:</strong> Optimized CSS generation</li> <li><strong>Extensible:</strong> Easy plugin creation</li> </ul> </div> </div> <div> <h4>Stylus Limitations</h4> <div class="cons"> <ul> <li><strong>Smaller Community:</strong> Fewer resources than Sass</li> <li><strong>Learning Curve:</strong> Flexible syntax can be confusing</li> <li><strong>Tooling:</strong> Less IDE support</li> <li><strong>Adoption:</strong> Less widely used in enterprise</li> </ul> </div> </div> </div> </div> <div class="demo-section"> <h3>🎯 When to Choose Stylus?</h3> <div class="code-comparison"> <div class="stylus-code"> <span class="comment">// Choose Stylus when:</span><br> <span class="comment">// • You value flexible, clean syntax</span><br> <span class="comment">// • Working with Node.js projects</span><br> <span class="comment">// • Need advanced mixin capabilities</span><br> <span class="comment">// • Prefer JavaScript integration</span><br> <span class="comment">// • Want extensible preprocessor</span><br><br> <span class="comment">// Perfect for:</span><br> <span class="comment">// • Node.js applications</span><br> <span class="comment">// • Developers who prefer clean syntax</span><br> <span class="comment">// • Projects needing custom functions</span><br> <span class="comment">// • Teams comfortable with JavaScript</span> </div> <div class="sass-code"> <span class="comment">// Choose Sass when:</span><br> <span class="comment">// • Enterprise projects</span><br> <span class="comment">// • Large teams</span><br> <span class="comment">// • Need extensive community support</span><br> <span class="comment">// • Design system development</span><br> <span class="comment">// • Industry standard adoption</span><br><br> <span class="comment">// Perfect for:</span><br> <span class="comment">// • Large applications</span><br> <span class="comment">// • Teams with Sass experience</span><br> <span class="comment">// • Projects needing extensive tooling</span> </div> <div class="less-code"> <span class="comment">// Choose Less when:</span><br> <span class="comment">// • Learning CSS preprocessors</span><br> <span class="comment">// • Small to medium projects</span><br> <span class="comment">// • Need browser compilation</span><br> <span class="comment">// • Gentle learning curve needed</span><br> <span class="comment">// • Quick prototyping</span><br><br> <span class="comment">// Perfect for:</span><br> <span class="comment">// • Beginners</span><br> <span class="comment">// • Small projects</span><br> <span class="comment">// • Rapid development</span> </div> </div> </div> </div> </body> </html>
Stylus Core Features
Powerful Feature Set
Stylus provides advanced features with the most flexible syntax among CSS preprocessors, making it perfect for developers who value clean, expressive code.
Stylus Features Deep Dive
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Stylus Features - Advanced Capabilities & Syntax</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); } .feature-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 1rem; margin: 1rem 0; } .feature-card { background: #f8f9fa; padding: 1.5rem; border-radius: 8px; text-align: center; border-left: 4px solid #3498db; } .feature-icon { font-size: 2rem; margin-bottom: 0.5rem; } .stylus-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; margin: 1rem 0; } .comment { color: #7f8c8d; } .variable { color: #f39c12; } .property { color: #3498db; } .value { color: #2ecc71; } .selector { color: #9b59b6; } .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; } .demo-section { background: #f8f9fa; padding: 2rem; border-radius: 10px; margin: 2rem 0; } @media (max-width: 768px) { .practices-grid { grid-template-columns: 1fr; } .header h1 { font-size: 2rem; } } </style> </head> <body> <div class="container"> <div class="header"> <h1>✨ Stylus Core Features</h1> <p>Powerful capabilities with flexible syntax</p> </div> <div class="practices-grid"> <div class="practice-card"> <h3>🎨 Flexible Variables</h3> <p>Advanced variable handling with multiple syntax options:</p> <div class="stylus-code"> <span class="comment">// Variable assignment</span><br> <span class="variable">primary-color</span> = <span class="value">#3498db</span><br> <span class="variable">font-family</span> = <span class="value">"Inter", sans-serif</span><br> <span class="variable">spacing-unit</span> = <span class="value">8px</span><br><br> <span class="comment">// Property value variables</span><br> <span class="variable">border-style</span> = <span class="value">solid</span><br> <span class="variable">border-width</span> = <span class="value">2px</span><br><br> <span class="comment">// Using variables</span><br> <span class="selector">.button</span><br> <span class="property">background</span>: <span class="variable">primary-color</span><br> <span class="property">font-family</span>: <span class="variable">font-family</span><br> <span class="property">padding</span>: <span class="variable">spacing-unit</span> <span class="variable">spacing-unit</span> * <span class="value">2</span><br><br> <span class="selector">.card</span><br> <span class="property">border</span>: <span class="variable">border-width</span> <span class="variable">border-style</span> <span class="variable">primary-color</span><br> <span class="property">margin-bottom</span>: <span class="variable">spacing-unit</span> * <span class="value">2</span> </div> </div> <div class="practice-card"> <h3>🔗 Flexible Nesting</h3> <p>Clean, organized nesting with multiple syntax styles:</p> <div class="stylus-code"> <span class="comment">// Nesting with indentation</span><br> <span class="selector">.navigation</span><br> <span class="property">background</span>: <span class="value">#2c3e50</span><br> <span class="property">padding</span>: <span class="value">1rem</span><br><br> <span class="selector">ul</span><br> <span class="property">list-style</span>: <span class="value">none</span><br> <span class="property">display</span>: <span class="value">flex</span><br> <span class="property">gap</span>: <span class="value">1rem</span><br><br> <span class="selector">li</span><br> <span class="property">padding</span>: <span class="value">0.5rem 1rem</span><br><br> <span class="selector">&:hover</span><br> <span class="property">background</span>: <span class="value">#3498db</span><br><br> <span class="selector">a</span><br> <span class="property">color</span>: <span class="value">white</span><br> <span class="property">text-decoration</span>: <span class="value">none</span><br><br> <span class="selector">&:hover</span><br> <span class="property">text-decoration</span>: <span class="value">underline</span> </div> </div> <div class="practice-card"> <h3>🔄 Powerful Mixins</h3> <p>Advanced mixins with arguments and default values:</p> <div class="stylus-code"> <span class="comment">// Basic mixin</span><br> <span class="selector">border-radius(radius = 4px)</span><br> <span class="property">border-radius</span>: <span class="variable">radius</span><br><br> <span class="comment">// Mixin with multiple parameters</span><br> <span class="selector">box-shadow(x = 0, y = 2px, blur = 4px, color = rgba(0,0,0,0.1))</span><br> <span class="property">box-shadow</span>: <span class="variable">x</span> <span class="variable">y</span> <span class="variable">blur</span> <span class="variable">color</span><br><br> <span class="comment">// Complex mixin with logic</span><br> <span class="selector">button-variant(color, darken-amount = 10%)</span><br> <span class="property">background</span>: <span class="variable">color</span><br> <span class="property">color</span>: <span class="value">white</span><br> <span class="property">border</span>: <span class="value">none</span><br> <span class="property">padding</span>: <span class="value">1rem 2rem</span><br><br> <span class="selector">&:hover</span><br> <span class="property">background</span>: <span class="value">darken(color, darken-amount)</span><br><br> <span class="comment">// Using mixins</span><br> <span class="selector">.card</span><br> <span class="selector">border-radius(8px)</span><br> <span class="selector">box-shadow(0, 4px, 8px, rgba(0,0,0,0.15))</span><br><br> <span class="selector">.btn-primary</span><br> <span class="selector">button-variant(#3498db)</span><br><br> <span class="selector">.btn-danger</span><br> <span class="selector">button-variant(#e74c3c, 15%)</span> </div> </div> <div class="practice-card"> <h3>🔢 Operations & Functions</h3> <p>Mathematical operations and built-in functions:</p> <div class="stylus-code"> <span class="comment">// Mathematical operations</span><br> <span class="variable">base-spacing</span> = <span class="value">8px</span><br> <span class="variable">container-width</span> = <span class="value">1200px</span><br><br> <span class="selector">.element</span><br> <span class="property">padding</span>: <span class="variable">base-spacing</span> * <span class="value">2</span> <span class="comment">// 16px</span><br> <span class="property">width</span>: <span class="variable">container-width</span> / <span class="value">2</span> <span class="comment">// 600px</span><br> <span class="property">margin</span>: (<span class="value">100%</span> - <span class="value">80%</span>) / <span class="value">2</span> <span class="comment">// 10%</span><br><br> <span class="comment">// Color functions</span><br> <span class="variable">primary</span> = <span class="value">#3498db</span><br> <span class="selector">.button</span><br> <span class="property">background</span>: <span class="variable">primary</span><br> <span class="property">border</span>: <span class="value">1px solid darken(primary, 10%)</span><br><br> <span class="selector">&:hover</span><br> <span class="property">background</span>: <span class="value">lighten(primary, 10%)</span><br><br> <span class="comment">// Other useful functions</span><br> <span class="property">opacity</span>: <span class="value">alpha(primary, 0.5)</span><br> <span class="property">color</span>: <span class="value">contrast(primary)</span><br> <span class="property">font-size</span>: <span class="value">unit(16 + 4, 'px')</span> </div> </div> </div> <div class="practice-card"> <h3>✨ Advanced Features</h3> <div class="feature-grid"> <div class="feature-card"> <div class="feature-icon">📦</div> <h4>Import & Organization</h4> <p>Flexible file organization</p> <div class="stylus-code" style="font-size: 0.7rem; margin-top: 0.5rem;"> @import 'variables'<br> @import 'mixins' </div> </div> <div class="feature-card"> <div class="feature-icon">🔄</div> <h4>Conditionals</h4> <p>If/else statements</p> <div class="stylus-code" style="font-size: 0.7rem; margin-top: 0.5rem;"> if color == white<br> color: black<br> else<br> color: white </div> </div> <div class="feature-card"> <div class="feature-icon">🎯</div> <h4>Iteration</h4> <p>Loops and iteration</p> <div class="stylus-code" style="font-size: 0.7rem; margin-top: 0.5rem;"> for i in 1..5<br> .col-{i}<br> width: 20% * i </div> </div> <div class="feature-card"> <div class="feature-icon">🔧</div> <h4>JavaScript Integration</h4> <p>Use JS in Stylus</p> <div class="stylus-code" style="font-size: 0.7rem; margin-top: 0.5rem;"> js-var = unquote(`var`)<br /> color: unquote(`color`) </div> </div> </div> </div> <div class="practice-card"> <h3>🚀 Getting Started Workflow</h3> <div class="workflow-steps"> <div class="step"> <div class="step-number">1</div> <h4>Install Stylus</h4> <p>Install via npm</p> <div class="stylus-code" style="font-size: 0.7rem; margin-top: 0.5rem;"> npm install -g stylus </div> </div> <div class="step"> <div class="step-number">2</div> <h4>Create .styl Files</h4> <p>Write Stylus code</p> <div class="stylus-code" style="font-size: 0.7rem; margin-top: 0.5rem;"> styles.styl </div> </div> <div class="step"> <div class="step-number">3</div> <h4>Compile to CSS</h4> <p>Convert to browser CSS</p> <div class="stylus-code" style="font-size: 0.7rem; margin-top: 0.5rem;"> stylus styles.styl </div> </div> <div class="step"> <div class="step-number">4</div> <h4>Use in Projects</h4> <p>Link compiled CSS</p> <div class="stylus-code" style="font-size: 0.7rem; margin-top: 0.5rem;"> <link href="styles.css"> </div> </div> </div> </div> <div class="demo-section"> <h3>🎯 Real-World Example</h3> <div class="stylus-code"> <span class="comment">// Complete component using Stylus features</span><br> <span class="variable">primary-color</span> = <span class="value">#3498db</span><br> <span class="variable">spacing</span> = <span class="value">1rem</span><br> <span class="variable">border-radius</span> = <span class="value">4px</span><br><br> <span class="selector">button-style(color, text-color = white)</span><br> <span class="property">background</span>: <span class="variable">color</span><br> <span class="property">color</span>: <span class="variable">text-color</span><br> <span class="property">padding</span>: <span class="variable">spacing</span> <span class="variable">spacing</span> * <span class="value">2</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="property">cursor</span>: <span class="value">pointer</span><br> <span class="property">transition</span>: <span class="value">all 0.3s ease</span><br><br> <span class="selector">&:hover</span><br> <span class="property">background</span>: <span class="value">darken(color, 10%)</span><br> <span class="property">transform</span>: <span class="value">translateY(-2px)</span><br><br> <span class="selector">.btn-primary</span><br> <span class="selector">button-style(primary-color)</span><br><br> <span class="selector">.btn-secondary</span><br> <span class="selector">button-style(#95a5a6, #2c3e50)</span><br><br> <span class="selector">.btn-success</span><br> <span class="selector">button-style(#2ecc71)</span> </div> </div> </div> </body> </html>
Stylus Setup & Installation
⚡ Quick Setup
Get started in minutes with simple installation
🔧 Node.js Integration
Perfect for JavaScript and Node.js projects
🚀 Production Ready
Optimized for development and production
Complete Setup Guide
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Stylus Setup - Installation & Configuration Guide</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; } .code-block { 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; } .property { color: #3498db; } .value { color: #2ecc71; } .selector { color: #9b59b6; } .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; } .setup-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem; margin: 2rem 0; } .setup-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>⚙️ Stylus Setup Guide</h1> <p>Installation, Configuration, and Development Setup</p> </div> <div class="comparison-section"> <h2>🚀 Installation Methods</h2> <div class="comparison-grid"> <div class="code-block"> <span class="comment">// Method 1: Node.js (Recommended)</span><br> <span class="property">npm install</span> -g <span class="value">stylus</span><br><br> <span class="comment">// Verify installation</span><br> <span class="property">stylus</span> --<span class="property">version</span><br><br> <span class="comment">// Compile a file</span><br> <span class="property">stylus</span> <span class="value">styles.styl</span><br><br> <span class="comment">// Watch for changes</span><br> <span class="property">stylus</span> -w <span class="value">styles.styl</span><br><br> <span class="comment">// Compile to specific file</span><br> <span class="property">stylus</span> <span class="value">styles.styl -o styles.css</span><br><br> <span class="comment">// Compress output</span><br> <span class="property">stylus</span> -c <span class="value">styles.styl -o styles.css</span> </div> <div class="code-block"> <span class="comment">// Method 2: npm project dependency</span><br> <span class="property">npm install</span> <span class="value">stylus --save-dev</span><br><br> <span class="comment">// package.json scripts</span><br> {<br> <span class="property">"scripts"</span>: {<br> <span class="property">"build:css"</span>: <span class="value">"stylus styles.styl -o styles.css"</span>,<br> <span class="property">"watch:css"</span>: <span class="value">"stylus -w styles.styl -o styles.css"</span>,<br> <span class="property">"build:min"</span>: <span class="value">"stylus -c styles.styl -o styles.min.css"</span><br> }<br> }<br><br> <span class="comment">// Method 3: Programmatic usage</span><br> <span class="property">const</span> stylus = <span class="value">require('stylus')</span>;<br><br> <span class="property">stylus</span>(<span class="value">'body { color: blue }'</span>)<br> .<span class="property">render</span>(<span class="property">function</span>(<span class="property">err</span>, <span class="property">css</span>) {<br> <span class="property">console</span>.<span class="property">log</span>(<span class="property">css</span>);<br> }); </div> </div> </div> <div class="comparison-section"> <h2>🎯 Development Setup</h2> <div class="setup-steps"> <div class="setup-step"> <h4>Step 1: Project Structure</h4> <div class="code-block" style="font-size: 0.8rem;"> project/<br> ├── src/<br> │ ├── stylus/<br> │ │ ├── variables.styl<br> │ │ ├── mixins.styl<br> │ │ ├── components/<br> │ │ └── main.styl<br> │ └── index.html<br> ├── dist/<br> │ └── css/<br> │ └── styles.css<br> └── package.json </div> </div> <div class="setup-step"> <h4>Step 2: Main Stylus File</h4> <div class="code-block" style="font-size: 0.8rem;"> <span class="comment">// main.styl</span><br> <span class="property">@import</span> <span class="value">'variables'</span><br> <span class="property">@import</span> <span class="value">'mixins'</span><br> <span class="property">@import</span> <span class="value">'components/buttons'</span><br> <span class="property">@import</span> <span class="value">'components/cards'</span><br><br> <span class="selector">body</span><br> <span class="property">font-family</span>: <span class="variable">font-family</span><br> <span class="property">background</span>: <span class="variable">background-color</span> </div> </div> <div class="setup-step"> <h4>Step 3: Build Configuration</h4> <div class="code-block" style="font-size: 0.8rem;"> <span class="comment">// package.json</span><br> {<br> <span class="property">"name"</span>: <span class="value">"my-project"</span>,<br> <span class="property">"scripts"</span>: {<br> <span class="property">"dev"</span>: <span class="value">"stylus -w src/stylus/main.styl -o dist/css/styles.css"</span>,<br> <span class="property">"build"</span>: <span class="value">"stylus src/stylus/main.styl -o dist/css/styles.css"</span>,<br> <span class="property">"build:min"</span>: <span class="value">"stylus -c src/stylus/main.styl -o dist/css/styles.min.css"</span><br> },<br> <span class="property">"devDependencies"</span>: {<br> <span class="property">"stylus"</span>: <span class="value">"^0.58.0"</span><br> }<br> } </div> </div> </div> </div> <div class="comparison-section"> <h2>🔧 Integration with Build Tools</h2> <div class="comparison-grid"> <div class="code-block"> <span class="comment">// Webpack configuration</span><br> <span class="property">module</span>.<span class="property">exports</span> = {<br> <span class="property">module</span>: {<br> <span class="property">rules</span>: [<br> {<br> <span class="property">test</span>: <span class="value">/\.styl$/</span>,<br> <span class="property">use</span>: [<br> <span class="value">'style-loader'</span>,<br> <span class="value">'css-loader'</span>,<br> <span class="value">'stylus-loader'</span><br> ]<br> }<br> ]<br> }<br> };<br><br> <span class="comment">// Install loaders</span><br> <span class="property">npm install</span> <span class="value">stylus stylus-loader css-loader style-loader</span> </div> <div class="code-block"> <span class="comment">// Gulp configuration</span><br> <span class="property">const</span> gulp = <span class="value">require('gulp')</span>;<br> <span class="property">const</span> stylus = <span class="value">require('gulp-stylus')</span>;<br> <span class="property">const</span> cleanCSS = <span class="value">require('gulp-clean-css')</span>;<br><br> <span class="property">gulp</span>.<span class="property">task</span>(<span class="value">'stylus'</span>, () => {<br> <span class="property">return</span> <span class="property">gulp</span>.<span class="property">src</span>(<span class="value">'src/stylus/**/*.styl'</span>)<br> .<span class="property">pipe</span>(<span class="property">stylus</span>())<br> .<span class="property">pipe</span>(<span class="property">cleanCSS</span>())<br> .<span class="property">pipe</span>(<span class="property">gulp</span>.<span class="property">dest</span>(<span class="value">'dist/css'</span>));<br> });<br><br> <span class="property">gulp</span>.<span class="property">task</span>(<span class="value">'watch'</span>, () => {<br> <span class="property">gulp</span>.<span class="property">watch</span>(<span class="value">'src/stylus/**/*.styl'</span>, <span class="property">gulp</span>.<span class="property">series</span>(<span class="value">'stylus'</span>));<br> }); </div> </div> </div> <div class="comparison-section"> <h2>🚀 Quick Start Templates</h2> <div class="setup-steps"> <div class="setup-step"> <h4>Basic HTML Template</h4> <div class="code-block" style="font-size: 0.8rem;"> <span class="comment"><!DOCTYPE html></span><br> <span class="selector"><html</span> <span class="property">lang</span>=<span class="value">"en"</span>><br> <span class="selector"><head></span><br> <span class="selector"><meta</span> <span class="property">charset</span>=<span class="value">"UTF-8"</span>><br> <span class="selector"><meta</span> <span class="property">name</span>=<span class="value">"viewport"</span> <span class="property">content</span>=<span class="value">"width=device-width, initial-scale=1.0"</span>><br> <span class="selector"><title></span>Stylus Demo<span class="selector"></title></span><br> <span class="selector"><link</span> <span class="property">rel</span>=<span class="value">"stylesheet"</span> <span class="property">href</span>=<span class="value">"styles.css"</span>><br> <span class="selector"></head></span><br> <span class="selector"><body></span><br> <span class="selector"><button</span> <span class="property">class</span>=<span class="value">"btn-primary"</span>>Click Me<span class="selector"></button></span><br> <span class="selector"></body></span><br> <span class="selector"></html></span> </div> </div> <div class="setup-step"> <h4>Basic Stylus Template</h4> <div class="code-block" style="font-size: 0.8rem;"> <span class="comment">// variables.styl</span><br> <span class="variable">primary-color</span> = <span class="value">#3498db</span><br> <span class="variable">font-family</span> = <span class="value">'Inter', sans-serif</span><br> <span class="variable">spacing</span> = <span class="value">1rem</span><br><br> <span class="comment">// buttons.styl</span><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> <span class="property">padding</span>: <span class="variable">spacing</span> <span class="variable">spacing</span> * <span class="value">2</span><br> <span class="property">border</span>: <span class="value">none</span><br> <span class="property">border-radius</span>: <span class="value">4px</span><br> <span class="property">cursor</span>: <span class="value">pointer</span><br><br> <span class="selector">&:hover</span><br> <span class="property">background</span>: <span class="value">darken(primary-color, 10%)</span> </div> </div> </div> </div> <div class="decision-guide"> <h3>🎯 Setup Recommendations</h3> <p><strong>For Learning:</strong> Install Stylus globally and experiment with different syntax styles to find your preference.</p> <p><strong>For Small Projects:</strong> Use npm scripts with watch mode for quick development cycles.</p> <p><strong>For Production Projects:</strong> Integrate with Webpack or Gulp for automated builds and optimization.</p> <p><strong>For Teams:</strong> Use consistent build tooling and establish coding conventions for the flexible syntax.</p> </div> <div class="comparison-section"> <h2>🔧 Development Tools</h2> <div class="feature-grid"> <div class="feature-card"> <div class="feature-icon">⚡</div> <h3>VS Code Extension</h3> <p>"Stylus" for syntax highlighting</p> </div> <div class="feature-card"> <div class="feature-icon">🔍</div> <h3>Source Maps</h3> <p>Debug Stylus in browser</p> </div> <div class="feature-card"> <div class="feature-icon">📊</div> <h3>Live Reload</h3> <p>Auto-refresh on changes</p> </div> <div class="feature-card"> <div class="feature-icon">🚀</div> <h3>Plugin System</h3> <p>Extend Stylus functionality</p> </div> </div> </div> </div> </body> </html>
Practical Applications
🎨 Perfect Use Cases
- Node.js applications and APIs
- Projects valuing clean, expressive syntax
- Teams comfortable with JavaScript
- Custom design systems and frameworks
- Projects needing advanced mixin capabilities
🔧 Development Benefits
- Most flexible syntax options
- Excellent JavaScript integration
- Powerful mixin system
- Clean, optimized output
- Extensible with plugins
💡 Getting Started Tips
For Beginners:
- Start with familiar CSS syntax first
- Gradually explore flexible syntax options
- Practice with small components
- Use the official documentation
For Developers:
- Establish team coding conventions
- Leverage JavaScript integration
- Create reusable mixin libraries
- Optimize build processes
Ready to Learn Stylus? ✨
Start your journey with Stylus CSS today and discover the power of flexible, expressive CSS preprocessing with excellent JavaScript integration.