SlideShare une entreprise Scribd logo
1  sur  42
Télécharger pour lire hors ligne
Making CSS fun again :)
About
○ Front end developer at Conrad Caine
○ Analysis and development of systems at SENAC
This is my first presentation and everything can be boring...
                      so let's drink beer!
I will talk about
○ CSS weaknesses
○ Syntax
○ Features
○ Techniques
○ ...
CSS WEAKNESSES
What's wrong with CSS?
○ No variables
○ Prefixes
○ Lack of abstraction
○ Hard to maintain (mainly in big css files)
THE SOLUTION
CSS Preprocessors
○ Sass
○ Less
○ Stylus




            They are the most popular.
WHAT ARE CSS
PREPROCESSORS?
What are CSS Preprocessor?
"CSS preprocessors take code written in the preprocessed
language and then convert that code into the same old css
we’ve been writing for years."
STARTING WITH SASS
About
○ Syntactically Awesome StyleSheets
○ Sass makes CSS fun again
○ Sass get installed as Ruby gem, then you need to have
   Ruby on your machine.
Installing
gem install sass
The Process
○ Create a .scss file
○ Watch this .scss
○ Sass will create your .css
○ Be happy!
Watching a .scss file
sass --watch dev.scss:style.css
Output style
Sass allows you to choose between four different output
styles using the --style command-line flag.


sass --watch dev.scss:style.css   --style nested
sass --watch dev.scss:style.css   --style expanded
sass --watch dev.scss:style.css   --style compact
sass --watch dev.scss:style.css   --style compressed
VARIABLES
How can we do this today?
Variables
/* dev.scss */        /* output */
$width: 100px;        .side {
$color: #00214D;        width: 100px;
$size: 16px;          }

.side {               .bar {
  width: $width;        width: 100px;
}                       font-size: 16px;
                        color: #00214D;
.bar {                }
  width: $width;
  font-size: $size;
  color: $color;
}
Math operations
/* dev.scss */              /* output */
$width: 600px;              .nav li {
$length: 3;                   width: 200px;
                            }
.nav li {
  width: $width / $length
}
Color functions
/* dev.scss */                     /* output */
$color: #ce4dd6;                   .nav a {
                                     color: #e5a0e9;
                                   }
.nav a {
                                   .nav a:hover {
  color: lighten($color, 20%);       color: #d976e0;
  &:hover {                        }
    color: lighten($color, 10%);
  }
}
NESTING
We are accustomed to do this:
/* primate.css */
.nav li {
  list-style:none;
  float:left;
}

.nav li a {
  display:block;
  padding:5px;
}
Now we can do this:
/* dev.scss */          /* output */
.nav {                  .nav li {
  li {                    list-style: none;
                          float: left;
    list-style:none;
                        }
    float:left;
    a {                 .nav li a {
       display:block;     display: block;
       color:blue;        color: blue;
    }                   }
  }
}
Parent Reference
/* dev.scss */          /* output */
.nav {                  .nav li {
  li {                    list-style: none;
                          float: left;
    list-style:none;
                        }
    float:left;
    a {                 .nav li a {
       display:block;     display: block;
       color:blue;        color: blue;
       &:hover {        }
         color:red;
                        .nav li a:hover {
       }
                          display: block;
    }                     color: red;
  }                     }
}
MIXINS
Mixins
/* primate.css */
.nav li a {
  padding: 5px;
  border: 1px solid red;
  -moz-border-radius: 10px;
  -webkit-border-radius:
10px;
  border-radius: 10px;
}
Mixins
/* dev.scss */               /* output */
@mixin borderRadius {        .nav li a {
 -moz-border-radius: 10px;     padding: 5px;
                               border: 1px solid red;
 -webkit-border-radius:
10px;                          -moz-border-radius: 10px;
                               -webkit-border-radius:
 border-radius: 10px;        10px;
}                              border-radius: 10px;
                             }
