2015-02-27 02:30:52 -08:00
# Bootstrap for Sass
[](http://badge.fury.io/rb/bootstrap-sass)
[](https://www.npmjs.com/package/bootstrap-sass)
[](http://badge.fury.io/bo/bootstrap-sass)
2015-11-14 19:53:59 -08:00
[](https://travis-ci.org/twbs/bootstrap-sass)
2012-05-11 14:38:25 +01:00
2015-09-27 14:28:00 +01:00
`bootstrap-sass` is a Sass-powered version of [Bootstrap ](https://github.com/twbs/bootstrap ) 3, ready to drop right into your Sass powered applications.
This is Bootstrap 3. For Bootstrap 4 use the [Bootstrap Ruby gem ](http://github.com/twbs/bootstrap-rubygem ) if you use Ruby, and the [main repo ](http://github.com/twbs/bootstrap ) otherwise.
2011-09-06 20:08:31 +01:00
2013-10-16 21:24:42 +02:00
## Installation
2011-09-06 20:08:31 +01:00
2013-10-16 21:24:42 +02:00
Please see the appropriate guide for your environment of choice:
2011-09-06 20:08:31 +01:00
2014-08-04 08:23:12 +02:00
* [Ruby on Rails ](#a-ruby-on-rails ).
* [Compass ](#b-compass-without-rails ) not on Rails.
2014-08-04 08:24:58 +02:00
* [Bower ](#c-bower ).
2015-12-08 23:19:41 -08:00
* [npm / Node.js ](#d-npm--nodejs ).
2014-08-04 08:23:12 +02:00
2014-02-04 03:39:51 +01:00
### a. Ruby on Rails
2013-09-29 10:38:18 -04:00
`bootstrap-sass` is easy to drop into Rails with the asset pipeline.
2013-09-29 10:46:34 -04:00
In your Gemfile you need to add the `bootstrap-sass` gem, and ensure that the `sass-rails` gem is present - it is added to new Rails applications by default.
2013-09-29 10:38:18 -04:00
```ruby
2015-11-24 23:06:35 +00:00
gem 'bootstrap-sass', '~> 3.3.6'
2014-06-24 04:29:14 +02:00
gem 'sass-rails', '>= 3.2'
```
2013-09-29 10:38:18 -04:00
`bundle install` and restart your server to make the files available through the pipeline.
2015-01-21 20:36:08 +00:00
Import Bootstrap styles in `app/assets/stylesheets/application.scss` :
2014-06-24 03:14:26 +02:00
2014-07-03 12:28:24 +02:00
```scss
2014-09-10 18:59:23 +02:00
// "bootstrap-sprockets" must be imported before "bootstrap" and "bootstrap/variables"
2014-07-02 10:25:27 -04:00
@import "bootstrap-sprockets";
@import "bootstrap";
2014-06-24 03:14:26 +02:00
```
2014-09-27 12:06:15 -06:00
`bootstrap-sprockets` must be imported before `bootstrap` for the icon fonts to work.
2015-01-21 20:36:08 +00:00
Make sure the file has `.scss` extension (or `.sass` for Sass syntax). If you have just generated a new Rails app,
2015-01-17 16:48:11 +00:00
it may come with a `.css` file instead. If this file exists, it will be served instead of Sass, so rename it:
2014-08-04 08:19:14 +02:00
```console
2015-01-21 20:36:08 +00:00
$ mv app/assets/stylesheets/application.css app/assets/stylesheets/application.scss
2014-08-04 08:19:14 +02:00
```
2015-07-27 18:22:42 +02:00
Then, remove all the `*= require_self` and `*= require_tree .` statements from the sass file. Instead, use `@import` to import Sass files.
2015-01-17 16:48:11 +00:00
2015-07-27 18:22:42 +02:00
Do not use `*= require` in Sass or your other stylesheets will not be [able to access][antirequire] the Bootstrap mixins or variables.
2014-06-24 03:14:26 +02:00
2014-08-04 08:19:14 +02:00
Require Bootstrap Javascripts in `app/assets/javascripts/application.js` :
2014-06-24 03:14:26 +02:00
```js
//= require jquery
//= require bootstrap-sprockets
```
2014-02-05 20:37:54 +01:00
2015-02-19 16:04:41 -08:00
`bootstrap-sprockets` and `bootstrap` [should not both be included ](https://github.com/twbs/bootstrap-sass/issues/829#issuecomment-75153827 ) in `application.js` .
`bootstrap-sprockets` provides individual Bootstrap Javascript files (`alert.js` or `dropdown.js` , for example), while
`bootstrap` provides a concatenated file containing all Bootstrap Javascripts.
2014-08-04 08:19:14 +02:00
#### Bower with Rails
2014-10-31 19:43:42 +01:00
When using [bootstrap-sass Bower package ](#c-bower ) instead of the gem in Rails, configure assets in `config/application.rb` :
2014-08-04 08:19:14 +02:00
```ruby
2014-10-31 19:33:21 +01:00
# Bower asset paths
root.join('vendor', 'assets', 'bower_components').to_s.tap do |bower_path|
config.sass.load_paths < < bower_path
config.assets.paths < < bower_path
end
# Precompile Bootstrap fonts
2015-01-10 10:59:32 +00:00
config.assets.precompile << %r(bootstrap-sass/assets/fonts/bootstrap/[\w-]+\.(?:eot|svg|ttf|woff2?)$)
2014-10-31 19:33:21 +01:00
# Minimum Sass number precision required by bootstrap-sass
2015-03-15 04:40:25 -07:00
::Sass::Script::Value::Number.precision = [8, ::Sass::Script::Value::Number.precision].max
2014-08-04 08:19:14 +02:00
```
2015-01-21 20:36:08 +00:00
Replace Bootstrap `@import` statements in `application.scss` with:
2014-09-19 12:03:45 +02:00
2014-10-31 19:35:40 +01:00
```scss
2014-10-31 19:33:21 +01:00
$icon-font-path: "bootstrap-sass/assets/fonts/bootstrap/";
@import "bootstrap-sass/assets/stylesheets/bootstrap-sprockets";
@import "bootstrap-sass/assets/stylesheets/bootstrap";
```
Replace Bootstrap `require` directive in `application.js` with:
```js
//= require bootstrap-sass/assets/javascripts/bootstrap-sprockets
2014-08-04 08:19:14 +02:00
```
2014-09-06 03:39:24 +02:00
#### Rails 4.x
Please make sure `sprockets-rails` is at least v2.1.4.
2014-02-05 20:37:54 +01:00
#### Rails 3.2.x
2014-11-12 18:21:47 +01:00
bootstrap-sass is no longer compatible with Rails 3. The latest version of bootstrap-sass compatible with Rails 3.2 is v3.1.1.0.
2014-04-19 13:17:02 +02:00
2014-02-04 03:39:51 +01:00
### b. Compass without Rails
2013-10-16 21:24:42 +02:00
2014-12-17 14:41:34 +00:00
Install the gem:
```console
$ gem install bootstrap-sass
2013-10-16 21:24:42 +02:00
```
If you have an existing Compass project:
2014-12-17 14:41:34 +00:00
1. Require `bootstrap-sass` in `config.rb` :
2013-10-16 21:24:42 +02:00
2014-12-17 14:41:34 +00:00
```ruby
require 'bootstrap-sass'
```
2. Install Bootstrap with:
```console
$ bundle exec compass install bootstrap -r bootstrap-sass
```
2013-10-16 21:24:42 +02:00
If you are creating a new Compass project, you can generate it with bootstrap-sass support:
```console
2014-06-24 04:29:14 +02:00
$ bundle exec compass create my-new-project -r bootstrap-sass --using bootstrap
2013-10-16 21:24:42 +02:00
```
2014-03-26 11:13:35 +01:00
or, alternatively, if you're not using a Gemfile for your dependencies:
```console
2014-06-24 04:29:14 +02:00
$ compass create my-new-project -r bootstrap-sass --using bootstrap
2014-03-26 11:13:35 +01:00
```
2013-10-16 21:24:42 +02:00
This will create a new Compass project with the following files in it:
2014-06-24 04:29:14 +02:00
* [styles.sass ](/templates/project/styles.sass ) - main project Sass file, imports Bootstrap and variables.
2014-10-31 22:53:13 +01:00
* [_bootstrap-variables.sass ](/templates/project/_bootstrap-variables.sass ) - all of Bootstrap variables, override them here.
2013-10-16 21:24:42 +02:00
2014-02-01 09:00:19 +01:00
Some bootstrap-sass mixins may conflict with the Compass ones.
If this happens, change the import order so that Compass mixins are loaded later.
2013-10-16 21:24:42 +02:00
2014-06-24 04:29:14 +02:00
### c. Bower
2014-02-04 03:39:51 +01:00
2015-04-27 20:44:00 +01:00
bootstrap-sass Bower package is compatible with node-sass 3.2.0+. You can install it with:
2013-12-20 21:04:23 +01:00
2014-06-24 04:29:14 +02:00
```console
2015-01-20 00:55:14 +00:00
$ bower install bootstrap-sass
2013-12-20 21:04:23 +01:00
```
2013-11-21 07:51:07 +01:00
2014-06-24 02:57:06 +02:00
Sass, JS, and all other assets are located at [assets ](/assets ).
2014-02-01 09:00:19 +01:00
2014-11-20 13:30:07 +01:00
By default, `bower.json` main field list only the main `_bootstrap.scss` and all the static assets (fonts and JS).
2014-04-21 23:27:06 +02:00
This is compatible by default with asset managers such as [wiredep ](https://github.com/taptapship/wiredep ).
2014-06-24 04:29:14 +02:00
#### Node.js Mincer
2014-03-14 21:36:29 +01:00
2015-12-08 23:39:56 -08:00
If you use [mincer][mincer] with node-sass, import Bootstrap like so:
2014-06-24 03:14:26 +02:00
2014-11-12 18:31:36 +01:00
In `application.css.ejs.scss` (NB ** .css.ejs.scss**):
2014-03-14 21:36:29 +01:00
```scss
// Import mincer asset paths helper integration
@import "bootstrap-mincer";
@import "bootstrap";
```
2014-06-24 04:29:14 +02:00
In `application.js` :
2014-06-24 03:14:26 +02:00
```js
//= require bootstrap-sprockets
```
2014-03-14 21:36:29 +01:00
See also this [example manifest.js ](/test/dummy_node_mincer/manifest.js ) for mincer.
2014-02-12 23:57:20 +01:00
2015-12-08 23:19:41 -08:00
### d. npm / Node.js
```console
$ npm install bootstrap-sass
```
2014-06-24 04:29:14 +02:00
2015-12-15 23:49:53 -08:00
## Configuration
2014-06-24 04:29:14 +02:00
2015-12-15 23:49:53 -08:00
### Sass
2014-06-24 04:29:14 +02:00
By default all of Bootstrap is imported.
You can also import components explicitly. To start with a full list of modules copy
2014-08-19 18:28:21 +02:00
[`_bootstrap.scss` ](assets/stylesheets/_bootstrap.scss ) file into your assets as `_bootstrap-custom.scss` .
Then comment out components you do not want from `_bootstrap-custom` .
2014-06-24 04:29:14 +02:00
In the application Sass file, replace `@import 'bootstrap'` with:
2014-07-03 12:28:24 +02:00
```scss
@import 'bootstrap-custom';
2014-06-24 04:29:14 +02:00
```
2015-12-15 23:49:53 -08:00
### Sass: Number Precision
2014-03-14 21:36:29 +01:00
2015-01-17 16:42:11 +00:00
bootstrap-sass [requires ](https://github.com/twbs/bootstrap-sass/issues/409 ) minimum [Sass number precision][sass-precision] of 8 (default is 5).
2014-02-12 23:57:20 +01:00
2014-06-24 04:29:14 +02:00
Precision is set for Rails and Compass automatically.
2015-12-15 23:49:53 -08:00
When using Ruby Sass compiler standalone or with the Bower version you can set it with:
2014-02-12 23:37:21 +01:00
```ruby
2015-03-15 04:40:25 -07:00
::Sass::Script::Value::Number.precision = [8, ::Sass::Script::Value::Number.precision].max
2014-02-12 23:37:21 +01:00
```
2015-12-15 23:49:53 -08:00
### Sass: Autoprefixer
2014-06-24 04:29:14 +02:00
2015-01-13 15:31:03 -08:00
Bootstrap requires the use of [Autoprefixer][autoprefixer].
2014-06-24 04:29:14 +02:00
[Autoprefixer][autoprefixer] adds vendor prefixes to CSS rules using values from [Can I Use ](http://caniuse.com/ ).
2015-12-08 23:48:37 -08:00
To match [upstream Bootstrap's level of browser compatibility ](http://getbootstrap.com/getting-started/#support ), set Autoprefixer's `browsers` option to:
```json
[
"Android 2.3",
"Android >= 4",
"Chrome >= 20",
"Firefox >= 24",
"Explorer >= 8",
"iOS >= 6",
"Opera >= 12",
"Safari >= 6"
]
```
2015-12-15 23:49:53 -08:00
### JavaScript
2014-06-24 04:29:14 +02:00
2015-12-08 23:39:56 -08:00
[`assets/javascripts/bootstrap.js` ](/assets/javascripts/bootstrap.js ) contains all of Bootstrap's JavaScript,
2014-06-24 04:29:14 +02:00
concatenated in the [correct order ](/assets/javascripts/bootstrap-sprockets.js ).
2014-06-24 16:12:17 +02:00
#### JavaScript with Sprockets or Mincer
2014-06-24 04:29:14 +02:00
If you use Sprockets or Mincer, you can require `bootstrap-sprockets` instead to load the individual modules:
```js
// Load all Bootstrap JavaScript
//= require bootstrap-sprockets
```
2013-11-14 18:26:08 +01:00
2014-06-24 04:29:14 +02:00
You can also load individual modules, provided you also require any dependencies.
You can check dependencies in the [Bootstrap JS documentation][jsdocs].
```js
//= require bootstrap/scrollspy
//= require bootstrap/modal
//= require bootstrap/dropdown
```
2015-12-15 23:49:53 -08:00
### Fonts
2014-06-24 04:29:14 +02:00
The fonts are referenced as:
2013-11-14 18:26:08 +01:00
2014-07-03 12:28:24 +02:00
```scss
2014-02-27 18:21:25 -08:00
"#{$icon-font-path}#{$icon-font-name}.eot"
2013-11-14 18:26:08 +01:00
```
2014-07-12 17:22:15 +02:00
`$icon-font-path` defaults to `bootstrap/` if asset path helpers are used, and `../fonts/bootstrap/` otherwise.
2013-11-14 18:26:08 +01:00
2014-07-12 17:22:15 +02:00
When using bootstrap-sass with Compass, Sprockets, or Mincer, you **must** import the relevant path helpers before Bootstrap itself, for example:
2013-11-14 18:26:08 +01:00
2014-07-03 12:28:24 +02:00
```scss
@import "bootstrap-compass";
@import "bootstrap";
2013-11-14 18:26:08 +01:00
```
2013-10-16 21:29:06 +02:00
## Usage
2013-09-29 10:38:18 -04:00
2013-11-08 07:05:13 +01:00
### Sass
2013-11-08 06:27:51 +01:00
2015-12-08 23:40:54 -08:00
Import Bootstrap into a Sass file (for example, `application.scss` ) to get all of Bootstrap's styles, mixins and variables!
2013-09-29 10:38:18 -04:00
2013-11-04 20:00:12 +01:00
```scss
2013-09-29 10:38:18 -04:00
@import "bootstrap";
```
2015-12-08 23:39:56 -08:00
You can also include optional Bootstrap theme:
2013-09-29 10:38:18 -04:00
2013-11-04 20:00:12 +01:00
```scss
2013-09-29 10:38:18 -04:00
@import "bootstrap/theme";
```
2015-12-08 23:39:56 -08:00
The full list of Bootstrap variables can be found [here ](http://getbootstrap.com/customize/#less-variables ). You can override these by simply redefining the variable before the `@import` directive, e.g.:
2013-12-11 11:49:28 +01:00
2013-11-04 20:00:12 +01:00
```scss
2013-09-17 15:42:08 -07:00
$navbar-default-bg: #312312 ;
$light-orange: #ff8c00 ;
$navbar-default-color: $light-orange;
@import "bootstrap";
```
2014-09-04 00:08:14 +02:00
## Version
2015-02-12 22:34:49 +00:00
Bootstrap for Sass version may differ from the upstream version in the last number, known as
2015-04-27 20:44:00 +01:00
[PATCH ](http://semver.org/spec/v2.0.0.html ). The patch version may be ahead of the corresponding upstream minor.
2015-02-12 22:34:49 +00:00
This happens when we need to release Sass-specific changes.
Before v3.3.2, Bootstrap for Sass version used to reflect the upstream version, with an additional number for
Sass-specific changes. This was changed due to Bower and npm compatibility issues.
The upstream versions vs the Bootstrap for Sass versions are:
| Upstream | Sass |
|---------:|--------:|
2015-11-24 23:06:35 +00:00
| 3.3.6 | 3.3.6 |
2015-06-16 16:25:34 +00:00
| 3.3.5 | 3.3.5 |
2015-03-16 16:23:24 +00:00
| 3.3.4 | 3.3.4 |
2015-02-12 22:34:49 +00:00
| 3.3.2 | 3.3.3 |
| < = 3.3.1 | 3.3.1.x |
2014-09-04 00:08:14 +02:00
Always refer to [CHANGELOG.md ](/CHANGELOG.md ) when upgrading.
2013-11-18 14:31:19 +01:00
---
2013-09-29 10:54:55 -04:00
## Development and Contributing
2011-09-06 20:08:31 +01:00
2013-09-29 10:38:18 -04:00
If you'd like to help with the development of bootstrap-sass itself, read this section.
2013-08-21 17:13:33 +01:00
### Upstream Converter
2011-09-19 23:02:29 +01:00
2013-09-29 10:54:55 -04:00
Keeping bootstrap-sass in sync with upstream changes from Bootstrap used to be an error prone and time consuming manual process. With Bootstrap 3 we have introduced a converter that automates this.
**Note: if you're just looking to *use* Bootstrap 3, see the [installation ](#installation ) section above.**
2013-03-20 12:56:42 +00:00
2013-08-01 01:09:59 -04:00
Upstream changes to the Bootstrap project can now be pulled in using the `convert` rake task.
2011-09-07 01:25:14 +02:00
2013-10-16 22:09:18 +02:00
Here's an example run that would pull down the master branch from the main [twbs/bootstrap ](https://github.com/twbs/bootstrap ) repo:
2014-02-22 15:18:10 +01:00
2013-10-16 22:09:18 +02:00
rake convert
2014-02-22 15:18:10 +01:00
2014-02-22 15:19:25 +01:00
This will convert the latest LESS to Sass and update to the latest JS.
2013-10-16 22:09:18 +02:00
To convert a specific branch or version, pass the branch name or the commit hash as the first task argument:
2014-02-22 15:18:10 +01:00
2013-10-16 22:09:18 +02:00
rake convert[e8a1df5f060bf7e6631554648e0abde150aedbe4]
2011-12-02 22:23:53 +00:00
2013-08-21 17:13:33 +01:00
The latest converter script is located [here][converter] and does the following:
2012-02-06 13:38:26 +00:00
2015-12-08 23:39:56 -08:00
* Converts upstream Bootstrap LESS files to its matching SCSS file.
2015-01-25 19:09:59 -08:00
* Copies all upstream JavaScript into `assets/javascripts/bootstrap` , a Sprockets manifest at `assets/javascripts/bootstrap-sprockets.js` , and a concatenation at `assets/javascripts/bootstrap.js` .
2014-06-24 04:29:14 +02:00
* Copies all upstream font files into `assets/fonts/bootstrap` .
2013-08-21 18:30:32 +02:00
* Sets `Bootstrap::BOOTSTRAP_SHA` in [version.rb][version] to the branch sha.
2012-02-06 13:38:26 +00:00
2013-08-22 19:11:02 +02:00
This converter fully converts original LESS to SCSS. Conversion is automatic but requires instructions for certain transformations (see converter output).
2013-08-22 19:08:29 +02:00
Please submit GitHub issues tagged with `conversion` .
2011-09-19 23:02:29 +01:00
2013-08-21 17:13:33 +01:00
## Credits
2012-02-06 13:38:26 +00:00
2013-08-21 17:13:33 +01:00
bootstrap-sass has a number of major contributors:
2012-02-06 13:38:26 +00:00
2013-08-21 17:13:33 +01:00
<!-- feel free to make these link wherever you wish -->
2013-09-09 11:38:35 +01:00
* [Thomas McDonald ](https://twitter.com/thomasmcdonald_ )
2013-09-29 10:46:34 -04:00
* [Tristan Harward ](http://www.trisweb.com )
2013-08-21 17:13:33 +01:00
* Peter Gumeson
2013-09-09 11:38:35 +01:00
* [Gleb Mazovetskiy ](https://github.com/glebm )
2011-09-19 23:02:29 +01:00
2013-08-21 17:13:33 +01:00
and a [significant number of other contributors][contrib].
2012-05-13 21:28:06 +01:00
## You're in good company
2013-09-09 11:38:35 +01:00
bootstrap-sass is used to build some awesome projects all over the web, including
2015-02-21 03:23:21 -08:00
[Diaspora ](https://diasporafoundation.org/ ), [rails_admin ](https://github.com/sferik/rails_admin ),
2015-11-14 19:53:59 -08:00
Michael Hartl's [Rails Tutorial ](https://www.railstutorial.org/ ), [gitlabhq ](http://gitlabhq.com/ ) and
[kandan ](http://getkandan.com/ ).
2013-09-09 11:38:35 +01:00
2014-02-04 02:30:52 +01:00
[converter]: https://github.com/twbs/bootstrap-sass/blob/master/tasks/converter/less_conversion.rb
[version]: https://github.com/twbs/bootstrap-sass/blob/master/lib/bootstrap-sass/version.rb
2013-12-20 14:40:04 +00:00
[contrib]: https://github.com/twbs/bootstrap-sass/graphs/contributors
[antirequire]: https://github.com/twbs/bootstrap-sass/issues/79#issuecomment -4428595
2013-10-16 21:29:06 +02:00
[jsdocs]: http://getbootstrap.com/javascript/#transitions
2015-03-15 04:40:25 -07:00
[sass-precision]: http://sass-lang.com/documentation/Sass/Script/Value/Number.html#precision %3D-class_method
2014-03-13 22:54:18 +01:00
[mincer]: https://github.com/nodeca/mincer
2015-11-14 19:53:59 -08:00
[autoprefixer]: https://github.com/postcss/autoprefixer