Kube

The Kube gem wraps the Imperavi Kube CSS & JS framework (hereafter Kube framework) for the Rails asset pipeline.

In order to make the variables available at runtime I decided to convert the majority of the SASS variables to CSS Custom Properties. In doing so you can now get and set CSS Custom Property values using Javascript. Unfortunately I couldn't find an acceptable workaround for the remaining 5 SASS variables that are used to generate the grid. However, I didn't find this particularly necessary in my projects anyway.

CSS Custom Properties permit the declaration and usage of cascading variables in stylesheets. caniuse.com reports global support at 72.2%. The main exceptions are Internet Explorer and Opera Mini. Edge 15 has partial support but only due to there being bugs present, so expect this will be fixed soon and full support will be present in that browser too.

Please Note

Imperavi's original version of this framework boasts support for latest Chrome, Firefox, Safari and Opera; and Microsoft Edge and Internet Explorer 11. The changes I have made using CSS Custom Properties affects this support.

Please consult caniuse.com when making your decision about whether this gem is appropriate for your product.

Versioning

The Kube gem matches the source library version for major, minor and patch numbers. We reserve the last number, the revision for gem releases.

As an example, with Kube framework V6.5.2 this gem will have the following properties:

Kube::Version::Compact
=> 6.5.2.0

If we release a revision to our code in between Kube framework releases:

Kube::Version::Compact
=> 6.5.2.1

Kube::Version::Revision
=> 1

A matching release number will a list of changes will appear in CHANGELOG.md.

Installation

To install add the line to your Gemfile:

gem 'kube', '6.5.2.0'

And bundle.

Dependencies

Rails 5.1+ The Rails JavaScript helpers have been rewritten and published in a new gem called rails-ujs. They now they use vanilla JavaScript, so jQuery is not a dependency of Rails anymore. Since Kube relies on it, install it with bin/yarn add jquery or via gem 'jquery-rails' and add //= require jquery to application.js.

NOTE: Ensure that the sass-rails gem is present in your Gemfile.

Adding the Kube javascript

Add the following to your application.js:

# app/assets/javascripts/application.js
//= require jquery3
//= require kube

Adding the Kube stylesheet

Import Kube styles in application.scss:

@import "kube/all";

NOTE: If you have just generated a new Rails application, it may come with a .css file instead. If this file exists, it will be served instead of Sass, so remove it.

$ mv app/assets/stylesheets/application.css app/assets/stylesheets/application.scss

If you don't want to use the default Kube styles and want control over fonts, colors, padding, margins etc., you can set your own values by changing the CSS Custom Properties.

Use the built in Kube installer to copy the Kube properties scss file:

$ rails generate kube:install

This will create app/assets/stylesheets/_kube_properties.scss.

Import this file into your application.scss and switch from using kube/all to just kube:

@import "kube_properties";
@import "kube";

If you take a look at _kube_properties.scss you see that all CSS Custom Properties are set under the :root pseudo-selector rule. This effectively make them global.

You can now set the value of any property and it will be used at runtime by the browser.

In addition you can access and change CSS Custom Properties at runtime in the browser using Javascript.

To get a custom property value set on the root element, get the styles applied to document.documentElement:

var rootStyles = getComputedStyle(document.documentElement);
var defaultColor = rootStyles.getPropertyValue('--color-text');

Since these are runtime properties, values can be updated dynamically:

document.documentElement.style.setProperty('--color-text', '#c80');

The change will be effectively immediately in the browser.

About the grid variables

The grid variables are still declared in SASS. To change these use the following setup in your application.scss file:

// Import the Kube SASS variables and override one or more values:
@import "kube/variables";

// BREAKPOINTS
$sm: 768px;
$md: 1024px;
$lg: 1200px;

// GRID
$grid-columns: 12;
$grid-gutter: 2%;

// Import the Kube CSS Custom Properties:
@import "kube/properties";
// or if you have installed the _kube_properties.scss:
// @import "kube_properties";

// Import the rest of Kube:
@import "kube/mixins";
@import "kube/components";

Acknowledgements

Kube framework is made by and copyright Imperavi LLC.

This gem was written and is maintained by Jurgen Jocubeit.

License

Kube framework is available as open source under the terms of the MIT License.

This gem is also available as open source under the terms of the MIT License.

Copyright 2017 Jurgen Jocubeit