.nav li a {
 padding: 5px;
 border: 1px solid red;
 @include borderRadius;
}
Arguments
/* dev.scss */            /* output */
@mixin title($size) {     article h2 {
  font: {                   font-family: arial;
                            font-size: 40px;
    family: arial;
                            font-weight: bold;
    size: $size;          }
    weight: bold;
  }
}

article h2 {
  @include title(40px);
}
INHERITANCE
Inheritance
/* dev.scss */              /* output */
.nav {                      .nav, .category {
   background: #CCC;          background: #CCC;
                              border: 1px solid red;
   border: 1px solid red;
                            }
}

.category {
   @extend .nav;
}
INTERPOLATION
Interpolation
/* dev.scss */            /* output */
$name: box;               p.box {
$attr: border;              border-color: blue;
                          }
p.#{$name} {
  #{$attr}-color: blue;
}
@import
@import




     core.css   fonts.css   reset.css   footer.css
@import
/* dev.scss */           /* output */
@import "reset.scss";
@import "fonts.scss";    /* reset */
@import "footer.scss";   html {}

                         /* fonts */
                         @font-face {}

                         /* footer */
                         footer {}
Control Directives
@if
/* dev.scss */                /* output */
$type: 'games';
                              p {
p {                             color: blue;
  @if $type == sports {       }
    color: green;
  }
  @else if $type == games {
    color: blue;
  }
  @else {
    color: red;
  }
}
@for
/* dev.scss */               /* output */
@for $i from 1 through 3 {   .item-1 {
  .item-#{$i} {                font-size: 12px;
                             }
    font-size: 12px * $i;
  }                          .item-2 {
}                              font-size: 24px;
                             }

                             .item-3 {
                               font-size: 36px;
                             }
@each
/* dev.scss */              /* output */
@each $type in a, b, c {    .a-icon {
  .#{$type}-icon {            background-image: url
                            ("/images/a.png");
    background-image: url
('/images/#{$type}.png');   }
  }                         .b-icon {
}                             background-image: url
                            ("/images/b.png");
                            }

                            .c-icon {
                              background-image: url
                            ("/images/c.png");
                            }
@while
/* dev.scss */                 /* output */
$i: 6;                         .item-6 {
@while $i > 0 {                  width: 12px;
                               }
  .item-#{$i} { width: 2px *
$i; }
                               .item-4 {
  $i: $i - 2;                    width: 8px;
}                              }

                               .item-2 {
                                 width: 4px;
                               }
Thank you!
○ gabrielneutzling@gmail.com
○ facebook.com/gneutzling
○ @gneutzling

Contenu connexe

Tendances

DBIx::Skinnyと仲間たち
DBIx::Skinnyと仲間たちDBIx::Skinnyと仲間たち
DBIx::Skinnyと仲間たちRyo Miyake
 
Make your own wp cli command in 10min
Make your own wp cli command in 10minMake your own wp cli command in 10min
Make your own wp cli command in 10minIvelina Dimova
 
Theming Ext JS 4
Theming Ext JS 4Theming Ext JS 4
Theming Ext JS 4Sencha
 
Rapid Prototyping
Rapid PrototypingRapid Prototyping
Rapid PrototypingEven Wu
 
Sass 基礎教學 - 高雄前端社群(CSS 讀書會)
Sass 基礎教學 - 高雄前端社群(CSS 讀書會)Sass 基礎教學 - 高雄前端社群(CSS 讀書會)
Sass 基礎教學 - 高雄前端社群(CSS 讀書會)Chih-cheng Wang
 
JSON Schema in Web Frontend #insideFE
JSON Schema in Web Frontend #insideFEJSON Schema in Web Frontend #insideFE
JSON Schema in Web Frontend #insideFEHiroyuki Anai
 
Google Cloud Challenge - PHP - DevFest GDG-Cairo
Google Cloud Challenge - PHP - DevFest GDG-Cairo Google Cloud Challenge - PHP - DevFest GDG-Cairo
Google Cloud Challenge - PHP - DevFest GDG-Cairo Haitham Nabil
 
