Commit ccb17f11 authored by Mark Otto's avatar Mark Otto

Merge branch 'master' into fix-8869

parents bdd7651e b1f71e52
...@@ -5,4 +5,5 @@ ...@@ -5,4 +5,5 @@
*.json text eol=lf *.json text eol=lf
*.less text eol=lf *.less text eol=lf
*.md text eol=lf *.md text eol=lf
*.svg text eol=lf
*.yml text eol=lf *.yml text eol=lf
...@@ -169,6 +169,7 @@ license your work under the terms of the [MIT License](LICENSE.md). ...@@ -169,6 +169,7 @@ license your work under the terms of the [MIT License](LICENSE.md).
- Always a space after a property's colon (e.g., `display: block;` and not `display:block;`). - Always a space after a property's colon (e.g., `display: block;` and not `display:block;`).
- End all lines with a semi-colon. - End all lines with a semi-colon.
- For multiple, comma-separated selectors, place each selector on its own line. - For multiple, comma-separated selectors, place each selector on its own line.
- Don't add vendor prefixed properties to their unprefixed counterparts (e.g., only `box-sizing` and not also include `-webkit-box-sizing`), as this is done automagically at build time.
- Attribute selectors, like `input[type="text"]` should always wrap the attribute's value in double quotes, for consistency and safety (see this [blog post on unquoted attribute values](http://mathiasbynens.be/notes/unquoted-attribute-values) that can lead to XSS attacks). - Attribute selectors, like `input[type="text"]` should always wrap the attribute's value in double quotes, for consistency and safety (see this [blog post on unquoted attribute values](http://mathiasbynens.be/notes/unquoted-attribute-values) that can lead to XSS attacks).
- Attribute selectors should only be used where absolutely necessary (e.g., form controls) and should be avoided on custom components for performance and explicitness. - Attribute selectors should only be used where absolutely necessary (e.g., form controls) and should be avoided on custom components for performance and explicitness.
- Series of classes for a component should include a base class (e.g., `.component`) and use the base class as a prefix for modifier and sub-components (e.g., `.component-lg`). - Series of classes for a component should include a base class (e.g., `.component`) and use the base class as a prefix for modifier and sub-components (e.g., `.component-lg`).
......
...@@ -19,7 +19,7 @@ module.exports = function (grunt) { ...@@ -19,7 +19,7 @@ module.exports = function (grunt) {
var path = require('path'); var path = require('path');
var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js'); var generateGlyphiconsData = require('./grunt/bs-glyphicons-data-generator.js');
var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js'); var BsLessdocParser = require('./grunt/bs-lessdoc-parser.js');
var generateRawFilesJs = require('./grunt/bs-raw-files-generator.js'); var generateRawFiles = require('./grunt/bs-raw-files-generator.js');
var updateShrinkwrap = require('./grunt/shrinkwrap.js'); var updateShrinkwrap = require('./grunt/shrinkwrap.js');
// Project configuration. // Project configuration.
...@@ -56,40 +56,32 @@ module.exports = function (grunt) { ...@@ -56,40 +56,32 @@ module.exports = function (grunt) {
src: 'js/tests/unit/*.js' src: 'js/tests/unit/*.js'
}, },
assets: { assets: {
src: ['docs/assets/js/application.js', 'docs/assets/js/customizer.js'] src: 'docs/assets/js/src/*.js'
} }
}, },
jscs: { jscs: {
options: { options: {
config: 'js/.jscs.json', config: 'js/.jscsrc'
}, },
grunt: { grunt: {
src: ['Gruntfile.js', 'grunt/*.js'] options: {
requireCamelCaseOrUpperCaseIdentifiers: null,
requireParenthesesAroundIIFE: true
},
src: '<%= jshint.grunt.src %>'
}, },
src: { src: {
src: 'js/*.js' src: '<%= jshint.src.src %>'
}, },
test: { test: {
src: 'js/tests/unit/*.js' src: '<%= jshint.test.src %>'
}, },
assets: { assets: {
src: ['docs/assets/js/application.js', 'docs/assets/js/customizer.js'] src: '<%= jshint.assets.src %>'
} }
}, },
csslint: {
options: {
csslintrc: 'less/.csslintrc'
},
src: [
'dist/css/bootstrap.css',
'dist/css/bootstrap-theme.css',
'docs/assets/css/docs.css',
'docs/examples/**/*.css'
]
},
concat: { concat: {
options: { options: {
banner: '<%= banner %>\n<%= jqueryCheck %>', banner: '<%= banner %>\n<%= jqueryCheck %>',
...@@ -136,7 +128,7 @@ module.exports = function (grunt) { ...@@ -136,7 +128,7 @@ module.exports = function (grunt) {
'docs/assets/js/vendor/blob.js', 'docs/assets/js/vendor/blob.js',
'docs/assets/js/vendor/filesaver.js', 'docs/assets/js/vendor/filesaver.js',
'docs/assets/js/raw-files.min.js', 'docs/assets/js/raw-files.min.js',
'docs/assets/js/customizer.js' 'docs/assets/js/src/customizer.js'
], ],
dest: 'docs/assets/js/customize.min.js' dest: 'docs/assets/js/customize.min.js'
}, },
...@@ -146,12 +138,19 @@ module.exports = function (grunt) { ...@@ -146,12 +138,19 @@ module.exports = function (grunt) {
}, },
src: [ src: [
'docs/assets/js/vendor/holder.js', 'docs/assets/js/vendor/holder.js',
'docs/assets/js/application.js' 'docs/assets/js/src/application.js'
], ],
dest: 'docs/assets/js/docs.min.js' dest: 'docs/assets/js/docs.min.js'
} }
}, },
qunit: {
options: {
inject: 'js/tests/unit/phantom.js'
},
files: 'js/tests/index.html'
},
less: { less: {
compileCore: { compileCore: {
options: { options: {
...@@ -184,11 +183,67 @@ module.exports = function (grunt) { ...@@ -184,11 +183,67 @@ module.exports = function (grunt) {
}, },
files: { files: {
'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css', 'dist/css/<%= pkg.name %>.min.css': 'dist/css/<%= pkg.name %>.css',
'dist/css/<%= pkg.name %>-rtl.min.css': 'dist/css/<%= pkg.name %>-rtl.css',
'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css' 'dist/css/<%= pkg.name %>-theme.min.css': 'dist/css/<%= pkg.name %>-theme.css'
} }
} }
}, },
autoprefixer: {
options: {
browsers: ['last 2 versions', 'ie 8', 'ie 9', 'android 2.3', 'android 4', 'opera 12']
},
core: {
options: {
map: true
},
src: 'dist/css/<%= pkg.name %>.css'
},
theme: {
options: {
map: true
},
src: 'dist/css/<%= pkg.name %>-theme.css'
},
docs: {
src: 'docs/assets/css/docs.css'
},
examples: {
expand: true,
cwd: 'docs/examples/',
src: ['**/*.css'],
dest: 'docs/examples/'
}
},
css_flip: {
rtl: {
files: {
'dist/css/<%= pkg.name %>-rtl.css': 'dist/css/<%= pkg.name %>.css'
}
}
},
csslint: {
options: {
csslintrc: 'less/.csslintrc'
},
src: [
'dist/css/bootstrap.css',
'dist/css/bootstrap-theme.css'
],
examples: [
'docs/examples/**/*.css'
],
docs: {
options: {
ids: false,
'overqualified-elements': false
},
src: 'docs/assets/css/src/docs.css'
}
},
cssmin: { cssmin: {
compress: { compress: {
options: { options: {
...@@ -198,8 +253,8 @@ module.exports = function (grunt) { ...@@ -198,8 +253,8 @@ module.exports = function (grunt) {
compatibility: 'ie8' compatibility: 'ie8'
}, },
src: [ src: [
'docs/assets/css/docs.css', 'docs/assets/css/src/docs.css',
'docs/assets/css/pygments-manni.css' 'docs/assets/css/src/pygments-manni.css'
], ],
dest: 'docs/assets/css/docs.min.css' dest: 'docs/assets/css/docs.min.css'
} }
...@@ -214,7 +269,9 @@ module.exports = function (grunt) { ...@@ -214,7 +269,9 @@ module.exports = function (grunt) {
files: { files: {
src: [ src: [
'dist/css/<%= pkg.name %>.css', 'dist/css/<%= pkg.name %>.css',
'dist/css/<%= pkg.name %>-rtl.css',
'dist/css/<%= pkg.name %>.min.css', 'dist/css/<%= pkg.name %>.min.css',
'dist/css/<%= pkg.name %>-rtl.min.css',
'dist/css/<%= pkg.name %>-theme.css', 'dist/css/<%= pkg.name %>-theme.css',
'dist/css/<%= pkg.name %>-theme.min.css' 'dist/css/<%= pkg.name %>-theme.min.css'
] ]
...@@ -229,14 +286,20 @@ module.exports = function (grunt) { ...@@ -229,14 +286,20 @@ module.exports = function (grunt) {
dist: { dist: {
files: { files: {
'dist/css/<%= pkg.name %>.css': 'dist/css/<%= pkg.name %>.css', 'dist/css/<%= pkg.name %>.css': 'dist/css/<%= pkg.name %>.css',
'dist/css/<%= pkg.name %>-rtl.css': 'dist/css/<%= pkg.name %>-rtl.css',
'dist/css/<%= pkg.name %>-theme.css': 'dist/css/<%= pkg.name %>-theme.css' 'dist/css/<%= pkg.name %>-theme.css': 'dist/css/<%= pkg.name %>-theme.css'
} }
}, },
examples: { examples: {
expand: true, expand: true,
cwd: 'docs/examples/', cwd: 'docs/examples/',
src: ['**/*.css'], src: '**/*.css',
dest: 'docs/examples/' dest: 'docs/examples/'
},
docs: {
files: {
'docs/assets/css/src/docs.css': 'docs/assets/css/src/docs.css'
}
} }
}, },
...@@ -258,13 +321,6 @@ module.exports = function (grunt) { ...@@ -258,13 +321,6 @@ module.exports = function (grunt) {
} }
}, },
qunit: {
options: {
inject: 'js/tests/unit/phantom.js'
},
files: 'js/tests/index.html'
},
connect: { connect: {
server: { server: {
options: { options: {
...@@ -362,6 +418,7 @@ module.exports = function (grunt) { ...@@ -362,6 +418,7 @@ module.exports = function (grunt) {
// These plugins provide necessary tasks. // These plugins provide necessary tasks.
require('load-grunt-tasks')(grunt, {scope: 'devDependencies'}); require('load-grunt-tasks')(grunt, {scope: 'devDependencies'});
require('time-grunt')(grunt);
// Docs HTML validation task // Docs HTML validation task
grunt.registerTask('validate-html', ['jekyll', 'validation']); grunt.registerTask('validate-html', ['jekyll', 'validation']);
...@@ -389,7 +446,8 @@ module.exports = function (grunt) { ...@@ -389,7 +446,8 @@ module.exports = function (grunt) {
grunt.registerTask('dist-js', ['concat', 'uglify']); grunt.registerTask('dist-js', ['concat', 'uglify']);
// CSS distribution task. // CSS distribution task.
grunt.registerTask('dist-css', ['less', 'cssmin', 'csscomb', 'usebanner']); grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme']);
grunt.registerTask('dist-css', ['less-compile', 'autoprefixer', 'css_flip', 'csscomb', 'less:minify', 'cssmin', 'usebanner']);
// Docs distribution task. // Docs distribution task.
grunt.registerTask('dist-docs', 'copy:docs'); grunt.registerTask('dist-docs', 'copy:docs');
...@@ -412,7 +470,7 @@ module.exports = function (grunt) { ...@@ -412,7 +470,7 @@ module.exports = function (grunt) {
grunt.registerTask('build-customizer-html', 'jade'); grunt.registerTask('build-customizer-html', 'jade');
grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () { grunt.registerTask('build-raw-files', 'Add scripts/less files to customizer.', function () {
var banner = grunt.template.process('<%= banner %>'); var banner = grunt.template.process('<%= banner %>');
generateRawFilesJs(banner); generateRawFiles(banner);
}); });
// Task for updating the npm packages used by the Travis build. // Task for updating the npm packages used by the Travis build.
......
...@@ -6,17 +6,18 @@ pygments: true ...@@ -6,17 +6,18 @@ pygments: true
permalink: pretty permalink: pretty
# Server # Server
source: ./docs source: docs
destination: ./_gh_pages destination: _gh_pages
host: 0.0.0.0 host: 0.0.0.0
port: 9001 port: 9001
baseurl: / baseurl: /
url: http://localhost:9001 url: http://getbootstrap.com
encoding: UTF-8 encoding: UTF-8
exclude: exclude:
- "jade" - jade
- "vendor" - src
- vendor
# Custom vars # Custom vars
current_version: 3.1.1 current_version: 3.1.1
......
{ {
"name": "bootstrap", "name": "bootstrap",
"version": "3.1.1", "version": "3.1.1",
"keywords": [
"css",
"js",
"less",
"mobile-first",
"responsive",
"front-end",
"framework",
"web"
],
"main": [ "main": [
"./dist/css/bootstrap.css", "dist/css/bootstrap.css",
"./dist/js/bootstrap.js", "dist/js/bootstrap.js",
"./dist/fonts/glyphicons-halflings-regular.eot", "dist/fonts/glyphicons-halflings-regular.eot",
"./dist/fonts/glyphicons-halflings-regular.svg", "dist/fonts/glyphicons-halflings-regular.svg",
"./dist/fonts/glyphicons-halflings-regular.ttf", "dist/fonts/glyphicons-halflings-regular.ttf",
"./dist/fonts/glyphicons-halflings-regular.woff" "dist/fonts/glyphicons-halflings-regular.woff"
], ],
"ignore": [ "ignore": [
"**/.*", ".*",
"_config.yml", "_config.yml",
"CNAME", "CNAME",
"composer.json", "composer.json",
......
{ {
"name": "twbs/bootstrap", "name": "twbs/bootstrap",
"description": "Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.", "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
"keywords": ["bootstrap", "css"], "keywords": [
"css",
"js",
"less",
"mobile-first",
"responsive",
"front-end",
"framework",
"web"
],
"homepage": "http://getbootstrap.com", "homepage": "http://getbootstrap.com",
"authors": [ "authors": [
{ {
......
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
This diff was suppressed by a .gitattributes entry.
This diff is collapsed.
This diff is collapsed.
This diff was suppressed by a .gitattributes entry.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -25,10 +25,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re ...@@ -25,10 +25,10 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var el = document.createElement('bootstrap') var el = document.createElement('bootstrap')
var transEndEventNames = { var transEndEventNames = {
'WebkitTransition' : 'webkitTransitionEnd', WebkitTransition : 'webkitTransitionEnd',
'MozTransition' : 'transitionend', MozTransition : 'transitionend',
'OTransition' : 'oTransitionEnd otransitionend', OTransition : 'oTransitionEnd otransitionend',
'transition' : 'transitionend' transition : 'transitionend'
} }
for (var name in transEndEventNames) { for (var name in transEndEventNames) {
...@@ -516,7 +516,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re ...@@ -516,7 +516,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
this.transitioning = 1 this.transitioning = 1
var complete = function () { var complete = function (e) {
if (e && e.target != this.$element[0]) return
this.$element this.$element
.removeClass('collapsing') .removeClass('collapsing')
.addClass('collapse in') .addClass('collapse in')
...@@ -555,7 +556,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re ...@@ -555,7 +556,8 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
this.transitioning = 1 this.transitioning = 1
var complete = function () { var complete = function (e) {
if (e && e.target != this.$element[0]) return
this.transitioning = 0 this.transitioning = 0
this.$element this.$element
.trigger('hidden.bs.collapse') .trigger('hidden.bs.collapse')
...@@ -608,7 +610,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re ...@@ -608,7 +610,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// COLLAPSE DATA-API // COLLAPSE DATA-API
// ================= // =================
$(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
var $this = $(this), href var $this = $(this), href
var target = $this.attr('data-target') var target = $this.attr('data-target')
|| e.preventDefault() || e.preventDefault()
...@@ -620,7 +622,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re ...@@ -620,7 +622,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
var $parent = parent && $(parent) var $parent = parent && $(parent)
if (!data || !data.transitioning) { if (!data || !data.transitioning) {
if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
$this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
} }
...@@ -645,7 +647,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re ...@@ -645,7 +647,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
// ========================= // =========================
var backdrop = '.dropdown-backdrop' var backdrop = '.dropdown-backdrop'
var toggle = '[data-toggle=dropdown]' var toggle = '[data-toggle="dropdown"]'
var Dropdown = function (element) { var Dropdown = function (element) {
$(element).on('click.bs.dropdown', this.toggle) $(element).on('click.bs.dropdown', this.toggle)
} }
...@@ -700,7 +702,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re ...@@ -700,7 +702,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
} }
var desc = ' li:not(.divider):visible a' var desc = ' li:not(.divider):visible a'
var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc) var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
if (!$items.length) return if (!$items.length) return
...@@ -773,7 +775,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re ...@@ -773,7 +775,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
.on('click.bs.dropdown.data-api', clearMenus) .on('click.bs.dropdown.data-api', clearMenus)
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
.on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown) .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
}(jQuery); }(jQuery);
...@@ -1880,7 +1882,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re ...@@ -1880,7 +1882,7 @@ if (typeof jQuery === 'undefined') { throw new Error('Bootstrap\'s JavaScript re
offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
if (this.affixed === affix) return if (this.affixed === affix) return
if (this.unpin) this.$element.css('top', '') if (this.unpin != null) this.$element.css('top', '')
var affixType = 'affix' + (affix ? '-' + affix : '') var affixType = 'affix' + (affix ? '-' + affix : '')
var e = $.Event(affixType + '.bs.affix') var e = $.Event(affixType + '.bs.affix')
......
This diff is collapsed.
...@@ -151,6 +151,25 @@ ...@@ -151,6 +151,25 @@
<input id="input-@headings-color" type="text" value="inherit" data-var="@headings-color" class="form-control"/> <input id="input-@headings-color" type="text" value="inherit" data-var="@headings-color" class="form-control"/>
</div> </div>
</div> </div>
<h2 id="iconography">Iconography</h2>
<p>Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.</p>
<div class="row">
<div class="bs-customizer-input">
<label for="input-@icon-font-path">@icon-font-path</label>
<input id="input-@icon-font-path" type="text" value="&quot;../fonts/&quot;" data-var="@icon-font-path" class="form-control"/>
<p class="help-block">Load fonts from this directory.</p>
</div>
<div class="bs-customizer-input">
<label for="input-@icon-font-name">@icon-font-name</label>
<input id="input-@icon-font-name" type="text" value="&quot;glyphicons-halflings-regular&quot;" data-var="@icon-font-name" class="form-control"/>
<p class="help-block">File name for all font files.</p>
</div>
<div class="bs-customizer-input">
<label for="input-@icon-font-svg-id">@icon-font-svg-id</label>
<input id="input-@icon-font-svg-id" type="text" value="&quot;glyphicons_halflingsregular&quot;" data-var="@icon-font-svg-id" class="form-control"/>
<p class="help-block">Element ID within SVG icon file.</p>
</div>
</div>
<h2 id="components">Components</h2> <h2 id="components">Components</h2>
<p>Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).</p> <p>Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).</p>
<div class="row"> <div class="row">
...@@ -1126,7 +1145,7 @@ ...@@ -1126,7 +1145,7 @@
<div class="row"> <div class="row">
<div class="bs-customizer-input"> <div class="bs-customizer-input">
<label for="input-@modal-inner-padding">@modal-inner-padding</label> <label for="input-@modal-inner-padding">@modal-inner-padding</label>
<input id="input-@modal-inner-padding" type="text" value="20px" data-var="@modal-inner-padding" class="form-control"/> <input id="input-@modal-inner-padding" type="text" value="15px" data-var="@modal-inner-padding" class="form-control"/>
<p class="help-block">Padding applied to the modal body</p> <p class="help-block">Padding applied to the modal body</p>
</div> </div>
<div class="bs-customizer-input"> <div class="bs-customizer-input">
...@@ -1311,17 +1330,17 @@ ...@@ -1311,17 +1330,17 @@
<div class="bs-customizer-input"> <div class="bs-customizer-input">
<label for="input-@list-group-hover-bg">@list-group-hover-bg</label> <label for="input-@list-group-hover-bg">@list-group-hover-bg</label>
<input id="input-@list-group-hover-bg" type="text" value="#f5f5f5" data-var="@list-group-hover-bg" class="form-control"/> <input id="input-@list-group-hover-bg" type="text" value="#f5f5f5" data-var="@list-group-hover-bg" class="form-control"/>
<p class="help-block">Background color of single list elements on hover</p> <p class="help-block">Background color of single list items on hover</p>
</div> </div>
<div class="bs-customizer-input"> <div class="bs-customizer-input">
<label for="input-@list-group-active-color">@list-group-active-color</label> <label for="input-@list-group-active-color">@list-group-active-color</label>
<input id="input-@list-group-active-color" type="text" value="@component-active-color" data-var="@list-group-active-color" class="form-control"/> <input id="input-@list-group-active-color" type="text" value="@component-active-color" data-var="@list-group-active-color" class="form-control"/>
<p class="help-block">Text color of active list elements</p> <p class="help-block">Text color of active list items</p>
</div> </div>
<div class="bs-customizer-input"> <div class="bs-customizer-input">
<label for="input-@list-group-active-bg">@list-group-active-bg</label> <label for="input-@list-group-active-bg">@list-group-active-bg</label>
<input id="input-@list-group-active-bg" type="text" value="@component-active-bg" data-var="@list-group-active-bg" class="form-control"/> <input id="input-@list-group-active-bg" type="text" value="@component-active-bg" data-var="@list-group-active-bg" class="form-control"/>
<p class="help-block">Background color of active list elements</p> <p class="help-block">Background color of active list items</p>
</div> </div>
<div class="bs-customizer-input"> <div class="bs-customizer-input">
<label for="input-@list-group-active-border">@list-group-active-border</label> <label for="input-@list-group-active-border">@list-group-active-border</label>
...@@ -1331,11 +1350,31 @@ ...@@ -1331,11 +1350,31 @@
<div class="bs-customizer-input"> <div class="bs-customizer-input">
<label for="input-@list-group-active-text-color">@list-group-active-text-color</label> <label for="input-@list-group-active-text-color">@list-group-active-text-color</label>
<input id="input-@list-group-active-text-color" type="text" value="lighten(@list-group-active-bg, 40%)" data-var="@list-group-active-text-color" class="form-control"/> <input id="input-@list-group-active-text-color" type="text" value="lighten(@list-group-active-bg, 40%)" data-var="@list-group-active-text-color" class="form-control"/>
<p class="help-block">Text color for content within active list items</p>
</div>
<div class="bs-customizer-input">
<label for="input-@list-group-disabled-color">@list-group-disabled-color</label>
<input id="input-@list-group-disabled-color" type="text" value="@gray-light" data-var="@list-group-disabled-color" class="form-control"/>
<p class="help-block">Text color of disabled list items</p>
</div>
<div class="bs-customizer-input">
<label for="input-@list-group-disabled-bg">@list-group-disabled-bg</label>
<input id="input-@list-group-disabled-bg" type="text" value="@gray-lighter" data-var="@list-group-disabled-bg" class="form-control"/>
<p class="help-block">Background color of disabled list items</p>
</div>
<div class="bs-customizer-input">
<label for="input-@list-group-disabled-text-color">@list-group-disabled-text-color</label>
<input id="input-@list-group-disabled-text-color" type="text" value="@list-group-disabled-color" data-var="@list-group-disabled-text-color" class="form-control"/>
<p class="help-block">Text color for content within disabled list items</p>
</div> </div>
<div class="bs-customizer-input"> <div class="bs-customizer-input">
<label for="input-@list-group-link-color">@list-group-link-color</label> <label for="input-@list-group-link-color">@list-group-link-color</label>
<input id="input-@list-group-link-color" type="text" value="#555" data-var="@list-group-link-color" class="form-control"/> <input id="input-@list-group-link-color" type="text" value="#555" data-var="@list-group-link-color" class="form-control"/>
</div> </div>
<div class="bs-customizer-input">
<label for="input-@list-group-link-hover-color">@list-group-link-hover-color</label>
<input id="input-@list-group-link-hover-color" type="text" value="@list-group-link-color" data-var="@list-group-link-hover-color" class="form-control"/>
</div>
<div class="bs-customizer-input"> <div class="bs-customizer-input">
<label for="input-@list-group-link-heading-color">@list-group-link-heading-color</label> <label for="input-@list-group-link-heading-color">@list-group-link-heading-color</label>
<input id="input-@list-group-link-heading-color" type="text" value="#333" data-var="@list-group-link-heading-color" class="form-control"/> <input id="input-@list-group-link-heading-color" type="text" value="#333" data-var="@list-group-link-heading-color" class="form-control"/>
...@@ -1352,6 +1391,14 @@ ...@@ -1352,6 +1391,14 @@
<label for="input-@panel-body-padding">@panel-body-padding</label> <label for="input-@panel-body-padding">@panel-body-padding</label>
<input id="input-@panel-body-padding" type="text" value="15px" data-var="@panel-body-padding" class="form-control"/> <input id="input-@panel-body-padding" type="text" value="15px" data-var="@panel-body-padding" class="form-control"/>
</div> </div>
<div class="bs-customizer-input">
<label for="input-@panel-heading-padding">@panel-heading-padding</label>
<input id="input-@panel-heading-padding" type="text" value="10px 15px" data-var="@panel-heading-padding" class="form-control"/>
</div>
<div class="bs-customizer-input">
<label for="input-@panel-footer-padding">@panel-footer-padding</label>
<input id="input-@panel-footer-padding" type="text" value="@panel-heading-padding" data-var="@panel-footer-padding" class="form-control"/>
</div>
<div class="bs-customizer-input"> <div class="bs-customizer-input">
<label for="input-@panel-border-radius">@panel-border-radius</label> <label for="input-@panel-border-radius">@panel-border-radius</label>
<input id="input-@panel-border-radius" type="text" value="@border-radius-base" data-var="@panel-border-radius" class="form-control"/> <input id="input-@panel-border-radius" type="text" value="@border-radius-base" data-var="@panel-border-radius" class="form-control"/>
......
...@@ -103,6 +103,7 @@ ...@@ -103,6 +103,7 @@
<ul class="nav"> <ul class="nav">
<li><a href="#progress-basic">Basic example</a></li> <li><a href="#progress-basic">Basic example</a></li>
<li><a href="#progress-label">With label</a></li> <li><a href="#progress-label">With label</a></li>
<li><a href="#progress-low-percentages">Low percentages</a></li>
<li><a href="#progress-alternatives">Contextual alternatives</a></li> <li><a href="#progress-alternatives">Contextual alternatives</a></li>
<li><a href="#progress-striped">Striped</a></li> <li><a href="#progress-striped">Striped</a></li>
<li><a href="#progress-animated">Animated</a></li> <li><a href="#progress-animated">Animated</a></li>
...@@ -122,6 +123,7 @@ ...@@ -122,6 +123,7 @@
<li><a href="#list-group-basic">Basic example</a></li> <li><a href="#list-group-basic">Basic example</a></li>
<li><a href="#list-group-badges">Badges</a></li> <li><a href="#list-group-badges">Badges</a></li>
<li><a href="#list-group-linked">Linked items</a></li> <li><a href="#list-group-linked">Linked items</a></li>
<li><a href="#list-group-disabled">Disabled items</a></li>
<li><a href="#list-group-contextual-classes">Contextual classes</a></li> <li><a href="#list-group-contextual-classes">Contextual classes</a></li>
<li><a href="#list-group-custom-content">Custom content</a></li> <li><a href="#list-group-custom-content">Custom content</a></li>
</ul> </ul>
...@@ -136,4 +138,5 @@ ...@@ -136,4 +138,5 @@
<li><a href="#panels-list-group">With list groups</a> <li><a href="#panels-list-group">With list groups</a>
</ul> </ul>
</li> </li>
<li><a href="#responsive-embed">Responsive embed</a></li>
<li><a href="#wells">Wells</a></li> <li><a href="#wells">Wells</a></li>
...@@ -30,7 +30,8 @@ ...@@ -30,7 +30,8 @@
<ul class="nav"> <ul class="nav">
<li><a href="#type-headings">Headings</a></li> <li><a href="#type-headings">Headings</a></li>
<li><a href="#type-body-copy">Body copy</a></li> <li><a href="#type-body-copy">Body copy</a></li>
<li><a href="#type-emphasis">Emphasis</a></li> <li><a href="#type-inline-text">Inline text elements</a></li>
<li><a href="#type-alignment">Alignment classes</a></li>
<li><a href="#type-abbreviations">Abbreviations</a></li> <li><a href="#type-abbreviations">Abbreviations</a></li>
<li><a href="#type-addresses">Addresses</a></li> <li><a href="#type-addresses">Addresses</a></li>
<li><a href="#type-blockquotes">Blockquotes</a></li> <li><a href="#type-blockquotes">Blockquotes</a></li>
...@@ -43,6 +44,8 @@ ...@@ -43,6 +44,8 @@
<li><a href="#code-inline">Inline code</a></li> <li><a href="#code-inline">Inline code</a></li>
<li><a href="#code-user-input">User input</a></li> <li><a href="#code-user-input">User input</a></li>
<li><a href="#code-block">Blocks of code</a></li> <li><a href="#code-block">Blocks of code</a></li>
<li><a href="#code-variables">Variables</a></li>
<li><a href="#code-sample-output">Sample output</a></li>
</ul> </ul>
</li> </li>
<li> <li>
...@@ -67,6 +70,7 @@ ...@@ -67,6 +70,7 @@
<li><a href="#forms-controls-static">Static control</a></li> <li><a href="#forms-controls-static">Static control</a></li>
<li><a href="#forms-control-focus">Focus state</a></li> <li><a href="#forms-control-focus">Focus state</a></li>
<li><a href="#forms-control-disabled">Disabled state</a></li> <li><a href="#forms-control-disabled">Disabled state</a></li>
<li><a href="#forms-control-readonly">Readonly state</a></li>
<li><a href="#forms-control-validation">Validation states</a></li> <li><a href="#forms-control-validation">Validation states</a></li>
<li><a href="#forms-control-sizes">Control sizing</a></li> <li><a href="#forms-control-sizes">Control sizing</a></li>
<li><a href="#forms-help-text">Help text</a></li> <li><a href="#forms-help-text">Help text</a></li>
...@@ -128,3 +132,10 @@ ...@@ -128,3 +132,10 @@
<li><a href="#sass-installation">Rails install</a></li> <li><a href="#sass-installation">Rails install</a></li>
</ul> </ul>
</li> </li>
<li>
<a href="#rtl">RTL version</a>
<ul class="nav">
<li><a href="#rtl-how-to">How to use</a></li>
<li><a href="#rtl-css-flip">CSS Flip</a></li>
</ul>
</li>
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
<li><a href="#colors">Colors</a></li> <li><a href="#colors">Colors</a></li>
<li><a href="#scaffolding">Scaffolding</a></li> <li><a href="#scaffolding">Scaffolding</a></li>
<li><a href="#typography">Typography</a></li> <li><a href="#typography">Typography</a></li>
<li><a href="#iconography">Iconography</a></li>
<li><a href="#components">Components</a></li> <li><a href="#components">Components</a></li>
<li><a href="#tables">Tables</a></li> <li><a href="#tables">Tables</a></li>
<li><a href="#buttons">Buttons</a></li> <li><a href="#buttons">Buttons</a></li>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
{% include header.html %} {% include header.html %}
</head> </head>
<body> <body>
<a class="sr-only" href="#content">Skip to main content</a> <a class="sr-only sr-only-focusable" href="#content">Skip to main content</a>
<!-- Docs master nav --> <!-- Docs master nav -->
{% include nav-main.html %} {% include nav-main.html %}
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
{% include header.html %} {% include header.html %}
</head> </head>
<body class="bs-docs-home"> <body class="bs-docs-home">
<a class="sr-only" href="#content">Skip to main content</a> <a class="sr-only sr-only-focusable" href="#content">Skip to main content</a>
<!-- Docs master nav --> <!-- Docs master nav -->
{% include nav-main.html %} {% include nav-main.html %}
......
...@@ -80,6 +80,20 @@ lead: "Learn about the project's history, meet the maintaining teams, and find o ...@@ -80,6 +80,20 @@ lead: "Learn about the project's history, meet the maintaining teams, and find o
</div> </div>
</div> </div>
<h2>Download mark</h2>
<p>Download the Bootstrap mark in one of three styles, each available as an SVG file. Right click, Save as.</p>
<div class="bs-brand-logos">
<div class="bs-brand-item">
<img class="svg" src="../assets/brand/bootstrap-solid.svg" alt="Bootstrap">
</div>
<div class="bs-brand-item inverse">
<img class="svg" src="../assets/brand/bootstrap-outline.svg" alt="Bootstrap">
</div>
<div class="bs-brand-item inverse">
<img class="svg" src="../assets/brand/bootstrap-punchout.svg" alt="Bootstrap">
</div>
</div>
<h2>Name</h2> <h2>Name</h2>
<p>The project and framework should always be referred to as <strong>Bootstrap</strong>. No Twitter before it, no capital <em>s</em>, and no abbreviations except for one, a capital <strong>B</strong>.</p> <p>The project and framework should always be referred to as <strong>Bootstrap</strong>. No Twitter before it, no capital <em>s</em>, and no abbreviations except for one, a capital <strong>B</strong>.</p>
<div class="bs-brand-logos"> <div class="bs-brand-logos">
......
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 90 612 612" enable-background="new 0 90 612 612" xml:space="preserve">
<g id="solid" inkscape:version="0.48.1 r9760" sodipodi:docname="twitter_bootstrap_logo.svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" display="none">
<path id="bg" display="inline" fill="#563D7C" d="M612,600c0,56.1-45.9,102-102,102H102C45.9,702,0,656.1,0,600V192
C0,135.9,45.9,90,102,90h408c56.1,0,102,45.9,102,102V600z"/>
<g id="B" display="inline" enable-background="new ">
<path fill="#FFFFFF" d="M166.3,223h173.5c32,0,57.7,7.3,77,22c19.3,14.7,29,36.8,29,66.5c0,18-4.4,33.4-13.2,46.2
c-8.8,12.8-21.4,22.8-37.8,29.8v1c22,4.7,38.7,15.1,50,31.2c11.3,16.2,17,36.4,17,60.8c0,14-2.5,27.1-7.5,39.2
c-5,12.2-12.8,22.7-23.5,31.5c-10.7,8.8-24.3,15.8-41,21c-16.7,5.2-36.5,7.8-59.5,7.8h-164V223z M228.8,372.5h102
c15,0,27.5-4.2,37.5-12.8s15-20.8,15-36.8c0-18-4.5-30.7-13.5-38c-9-7.3-22-11-39-11h-102V372.5z M228.8,529h110.5
c19,0,33.8-4.9,44.2-14.8c10.5-9.8,15.8-23.8,15.8-41.8c0-17.7-5.2-31.2-15.8-40.8s-25.2-14.2-44.2-14.2H228.8V529z"/>
</g>
</g>
<g id="outline" inkscape:version="0.48.1 r9760" sodipodi:docname="twitter_bootstrap_logo.svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<g id="bg_1_">
<path fill="#FFFFFF" d="M510,96c25.5,0,49.6,10,67.8,28.2S606,166.5,606,192v408c0,25.5-10,49.6-28.2,67.8S535.5,696,510,696H102
c-25.5,0-49.6-10-67.8-28.2S6,625.5,6,600V192c0-25.5,10-49.6,28.2-67.8S76.5,96,102,96H510 M510,90H102C45.9,90,0,135.9,0,192
v408c0,56.1,45.9,102,102,102h408c56.1,0,102-45.9,102-102V192C612,135.9,566.1,90,510,90L510,90z"/>
</g>
<g id="B_2_" enable-background="new ">
<path fill="#FFFFFF" d="M166.3,223h173.5c32,0,57.7,7.3,77,22c19.3,14.7,29,36.8,29,66.5c0,18-4.4,33.4-13.2,46.2
c-8.8,12.8-21.4,22.8-37.8,29.8v1c22,4.7,38.7,15.1,50,31.2c11.3,16.2,17,36.4,17,60.8c0,14-2.5,27.1-7.5,39.2
c-5,12.2-12.8,22.7-23.5,31.5c-10.7,8.8-24.3,15.8-41,21c-16.7,5.2-36.5,7.8-59.5,7.8h-164V223z M228.8,372.5h102
c15,0,27.5-4.2,37.5-12.8s15-20.8,15-36.8c0-18-4.5-30.7-13.5-38c-9-7.3-22-11-39-11h-102V372.5z M228.8,529h110.5
c19,0,33.8-4.9,44.2-14.8c10.5-9.8,15.8-23.8,15.8-41.8c0-17.7-5.2-31.2-15.8-40.8s-25.2-14.2-44.2-14.2H228.8V529z"/>
</g>
</g>
<g id="punchout" inkscape:version="0.48.1 r9760" sodipodi:docname="twitter_bootstrap_logo.svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" display="none">
<g display="inline">
<path fill="#FFFFFF" d="M373.5,431.8c-10.5-9.5-25.2-14.2-44.2-14.2H218.8V529h110.5c19,0,33.8-4.9,44.2-14.8
c10.5-9.8,15.8-23.8,15.8-41.8C389.2,454.8,384,441.2,373.5,431.8z"/>
<path fill="#FFFFFF" d="M358.2,359.8c10-8.5,15-20.8,15-36.8c0-18-4.5-30.7-13.5-38c-9-7.3-22-11-39-11h-102v98.5h102
C335.7,372.5,348.2,368.2,358.2,359.8z"/>
<path fill="#FFFFFF" d="M510,90H102C45.9,90,0,135.9,0,192v408c0,56.1,45.9,102,102,102h408c56.1,0,102-45.9,102-102V192
C612,135.9,566.1,90,510,90z M454.2,519.8c-5,12.2-12.8,22.7-23.5,31.5c-10.7,8.8-24.3,15.8-41,21c-16.7,5.2-36.5,7.8-59.5,7.8
h-164V223h173.5c32,0,57.7,7.3,77,22c19.3,14.7,29,36.8,29,66.5c0,18-4.4,33.4-13.2,46.2c-8.8,12.8-21.4,22.8-37.8,29.8v1
c22,4.7,38.7,15.1,50,31.2c11.3,16.2,17,36.4,17,60.8C461.7,494.5,459.2,507.6,454.2,519.8z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 90 612 612" enable-background="new 0 90 612 612" xml:space="preserve">
<g id="solid" inkscape:version="0.48.1 r9760" sodipodi:docname="twitter_bootstrap_logo.svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" display="none">
<path id="bg" display="inline" fill="#563D7C" d="M612,600c0,56.1-45.9,102-102,102H102C45.9,702,0,656.1,0,600V192
C0,135.9,45.9,90,102,90h408c56.1,0,102,45.9,102,102V600z"/>
<g id="B" display="inline" enable-background="new ">
<path fill="#FFFFFF" d="M166.3,223h173.5c32,0,57.7,7.3,77,22c19.3,14.7,29,36.8,29,66.5c0,18-4.4,33.4-13.2,46.2
c-8.8,12.8-21.4,22.8-37.8,29.8v1c22,4.7,38.7,15.1,50,31.2c11.3,16.2,17,36.4,17,60.8c0,14-2.5,27.1-7.5,39.2
c-5,12.2-12.8,22.7-23.5,31.5c-10.7,8.8-24.3,15.8-41,21c-16.7,5.2-36.5,7.8-59.5,7.8h-164V223z M228.8,372.5h102
c15,0,27.5-4.2,37.5-12.8s15-20.8,15-36.8c0-18-4.5-30.7-13.5-38c-9-7.3-22-11-39-11h-102V372.5z M228.8,529h110.5
c19,0,33.8-4.9,44.2-14.8c10.5-9.8,15.8-23.8,15.8-41.8c0-17.7-5.2-31.2-15.8-40.8s-25.2-14.2-44.2-14.2H228.8V529z"/>
</g>
</g>
<g id="outline" inkscape:version="0.48.1 r9760" sodipodi:docname="twitter_bootstrap_logo.svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" display="none">
<g id="bg_1_" display="inline">
<path fill="#FFFFFF" d="M510,96c25.5,0,49.6,10,67.8,28.2S606,166.5,606,192v408c0,25.5-10,49.6-28.2,67.8S535.5,696,510,696H102
c-25.5,0-49.6-10-67.8-28.2S6,625.5,6,600V192c0-25.5,10-49.6,28.2-67.8S76.5,96,102,96H510 M510,90H102C45.9,90,0,135.9,0,192
v408c0,56.1,45.9,102,102,102h408c56.1,0,102-45.9,102-102V192C612,135.9,566.1,90,510,90L510,90z"/>
</g>
<g id="B_2_" display="inline" enable-background="new ">
<path fill="#FFFFFF" d="M166.3,223h173.5c32,0,57.7,7.3,77,22c19.3,14.7,29,36.8,29,66.5c0,18-4.4,33.4-13.2,46.2
c-8.8,12.8-21.4,22.8-37.8,29.8v1c22,4.7,38.7,15.1,50,31.2c11.3,16.2,17,36.4,17,60.8c0,14-2.5,27.1-7.5,39.2
c-5,12.2-12.8,22.7-23.5,31.5c-10.7,8.8-24.3,15.8-41,21c-16.7,5.2-36.5,7.8-59.5,7.8h-164V223z M228.8,372.5h102
c15,0,27.5-4.2,37.5-12.8s15-20.8,15-36.8c0-18-4.5-30.7-13.5-38c-9-7.3-22-11-39-11h-102V372.5z M228.8,529h110.5
c19,0,33.8-4.9,44.2-14.8c10.5-9.8,15.8-23.8,15.8-41.8c0-17.7-5.2-31.2-15.8-40.8s-25.2-14.2-44.2-14.2H228.8V529z"/>
</g>
</g>
<g id="punchout" inkscape:version="0.48.1 r9760" sodipodi:docname="twitter_bootstrap_logo.svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<g>
<path fill="#FFFFFF" d="M383.5,431.8c-10.5-9.5-25.2-14.2-44.2-14.2H228.8V529h110.5c19,0,33.8-4.9,44.2-14.8
c10.5-9.8,15.8-23.8,15.8-41.8C399.2,454.8,394,441.2,383.5,431.8z"/>
<path fill="#FFFFFF" d="M368.2,359.8c10-8.5,15-20.8,15-36.8c0-18-4.5-30.7-13.5-38c-9-7.3-22-11-39-11h-102v98.5h102
C345.7,372.5,358.2,368.2,368.2,359.8z"/>
<path fill="#FFFFFF" d="M510,90H102C45.9,90,0,135.9,0,192v408c0,56.1,45.9,102,102,102h408c56.1,0,102-45.9,102-102V192
C612,135.9,566.1,90,510,90z M454.2,519.8c-5,12.2-12.8,22.7-23.5,31.5c-10.7,8.8-24.3,15.8-41,21c-16.7,5.2-36.5,7.8-59.5,7.8
h-164V223h173.5c32,0,57.7,7.3,77,22c19.3,14.7,29,36.8,29,66.5c0,18-4.4,33.4-13.2,46.2c-8.8,12.8-21.4,22.8-37.8,29.8v1
c22,4.7,38.7,15.1,50,31.2c11.3,16.2,17,36.4,17,60.8C461.7,494.5,459.2,507.6,454.2,519.8z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 17.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 90 612 612" enable-background="new 0 90 612 612" xml:space="preserve">
<g id="solid" inkscape:version="0.48.1 r9760" sodipodi:docname="twitter_bootstrap_logo.svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<path id="bg" fill="#563D7C" d="M612,600c0,56.1-45.9,102-102,102H102C45.9,702,0,656.1,0,600V192C0,135.9,45.9,90,102,90h408
c56.1,0,102,45.9,102,102V600z"/>
<g id="B" enable-background="new ">
<path fill="#FFFFFF" d="M166.3,223h173.5c32,0,57.7,7.3,77,22c19.3,14.7,29,36.8,29,66.5c0,18-4.4,33.4-13.2,46.2
c-8.8,12.8-21.4,22.8-37.8,29.8v1c22,4.7,38.7,15.1,50,31.2c11.3,16.2,17,36.4,17,60.8c0,14-2.5,27.1-7.5,39.2
c-5,12.2-12.8,22.7-23.5,31.5c-10.7,8.8-24.3,15.8-41,21c-16.7,5.2-36.5,7.8-59.5,7.8h-164V223z M228.8,372.5h102
c15,0,27.5-4.2,37.5-12.8s15-20.8,15-36.8c0-18-4.5-30.7-13.5-38c-9-7.3-22-11-39-11h-102V372.5z M228.8,529h110.5
c19,0,33.8-4.9,44.2-14.8c10.5-9.8,15.8-23.8,15.8-41.8c0-17.7-5.2-31.2-15.8-40.8s-25.2-14.2-44.2-14.2H228.8V529z"/>
</g>
</g>
<g id="outline" inkscape:version="0.48.1 r9760" sodipodi:docname="twitter_bootstrap_logo.svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" display="none">
<g id="bg_1_" display="inline">
<path fill="#FFFFFF" d="M510,96c25.5,0,49.6,10,67.8,28.2S606,166.5,606,192v408c0,25.5-10,49.6-28.2,67.8S535.5,696,510,696H102
c-25.5,0-49.6-10-67.8-28.2S6,625.5,6,600V192c0-25.5,10-49.6,28.2-67.8S76.5,96,102,96H510 M510,90H102C45.9,90,0,135.9,0,192
v408c0,56.1,45.9,102,102,102h408c56.1,0,102-45.9,102-102V192C612,135.9,566.1,90,510,90L510,90z"/>
</g>
<g id="B_2_" display="inline" enable-background="new ">
<path fill="#FFFFFF" d="M166.3,223h173.5c32,0,57.7,7.3,77,22c19.3,14.7,29,36.8,29,66.5c0,18-4.4,33.4-13.2,46.2
c-8.8,12.8-21.4,22.8-37.8,29.8v1c22,4.7,38.7,15.1,50,31.2c11.3,16.2,17,36.4,17,60.8c0,14-2.5,27.1-7.5,39.2
c-5,12.2-12.8,22.7-23.5,31.5c-10.7,8.8-24.3,15.8-41,21c-16.7,5.2-36.5,7.8-59.5,7.8h-164V223z M228.8,372.5h102
c15,0,27.5-4.2,37.5-12.8s15-20.8,15-36.8c0-18-4.5-30.7-13.5-38c-9-7.3-22-11-39-11h-102V372.5z M228.8,529h110.5
c19,0,33.8-4.9,44.2-14.8c10.5-9.8,15.8-23.8,15.8-41.8c0-17.7-5.2-31.2-15.8-40.8s-25.2-14.2-44.2-14.2H228.8V529z"/>
</g>
</g>
<g id="punchout" inkscape:version="0.48.1 r9760" sodipodi:docname="twitter_bootstrap_logo.svg" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" display="none">
<g display="inline">
<path fill="#FFFFFF" d="M373.5,431.8c-10.5-9.5-25.2-14.2-44.2-14.2H218.8V529h110.5c19,0,33.8-4.9,44.2-14.8
c10.5-9.8,15.8-23.8,15.8-41.8C389.2,454.8,384,441.2,373.5,431.8z"/>
<path fill="#FFFFFF" d="M358.2,359.8c10-8.5,15-20.8,15-36.8c0-18-4.5-30.7-13.5-38c-9-7.3-22-11-39-11h-102v98.5h102
C335.7,372.5,348.2,368.2,358.2,359.8z"/>
<path fill="#FFFFFF" d="M510,90H102C45.9,90,0,135.9,0,192v408c0,56.1,45.9,102,102,102h408c56.1,0,102-45.9,102-102V192
C612,135.9,566.1,90,510,90z M454.2,519.8c-5,12.2-12.8,22.7-23.5,31.5c-10.7,8.8-24.3,15.8-41,21c-16.7,5.2-36.5,7.8-59.5,7.8
h-164V223h173.5c32,0,57.7,7.3,77,22c19.3,14.7,29,36.8,29,66.5c0,18-4.4,33.4-13.2,46.2c-8.8,12.8-21.4,22.8-37.8,29.8v1
c22,4.7,38.7,15.1,50,31.2c11.3,16.2,17,36.4,17,60.8C461.7,494.5,459.2,507.6,454.2,519.8z"/>
</g>
</g>
</svg>
This diff is collapsed.
This diff is collapsed.
...@@ -13,4 +13,4 @@ var Holder=Holder||{};!function(a,b){function c(a,b,c){b=parseInt(b,10),a=parseI ...@@ -13,4 +13,4 @@ var Holder=Holder||{};!function(a,b){function c(a,b,c){b=parseInt(b,10),a=parseI
* Licensed under the Creative Commons Attribution 3.0 Unported License. For * Licensed under the Creative Commons Attribution 3.0 Unported License. For
* details, see http://creativecommons.org/licenses/by/3.0/. * details, see http://creativecommons.org/licenses/by/3.0/.
*/ */
!function(a){a(function(){if(navigator.userAgent.match(/IEMobile\/10\.0/)){var b=document.createElement("style");b.appendChild(document.createTextNode("@-ms-viewport{width:auto!important}")),document.querySelector("head").appendChild(b)}{var c=a(window),d=a(document.body);a(".navbar").outerHeight(!0)+10}d.scrollspy({target:".bs-docs-sidebar"}),c.on("load",function(){d.scrollspy("refresh")}),a(".bs-docs-container [href=#]").click(function(a){a.preventDefault()}),setTimeout(function(){var b=a(".bs-docs-sidebar");b.affix({offset:{top:function(){var c=b.offset().top,d=parseInt(b.children(0).css("margin-top"),10),e=a(".bs-docs-nav").height();return this.top=c-e-d},bottom:function(){return this.bottom=a(".bs-docs-footer").outerHeight(!0)}}})},100),setTimeout(function(){a(".bs-top").affix()},100),a(".tooltip-demo").tooltip({selector:"[data-toggle=tooltip]",container:"body"}),a(".tooltip-test").tooltip(),a(".popover-test").popover(),a(".bs-docs-navbar").tooltip({selector:"a[data-toggle=tooltip]",container:".bs-docs-navbar .nav"}),a("[data-toggle=popover]").popover(),a("#loading-example-btn").click(function(){var b=a(this);b.button("loading"),setTimeout(function(){b.button("reset")},3e3)})})}(jQuery); !function(a){a(function(){if(navigator.userAgent.match(/IEMobile\/10\.0/)){var b=document.createElement("style");b.appendChild(document.createTextNode("@-ms-viewport{width:auto!important}")),document.querySelector("head").appendChild(b)}{var c=a(window),d=a(document.body);a(".navbar").outerHeight(!0)+10}d.scrollspy({target:".bs-docs-sidebar"}),c.on("load",function(){d.scrollspy("refresh")}),a(".bs-docs-container [href=#]").click(function(a){a.preventDefault()}),setTimeout(function(){var b=a(".bs-docs-sidebar");b.affix({offset:{top:function(){var c=b.offset().top,d=parseInt(b.children(0).css("margin-top"),10),e=a(".bs-docs-nav").height();return this.top=c-e-d},bottom:function(){return this.bottom=a(".bs-docs-footer").outerHeight(!0)}}})},100),setTimeout(function(){a(".bs-top").affix()},100),a(".tooltip-demo").tooltip({selector:"[data-toggle=tooltip]",container:"body"}),a(".tooltip-test").tooltip(),a(".popover-test").popover(),a(".bs-docs-navbar").tooltip({selector:"a[data-toggle=tooltip]",container:".bs-docs-navbar .nav"}),a(".bs-docs-popover").popover(),a(".bs-docs-popover-dismiss").popover({trigger:"focus"}),a("#loading-example-btn").click(function(){var b=a(this);b.button("loading"),setTimeout(function(){b.button("reset")},3e3)})})}(jQuery);
\ No newline at end of file \ No newline at end of file
This diff is collapsed.
...@@ -85,7 +85,12 @@ ...@@ -85,7 +85,12 @@
}) })
// popover demo // popover demo
$('[data-toggle=popover]').popover() $('.bs-docs-popover').popover()
// Popover dismiss on next click
$('.bs-docs-popover-dismiss').popover({
trigger: 'focus'
})
// button state demo // button state demo
$('#loading-example-btn') $('#loading-example-btn')
......
...@@ -45,11 +45,11 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -45,11 +45,11 @@ window.onload = function () { // wait for load in a dumb way because B-0
function createGist(configJson) { function createGist(configJson) {
var data = { var data = {
'description': 'Bootstrap Customizer Config', description: 'Bootstrap Customizer Config',
'public': true, 'public': true,
'files': { files: {
'config.json': { 'config.json': {
'content': configJson content: configJson
} }
} }
} }
...@@ -72,9 +72,9 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -72,9 +72,9 @@ window.onload = function () { // wait for load in a dumb way because B-0
var vars = {} var vars = {}
$('#less-variables-section input') $('#less-variables-section input')
.each(function () { .each(function () {
$(this).val() && (vars[$(this).prev().text()] = $(this).val()) $(this).val() && (vars[$(this).prev().text()] = $(this).val())
}) })
var data = { var data = {
vars: vars, vars: vars,
...@@ -238,9 +238,9 @@ window.onload = function () { // wait for load in a dumb way because B-0 ...@@ -238,9 +238,9 @@ window.onload = function () { // wait for load in a dumb way because B-0
var vars = {} var vars = {}
$('#less-variables-section input') $('#less-variables-section input')
.each(function () { .each(function () {
$(this).val() && (vars[$(this).prev().text()] = $(this).val()) $(this).val() && (vars[$(this).prev().text()] = $(this).val())
}) })
var bsLessSource = generateLESS('bootstrap.less', lessFileIncludes, vars) var bsLessSource = generateLESS('bootstrap.less', lessFileIncludes, vars)
var themeLessSource = generateLESS('theme.less', lessFileIncludes, vars) var themeLessSource = generateLESS('theme.less', lessFileIncludes, vars)
......
...@@ -8,5 +8,6 @@ ...@@ -8,5 +8,6 @@
* details, see http://creativecommons.org/licenses/by/3.0/. * details, see http://creativecommons.org/licenses/by/3.0/.
*/ */
// Intended to prevent false-positive bug reports about responsive styling supposedly not working in IE8. // Intended to prevent false-positive bug reports about responsive styling supposedly not working in IE8.
if (window.location.protocol == 'file:') if (window.location.protocol == 'file:') {
alert("ERROR: Bootstrap's responsive CSS is disabled!\nSee getbootstrap.com/getting-started/#respond-file-proto for details.") alert('ERROR: Bootstrap\'s responsive CSS is disabled!\nSee getbootstrap.com/getting-started/#respond-file-proto for details.')
}
This source diff could not be displayed because it is too large. You can view the blob instead.
---
layout: default
title: Wall of browser bugs
slug: browser-bugs
lead: "A list of the browser bugs that Bootstrap is currently grappling with."
---
<div class="bs-docs-section">
<h1 id="browser-bugs" class="page-header">Browser bugs</h1>
<p class="lead">Bootstrap currently works around several outstanding browser bugs in major browsers to deliver the best cross-browser experience possible. Some bugs, like those listed below, cannot be solved by us.</p>
<p>We publicly list browser bugs that are impacting us here, in the hopes of expediting the process of fixing them. For information on Bootstrap's browser compatibility, <a href="../getting-started/#support">see our browser compatibility docs</a>.</p>
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
<tr>
<th>Browser(s)</th>
<th>Summary of bug</th>
<th>Upstream bug(s)</th>
<th>Bootstrap issue(s)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Firefox</td>
<td>Allow use of line-height for <code>&lt;input&gt;</code></td>
<td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=697451">Mozilla bug #697451</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/2985">#2985</a></td>
</tr>
<tr>
<td>Firefox</td>
<td>Unusual default form control styles on Android</td>
<td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=900871">Closed Mozilla bug #900871</a>, <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=763671">Open Mozilla bug #763671</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/8702">#8702</a></td>
</tr>
<tr>
<td>Firefox</td>
<td><code>max-width: 100%;</code> doesn't work inside tables</td>
<td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=975632">Mozilla bug #975632</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/10690">#10690</a></td>
</tr>
<tr>
<td>Firefox <strong>&le;27</strong></td>
<td><code>position: relative;</code> doesn't work inside tables</td>
<td><a href="https://bugzilla.mozilla.org/show_bug.cgi?id=63895">Mozilla bug #63895</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/12467">#12467</a></td>
</tr>
<tr>
<td>Chrome</td>
<td>Weird button behavior with some number inputs</td>
<td><a href="https://code.google.com/p/chromium/issues/detail?id=337668">Chromium issue #337668</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/8350">#8350</a>, <a href="https://github.com/necolas/normalize.css/issues/283">Normalize #283</a></td>
</tr>
<tr>
<td>Chrome</td>
<td>Navbar rendering problem on Windows after several clicks</td>
<td><a href="https://code.google.com/p/chromium/issues/detail?id=272750">Chromium issue #272750</a>, <a href="https://bugs.webkit.org/show_bug.cgi?id=119793">WebKit bug #119793</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/9226">#9226</a></td>
</tr>
<tr>
<td>Chrome</td>
<td><code>display: table;</code> within <code>display: block;</code> forces sibling content to new line</td>
<td><a href="https://code.google.com/p/chromium/issues/detail?id=309483">Chromium issue #309483</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/9950">#9950</a></td>
</tr>
<tr>
<td>Chrome</td>
<td>Unwanted vertical lines when printing styled <code>&lt;select&gt;s</code> on OS X</td>
<td><a href="https://code.google.com/p/chromium/issues/detail?id=282918">Chromium issue #282918</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/11245">#11245</a></td>
</tr>
<tr>
<td>Chrome</td>
<td>inline-block element collapses white-space on Windows</td>
<td><a href="https://code.google.com/p/chromium/issues/detail?id=329574">Chromium issue #329574</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/11885">#11885</a></td>
</tr>
<tr>
<td>Chrome</td>
<td>Incorrect viewport size used for media queries when printing</td>
<td><a href="https://code.google.com/p/chromium/issues/detail?id=273306">Chromium issue #273306</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/12078">#12078</a></td>
</tr>
<tr>
<td>Chrome &amp; Safari</td>
<td>OS X scrollbar clipped in <code>select[multiple]</code> with padding</td>
<td><a href="https://code.google.com/p/chromium/issues/detail?id=342208">Chromium issue #342208</a>, <a href="https://bugs.webkit.org/show_bug.cgi?id=128489">WebKit bug #128489</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/12536">#12536</a></td>
</tr>
<tr>
<td>Chrome</td>
<td><code>display: table-cell; width: 100%;</code> doesn't work correctly on date input</td>
<td><a href="https://code.google.com/p/chromium/issues/detail?id=346051">Chromium issue #346051</a></td>
<td><a href="https://github.com/twbs/bootstrap/issues/12548">#12548</a></td>
</tr>
<tr>
<td>Safari</td>
<td>Insufficient CSS percentage precision</td>
<td>(No public bug tracker)</td>
<td><a href="https://github.com/twbs/bootstrap/issues/9282">#9282</a></td>
</tr>
<tr>
<td>Safari</td>
<td>Justified nav rendering bug</td>
<td>(No public bug tracker)</td>
<td><a href="https://github.com/twbs/bootstrap/issues/9774">#9774</a></td>
</tr>
</tbody>
</table>
</div>
</div>
...@@ -370,6 +370,11 @@ lead: "Over a dozen reusable components built to provide iconography, dropdowns, ...@@ -370,6 +370,11 @@ lead: "Over a dozen reusable components built to provide iconography, dropdowns,
<h4>Handling borders</h4> <h4>Handling borders</h4>
<p>Due to the specific HTML and CSS used to justify buttons (namely <code>display: table-cell</code>), the borders between them are doubled. In regular button groups, <code>margin-left: -1px</code> is used to stack the borders instead of removing them. However, <code>margin</code> doesn't work with <code>display: table-cell</code>. As a result, depending on your customizations to Bootstrap, you may wish to remove or re-color the borders.</p> <p>Due to the specific HTML and CSS used to justify buttons (namely <code>display: table-cell</code>), the borders between them are doubled. In regular button groups, <code>margin-left: -1px</code> is used to stack the borders instead of removing them. However, <code>margin</code> doesn't work with <code>display: table-cell</code>. As a result, depending on your customizations to Bootstrap, you may wish to remove or re-color the borders.</p>
</div> </div>
<div class="bs-callout bs-callout-warning">
<h4>IE8 and borders</h4>
<p>Internet Explorer 8 doesn't render borders in on buttons in a justified button group, whether it's on <code>&lt;a&gt;</code> or <code>&lt;button&gt;</code> elements. To get around that, wrap each button in another <code>.btn-group</code>.</p>
<p>See <a href="https://github.com/twbs/bootstrap/issues/12476">#12476</a> for more information.</p>
</div>
<h4>With <code>&lt;a&gt;</code> elements</h4> <h4>With <code>&lt;a&gt;</code> elements</h4>
<p>Just wrap a series of <code>.btn</code>s in <code>.btn-group.btn-group-justified</code>.</p> <p>Just wrap a series of <code>.btn</code>s in <code>.btn-group.btn-group-justified</code>.</p>
...@@ -1535,6 +1540,11 @@ lead: "Over a dozen reusable components built to provide iconography, dropdowns, ...@@ -1535,6 +1540,11 @@ lead: "Over a dozen reusable components built to provide iconography, dropdowns,
<h2 id="navbar-component-alignment">Component alignment</h2> <h2 id="navbar-component-alignment">Component alignment</h2>
<p>Align nav links, forms, buttons, or text, using the <code>.navbar-left</code> or <code>.navbar-right</code> utility classes. Both classes will add a CSS float in the specified direction. For example, to align nav links, put them in a separate <code>&lt;ul&gt;</code> with the respective utility class applied.</p> <p>Align nav links, forms, buttons, or text, using the <code>.navbar-left</code> or <code>.navbar-right</code> utility classes. Both classes will add a CSS float in the specified direction. For example, to align nav links, put them in a separate <code>&lt;ul&gt;</code> with the respective utility class applied.</p>
<p>These classes are mixin-ed versions of <code>.pull-left</code> and <code>.pull-right</code>, but they're scoped to media queries for easier handling of navbar components across device sizes.</p> <p>These classes are mixin-ed versions of <code>.pull-left</code> and <code>.pull-right</code>, but they're scoped to media queries for easier handling of navbar components across device sizes.</p>
<div class="bs-callout bs-callout-warning">
<h4>Right aligning multiple components</h4>
<p>Navbars currently have a limitation with multiple <code>.navbar-right</code> classes. To properly space content, we use negative margin on the last <code>.navbar-right</code> element. When there are multiple elements using that class, these margins don't work as intended.</p>
<p>We'll revisit this when we can rewrite that component in v4.</p>
</div>
<h2 id="navbar-fixed-top">Fixed to top</h2> <h2 id="navbar-fixed-top">Fixed to top</h2>
...@@ -2280,6 +2290,34 @@ body { padding-bottom: 70px; } ...@@ -2280,6 +2290,34 @@ body { padding-bottom: 70px; }
</div> </div>
{% endhighlight %} {% endhighlight %}
<h3 id="progress-low-percentages">Low percentages</h3>
<p>Progress bars representing low single digit percentages, as well as 0%, include a <code>min-width: 20px;</code> for legibility.</p>
<div class="bs-example">
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
0%
</div>
</div>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="2" aria-valuemin="0" aria-valuemax="100" style="width: 2%;">
2%
</div>
</div>
</div>
{% highlight html %}
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
0%
</div>
</div>
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="2" aria-valuemin="0" aria-valuemax="100" style="width: 2%;">
2%
</div>
</div>
{% endhighlight %}
<h3 id="progress-alternatives">Contextual alternatives</h3> <h3 id="progress-alternatives">Contextual alternatives</h3>
<p>Progress bars use some of the same button and alert classes for consistent styles.</p> <p>Progress bars use some of the same button and alert classes for consistent styles.</p>
<div class="bs-example"> <div class="bs-example">
...@@ -2620,6 +2658,31 @@ body { padding-bottom: 70px; } ...@@ -2620,6 +2658,31 @@ body { padding-bottom: 70px; }
<a href="#" class="list-group-item">Porta ac consectetur ac</a> <a href="#" class="list-group-item">Porta ac consectetur ac</a>
<a href="#" class="list-group-item">Vestibulum at eros</a> <a href="#" class="list-group-item">Vestibulum at eros</a>
</div> </div>
{% endhighlight %}
<h3 id="list-group-disabled">Disabled items</h3>
<p>Add <code>.disabled</code> to a <code>.list-group-item</code> to gray it out to appear disabled.</p>
<div class="bs-example">
<div class="list-group">
<a href="#" class="list-group-item disabled">
Cras justo odio
</a>
<a href="#" class="list-group-item">Dapibus ac facilisis in</a>
<a href="#" class="list-group-item">Morbi leo risus</a>
<a href="#" class="list-group-item">Porta ac consectetur ac</a>
<a href="#" class="list-group-item">Vestibulum at eros</a>
</div>
</div>
{% highlight html %}
<div class="list-group">
<a href="#" class="list-group-item disabled">
Cras justo odio
</a>
<a href="#" class="list-group-item">Dapibus ac facilisis in</a>
<a href="#" class="list-group-item">Morbi leo risus</a>
<a href="#" class="list-group-item">Porta ac consectetur ac</a>
<a href="#" class="list-group-item">Vestibulum at eros</a>
</div>
{% endhighlight %} {% endhighlight %}
<h3 id="list-group-contextual-classes">Contextual classes</h3> <h3 id="list-group-contextual-classes">Contextual classes</h3>
...@@ -2972,6 +3035,34 @@ body { padding-bottom: 70px; } ...@@ -2972,6 +3035,34 @@ body { padding-bottom: 70px; }
<!-- Responsive embeds
================================================== -->
<div class="bs-docs-section">
<h1 id="responsive-embed" class="page-header">Responsive embed</h1>
<p>Allow browsers to determine video or slideshow dimensions based on the width of their containing block by creating an intrinsic ratio that will properly scale on any device.</p>
<p>Rules are directly apply to <code>&lt;iframe&gt;</code>, <code>&lt;embed&gt;</code> and <code>&lt;object&gt;</code> elements, optionally use of an explicit descendant class <code>.embed-responsive-item</code> when you want to match the styling for other attributes.</p>
<p><strong>Pro-Tip!</strong> You don't need to include <code>frameborder="0"</code> in your <code>&lt;iframe&gt;</code>s as we override that for you.</p>
<div class="bs-example">
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="//www.youtube.com/embed/zpOULjyy-n8?rel=0" allowfullscreen></iframe>
</div>
</div>
{% highlight html %}
<!-- 16:9 aspect ratio -->
<div class="embed-responsive embed-responsive-16by9">
<iframe class="embed-responsive-item" src="…"></iframe>
</div>
<!-- 4:3 aspect ratio -->
<div class="embed-responsive embed-responsive-4by3">
<iframe class="embed-responsive-item" src="…"></iframe>
</div>
{% endhighlight %}
</div>
<!-- Wells <!-- Wells
================================================== --> ================================================== -->
<div class="bs-docs-section"> <div class="bs-docs-section">
......
This diff is collapsed.
...@@ -164,6 +164,12 @@ lead: Customize Bootstrap's components, Less variables, and jQuery plugins to ge ...@@ -164,6 +164,12 @@ lead: Customize Bootstrap's components, Less variables, and jQuery plugins to ge
Panels Panels
</label> </label>
</div> </div>
<div class="checkbox">
<label>
<input type="checkbox" checked value="responsive-embed.less">
Responsive embed
</label>
</div>
<div class="checkbox"> <div class="checkbox">
<label> <label>
<input type="checkbox" checked value="wells.less"> <input type="checkbox" checked value="wells.less">
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff was suppressed by a .gitattributes entry.
This diff is collapsed.
This diff was suppressed by a .gitattributes entry.
This source diff could not be displayed because it is too large. You can view the blob instead.
This diff is collapsed.
...@@ -37,7 +37,8 @@ h6, .h6 { ...@@ -37,7 +37,8 @@ h6, .h6 {
.blog-masthead { .blog-masthead {
background-color: #428bca; background-color: #428bca;
box-shadow: inset 0 -2px 5px rgba(0,0,0,.1); -webkit-box-shadow: inset 0 -2px 5px rgba(0,0,0,.1);
box-shadow: inset 0 -2px 5px rgba(0,0,0,.1);
} }
/* Nav links */ /* Nav links */
...@@ -67,9 +68,9 @@ h6, .h6 { ...@@ -67,9 +68,9 @@ h6, .h6 {
margin-left: -5px; margin-left: -5px;
vertical-align: middle; vertical-align: middle;
content: " "; content: " ";
border-right: 5px solid transparent; border-right: 5px solid transparent;
border-bottom: 5px solid; border-bottom: 5px solid;
border-left: 5px solid transparent; border-left: 5px solid transparent;
} }
...@@ -161,3 +162,6 @@ h6, .h6 { ...@@ -161,3 +162,6 @@ h6, .h6 {
background-color: #f9f9f9; background-color: #f9f9f9;
border-top: 1px solid #e5e5e5; border-top: 1px solid #e5e5e5;
} }
.blog-footer p:last-child {
margin-bottom: 0;
}
...@@ -116,11 +116,11 @@ body { ...@@ -116,11 +116,11 @@ body {
} }
.navbar-wrapper .container { .navbar-wrapper .container {
padding-right: 15px; padding-right: 15px;
padding-left: 15px; padding-left: 15px;
} }
.navbar-wrapper .navbar { .navbar-wrapper .navbar {
padding-right: 0; padding-right: 0;
padding-left: 0; padding-left: 0;
} }
/* The navbar becomes detached from the top, so we round the corners */ /* The navbar becomes detached from the top, so we round the corners */
......
...@@ -33,7 +33,8 @@ body { ...@@ -33,7 +33,8 @@ body {
color: #fff; color: #fff;
text-align: center; text-align: center;
text-shadow: 0 1px 3px rgba(0,0,0,.5); text-shadow: 0 1px 3px rgba(0,0,0,.5);
box-shadow: inset 0 0 100px rgba(0,0,0,.5); -webkit-box-shadow: inset 0 0 100px rgba(0,0,0,.5);
box-shadow: inset 0 0 100px rgba(0,0,0,.5);
} }
/* Extra markup and styles for table-esque vertical and horizontal centering */ /* Extra markup and styles for table-esque vertical and horizontal centering */
...@@ -84,6 +85,7 @@ body { ...@@ -84,6 +85,7 @@ body {
.masthead-nav > li > a:hover, .masthead-nav > li > a:hover,
.masthead-nav > li > a:focus { .masthead-nav > li > a:focus {
background-color: transparent; background-color: transparent;
border-bottom-color: #a9a9a9;
border-bottom-color: rgba(255,255,255,.25); border-bottom-color: rgba(255,255,255,.25);
} }
.masthead-nav > .active > a, .masthead-nav > .active > a,
......
...@@ -17,6 +17,13 @@ body { ...@@ -17,6 +17,13 @@ body {
border-bottom: 1px solid #eee; border-bottom: 1px solid #eee;
} }
/*
* Top navigation
* Hide default border to remove 1px line.
*/
.navbar-fixed-top {
border: 0;
}
/* /*
* Sidebar * Sidebar
......
...@@ -34,11 +34,10 @@ body { ...@@ -34,11 +34,10 @@ body {
color: #777; color: #777;
text-align: center; text-align: center;
background-color: #e5e5e5; /* Old browsers */ background-color: #e5e5e5; /* Old browsers */
background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%); /* FF3.6+ */ background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e5e5e5));
background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(100%,#e5e5e5)); /* Chrome,Safari4+ */ background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%);
background-image: -webkit-linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* Chrome 10+,Safari 5.1+ */ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%);
background-image: -o-linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* Opera 11.10+ */ background-image: linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%);
background-image: linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#e5e5e5',GradientType=0 ); /* IE6-9 */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#e5e5e5',GradientType=0 ); /* IE6-9 */
background-repeat: repeat-x; /* Repeat the gradient */ background-repeat: repeat-x; /* Repeat the gradient */
border-bottom: 1px solid #d5d5d5; border-bottom: 1px solid #d5d5d5;
...@@ -48,7 +47,8 @@ body { ...@@ -48,7 +47,8 @@ body {
.nav-justified > .active > a:focus { .nav-justified > .active > a:focus {
background-color: #ddd; background-color: #ddd;
background-image: none; background-image: none;
box-shadow: inset 0 3px 7px rgba(0,0,0,.15); -webkit-box-shadow: inset 0 3px 7px rgba(0,0,0,.15);
box-shadow: inset 0 3px 7px rgba(0,0,0,.15);
} }
.nav-justified > li:first-child > a { .nav-justified > li:first-child > a {
border-radius: 5px 5px 0 0; border-radius: 5px 5px 0 0;
......
...@@ -11,6 +11,11 @@ body { ...@@ -11,6 +11,11 @@ body {
padding-bottom: 30px; padding-bottom: 30px;
} }
/* Don't let the lead text change font-size. */
.lead {
font-size: 16px;
}
/* Finesse the page header spacing */ /* Finesse the page header spacing */
.page-header { .page-header {
margin-bottom: 30px; margin-bottom: 30px;
......
...@@ -21,7 +21,7 @@ footer { ...@@ -21,7 +21,7 @@ footer {
.row-offcanvas { .row-offcanvas {
position: relative; position: relative;
-webkit-transition: all .25s ease-out; -webkit-transition: all .25s ease-out;
-moz-transition: all .25s ease-out; -o-transition: all .25s ease-out;
transition: all .25s ease-out; transition: all .25s ease-out;
} }
......
This diff is collapsed.
body {
padding-top: 70px;
padding-bottom: 30px;
}
.theme-dropdown .dropdown-menu {
position: static;
display: block;
margin-bottom: 20px;
}
.theme-showcase > p > .btn {
margin: 5px 0;
}
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
<p>Back to <a href="../sticky-footer">the default sticky footer</a> minus the navbar.</p> <p>Back to <a href="../sticky-footer">the default sticky footer</a> minus the navbar.</p>
</div> </div>
<div id="footer"> <div class="footer">
<div class="container"> <div class="container">
<p class="text-muted">Place sticky footer content here.</p> <p class="text-muted">Place sticky footer content here.</p>
</div> </div>
......
...@@ -8,7 +8,7 @@ body { ...@@ -8,7 +8,7 @@ body {
/* Margin bottom by footer height */ /* Margin bottom by footer height */
margin-bottom: 60px; margin-bottom: 60px;
} }
#footer { .footer {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
width: 100%; width: 100%;
...@@ -29,7 +29,7 @@ body > .container { ...@@ -29,7 +29,7 @@ body > .container {
margin: 20px 0; margin: 20px 0;
} }
#footer > .container { .footer > .container {
padding-right: 15px; padding-right: 15px;
padding-left: 15px; padding-left: 15px;
} }
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
<p>Use <a href="../sticky-footer-navbar">the sticky footer with a fixed navbar</a> if need be, too.</p> <p>Use <a href="../sticky-footer-navbar">the sticky footer with a fixed navbar</a> if need be, too.</p>
</div> </div>
<div id="footer"> <div class="footer">
<div class="container"> <div class="container">
<p class="text-muted">Place sticky footer content here.</p> <p class="text-muted">Place sticky footer content here.</p>
</div> </div>
......
...@@ -8,7 +8,7 @@ body { ...@@ -8,7 +8,7 @@ body {
/* Margin bottom by footer height */ /* Margin bottom by footer height */
margin-bottom: 60px; margin-bottom: 60px;
} }
#footer { .footer {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
width: 100%; width: 100%;
......
...@@ -418,6 +418,7 @@ bootstrap/ ...@@ -418,6 +418,7 @@ bootstrap/
</table> </table>
</div> </div>
<p>Unofficially, Bootstrap should look and behave well enough in Chromium and Chrome for Linux, Firefox for Linux, and Internet Explorer 7, though they are not officially supported.</p> <p>Unofficially, Bootstrap should look and behave well enough in Chromium and Chrome for Linux, Firefox for Linux, and Internet Explorer 7, though they are not officially supported.</p>
<p>For a list of some of the browser bugs that Bootstrap has to grapple with, see our <a href="../browser-bugs/">Wall of browser bugs</a>.</p>
<h3 id="support-ie8-ie9">Internet Explorer 8 and 9</h3> <h3 id="support-ie8-ie9">Internet Explorer 8 and 9</h3>
<p>Internet Explorer 8 and 9 are also supported, however, please be aware that some CSS3 properties and HTML5 elements are not fully supported by these browsers. In addition, <strong>Internet Explorer 8 requires the use of <a href="https://github.com/scottjehl/Respond">Respond.js</a> to enable media query support.</strong></p> <p>Internet Explorer 8 and 9 are also supported, however, please be aware that some CSS3 properties and HTML5 elements are not fully supported by these browsers. In addition, <strong>Internet Explorer 8 requires the use of <a href="https://github.com/scottjehl/Respond">Respond.js</a> to enable media query support.</strong></p>
...@@ -450,8 +451,6 @@ bootstrap/ ...@@ -450,8 +451,6 @@ bootstrap/
<th scope="row"><code>transition</code></th> <th scope="row"><code>transition</code></th>
<td colspan="2" class="text-danger"><span class="glyphicon glyphicon-remove"></span> Not supported</td> <td colspan="2" class="text-danger"><span class="glyphicon glyphicon-remove"></span> Not supported</td>
</tr> </tr>
</tbody>
<tbody>
<tr> <tr>
<th scope="row"><code>placeholder</code></th> <th scope="row"><code>placeholder</code></th>
<td colspan="2" class="text-danger"><span class="glyphicon glyphicon-remove"></span> Not supported</td> <td colspan="2" class="text-danger"><span class="glyphicon glyphicon-remove"></span> Not supported</td>
...@@ -622,7 +621,7 @@ if (isAndroid) { ...@@ -622,7 +621,7 @@ if (isAndroid) {
<p>If your navigation contains many links and comes before the main content in the DOM, add a <code>Skip to main content</code> link immediately after your opening <code>&lt;body&gt;</code> tag. <a href="http://a11yproject.com/posts/skip-nav-links/">(read why)</a></p> <p>If your navigation contains many links and comes before the main content in the DOM, add a <code>Skip to main content</code> link immediately after your opening <code>&lt;body&gt;</code> tag. <a href="http://a11yproject.com/posts/skip-nav-links/">(read why)</a></p>
{% highlight html %} {% highlight html %}
<body> <body>
<a href="#content" class="sr-only">Skip to main content</a> <a href="#content" class="sr-only sr-only-focusable">Skip to main content</a>
<div class="container" id="content"> <div class="container" id="content">
The main page content. The main page content.
</div> </div>
......
...@@ -65,7 +65,7 @@ $.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Boot ...@@ -65,7 +65,7 @@ $.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the Boot
{% endhighlight %} {% endhighlight %}
<h3 id="js-events">Events</h3> <h3 id="js-events">Events</h3>
<p>Bootstrap provides custom events for most plugins' unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. <code>show</code>) is triggered at the start of an event, and its past participle form (ex. <code>shown</code>) is trigger on the completion of an action.</p> <p>Bootstrap provides custom events for most plugins' unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. <code>show</code>) is triggered at the start of an event, and its past participle form (ex. <code>shown</code>) is triggered on the completion of an action.</p>
<p>As of 3.0.0, all Bootstrap events are namespaced.</p> <p>As of 3.0.0, all Bootstrap events are namespaced.</p>
<p>All infinitive events provide <code>preventDefault</code> functionality. This provides the ability to stop the execution of an action before it starts.</p> <p>All infinitive events provide <code>preventDefault</code> functionality. This provides the ability to stop the execution of an action before it starts.</p>
{% highlight js %} {% highlight js %}
...@@ -231,13 +231,17 @@ $('#myModal').on('show.bs.modal', function (e) { ...@@ -231,13 +231,17 @@ $('#myModal').on('show.bs.modal', function (e) {
</div> </div>
{% endhighlight %} {% endhighlight %}
<div class="bs-callout bs-callout-warning"> <div class="bs-callout bs-callout-warning">
<h4>Make modals accessible</h4> <h4>Make modals accessible</h4>
<p>Be sure to add <code>role="dialog"</code> to <code>.modal</code>, <code>aria-labelledby="myModalLabel"</code> attribute to reference the modal title, and <code>aria-hidden="true"</code> to tell assistive technologies to skip the modal's DOM elements.</p> <p>Be sure to add <code>role="dialog"</code> to <code>.modal</code>, <code>aria-labelledby="myModalLabel"</code> attribute to reference the modal title, and <code>aria-hidden="true"</code> to tell assistive technologies to skip the modal's DOM elements.</p>
<p>Additionally, you may give a description of your modal dialog with <code>aria-describedby</code> on <code>.modal</code>.</p> <p>Additionally, you may give a description of your modal dialog with <code>aria-describedby</code> on <code>.modal</code>.</p>
</div> </div>
<div class="bs-callout bs-callout-info">
<h4>Embedding YouTube videos</h4>
<p>Embedding YouTube videos in modals requires additional JavaScript not in Bootstrap to automatically stop playback and more. <a href="http://stackoverflow.com/questions/18622508/bootstrap-3-and-youtube-in-modal">See this helpful Stack Overflow post</a> for more information.</p>
</div>
<h2 id="modals-sizes">Optional sizes</h2> <h2 id="modals-sizes">Optional sizes</h2>
<p>Modals have two optional sizes, available via modifier classes to be placed on a <code>.modal-dialog</code>.</p> <p>Modals have two optional sizes, available via modifier classes to be placed on a <code>.modal-dialog</code>.</p>
<div class="bs-example"> <div class="bs-example">
...@@ -665,8 +669,16 @@ $('#myDropdown').on('show.bs.dropdown', function () { ...@@ -665,8 +669,16 @@ $('#myDropdown').on('show.bs.dropdown', function () {
<h2 id="scrollspy-usage">Usage</h2> <h2 id="scrollspy-usage">Usage</h2>
<h3>Requires relative positioning</h3>
<p>No matter the implementation method, scrollspy requires the use of <code>position: absolute;</code> on the element you're spying on. In most cases this is the <code>&lt;body&gt;</code>.</p>
<h3>Via data attributes</h3> <h3>Via data attributes</h3>
<p>To easily add scrollspy behavior to your topbar navigation, add <code>data-spy="scroll"</code> to the element you want to spy on (most typically this would be the <code>&lt;body&gt;</code>). Then add the <code>data-target</code> attribute with the ID or class of the parent element of any Bootstrap <code>.nav</code> component.</p> <p>To easily add scrollspy behavior to your topbar navigation, add <code>data-spy="scroll"</code> to the element you want to spy on (most typically this would be the <code>&lt;body&gt;</code>). Then add the <code>data-target</code> attribute with the ID or class of the parent element of any Bootstrap <code>.nav</code> component.</p>
{% highlight css %}
body {
position: relative;
}
{% endhighlight %}
{% highlight html %} {% highlight html %}
<body data-spy="scroll" data-target=".navbar-example"> <body data-spy="scroll" data-target=".navbar-example">
... ...
...@@ -680,7 +692,7 @@ $('#myDropdown').on('show.bs.dropdown', function () { ...@@ -680,7 +692,7 @@ $('#myDropdown').on('show.bs.dropdown', function () {
{% endhighlight %} {% endhighlight %}
<h3>Via JavaScript</h3> <h3>Via JavaScript</h3>
<p>Call the scrollspy via JavaScript:</p> <p>After adding <code>position: relative;</code> in your CSS, call the scrollspy via JavaScript:</p>
{% highlight js %} {% highlight js %}
$('body').scrollspy({ target: '.navbar-example' }) $('body').scrollspy({ target: '.navbar-example' })
{% endhighlight %} {% endhighlight %}
...@@ -1101,6 +1113,8 @@ $('#myTooltip').on('hidden.bs.tooltip', function () { ...@@ -1101,6 +1113,8 @@ $('#myTooltip').on('hidden.bs.tooltip', function () {
{% endhighlight %} {% endhighlight %}
</div> </div>
<!-- Popovers <!-- Popovers
================================================== --> ================================================== -->
<div class="bs-docs-section"> <div class="bs-docs-section">
...@@ -1167,8 +1181,11 @@ $('#myTooltip').on('hidden.bs.tooltip', function () { ...@@ -1167,8 +1181,11 @@ $('#myTooltip').on('hidden.bs.tooltip', function () {
<h3>Live demo</h3> <h3>Live demo</h3>
<div class="bs-example" style="padding-bottom: 24px;"> <div class="bs-example" style="padding-bottom: 24px;">
<a href="#" class="btn btn-lg btn-danger" data-toggle="popover" title="A Title" data-content="And here's some amazing content. It's very engaging. right?" role="button">Click to toggle popover</a> <button type="button" class="btn btn-lg btn-danger bs-docs-popover" data-toggle="popover" title="Popover title" data-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
</div> </div>
{% highlight html %}
<button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Popover title" data-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>
{% endhighlight %}
<h4>Four directions</h4> <h4>Four directions</h4>
<div class="bs-example tooltip-demo"> <div class="bs-example tooltip-demo">
...@@ -1204,6 +1221,20 @@ sagittis lacus vel augue laoreet rutrum faucibus."> ...@@ -1204,6 +1221,20 @@ sagittis lacus vel augue laoreet rutrum faucibus.">
<button type="button" class="btn btn-default" data-container="body" data-toggle="popover" data-placement="right" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus."> <button type="button" class="btn btn-default" data-container="body" data-toggle="popover" data-placement="right" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
Popover on right Popover on right
</button> </button>
{% endhighlight %}
<h4>Dismiss on next click</h4>
<p>Use the <code>focus</code> trigger to dismiss popovers on their next click.</p>
<div class="bs-example" style="padding-bottom: 24px;">
<button type="button" class="btn btn-lg btn-danger bs-docs-popover-dismiss" data-toggle="popover" title="Dimissmisable popover" data-content="And here's some amazing content. It's very engaging. Right?">Dismissable popover</button>
</div>
{% highlight html %}
<button type="button" class="btn btn-lg btn-danger popover-dismiss" data-toggle="popover" title="Dimissmisable popover" data-content="And here's some amazing content. It's very engaging. Right?">Dismissable popover</button>
{% endhighlight %}
{% highlight js %}
$('.popover-dismiss').popover({
trigger: 'focus'
})
{% endhighlight %} {% endhighlight %}
<div class="bs-callout bs-callout-warning"> <div class="bs-callout bs-callout-warning">
......
...@@ -428,6 +428,7 @@ lead: "Guidance on how to upgrade from Bootstrap v2.x to v3.x with emphasis on m ...@@ -428,6 +428,7 @@ lead: "Guidance on how to upgrade from Bootstrap v2.x to v3.x with emphasis on m
<li>Typeahead has been dropped, in favor of using <a href="http://twitter.github.io/typeahead.js/">Twitter Typeahead</a>.</li> <li>Typeahead has been dropped, in favor of using <a href="http://twitter.github.io/typeahead.js/">Twitter Typeahead</a>.</li>
<li>Modal markup has changed significantly. The <code>.modal-header</code>, <code>.modal-body</code>, and <code>.modal-footer</code> sections are now wrapped in <code>.modal-content</code> and <code>.modal-dialog</code> for better mobile styling and behavior. Also, you should no longer apply <code>.hide</code> to <code>.modal</code> in your markup.</li> <li>Modal markup has changed significantly. The <code>.modal-header</code>, <code>.modal-body</code>, and <code>.modal-footer</code> sections are now wrapped in <code>.modal-content</code> and <code>.modal-dialog</code> for better mobile styling and behavior. Also, you should no longer apply <code>.hide</code> to <code>.modal</code> in your markup.</li>
<li>As of v3.1.0, the HTML loaded by the <code>remote</code> modal option is now injected into the <code>.modal-content</code> (from v3.0.0 to v3.0.3, into the <code>.modal</code>) instead of into the <code>.modal-body</code>. This allows you to also easily vary the header and footer of the modal, not just the modal body.</li> <li>As of v3.1.0, the HTML loaded by the <code>remote</code> modal option is now injected into the <code>.modal-content</code> (from v3.0.0 to v3.0.3, into the <code>.modal</code>) instead of into the <code>.modal-body</code>. This allows you to also easily vary the header and footer of the modal, not just the modal body.</li>
<li>The checkbox and radio features of the button.js plugin now both use <code>data-toggle="buttons"</code> instead of <code>data-toggle="buttons-checkbox"</code> or <code>data-toggle="buttons-radio"</code> in their markup.</li>
<li>JavaScript events are namespaced. For example, to handle the modal "show" event, use <code>'show.bs.modal'</code>. For tabs "shown" use <code>'shown.bs.tab'</code>, etc.</li> <li>JavaScript events are namespaced. For example, to handle the modal "show" event, use <code>'show.bs.modal'</code>. For tabs "shown" use <code>'shown.bs.tab'</code>, etc.</li>
</ul> </ul>
<p>For more information on upgrading to v3.0, and code snippets from the community, see <a href="http://bootply.com/">Bootply</a>.</p> <p>For more information on upgrading to v3.0, and code snippets from the community, see <a href="http://bootply.com/">Bootply</a>.</p>
......
---
layout: nil
---
# www.robotstxt.org/
# Allow crawling of all content
User-agent: *
Disallow:
Sitemap: {{ site.url }}/sitemap.xml
---
layout: nil
---
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>{{ site.url }}/</loc>
<lastmod>{{ site.time | date_to_xmlschema }}</lastmod>
<changefreq>daily</changefreq>
<priority>1.0</priority>
</url>
{% for page in site.html_pages %}
{% if page.layout != "home" %}
<url>
<loc>{{ site.url }}{{ page.url }}</loc>
<lastmod>{{ site.time | date_to_xmlschema }}</lastmod>
<changefreq>weekly</changefreq>
<priority>0.7</priority>
</url>
{% endif %}
{% endfor %}
</urlset>
{ {
"camelcase": true, "curly" : true,
"curly": true,
"eqeqeq": true, "eqeqeq": true,
"immed": true,
"indent": 2,
"newcap": true, "newcap": true,
"noarg": true, "noarg" : true,
"node": true, "node" : true,
"nonbsp": true, "nonbsp": true,
"quotmark": "single",
"strict": true, "strict": true,
"trailing": true, "undef" : true
"undef": true
} }
...@@ -11,14 +11,14 @@ module.exports = function generateGlyphiconsData() { ...@@ -11,14 +11,14 @@ module.exports = function generateGlyphiconsData() {
// Pass encoding, utf8, so `readFileSync` will return a string instead of a // Pass encoding, utf8, so `readFileSync` will return a string instead of a
// buffer // buffer
var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8'); var glyphiconsFile = fs.readFileSync('less/glyphicons.less', 'utf8');
var glpyhiconsLines = glyphiconsFile.split('\n'); var glyphiconsLines = glyphiconsFile.split('\n');
// Use any line that starts with ".glyphicon-" and capture the class name // Use any line that starts with ".glyphicon-" and capture the class name
var iconClassName = /^\.(glyphicon-[^\s]+)/; var iconClassName = /^\.(glyphicon-[^\s]+)/;
var glyphiconsData = '# This file is generated via Grunt task. **Do not edit directly.**\n' + var glyphiconsData = '# This file is generated via Grunt task. **Do not edit directly.**\n' +
'# See the \'build-glyphicons-data\' task in Gruntfile.js.\n\n'; '# See the \'build-glyphicons-data\' task in Gruntfile.js.\n\n';
for (var i = 0, len = glpyhiconsLines.length; i < len; i++) { for (var i = 0, len = glyphiconsLines.length; i < len; i++) {
var match = glpyhiconsLines[i].match(iconClassName); var match = glyphiconsLines[i].match(iconClassName);
if (match !== null) { if (match !== null) {
glyphiconsData += '- ' + match[1] + '\n'; glyphiconsData += '- ' + match[1] + '\n';
......
/* global btoa: true */
/*! /*!
* Bootstrap Grunt task for generating raw-files.min.js for the Customizer * Bootstrap Grunt task for generating raw-files.min.js for the Customizer
* http://getbootstrap.com * http://getbootstrap.com
* Copyright 2014 Twitter, Inc. * Copyright 2014 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
*/ */
/* global btoa: true */
'use strict'; 'use strict';
var fs = require('fs'); var fs = require('fs');
var btoa = require('btoa'); var btoa = require('btoa');
......
...@@ -14,13 +14,26 @@ var NON_CANONICAL_FILE = 'npm-shrinkwrap.json'; ...@@ -14,13 +14,26 @@ var NON_CANONICAL_FILE = 'npm-shrinkwrap.json';
var DEST_FILE = 'test-infra/npm-shrinkwrap.canonical.json'; var DEST_FILE = 'test-infra/npm-shrinkwrap.canonical.json';
function cleanup(shrinkwrap) {
// Remove `resolved` property to avoid irrelevant changes
// See https://github.com/npm/npm/issues/3581
if (typeof shrinkwrap === 'string') {
return shrinkwrap;
}
delete shrinkwrap.resolved;
for (var key in shrinkwrap) {
shrinkwrap[key] = cleanup(shrinkwrap[key]);
}
return shrinkwrap;
}
function updateShrinkwrap(grunt) { function updateShrinkwrap(grunt) {
// Assumption: Non-canonical shrinkwrap already generated by prerequisite Grunt task // Assumption: Non-canonical shrinkwrap already generated by prerequisite Grunt task
var shrinkwrapData = grunt.file.readJSON(NON_CANONICAL_FILE); var shrinkwrapData = grunt.file.readJSON(NON_CANONICAL_FILE);
grunt.log.writeln('Deleting ' + NON_CANONICAL_FILE.cyan + '...'); grunt.log.writeln('Deleting ' + NON_CANONICAL_FILE.cyan + '...');
grunt.file.delete(NON_CANONICAL_FILE); grunt.file.delete(NON_CANONICAL_FILE);
// Output as Canonical JSON in correct location // Output as Canonical JSON in correct location
grunt.file.write(DEST_FILE, canonicallyJsonStringify(shrinkwrapData)); grunt.file.write(DEST_FILE, canonicallyJsonStringify(cleanup(shrinkwrapData)));
grunt.log.writeln('File ' + DEST_FILE.cyan + ' updated.'); grunt.log.writeln('File ' + DEST_FILE.cyan + ' updated.');
} }
......
{ {
"disallowEmptyBlocks": true,
"disallowKeywords": ["with"], "disallowKeywords": ["with"],
"requireLeftStickedOperators": [","],
"disallowLeftStickedOperators": ["?", "+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="], "disallowLeftStickedOperators": ["?", "+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
"disallowMixedSpacesAndTabs": true,
"disallowMultipleLineStrings": true,
"disallowQuotedKeysInObjects": "allButReserved",
"disallowRightStickedOperators": ["?", "/", "*", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="], "disallowRightStickedOperators": ["?", "/", "*", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
"disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~"], "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~"],
"disallowSpaceBeforePostfixUnaryOperators": ["++", "--"], "disallowSpaceBeforePostfixUnaryOperators": ["++", "--"],
"disallowTrailingWhitespace": true,
"requireCamelCaseOrUpperCaseIdentifiers": true,
"requireLeftStickedOperators": [","],
"requireLineFeedAtFileEnd": true, "requireLineFeedAtFileEnd": true,
"requireRightStickedOperators": ["!"], "requireRightStickedOperators": ["!"],
"requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], "requireSpaceAfterBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
"requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"], "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"],
"requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="], "requireSpaceBeforeBinaryOperators": ["+", "-", "/", "*", "=", "==", "===", "!=", "!=="],
"requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true }, "requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true },
"validateLineBreaks": "LF" "validateIndentation": 2,
"validateLineBreaks": "LF",
"validateQuoteMarks": "'"
} }
...@@ -7,8 +7,6 @@ ...@@ -7,8 +7,6 @@
"eqeqeq" : false, "eqeqeq" : false,
"eqnull" : true, "eqnull" : true,
"expr" : true, "expr" : true,
"indent" : 2,
"laxbreak" : true, "laxbreak" : true,
"quotmark" : "single",
"validthis": true "validthis": true
} }
\ No newline at end of file
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false
if (this.affixed === affix) return if (this.affixed === affix) return
if (this.unpin) this.$element.css('top', '') if (this.unpin != null) this.$element.css('top', '')
var affixType = 'affix' + (affix ? '-' + affix : '') var affixType = 'affix' + (affix ? '-' + affix : '')
var e = $.Event(affixType + '.bs.affix') var e = $.Event(affixType + '.bs.affix')
......
...@@ -56,7 +56,8 @@ ...@@ -56,7 +56,8 @@
this.transitioning = 1 this.transitioning = 1
var complete = function () { var complete = function (e) {
if (e && e.target != this.$element[0]) return
this.$element this.$element
.removeClass('collapsing') .removeClass('collapsing')
.addClass('collapse in') .addClass('collapse in')
...@@ -95,7 +96,8 @@ ...@@ -95,7 +96,8 @@
this.transitioning = 1 this.transitioning = 1
var complete = function () { var complete = function (e) {
if (e && e.target != this.$element[0]) return
this.transitioning = 0 this.transitioning = 0
this.$element this.$element
.trigger('hidden.bs.collapse') .trigger('hidden.bs.collapse')
...@@ -148,7 +150,7 @@ ...@@ -148,7 +150,7 @@
// COLLAPSE DATA-API // COLLAPSE DATA-API
// ================= // =================
$(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) {
var $this = $(this), href var $this = $(this), href
var target = $this.attr('data-target') var target = $this.attr('data-target')
|| e.preventDefault() || e.preventDefault()
...@@ -160,7 +162,7 @@ ...@@ -160,7 +162,7 @@
var $parent = parent && $(parent) var $parent = parent && $(parent)
if (!data || !data.transitioning) { if (!data || !data.transitioning) {
if ($parent) $parent.find('[data-toggle=collapse][data-parent="' + parent + '"]').not($this).addClass('collapsed') if ($parent) $parent.find('[data-toggle="collapse"][data-parent="' + parent + '"]').not($this).addClass('collapsed')
$this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed')
} }
......
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
// ========================= // =========================
var backdrop = '.dropdown-backdrop' var backdrop = '.dropdown-backdrop'
var toggle = '[data-toggle=dropdown]' var toggle = '[data-toggle="dropdown"]'
var Dropdown = function (element) { var Dropdown = function (element) {
$(element).on('click.bs.dropdown', this.toggle) $(element).on('click.bs.dropdown', this.toggle)
} }
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
} }
var desc = ' li:not(.divider):visible a' var desc = ' li:not(.divider):visible a'
var $items = $parent.find('[role=menu]' + desc + ', [role=listbox]' + desc) var $items = $parent.find('[role="menu"]' + desc + ', [role="listbox"]' + desc)
if (!$items.length) return if (!$items.length) return
...@@ -142,6 +142,6 @@ ...@@ -142,6 +142,6 @@
.on('click.bs.dropdown.data-api', clearMenus) .on('click.bs.dropdown.data-api', clearMenus)
.on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })
.on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)
.on('keydown.bs.dropdown.data-api', toggle + ', [role=menu], [role=listbox]', Dropdown.prototype.keydown) .on('keydown.bs.dropdown.data-api', toggle + ', [role="menu"], [role="listbox"]', Dropdown.prototype.keydown)
}(jQuery); }(jQuery);
...@@ -11,8 +11,32 @@ ...@@ -11,8 +11,32 @@
<script src="vendor/qunit.js"></script> <script src="vendor/qunit.js"></script>
<script> <script>
// See https://github.com/axemclion/grunt-saucelabs#test-result-details-with-qunit // See https://github.com/axemclion/grunt-saucelabs#test-result-details-with-qunit
QUnit.done(function (results) { var log = []
window.global_test_results = results QUnit.done = function (test_results) {
var tests = log.map(function (details) {
return {
name: details.name,
result: details.result,
expected: details.expected,
actual: details.actual,
source: details.source
}
})
test_results.tests = tests
// Delaying results a bit because in real-world scenario you won't get them immediately
setTimeout(function () {
window.global_test_results = test_results
}, 2000)
}
QUnit.testStart(function (testDetails) {
QUnit.log = function (details) {
if (!details.result) {
details.name = testDetails.name
log.push(details)
}
}
}) })
</script> </script>
......
...@@ -273,8 +273,7 @@ $(function () { ...@@ -273,8 +273,7 @@ $(function () {
test('should show tooltip with delegate selector on click', function () { test('should show tooltip with delegate selector on click', function () {
var div = $('<div><a href="#" rel="tooltip" title="Another tooltip"></a></div>') var div = $('<div><a href="#" rel="tooltip" title="Another tooltip"></a></div>')
var tooltip = div.appendTo('#qunit-fixture') var tooltip = div.appendTo('#qunit-fixture')
.tooltip({ selector: 'a[rel=tooltip]', .tooltip({ selector: 'a[rel=tooltip]', trigger: 'click' })
trigger: 'click' })
div.find('a').trigger('click') div.find('a').trigger('click')
ok($('.tooltip').is('.fade.in'), 'tooltip is faded in') ok($('.tooltip').is('.fade.in'), 'tooltip is faded in')
}) })
...@@ -392,21 +391,21 @@ $(function () { ...@@ -392,21 +391,21 @@ $(function () {
test('tooltips should be placed dynamically, with the dynamic placement option', function () { test('tooltips should be placed dynamically, with the dynamic placement option', function () {
$.support.transition = false $.support.transition = false
var ttContainer = $('<div id="dynamic-tt-test"/>').css({ var ttContainer = $('<div id="dynamic-tt-test"/>').css({
'height' : 400, height : 400,
'overflow' : 'hidden', overflow : 'hidden',
'position' : 'absolute', position : 'absolute',
'top' : 0, top : 0,
'left' : 0, left : 0,
'width' : 600 width : 600
}) })
.appendTo('body') .appendTo('body')
var topTooltip = $('<div style="display: inline-block; position: absolute; left: 0; top: 0;" rel="tooltip" title="Top tooltip">Top Dynamic Tooltip</div>') var topTooltip = $('<div style="display: inline-block; position: absolute; left: 0; top: 0;" rel="tooltip" title="Top tooltip">Top Dynamic Tooltip</div>')
.appendTo('#dynamic-tt-test') .appendTo('#dynamic-tt-test')
.tooltip({placement: 'auto'}) .tooltip({placement: 'auto'})
.tooltip('show') .tooltip('show')
ok($('.tooltip').is('.bottom'), 'top positioned tooltip is dynamically positioned bottom') ok($('.tooltip').is('.bottom'), 'top positioned tooltip is dynamically positioned bottom')
topTooltip.tooltip('hide') topTooltip.tooltip('hide')
...@@ -415,7 +414,7 @@ $(function () { ...@@ -415,7 +414,7 @@ $(function () {
.tooltip({placement: 'right auto'}) .tooltip({placement: 'right auto'})
.tooltip('show') .tooltip('show')
ok($('.tooltip').is('.left'), 'right positioned tooltip is dynamically positioned left') ok($('.tooltip').is('.left'), 'right positioned tooltip is dynamically positioned left')
rightTooltip.tooltip('hide') rightTooltip.tooltip('hide')
var leftTooltip = $('<div style="display: inline-block; position: absolute; left: 0;" rel="tooltip" title="Left tooltip">Left Dynamic Tooltip</div>') var leftTooltip = $('<div style="display: inline-block; position: absolute; left: 0;" rel="tooltip" title="Left tooltip">Left Dynamic Tooltip</div>')
...@@ -423,7 +422,7 @@ $(function () { ...@@ -423,7 +422,7 @@ $(function () {
.tooltip({placement: 'auto left'}) .tooltip({placement: 'auto left'})
.tooltip('show') .tooltip('show')
ok($('.tooltip').is('.right'), 'left positioned tooltip is dynamically positioned right') ok($('.tooltip').is('.right'), 'left positioned tooltip is dynamically positioned right')
leftTooltip.tooltip('hide') leftTooltip.tooltip('hide')
ttContainer.remove() ttContainer.remove()
......
...@@ -17,10 +17,10 @@ ...@@ -17,10 +17,10 @@
var el = document.createElement('bootstrap') var el = document.createElement('bootstrap')
var transEndEventNames = { var transEndEventNames = {
'WebkitTransition' : 'webkitTransitionEnd', WebkitTransition : 'webkitTransitionEnd',
'MozTransition' : 'transitionend', MozTransition : 'transitionend',
'OTransition' : 'oTransitionEnd otransitionend', OTransition : 'oTransitionEnd otransitionend',
'transition' : 'transitionend' transition : 'transitionend'
} }
for (var name in transEndEventNames) { for (var name in transEndEventNames) {
......
{ {
"always-semicolon": true, "always-semicolon": true,
"block-indent": 2, "block-indent": 2,
"colon-space": true, "colon-space": [0, 1],
"color-case": "lower", "color-case": "lower",
"color-shorthand": true, "color-shorthand": true,
"combinator-space": true, "combinator-space": true,
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
"leading-zero": false, "leading-zero": false,
"remove-empty-rulesets": true, "remove-empty-rulesets": true,
"rule-indent": 2, "rule-indent": 2,
"stick-brace": true, "stick-brace": " ",
"strip-spaces": true, "strip-spaces": true,
"unitless-zero": true, "unitless-zero": true,
"vendor-prefix-align": true, "vendor-prefix-align": true,
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// -------------------------------------------------- // --------------------------------------------------
// Base classes // Base class
.badge { .badge {
display: inline-block; display: inline-block;
min-width: 10px; min-width: 10px;
...@@ -32,24 +32,24 @@ ...@@ -32,24 +32,24 @@
top: 0; top: 0;
padding: 1px 5px; padding: 1px 5px;
} }
}
// Hover state, but only for links // Hover state, but only for links
a.badge { a& {
&:hover, &:hover,
&:focus { &:focus {
color: @badge-link-hover-color; color: @badge-link-hover-color;
text-decoration: none; text-decoration: none;
cursor: pointer; cursor: pointer;
}
} }
}
// Account for counters in navs // Account for badges in navs
a.list-group-item.active > .badge, a.list-group-item.active > &,
.nav-pills > .active > a > .badge { .nav-pills > .active > a > & {
color: @badge-active-color; color: @badge-active-color;
background-color: @badge-active-bg; background-color: @badge-active-bg;
} }
.nav-pills > li > a > .badge { .nav-pills > li > a > & {
margin-left: 3px; margin-left: 3px;
}
} }
...@@ -2,9 +2,10 @@ ...@@ -2,9 +2,10 @@
@import "variables.less"; @import "variables.less";
@import "mixins.less"; @import "mixins.less";
// Reset // Reset and dependencies
@import "normalize.less"; @import "normalize.less";
@import "print.less"; @import "print.less";
@import "glyphicons.less";
// Core CSS // Core CSS
@import "scaffolding.less"; @import "scaffolding.less";
...@@ -17,7 +18,6 @@ ...@@ -17,7 +18,6 @@
// Components // Components
@import "component-animations.less"; @import "component-animations.less";
@import "glyphicons.less";
@import "dropdowns.less"; @import "dropdowns.less";
@import "button-groups.less"; @import "button-groups.less";
@import "input-groups.less"; @import "input-groups.less";
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
@import "media.less"; @import "media.less";
@import "list-group.less"; @import "list-group.less";
@import "panels.less"; @import "panels.less";
@import "responsive-embed.less";
@import "wells.less"; @import "wells.less";
@import "close.less"; @import "close.less";
......
...@@ -220,7 +220,17 @@ ...@@ -220,7 +220,17 @@
// Checkbox and radio options // Checkbox and radio options
//
// In order to support the browser's form validation feedback, powered by the
// `required` attribute, we have to "hide" the inputs via `opacity`. We cannot
// use `display: none;` or `visibility: hidden;` as that also hides the popover.
// This way, we ensure a DOM element is visible to position the popover from.
//
// See https://github.com/twbs/bootstrap/pull/12794 for more.
[data-toggle="buttons"] > .btn > input[type="radio"], [data-toggle="buttons"] > .btn > input[type="radio"],
[data-toggle="buttons"] > .btn > input[type="checkbox"] { [data-toggle="buttons"] > .btn > input[type="checkbox"] {
display: none; position: absolute;
z-index: -1;
opacity: 0;
} }
...@@ -17,7 +17,6 @@ code { ...@@ -17,7 +17,6 @@ code {
font-size: 90%; font-size: 90%;
color: @code-color; color: @code-color;
background-color: @code-bg; background-color: @code-bg;
white-space: nowrap;
border-radius: @border-radius-base; border-radius: @border-radius-base;
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
// Heads up! // Heads up!
// //
// We don't use the `.opacity()` mixin here since it causes a bug with text // We don't use the `.opacity()` mixin here since it causes a bug with text
// fields in IE7-8. Source: https://github.com/twitter/bootstrap/pull/3552. // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
.fade { .fade {
opacity: 0; opacity: 0;
...@@ -17,10 +17,12 @@ ...@@ -17,10 +17,12 @@
.collapse { .collapse {
display: none; display: none;
&.in {
display: block; &.in { display: block; }
} tr&.in { display: table-row; }
tbody&.in { display: table-row-group; }
} }
.collapsing { .collapsing {
position: relative; position: relative;
height: 0; height: 0;
......
...@@ -51,7 +51,7 @@ input[type="search"] { ...@@ -51,7 +51,7 @@ input[type="search"] {
input[type="radio"], input[type="radio"],
input[type="checkbox"] { input[type="checkbox"] {
margin: 4px 0 0; margin: 4px 0 0;
margin-top: 1px \9; /* IE8-9 */ margin-top: 1px \9; // IE8-9
line-height: normal; line-height: normal;
} }
...@@ -167,10 +167,20 @@ input[type="search"] { ...@@ -167,10 +167,20 @@ input[type="search"] {
// Special styles for iOS date input // Special styles for iOS date input
// //
// In Mobile Safari, date inputs require a pixel line-height that matches the // In Mobile Safari, date inputs require a pixel line-height that matches the
// given height of the input. // given height of the input. Since this fucks up everything else, we have to
// appropriately reset it for Internet Explorer and the size variations.
input[type="date"] { input[type="date"] {
line-height: @input-height-base; line-height: @input-height-base;
// IE8+ misaligns the text within date inputs, so we reset
line-height: @line-height-base ~"\0";
&.input-sm {
line-height: @input-height-small;
}
&.input-lg {
line-height: @input-height-large;
}
} }
...@@ -271,18 +281,27 @@ input[type="checkbox"], ...@@ -271,18 +281,27 @@ input[type="checkbox"],
.form-control { .form-control {
padding-right: (@input-height-base * 1.25); padding-right: (@input-height-base * 1.25);
} }
}
// Feedback icon (requires .glyphicon classes) // Feedback icon (requires .glyphicon classes)
.form-control-feedback { .form-control-feedback {
position: absolute; position: absolute;
top: (@line-height-computed + 5); // Height of the `label` and its margin top: (@line-height-computed + 5); // Height of the `label` and its margin
right: 0; right: 0;
display: block; display: block;
width: @input-height-base; width: @input-height-base;
height: @input-height-base; height: @input-height-base;
line-height: @input-height-base; line-height: @input-height-base;
text-align: center; text-align: center;
} }
.input-lg + .form-control-feedback {
width: @input-height-large;
height: @input-height-large;
line-height: @input-height-large;
}
.input-sm + .form-control-feedback {
width: @input-height-small;
height: @input-height-small;
line-height: @input-height-small;
} }
// Feedback states // Feedback states
...@@ -349,6 +368,18 @@ input[type="checkbox"], ...@@ -349,6 +368,18 @@ input[type="checkbox"],
width: auto; // Prevent labels from stacking above inputs in `.form-group` width: auto; // Prevent labels from stacking above inputs in `.form-group`
vertical-align: middle; vertical-align: middle;
} }
.input-group {
display: inline-table;
vertical-align: middle;
.input-group-addon,
.input-group-btn,
.form-control {
width: auto;
}
}
// Input groups need that 100% width though // Input groups need that 100% width though
.input-group > .form-control { .input-group > .form-control {
width: 100%; width: 100%;
...@@ -394,8 +425,9 @@ input[type="checkbox"], ...@@ -394,8 +425,9 @@ input[type="checkbox"],
.form-horizontal { .form-horizontal {
// Consistent vertical alignment of labels, radios, and checkboxes // Consistent vertical alignment of radios and checkboxes
.control-label, //
// Labels also get some reset styles, but that is scoped to a media query below.
.radio, .radio,
.checkbox, .checkbox,
.radio-inline, .radio-inline,
...@@ -418,12 +450,16 @@ input[type="checkbox"], ...@@ -418,12 +450,16 @@ input[type="checkbox"],
.form-control-static { .form-control-static {
padding-top: (@padding-base-vertical + 1); padding-top: (@padding-base-vertical + 1);
padding-bottom: (@padding-base-vertical + 1);
} }
// Only right align form labels here when the columns stop stacking // Reset spacing and right align labels, but scope to media queries so that
// labels on narrow viewports stack the same as a default form example.
@media (min-width: @screen-sm-min) { @media (min-width: @screen-sm-min) {
.control-label { .control-label {
text-align: right; text-align: right;
margin-bottom: 0;
padding-top: (@padding-base-vertical + 1); // Default padding plus a border
} }
} }
......
...@@ -19,6 +19,10 @@ ...@@ -19,6 +19,10 @@
font-weight: 200; font-weight: 200;
} }
> hr {
border-top-color: darken(@jumbotron-bg, 10%);
}
.container & { .container & {
border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
} }
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
border-radius: .25em; border-radius: .25em;
// Add hover effects, but only for links // Add hover effects, but only for links
&[href] { a& {
&:hover, &:hover,
&:focus { &:focus {
color: @label-link-hover-color; color: @label-link-hover-color;
......
...@@ -62,8 +62,27 @@ a.list-group-item { ...@@ -62,8 +62,27 @@ a.list-group-item {
&:hover, &:hover,
&:focus { &:focus {
text-decoration: none; text-decoration: none;
color: @list-group-link-hover-color;
background-color: @list-group-hover-bg; background-color: @list-group-hover-bg;
} }
}
.list-group-item {
// Disabled state
&.disabled,
&.disabled:hover,
&.disabled:focus {
background-color: @list-group-disabled-bg;
color: @list-group-disabled-color;
// Force color to inherit for custom content
.list-group-item-heading {
color: inherit;
}
.list-group-item-text {
color: @list-group-disabled-text-color;
}
}
// Active class on item itself, not parent // Active class on item itself, not parent
&.active, &.active,
......
This diff is collapsed.
...@@ -98,7 +98,7 @@ ...@@ -98,7 +98,7 @@
// Footer (for actions) // Footer (for actions)
.modal-footer { .modal-footer {
padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding; padding: @modal-inner-padding;
text-align: right; // right align buttons text-align: right; // right align buttons
border-top: 1px solid @modal-footer-border-color; border-top: 1px solid @modal-footer-border-color;
&:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons &:extend(.clearfix all); // clear it in case folks use .pull-* classes on buttons
......
...@@ -48,7 +48,6 @@ ...@@ -48,7 +48,6 @@
// content for the user's viewport. // content for the user's viewport.
.navbar-collapse { .navbar-collapse {
max-height: @navbar-collapse-max-height;
overflow-x: visible; overflow-x: visible;
padding-right: @navbar-padding-horizontal; padding-right: @navbar-padding-horizontal;
padding-left: @navbar-padding-horizontal; padding-left: @navbar-padding-horizontal;
...@@ -88,6 +87,17 @@ ...@@ -88,6 +87,17 @@
} }
} }
.navbar-fixed-top,
.navbar-fixed-bottom {
.navbar-collapse {
max-height: @navbar-collapse-max-height;
@media (max-width: @screen-phone) and (orientation: landscape) {
max-height: 200px;
}
}
}
// Both navbar header and collapse // Both navbar header and collapse
// //
...@@ -492,6 +502,20 @@ ...@@ -492,6 +502,20 @@
} }
} }
.btn-link {
color: @navbar-default-link-color;
&:hover,
&:focus {
color: @navbar-default-link-hover-color;
}
&[disabled],
fieldset[disabled] & {
&:hover,
&:focus {
color: @navbar-default-link-disabled-color;
}
}
}
} }
// Inverse navbar // Inverse navbar
...@@ -613,4 +637,18 @@ ...@@ -613,4 +637,18 @@
} }
} }
.btn-link {
color: @navbar-inverse-link-color;
&:hover,
&:focus {
color: @navbar-inverse-link-hover-color;
}
&[disabled],
fieldset[disabled] & {
&:hover,
&:focus {
color: @navbar-inverse-link-disabled-color;
}
}
}
} }
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
// Optional heading // Optional heading
.panel-heading { .panel-heading {
padding: 10px 15px; padding: @panel-heading-padding;
border-bottom: 1px solid transparent; border-bottom: 1px solid transparent;
.border-top-radius((@panel-border-radius - 1)); .border-top-radius((@panel-border-radius - 1));
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
// Optional footer (stays gray in every modifier class) // Optional footer (stays gray in every modifier class)
.panel-footer { .panel-footer {
padding: 10px 15px; padding: @panel-footer-padding;
background-color: @panel-footer-bg; background-color: @panel-footer-bg;
border-top: 1px solid @panel-inner-border; border-top: 1px solid @panel-inner-border;
.border-bottom-radius((@panel-border-radius - 1)); .border-bottom-radius((@panel-border-radius - 1));
...@@ -199,7 +199,6 @@ ...@@ -199,7 +199,6 @@
.panel { .panel {
margin-bottom: 0; margin-bottom: 0;
border-radius: @panel-border-radius; border-radius: @panel-border-radius;
overflow: hidden; // crop contents when collapsed
+ .panel { + .panel {
margin-top: 5px; margin-top: 5px;
} }
......
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
line-height: 18px; line-height: 18px;
background-color: @popover-title-bg; background-color: @popover-title-bg;
border-bottom: 1px solid darken(@popover-title-bg, 5%); border-bottom: 1px solid darken(@popover-title-bg, 5%);
border-radius: 5px 5px 0 0; border-radius: (@border-radius-large - 1) (@border-radius-large - 1) 0 0;
} }
.popover-content { .popover-content {
......
...@@ -6,13 +6,6 @@ ...@@ -6,13 +6,6 @@
// Bar animations // Bar animations
// ------------------------- // -------------------------
// WebKit
@-webkit-keyframes progress-bar-stripes {
from { background-position: 40px 0; }
to { background-position: 0 0; }
}
// Spec and IE10+
@keyframes progress-bar-stripes { @keyframes progress-bar-stripes {
from { background-position: 40px 0; } from { background-position: 40px 0; }
to { background-position: 0 0; } to { background-position: 0 0; }
...@@ -58,6 +51,22 @@ ...@@ -58,6 +51,22 @@
.animation(progress-bar-stripes 2s linear infinite); .animation(progress-bar-stripes 2s linear infinite);
} }
// Account for lower percentages
.progress-bar {
&[aria-valuenow="1"],
&[aria-valuenow="2"] {
min-width: 30px;
}
&[aria-valuenow="0"] {
color: @gray-light;
min-width: 30px;
background-color: transparent;
background-image: none;
box-shadow: none;
}
}
// Variations // Variations
......
// Embeds responsive
//
// Credit: Nicolas Gallagher and SUIT CSS.
.embed-responsive {
position: relative;
display: block;
height: 0;
padding: 0;
overflow: hidden;
.embed-responsive-item,
iframe,
embed,
object {
position: absolute;
top: 0;
left: 0;
bottom: 0;
height: 100%;
width: 100%;
border: 0;
}
// Modifier class for 16:9 aspect ratio
&.embed-responsive-16by9 {
padding-bottom: 56.25%;
}
// Modifier class for 4:3 aspect ratio
&.embed-responsive-4by3 {
padding-bottom: 75%;
}
}
...@@ -132,3 +132,19 @@ hr { ...@@ -132,3 +132,19 @@ hr {
clip: rect(0,0,0,0); clip: rect(0,0,0,0);
border: 0; border: 0;
} }
// Use in conjunction with .sr-only to only display content when it's focused.
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
// Credit: HTML5 Boilerplate
.sr-only-focusable {
&:active,
&:focus {
position: static;
width: auto;
height: auto;
margin: 0;
overflow: visible;
clip: auto;
}
}
...@@ -169,7 +169,7 @@ table { ...@@ -169,7 +169,7 @@ table {
// will display normally. // will display normally.
.table-responsive { .table-responsive {
@media (max-width: @screen-xs-max) { @media screen and (max-width: @screen-xs-max) {
width: 100%; width: 100%;
margin-bottom: (@line-height-computed * 0.75); margin-bottom: (@line-height-computed * 0.75);
overflow-y: hidden; overflow-y: hidden;
......
...@@ -81,6 +81,12 @@ small, ...@@ -81,6 +81,12 @@ small,
// Undo browser default styling // Undo browser default styling
cite { font-style: normal; } cite { font-style: normal; }
mark,
.mark {
background-color: @state-warning-bg;
padding: .2em;
}
// Alignment // Alignment
.text-left { text-align: left; } .text-left { text-align: left; }
.text-right { text-align: right; } .text-right { text-align: right; }
...@@ -141,7 +147,7 @@ cite { font-style: normal; } ...@@ -141,7 +147,7 @@ cite { font-style: normal; }
// Lists // Lists
// -------------------------------------------------- // -------------------------
// Unordered and Ordered lists // Unordered and Ordered lists
ul, ul,
...@@ -195,8 +201,12 @@ dd { ...@@ -195,8 +201,12 @@ dd {
// Defaults to being stacked without any of the below styles applied, until the // Defaults to being stacked without any of the below styles applied, until the
// grid breakpoint is reached (default of ~768px). // grid breakpoint is reached (default of ~768px).
@media (min-width: @grid-float-breakpoint) { .dl-horizontal {
.dl-horizontal { dd {
&:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present
}
@media (min-width: @grid-float-breakpoint) {
dt { dt {
float: left; float: left;
width: (@component-offset-horizontal - 20); width: (@component-offset-horizontal - 20);
...@@ -206,13 +216,13 @@ dd { ...@@ -206,13 +216,13 @@ dd {
} }
dd { dd {
margin-left: @component-offset-horizontal; margin-left: @component-offset-horizontal;
&:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present
} }
} }
} }
// MISC
// ---- // Misc
// -------------------------
// Abbreviations and acronyms // Abbreviations and acronyms
abbr[title], abbr[title],
......
...@@ -68,14 +68,18 @@ ...@@ -68,14 +68,18 @@
@headings-color: inherit; @headings-color: inherit;
//-- Iconography //== Iconography
// //
//## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower. //## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
//** Load fonts from this directory.
@icon-font-path: "../fonts/"; @icon-font-path: "../fonts/";
//** File name for all font files.
@icon-font-name: "glyphicons-halflings-regular"; @icon-font-name: "glyphicons-halflings-regular";
//** Element ID within SVG icon file.
@icon-font-svg-id: "glyphicons_halflingsregular"; @icon-font-svg-id: "glyphicons_halflingsregular";
//== Components //== Components
// //
//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start). //## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
...@@ -558,7 +562,7 @@ ...@@ -558,7 +562,7 @@
//## //##
//** Padding applied to the modal body //** Padding applied to the modal body
@modal-inner-padding: 20px; @modal-inner-padding: 15px;
//** Padding applied to the modal title //** Padding applied to the modal title
@modal-title-padding: 15px; @modal-title-padding: 15px;
...@@ -643,17 +647,26 @@ ...@@ -643,17 +647,26 @@
//** List group border radius //** List group border radius
@list-group-border-radius: @border-radius-base; @list-group-border-radius: @border-radius-base;
//** Background color of single list elements on hover //** Background color of single list items on hover
@list-group-hover-bg: #f5f5f5; @list-group-hover-bg: #f5f5f5;
//** Text color of active list elements //** Text color of active list items
@list-group-active-color: @component-active-color; @list-group-active-color: @component-active-color;
//** Background color of active list elements //** Background color of active list items
@list-group-active-bg: @component-active-bg; @list-group-active-bg: @component-active-bg;
//** Border color of active list elements //** Border color of active list elements
@list-group-active-border: @list-group-active-bg; @list-group-active-border: @list-group-active-bg;
//** Text color for content within active list items
@list-group-active-text-color: lighten(@list-group-active-bg, 40%); @list-group-active-text-color: lighten(@list-group-active-bg, 40%);
//** Text color of disabled list items
@list-group-disabled-color: @gray-light;
//** Background color of disabled list items
@list-group-disabled-bg: @gray-lighter;
//** Text color for content within disabled list items
@list-group-disabled-text-color: @list-group-disabled-color;
@list-group-link-color: #555; @list-group-link-color: #555;
@list-group-link-hover-color: @list-group-link-color;
@list-group-link-heading-color: #333; @list-group-link-heading-color: #333;
...@@ -663,6 +676,8 @@ ...@@ -663,6 +676,8 @@
@panel-bg: #fff; @panel-bg: #fff;
@panel-body-padding: 15px; @panel-body-padding: 15px;
@panel-heading-padding: 10px 15px;
@panel-footer-padding: @panel-heading-padding;
@panel-border-radius: @border-radius-base; @panel-border-radius: @border-radius-base;
//** Border color for elements within panels //** Border color for elements within panels
......
{ {
"name": "bootstrap", "name": "bootstrap",
"description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development.", "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.",
"version": "3.1.1", "version": "3.1.1",
"keywords": [ "keywords": [
"bootstrap", "css",
"css" "less",
"mobile-first",
"responsive",
"front-end",
"framework",
"web"
], ],
"homepage": "http://getbootstrap.com", "homepage": "http://getbootstrap.com",
"author": "Twitter, Inc.", "author": "Twitter, Inc.",
"scripts": { "scripts": {
"test": "grunt test" "test": "grunt test"
}, },
"style": "./dist/css/bootstrap.css", "style": "dist/css/bootstrap.css",
"less": "./less/bootstrap.less", "less": "less/bootstrap.less",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/twbs/bootstrap.git" "url": "https://github.com/twbs/bootstrap.git"
...@@ -26,30 +31,37 @@ ...@@ -26,30 +31,37 @@
}, },
"devDependencies": { "devDependencies": {
"btoa": "~1.1.1", "btoa": "~1.1.1",
"canonical-json": "~0.0.3", "canonical-json": "~0.0.4",
"css-flip": "~0.3.0",
"grunt": "~0.4.2", "grunt": "~0.4.2",
"grunt-banner": "~0.2.0", "grunt-autoprefixer": "~0.7.2",
"grunt-banner": "~0.2.1",
"grunt-contrib-clean": "~0.5.0", "grunt-contrib-clean": "~0.5.0",
"grunt-contrib-concat": "~0.3.0", "grunt-contrib-concat": "~0.3.0",
"grunt-contrib-connect": "~0.6.0", "grunt-contrib-connect": "~0.7.1",
"grunt-contrib-copy": "~0.5.0", "grunt-contrib-copy": "~0.5.0",
"grunt-contrib-csslint": "~0.2.0", "grunt-contrib-csslint": "~0.2.0",
"grunt-contrib-cssmin": "~0.8.0", "grunt-contrib-cssmin": "~0.9.0",
"grunt-contrib-jade": "~0.10.0", "grunt-contrib-jade": "~0.11.0",
"grunt-contrib-jshint": "~0.8.0", "grunt-contrib-jshint": "~0.8.0",
"grunt-contrib-less": "~0.9.0", "grunt-contrib-less": "~0.10.0",
"grunt-contrib-qunit": "~0.4.0", "grunt-contrib-qunit": "~0.4.0",
"grunt-contrib-uglify": "~0.3.0", "grunt-contrib-uglify": "~0.4.0",
"grunt-contrib-watch": "~0.5.3", "grunt-contrib-watch": "~0.5.3",
"grunt-csscomb": "~2.0.1", "grunt-csscomb": "~2.0.1",
"grunt-css-flip": "^0.1.0",
"grunt-exec": "~0.4.5", "grunt-exec": "~0.4.5",
"grunt-html-validation": "~0.1.13", "grunt-html-validation": "~0.1.13",
"grunt-jekyll": "~0.4.1", "grunt-jekyll": "~0.4.1",
"grunt-jscs-checker": "~0.3.0", "grunt-jscs-checker": "~0.4.0",
"grunt-saucelabs": "~5.0.0", "grunt-saucelabs": "~5.0.1",
"grunt-sed": "~0.1.1", "grunt-sed": "~0.1.1",
"load-grunt-tasks": "~0.3.0", "load-grunt-tasks": "~0.4.0",
"markdown": "~0.5.0" "markdown": "~0.5.0",
"time-grunt": "~0.2.10"
},
"engines": {
"node": "~0.10.1"
}, },
"jspm": { "jspm": {
"main": "js/bootstrap", "main": "js/bootstrap",
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment