Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sass: The Future of Stylesheets (In Rails 3.1)

Chris Eppstein
September 26, 2011

Sass: The Future of Stylesheets (In Rails 3.1)

An overview of how to use Sass correctly in Rails 3.1

Chris Eppstein

September 26, 2011
Tweet

More Decks by Chris Eppstein

Other Decks in Programming

Transcript

  1. I — Ruby on Rails But why does it stop

    at HTML? Don’t say “RJS” or I will have to facepunch you. Rails is Batteries included... Until you get to design.
  2. I — Ruby on Rails But why does it stop

    at HTML? DID Don’t say “RJS” or I will have to facepunch you. Rails is Batteries included... Until you get to design.
  3. I HATE CSS O N S I S T E

    N T L Y H I T T Y T Y L E S H E E T S I don’t have any way to create DRY!
  4. I HATE CSS It’s not even good at design But

    CSS selectors are a great query language
  5. I — Sass That right. It’s an acronym and it’s

    not capitalized. DEAL WITH IT. I started using Sass at 2.0. Compare to today it was primitive. But it blew my mind.
  6. I — Sass Y N T A C T I

    C A L L Y W E S O M E T Y L E S H E E T S That right. It’s an acronym and it’s not capitalized. DEAL WITH IT. I started using Sass at 2.0. Compare to today it was primitive. But it blew my mind.
  7. I — Sass That right. It’s an acronym and it’s

    not capitalized. DEAL WITH IT. I started using Sass at 2.0. Compare to today it was primitive. But it blew my mind.
  8. I — Compass Standard Library for Design Like rails, it’s

    a batteries included framework for stylesheets. Beyond rails integration it provides a Sass environment for non-rubyists. Biased? Yes. But it’s ok to love the things you’ve made? Especially if you get a lot of help...
  9. Sass Syntax We’re not talking about that! Sass gives us:

    Variables, Calculations, Mixins, Selector Inheritance, Server-side includes, compression, optional white-space aware syntax. It all compiles to standard CSS.
  10. Assets go in. Assets come out. You can’t explain that!

    I’m going to try. But here’s the thing: the asset pipeline is what I would consider an “MVP” It’s still got a lot of growing up to do and we should all help because the vision is a beautiful thing. File bugs. make feature requests, build plugins
  11. Cache-Friendly URLs Zero server configuration background-image: url(/images/logo.png?12345678); The cache buster

    query parameter is sucks: reverse proxy/cdn issues, changes across deploys, (advance) generally not a well behaved resource.
  12. Fucking Resources! How do they work?! rails knows how resources

    work -- it has a world class routing system to enable it. The asset pipeline turns assets into well behaved resources.
  13. rake assets:precompile Part of your deploy asset types are merged

    digest is added to assets caches are happy personal opinion: this is too many hash digits (8 should suffice) gzip files are made. Some webserver configuration is needed.
  14. rake assets:precompile minimized Part of your deploy asset types are

    merged digest is added to assets caches are happy personal opinion: this is too many hash digits (8 should suffice) gzip files are made. Some webserver configuration is needed.
  15. rake assets:precompile minimized compressed Part of your deploy asset types

    are merged digest is added to assets caches are happy personal opinion: this is too many hash digits (8 should suffice) gzip files are made. Some webserver configuration is needed.
  16. rake assets:precompile minimized compressed If you have more files to

    precompile Part of your deploy asset types are merged digest is added to assets caches are happy personal opinion: this is too many hash digits (8 should suffice) gzip files are made. Some webserver configuration is needed.
  17. Digests are AWESOME! Actually... their a pain in the ass.

    (If you use CSS) aka fingerprints The asset pipeline is not magic. URL helpers like image_url are NOT optional anymore -- even in your stylesheets.
  18. application.css.scss.erb.omg.wtf Chaining processors right to left You shouldn’t need to

    do this with SCSS. I’ve yet to see a valid use case. But if you ever think you need to do this, please tell me so I can consider new features.
  19. INCLUDES SASS BY DEFAULT INCLUDES SASS BY DEFAULT MAKES CSS

    IN NEW APPS MAKES CSS IN NEW APPS scumbag dhh picture.
  20. Sprockets Vs. Sass TL;DR Don’t use sprockets directives. require inserts

    content after processing it. so you won’t be able to access any of the mixins, variables defined in the imported file.
  21. • require_self - required files are placed at the top

    of the file. This inverts that order. • require - find, process a file, & inline the output • require_tree - require all files in a folder (recursively) • depend_on - invalidate this file if the dependency changes Sprockets Directives Mixins & Variables will be not available.
  22. Omit the Extension Sass Directive Any Ruby Glob Glob imports

    are always relative to the current file. First looks relative to the current file, then searches the asset path. filename can begin with an underscore to denote a partial. require_self is not needed. @imports happen where they appear. Mixins & Variables from imported files will be available.
  23. The :assets Group Only enabled in development & test environments.

    Because you should precompile your assets. In development your assets are compiled on the fly.
  24. Capfile load 'deploy/assets' Add this to your Capfile and it

    will run rake assets:precompile for you.
  25. If you use Compass and it makes your life better,

    please help make someone else’s life better by making a tax-deductible donation to the United Mitochondrial Disease Foundation. http://umdf.org/compass Compass is Charityware