CSSプリプロセッサの取扱説明書
CSSプリプロセッサの取扱説明書CSSプリプロセッサの取扱説明書
CSSプリプロセッサの取扱説明書拓樹 谷
 
Auto tools
Auto toolsAuto tools
Auto tools祺 周
 
Shortcodes In-Depth
Shortcodes In-DepthShortcodes In-Depth
Shortcodes In-DepthMicah Wood
 
R57php 1231677414471772-2
R57php 1231677414471772-2R57php 1231677414471772-2
R57php 1231677414471772-2ady36
 
Bouncingballs sh
Bouncingballs shBouncingballs sh
Bouncingballs shBen Pope
 
Mojolicious: what works and what doesn't
Mojolicious: what works and what doesn'tMojolicious: what works and what doesn't
Mojolicious: what works and what doesn'tCosimo Streppone
 
Mojolicious - Perl Framework for the Real-Time Web (Lightning Talk)
Mojolicious - Perl Framework for the Real-Time Web (Lightning Talk)Mojolicious - Perl Framework for the Real-Time Web (Lightning Talk)
Mojolicious - Perl Framework for the Real-Time Web (Lightning Talk)Dotan Dimet
 

Tendances (19)

DBIx::Skinnyと仲間たち
DBIx::Skinnyと仲間たちDBIx::Skinnyと仲間たち
DBIx::Skinnyと仲間たち
 
Make your own wp cli command in 10min
Make your own wp cli command in 10minMake your own wp cli command in 10min
Make your own wp cli command in 10min
 
Theming Ext JS 4
Theming Ext JS 4Theming Ext JS 4
Theming Ext JS 4
 
Rapid Prototyping
Rapid PrototypingRapid Prototyping
Rapid Prototyping
 
CGI.pm - 3ло?!
CGI.pm - 3ло?!CGI.pm - 3ло?!
CGI.pm - 3ло?!
 
PhoneGap: Local Storage
PhoneGap: Local StoragePhoneGap: Local Storage
PhoneGap: Local Storage
 
SQL Injection Part 2
SQL Injection Part 2SQL Injection Part 2
SQL Injection Part 2
 
Sass 基礎教學 - 高雄前端社群(CSS 讀書會)
Sass 基礎教學 - 高雄前端社群(CSS 讀書會)Sass 基礎教學 - 高雄前端社群(CSS 讀書會)
Sass 基礎教學 - 高雄前端社群(CSS 讀書會)
 
CSS3 Refresher
CSS3 RefresherCSS3 Refresher
CSS3 Refresher
 
Jina Bolton
Jina BoltonJina Bolton
Jina Bolton
 
JSON Schema in Web Frontend #insideFE
JSON Schema in Web Frontend #insideFEJSON Schema in Web Frontend #insideFE
JSON Schema in Web Frontend #insideFE
 
Google Cloud Challenge - PHP - DevFest GDG-Cairo
Google Cloud Challenge - PHP - DevFest GDG-Cairo Google Cloud Challenge - PHP - DevFest GDG-Cairo
Google Cloud Challenge - PHP - DevFest GDG-Cairo
 
CSSプリプロセッサの取扱説明書
CSSプリプロセッサの取扱説明書CSSプリプロセッサの取扱説明書
CSSプリプロセッサの取扱説明書
 
Auto tools
Auto toolsAuto tools
Auto tools
 
Shortcodes In-Depth
Shortcodes In-DepthShortcodes In-Depth
Shortcodes In-Depth
 
R57php 1231677414471772-2
R57php 1231677414471772-2R57php 1231677414471772-2
R57php 1231677414471772-2
 
Bouncingballs sh
Bouncingballs shBouncingballs sh
Bouncingballs sh
 
Mojolicious: what works and what doesn't
Mojolicious: what works and what doesn'tMojolicious: what works and what doesn't
Mojolicious: what works and what doesn't
 
