diff --git a/Gruntfile.js b/Gruntfile.js
index dff1fadb9..fc2700cff 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -218,24 +218,25 @@ module.exports = function (grunt) {
}
},
- csslint: {
+ stylelint: {
options: {
- csslintrc: 'less/.csslintrc'
+ configFile: 'grunt/.stylelintrc',
+ formatter: 'string',
+ ignoreDisables: false,
+ failOnError: true,
+ outputFile: '',
+ reportNeedlessDisables: false,
+ syntax: ''
},
dist: [
- 'dist/css/bootstrap.css',
- 'dist/css/bootstrap-theme.css'
+ 'less/**/*.less'
+ ],
+ docs: [
+ 'docs/assets/less/**/*.less'
],
examples: [
'docs/examples/**/*.css'
- ],
- docs: {
- options: {
- ids: false,
- 'overqualified-elements': false
- },
- src: 'docs/assets/css/src/docs.css'
- }
+ ]
},
cssmin: {
@@ -262,28 +263,6 @@ module.exports = function (grunt) {
}
},
- csscomb: {
- options: {
- config: 'less/.csscomb.json'
- },
- dist: {
- expand: true,
- cwd: 'dist/css/',
- src: ['*.css', '!*.min.css'],
- dest: 'dist/css/'
- },
- examples: {
- expand: true,
- cwd: 'docs/examples/',
- src: '**/*.css',
- dest: 'docs/examples/'
- },
- docs: {
- src: 'docs/assets/css/src/docs.css',
- dest: 'docs/assets/css/src/docs.css'
- }
- },
-
copy: {
fonts: {
expand: true,
@@ -464,7 +443,7 @@ module.exports = function (grunt) {
if (runSubset('core') &&
// Skip core tests if this is a Savage build
process.env.TRAVIS_REPO_SLUG !== 'twbs-savage/bootstrap') {
- testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'csslint:dist', 'test-js', 'docs']);
+ testSubtasks = testSubtasks.concat(['dist-css', 'dist-js', 'stylelint:dist', 'test-js', 'docs']);
}
// Skip HTML validation if running a different subset of the test suite
if (runSubset('validate-html') &&
@@ -489,7 +468,7 @@ module.exports = function (grunt) {
// CSS distribution task.
grunt.registerTask('less-compile', ['less:compileCore', 'less:compileTheme', 'less:compileDocs']);
- grunt.registerTask('dist-css', ['less-compile', 'autoprefixer:core', 'autoprefixer:theme', 'csscomb:dist', 'cssmin:minifyCore', 'cssmin:minifyTheme']);
+ grunt.registerTask('dist-css', ['less-compile', 'autoprefixer:core', 'autoprefixer:theme', 'cssmin:minifyCore', 'cssmin:minifyTheme']);
// Full distribution task.
grunt.registerTask('dist', ['clean:dist', 'dist-css', 'copy:fonts', 'dist-js']);
@@ -514,8 +493,8 @@ module.exports = function (grunt) {
});
// Docs task.
- grunt.registerTask('docs-css', ['autoprefixer:docs', 'autoprefixer:examples', 'csscomb:docs', 'csscomb:examples', 'cssmin:minifyDocs']);
- grunt.registerTask('lint-docs-css', ['csslint:docs', 'csslint:examples']);
+ grunt.registerTask('docs-css', ['autoprefixer:docs', 'autoprefixer:examples', 'cssmin:minifyDocs']);
+ grunt.registerTask('lint-docs-css', ['stylelint:docs', 'stylelint:examples']);
grunt.registerTask('docs-js', ['uglify:docsJs', 'uglify:customize']);
grunt.registerTask('lint-docs-js', ['jshint:assets', 'jscs:assets']);
grunt.registerTask('docs', ['docs-css', 'lint-docs-css', 'docs-js', 'lint-docs-js', 'clean:docs', 'copy:docs', 'build-glyphicons-data', 'build-customizer']);
diff --git a/_config.yml b/_config.yml
index 67439a76b..d74da67fc 100644
--- a/_config.yml
+++ b/_config.yml
@@ -10,7 +10,6 @@ source: docs
destination: _gh_pages
host: 0.0.0.0
port: 9001
-baseurl: ""
url: http://getbootstrap.com
baseurl: /docs/3.4
encoding: UTF-8
diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html
index 3b4a026de..6acc4a9f1 100644
--- a/docs/_includes/footer.html
+++ b/docs/_includes/footer.html
@@ -6,8 +6,8 @@
Designed and built with all the love in the world by @mdo and @fat. Maintained by the core team with the help of our contributors.
diff --git a/docs/_includes/js/buttons.html b/docs/_includes/js/buttons.html
index 2249bbd70..e6ddba2db 100644
--- a/docs/_includes/js/buttons.html
+++ b/docs/_includes/js/buttons.html
@@ -16,12 +16,12 @@
For the sake of this demonstration, we are using data-loading-text and $().button('loading'), but that's not the only state you can use. See more on this below in the $().button(string) documentation.
-
{% highlight html %}
-
+
Loading state
@@ -41,12 +41,12 @@
For pre-toggled buttons, you must add the .active class and the aria-pressed="true" attribute to the button yourself.
-
+
Single toggle
{% highlight html %}
-
+
Single toggle
{% endhighlight %}
@@ -64,26 +64,26 @@
{% highlight html %}
{% endhighlight %}
@@ -91,26 +91,26 @@
{% highlight html %}
{% endhighlight %}
@@ -126,7 +126,7 @@
Swaps text to any data defined text state.
{% highlight html %}
-
+
...
diff --git a/docs/assets/less/ads.less b/docs/assets/less/ads.less
index 168a01fc6..9e64da520 100644
--- a/docs/assets/less/ads.less
+++ b/docs/assets/less/ads.less
@@ -1,3 +1,5 @@
+/* stylelint-disable selector-max-id, declaration-no-important */
+
#carbonads {
display: block;
padding: 15px 15px 15px 160px;
diff --git a/docs/assets/less/algolia.less b/docs/assets/less/algolia.less
index b6484f04f..7cab59339 100644
--- a/docs/assets/less/algolia.less
+++ b/docs/assets/less/algolia.less
@@ -1,3 +1,5 @@
+/* stylelint-disable declaration-no-important, selector-attribute-quotes */
+
// Docsearch overrides
//
// `!important` indicates overridden properties.
@@ -12,8 +14,9 @@
padding: 10px 0 !important;
background-color: #fff;
background-clip: padding-box;
- border: 1px solid rgba(0,0,0,.1);
- box-shadow: 0 8px 15px rgba(0,0,0,.175);
+ border: 1px solid #ddd;
+ border: 1px solid rgba(0, 0, 0, .1);
+ box-shadow: 0 8px 15px rgba(0, 0, 0, .175);
@media min-width(@screen-sm-min) {
width: 175%;
@@ -79,7 +82,7 @@
.algolia-docsearch-suggestion--category-header {
padding-top: 10px !important;
margin-top: 10px !important;
- border-top: 1px solid rgba(0,0,0,.1);
+ border-top: 1px solid #eee;
}
}
@@ -100,7 +103,7 @@
padding: 0 15px 8px !important;
margin-top: -4px;
font-size: 13px !important;
- font-weight: normal;
+ font-weight: 400;
line-height: 1.25 !important;
}
@@ -112,7 +115,7 @@
font-size: 10px !important;
line-height: 1 !important;
color: #767676 !important;
- border-top: 1px solid rgba(0,0,0,.1);
+ border-top: 1px solid #eee;
}
.algolia-docsearch-footer--logo {
@@ -125,14 +128,14 @@
.algolia-docsearch-suggestion--highlight {
color: #5f2dab;
- background-color: rgba(154, 132, 187, .12);
+ background-color: #eee;
}
.algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight {
- box-shadow: inset 0 -2px 0 0 rgba(95,45,171,.5) !important;
+ box-shadow: inset 0 -2px 0 0 rgba(95, 45, 171, .5) !important;
}
.ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content {
- background-color: rgba(208,189,236,.15) !important;
+ background-color: #e5e5e5 !important;
}
}
diff --git a/docs/assets/less/anchor.less b/docs/assets/less/anchor.less
index b7718a837..3054ec8c0 100644
--- a/docs/assets/less/anchor.less
+++ b/docs/assets/less/anchor.less
@@ -1,3 +1,5 @@
+/* stylelint-disable property-no-vendor-prefix */
+
.anchorjs-link {
color: inherit;
}
@@ -11,8 +13,8 @@
*:hover > .anchorjs-link {
opacity: .75;
-webkit-transition: color .16s linear;
- -o-transition: color .16s linear;
- transition: color .16s linear;
+ -o-transition: color .16s linear;
+ transition: color .16s linear;
}
*:hover > .anchorjs-link:hover,
diff --git a/docs/assets/less/customizer.less b/docs/assets/less/customizer.less
index c36fbc15f..a87fca971 100644
--- a/docs/assets/less/customizer.less
+++ b/docs/assets/less/customizer.less
@@ -1,3 +1,5 @@
+/* stylelint-disable property-no-vendor-prefix, selector-max-id */
+
.bs-customizer .toggle {
float: right;
margin-top: 25px;
@@ -36,7 +38,7 @@
// For the variables, use regular weight
#less-section label {
- font-weight: normal;
+ font-weight: 400;
}
// Downloads
@@ -55,8 +57,8 @@
color: #fff;
background-color: #d9534f;
border-bottom: 1px solid #b94441;
- -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.25);
- box-shadow: inset 0 1px 0 rgba(255,255,255,.25);
+ -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25);
}
.bs-customizer-alert .close {
margin-top: -4px;
@@ -73,8 +75,8 @@
color: #fff;
background-color: #a83c3a;
border-color: #973634;
- -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);
- box-shadow: inset 0 2px 4px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);
+ -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
+ box-shadow: inset 0 2px 4px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
}
.bs-dropzone {
@@ -97,7 +99,7 @@
}
.bs-dropzone .lead {
margin-bottom: 10px;
- font-weight: normal;
+ font-weight: 400;
color: #333;
}
#import-manual-trigger {
diff --git a/docs/assets/less/docs.less b/docs/assets/less/docs.less
index 8bf588ade..3b5968290 100644
--- a/docs/assets/less/docs.less
+++ b/docs/assets/less/docs.less
@@ -37,89 +37,4 @@
@import "zero-clipboard.less";
@import "anchor.less";
@import "algolia.less";
-
-
-//
-// Misc
-//
-
-// For scrollspy
-body {
- position: relative;
-}
-
-// Keep code small in tables on account of limited space
-.table code {
- font-size: 13px;
- font-weight: normal;
-}
-
-// Inline code within headings retain the heading's background-color
-h2 code,
-h3 code,
-h4 code {
- background-color: inherit;
-}
-
-// Space docs sections out
-.bs-docs-section {
- margin-bottom: 60px;
-}
-.bs-docs-section:last-child {
- margin-bottom: 0;
-}
-
-h1[id] {
- padding-top: 20px;
- margin-top: 0;
-}
-
-// Wall of Browser Bugs
-.bs-docs-browser-bugs td p {
- margin-bottom: 0;
-}
-
-.bs-docs-browser-bugs th:first-child {
- width: 18%;
-}
-
-// Don't wrap event names in Events tables in JS plugin docs
-.bs-events-table > thead > tr > th:first-child,
-.bs-events-table > tbody > tr > td:first-child {
- white-space: nowrap;
-}
-
-.bs-events-table > thead > tr > th:first-child {
- width: 150px;
-}
-
-.js-options-table > thead > tr > th:nth-child(1),
-.js-options-table > thead > tr > th:nth-child(2) {
- width: 100px;
-}
-
-.js-options-table > thead > tr > th:nth-child(3) {
- width: 50px;
-}
-
-// v4 notice above main navbar
-.v4-tease {
- display: block;
- padding: 15px 20px;
- font-weight: bold;
- color: #fff;
- text-align: center;
- background-color: #0275d8;
-}
-.v4-tease:hover {
- color: #fff;
- text-decoration: none;
- background-color: #0269c2;
-}
-
-/* Nullify ill-advised printing of hrefs; see #18711 */
-@media print {
- a[href]:after {
- content: "" !important;
- }
-}
+@import "misc.less";
diff --git a/docs/assets/less/examples.less b/docs/assets/less/examples.less
index 6407cc97b..8d92ac52d 100644
--- a/docs/assets/less/examples.less
+++ b/docs/assets/less/examples.less
@@ -1,3 +1,5 @@
+/* stylelint-disable property-no-vendor-prefix, selector-max-id, selector-no-qualifying-type */
+
// Grid examples
//
// Highlight the grid columns within the docs so folks can see their padding,
@@ -10,9 +12,9 @@
padding-top: 10px;
padding-bottom: 10px;
background-color: #eee;
- background-color: rgba(86,61,124,.15);
+ background-color: rgba(86, 61, 124, .15);
border: 1px solid #ddd;
- border: 1px solid rgba(86,61,124,.2);
+ border: 1px solid rgba(86, 61, 124, .2);
}
// Examples
@@ -27,16 +29,16 @@
border-color: #e5e5e5 #eee #eee;
border-style: solid;
border-width: 1px 0;
- -webkit-box-shadow: inset 0 3px 6px rgba(0,0,0,.05);
- box-shadow: inset 0 3px 6px rgba(0,0,0,.05);
+ -webkit-box-shadow: inset 0 3px 6px rgba(0, 0, 0, .05);
+ box-shadow: inset 0 3px 6px rgba(0, 0, 0, .05);
}
// Echo out a label for the example
-.bs-example:after {
+.bs-example::after {
position: absolute;
top: 15px;
left: 15px;
font-size: 12px;
- font-weight: bold;
+ font-weight: 700;
color: #959595;
text-transform: uppercase;
letter-spacing: 1px;
@@ -65,7 +67,7 @@
border-width: 1px;
border-radius: 4px 4px 0 0;
-webkit-box-shadow: none;
- box-shadow: none;
+ box-shadow: none;
}
.bs-example + .highlight,
.bs-example + .zero-clipboard + .highlight {
@@ -156,9 +158,11 @@
}
// Forms
-.bs-example-control-sizing select,
-.bs-example-control-sizing input[type="text"] + input[type="text"] {
- margin-top: 10px;
+.bs-example-control-sizing {
+ select,
+ input[type="text"] + input[type="text"] {
+ margin-top: 10px;
+ }
}
.bs-example-form .input-group {
margin-bottom: 10px;
@@ -195,7 +199,7 @@
.bs-navbar-top-example {
padding-bottom: 45px;
}
-.bs-navbar-top-example:after {
+.bs-navbar-top-example::after {
top: auto;
bottom: 15px;
}
@@ -311,10 +315,10 @@
// Pseudo :focus state for showing how it looks in the docs
#focusedInput {
- border-color: rgb(204,204,204); // Restate unfocused value to make CSSLint happy that there's a pre-CSS3 fallback
- border-color: rgba(82,168,236,.8);
+ border-color: rgb(204, 204, 204); // Restate unfocused value to make CSSLint happy that there's a pre-CSS3 fallback
+ border-color: rgba(82, 168, 236, .8);
outline: 0;
outline: thin dotted \9; // IE6-9
- -webkit-box-shadow: 0 0 8px rgba(82,168,236,.6);
- box-shadow: 0 0 8px rgba(82,168,236,.6);
+ -webkit-box-shadow: 0 0 8px rgba(82, 168, 236, .6);
+ box-shadow: 0 0 8px rgba(82, 168, 236, .6);
}
diff --git a/docs/assets/less/featurettes.less b/docs/assets/less/featurettes.less
index 7df3e94d5..ec939c7b0 100644
--- a/docs/assets/less/featurettes.less
+++ b/docs/assets/less/featurettes.less
@@ -16,7 +16,7 @@
.bs-docs-featurette-title {
margin-bottom: 5px;
font-size: 30px;
- font-weight: normal;
+ font-weight: 400;
color: #333;
}
.half-rule {
@@ -25,7 +25,7 @@
}
.bs-docs-featurette h3 {
margin-bottom: 5px;
- font-weight: normal;
+ font-weight: 400;
color: #333;
}
.bs-docs-featurette-img {
diff --git a/docs/assets/less/ie10-viewport-bug-workaround.less b/docs/assets/less/ie10-viewport-bug-workaround.less
index 6ac824f93..a09b8d9ff 100644
--- a/docs/assets/less/ie10-viewport-bug-workaround.less
+++ b/docs/assets/less/ie10-viewport-bug-workaround.less
@@ -1,3 +1,5 @@
+/* stylelint-disable at-rule-no-vendor-prefix */
+
/*!
* IE10 viewport hack for Surface/desktop Windows 8 bug
* Copyright 2014-2015 Twitter, Inc.
diff --git a/docs/assets/less/masthead.less b/docs/assets/less/masthead.less
index 20c9a2671..284fdece7 100644
--- a/docs/assets/less/masthead.less
+++ b/docs/assets/less/masthead.less
@@ -1,17 +1,19 @@
+/* stylelint-disable value-no-vendor-prefix, function-name-case */
+
.bs-docs-masthead,
.bs-docs-header {
position: relative;
padding: 30px 0;
color: #cdbfe3;
text-align: center;
- text-shadow: 0 1px 0 rgba(0,0,0,.1);
+ text-shadow: 0 1px 0 rgba(0, 0, 0, .1);
background-color: #6f5499;
background-image: -webkit-gradient(linear, left top, left bottom, from(#563d7c), to(#6f5499));
background-image: -webkit-linear-gradient(top, #563d7c 0%, #6f5499 100%);
- background-image: -o-linear-gradient(top, #563d7c 0%, #6f5499 100%);
- background-image: linear-gradient(to bottom, #563d7c 0%, #6f5499 100%);
- filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#563d7c', endColorstr='#6F5499', GradientType=0);
+ background-image: -o-linear-gradient(top, #563d7c 0%, #6f5499 100%);
+ background-image: linear-gradient(to bottom, #563d7c 0%, #6f5499 100%);
background-repeat: repeat-x;
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#563d7c", endColorstr="#6F5499", GradientType=0);
}
// Masthead (headings and download button)
diff --git a/docs/assets/less/misc.less b/docs/assets/less/misc.less
new file mode 100644
index 000000000..bb2090310
--- /dev/null
+++ b/docs/assets/less/misc.less
@@ -0,0 +1,86 @@
+/* stylelint-disable selector-max-type, selector-no-qualifying-type, declaration-no-important */
+
+//
+// Misc
+//
+
+// For scrollspy
+body {
+ position: relative;
+}
+
+// Keep code small in tables on account of limited space
+.table code {
+ font-size: 13px;
+ font-weight: 400;
+}
+
+// Inline code within headings retain the heading's background-color
+h2 code,
+h3 code,
+h4 code {
+ background-color: inherit;
+}
+
+// Space docs sections out
+.bs-docs-section {
+ margin-bottom: 60px;
+}
+.bs-docs-section:last-child {
+ margin-bottom: 0;
+}
+
+h1[id] {
+ padding-top: 20px;
+ margin-top: 0;
+}
+
+// Wall of Browser Bugs
+.bs-docs-browser-bugs td p {
+ margin-bottom: 0;
+}
+
+.bs-docs-browser-bugs th:first-child {
+ width: 18%;
+}
+
+// Don't wrap event names in Events tables in JS plugin docs
+.bs-events-table > thead > tr > th:first-child,
+.bs-events-table > tbody > tr > td:first-child {
+ white-space: nowrap;
+}
+
+.bs-events-table > thead > tr > th:first-child {
+ width: 150px;
+}
+
+.js-options-table > thead > tr > th:nth-child(1),
+.js-options-table > thead > tr > th:nth-child(2) {
+ width: 100px;
+}
+
+.js-options-table > thead > tr > th:nth-child(3) {
+ width: 50px;
+}
+
+// v4 notice above main navbar
+.v4-tease {
+ display: block;
+ padding: 15px 20px;
+ font-weight: 700;
+ color: #fff;
+ text-align: center;
+ background-color: #0275d8;
+}
+.v4-tease:hover {
+ color: #fff;
+ text-decoration: none;
+ background-color: #0269c2;
+}
+
+/* Nullify ill-advised printing of hrefs; see #18711 */
+@media print {
+ a[href]::after {
+ content: "" !important;
+ }
+}
diff --git a/docs/assets/less/responsive-tests.less b/docs/assets/less/responsive-tests.less
index bf9d002d2..784fc6c46 100644
--- a/docs/assets/less/responsive-tests.less
+++ b/docs/assets/less/responsive-tests.less
@@ -1,3 +1,5 @@
+/* stylelint-disable selector-no-qualifying-type, declaration-no-important */
+
// Responsive (scrollable) doc tables
.table-responsive .highlight pre {
white-space: normal;
@@ -7,11 +9,11 @@
.bs-table th small,
.responsive-utilities th small {
display: block;
- font-weight: normal;
+ font-weight: 400;
color: #999;
}
.responsive-utilities tbody th {
- font-weight: normal;
+ font-weight: 400;
}
.responsive-utilities td {
text-align: center;
@@ -36,7 +38,7 @@
display: block;
padding: 15px 10px;
font-size: 14px;
- font-weight: bold;
+ font-weight: 700;
line-height: 1.1;
text-align: center;
border-radius: 4px;
diff --git a/docs/assets/less/sidebar.less b/docs/assets/less/sidebar.less
index 5e9705257..fe36cd57d 100644
--- a/docs/assets/less/sidebar.less
+++ b/docs/assets/less/sidebar.less
@@ -1,3 +1,5 @@
+/* stylelint-disable selector-max-compound-selectors */
+
// By default it's not affixed in mobile views, so undo that
.bs-docs-sidebar.affix {
position: static;
@@ -39,7 +41,7 @@
.bs-docs-sidebar .nav > .active:hover > a,
.bs-docs-sidebar .nav > .active:focus > a {
padding-left: 18px;
- font-weight: bold;
+ font-weight: 700;
color: #563d7c;
background-color: transparent;
border-left: 2px solid #563d7c;
@@ -55,7 +57,7 @@
padding-bottom: 1px;
padding-left: 30px;
font-size: 12px;
- font-weight: normal;
+ font-weight: 400;
}
.bs-docs-sidebar .nav .nav > li > a:hover,
.bs-docs-sidebar .nav .nav > li > a:focus {
diff --git a/docs/assets/less/skip-link.less b/docs/assets/less/skip-link.less
index 174a64fe0..a64f3319a 100644
--- a/docs/assets/less/skip-link.less
+++ b/docs/assets/less/skip-link.less
@@ -1,3 +1,5 @@
+/* stylelint-disable selector-max-id */
+
#skippy {
display: block;
padding: 1em;
diff --git a/docs/assets/less/syntax.less b/docs/assets/less/syntax.less
index ab8cc6034..a43045fe9 100644
--- a/docs/assets/less/syntax.less
+++ b/docs/assets/less/syntax.less
@@ -1,64 +1,65 @@
-.hll { background-color: #ffffcc }
+/* stylelint-disable declaration-block-single-line-max-declarations */
+
+.hll { background-color: #ffc; }
.c { color: #999; }
-.err { color: #AA0000; background-color: #FFAAAA }
-.k { color: #006699; }
-.o { color: #555555 }
+.err { color: #a00; background-color: #faa; }
+.k { color: #069; }
+.o { color: #555; }
.cm { color: #999; }
-.cp { color: #009999 }
+.cp { color: #099; }
.c1 { color: #999; }
.cs { color: #999; }
-.gd { background-color: #FFCCCC; border: 1px solid #CC0000 }
-.ge { font-style: italic }
-.gr { color: #FF0000 }
-.gh { color: #003300; }
-.gi { background-color: #CCFFCC; border: 1px solid #00CC00 }
-.go { color: #AAAAAA }
-.gp { color: #000099; }
-.gs { }
-.gu { color: #003300; }
-.gt { color: #99CC66 }
-.kc { color: #006699; }
-.kd { color: #006699; }
-.kn { color: #006699; }
-.kp { color: #006699 }
-.kr { color: #006699; }
-.kt { color: #007788; }
-.m { color: #FF6600 }
-.s { color: #d44950 }
-.na { color: #4f9fcf }
-.nb { color: #336666 }
-.nc { color: #00AA88; }
-.no { color: #336600 }
-.nd { color: #9999FF }
-.ni { color: #999999; }
-.ne { color: #CC0000; }
-.nf { color: #CC00FF }
-.nl { color: #9999FF }
-.nn { color: #00CCFF; }
+.gd { background-color: #fcc; border: 1px solid #c00; }
+.ge { font-style: italic; }
+.gr { color: #f00; }
+.gh { color: #030; }
+.gi { background-color: #cfc; border: 1px solid #0c0; }
+.go { color: #aaa; }
+.gp { color: #009; }
+.gu { color: #030; }
+.gt { color: #9c6; }
+.kc { color: #069; }
+.kd { color: #069; }
+.kn { color: #069; }
+.kp { color: #069; }
+.kr { color: #069; }
+.kt { color: #078; }
+.m { color: #f60; }
+.s { color: #d44950; }
+.na { color: #4f9fcf; }
+.nb { color: #366; }
+.nc { color: #0a8; }
+.no { color: #360; }
+.nd { color: #99f; }
+.ni { color: #999; }
+.ne { color: #c00; }
+.nf { color: #c0f; }
+.nl { color: #99f; }
+.nn { color: #0cf; }
.nt { color: #2f6f9f; }
-.nv { color: #003333 }
-.ow { color: #000000; }
-.w { color: #bbbbbb }
-.mf { color: #FF6600 }
-.mh { color: #FF6600 }
-.mi { color: #FF6600 }
-.mo { color: #FF6600 }
-.sb { color: #CC3300 }
-.sc { color: #CC3300 }
-.sd { color: #CC3300; font-style: italic }
-.s2 { color: #CC3300 }
-.se { color: #CC3300; }
-.sh { color: #CC3300 }
-.si { color: #AA0000 }
-.sx { color: #CC3300 }
-.sr { color: #33AAAA }
-.s1 { color: #CC3300 }
-.ss { color: #FFCC33 }
-.bp { color: #336666 }
-.vc { color: #003333 }
-.vg { color: #003333 }
-.vi { color: #003333 }
-.il { color: #FF6600 }
+.nv { color: #033; }
+.ow { color: #000; }
+.w { color: #bbb; }
+.mf { color: #f60; }
+.mh { color: #f60; }
+.mi { color: #f60; }
+.mo { color: #f60; }
+.sb { color: #c30; }
+.sc { color: #c30; }
+.sd { font-style: italic; color: #c30; }
+.s2 { color: #c30; }
+.se { color: #c30; }
+.sh { color: #c30; }
+.si { color: #a00; }
+.sx { color: #c30; }
+.sr { color: #3aa; }
+.s1 { color: #c30; }
+.ss { color: #fc3; }
+.bp { color: #366; }
+.vc { color: #033; }
+.vg { color: #033; }
+.vi { color: #033; }
+.il { color: #f60; }
.css .o,
.css .o + .nt,
diff --git a/docs/assets/less/zero-clipboard.less b/docs/assets/less/zero-clipboard.less
index 13cfb149b..688c8de77 100644
--- a/docs/assets/less/zero-clipboard.less
+++ b/docs/assets/less/zero-clipboard.less
@@ -14,7 +14,7 @@
cursor: pointer;
background-color: #fff;
border: 1px solid #e1e1e8;
- border-radius: 0 4px 0 4px;
+ border-radius: 0 4px;
}
.btn-clipboard-hover {
color: #fff;
diff --git a/docs/examples/blog/blog.css b/docs/examples/blog/blog.css
index f9106eb47..e61ebb79b 100644
--- a/docs/examples/blog/blog.css
+++ b/docs/examples/blog/blog.css
@@ -1,3 +1,5 @@
+/* stylelint-disable selector-list-comma-newline-after, property-no-vendor-prefix */
+
/*
* Globals
*/
@@ -15,7 +17,7 @@ h5, .h5,
h6, .h6 {
margin-top: 0;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
- font-weight: normal;
+ font-weight: 400;
color: #333;
}
@@ -37,8 +39,8 @@ h6, .h6 {
.blog-masthead {
background-color: #428bca;
- -webkit-box-shadow: inset 0 -2px 5px rgba(0,0,0,.1);
- 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 */
@@ -59,7 +61,7 @@ h6, .h6 {
.blog-nav .active {
color: #fff;
}
-.blog-nav .active:after {
+.blog-nav .active::after {
position: absolute;
bottom: 0;
left: 50%;
@@ -86,7 +88,7 @@ h6, .h6 {
margin-top: 30px;
margin-bottom: 0;
font-size: 60px;
- font-weight: normal;
+ font-weight: 400;
}
.blog-description {
font-size: 20px;
diff --git a/docs/examples/carousel/carousel.css b/docs/examples/carousel/carousel.css
index 8833f82dd..8c61a68fd 100644
--- a/docs/examples/carousel/carousel.css
+++ b/docs/examples/carousel/carousel.css
@@ -1,6 +1,6 @@
/* GLOBAL STYLES
--------------------------------------------------- */
-/* Padding below the footer and lighter body text */
+ * Padding below the footer and lighter body text
+* -------------------------------------------------- */
body {
padding-bottom: 40px;
@@ -42,9 +42,8 @@ body {
height: 500px;
margin-bottom: 60px;
}
-/* Since positioning the image, we need to help out the caption */
.carousel-caption {
- z-index: 10;
+ z-index: 10; /* Since positioning the image, we need to help out the caption */
}
/* Declare heights because of positioning of img element */
@@ -70,7 +69,7 @@ body {
text-align: center;
}
.marketing h2 {
- font-weight: normal;
+ font-weight: 400;
}
.marketing .col-lg-4 p {
margin-right: 10px;
@@ -108,11 +107,7 @@ body {
.navbar-wrapper .navbar {
padding-right: 0;
padding-left: 0;
- }
-
- /* The navbar becomes detached from the top, so we round the corners */
- .navbar-wrapper .navbar {
- border-radius: 4px;
+ border-radius: 4px; /* The navbar becomes detached from the top, so we round the corners */
}
/* Bump up size of carousel content */
diff --git a/docs/examples/cover/cover.css b/docs/examples/cover/cover.css
index a199657bd..79fcaed2e 100644
--- a/docs/examples/cover/cover.css
+++ b/docs/examples/cover/cover.css
@@ -1,3 +1,5 @@
+/* stylelint-disable property-no-vendor-prefix */
+
/*
* Globals
*/
@@ -32,7 +34,7 @@ body {
body {
color: #fff;
text-align: center;
- text-shadow: 0 1px 3px rgba(0,0,0,.5);
+ text-shadow: 0 1px 3px rgba(0, 0, 0, .5);
}
/* Extra markup and styles for table-esque vertical and horizontal centering */
@@ -41,8 +43,8 @@ body {
width: 100%;
height: 100%; /* For at least Firefox */
min-height: 100%;
- -webkit-box-shadow: inset 0 0 100px 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);
}
.site-wrapper-inner {
display: table-cell;
@@ -77,16 +79,16 @@ body {
padding-right: 0;
padding-left: 0;
font-size: 16px;
- font-weight: bold;
+ font-weight: 700;
color: #fff; /* IE8 proofing */
- color: rgba(255,255,255,.75);
+ color: rgba(255, 255, 255, .75);
border-bottom: 2px solid transparent;
}
.masthead-nav > li > a:hover,
.masthead-nav > li > a:focus {
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:hover,
@@ -114,7 +116,7 @@ body {
}
.cover .btn-lg {
padding: 10px 20px;
- font-weight: bold;
+ font-weight: 700;
}
@@ -124,7 +126,7 @@ body {
.mastfoot {
color: #999; /* IE8 proofing */
- color: rgba(255,255,255,.5);
+ color: rgba(255, 255, 255, .5);
}
@@ -142,11 +144,9 @@ body {
position: fixed;
bottom: 0;
}
- /* Start the vertical centering */
.site-wrapper-inner {
- vertical-align: middle;
+ vertical-align: middle; /* Start the vertical centering */
}
- /* Handle the widths */
.masthead,
.mastfoot,
.cover-container {
diff --git a/docs/examples/grid/grid.css b/docs/examples/grid/grid.css
index b25263bc7..5df5ac86e 100644
--- a/docs/examples/grid/grid.css
+++ b/docs/examples/grid/grid.css
@@ -12,9 +12,9 @@ h4 {
padding-top: 15px;
padding-bottom: 15px;
background-color: #eee;
- background-color: rgba(86,61,124,.15);
+ background-color: rgba(86, 61, 124, .15);
border: 1px solid #ddd;
- border: 1px solid rgba(86,61,124,.2);
+ border: 1px solid rgba(86, 61, 124, .2);
}
hr {
diff --git a/docs/examples/jumbotron-narrow/jumbotron-narrow.css b/docs/examples/jumbotron-narrow/jumbotron-narrow.css
index 952adc5a0..dcc815969 100644
--- a/docs/examples/jumbotron-narrow/jumbotron-narrow.css
+++ b/docs/examples/jumbotron-narrow/jumbotron-narrow.css
@@ -17,11 +17,10 @@ body {
padding-bottom: 20px;
border-bottom: 1px solid #e5e5e5;
}
-/* Make the masthead heading the same height as the navigation */
.header h3 {
margin-top: 0;
margin-bottom: 0;
- line-height: 40px;
+ line-height: 40px; /* Make the masthead heading the same height as the navigation */
}
/* Custom page footer */
@@ -68,11 +67,9 @@ body {
padding-right: 0;
padding-left: 0;
}
- /* Space out the masthead */
.header {
margin-bottom: 30px;
}
- /* Remove the bottom border on the jumbotron for visual effect */
.jumbotron {
border-bottom: 0;
}
diff --git a/docs/examples/justified-nav/justified-nav.css b/docs/examples/justified-nav/justified-nav.css
index 7ba9cd75e..8e03ffb8c 100644
--- a/docs/examples/justified-nav/justified-nav.css
+++ b/docs/examples/justified-nav/justified-nav.css
@@ -1,3 +1,5 @@
+/* stylelint-disable value-no-vendor-prefix, function-name-case, property-no-vendor-prefix */
+
body {
padding-top: 20px;
}
@@ -30,16 +32,16 @@ body {
padding-top: 15px;
padding-bottom: 15px;
margin-bottom: 0;
- font-weight: bold;
+ font-weight: 700;
color: #777;
text-align: center;
background-color: #e5e5e5; /* Old browsers */
background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e5e5e5));
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%);
- background-image: -o-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%);
- background-image: linear-gradient(to bottom, #f5f5f5 0%,#e5e5e5 100%);
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#e5e5e5',GradientType=0 ); /* IE6-9 */
+ background-image: -o-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%);
+ background-image: linear-gradient(to bottom, #f5f5f5 0%, #e5e5e5 100%);
background-repeat: repeat-x; /* Repeat the gradient */
+ filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#f5f5f5", endColorstr="#e5e5e5", GradientType=0); /* IE6-9 */
border-bottom: 1px solid #d5d5d5;
}
.nav-justified > .active > a,
@@ -47,8 +49,8 @@ body {
.nav-justified > .active > a:focus {
background-color: #ddd;
background-image: none;
- -webkit-box-shadow: inset 0 3px 7px rgba(0,0,0,.15);
- 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 {
border-radius: 5px 5px 0 0;
diff --git a/docs/examples/non-responsive/non-responsive.css b/docs/examples/non-responsive/non-responsive.css
index 0a8e92d96..8faa63613 100644
--- a/docs/examples/non-responsive/non-responsive.css
+++ b/docs/examples/non-responsive/non-responsive.css
@@ -1,3 +1,5 @@
+/* stylelint-disable selector-max-class, selector-max-combinators, selector-max-compound-selectors, declaration-no-important, selector-no-qualifying-type, property-no-vendor-prefix */
+
/* Template-specific stuff
*
* Customizations just for the template; these are not necessary for anything
@@ -47,9 +49,9 @@ body,
padding-top: 15px;
padding-bottom: 15px;
background-color: #eee;
- background-color: rgba(86,61,124,.15);
+ background-color: rgba(86, 61, 124, .15);
border: 1px solid #ddd;
- border: 1px solid rgba(86,61,124,.2);
+ border: 1px solid rgba(86, 61, 124, .2);
}
.container .navbar-header,
@@ -70,14 +72,12 @@ body,
padding-bottom: 0;
overflow: visible !important;
visibility: visible !important;
+ border-top: 0;
}
.navbar-toggle {
display: none;
}
-.navbar-collapse {
- border-top: 0;
-}
.navbar-brand {
margin-left: -15px;
@@ -110,7 +110,7 @@ body,
border-width: 0 1px 1px;
border-radius: 0 0 4px 4px;
-webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
- box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, .175);
}
.navbar-default .navbar-nav .open .dropdown-menu > li > a {
color: #333;
@@ -140,7 +140,7 @@ body,
margin-left: 0;
border: 0;
-webkit-box-shadow: none;
- box-shadow: none;
+ box-shadow: none;
}
/* Copy-pasted from forms.less since we mixin the .form-inline styles. */
diff --git a/docs/examples/offcanvas/offcanvas.css b/docs/examples/offcanvas/offcanvas.css
index 2a72199d5..157669ab8 100644
--- a/docs/examples/offcanvas/offcanvas.css
+++ b/docs/examples/offcanvas/offcanvas.css
@@ -1,3 +1,5 @@
+/* stylelint-disable property-no-vendor-prefix */
+
/*
* Style tweaks
* --------------------------------------------------
@@ -21,8 +23,8 @@ footer {
.row-offcanvas {
position: relative;
-webkit-transition: all .25s ease-out;
- -o-transition: all .25s ease-out;
- transition: all .25s ease-out;
+ -o-transition: all .25s ease-out;
+ transition: all .25s ease-out;
}
.row-offcanvas-right {
@@ -33,13 +35,11 @@ footer {
left: 0;
}
- .row-offcanvas-right
- .sidebar-offcanvas {
+ .row-offcanvas-right .sidebar-offcanvas {
right: -50%; /* 6 columns */
}
- .row-offcanvas-left
- .sidebar-offcanvas {
+ .row-offcanvas-left .sidebar-offcanvas {
left: -50%; /* 6 columns */
}
diff --git a/docs/examples/signin/signin.css b/docs/examples/signin/signin.css
index 995df48e9..164de43ce 100644
--- a/docs/examples/signin/signin.css
+++ b/docs/examples/signin/signin.css
@@ -1,3 +1,5 @@
+/* stylelint-disable selector-no-qualifying-type, property-no-vendor-prefix */
+
body {
padding-top: 40px;
padding-bottom: 40px;
@@ -14,14 +16,14 @@ body {
margin-bottom: 10px;
}
.form-signin .checkbox {
- font-weight: normal;
+ font-weight: 400;
}
.form-signin .form-control {
position: relative;
- height: auto;
-webkit-box-sizing: border-box;
- -moz-box-sizing: border-box;
- box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ height: auto;
padding: 10px;
font-size: 16px;
}
diff --git a/docs/examples/sticky-footer-navbar/sticky-footer-navbar.css b/docs/examples/sticky-footer-navbar/sticky-footer-navbar.css
index ee8038063..830175147 100644
--- a/docs/examples/sticky-footer-navbar/sticky-footer-navbar.css
+++ b/docs/examples/sticky-footer-navbar/sticky-footer-navbar.css
@@ -5,22 +5,20 @@ html {
min-height: 100%;
}
body {
- /* Margin bottom by footer height */
- margin-bottom: 60px;
+ margin-bottom: 60px; /* Margin bottom by footer height */
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
- /* Set the fixed height of the footer here */
- height: 60px;
+ height: 60px; /* Set the fixed height of the footer here */
background-color: #f5f5f5;
}
/* Custom page CSS
--------------------------------------------------- */
-/* Not required for template or sticky footer method. */
+ * Not required for template or sticky footer method.
+ * -------------------------------------------------- */
body > .container {
padding: 60px 15px 0;
diff --git a/docs/examples/sticky-footer/sticky-footer.css b/docs/examples/sticky-footer/sticky-footer.css
index b6699e80e..433014541 100644
--- a/docs/examples/sticky-footer/sticky-footer.css
+++ b/docs/examples/sticky-footer/sticky-footer.css
@@ -5,22 +5,20 @@ html {
min-height: 100%;
}
body {
- /* Margin bottom by footer height */
- margin-bottom: 60px;
+ margin-bottom: 60px; /* Margin bottom by footer height */
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
- /* Set the fixed height of the footer here */
- height: 60px;
+ height: 60px; /* Set the fixed height of the footer here */
background-color: #f5f5f5;
}
/* Custom page CSS
--------------------------------------------------- */
-/* Not required for template or sticky footer method. */
+ * Not required for template or sticky footer method.
+ * -------------------------------------------------- */
.container {
width: auto;
diff --git a/grunt/.stylelintrc b/grunt/.stylelintrc
new file mode 100644
index 000000000..cb5794121
--- /dev/null
+++ b/grunt/.stylelintrc
@@ -0,0 +1,247 @@
+{
+ "extends": ["stylelint-config-standard"],
+ "plugins": [
+ "stylelint-order"
+ ],
+ "rules": {
+ "at-rule-empty-line-before": [null,
+ "except": ["first-nested"]
+ ],
+ "at-rule-name-space-after": "always",
+ "at-rule-no-vendor-prefix": true,
+ "at-rule-semicolon-space-before": "never",
+ "block-closing-brace-empty-line-before": null,
+ "block-closing-brace-newline-after": null,
+ "block-opening-brace-space-before": null,
+ "color-named": "never",
+ "declaration-block-semicolon-newline-after": "always-multi-line",
+ "declaration-block-semicolon-newline-before": "never-multi-line",
+ "declaration-block-semicolon-space-after": "always-single-line",
+ "declaration-empty-line-before": null,
+ "declaration-no-important": true,
+ "font-family-name-quotes": "always-where-recommended",
+ "font-weight-notation": "numeric",
+ "function-url-no-scheme-relative": true,
+ "function-url-quotes": "always",
+ "length-zero-no-unit": true,
+ "max-empty-lines": 2,
+ "max-line-length": null,
+ "media-feature-name-no-vendor-prefix": true,
+ "media-feature-parentheses-space-inside": "never",
+ "media-feature-range-operator-space-after": "always",
+ "media-feature-range-operator-space-before": "never",
+ "no-descending-specificity": null,
+ "no-duplicate-selectors": true,
+ "number-leading-zero": "never",
+ "order/properties-order": [
+ "position",
+ "top",
+ "right",
+ "bottom",
+ "left",
+ "z-index",
+ "box-sizing",
+ "display",
+ "flex",
+ "flex-align",
+ "flex-basis",
+ "flex-direction",
+ "flex-wrap",
+ "flex-flow",
+ "flex-grow",
+ "flex-order",
+ "flex-pack",
+ "align-items",
+ "align-self",
+ "justify-content",
+ "order",
+ "float",
+ "width",
+ "min-width",
+ "max-width",
+ "height",
+ "min-height",
+ "max-height",
+ "padding",
+ "padding-top",
+ "padding-right",
+ "padding-bottom",
+ "padding-left",
+ "margin",
+ "margin-top",
+ "margin-right",
+ "margin-bottom",
+ "margin-left",
+ "overflow",
+ "overflow-x",
+ "overflow-y",
+ "-webkit-overflow-scrolling",
+ "-ms-overflow-x",
+ "-ms-overflow-y",
+ "-ms-overflow-style",
+ "clip",
+ "clear",
+ "font",
+ "font-family",
+ "font-size",
+ "font-style",
+ "font-weight",
+ "font-variant",
+ "font-size-adjust",
+ "font-stretch",
+ "font-effect",
+ "font-emphasize",
+ "font-emphasize-position",
+ "font-emphasize-style",
+ "font-smooth",
+ "hyphens",
+ "line-height",
+ "color",
+ "text-align",
+ "text-align-last",
+ "text-emphasis",
+ "text-emphasis-color",
+ "text-emphasis-style",
+ "text-emphasis-position",
+ "text-decoration",
+ "text-indent",
+ "text-justify",
+ "text-outline",
+ "-ms-text-overflow",
+ "text-overflow",
+ "text-overflow-ellipsis",
+ "text-overflow-mode",
+ "text-shadow",
+ "text-transform",
+ "text-wrap",
+ "-webkit-text-size-adjust",
+ "-ms-text-size-adjust",
+ "letter-spacing",
+ "-ms-word-break",
+ "word-break",
+ "word-spacing",
+ "-ms-word-wrap",
+ "word-wrap",
+ "overflow-wrap",
+ "tab-size",
+ "white-space",
+ "vertical-align",
+ "list-style",
+ "list-style-position",
+ "list-style-type",
+ "list-style-image",
+ "pointer-events",
+ "-ms-touch-action",
+ "touch-action",
+ "cursor",
+ "visibility",
+ "zoom",
+ "table-layout",
+ "empty-cells",
+ "caption-side",
+ "border-spacing",
+ "border-collapse",
+ "content",
+ "quotes",
+ "counter-reset",
+ "counter-increment",
+ "resize",
+ "user-select",
+ "nav-index",
+ "nav-up",
+ "nav-right",
+ "nav-down",
+ "nav-left",
+ "background",
+ "background-color",
+ "background-image",
+ "background-repeat",
+ "background-attachment",
+ "background-position",
+ "background-position-x",
+ "background-position-y",
+ "background-clip",
+ "background-origin",
+ "background-size",
+ "filter",
+ "border",
+ "border-color",
+ "border-style",
+ "border-width",
+ "border-top",
+ "border-top-color",
+ "border-top-style",
+ "border-top-width",
+ "border-right",
+ "border-right-color",
+ "border-right-style",
+ "border-right-width",
+ "border-bottom",
+ "border-bottom-color",
+ "border-bottom-style",
+ "border-bottom-width",
+ "border-left",
+ "border-left-color",
+ "border-left-style",
+ "border-left-width",
+ "border-radius",
+ "border-top-left-radius",
+ "border-top-right-radius",
+ "border-bottom-right-radius",
+ "border-bottom-left-radius",
+ "border-image",
+ "border-image-source",
+ "border-image-slice",
+ "border-image-width",
+ "border-image-outset",
+ "border-image-repeat",
+ "outline",
+ "outline-width",
+ "outline-style",
+ "outline-color",
+ "outline-offset",
+ "box-shadow",
+ "opacity",
+ "-ms-interpolation-mode",
+ "transition",
+ "transition-delay",
+ "transition-timing-function",
+ "transition-duration",
+ "transition-property",
+ "transform",
+ "transform-origin",
+ "animation",
+ "animation-name",
+ "animation-duration",
+ "animation-play-state",
+ "animation-timing-function",
+ "animation-delay",
+ "animation-iteration-count",
+ "animation-direction"
+ ],
+ "property-no-vendor-prefix": true,
+ "rule-empty-line-before": null,
+ "selector-attribute-quotes": "always",
+ "selector-list-comma-newline-after": "always",
+ "selector-list-comma-newline-before": "never-multi-line",
+ "selector-list-comma-space-after": "always-single-line",
+ "selector-list-comma-space-before": "never-single-line",
+ "selector-max-attribute": 2,
+ "selector-max-class": 4,
+ "selector-max-combinators": 4,
+ "selector-max-compound-selectors": 4,
+ "selector-max-empty-lines": 1,
+ "selector-max-id": 0,
+ "selector-max-specificity": null,
+ "selector-max-type": 2,
+ "selector-max-universal": 1,
+ "selector-no-qualifying-type": true,
+ "selector-no-vendor-prefix": true,
+ "string-quotes": "double",
+ "value-keyword-case": "lower",
+ "value-list-comma-newline-after": "never-multi-line",
+ "value-list-comma-newline-before": "never-multi-line",
+ "value-list-comma-space-after": "always",
+ "value-no-vendor-prefix": true
+ }
+}
diff --git a/grunt/configBridge.json b/grunt/configBridge.json
index 9d1a142f2..176e2bda2 100644
--- a/grunt/configBridge.json
+++ b/grunt/configBridge.json
@@ -1,20 +1,20 @@
{
"paths": {
"customizerJs": [
- "../assets/js/vendor/autoprefixer.js",
- "../assets/js/vendor/less.min.js",
- "../assets/js/vendor/jszip.min.js",
- "../assets/js/vendor/uglify.min.js",
- "../assets/js/vendor/Blob.js",
- "../assets/js/vendor/FileSaver.js",
- "../assets/js/raw-files.min.js",
- "../assets/js/src/customizer.js"
+ "/docs/3.4/assets/js/vendor/autoprefixer.js",
+ "/docs/3.4/assets/js/vendor/less.min.js",
+ "/docs/3.4/assets/js/vendor/jszip.min.js",
+ "/docs/3.4/assets/js/vendor/uglify.min.js",
+ "/docs/3.4/assets/js/vendor/Blob.js",
+ "/docs/3.4/assets/js/vendor/FileSaver.js",
+ "/docs/3.4/assets/js/raw-files.min.js",
+ "/docs/3.4/assets/js/src/customizer.js"
],
"docsJs": [
- "../assets/js/vendor/holder.min.js",
- "../assets/js/vendor/ZeroClipboard.min.js",
- "../assets/js/vendor/anchor.min.js",
- "../assets/js/src/application.js"
+ "/docs/3.4/assets/js/vendor/holder.min.js",
+ "/docs/3.4/assets/js/vendor/ZeroClipboard.min.js",
+ "/docs/3.4/assets/js/vendor/anchor.min.js",
+ "/docs/3.4/assets/js/src/application.js"
]
},
"config": {
diff --git a/less/.csscomb.json b/less/.csscomb.json
deleted file mode 100644
index 40695a478..000000000
--- a/less/.csscomb.json
+++ /dev/null
@@ -1,304 +0,0 @@
-{
- "always-semicolon": true,
- "block-indent": 2,
- "color-case": "lower",
- "color-shorthand": true,
- "element-case": "lower",
- "eof-newline": true,
- "leading-zero": false,
- "remove-empty-rulesets": true,
- "space-after-colon": 1,
- "space-after-combinator": 1,
- "space-before-selector-delimiter": 0,
- "space-between-declarations": "\n",
- "space-after-opening-brace": "\n",
- "space-before-closing-brace": "\n",
- "space-before-colon": 0,
- "space-before-combinator": 1,
- "space-before-opening-brace": 1,
- "strip-spaces": true,
- "unitless-zero": true,
- "vendor-prefix-align": true,
- "sort-order": [
- [
- "position",
- "top",
- "right",
- "bottom",
- "left",
- "z-index",
- "display",
- "float",
- "width",
- "min-width",
- "max-width",
- "height",
- "min-height",
- "max-height",
- "-webkit-box-sizing",
- "-moz-box-sizing",
- "box-sizing",
- "-webkit-appearance",
- "padding",
- "padding-top",
- "padding-right",
- "padding-bottom",
- "padding-left",
- "margin",
- "margin-top",
- "margin-right",
- "margin-bottom",
- "margin-left",
- "overflow",
- "overflow-x",
- "overflow-y",
- "-webkit-overflow-scrolling",
- "-ms-overflow-x",
- "-ms-overflow-y",
- "-ms-overflow-style",
- "clip",
- "clear",
- "font",
- "font-family",
- "font-size",
- "font-style",
- "font-weight",
- "font-variant",
- "font-size-adjust",
- "font-stretch",
- "font-effect",
- "font-emphasize",
- "font-emphasize-position",
- "font-emphasize-style",
- "font-smooth",
- "-webkit-hyphens",
- "-moz-hyphens",
- "hyphens",
- "line-height",
- "color",
- "text-align",
- "-webkit-text-align-last",
- "-moz-text-align-last",
- "-ms-text-align-last",
- "text-align-last",
- "text-emphasis",
- "text-emphasis-color",
- "text-emphasis-style",
- "text-emphasis-position",
- "text-decoration",
- "text-indent",
- "text-justify",
- "text-outline",
- "-ms-text-overflow",
- "text-overflow",
- "text-overflow-ellipsis",
- "text-overflow-mode",
- "text-shadow",
- "text-transform",
- "text-wrap",
- "-webkit-text-size-adjust",
- "-ms-text-size-adjust",
- "letter-spacing",
- "-ms-word-break",
- "word-break",
- "word-spacing",
- "-ms-word-wrap",
- "word-wrap",
- "-moz-tab-size",
- "-o-tab-size",
- "tab-size",
- "white-space",
- "vertical-align",
- "list-style",
- "list-style-position",
- "list-style-type",
- "list-style-image",
- "pointer-events",
- "-ms-touch-action",
- "touch-action",
- "cursor",
- "visibility",
- "zoom",
- "flex-direction",
- "flex-order",
- "flex-pack",
- "flex-align",
- "table-layout",
- "empty-cells",
- "caption-side",
- "border-spacing",
- "border-collapse",
- "content",
- "quotes",
- "counter-reset",
- "counter-increment",
- "resize",
- "-webkit-user-select",
- "-moz-user-select",
- "-ms-user-select",
- "-o-user-select",
- "user-select",
- "nav-index",
- "nav-up",
- "nav-right",
- "nav-down",
- "nav-left",
- "background",
- "background-color",
- "background-image",
- "-ms-filter:\\'progid:DXImageTransform.Microsoft.gradient",
- "filter:progid:DXImageTransform.Microsoft.gradient",
- "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader",
- "filter",
- "background-repeat",
- "background-attachment",
- "background-position",
- "background-position-x",
- "background-position-y",
- "-webkit-background-clip",
- "-moz-background-clip",
- "background-clip",
- "background-origin",
- "-webkit-background-size",
- "-moz-background-size",
- "-o-background-size",
- "background-size",
- "border",
- "border-color",
- "border-style",
- "border-width",
- "border-top",
- "border-top-color",
- "border-top-style",
- "border-top-width",
- "border-right",
- "border-right-color",
- "border-right-style",
- "border-right-width",
- "border-bottom",
- "border-bottom-color",
- "border-bottom-style",
- "border-bottom-width",
- "border-left",
- "border-left-color",
- "border-left-style",
- "border-left-width",
- "border-radius",
- "border-top-left-radius",
- "border-top-right-radius",
- "border-bottom-right-radius",
- "border-bottom-left-radius",
- "-webkit-border-image",
- "-moz-border-image",
- "-o-border-image",
- "border-image",
- "-webkit-border-image-source",
- "-moz-border-image-source",
- "-o-border-image-source",
- "border-image-source",
- "-webkit-border-image-slice",
- "-moz-border-image-slice",
- "-o-border-image-slice",
- "border-image-slice",
- "-webkit-border-image-width",
- "-moz-border-image-width",
- "-o-border-image-width",
- "border-image-width",
- "-webkit-border-image-outset",
- "-moz-border-image-outset",
- "-o-border-image-outset",
- "border-image-outset",
- "-webkit-border-image-repeat",
- "-moz-border-image-repeat",
- "-o-border-image-repeat",
- "border-image-repeat",
- "outline",
- "outline-width",
- "outline-style",
- "outline-color",
- "outline-offset",
- "-webkit-box-shadow",
- "-moz-box-shadow",
- "box-shadow",
- "filter:progid:DXImageTransform.Microsoft.Alpha(Opacity",
- "-ms-filter:\\'progid:DXImageTransform.Microsoft.Alpha",
- "opacity",
- "-ms-interpolation-mode",
- "-webkit-transition",
- "-moz-transition",
- "-ms-transition",
- "-o-transition",
- "transition",
- "-webkit-transition-delay",
- "-moz-transition-delay",
- "-ms-transition-delay",
- "-o-transition-delay",
- "transition-delay",
- "-webkit-transition-timing-function",
- "-moz-transition-timing-function",
- "-ms-transition-timing-function",
- "-o-transition-timing-function",
- "transition-timing-function",
- "-webkit-transition-duration",
- "-moz-transition-duration",
- "-ms-transition-duration",
- "-o-transition-duration",
- "transition-duration",
- "-webkit-transition-property",
- "-moz-transition-property",
- "-ms-transition-property",
- "-o-transition-property",
- "transition-property",
- "-webkit-transform",
- "-moz-transform",
- "-ms-transform",
- "-o-transform",
- "transform",
- "-webkit-transform-origin",
- "-moz-transform-origin",
- "-ms-transform-origin",
- "-o-transform-origin",
- "transform-origin",
- "-webkit-animation",
- "-moz-animation",
- "-ms-animation",
- "-o-animation",
- "animation",
- "-webkit-animation-name",
- "-moz-animation-name",
- "-ms-animation-name",
- "-o-animation-name",
- "animation-name",
- "-webkit-animation-duration",
- "-moz-animation-duration",
- "-ms-animation-duration",
- "-o-animation-duration",
- "animation-duration",
- "-webkit-animation-play-state",
- "-moz-animation-play-state",
- "-ms-animation-play-state",
- "-o-animation-play-state",
- "animation-play-state",
- "-webkit-animation-timing-function",
- "-moz-animation-timing-function",
- "-ms-animation-timing-function",
- "-o-animation-timing-function",
- "animation-timing-function",
- "-webkit-animation-delay",
- "-moz-animation-delay",
- "-ms-animation-delay",
- "-o-animation-delay",
- "animation-delay",
- "-webkit-animation-iteration-count",
- "-moz-animation-iteration-count",
- "-ms-animation-iteration-count",
- "-o-animation-iteration-count",
- "animation-iteration-count",
- "-webkit-animation-direction",
- "-moz-animation-direction",
- "-ms-animation-direction",
- "-o-animation-direction",
- "animation-direction"
- ]
- ]
-}
diff --git a/less/.csslintrc b/less/.csslintrc
deleted file mode 100644
index 005b86236..000000000
--- a/less/.csslintrc
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "adjoining-classes": false,
- "box-sizing": false,
- "box-model": false,
- "compatible-vendor-prefixes": false,
- "floats": false,
- "font-sizes": false,
- "gradients": false,
- "important": false,
- "known-properties": false,
- "outline-none": false,
- "qualified-headings": false,
- "regex-selectors": false,
- "shorthand": false,
- "text-indent": false,
- "unique-headings": false,
- "universal-selector": false,
- "unqualified-attributes": false
-}
diff --git a/less/alerts.less b/less/alerts.less
index c4199db92..3101fec27 100644
--- a/less/alerts.less
+++ b/less/alerts.less
@@ -15,8 +15,7 @@
// Headings for larger alerts
h4 {
margin-top: 0;
- // Specified for the h4 to prevent conflicts of changing @headings-color
- color: inherit;
+ color: inherit; // Specified for the h4 to prevent conflicts of changing @headings-color
}
// Provide class for links that match alerts
diff --git a/less/badges.less b/less/badges.less
index 6ee16dca4..be7f8d0cc 100644
--- a/less/badges.less
+++ b/less/badges.less
@@ -10,11 +10,11 @@
padding: 3px 7px;
font-size: @font-size-small;
font-weight: @badge-font-weight;
- color: @badge-color;
line-height: @badge-line-height;
- vertical-align: middle;
- white-space: nowrap;
+ color: @badge-color;
text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
background-color: @badge-bg;
border-radius: @badge-border-radius;
diff --git a/less/breadcrumbs.less b/less/breadcrumbs.less
index cb01d503f..f21d0d89d 100644
--- a/less/breadcrumbs.less
+++ b/less/breadcrumbs.less
@@ -13,10 +13,10 @@
> li {
display: inline-block;
- + li:before {
- content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
+ + li::before {
padding: 0 5px;
color: @breadcrumb-color;
+ content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
}
}
diff --git a/less/button-groups.less b/less/button-groups.less
index 16db0c613..6c2b6f7c6 100644
--- a/less/button-groups.less
+++ b/less/button-groups.less
@@ -1,3 +1,5 @@
+/* stylelint-disable selector-no-qualifying-type */
+
//
// Button groups
// --------------------------------------------------
@@ -103,18 +105,18 @@
// Give the line between buttons some depth
.btn-group > .btn + .dropdown-toggle {
- padding-left: 8px;
padding-right: 8px;
+ padding-left: 8px;
}
.btn-group > .btn-lg + .dropdown-toggle {
- padding-left: 12px;
padding-right: 12px;
+ padding-left: 12px;
}
// The clickable button for toggling the menu
// Remove the gradient and set the same inset shadow as the :active state
.btn-group.open .dropdown-toggle {
- .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+ .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
// Show no shadow for `.btn-link` since it has no other button styles.
&.btn-link {
@@ -205,8 +207,8 @@
border-collapse: separate;
> .btn,
> .btn-group {
- float: none;
display: table-cell;
+ float: none;
width: 1%;
}
> .btn-group .btn {
@@ -237,7 +239,7 @@
input[type="radio"],
input[type="checkbox"] {
position: absolute;
- clip: rect(0,0,0,0);
+ clip: rect(0, 0, 0, 0);
pointer-events: none;
}
}
diff --git a/less/buttons.less b/less/buttons.less
index 9cbb8f416..2e1166a10 100644
--- a/less/buttons.less
+++ b/less/buttons.less
@@ -1,3 +1,5 @@
+/* stylelint-disable selector-no-qualifying-type */
+
//
// Buttons
// --------------------------------------------------
@@ -11,12 +13,12 @@
margin-bottom: 0; // For input.btn
font-weight: @btn-font-weight;
text-align: center;
+ white-space: nowrap;
vertical-align: middle;
touch-action: manipulation;
cursor: pointer;
background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
border: 1px solid transparent;
- white-space: nowrap;
.button-size(@padding-base-vertical; @padding-base-horizontal; @font-size-base; @line-height-base; @btn-border-radius-base);
.user-select(none);
@@ -38,9 +40,9 @@
&:active,
&.active {
- outline: 0;
background-image: none;
- .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));
+ outline: 0;
+ .box-shadow(inset 0 3px 5px rgba(0, 0, 0, .125));
}
&.disabled,
@@ -92,8 +94,8 @@
// Make a button look and behave like a link
.btn-link {
+ font-weight: 400;
color: @link-color;
- font-weight: normal;
border-radius: 0;
&,
diff --git a/less/carousel.less b/less/carousel.less
index 252011e9e..699d67b20 100644
--- a/less/carousel.less
+++ b/less/carousel.less
@@ -1,3 +1,5 @@
+/* stylelint-disable media-feature-name-no-unknown */
+
//
// Carousel
// --------------------------------------------------
@@ -10,12 +12,12 @@
.carousel-inner {
position: relative;
- overflow: hidden;
width: 100%;
+ overflow: hidden;
> .item {
- display: none;
position: relative;
+ display: none;
.transition(.6s ease-in-out left);
// Account for jankitude on images
@@ -27,8 +29,8 @@
// WebKit CSS3 transforms for supported devices
@media all and (transform-3d), (-webkit-transform-3d) {
- .transition-transform(~'0.6s ease-in-out');
- .backface-visibility(~'hidden');
+ .transition-transform(~"0.6s ease-in-out");
+ .backface-visibility(~"hidden");
.perspective(1000px);
&.next,
@@ -93,34 +95,34 @@
.carousel-control {
position: absolute;
top: 0;
- left: 0;
bottom: 0;
+ left: 0;
width: @carousel-control-width;
- .opacity(@carousel-control-opacity);
font-size: @carousel-control-font-size;
color: @carousel-control-color;
text-align: center;
text-shadow: @carousel-text-shadow;
background-color: rgba(0, 0, 0, 0); // Fix IE9 click-thru bug
+ .opacity(@carousel-control-opacity);
// We can't have this transition here because WebKit cancels the carousel
// animation if you trip this while in the middle of another animation.
// Set gradients for backgrounds
&.left {
- #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001));
+ #gradient > .horizontal(@start-color: rgba(0, 0, 0, .5); @end-color: rgba(0, 0, 0, .0001));
}
&.right {
- left: auto;
right: 0;
- #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5));
+ left: auto;
+ #gradient > .horizontal(@start-color: rgba(0, 0, 0, .0001); @end-color: rgba(0, 0, 0, .5));
}
// Hover/focus state
&:hover,
&:focus {
- outline: 0;
color: @carousel-control-color;
text-decoration: none;
+ outline: 0;
.opacity(.9);
}
@@ -131,9 +133,9 @@
.glyphicon-chevron-right {
position: absolute;
top: 50%;
- margin-top: -10px;
z-index: 5;
display: inline-block;
+ margin-top: -10px;
}
.icon-prev,
.glyphicon-chevron-left {
@@ -147,21 +149,20 @@
}
.icon-prev,
.icon-next {
- width: 20px;
+ width: 20px;
height: 20px;
- line-height: 1;
font-family: serif;
+ line-height: 1;
}
-
.icon-prev {
- &:before {
- content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
+ &::before {
+ content: "\2039";// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039)
}
}
.icon-next {
- &:before {
- content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
+ &::before {
+ content: "\203a";// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A)
}
}
}
@@ -177,21 +178,18 @@
left: 50%;
z-index: 15;
width: 60%;
- margin-left: -30%;
padding-left: 0;
- list-style: none;
+ margin-left: -30%;
text-align: center;
+ list-style: none;
li {
display: inline-block;
- width: 10px;
+ width: 10px;
height: 10px;
margin: 1px;
text-indent: -999px;
- border: 1px solid @carousel-indicator-border-color;
- border-radius: 10px;
cursor: pointer;
-
// IE8-9 hack for event handling
//
// Internet Explorer 8-9 does not support clicks on elements without a set
@@ -202,12 +200,16 @@
// For IE8, we set solid black as it doesn't support `rgba()`. For IE9, we
// set alpha transparency for the best results possible.
background-color: #000 \9; // IE8
- background-color: rgba(0,0,0,0); // IE9
+ background-color: rgba(0, 0, 0, 0); // IE9
+
+ border: 1px solid @carousel-indicator-border-color;
+ border-radius: 10px;
}
+
.active {
- margin: 0;
- width: 12px;
+ width: 12px;
height: 12px;
+ margin: 0;
background-color: @carousel-indicator-active-bg;
}
}
@@ -217,15 +219,16 @@
// Hidden by default for smaller viewports
.carousel-caption {
position: absolute;
- left: 15%;
right: 15%;
bottom: 20px;
+ left: 15%;
z-index: 10;
padding-top: 20px;
padding-bottom: 20px;
color: @carousel-caption-color;
text-align: center;
text-shadow: @carousel-text-shadow;
+
& .btn {
text-shadow: none; // No shadow for button elements in carousel-caption
}
@@ -258,8 +261,8 @@
// Show and left align the captions
.carousel-caption {
- left: 20%;
right: 20%;
+ left: 20%;
padding-bottom: 30px;
}
diff --git a/less/close.less b/less/close.less
index 6d5bfe087..a1f2affe2 100644
--- a/less/close.less
+++ b/less/close.less
@@ -1,3 +1,5 @@
+/* stylelint-disable property-no-vendor-prefix */
+
//
// Close icons
// --------------------------------------------------
diff --git a/less/code.less b/less/code.less
index a08b4d48c..4e07976d5 100644
--- a/less/code.less
+++ b/less/code.less
@@ -27,12 +27,12 @@ kbd {
color: @kbd-color;
background-color: @kbd-bg;
border-radius: @border-radius-small;
- box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
+ box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);
kbd {
padding: 0;
font-size: 100%;
- font-weight: bold;
+ font-weight: 700;
box-shadow: none;
}
}
@@ -44,9 +44,9 @@ pre {
margin: 0 0 (@line-height-computed / 2);
font-size: (@font-size-base - 1); // 14px to 13px
line-height: @line-height-base;
+ color: @pre-color;
word-break: break-all;
word-wrap: break-word;
- color: @pre-color;
background-color: @pre-bg;
border: 1px solid @pre-border-color;
border-radius: @border-radius-base;
diff --git a/less/component-animations.less b/less/component-animations.less
index 0bcee910a..711e1e2d9 100644
--- a/less/component-animations.less
+++ b/less/component-animations.less
@@ -1,3 +1,5 @@
+/* stylelint-disable selector-no-qualifying-type */
+
//
// Component animations
// --------------------------------------------------
@@ -10,6 +12,7 @@
.fade {
opacity: 0;
.transition(opacity .15s linear);
+
&.in {
opacity: 1;
}
diff --git a/less/dropdowns.less b/less/dropdowns.less
index f6876c1a9..542c00461 100644
--- a/less/dropdowns.less
+++ b/less/dropdowns.less
@@ -10,10 +10,10 @@
height: 0;
margin-left: 2px;
vertical-align: middle;
- border-top: @caret-width-base dashed;
- border-top: @caret-width-base solid ~"\9"; // IE8
+ border-top: @caret-width-base dashed;
+ border-top: @caret-width-base solid ~"\9"; // IE8
border-right: @caret-width-base solid transparent;
- border-left: @caret-width-base solid transparent;
+ border-left: @caret-width-base solid transparent;
}
// The dropdown wrapper (div)
@@ -38,15 +38,15 @@
min-width: 160px;
padding: 5px 0;
margin: 2px 0 0; // override default ul
- list-style: none;
font-size: @font-size-base;
text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
+ list-style: none;
background-color: @dropdown-bg;
+ background-clip: padding-box;
border: 1px solid @dropdown-fallback-border; // IE8 fallback
border: 1px solid @dropdown-border;
border-radius: @border-radius-base;
- .box-shadow(0 6px 12px rgba(0,0,0,.175));
- background-clip: padding-box;
+ .box-shadow(0 6px 12px rgba(0, 0, 0, .175));
// Aligns the dropdown menu to right
//
@@ -66,20 +66,17 @@
display: block;
padding: 3px 20px;
clear: both;
- font-weight: normal;
+ font-weight: 400;
line-height: @line-height-base;
color: @dropdown-link-color;
white-space: nowrap; // prevent links from randomly breaking onto new lines
- }
-}
-// Hover/Focus state
-.dropdown-menu > li > a {
- &:hover,
- &:focus {
- text-decoration: none;
- color: @dropdown-link-hover-color;
- background-color: @dropdown-link-hover-bg;
+ &:hover,
+ &:focus {
+ color: @dropdown-link-hover-color;
+ text-decoration: none;
+ background-color: @dropdown-link-hover-bg;
+ }
}
}
@@ -90,8 +87,8 @@
&:focus {
color: @dropdown-link-active-color;
text-decoration: none;
- outline: 0;
background-color: @dropdown-link-active-bg;
+ outline: 0;
}
}
@@ -110,10 +107,10 @@
&:hover,
&:focus {
text-decoration: none;
+ cursor: @cursor-disabled;
background-color: transparent;
background-image: none; // Remove CSS gradient
.reset-filter();
- cursor: @cursor-disabled;
}
}
@@ -135,8 +132,8 @@
// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
// menu with the parent.
.dropdown-menu-right {
- left: auto; // Reset the default from `.dropdown-menu`
right: 0;
+ left: auto; // Reset the default from `.dropdown-menu`
}
// With v3, we enabled auto-flipping if you have a dropdown within a right
// aligned nav component. To enable the undoing of that, we provide an override
@@ -145,8 +142,8 @@
// This is only for left-aligning a dropdown menu within a `.navbar-right` or
// `.pull-right` nav component.
.dropdown-menu-left {
- left: 0;
right: auto;
+ left: 0;
}
// Dropdown section headers
@@ -162,10 +159,10 @@
// Backdrop to catch body clicks on mobile, etc.
.dropdown-backdrop {
position: fixed;
- left: 0;
+ top: 0;
right: 0;
bottom: 0;
- top: 0;
+ left: 0;
z-index: (@zindex-dropdown - 10);
}
@@ -184,10 +181,10 @@
.navbar-fixed-bottom .dropdown {
// Reverse the caret
.caret {
+ content: "";
border-top: 0;
border-bottom: @caret-width-base dashed;
border-bottom: @caret-width-base solid ~"\9"; // IE8
- content: "";
}
// Different positioning for bottom up menu
.dropdown-menu {
diff --git a/less/forms.less b/less/forms.less
index 9377d3846..abad9d08d 100644
--- a/less/forms.less
+++ b/less/forms.less
@@ -1,3 +1,5 @@
+/* stylelint-disable selector-no-qualifying-type, property-no-vendor-prefix, media-feature-name-no-vendor-prefix, indentation */
+
//
// Forms
// --------------------------------------------------
@@ -8,13 +10,13 @@
// Restyle and baseline non-control form elements.
fieldset {
- padding: 0;
- margin: 0;
- border: 0;
// Chrome and Firefox set a `min-width: min-content;` on fieldsets,
// so we reset that to ensure it behaves more like a standard block element.
// See https://github.com/twbs/bootstrap/issues/12359.
min-width: 0;
+ padding: 0;
+ margin: 0;
+ border: 0;
}
legend {
@@ -33,7 +35,7 @@ label {
display: inline-block;
max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
margin-bottom: 5px;
- font-weight: bold;
+ font-weight: 700;
}
@@ -43,9 +45,17 @@ label {
// is required to ensure optimum display with or without those classes to better
// address browser inconsistencies.
-// Override content-box in Normalize (* isn't specific enough)
input[type="search"] {
+ // Override content-box in Normalize (* isn't specific enough)
.box-sizing(border-box);
+
+ // Search inputs in iOS
+ //
+ // This overrides the extra rounded corners on search inputs in iOS so that our
+ // `.form-control` class can properly style them. Note that this cannot simply
+ // be added to `.form-control` as it's not specific enough. For details, see
+ // https://github.com/twbs/bootstrap/issues/11586.
+ -webkit-appearance: none;
}
// Position radios and checkboxes better
@@ -54,6 +64,16 @@ input[type="checkbox"] {
margin: 4px 0 0;
margin-top: 1px \9; // IE8-9
line-height: normal;
+
+ // Apply same disabled cursor tweak as for inputs
+ // Some special care is needed because