Mojolicious - Perl Framework for the Real-Time Web (Lightning Talk)
Mojolicious - Perl Framework for the Real-Time Web (Lightning Talk)Mojolicious - Perl Framework for the Real-Time Web (Lightning Talk)
Mojolicious - Perl Framework for the Real-Time Web (Lightning Talk)
 

Similaire à Sass - Making CSS fun again.

Mobile-first OOCSS, Sass & Compass at BBC Responsive News
Mobile-first OOCSS, Sass & Compass at BBC Responsive NewsMobile-first OOCSS, Sass & Compass at BBC Responsive News
Mobile-first OOCSS, Sass & Compass at BBC Responsive NewsKaelig Deloumeau-Prigent
 
Wrangling the CSS Beast with Sass
Wrangling the CSS Beast  with SassWrangling the CSS Beast  with Sass
Wrangling the CSS Beast with SassRob Friesel
 
Work and play with SASS & Compass
Work and play with SASS & CompassWork and play with SASS & Compass
Work and play with SASS & CompassAndreas Dantz
 
Software programming tools for creating/managing CSS files
Software programming tools for creating/managing CSS filesSoftware programming tools for creating/managing CSS files
Software programming tools for creating/managing CSS filesDinu Suman
 
Preprocessor presentation
Preprocessor presentationPreprocessor presentation
Preprocessor presentationMario Noble
 
Curso CSS3 com Sass e Compass - Aula 01 - Introducão
Curso CSS3 com Sass e Compass - Aula 01 - IntroducãoCurso CSS3 com Sass e Compass - Aula 01 - Introducão
Curso CSS3 com Sass e Compass - Aula 01 - IntroducãoLoiane Groner
 
Bringing sexy back to CSS: SASS/SCSS, LESS and Compass
Bringing sexy back to CSS: SASS/SCSS, LESS and CompassBringing sexy back to CSS: SASS/SCSS, LESS and Compass
Bringing sexy back to CSS: SASS/SCSS, LESS and CompassClaudina Sarahe
 
Sass and Compass - Getting Started
Sass and Compass - Getting StartedSass and Compass - Getting Started
Sass and Compass - Getting Startededgincvg
 
LessCSS Presentation @ April 2015 GTALUG Meeting
LessCSS Presentation @ April 2015 GTALUG MeetingLessCSS Presentation @ April 2015 GTALUG Meeting
LessCSS Presentation @ April 2015 GTALUG MeetingMyles Braithwaite
 
Finding a Better Way to CSS: Navigating Sass with Compass
Finding a Better Way to CSS: Navigating Sass with CompassFinding a Better Way to CSS: Navigating Sass with Compass
Finding a Better Way to CSS: Navigating Sass with CompassClaudina Sarahe
 
Doing more with LESS
Doing more with LESSDoing more with LESS
Doing more with LESSjsmith92
 
Getting Started with Sass & Compass
Getting Started with Sass & CompassGetting Started with Sass & Compass
Getting Started with Sass & CompassRob Davarnia
 
Ext js saas&compass
Ext js saas&compassExt js saas&compass
Ext js saas&compasselitonweb
 

Similaire à Sass - Making CSS fun again. (20)

Mobile-first OOCSS, Sass & Compass at BBC Responsive News
Mobile-first OOCSS, Sass & Compass at BBC Responsive NewsMobile-first OOCSS, Sass & Compass at BBC Responsive News
Mobile-first OOCSS, Sass & Compass at BBC Responsive News
 
CSS Extenders
CSS ExtendersCSS Extenders
CSS Extenders
 
Wrangling the CSS Beast with Sass
Wrangling the CSS Beast  with SassWrangling the CSS Beast  with Sass
Wrangling the CSS Beast with Sass
 
Work and play with SASS & Compass
Work and play with SASS & CompassWork and play with SASS & Compass
Work and play with SASS & Compass
 
Sass&compass
Sass&compassSass&compass
Sass&compass
 
Theming and Sass
Theming and SassTheming and Sass
Theming and Sass
 
Css frameworks
Css frameworksCss frameworks
Css frameworks
 
Sencha Touch
Sencha TouchSencha Touch
Sencha Touch
 
Software programming tools for creating/managing CSS files
Software programming tools for creating/managing CSS filesSoftware programming tools for creating/managing CSS files
Software programming tools for creating/managing CSS files
 
Preprocessor presentation
Preprocessor presentationPreprocessor presentation
Preprocessor presentation
 
Curso CSS3 com Sass e Compass - Aula 01 - Introducão
Curso CSS3 com Sass e Compass - Aula 01 - IntroducãoCurso CSS3 com Sass e Compass - Aula 01 - Introducão
Curso CSS3 com Sass e Compass - Aula 01 - Introducão
 
Accelerated Stylesheets
Accelerated StylesheetsAccelerated Stylesheets
Accelerated Stylesheets
 
Less & Sass
Less & SassLess & Sass
Less & Sass
 
Bringing sexy back to CSS: SASS/SCSS, LESS and Compass
Bringing sexy back to CSS: SASS/SCSS, LESS and CompassBringing sexy back to CSS: SASS/SCSS, LESS and Compass
Bringing sexy back to CSS: SASS/SCSS, LESS and Compass
 
Sass and Compass - Getting Started
Sass and Compass - Getting StartedSass and Compass - Getting Started
Sass and Compass - Getting Started
 
LessCSS Presentation @ April 2015 GTALUG Meeting
LessCSS Presentation @ April 2015 GTALUG MeetingLessCSS Presentation @ April 2015 GTALUG Meeting
LessCSS Presentation @ April 2015 GTALUG Meeting
 
Finding a Better Way to CSS: Navigating Sass with Compass
Finding a Better Way to CSS: Navigating Sass with CompassFinding a Better Way to CSS: Navigating Sass with Compass
Finding a Better Way to CSS: Navigating Sass with Compass
 
Doing more with LESS
Doing more with LESSDoing more with LESS
Doing more with LESS
 
Getting Started with Sass & Compass
Getting Started with Sass & CompassGetting Started with Sass & Compass
Getting Started with Sass & Compass
 
Ext js saas&compass
Ext js saas&compassExt js saas&compass
Ext js saas&compass
 

Dernier

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 

Dernier (20)

Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 

Sass - Making CSS fun again.

  • 1. Making CSS fun again :)
  • 2. About ○ Front end developer at Conrad Caine ○ Analysis and development of systems at SENAC
  • 3. This is my first presentation and everything can be boring... so let's drink beer!
  • 4. I will talk about ○ CSS weaknesses ○ Syntax ○ Features ○ Techniques ○ ...
  • 6. What's wrong with CSS? ○ No variables ○ Prefixes ○ Lack of abstraction ○ Hard to maintain (mainly in big css files)
  • 8. CSS Preprocessors ○ Sass ○ Less ○ Stylus They are the most popular.
  • 10. What are CSS Preprocessor? "CSS preprocessors take code written in the preprocessed language and then convert that code into the same old css we’ve been writing for years."
  • 12. About ○ Syntactically Awesome StyleSheets ○ Sass makes CSS fun again ○ Sass get installed as Ruby gem, then you need to have Ruby on your machine.
  • 14. The Process ○ Create a .scss file ○ Watch this .scss ○ Sass will create your .css ○ Be happy!
  • 15. Watching a .scss file sass --watch dev.scss:style.css
  • 16. Output style Sass allows you to choose between four different output styles using the --style command-line flag. sass --watch dev.scss:style.css --style nested sass --watch dev.scss:style.css --style expanded sass --watch dev.scss:style.css --style compact sass --watch dev.scss:style.css --style compressed
  • 18. How can we do this today?
  • 19. Variables /* dev.scss */ /* output */ $width: 100px; .side { $color: #00214D; width: 100px; $size: 16px; } .side { .bar { width: $width; width: 100px; } font-size: 16px; color: #00214D; .bar { } width: $width; font-size: $size; color: $color; }
  • 20. Math operations /* dev.scss */ /* output */ $width: 600px; .nav li { $length: 3; width: 200px; } .nav li { width: $width / $length }
  • 21. Color functions /* dev.scss */ /* output */ $color: #ce4dd6; .nav a { color: #e5a0e9; } .nav a { .nav a:hover { color: lighten($color, 20%); color: #d976e0; &:hover { } color: lighten($color, 10%); } }
  • 23. We are accustomed to do this: /* primate.css */ .nav li { list-style:none; float:left; } .nav li a { display:block; padding:5px; }
  • 24. Now we can do this: /* dev.scss */ /* output */ .nav { .nav li { li { list-style: none; float: left; list-style:none; } float:left; a { .nav li a { display:block; display: block; color:blue; color: blue; } } } }
  • 25. Parent Reference /* dev.scss */ /* output */ .nav { .nav li { li { list-style: none; float: left; list-style:none; } float:left; a { .nav li a { display:block; display: block; color:blue; color: blue; &:hover { } color:red; .nav li a:hover { } display: block; } color: red; } } }
  • 27. Mixins /* primate.css */ .nav li a { padding: 5px; border: 1px solid red; -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; }
  • 28. Mixins /* dev.scss */ /* output */ @mixin borderRadius { .nav li a { -moz-border-radius: 10px; padding: 5px; border: 1px solid red; -webkit-border-radius: 10px; -moz-border-radius: 10px; -webkit-border-radius: border-radius: 10px; 10px; } border-radius: 10px; } .nav li a { padding: 5px; border: 1px solid red; @include borderRadius; }
  • 29. Arguments /* dev.scss */ /* output */ @mixin title($size) { article h2 { font: { font-family: arial; font-size: 40px; family: arial; font-weight: bold; size: $size; } weight: bold; } } article h2 { @include title(40px); }
  • 31. Inheritance /* dev.scss */ /* output */ .nav { .nav, .category { background: #CCC; background: #CCC; border: 1px solid red; border: 1px solid red; } } .category { @extend .nav; }
  • 33. Interpolation /* dev.scss */ /* output */ $name: box; p.box { $attr: border; border-color: blue; } p.#{$name} { #{$attr}-color: blue; }
  • 35. @import core.css fonts.css reset.css footer.css
  • 36. @import /* dev.scss */ /* output */ @import "reset.scss"; @import "fonts.scss"; /* reset */ @import "footer.scss"; html {} /* fonts */ @font-face {} /* footer */ footer {}
  • 38. @if /* dev.scss */ /* output */ $type: 'games'; p { p { color: blue; @if $type == sports { } color: green; } @else if $type == games { color: blue; } @else { color: red; } }
  • 39. @for /* dev.scss */ /* output */ @for $i from 1 through 3 { .item-1 { .item-#{$i} { font-size: 12px; } font-size: 12px * $i; } .item-2 { } font-size: 24px; } .item-3 { font-size: 36px; }
  • 40. @each /* dev.scss */ /* output */ @each $type in a, b, c { .a-icon { .#{$type}-icon { background-image: url ("/images/a.png"); background-image: url ('/images/#{$type}.png'); } } .b-icon { } background-image: url ("/images/b.png"); } .c-icon { background-image: url ("/images/c.png"); }
  • 41. @while /* dev.scss */ /* output */ $i: 6; .item-6 { @while $i > 0 { width: 12px; } .item-#{$i} { width: 2px * $i; } .item-4 { $i: $i - 2; width: 8px; } } .item-2 { width: 4px; }
  • 42. Thank you! ○ gabrielneutzling@gmail.com ○ facebook.com/gneutzling ○ @gneutzling