├── CNAME ├── scss ├── utilities │ ├── _clearfix.scss │ ├── _overflow.scss │ ├── _interactions.scss │ ├── _screenreaders.scss │ ├── _visibility.scss │ ├── _shadows.scss │ ├── _float.scss │ ├── _align.scss │ ├── _background.scss │ ├── _stretched-link.scss │ ├── _sizing.scss │ ├── _display.scss │ ├── _position.scss │ └── _embed.scss ├── _media.scss ├── mixins │ ├── _clearfix.scss │ ├── _size.scss │ ├── _lists.scss │ ├── _text-truncate.scss │ ├── _resize.scss │ ├── _visibility.scss │ ├── _alert.scss │ ├── _text-hide.scss │ ├── _badge.scss │ ├── _nav-divider.scss │ ├── _float.scss │ ├── _list-group.scss │ ├── _text-emphasis.scss │ ├── _reset-text.scss │ ├── _pagination.scss │ ├── _box-shadow.scss │ ├── _deprecate.scss │ ├── _transition.scss │ ├── _background-variant.scss │ ├── _hover.scss │ ├── _table-row.scss │ ├── _screen-reader.scss │ ├── _image.scss │ └── _caret.scss ├── _transitions.scss ├── bootstrap-reboot.scss ├── _jumbotron.scss ├── _utilities.scss ├── _root.scss ├── bootstrap-grid.scss ├── _close.scss ├── bootstrap.scss ├── _code.scss ├── _mixins.scss ├── _toasts.scss ├── _images.scss ├── _spinners.scss ├── _badge.scss ├── _alert.scss ├── _progress.scss ├── _breadcrumb.scss └── _grid.scss ├── site ├── favicon.ico ├── docs │ ├── 4.5 │ │ ├── assets │ │ │ ├── img │ │ │ │ ├── examples │ │ │ │ │ ├── album.png │ │ │ │ │ ├── blog.png │ │ │ │ │ ├── cover.png │ │ │ │ │ ├── grid.png │ │ │ │ │ ├── blog@2x.png │ │ │ │ │ ├── grid@2x.png │ │ │ │ │ ├── navbars.png │ │ │ │ │ ├── pricing.png │ │ │ │ │ ├── product.png │ │ │ │ │ ├── sign-in.png │ │ │ │ │ ├── album@2x.png │ │ │ │ │ ├── carousel.png │ │ │ │ │ ├── checkout.png │ │ │ │ │ ├── cover@2x.png │ │ │ │ │ ├── dashboard.png │ │ │ │ │ ├── jumbotron.png │ │ │ │ │ ├── navbars@2x.png │ │ │ │ │ ├── offcanvas.png │ │ │ │ │ ├── pricing@2x.png │ │ │ │ │ ├── product@2x.png │ │ │ │ │ ├── sign-in@2x.png │ │ │ │ │ ├── carousel@2x.png │ │ │ │ │ ├── checkout@2x.png │ │ │ │ │ ├── dashboard@2x.png │ │ │ │ │ ├── jumbotron@2x.png │ │ │ │ │ ├── navbar-fixed.png │ │ │ │ │ ├── offcanvas@2x.png │ │ │ │ │ ├── floating-labels.png │ │ │ │ │ ├── navbar-bottom.png │ │ │ │ │ ├── navbar-fixed@2x.png │ │ │ │ │ ├── navbar-static.png │ │ │ │ │ ├── sticky-footer.png │ │ │ │ │ ├── navbar-bottom@2x.png │ │ │ │ │ ├── navbar-static@2x.png │ │ │ │ │ ├── starter-template.png │ │ │ │ │ ├── sticky-footer@2x.png │ │ │ │ │ ├── floating-labels@2x.png │ │ │ │ │ ├── starter-template@2x.png │ │ │ │ │ ├── sticky-footer-navbar.png │ │ │ │ │ └── sticky-footer-navbar@2x.png │ │ │ │ ├── bootstrap-icons.png │ │ │ │ ├── bootstrap-themes.png │ │ │ │ ├── favicons │ │ │ │ │ ├── favicon.ico │ │ │ │ │ ├── mstile-70x70.png │ │ │ │ │ ├── favicon-16x16.png │ │ │ │ │ ├── favicon-32x32.png │ │ │ │ │ ├── mstile-144x144.png │ │ │ │ │ ├── mstile-150x150.png │ │ │ │ │ ├── mstile-310x150.png │ │ │ │ │ ├── mstile-310x310.png │ │ │ │ │ ├── apple-touch-icon.png │ │ │ │ │ ├── android-chrome-192x192.png │ │ │ │ │ ├── android-chrome-512x512.png │ │ │ │ │ ├── browserconfig.xml │ │ │ │ │ ├── manifest.json │ │ │ │ │ └── safari-pinned-tab.svg │ │ │ │ ├── bootstrap-icons@2x.png │ │ │ │ ├── bootstrap-themes@2x.png │ │ │ │ ├── bootstrap-themes-collage.png │ │ │ │ └── bootstrap-themes-collage@2x.png │ │ │ ├── brand │ │ │ │ ├── bootstrap-social.png │ │ │ │ ├── bootstrap-social-logo.png │ │ │ │ ├── bootstrap-solid.svg │ │ │ │ ├── bootstrap-punchout.svg │ │ │ │ └── bootstrap-outline.svg │ │ │ ├── scss │ │ │ │ ├── _anchor.scss │ │ │ │ ├── _browser-bugs.scss │ │ │ │ ├── _placeholder-img.scss │ │ │ │ ├── _colors.scss │ │ │ │ ├── _skippy.scss │ │ │ │ ├── _footer.scss │ │ │ │ ├── _clipboard-js.scss │ │ │ │ ├── _ads.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── _callouts.scss │ │ │ │ ├── _buttons.scss │ │ │ │ ├── _nav.scss │ │ │ │ ├── _brand.scss │ │ │ │ ├── docs.scss │ │ │ │ └── _masthead.scss │ │ │ └── js │ │ │ │ └── src │ │ │ │ └── search.js │ │ ├── examples │ │ │ ├── navbar-static │ │ │ │ ├── navbar-top.css │ │ │ │ ├── navbar-top.rtl.css │ │ │ │ └── index.html │ │ │ ├── navbars │ │ │ │ ├── navbar.css │ │ │ │ └── navbar.rtl.css │ │ │ ├── checkout │ │ │ │ ├── form-validation.css │ │ │ │ ├── form-validation.rtl.css │ │ │ │ └── form-validation.js │ │ │ ├── navbar-fixed │ │ │ │ ├── navbar-top-fixed.css │ │ │ │ ├── navbar-top-fixed.rtl.css │ │ │ │ └── index.html │ │ │ ├── jumbotron │ │ │ │ ├── jumbotron.css │ │ │ │ └── jumbotron.rtl.css │ │ │ ├── starter-template │ │ │ │ ├── starter-template.css │ │ │ │ └── starter-template.rtl.css │ │ │ ├── offcanvas │ │ │ │ ├── offcanvas.js │ │ │ │ ├── offcanvas.css │ │ │ │ └── offcanvas.rtl.css │ │ │ ├── pricing │ │ │ │ ├── pricing.css │ │ │ │ └── pricing.rtl.css │ │ │ ├── sticky-footer │ │ │ │ ├── sticky-footer.css │ │ │ │ ├── sticky-footer.rtl.css │ │ │ │ └── index.html │ │ │ ├── grid │ │ │ │ ├── grid.css │ │ │ │ └── grid.rtl.css │ │ │ ├── sticky-footer-navbar │ │ │ │ ├── sticky-footer-navbar.css │ │ │ │ └── sticky-footer-navbar.rtl.css │ │ │ ├── .stylelintrc │ │ │ ├── album │ │ │ │ ├── album.css │ │ │ │ └── album.rtl.css │ │ │ ├── sign-in │ │ │ │ ├── signin.css │ │ │ │ ├── signin.rtl.css │ │ │ │ └── index.html │ │ │ ├── dashboard │ │ │ │ └── dashboard.js │ │ │ ├── cover │ │ │ │ ├── index.html │ │ │ │ ├── cover.css │ │ │ │ └── cover.rtl.css │ │ │ ├── floating-labels │ │ │ │ └── index.html │ │ │ ├── product │ │ │ │ ├── product.css │ │ │ │ └── product.rtl.css │ │ │ ├── navbar-bottom │ │ │ │ └── index.html │ │ │ └── carousel │ │ │ │ ├── carousel.css │ │ │ │ └── carousel.rtl.css │ │ ├── utilities │ │ │ ├── close-icon.md │ │ │ ├── interactions.md │ │ │ ├── shadows.md │ │ │ ├── screen-readers.md │ │ │ ├── visibility.md │ │ │ ├── overflow.md │ │ │ ├── clearfix.md │ │ │ ├── image-replacement.md │ │ │ ├── vertical-align.md │ │ │ ├── position.md │ │ │ └── float.md │ │ ├── about │ │ │ ├── translations.md │ │ │ ├── team.md │ │ │ └── license.md │ │ ├── getting-started │ │ │ └── best-practices.md │ │ ├── components │ │ │ └── jumbotron.md │ │ └── content │ │ │ ├── figures.md │ │ │ └── code.md │ └── versions.html ├── _includes │ ├── ads.html │ ├── analytics.html │ ├── callout-info-prefersreducedmotion.md │ ├── skippy.html │ ├── callout.html │ ├── icons │ │ ├── menu.svg │ │ ├── cloud-fill.svg │ │ ├── circle-square.svg │ │ ├── droplet-fill.svg │ │ ├── code.svg │ │ ├── opencollective.svg │ │ ├── twitter.svg │ │ ├── bootstrap.svg │ │ ├── github.svg │ │ ├── slack.svg │ │ └── placeholder.svg │ ├── callout-info-mediaqueries-breakpoints.md │ ├── callout-warning-color-assistive-technologies.md │ ├── callout-danger-async-methods.md │ ├── stylesheet.html │ ├── header.html │ ├── favicons.html │ ├── footer.html │ ├── social.html │ ├── scripts.html │ ├── example.html │ └── docs-sidebar.html ├── robots.txt ├── _data │ ├── theme-colors.yml │ ├── grays.yml │ ├── colors.yml │ ├── breakpoints.yml │ ├── core-team.yml │ ├── translations.yml │ └── docs-versions.yml ├── _layouts │ ├── home.html │ ├── default.html │ ├── simple.html │ └── docs.html ├── sw.js └── .eslintrc.json ├── .stylelintignore ├── nuget ├── bootstrap.png ├── MyGet.ps1 ├── bootstrap.nuspec └── bootstrap.sass.nuspec ├── .github ├── CODEOWNERS ├── SUPPORT.md ├── workflows │ ├── codeql.yml │ ├── dart-sass.yml │ ├── css.yml │ ├── lint.yml │ ├── bundlewatch.yml │ ├── browserstack.yml │ └── js.yml └── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── .eslintignore ├── .gitattributes ├── js ├── tests │ ├── integration │ │ ├── bundle.js │ │ └── rollup.bundle.js │ ├── unit │ │ └── .eslintrc.json │ └── browsers.js ├── src │ └── index.js └── dist │ └── index.js ├── .browserslistrc ├── .editorconfig ├── Gemfile ├── .babelrc.js ├── .stylelintrc ├── SECURITY.md ├── package.js ├── .gitignore ├── composer.json ├── .bundlewatch.config.json ├── LICENSE └── .eslintrc.json /CNAME: -------------------------------------------------------------------------------- 1 | bootstrap.rtlcss.com 2 | -------------------------------------------------------------------------------- /scss/utilities/_clearfix.scss: -------------------------------------------------------------------------------- 1 | .clearfix { 2 | @include clearfix(); 3 | } 4 | -------------------------------------------------------------------------------- /site/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/favicon.ico -------------------------------------------------------------------------------- /.stylelintignore: -------------------------------------------------------------------------------- 1 | **/*.min.css 2 | **/dist/ 3 | **/vendor/ 4 | /_gh_pages/ 5 | **/*.rtl.css -------------------------------------------------------------------------------- /nuget/bootstrap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/nuget/bootstrap.png -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | *.js @twbs/js-review 2 | *.css @twbs/css-review 3 | *.scss @twbs/css-review 4 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | **/*.min.js 2 | **/dist/ 3 | **/vendor/ 4 | /_gh_pages/ 5 | /js/coverage/ 6 | /site/sw.js 7 | /package.js 8 | -------------------------------------------------------------------------------- /scss/_media.scss: -------------------------------------------------------------------------------- 1 | .media { 2 | display: flex; 3 | align-items: flex-start; 4 | } 5 | 6 | .media-body { 7 | flex: 1; 8 | } 9 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/album.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/album.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/blog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/blog.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/cover.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/grid.png -------------------------------------------------------------------------------- /site/docs/4.5/examples/navbar-static/navbar-top.css: -------------------------------------------------------------------------------- 1 | /* Show it's not fixed to the top */ 2 | body { 3 | min-height: 75rem; 4 | } 5 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/navbar-static/navbar-top.rtl.css: -------------------------------------------------------------------------------- 1 | /* Show it's not fixed to the top */ 2 | body { 3 | min-height: 75rem; 4 | } 5 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/navbars/navbar.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-bottom: 20px; 3 | } 4 | 5 | .navbar { 6 | margin-bottom: 20px; 7 | } 8 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/bootstrap-icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/bootstrap-icons.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/bootstrap-themes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/bootstrap-themes.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/blog@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/blog@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/grid@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/grid@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/navbars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/navbars.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/pricing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/pricing.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/product.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/product.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/sign-in.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/sign-in.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/favicons/favicon.ico -------------------------------------------------------------------------------- /site/docs/4.5/examples/navbars/navbar.rtl.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-bottom: 20px; 3 | } 4 | 5 | .navbar { 6 | margin-bottom: 20px; 7 | } 8 | -------------------------------------------------------------------------------- /scss/mixins/_clearfix.scss: -------------------------------------------------------------------------------- 1 | @mixin clearfix() { 2 | &::after { 3 | display: block; 4 | clear: both; 5 | content: ""; 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/brand/bootstrap-social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/brand/bootstrap-social.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/bootstrap-icons@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/bootstrap-icons@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/bootstrap-themes@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/bootstrap-themes@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/album@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/album@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/carousel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/carousel.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/checkout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/checkout.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/cover@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/cover@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/dashboard.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/jumbotron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/jumbotron.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/navbars@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/navbars@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/offcanvas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/offcanvas.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/pricing@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/pricing@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/product@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/product@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/sign-in@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/sign-in@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/examples/checkout/form-validation.css: -------------------------------------------------------------------------------- 1 | .container { 2 | max-width: 960px; 3 | } 4 | 5 | .lh-condensed { line-height: 1.25; } 6 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/checkout/form-validation.rtl.css: -------------------------------------------------------------------------------- 1 | .container { 2 | max-width: 960px; 3 | } 4 | 5 | .lh-condensed { line-height: 1.25; } 6 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/carousel@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/carousel@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/checkout@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/checkout@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/dashboard@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/dashboard@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/jumbotron@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/jumbotron@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/navbar-fixed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/navbar-fixed.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/offcanvas@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/offcanvas@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/favicons/mstile-70x70.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/brand/bootstrap-social-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/brand/bootstrap-social-logo.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/bootstrap-themes-collage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/bootstrap-themes-collage.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/floating-labels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/floating-labels.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/navbar-bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/navbar-bottom.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/navbar-fixed@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/navbar-fixed@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/navbar-static.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/navbar-static.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/sticky-footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/sticky-footer.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/favicons/favicon-16x16.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/favicons/favicon-32x32.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/favicons/mstile-144x144.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/favicons/mstile-150x150.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/favicons/mstile-310x150.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/favicons/mstile-310x310.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/navbar-bottom@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/navbar-bottom@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/navbar-static@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/navbar-static@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/starter-template.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/starter-template.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/sticky-footer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/sticky-footer@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/favicons/apple-touch-icon.png -------------------------------------------------------------------------------- /site/docs/4.5/examples/navbar-fixed/navbar-top-fixed.css: -------------------------------------------------------------------------------- 1 | /* Show it is fixed to the top */ 2 | body { 3 | min-height: 75rem; 4 | padding-top: 4.5rem; 5 | } 6 | -------------------------------------------------------------------------------- /site/_includes/ads.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/bootstrap-themes-collage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/bootstrap-themes-collage@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/floating-labels@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/floating-labels@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/starter-template@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/starter-template@2x.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/sticky-footer-navbar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/sticky-footer-navbar.png -------------------------------------------------------------------------------- /site/docs/4.5/examples/navbar-fixed/navbar-top-fixed.rtl.css: -------------------------------------------------------------------------------- 1 | /* Show it is fixed to the top */ 2 | body { 3 | min-height: 75rem; 4 | padding-top: 4.5rem; 5 | } 6 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/favicons/android-chrome-192x192.png -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/favicons/android-chrome-512x512.png -------------------------------------------------------------------------------- /site/docs/4.5/examples/jumbotron/jumbotron.css: -------------------------------------------------------------------------------- 1 | /* Move down content because we have a fixed navbar that is 3.5rem tall */ 2 | body { 3 | padding-top: 3.5rem; 4 | } 5 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/jumbotron/jumbotron.rtl.css: -------------------------------------------------------------------------------- 1 | /* Move down content because we have a fixed navbar that is 3.5rem tall */ 2 | body { 3 | padding-top: 3.5rem; 4 | } 5 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/examples/sticky-footer-navbar@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RTLCSS/bootstrap/HEAD/site/docs/4.5/assets/img/examples/sticky-footer-navbar@2x.png -------------------------------------------------------------------------------- /scss/utilities/_overflow.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @each $value in $overflows { 4 | .overflow-#{$value} { overflow: $value !important; } 5 | } 6 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/starter-template/starter-template.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 5rem; 3 | } 4 | .starter-template { 5 | padding: 3rem 1.5rem; 6 | text-align: center; 7 | } 8 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/starter-template/starter-template.rtl.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding-top: 5rem; 3 | } 4 | .starter-template { 5 | padding: 3rem 1.5rem; 6 | text-align: center; 7 | } 8 | -------------------------------------------------------------------------------- /scss/mixins/_size.scss: -------------------------------------------------------------------------------- 1 | // Sizing shortcuts 2 | 3 | @mixin size($width, $height: $width) { 4 | width: $width; 5 | height: $height; 6 | @include deprecate("`size()`", "v4.3.0", "v5"); 7 | } 8 | -------------------------------------------------------------------------------- /scss/utilities/_interactions.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @each $value in $user-selects { 4 | .user-select-#{$value} { user-select: $value !important; } 5 | } 6 | -------------------------------------------------------------------------------- /scss/utilities/_screenreaders.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Screenreaders 3 | // 4 | 5 | .sr-only { 6 | @include sr-only(); 7 | } 8 | 9 | .sr-only-focusable { 10 | @include sr-only-focusable(); 11 | } 12 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Enforce Unix newlines 2 | * text=auto eol=lf 3 | 4 | # Don't diff or textually merge source maps 5 | *.map binary 6 | 7 | bootstrap.css linguist-vendored=false 8 | bootstrap.js linguist-vendored=false 9 | -------------------------------------------------------------------------------- /scss/mixins/_lists.scss: -------------------------------------------------------------------------------- 1 | // Lists 2 | 3 | // Unstyled keeps list items block level, just removes default browser padding and list-style 4 | @mixin list-unstyled() { 5 | padding-left: 0; 6 | list-style: none; 7 | } 8 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/offcanvas/offcanvas.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | 'use strict' 3 | 4 | $('[data-toggle="offcanvas"]').on('click', function () { 5 | $('.offcanvas-collapse').toggleClass('open') 6 | }) 7 | }) 8 | -------------------------------------------------------------------------------- /scss/mixins/_text-truncate.scss: -------------------------------------------------------------------------------- 1 | // Text truncate 2 | // Requires inline-block or block for proper styling 3 | 4 | @mixin text-truncate() { 5 | overflow: hidden; 6 | text-overflow: ellipsis; 7 | white-space: nowrap; 8 | } 9 | -------------------------------------------------------------------------------- /scss/mixins/_resize.scss: -------------------------------------------------------------------------------- 1 | // Resize anything 2 | 3 | @mixin resizable($direction) { 4 | overflow: auto; // Per CSS3 UI, `resize` only applies when `overflow` isn't `visible` 5 | resize: $direction; // Options: horizontal, vertical, both 6 | } 7 | -------------------------------------------------------------------------------- /scss/mixins/_visibility.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Visibility 4 | 5 | @mixin invisible($visibility) { 6 | visibility: $visibility !important; 7 | @include deprecate("`invisible()`", "v4.3.0", "v5"); 8 | } 9 | -------------------------------------------------------------------------------- /js/tests/integration/bundle.js: -------------------------------------------------------------------------------- 1 | import 'popper.js' 2 | import $ from 'jquery' 3 | import bootstrap from '../../../dist/js/bootstrap' 4 | 5 | $(() => { 6 | $('#resultUID').text(bootstrap.Util.getUID('bs')) 7 | $('[data-toggle="tooltip"]').tooltip() 8 | }) 9 | -------------------------------------------------------------------------------- /.browserslistrc: -------------------------------------------------------------------------------- 1 | # https://github.com/browserslist/browserslist#readme 2 | 3 | >= 1% 4 | last 1 major version 5 | not dead 6 | Chrome >= 45 7 | Firefox >= 38 8 | Edge >= 12 9 | Explorer >= 10 10 | iOS >= 9 11 | Safari >= 9 12 | Android >= 4.4 13 | Opera >= 30 14 | -------------------------------------------------------------------------------- /scss/utilities/_visibility.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // 4 | // Visibility utilities 5 | // 6 | 7 | .visible { 8 | visibility: visible !important; 9 | } 10 | 11 | .invisible { 12 | visibility: hidden !important; 13 | } 14 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | indent_size = 2 9 | indent_style = space 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | trim_trailing_whitespace = false 15 | -------------------------------------------------------------------------------- /scss/utilities/_shadows.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | .shadow-sm { box-shadow: $box-shadow-sm !important; } 4 | .shadow { box-shadow: $box-shadow !important; } 5 | .shadow-lg { box-shadow: $box-shadow-lg !important; } 6 | .shadow-none { box-shadow: none !important; } 7 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_anchor.scss: -------------------------------------------------------------------------------- 1 | .anchorjs-link { 2 | font-weight: 400; 3 | color: rgba($link-color, .5); 4 | @include transition(color .15s ease-in-out, opacity .15s ease-in-out); 5 | 6 | &:hover { 7 | color: $link-color; 8 | text-decoration: none; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_browser-bugs.scss: -------------------------------------------------------------------------------- 1 | // Wall of Browser Bugs 2 | // 3 | // Better display for the responsive table on the Wall of Browser Bugs. 4 | 5 | .bd-browser-bugs { 6 | td p { 7 | margin-bottom: 0; 8 | } 9 | th:first-child { 10 | width: 18%; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /site/robots.txt: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | # www.robotstxt.org/ 5 | 6 | {% if jekyll.environment != "netlify" -%} 7 | # Allow crawling of all content 8 | {%- endif %} 9 | User-agent: * 10 | Disallow:{% if jekyll.environment == "netlify" %} /{% endif %} 11 | Sitemap: {{ site.url }}/sitemap.xml 12 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | group :development, :test do 4 | gem 'jekyll', '~> 4.1.1' 5 | gem 'jekyll-redirect-from', '~> 0.16.0' 6 | gem 'jekyll-sitemap', '~> 1.4.0' 7 | gem 'jekyll-toc', '~> 0.14.0' 8 | gem 'wdm', '~> 0.1.1', :install_if => Gem.win_platform? 9 | end 10 | -------------------------------------------------------------------------------- /.babelrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [ 3 | [ 4 | '@babel/preset-env', 5 | { 6 | loose: true, 7 | bugfixes: true, 8 | modules: false 9 | } 10 | ] 11 | ], 12 | env: { 13 | test: { 14 | plugins: [ 'istanbul' ] 15 | } 16 | } 17 | }; 18 | -------------------------------------------------------------------------------- /scss/mixins/_alert.scss: -------------------------------------------------------------------------------- 1 | @mixin alert-variant($background, $border, $color) { 2 | color: $color; 3 | @include gradient-bg($background); 4 | border-color: $border; 5 | 6 | hr { 7 | border-top-color: darken($border, 5%); 8 | } 9 | 10 | .alert-link { 11 | color: darken($color, 10%); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /site/_includes/analytics.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/pricing/pricing.css: -------------------------------------------------------------------------------- 1 | html { 2 | font-size: 14px; 3 | } 4 | @media (min-width: 768px) { 5 | html { 6 | font-size: 16px; 7 | } 8 | } 9 | 10 | .container { 11 | max-width: 960px; 12 | } 13 | 14 | .pricing-header { 15 | max-width: 700px; 16 | } 17 | 18 | .card-deck .card { 19 | min-width: 220px; 20 | } 21 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/pricing/pricing.rtl.css: -------------------------------------------------------------------------------- 1 | html { 2 | font-size: 14px; 3 | } 4 | @media (min-width: 768px) { 5 | html { 6 | font-size: 16px; 7 | } 8 | } 9 | 10 | .container { 11 | max-width: 960px; 12 | } 13 | 14 | .pricing-header { 15 | max-width: 700px; 16 | } 17 | 18 | .card-deck .card { 19 | min-width: 220px; 20 | } 21 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/sticky-footer/sticky-footer.css: -------------------------------------------------------------------------------- 1 | /* Custom page CSS 2 | -------------------------------------------------- */ 3 | /* Not required for template or sticky footer method. */ 4 | 5 | .container { 6 | width: auto; 7 | max-width: 680px; 8 | padding: 0 15px; 9 | } 10 | 11 | .footer { 12 | background-color: #f5f5f5; 13 | } 14 | -------------------------------------------------------------------------------- /site/_data/theme-colors.yml: -------------------------------------------------------------------------------- 1 | - name: primary 2 | hex: "#007bff" 3 | - name: secondary 4 | hex: "#868e96" 5 | - name: success 6 | hex: "#28a745" 7 | - name: danger 8 | hex: "#dc3545" 9 | - name: warning 10 | hex: "#ffc107" 11 | - name: info 12 | hex: "#17a2b8" 13 | - name: light 14 | hex: "#f8f9fa" 15 | - name: dark 16 | hex: "#343a40" 17 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/sticky-footer/sticky-footer.rtl.css: -------------------------------------------------------------------------------- 1 | /* Custom page CSS 2 | -------------------------------------------------- */ 3 | /* Not required for template or sticky footer method. */ 4 | 5 | .container { 6 | width: auto; 7 | max-width: 680px; 8 | padding: 0 15px; 9 | } 10 | 11 | .footer { 12 | background-color: #f5f5f5; 13 | } 14 | -------------------------------------------------------------------------------- /site/_data/grays.yml: -------------------------------------------------------------------------------- 1 | - name: 100 2 | hex: "#f8f9fa" 3 | - name: 200 4 | hex: "#e9ecef" 5 | - name: 300 6 | hex: "#dee2e6" 7 | - name: 400 8 | hex: "#ced4da" 9 | - name: 500 10 | hex: "#adb5bd" 11 | - name: 600 12 | hex: "#868e96" 13 | - name: 700 14 | hex: "#495057" 15 | - name: 800 16 | hex: "#343a40" 17 | - name: 900 18 | hex: "#212529" 19 | -------------------------------------------------------------------------------- /site/_layouts/home.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include header.html %} 5 | 6 | 7 | {% include skippy.html %} 8 | 9 | {% include docs-navbar.html %} 10 | 11 | {{ content }} 12 | 13 | {% include footer.html %} 14 | {% include scripts.html %} 15 | 16 | 17 | -------------------------------------------------------------------------------- /scss/_transitions.scss: -------------------------------------------------------------------------------- 1 | .fade { 2 | @include transition($transition-fade); 3 | 4 | &:not(.show) { 5 | opacity: 0; 6 | } 7 | } 8 | 9 | .collapse { 10 | &:not(.show) { 11 | display: none; 12 | } 13 | } 14 | 15 | .collapsing { 16 | position: relative; 17 | height: 0; 18 | overflow: hidden; 19 | @include transition($transition-collapse); 20 | } 21 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_placeholder-img.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Placeholder svg used in the docs. 3 | // 4 | 5 | // Remember to update `site/_layouts/examples.html` too if this changes! 6 | 7 | .bd-placeholder-img { 8 | @include font-size(1.125rem); 9 | text-anchor: middle; 10 | user-select: none; 11 | } 12 | 13 | .bd-placeholder-img-lg { 14 | @include font-size(3.5rem); 15 | } 16 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/browserconfig.xml: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | 5 | 6 | 7 | 8 | #563d7c 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/grid/grid.css: -------------------------------------------------------------------------------- 1 | .themed-grid-col { 2 | padding-top: 15px; 3 | padding-bottom: 15px; 4 | background-color: rgba(86, 61, 124, .15); 5 | border: 1px solid rgba(86, 61, 124, .2); 6 | } 7 | 8 | .themed-container { 9 | padding: 15px; 10 | margin-bottom: 30px; 11 | background-color: rgba(0, 123, 255, .15); 12 | border: 1px solid rgba(0, 123, 255, .2); 13 | } 14 | -------------------------------------------------------------------------------- /scss/mixins/_text-hide.scss: -------------------------------------------------------------------------------- 1 | // CSS image replacement 2 | @mixin text-hide($ignore-warning: false) { 3 | // stylelint-disable-next-line font-family-no-missing-generic-family-keyword 4 | font: 0/0 a; 5 | color: transparent; 6 | text-shadow: none; 7 | background-color: transparent; 8 | border: 0; 9 | 10 | @include deprecate("`text-hide()`", "v4.1.0", "v5", $ignore-warning); 11 | } 12 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_colors.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Docs color palette classes 3 | // 4 | 5 | @each $color, $value in $colors { 6 | .swatch-#{$color} { 7 | color: color-yiq($value); 8 | background-color: #{$value}; 9 | } 10 | } 11 | 12 | @each $color, $value in $grays { 13 | .swatch-#{$color} { 14 | color: color-yiq($value); 15 | background-color: #{$value}; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/grid/grid.rtl.css: -------------------------------------------------------------------------------- 1 | .themed-grid-col { 2 | padding-top: 15px; 3 | padding-bottom: 15px; 4 | background-color: rgba(86, 61, 124, .15); 5 | border: 1px solid rgba(86, 61, 124, .2); 6 | } 7 | 8 | .themed-container { 9 | padding: 15px; 10 | margin-bottom: 30px; 11 | background-color: rgba(0, 123, 255, .15); 12 | border: 1px solid rgba(0, 123, 255, .2); 13 | } 14 | -------------------------------------------------------------------------------- /site/_includes/callout-info-prefersreducedmotion.md: -------------------------------------------------------------------------------- 1 | {% capture callout %} 2 | The animation effect of this component is dependent on the `prefers-reduced-motion` media query. See the [reduced motion section of our accessibility documentation]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/accessibility/#reduced-motion). 3 | {% endcapture %} 4 | {% include callout.html content=callout type="info" %} 5 | -------------------------------------------------------------------------------- /site/_includes/skippy.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | Skip to main content 4 | {%- if page.layout == "docs" -%} 5 | Skip to docs navigation 6 | {%- endif -%} 7 |
8 |
9 | -------------------------------------------------------------------------------- /site/_includes/callout.html: -------------------------------------------------------------------------------- 1 | {%- comment -%} 2 | Usage: include callout.html content=callout type="type", 3 | where content is a capture with the content 4 | and type is one of: info (default), danger, warning 5 | {%- endcomment -%} 6 | {%- assign css_class = include.type | default: "info" -%} 7 |
8 | {{- include.content | markdownify -}} 9 |
10 | -------------------------------------------------------------------------------- /scss/mixins/_badge.scss: -------------------------------------------------------------------------------- 1 | @mixin badge-variant($bg) { 2 | color: color-yiq($bg); 3 | background-color: $bg; 4 | 5 | @at-root a#{&} { 6 | @include hover-focus() { 7 | color: color-yiq($bg); 8 | background-color: darken($bg, 10%); 9 | } 10 | 11 | &:focus, 12 | &.focus { 13 | outline: 0; 14 | box-shadow: 0 0 0 $badge-focus-width rgba($bg, .5); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /site/_includes/icons/menu.svg: -------------------------------------------------------------------------------- 1 | Menu -------------------------------------------------------------------------------- /scss/mixins/_nav-divider.scss: -------------------------------------------------------------------------------- 1 | // Horizontal dividers 2 | // 3 | // Dividers (basically an hr) within dropdowns and nav lists 4 | 5 | @mixin nav-divider($color: $nav-divider-color, $margin-y: $nav-divider-margin-y, $ignore-warning: false) { 6 | height: 0; 7 | margin: $margin-y 0; 8 | overflow: hidden; 9 | border-top: 1px solid $color; 10 | @include deprecate("The `nav-divider()` mixin", "v4.4.0", "v5", $ignore-warning); 11 | } 12 | -------------------------------------------------------------------------------- /scss/utilities/_float.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @each $breakpoint in map-keys($grid-breakpoints) { 4 | @include media-breakpoint-up($breakpoint) { 5 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 6 | 7 | .float#{$infix}-left { float: left !important; } 8 | .float#{$infix}-right { float: right !important; } 9 | .float#{$infix}-none { float: none !important; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "stylelint-config-twbs-bootstrap/scss" 4 | ], 5 | "rules": { 6 | "function-disallowed-list": [ 7 | "calc" 8 | ], 9 | "property-disallowed-list": [ 10 | "border-radius", 11 | "border-top-left-radius", 12 | "border-top-right-radius", 13 | "border-bottom-right-radius", 14 | "border-bottom-left-radius", 15 | "transition" 16 | ] 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /scss/utilities/_align.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | .align-baseline { vertical-align: baseline !important; } // Browser default 4 | .align-top { vertical-align: top !important; } 5 | .align-middle { vertical-align: middle !important; } 6 | .align-bottom { vertical-align: bottom !important; } 7 | .align-text-bottom { vertical-align: text-bottom !important; } 8 | .align-text-top { vertical-align: text-top !important; } 9 | -------------------------------------------------------------------------------- /site/_includes/icons/cloud-fill.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /scss/mixins/_float.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @mixin float-left() { 4 | float: left !important; 5 | @include deprecate("The `float-left` mixin", "v4.3.0", "v5"); 6 | } 7 | @mixin float-right() { 8 | float: right !important; 9 | @include deprecate("The `float-right` mixin", "v4.3.0", "v5"); 10 | } 11 | @mixin float-none() { 12 | float: none !important; 13 | @include deprecate("The `float-none` mixin", "v4.3.0", "v5"); 14 | } 15 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/sticky-footer-navbar/sticky-footer-navbar.css: -------------------------------------------------------------------------------- 1 | /* Custom page CSS 2 | -------------------------------------------------- */ 3 | /* Not required for template or sticky footer method. */ 4 | 5 | main > .container { 6 | padding: 60px 15px 0; 7 | } 8 | 9 | .footer { 10 | background-color: #f5f5f5; 11 | } 12 | 13 | .footer > .container { 14 | padding-right: 15px; 15 | padding-left: 15px; 16 | } 17 | 18 | code { 19 | font-size: 80%; 20 | } 21 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/sticky-footer-navbar/sticky-footer-navbar.rtl.css: -------------------------------------------------------------------------------- 1 | /* Custom page CSS 2 | -------------------------------------------------- */ 3 | /* Not required for template or sticky footer method. */ 4 | 5 | main > .container { 6 | padding: 60px 15px 0; 7 | } 8 | 9 | .footer { 10 | background-color: #f5f5f5; 11 | } 12 | 13 | .footer > .container { 14 | padding-left: 15px; 15 | padding-right: 15px; 16 | } 17 | 18 | code { 19 | font-size: 80%; 20 | } 21 | -------------------------------------------------------------------------------- /scss/bootstrap-reboot.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Reboot v4.5.3 (https://getbootstrap.com/) 3 | * Copyright 2011-2020 The Bootstrap Authors 4 | * Copyright 2011-2020 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | * Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md) 7 | */ 8 | 9 | @import "functions"; 10 | @import "variables"; 11 | @import "mixins"; 12 | @import "reboot"; 13 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/.stylelintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "stylelint-config-twbs-bootstrap/css" 4 | ], 5 | "rules": { 6 | "at-rule-no-vendor-prefix": null, 7 | "comment-empty-line-before": null, 8 | "media-feature-name-no-vendor-prefix": null, 9 | "property-blacklist": null, 10 | "property-no-vendor-prefix": null, 11 | "selector-no-qualifying-type": null, 12 | "selector-no-vendor-prefix": null, 13 | "value-no-vendor-prefix": null 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Reporting Security Issues 2 | 3 | The Bootstrap team and community take security issues in Bootstrap seriously. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions. 4 | 5 | To report a security issue, email [security@getbootstrap.com](mailto:security@getbootstrap.com) and include the word "SECURITY" in the subject line. 6 | 7 | We'll endeavor to respond quickly, and will keep you updated throughout the process. 8 | -------------------------------------------------------------------------------- /scss/_jumbotron.scss: -------------------------------------------------------------------------------- 1 | .jumbotron { 2 | padding: $jumbotron-padding ($jumbotron-padding / 2); 3 | margin-bottom: $jumbotron-padding; 4 | color: $jumbotron-color; 5 | background-color: $jumbotron-bg; 6 | @include border-radius($border-radius-lg); 7 | 8 | @include media-breakpoint-up(sm) { 9 | padding: ($jumbotron-padding * 2) $jumbotron-padding; 10 | } 11 | } 12 | 13 | .jumbotron-fluid { 14 | padding-right: 0; 15 | padding-left: 0; 16 | @include border-radius(0); 17 | } 18 | -------------------------------------------------------------------------------- /site/docs/4.5/utilities/close-icon.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Close icon 4 | description: Use a generic close icon for dismissing content like modals and alerts. 5 | group: utilities 6 | --- 7 | 8 | **Be sure to include text for screen readers**, as we've done with `aria-label`. 9 | 10 | {% capture example %} 11 | 14 | {% endcapture %} 15 | {% include example.html content=example %} 16 | -------------------------------------------------------------------------------- /.github/SUPPORT.md: -------------------------------------------------------------------------------- 1 | ### Bug reports 2 | 3 | See the [contributing guidelines](CONTRIBUTING.md) for sharing bug reports. 4 | 5 | ### How-to 6 | 7 | For general troubleshooting or help getting started: 8 | 9 | - Join [the official Slack room](https://bootstrap-slack.herokuapp.com/). 10 | - Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##bootstrap` channel. 11 | - Ask and explore Stack Overflow with the [`bootstrap-4`](https://stackoverflow.com/questions/tagged/bootstrap-4) tag. 12 | -------------------------------------------------------------------------------- /scss/utilities/_background.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | @each $color, $value in $theme-colors { 4 | @include bg-variant(".bg-#{$color}", $value, true); 5 | } 6 | 7 | @if $enable-gradients { 8 | @each $color, $value in $theme-colors { 9 | @include bg-gradient-variant(".bg-gradient-#{$color}", $value, true); 10 | } 11 | } 12 | 13 | .bg-white { 14 | background-color: $white !important; 15 | } 16 | 17 | .bg-transparent { 18 | background-color: transparent !important; 19 | } 20 | -------------------------------------------------------------------------------- /site/_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include header.html %} 5 | 6 | 7 | {% include skippy.html %} 8 | 9 | {% include docs-navbar.html %} 10 | 11 | {% if page.layout == "simple" %} 12 | {{ content }} 13 | {% else %} 14 |
15 | {{ content }} 16 |
17 | {% endif %} 18 | 19 | {% include footer.html %} 20 | {% include scripts.html %} 21 | 22 | 23 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_skippy.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | .skippy { 4 | background-color: $bd-purple; 5 | 6 | a { 7 | color: $white; 8 | } 9 | 10 | &:focus-within a { 11 | position: static !important; 12 | width: auto !important; 13 | height: auto !important; 14 | padding: $spacer / 2 !important; 15 | margin: $spacer / 4 !important; 16 | overflow: visible !important; 17 | clip: auto !important; 18 | white-space: normal !important; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /site/_data/colors.yml: -------------------------------------------------------------------------------- 1 | - name: blue 2 | hex: "#007bff" 3 | - name: indigo 4 | hex: "#6610f2" 5 | - name: purple 6 | hex: "#6f42c1" 7 | - name: pink 8 | hex: "#e83e8c" 9 | - name: red 10 | hex: "#dc3545" 11 | - name: orange 12 | hex: "#fd7e14" 13 | - name: yellow 14 | hex: "#ffc107" 15 | - name: green 16 | hex: "#28a745" 17 | - name: teal 18 | hex: "#20c997" 19 | - name: cyan 20 | hex: "#17a2b8" 21 | - name: white 22 | hex: "#fff" 23 | - name: gray 24 | hex: "#868e96" 25 | - name: gray-dark 26 | hex: "#343a40" 27 | -------------------------------------------------------------------------------- /scss/utilities/_stretched-link.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Stretched link 3 | // 4 | 5 | .stretched-link { 6 | &::after { 7 | position: absolute; 8 | top: 0; 9 | right: 0; 10 | bottom: 0; 11 | left: 0; 12 | z-index: 1; 13 | // Just in case `pointer-events: none` is set on a parent 14 | pointer-events: auto; 15 | content: ""; 16 | // IE10 bugfix, see https://stackoverflow.com/questions/16947967/ie10-hover-pseudo-class-doesnt-work-without-background-color 17 | background-color: rgba(0, 0, 0, 0); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /scss/mixins/_list-group.scss: -------------------------------------------------------------------------------- 1 | // List Groups 2 | 3 | @mixin list-group-item-variant($state, $background, $color) { 4 | .list-group-item-#{$state} { 5 | color: $color; 6 | background-color: $background; 7 | 8 | &.list-group-item-action { 9 | @include hover-focus() { 10 | color: $color; 11 | background-color: darken($background, 5%); 12 | } 13 | 14 | &.active { 15 | color: $white; 16 | background-color: $color; 17 | border-color: $color; 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /site/_includes/callout-info-mediaqueries-breakpoints.md: -------------------------------------------------------------------------------- 1 | {% capture callout %} 2 | Note that since browsers do not currently support [range context queries](https://www.w3.org/TR/mediaqueries-4/#range-context), we work around the limitations of [`min-` and `max-` prefixes](https://www.w3.org/TR/mediaqueries-4/#mq-min-max) and viewports with fractional widths (which can occur under certain conditions on high-dpi devices, for instance) by using values with higher precision for these comparisons. 3 | {% endcapture %} 4 | {% include callout.html content=callout type="info" %} 5 | -------------------------------------------------------------------------------- /scss/mixins/_text-emphasis.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Typography 4 | 5 | @mixin text-emphasis-variant($parent, $color, $ignore-warning: false) { 6 | #{$parent} { 7 | color: $color !important; 8 | } 9 | @if $emphasized-link-hover-darken-percentage != 0 { 10 | a#{$parent} { 11 | @include hover-focus() { 12 | color: darken($color, $emphasized-link-hover-darken-percentage) !important; 13 | } 14 | } 15 | } 16 | @include deprecate("`text-emphasis-variant()`", "v4.4.0", "v5", $ignore-warning); 17 | } 18 | -------------------------------------------------------------------------------- /site/_data/breakpoints.yml: -------------------------------------------------------------------------------- 1 | - breakpoint: xs 2 | abbr: "" 3 | name: Extra small 4 | min-width: 0px 5 | container: "" 6 | 7 | - breakpoint: sm 8 | abbr: -sm 9 | name: Small 10 | min-width: 576px 11 | container: 540px 12 | 13 | - breakpoint: md 14 | abbr: -md 15 | name: Medium 16 | min-width: 768px 17 | container: 720px 18 | 19 | - breakpoint: lg 20 | abbr: -lg 21 | name: Large 22 | min-width: 992px 23 | container: 960px 24 | 25 | - breakpoint: xl 26 | abbr: -xl 27 | name: Extra large 28 | min-width: 1200px 29 | container: 1140px 30 | -------------------------------------------------------------------------------- /package.js: -------------------------------------------------------------------------------- 1 | // package metadata file for Meteor.js 2 | 3 | Package.describe({ 4 | name: 'twbs:bootstrap', // https://atmospherejs.com/twbs/bootstrap 5 | summary: 'The most popular front-end framework for developing responsive, mobile first projects on the web.', 6 | version: '4.5.3', 7 | git: 'https://github.com/twbs/bootstrap.git' 8 | }); 9 | 10 | Package.onUse(function (api) { 11 | api.versionsFrom('METEOR@1.0'); 12 | api.use('jquery', 'client'); 13 | api.addFiles([ 14 | 'dist/css/bootstrap.css', 15 | 'dist/js/bootstrap.js' 16 | ], 'client'); 17 | }); 18 | -------------------------------------------------------------------------------- /scss/mixins/_reset-text.scss: -------------------------------------------------------------------------------- 1 | @mixin reset-text() { 2 | font-family: $font-family-base; 3 | // We deliberately do NOT reset font-size or word-wrap. 4 | font-style: normal; 5 | font-weight: $font-weight-normal; 6 | line-height: $line-height-base; 7 | text-align: left; // Fallback for where `start` is not supported 8 | text-align: start; 9 | text-decoration: none; 10 | text-shadow: none; 11 | text-transform: none; 12 | letter-spacing: normal; 13 | word-break: normal; 14 | word-spacing: normal; 15 | white-space: normal; 16 | line-break: auto; 17 | } 18 | -------------------------------------------------------------------------------- /site/_includes/callout-warning-color-assistive-technologies.md: -------------------------------------------------------------------------------- 1 | {% capture callout %} 2 | ##### Conveying meaning to assistive technologies 3 | 4 | Using color to add meaning only provides a visual indication, which will not be conveyed to users of assistive technologies – such as screen readers. Ensure that information denoted by the color is either obvious from the content itself (e.g. the visible text), or is included through alternative means, such as additional text hidden with the `.sr-only` class. 5 | {% endcapture %} 6 | {% include callout.html content=callout type="warning" %} 7 | -------------------------------------------------------------------------------- /site/_includes/icons/circle-square.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /js/tests/integration/rollup.bundle.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | 3 | const commonjs = require('@rollup/plugin-commonjs') 4 | const { babel } = require('@rollup/plugin-babel') 5 | const { nodeResolve } = require('@rollup/plugin-node-resolve') 6 | 7 | module.exports = { 8 | input: 'js/tests/integration/bundle.js', 9 | output: { 10 | file: 'js/coverage/bundle.js', 11 | format: 'iife' 12 | }, 13 | plugins: [ 14 | nodeResolve(), 15 | commonjs(), 16 | babel({ 17 | exclude: 'node_modules/**', 18 | babelHelpers: 'bundled' 19 | }) 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /scss/mixins/_pagination.scss: -------------------------------------------------------------------------------- 1 | // Pagination 2 | 3 | @mixin pagination-size($padding-y, $padding-x, $font-size, $line-height, $border-radius) { 4 | .page-link { 5 | padding: $padding-y $padding-x; 6 | @include font-size($font-size); 7 | line-height: $line-height; 8 | } 9 | 10 | .page-item { 11 | &:first-child { 12 | .page-link { 13 | @include border-left-radius($border-radius); 14 | } 15 | } 16 | &:last-child { 17 | .page-link { 18 | @include border-right-radius($border-radius); 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /site/_includes/icons/droplet-fill.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /site/_data/core-team.yml: -------------------------------------------------------------------------------- 1 | - name: Mark Otto 2 | user: mdo 3 | 4 | - name: Jacob Thornton 5 | user: fat 6 | 7 | - name: Chris Rebert 8 | user: cvrebert 9 | 10 | - name: XhmikosR 11 | user: xhmikosr 12 | 13 | - name: Patrick H. Lauke 14 | user: patrickhlauke 15 | 16 | - name: Gleb Mazovetskiy 17 | user: glebm 18 | 19 | - name: Johann-S 20 | user: johann-s 21 | 22 | - name: Andres Galante 23 | user: andresgalante 24 | 25 | - name: Martijn Cuppens 26 | user: martijncuppens 27 | 28 | - name: Shohei Yoshida 29 | user: ysds 30 | 31 | - name: Gaël Poupard 32 | user: ffoodd 33 | -------------------------------------------------------------------------------- /site/_includes/callout-danger-async-methods.md: -------------------------------------------------------------------------------- 1 | {% capture callout %} 2 | #### Asynchronous methods and transitions 3 | 4 | All API methods are **asynchronous** and start a **transition**. They return to the caller as soon as the transition is started but **before it ends**. In addition, a method call on a **transitioning component will be ignored**. 5 | 6 | [See our JavaScript documentation for more information]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/javascript/#asynchronous-functions-and-transitions). 7 | {% endcapture %} 8 | {% include callout.html content=callout type="danger" %} 9 | -------------------------------------------------------------------------------- /site/_includes/icons/code.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /scss/utilities/_sizing.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Width and height 4 | 5 | @each $prop, $abbrev in (width: w, height: h) { 6 | @each $size, $length in $sizes { 7 | .#{$abbrev}-#{$size} { #{$prop}: $length !important; } 8 | } 9 | } 10 | 11 | .mw-100 { max-width: 100% !important; } 12 | .mh-100 { max-height: 100% !important; } 13 | 14 | // Viewport additional helpers 15 | 16 | .min-vw-100 { min-width: 100vw !important; } 17 | .min-vh-100 { min-height: 100vh !important; } 18 | 19 | .vw-100 { width: 100vw !important; } 20 | .vh-100 { height: 100vh !important; } 21 | -------------------------------------------------------------------------------- /site/_includes/icons/opencollective.svg: -------------------------------------------------------------------------------- 1 | Open Collective -------------------------------------------------------------------------------- /site/docs/4.5/examples/album/album.css: -------------------------------------------------------------------------------- 1 | .jumbotron { 2 | padding-top: 3rem; 3 | padding-bottom: 3rem; 4 | margin-bottom: 0; 5 | background-color: #fff; 6 | } 7 | @media (min-width: 768px) { 8 | .jumbotron { 9 | padding-top: 6rem; 10 | padding-bottom: 6rem; 11 | } 12 | } 13 | 14 | .jumbotron p:last-child { 15 | margin-bottom: 0; 16 | } 17 | 18 | .jumbotron h1 { 19 | font-weight: 300; 20 | } 21 | 22 | .jumbotron .container { 23 | max-width: 40rem; 24 | } 25 | 26 | footer { 27 | padding-top: 3rem; 28 | padding-bottom: 3rem; 29 | } 30 | 31 | footer p { 32 | margin-bottom: .25rem; 33 | } 34 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/album/album.rtl.css: -------------------------------------------------------------------------------- 1 | .jumbotron { 2 | padding-top: 3rem; 3 | padding-bottom: 3rem; 4 | margin-bottom: 0; 5 | background-color: #fff; 6 | } 7 | @media (min-width: 768px) { 8 | .jumbotron { 9 | padding-top: 6rem; 10 | padding-bottom: 6rem; 11 | } 12 | } 13 | 14 | .jumbotron p:last-child { 15 | margin-bottom: 0; 16 | } 17 | 18 | .jumbotron h1 { 19 | font-weight: 300; 20 | } 21 | 22 | .jumbotron .container { 23 | max-width: 40rem; 24 | } 25 | 26 | footer { 27 | padding-top: 3rem; 28 | padding-bottom: 3rem; 29 | } 30 | 31 | footer p { 32 | margin-bottom: .25rem; 33 | } 34 | -------------------------------------------------------------------------------- /.github/workflows/codeql.yml: -------------------------------------------------------------------------------- 1 | name: "Code Scanning - Action" 2 | 3 | on: 4 | push: 5 | schedule: 6 | - cron: "0 0 * * 0" 7 | 8 | jobs: 9 | CodeQL-Build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Checkout repository 14 | uses: actions/checkout@v2 15 | 16 | - name: Initialize CodeQL 17 | uses: github/codeql-action/init@v1 18 | with: 19 | languages: javascript 20 | 21 | - name: Autobuild 22 | uses: github/codeql-action/autobuild@v1 23 | 24 | - name: Perform CodeQL Analysis 25 | uses: github/codeql-action/analyze@v1 26 | -------------------------------------------------------------------------------- /scss/_utilities.scss: -------------------------------------------------------------------------------- 1 | @import "utilities/align"; 2 | @import "utilities/background"; 3 | @import "utilities/borders"; 4 | @import "utilities/clearfix"; 5 | @import "utilities/display"; 6 | @import "utilities/embed"; 7 | @import "utilities/flex"; 8 | @import "utilities/float"; 9 | @import "utilities/interactions"; 10 | @import "utilities/overflow"; 11 | @import "utilities/position"; 12 | @import "utilities/screenreaders"; 13 | @import "utilities/shadows"; 14 | @import "utilities/sizing"; 15 | @import "utilities/spacing"; 16 | @import "utilities/stretched-link"; 17 | @import "utilities/text"; 18 | @import "utilities/visibility"; 19 | -------------------------------------------------------------------------------- /scss/mixins/_box-shadow.scss: -------------------------------------------------------------------------------- 1 | @mixin box-shadow($shadow...) { 2 | @if $enable-shadows { 3 | $result: (); 4 | 5 | @if (length($shadow) == 1) { 6 | // We can pass `@include box-shadow(none);` 7 | $result: $shadow; 8 | } @else { 9 | // Filter to avoid invalid properties for example `box-shadow: none, 1px 1px black;` 10 | @for $i from 1 through length($shadow) { 11 | @if nth($shadow, $i) != "none" { 12 | $result: append($result, nth($shadow, $i), "comma"); 13 | } 14 | } 15 | } 16 | @if (length($result) > 0) { 17 | box-shadow: $result; 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /scss/utilities/_display.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // 4 | // Utilities for common `display` values 5 | // 6 | 7 | @each $breakpoint in map-keys($grid-breakpoints) { 8 | @include media-breakpoint-up($breakpoint) { 9 | $infix: breakpoint-infix($breakpoint, $grid-breakpoints); 10 | 11 | @each $value in $displays { 12 | .d#{$infix}-#{$value} { display: $value !important; } 13 | } 14 | } 15 | } 16 | 17 | 18 | // 19 | // Utilities for toggling `display` in print 20 | // 21 | 22 | @media print { 23 | @each $value in $displays { 24 | .d-print-#{$value} { display: $value !important; } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /scss/utilities/_position.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Common values 4 | @each $position in $positions { 5 | .position-#{$position} { position: $position !important; } 6 | } 7 | 8 | // Shorthand 9 | 10 | .fixed-top { 11 | position: fixed; 12 | top: 0; 13 | right: 0; 14 | left: 0; 15 | z-index: $zindex-fixed; 16 | } 17 | 18 | .fixed-bottom { 19 | position: fixed; 20 | right: 0; 21 | bottom: 0; 22 | left: 0; 23 | z-index: $zindex-fixed; 24 | } 25 | 26 | .sticky-top { 27 | @supports (position: sticky) { 28 | position: sticky; 29 | top: 0; 30 | z-index: $zindex-sticky; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for a new feature in Bootstrap. 4 | title: '' 5 | labels: feature 6 | assignees: '' 7 | 8 | --- 9 | 10 | Before opening: 11 | 12 | - [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue) 13 | - Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/v4-dev/.github/CONTRIBUTING.md) 14 | 15 | Feature requests must include: 16 | 17 | - As much detail as possible for what we should add and why it's important to Bootstrap 18 | - Relevant links to prior art, screenshots, or live demos whenever possible 19 | -------------------------------------------------------------------------------- /scss/mixins/_deprecate.scss: -------------------------------------------------------------------------------- 1 | // Deprecate mixin 2 | // 3 | // This mixin can be used to deprecate mixins or functions. 4 | // `$enable-deprecation-messages` is a global variable, `$ignore-warning` is a variable that can be passed to 5 | // some deprecated mixins to suppress the warning (for example if the mixin is still be used in the current version of Bootstrap) 6 | @mixin deprecate($name, $deprecate-version, $remove-version, $ignore-warning: false) { 7 | @if ($enable-deprecation-messages != false and $ignore-warning != true) { 8 | @warn "#{$name} has been deprecated as of #{$deprecate-version}. It will be removed entirely in #{$remove-version}."; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_footer.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Footer 3 | // 4 | 5 | .bd-footer { 6 | @include font-size(.875rem); 7 | text-align: center; 8 | background-color: #f7f7f7; 9 | 10 | a { 11 | font-weight: 600; 12 | color: $gray-700; 13 | 14 | &:hover, 15 | &:focus { 16 | color: $link-color; 17 | } 18 | } 19 | 20 | p { 21 | margin-bottom: 0; 22 | } 23 | 24 | @include media-breakpoint-up(sm) { 25 | text-align: left; 26 | } 27 | } 28 | 29 | .bd-footer-links { 30 | padding-left: 0; 31 | margin-bottom: 1rem; 32 | 33 | li { 34 | display: inline-block; 35 | 36 | + li { 37 | margin-left: 1rem; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/manifest.json: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | { 4 | "name": "Bootstrap", 5 | "short_name": "Bootstrap", 6 | "icons": [ 7 | { 8 | "src": "{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/android-chrome-192x192.png", 9 | "sizes": "192x192", 10 | "type": "image/png" 11 | }, 12 | { 13 | "src": "{{ site.baseurl }}/docs/{{ site.docs_version }}/assets/img/favicons/android-chrome-512x512.png", 14 | "sizes": "512x512", 15 | "type": "image/png" 16 | } 17 | ], 18 | "start_url": "/?utm_source=a2hs", 19 | "theme_color": "#563d7c", 20 | "background_color": "#563d7c", 21 | "display": "standalone" 22 | } 23 | -------------------------------------------------------------------------------- /.github/workflows/dart-sass.yml: -------------------------------------------------------------------------------- 1 | name: CSS (Dart Sass) 2 | on: [push, pull_request] 3 | env: 4 | CI: true 5 | NODE: 12.x 6 | 7 | jobs: 8 | css: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - name: Clone repository 13 | uses: actions/checkout@v2 14 | 15 | - name: Set Node.js version 16 | uses: actions/setup-node@v1 17 | with: 18 | node-version: "${{ env.NODE }}" 19 | 20 | - name: Build CSS with Dart Sass 21 | run: | 22 | npx --package sass@latest sass --version 23 | npx --package sass@latest sass --style expanded --source-map --embed-sources --no-error-css scss/:dist-sass/css/ 24 | ls -Al dist-sass/css 25 | -------------------------------------------------------------------------------- /js/tests/unit/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "../../../.eslintrc.json" 4 | ], 5 | "parserOptions": { 6 | "ecmaVersion": 5, 7 | "sourceType": "script" 8 | }, 9 | "env": { 10 | "es6": false, 11 | "jquery": true, 12 | "qunit": true 13 | }, 14 | "globals": { 15 | "bootstrap": false, 16 | "sinon": false, 17 | "Util": false, 18 | "Alert": false, 19 | "Button": false, 20 | "Carousel": false, 21 | "Simulator": false, 22 | "Toast": false 23 | }, 24 | "rules": { 25 | "no-var": "off", 26 | "object-shorthand": "off", 27 | "prefer-arrow-callback": "off", 28 | "prefer-template": "off", 29 | "prefer-rest-params": "off" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /scss/_root.scss: -------------------------------------------------------------------------------- 1 | // Do not forget to update getting-started/theming.md! 2 | :root { 3 | // Custom variable values only support SassScript inside `#{}`. 4 | @each $color, $value in $colors { 5 | --#{$color}: #{$value}; 6 | } 7 | 8 | @each $color, $value in $theme-colors { 9 | --#{$color}: #{$value}; 10 | } 11 | 12 | @each $bp, $value in $grid-breakpoints { 13 | --breakpoint-#{$bp}: #{$value}; 14 | } 15 | 16 | // Use `inspect` for lists so that quoted items keep the quotes. 17 | // See https://github.com/sass/sass/issues/2383#issuecomment-336349172 18 | --font-family-sans-serif: #{inspect($font-family-sans-serif)}; 19 | --font-family-monospace: #{inspect($font-family-monospace)}; 20 | } 21 | -------------------------------------------------------------------------------- /scss/bootstrap-grid.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Grid v4.5.3 (https://getbootstrap.com/) 3 | * Copyright 2011-2020 The Bootstrap Authors 4 | * Copyright 2011-2020 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | 8 | html { 9 | box-sizing: border-box; 10 | -ms-overflow-style: scrollbar; 11 | } 12 | 13 | *, 14 | *::before, 15 | *::after { 16 | box-sizing: inherit; 17 | } 18 | 19 | @import "functions"; 20 | @import "variables"; 21 | 22 | @import "mixins/breakpoints"; 23 | @import "mixins/grid-framework"; 24 | @import "mixins/grid"; 25 | 26 | @import "grid"; 27 | @import "utilities/display"; 28 | @import "utilities/flex"; 29 | @import "utilities/spacing"; 30 | -------------------------------------------------------------------------------- /site/docs/4.5/about/translations.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Translations 4 | description: Links to community-translated Bootstrap documentation sites. 5 | group: about 6 | --- 7 | 8 | Community members have translated Bootstrap's documentation into various languages. None are officially supported and they may not always be up to date. 9 | 10 | 15 | 16 | **We don't help organize or host translations, we just link to them.** 17 | 18 | Finished a new or better translation? Open a pull request to add it to our list. 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore docs files 2 | /_gh_pages/ 3 | /site/.jekyll-cache 4 | /site/.jekyll-metadata 5 | /site/docs/**/dist/ 6 | # Hugo folders 7 | /resources/ 8 | 9 | # Ignore ruby/bundler files 10 | /.bundle/ 11 | /vendor/ 12 | /.ruby-version 13 | 14 | # Numerous always-ignore extensions 15 | *.diff 16 | *.err 17 | *.log 18 | *.orig 19 | *.rej 20 | *.swo 21 | *.swp 22 | *.vi 23 | *.zip 24 | *~ 25 | 26 | # OS or Editor folders 27 | ._* 28 | .cache 29 | .DS_Store 30 | .idea 31 | .project 32 | .settings 33 | .tmproj 34 | *.esproj 35 | *.sublime-project 36 | *.sublime-workspace 37 | nbproject 38 | Thumbs.db 39 | /.vscode/ 40 | # Local Netlify folder 41 | .netlify 42 | 43 | # Komodo 44 | .komodotools 45 | *.komodoproject 46 | 47 | # Folders to ignore 48 | /js/coverage/ 49 | /node_modules/ 50 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_clipboard-js.scss: -------------------------------------------------------------------------------- 1 | // clipboard.js 2 | // 3 | // JS-based `Copy` buttons for code snippets. 4 | 5 | .bd-clipboard { 6 | position: relative; 7 | display: none; 8 | float: right #{"/*!rtl:ignore*/"}; 9 | 10 | + .highlight { 11 | margin-top: 0; 12 | } 13 | 14 | @include media-breakpoint-up(md) { 15 | display: block; 16 | } 17 | } 18 | 19 | .btn-clipboard { 20 | position: absolute; 21 | top: .5rem; 22 | right: .5rem #{"/*!rtl:ignore*/"}; 23 | z-index: 10; 24 | display: block; 25 | padding: .25rem .5rem; 26 | @include font-size(75%); 27 | color: #818a91; 28 | background-color: transparent; 29 | border: 0; 30 | @include border-radius(); 31 | 32 | &:hover { 33 | color: $white; 34 | background-color: #027de7; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /site/docs/4.5/getting-started/best-practices.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Best practices 4 | description: Learn about some of the best practices we've gathered from years of working on and using Bootstrap. 5 | group: getting-started 6 | --- 7 | 8 | We've designed and developed Bootstrap to work in a number of environments. Here are some of the best practices we've gathered from years of working on and using it ourselves. 9 | 10 | {% capture callout %} 11 | **Heads up!** This copy is a work in progress. 12 | {% endcapture %} 13 | {% include callout.html content=callout type="info" %} 14 | 15 | ### General outline 16 | 17 | - Working with CSS 18 | - Working with Sass files 19 | - Building new CSS components 20 | - Working with flexbox 21 | - Ask in [Slack](https://bootstrap-slack.herokuapp.com/) 22 | -------------------------------------------------------------------------------- /site/docs/4.5/utilities/interactions.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Interactions 4 | description: Utility classes that change how users interact with the contents of a website. 5 | group: utilities 6 | --- 7 | 8 | ## Text selection 9 | 10 | Change how the content is selected when the user interacts with it. 11 | 12 | {% capture example %} 13 |

This paragraph will be entirely selected when clicked by the user.

14 |

This paragraph has the default select behavior.

15 |

This paragraph will not be selectable when clicked by the user.

16 | {% endcapture %} 17 | {% include example.html content=example %} 18 | 19 | Customize the available classes by changing the `$user-selects` Sass list in `_variables.scss`. 20 | -------------------------------------------------------------------------------- /scss/mixins/_transition.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable property-disallowed-list 2 | @mixin transition($transition...) { 3 | @if length($transition) == 0 { 4 | $transition: $transition-base; 5 | } 6 | 7 | @if length($transition) > 1 { 8 | @each $value in $transition { 9 | @if $value == null or $value == none { 10 | @warn "The keyword 'none' or 'null' must be used as a single argument."; 11 | } 12 | } 13 | } 14 | 15 | @if $enable-transitions { 16 | @if nth($transition, 1) != null { 17 | transition: $transition; 18 | } 19 | 20 | @if $enable-prefers-reduced-motion-media-query and nth($transition, 1) != null and nth($transition, 1) != none { 21 | @media (prefers-reduced-motion: reduce) { 22 | transition: none; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/checkout/form-validation.js: -------------------------------------------------------------------------------- 1 | // Example starter JavaScript for disabling form submissions if there are invalid fields 2 | (function () { 3 | 'use strict' 4 | 5 | window.addEventListener('load', function () { 6 | // Fetch all the forms we want to apply custom Bootstrap validation styles to 7 | var forms = document.getElementsByClassName('needs-validation') 8 | 9 | // Loop over them and prevent submission 10 | Array.prototype.filter.call(forms, function (form) { 11 | form.addEventListener('submit', function (event) { 12 | if (form.checkValidity() === false) { 13 | event.preventDefault() 14 | event.stopPropagation() 15 | } 16 | 17 | form.classList.add('was-validated') 18 | }, false) 19 | }) 20 | }, false) 21 | })() 22 | -------------------------------------------------------------------------------- /scss/mixins/_background-variant.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | // Contextual backgrounds 4 | 5 | @mixin bg-variant($parent, $color, $ignore-warning: false) { 6 | #{$parent} { 7 | background-color: $color !important; 8 | } 9 | a#{$parent}, 10 | button#{$parent} { 11 | @include hover-focus() { 12 | background-color: darken($color, 10%) !important; 13 | } 14 | } 15 | @include deprecate("The `bg-variant` mixin", "v4.4.0", "v5", $ignore-warning); 16 | } 17 | 18 | @mixin bg-gradient-variant($parent, $color, $ignore-warning: false) { 19 | #{$parent} { 20 | background: $color linear-gradient(180deg, mix($body-bg, $color, 15%), $color) repeat-x !important; 21 | } 22 | @include deprecate("The `bg-gradient-variant` mixin", "v4.5.0", "v5", $ignore-warning); 23 | } 24 | -------------------------------------------------------------------------------- /site/_data/translations.yml: -------------------------------------------------------------------------------- 1 | - name: 中文(繁體) 2 | code: zh-tw 3 | description: Bootstrap 4 繁體中文手冊 4 | url: https://bootstrap.hexschool.com/ 5 | 6 | - name: Chinese 7 | code: zh 8 | description: Bootstrap 4 · 全球最流行的 HTML、CSS 和 JS 工具库。 9 | url: https://code.z01.com/v4/ 10 | 11 | - name: Chinese Simplified 12 | code: zh-CN 13 | description: Bootstrap · 全球最受欢迎的 HTML、CSS 和 JS 库。 14 | url: https://bootstrap-zh-cn.github.io/ 15 | 16 | - name: Brazilian Portuguese 17 | code: pt-BR 18 | description: Bootstrap 4 Português do Brasil 19 | url: https://getbootstrap.com.br/v4/ 20 | 21 | - name: Japanese 22 | code: ja 23 | description: Bootstrap 4 日本語リファレンス 24 | url: https://getbootstrap.jp/ 25 | 26 | - name: Korean 27 | code: ko 28 | description: Bootstrap 4 한국어 문서 29 | url: https://getbootstrap.kr/ 30 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/brand/bootstrap-solid.svg: -------------------------------------------------------------------------------- 1 | 2 | Bootstrap 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/brand/bootstrap-punchout.svg: -------------------------------------------------------------------------------- 1 | 2 | Bootstrap 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_ads.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important, selector-max-id 2 | 3 | // 4 | // Carbon ads 5 | // 6 | 7 | #carbonads { 8 | position: static; 9 | display: block; 10 | max-width: 400px; 11 | padding: 15px 15px 15px 160px; 12 | margin: 2rem 0; 13 | overflow: hidden; 14 | @include font-size(.8125rem); 15 | line-height: 1.4; 16 | text-align: left; 17 | background-color: rgba(0, 0, 0, .05); 18 | 19 | a { 20 | color: #333; 21 | text-decoration: none; 22 | } 23 | 24 | @include media-breakpoint-up(sm) { 25 | max-width: 330px; 26 | @include border-radius(4px); 27 | } 28 | } 29 | 30 | .carbon-img { 31 | float: left; 32 | margin-left: -145px; 33 | } 34 | 35 | .carbon-poweredby { 36 | display: block; 37 | margin-top: .75rem; 38 | color: #777 !important; 39 | } 40 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | // Local docs variables 2 | $bd-purple: #563d7c; 3 | $bd-purple-bright: lighten(saturate($bd-purple, 5%), 15%); 4 | $bd-purple-light: lighten(saturate($bd-purple, 5%), 45%); 5 | $bd-dark: #2a2730; 6 | $bd-download: #ffe484; 7 | $bd-info: #5bc0de; 8 | $bd-warning: #f0ad4e; 9 | $bd-danger: #d9534f; 10 | $dropdown-active-icon: url("data:image/svg+xml,"); 11 | 12 | // Enable responsive font sizes for font sizes defined in the docs 13 | // The weird if test is made as a workaround to prevent a false fusv error. 14 | // 15 | $enable-responsive-font-sizes: if($enable-responsive-font-sizes, true, true); 16 | -------------------------------------------------------------------------------- /site/_includes/icons/twitter.svg: -------------------------------------------------------------------------------- 1 | Twitter -------------------------------------------------------------------------------- /site/docs/4.5/examples/sticky-footer/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: examples 3 | title: Sticky Footer Template 4 | extra_css: "sticky-footer.rtl.css" 5 | html_class: "h-100" 6 | body_class: "d-flex flex-column h-100" 7 | include_js: false 8 | --- 9 | 10 | 11 |
12 |
13 |

Sticky footer

14 |

Pin a footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.

15 |

Use the sticky footer with a fixed navbar if need be, too.

16 |
17 |
18 | 19 | 24 | -------------------------------------------------------------------------------- /site/docs/4.5/utilities/shadows.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Shadows 4 | description: Add or remove shadows to elements with box-shadow utilities. 5 | group: utilities 6 | --- 7 | 8 | ## Examples 9 | 10 | While shadows on components are disabled by default in Bootstrap and can be enabled via `$enable-shadows`, you can also quickly add or remove a shadow with our `box-shadow` utility classes. Includes support for `.shadow-none` and three default sizes (which have associated variables to match). 11 | 12 | {% capture example %} 13 |
No shadow
14 |
Small shadow
15 |
Regular shadow
16 |
Larger shadow
17 | {% endcapture %} 18 | {% include example.html content=example %} 19 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_callouts.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Callouts 3 | // 4 | 5 | .bd-callout { 6 | padding: 1.25rem; 7 | margin-top: 1.25rem; 8 | margin-bottom: 1.25rem; 9 | border: 1px solid #eee; 10 | border-left-width: .25rem; 11 | @include border-radius(); 12 | 13 | h4 { 14 | margin-top: 0; 15 | margin-bottom: .25rem; 16 | } 17 | 18 | p:last-child { 19 | margin-bottom: 0; 20 | } 21 | 22 | code { 23 | @include border-radius(); 24 | } 25 | 26 | + .bd-callout { 27 | margin-top: -.25rem; 28 | } 29 | } 30 | 31 | // Variations 32 | @mixin bs-callout-variant($color) { 33 | border-left-color: $color; 34 | 35 | h4 { color: $color; } 36 | } 37 | 38 | .bd-callout-info { @include bs-callout-variant($bd-info); } 39 | .bd-callout-warning { @include bs-callout-variant($bd-warning); } 40 | .bd-callout-danger { @include bs-callout-variant($bd-danger); } 41 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Tell us about a bug you may have identified in Bootstrap. 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | Before opening: 11 | 12 | - [Search for duplicate or closed issues](https://github.com/twbs/bootstrap/issues?utf8=%E2%9C%93&q=is%3Aissue) 13 | - [Validate](https://html5.validator.nu/) any HTML to avoid common problems 14 | - Read the [contributing guidelines](https://github.com/twbs/bootstrap/blob/v4-dev/.github/CONTRIBUTING.md) 15 | 16 | Bug reports must include: 17 | 18 | - Operating system and version (Windows, macOS, Android, iOS) 19 | - Browser and version (Chrome, Firefox, Safari, Internet Explorer, Microsoft Edge, Opera, Android Browser) 20 | - A [reduced test case](https://css-tricks.com/reduced-test-cases/) or suggested fix using [CodePen](https://codepen.io/) or [JS Bin](https://jsbin.com/) 21 | -------------------------------------------------------------------------------- /site/_includes/stylesheet.html: -------------------------------------------------------------------------------- 1 | 2 | {%- if jekyll.environment == "production" or jekyll.environment == "netlify" %} 3 | 4 | {% else %} 5 | 6 | {% endif -%} 7 | 8 | {%- if page.layout == "docs" or page.layout != "examples" -%} 9 | 10 | {% if page.layout == "docs" %} 11 | 12 | {% endif %} 13 | {% if page.layout != "examples" %} 14 | 15 | {% endif %} 16 | {%- endif -%} 17 | -------------------------------------------------------------------------------- /site/sw.js: -------------------------------------------------------------------------------- 1 | // NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT 2 | // IT'S ALL JUST JUNK FOR OUR DOCS! 3 | // ++++++++++++++++++++++++++++++++++++++++++ 4 | 5 | (function () { 6 | 'use strict' 7 | 8 | if ('serviceWorker' in navigator) { 9 | window.addEventListener('load', function () { 10 | navigator.serviceWorker.getRegistrations().then(function (registrations) { 11 | for (var registration of registrations) { 12 | registration.unregister() 13 | .then(function () { 14 | return self.clients.matchAll() 15 | }) 16 | .then(function (clients) { 17 | clients.forEach(function (client) { 18 | if (client.url && 'navigate' in client) { 19 | client.navigate(client.url) 20 | } 21 | }) 22 | }) 23 | } 24 | }) 25 | }) 26 | } 27 | }()) 28 | -------------------------------------------------------------------------------- /site/_includes/icons/bootstrap.svg: -------------------------------------------------------------------------------- 1 | Bootstrap -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "twbs/bootstrap", 3 | "description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", 4 | "keywords": [ 5 | "css", 6 | "js", 7 | "sass", 8 | "mobile-first", 9 | "responsive", 10 | "front-end", 11 | "framework", 12 | "web" 13 | ], 14 | "homepage": "https://getbootstrap.com/", 15 | "authors": [ 16 | { 17 | "name": "Mark Otto", 18 | "email": "markdotto@gmail.com" 19 | }, 20 | { 21 | "name": "Jacob Thornton", 22 | "email": "jacobthornton@gmail.com" 23 | } 24 | ], 25 | "support": { 26 | "issues": "https://github.com/twbs/bootstrap/issues" 27 | }, 28 | "license": "MIT", 29 | "extra": { 30 | "branch-alias": { 31 | "dev-master": "3.3.x-dev" 32 | } 33 | }, 34 | "replace": { 35 | "twitter/bootstrap": "self.version" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /js/src/index.js: -------------------------------------------------------------------------------- 1 | import Alert from './alert' 2 | import Button from './button' 3 | import Carousel from './carousel' 4 | import Collapse from './collapse' 5 | import Dropdown from './dropdown' 6 | import Modal from './modal' 7 | import Popover from './popover' 8 | import Scrollspy from './scrollspy' 9 | import Tab from './tab' 10 | import Toast from './toast' 11 | import Tooltip from './tooltip' 12 | import Util from './util' 13 | 14 | /** 15 | * -------------------------------------------------------------------------- 16 | * Bootstrap (v4.5.3): index.js 17 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 18 | * -------------------------------------------------------------------------- 19 | */ 20 | 21 | export { 22 | Util, 23 | Alert, 24 | Button, 25 | Carousel, 26 | Collapse, 27 | Dropdown, 28 | Modal, 29 | Popover, 30 | Scrollspy, 31 | Tab, 32 | Toast, 33 | Tooltip 34 | } 35 | -------------------------------------------------------------------------------- /scss/mixins/_hover.scss: -------------------------------------------------------------------------------- 1 | // Hover mixin and `$enable-hover-media-query` are deprecated. 2 | // 3 | // Originally added during our alphas and maintained during betas, this mixin was 4 | // designed to prevent `:hover` stickiness on iOS-an issue where hover styles 5 | // would persist after initial touch. 6 | // 7 | // For backward compatibility, we've kept these mixins and updated them to 8 | // always return their regular pseudo-classes instead of a shimmed media query. 9 | // 10 | // Issue: https://github.com/twbs/bootstrap/issues/25195 11 | 12 | @mixin hover() { 13 | &:hover { @content; } 14 | } 15 | 16 | @mixin hover-focus() { 17 | &:hover, 18 | &:focus { 19 | @content; 20 | } 21 | } 22 | 23 | @mixin plain-hover-focus() { 24 | &, 25 | &:hover, 26 | &:focus { 27 | @content; 28 | } 29 | } 30 | 31 | @mixin hover-focus-active() { 32 | &:hover, 33 | &:focus, 34 | &:active { 35 | @content; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /site/_includes/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | {%- if page.title -%} 12 | {{ page.title | smartify }} · {{ site.title | smartify }} v{{ site.docs_version }} 13 | {%- else -%} 14 | {{ site.title | smartify }} · {{ site.description | smartify }} 15 | {%- endif -%} 16 | 17 | 18 | 19 | 20 | {% include stylesheet.html %} 21 | {% include favicons.html %} 22 | {% include social.html %} 23 | {% include analytics.html %} 24 | -------------------------------------------------------------------------------- /js/dist/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * -------------------------------------------------------------------------- 3 | * Bootstrap (v4.5.3): index.js 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | * -------------------------------------------------------------------------- 6 | */ 7 | (function ($) { 8 | if (typeof $ === 'undefined') { 9 | throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.'); 10 | } 11 | 12 | var version = $.fn.jquery.split(' ')[0].split('.'); 13 | var minMajor = 1; 14 | var ltMajor = 2; 15 | var minMinor = 9; 16 | var minPatch = 1; 17 | var maxMajor = 4; 18 | 19 | if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { 20 | throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0'); 21 | } 22 | })($); 23 | -------------------------------------------------------------------------------- /site/docs/4.5/utilities/screen-readers.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Screen readers 4 | description: Use screen reader utilities to hide elements on all devices except screen readers. 5 | group: utilities 6 | --- 7 | 8 | Hide an element to all devices **except screen readers** with `.sr-only`. Combine `.sr-only` with `.sr-only-focusable` to show the element again when it's focused (e.g. by a keyboard-only user). Can also be used as mixins. 9 | 10 | {%- comment -%} 11 | Necessary for following [accessibility best practices]({{ site.baseurl }}/docs/{{ site.docs_version }}/getting-started/#accessibility). 12 | {%- endcomment -%} 13 | 14 | {% capture example %} 15 | Skip to main content 16 | {% endcapture %} 17 | {% include example.html content=example %} 18 | 19 | {% highlight scss %} 20 | // Usage as a mixin 21 | .skip-navigation { 22 | @include sr-only; 23 | @include sr-only-focusable; 24 | } 25 | {% endhighlight %} 26 | -------------------------------------------------------------------------------- /scss/mixins/_table-row.scss: -------------------------------------------------------------------------------- 1 | // Tables 2 | 3 | @mixin table-row-variant($state, $background, $border: null) { 4 | // Exact selectors below required to override `.table-striped` and prevent 5 | // inheritance to nested tables. 6 | .table-#{$state} { 7 | &, 8 | > th, 9 | > td { 10 | background-color: $background; 11 | } 12 | 13 | @if $border != null { 14 | th, 15 | td, 16 | thead th, 17 | tbody + tbody { 18 | border-color: $border; 19 | } 20 | } 21 | } 22 | 23 | // Hover states for `.table-hover` 24 | // Note: this is not available for cells or rows within `thead` or `tfoot`. 25 | .table-hover { 26 | $hover-background: darken($background, 5%); 27 | 28 | .table-#{$state} { 29 | @include hover() { 30 | background-color: $hover-background; 31 | 32 | > td, 33 | > th { 34 | background-color: $hover-background; 35 | } 36 | } 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /site/_layouts/simple.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |
7 |

{{ page.title | smartify }}

8 |

{{ page.description | smartify }}

9 | {%- if page.title == "Examples" -%} 10 | 14 | {%- endif -%} 15 |
16 | {% include ads.html %} 17 |
18 | 19 |
20 | {{ content }} 21 |
22 | -------------------------------------------------------------------------------- /scss/mixins/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Only display content to screen readers 2 | // 3 | // See: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/ 4 | // See: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/ 5 | 6 | @mixin sr-only() { 7 | position: absolute; 8 | width: 1px; 9 | height: 1px; 10 | padding: 0; 11 | margin: -1px; // Fix for https://github.com/twbs/bootstrap/issues/25686 12 | overflow: hidden; 13 | clip: rect(0, 0, 0, 0); 14 | white-space: nowrap; 15 | border: 0; 16 | } 17 | 18 | // Use in conjunction with .sr-only to only display content when it's focused. 19 | // 20 | // Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 21 | // 22 | // Credit: HTML5 Boilerplate 23 | 24 | @mixin sr-only-focusable() { 25 | &:active, 26 | &:focus { 27 | position: static; 28 | width: auto; 29 | height: auto; 30 | overflow: visible; 31 | clip: auto; 32 | white-space: normal; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/brand/bootstrap-outline.svg: -------------------------------------------------------------------------------- 1 | 2 | Bootstrap 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/sign-in/signin.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | height: 100%; 4 | } 5 | 6 | body { 7 | display: -ms-flexbox; 8 | display: flex; 9 | -ms-flex-align: center; 10 | align-items: center; 11 | padding-top: 40px; 12 | padding-bottom: 40px; 13 | background-color: #f5f5f5; 14 | } 15 | 16 | .form-signin { 17 | width: 100%; 18 | max-width: 330px; 19 | padding: 15px; 20 | margin: auto; 21 | } 22 | .form-signin .checkbox { 23 | font-weight: 400; 24 | } 25 | .form-signin .form-control { 26 | position: relative; 27 | box-sizing: border-box; 28 | height: auto; 29 | padding: 10px; 30 | font-size: 16px; 31 | } 32 | .form-signin .form-control:focus { 33 | z-index: 2; 34 | } 35 | .form-signin input[type="email"] { 36 | margin-bottom: -1px; 37 | border-bottom-right-radius: 0; 38 | border-bottom-left-radius: 0; 39 | } 40 | .form-signin input[type="password"] { 41 | margin-bottom: 10px; 42 | border-top-left-radius: 0; 43 | border-top-right-radius: 0; 44 | } 45 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/sign-in/signin.rtl.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | height: 100%; 4 | } 5 | 6 | body { 7 | display: -ms-flexbox; 8 | display: flex; 9 | -ms-flex-align: center; 10 | align-items: center; 11 | padding-top: 40px; 12 | padding-bottom: 40px; 13 | background-color: #f5f5f5; 14 | } 15 | 16 | .form-signin { 17 | width: 100%; 18 | max-width: 330px; 19 | padding: 15px; 20 | margin: auto; 21 | } 22 | .form-signin .checkbox { 23 | font-weight: 400; 24 | } 25 | .form-signin .form-control { 26 | position: relative; 27 | box-sizing: border-box; 28 | height: auto; 29 | padding: 10px; 30 | font-size: 16px; 31 | } 32 | .form-signin .form-control:focus { 33 | z-index: 2; 34 | } 35 | .form-signin input[type="email"] { 36 | margin-bottom: -1px; 37 | border-bottom-left-radius: 0; 38 | border-bottom-right-radius: 0; 39 | } 40 | .form-signin input[type="password"] { 41 | margin-bottom: 10px; 42 | border-top-right-radius: 0; 43 | border-top-left-radius: 0; 44 | } 45 | -------------------------------------------------------------------------------- /.github/workflows/css.yml: -------------------------------------------------------------------------------- 1 | name: CSS 2 | on: [push, pull_request] 3 | env: 4 | CI: true 5 | NODE: 12.x 6 | 7 | jobs: 8 | css: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - name: Clone repository 13 | uses: actions/checkout@v2 14 | 15 | - name: Set Node.js version 16 | uses: actions/setup-node@v1 17 | with: 18 | node-version: "${{ env.NODE }}" 19 | 20 | - name: Set up npm cache 21 | uses: actions/cache@v2 22 | with: 23 | path: ~/.npm 24 | key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} 25 | restore-keys: | 26 | ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} 27 | ${{ runner.OS }}-node-v${{ env.NODE }}- 28 | 29 | - name: Install npm dependencies 30 | run: npm ci 31 | 32 | - name: Build CSS 33 | run: npm run css 34 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint 2 | on: [push, pull_request] 3 | env: 4 | CI: true 5 | NODE: 12.x 6 | 7 | jobs: 8 | lint: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - name: Clone repository 13 | uses: actions/checkout@v2 14 | 15 | - name: Set Node.js version 16 | uses: actions/setup-node@v1 17 | with: 18 | node-version: "${{ env.NODE }}" 19 | 20 | - name: Set up npm cache 21 | uses: actions/cache@v2 22 | with: 23 | path: ~/.npm 24 | key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} 25 | restore-keys: | 26 | ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} 27 | ${{ runner.OS }}-node-v${{ env.NODE }}- 28 | 29 | - name: Install npm dependencies 30 | run: npm ci 31 | 32 | - name: Lint 33 | run: npm run lint 34 | -------------------------------------------------------------------------------- /site/_includes/favicons.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /scss/utilities/_embed.scss: -------------------------------------------------------------------------------- 1 | // Credit: Nicolas Gallagher and SUIT CSS. 2 | 3 | .embed-responsive { 4 | position: relative; 5 | display: block; 6 | width: 100%; 7 | padding: 0; 8 | overflow: hidden; 9 | 10 | &::before { 11 | display: block; 12 | content: ""; 13 | } 14 | 15 | .embed-responsive-item, 16 | iframe, 17 | embed, 18 | object, 19 | video { 20 | position: absolute; 21 | top: 0; 22 | bottom: 0; 23 | left: 0; 24 | width: 100%; 25 | height: 100%; 26 | border: 0; 27 | } 28 | } 29 | 30 | @each $embed-responsive-aspect-ratio in $embed-responsive-aspect-ratios { 31 | $embed-responsive-aspect-ratio-x: nth($embed-responsive-aspect-ratio, 1); 32 | $embed-responsive-aspect-ratio-y: nth($embed-responsive-aspect-ratio, 2); 33 | 34 | .embed-responsive-#{$embed-responsive-aspect-ratio-x}by#{$embed-responsive-aspect-ratio-y} { 35 | &::before { 36 | padding-top: percentage($embed-responsive-aspect-ratio-y / $embed-responsive-aspect-ratio-x); 37 | } 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/sign-in/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: examples 3 | title: Signin Template 4 | extra_css: "signin.rtl.css" 5 | body_class: "text-center" 6 | include_js: false 7 | --- 8 | 9 |
10 | 11 |

Please sign in

12 | 13 | 14 | 15 | 16 |
17 | 20 |
21 | 22 |

© 2017-{{ site.time | date: "%Y" }}

23 |
24 | -------------------------------------------------------------------------------- /site/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "es6": false, 5 | "jquery": true 6 | }, 7 | "parserOptions": { 8 | "ecmaVersion": 5, 9 | "sourceType": "script" 10 | }, 11 | "extends": [ 12 | "plugin:unicorn/recommended", 13 | "xo", 14 | "xo/browser" 15 | ], 16 | "rules": { 17 | "capitalized-comments": "off", 18 | "indent": [ 19 | "error", 20 | 2, 21 | { 22 | "MemberExpression": "off", 23 | "SwitchCase": 1 24 | } 25 | ], 26 | "object-curly-spacing": [ 27 | "error", 28 | "always" 29 | ], 30 | "semi": [ 31 | "error", 32 | "never" 33 | ], 34 | "strict": "error", 35 | "unicorn/no-for-loop": "off", 36 | "unicorn/no-null": "off", 37 | "unicorn/prefer-array-find": "off", 38 | "unicorn/prefer-dataset": "off", 39 | "unicorn/prefer-includes": "off", 40 | "unicorn/prefer-number-properties": "off", 41 | "unicorn/prefer-node-append": "off", 42 | "unicorn/prefer-query-selector": "off", 43 | "unicorn/prevent-abbreviations": "off" 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /site/docs/4.5/about/team.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Team 4 | description: An overview of the founding team and core contributors to Bootstrap. 5 | group: about 6 | --- 7 | 8 | Bootstrap is maintained by the founding team and a small group of invaluable core contributors, with the massive support and involvement of our community. 9 | 10 |
11 | {% for member in site.data.core-team %} 12 | 13 | @{{ member.user }} 14 | 15 | {{ member.name }} @{{ member.user }} 16 | 17 | 18 | {% endfor %} 19 |
20 | 21 | Get involved with Bootstrap development by [opening an issue]({{ site.repo }}/issues/new) or submitting a pull request. Read our [contributing guidelines]({{ site.repo }}/blob/v{{ site.current_version }}/.github/CONTRIBUTING.md) for information on how we develop. 22 | -------------------------------------------------------------------------------- /nuget/MyGet.ps1: -------------------------------------------------------------------------------- 1 | # set env vars usually set by MyGet (enable for local testing) 2 | #$env:SourcesPath = '..' 3 | #$env:NuGet = "./nuget.exe" # https://dist.nuget.org/win-x86-commandline/latest/nuget.exe 4 | 5 | $nuget = $env:NuGet 6 | 7 | Copy-Item $env:SourcesPath\LICENSE $env:SourcesPath\LICENSE.txt # has to be .txt extension, don't check in 8 | 9 | # parse the version number out of package.json 10 | $bsversionParts = ((Get-Content $env:SourcesPath\package.json) -join "`n" | ConvertFrom-Json).version.split('-', 2) # split the version on the '-' 11 | $bsversion = $bsversionParts[0] 12 | 13 | if ($bsversionParts.Length -gt 1) { 14 | $bsversion += '-' + $bsversionParts[1].replace('.', '').replace('-', '_') # strip out invalid chars from the PreRelease part 15 | } 16 | 17 | # create packages 18 | & $nuget pack "$env:SourcesPath\nuget\bootstrap.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion 19 | & $nuget pack "$env:SourcesPath\nuget\bootstrap.sass.nuspec" -Verbosity detailed -NonInteractive -NoPackageAnalysis -BasePath $env:SourcesPath -Version $bsversion 20 | -------------------------------------------------------------------------------- /scss/_close.scss: -------------------------------------------------------------------------------- 1 | .close { 2 | float: right; 3 | @include font-size($close-font-size); 4 | font-weight: $close-font-weight; 5 | line-height: 1; 6 | color: $close-color; 7 | text-shadow: $close-text-shadow; 8 | opacity: .5; 9 | 10 | // Override 's hover style 11 | @include hover() { 12 | color: $close-color; 13 | text-decoration: none; 14 | } 15 | 16 | &:not(:disabled):not(.disabled) { 17 | @include hover-focus() { 18 | opacity: .75; 19 | } 20 | } 21 | } 22 | 23 | // Additional properties for button version 24 | // iOS requires the button element instead of an anchor tag. 25 | // If you want the anchor version, it requires `href="#"`. 26 | // See https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile 27 | 28 | // stylelint-disable-next-line selector-no-qualifying-type 29 | button.close { 30 | padding: 0; 31 | background-color: transparent; 32 | border: 0; 33 | } 34 | 35 | // Future-proof disabling of clicks on `` elements 36 | 37 | // stylelint-disable-next-line selector-no-qualifying-type 38 | a.close.disabled { 39 | pointer-events: none; 40 | } 41 | -------------------------------------------------------------------------------- /scss/bootstrap.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v4.5.3 (https://getbootstrap.com/) 3 | * Copyright 2011-2020 The Bootstrap Authors 4 | * Copyright 2011-2020 Twitter, Inc. 5 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6 | */ 7 | 8 | @import "functions"; 9 | @import "variables"; 10 | @import "mixins"; 11 | @import "root"; 12 | @import "reboot"; 13 | @import "type"; 14 | @import "images"; 15 | @import "code"; 16 | @import "grid"; 17 | @import "tables"; 18 | @import "forms"; 19 | @import "buttons"; 20 | @import "transitions"; 21 | @import "dropdown"; 22 | @import "button-group"; 23 | @import "input-group"; 24 | @import "custom-forms"; 25 | @import "nav"; 26 | @import "navbar"; 27 | @import "card"; 28 | @import "breadcrumb"; 29 | @import "pagination"; 30 | @import "badge"; 31 | @import "jumbotron"; 32 | @import "alert"; 33 | @import "progress"; 34 | @import "media"; 35 | @import "list-group"; 36 | @import "close"; 37 | @import "toasts"; 38 | @import "modal"; 39 | @import "tooltip"; 40 | @import "popover"; 41 | @import "carousel"; 42 | @import "spinners"; 43 | @import "utilities"; 44 | @import "print"; 45 | -------------------------------------------------------------------------------- /site/_includes/icons/github.svg: -------------------------------------------------------------------------------- 1 | GitHub -------------------------------------------------------------------------------- /site/docs/4.5/utilities/visibility.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Visibility 4 | description: Control the visibility, without modifying the display, of elements with visibility utilities. 5 | group: utilities 6 | --- 7 | 8 | Set the `visibility` of elements with our visibility utilities. These utility classes do not modify the `display` value at all and do not affect layout – `.invisible` elements still take up space in the page. Content will be hidden both visually and for assistive technology/screen reader users. 9 | 10 | Apply `.visible` or `.invisible` as needed. 11 | 12 | {% highlight html %} 13 |
...
14 | 15 | {% endhighlight %} 16 | 17 | {% highlight scss %} 18 | // Class 19 | .visible { 20 | visibility: visible !important; 21 | } 22 | .invisible { 23 | visibility: hidden !important; 24 | } 25 | 26 | // Usage as a mixin 27 | // Warning: The `invisible()` mixin has been deprecated as of v4.3.0. It will be removed entirely in v5. 28 | .element { 29 | @include invisible(visible); 30 | } 31 | .element { 32 | @include invisible(hidden); 33 | } 34 | {% endhighlight %} 35 | -------------------------------------------------------------------------------- /site/docs/4.5/utilities/overflow.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Overflow 4 | description: Use these shorthand utilities for quickly configuring how content overflows an element. 5 | group: utilities 6 | --- 7 | 8 | Barebones `overflow` functionality is provided for two values by default, and they are not responsive. 9 | 10 |
11 |
12 | This is an example of using .overflow-auto on an element with set width and height dimensions. By design, this content will vertically scroll. 13 |
14 |
15 | This is an example of using .overflow-hidden on an element with set width and height dimensions. 16 |
17 |
18 | 19 | {% highlight html %} 20 |
...
21 |
...
22 | {% endhighlight %} 23 | 24 | Using Sass variables, you may customize the overflow utilities by changing the `$overflows` variable in `_variables.scss`. 25 | -------------------------------------------------------------------------------- /site/_data/docs-versions.yml: -------------------------------------------------------------------------------- 1 | - group: v1.x 2 | baseurl: https://getbootstrap.com 3 | description: Every minor and patch release from v1 is listed below. 4 | versions: 5 | - v: 1.0.0 6 | - v: 1.1.0 7 | - v: 1.1.1 8 | - v: 1.2.0 9 | - v: 1.3.0 10 | - v: 1.4.0 11 | 12 | - group: v2.x 13 | baseurl: https://getbootstrap.com 14 | description: Every minor and patch release from v2 is listed below. 15 | versions: 16 | - v: 2.0.0 17 | - v: 2.0.1 18 | - v: 2.0.2 19 | - v: 2.0.3 20 | - v: 2.0.4 21 | - v: 2.1.0 22 | - v: 2.1.1 23 | - v: 2.2.0 24 | - v: 2.2.1 25 | - v: 2.2.2 26 | - v: 2.3.0 27 | - v: 2.3.1 28 | - v: 2.3.2 29 | 30 | - group: v3.x 31 | baseurl: https://getbootstrap.com/docs 32 | description: Our previous major release and its minor versions. Last update was v3.4.1. 33 | versions: 34 | - v: 3.3 35 | - v: 3.4 36 | 37 | - group: v4.x 38 | baseurl: https://getbootstrap.com/docs 39 | description: Current major release and its minor versions. Last update was v4.5.3. 40 | versions: 41 | - v: 4.0 42 | - v: 4.1 43 | - v: 4.2 44 | - v: 4.3 45 | - v: 4.4 46 | - v: 4.5 47 | -------------------------------------------------------------------------------- /.bundlewatch.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [ 3 | { 4 | "path": "./dist/css/bootstrap-grid.css", 5 | "maxSize": "7 kB" 6 | }, 7 | { 8 | "path": "./dist/css/bootstrap-grid.min.css", 9 | "maxSize": "6.25 kB" 10 | }, 11 | { 12 | "path": "./dist/css/bootstrap-reboot.css", 13 | "maxSize": "2 kB" 14 | }, 15 | { 16 | "path": "./dist/css/bootstrap-reboot.min.css", 17 | "maxSize": "2 kB" 18 | }, 19 | { 20 | "path": "./dist/css/bootstrap.css", 21 | "maxSize": "25.5 kB" 22 | }, 23 | { 24 | "path": "./dist/css/bootstrap.min.css", 25 | "maxSize": "23.5 kB" 26 | }, 27 | { 28 | "path": "./dist/js/bootstrap.bundle.js", 29 | "maxSize": "47.5 kB" 30 | }, 31 | { 32 | "path": "./dist/js/bootstrap.bundle.min.js", 33 | "maxSize": "21.5 kB" 34 | }, 35 | { 36 | "path": "./dist/js/bootstrap.js", 37 | "maxSize": "25.5 kB" 38 | }, 39 | { 40 | "path": "./dist/js/bootstrap.min.js", 41 | "maxSize": "14.75 kB" 42 | } 43 | ], 44 | "ci": { 45 | "trackBranches": [ 46 | "main", 47 | "v4-dev" 48 | ] 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /site/_includes/footer.html: -------------------------------------------------------------------------------- 1 |
14 | -------------------------------------------------------------------------------- /site/docs/4.5/utilities/clearfix.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Clearfix 4 | description: Quickly and easily clear floated content within a container by adding a clearfix utility. 5 | group: utilities 6 | --- 7 | 8 | Easily clear `float`s by adding `.clearfix` **to the parent element**. Can also be used as a mixin. 9 | 10 | {% highlight html %} 11 |
...
12 | {% endhighlight %} 13 | 14 | {% highlight scss %} 15 | // Mixin itself 16 | @mixin clearfix() { 17 | &::after { 18 | display: block; 19 | content: ""; 20 | clear: both; 21 | } 22 | } 23 | 24 | // Usage as a mixin 25 | .element { 26 | @include clearfix; 27 | } 28 | {% endhighlight %} 29 | 30 | The following example shows how the clearfix can be used. Without the clearfix the wrapping div would not span around the buttons which would cause a broken layout. 31 | 32 | {% capture example %} 33 |
34 | 35 | 36 |
37 | {% endcapture %} 38 | {% include example.html content=example %} 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2011-2020 Twitter, Inc. 4 | Copyright (c) 2011-2020 The Bootstrap Authors 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. 23 | -------------------------------------------------------------------------------- /scss/_code.scss: -------------------------------------------------------------------------------- 1 | // Inline code 2 | code { 3 | @include font-size($code-font-size); 4 | color: $code-color; 5 | word-wrap: break-word; 6 | 7 | // Streamline the style when inside anchors to avoid broken underline and more 8 | a > & { 9 | color: inherit; 10 | } 11 | } 12 | 13 | // User input typically entered via keyboard 14 | kbd { 15 | padding: $kbd-padding-y $kbd-padding-x; 16 | @include font-size($kbd-font-size); 17 | color: $kbd-color; 18 | background-color: $kbd-bg; 19 | @include border-radius($border-radius-sm); 20 | @include box-shadow($kbd-box-shadow); 21 | 22 | kbd { 23 | padding: 0; 24 | @include font-size(100%); 25 | font-weight: $nested-kbd-font-weight; 26 | @include box-shadow(none); 27 | } 28 | } 29 | 30 | // Blocks of code 31 | pre { 32 | display: block; 33 | @include font-size($code-font-size); 34 | color: $pre-color; 35 | 36 | // Account for some code outputs that place code tags in pre tags 37 | code { 38 | @include font-size(inherit); 39 | color: inherit; 40 | word-break: normal; 41 | } 42 | } 43 | 44 | // Enable scrollable blocks of code 45 | .pre-scrollable { 46 | max-height: $pre-scrollable-max-height; 47 | overflow-y: scroll; 48 | } 49 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/dashboard/dashboard.js: -------------------------------------------------------------------------------- 1 | /* globals Chart:false, feather:false */ 2 | 3 | (function () { 4 | 'use strict' 5 | 6 | feather.replace() 7 | 8 | // Graphs 9 | var ctx = document.getElementById('myChart') 10 | // eslint-disable-next-line no-unused-vars 11 | var myChart = new Chart(ctx, { 12 | type: 'line', 13 | data: { 14 | labels: [ 15 | 'Sunday', 16 | 'Monday', 17 | 'Tuesday', 18 | 'Wednesday', 19 | 'Thursday', 20 | 'Friday', 21 | 'Saturday' 22 | ], 23 | datasets: [{ 24 | data: [ 25 | 15339, 26 | 21345, 27 | 18483, 28 | 24003, 29 | 23489, 30 | 24092, 31 | 12034 32 | ], 33 | lineTension: 0, 34 | backgroundColor: 'transparent', 35 | borderColor: '#007bff', 36 | borderWidth: 4, 37 | pointBackgroundColor: '#007bff' 38 | }] 39 | }, 40 | options: { 41 | scales: { 42 | yAxes: [{ 43 | ticks: { 44 | beginAtZero: false 45 | } 46 | }] 47 | }, 48 | legend: { 49 | display: false 50 | } 51 | } 52 | }) 53 | })() 54 | -------------------------------------------------------------------------------- /site/_includes/social.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /.github/workflows/bundlewatch.yml: -------------------------------------------------------------------------------- 1 | name: Bundlewatch 2 | on: [push, pull_request] 3 | env: 4 | CI: true 5 | NODE: 12.x 6 | 7 | jobs: 8 | bundlewatch: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - name: Clone repository 13 | uses: actions/checkout@v2 14 | 15 | - name: Set Node.js version 16 | uses: actions/setup-node@v1 17 | with: 18 | node-version: "${{ env.NODE }}" 19 | 20 | - name: Set up npm cache 21 | uses: actions/cache@v2 22 | with: 23 | path: ~/.npm 24 | key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} 25 | restore-keys: | 26 | ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} 27 | ${{ runner.OS }}-node-v${{ env.NODE }}- 28 | 29 | - name: Install npm dependencies 30 | run: npm ci 31 | 32 | - name: Run dist 33 | run: npm run dist 34 | 35 | - name: Run bundlewatch 36 | run: npm run bundlewatch 37 | env: 38 | BUNDLEWATCH_GITHUB_TOKEN: "${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}" 39 | CI_BRANCH_BASE: v4-dev 40 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_buttons.scss: -------------------------------------------------------------------------------- 1 | // Buttons 2 | // 3 | // Custom buttons for the docs. 4 | 5 | .btn-bd-primary { 6 | font-weight: 600; 7 | color: $white; 8 | background-color: $bd-purple-bright; 9 | border-color: $bd-purple-bright; 10 | 11 | &:hover, 12 | &:active { 13 | color: $white; 14 | background-color: darken($bd-purple-bright, 10%); 15 | border-color: darken($bd-purple-bright, 10%); 16 | } 17 | 18 | &:focus { 19 | box-shadow: 0 0 0 3px rgba($bd-purple-bright, .25); 20 | } 21 | } 22 | 23 | .btn-bd-download { 24 | font-weight: 600; 25 | color: $bd-download; 26 | border-color: $bd-download; 27 | 28 | &:hover, 29 | &:active { 30 | color: $bd-dark; 31 | background-color: $bd-download; 32 | border-color: $bd-download; 33 | } 34 | 35 | &:focus { 36 | box-shadow: 0 0 0 3px rgba($bd-download, .25); 37 | } 38 | } 39 | 40 | .btn-bd-light { 41 | color: $gray-600; 42 | border-color: $gray-300; 43 | 44 | .show > &, 45 | &:hover, 46 | &:active { 47 | color: $bd-purple-bright; 48 | background-color: $white; 49 | border-color: $bd-purple-bright; 50 | } 51 | 52 | &:focus { 53 | box-shadow: 0 0 0 3px rgba($bd-purple-bright, .25); 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Toggles 2 | // 3 | // Used in conjunction with global variables to enable certain theme features. 4 | 5 | // Vendor 6 | @import "vendor/rfs"; 7 | 8 | // Deprecate 9 | @import "mixins/deprecate"; 10 | 11 | // Utilities 12 | @import "mixins/breakpoints"; 13 | @import "mixins/hover"; 14 | @import "mixins/image"; 15 | @import "mixins/badge"; 16 | @import "mixins/resize"; 17 | @import "mixins/screen-reader"; 18 | @import "mixins/size"; 19 | @import "mixins/reset-text"; 20 | @import "mixins/text-emphasis"; 21 | @import "mixins/text-hide"; 22 | @import "mixins/text-truncate"; 23 | @import "mixins/visibility"; 24 | 25 | // Components 26 | @import "mixins/alert"; 27 | @import "mixins/buttons"; 28 | @import "mixins/caret"; 29 | @import "mixins/pagination"; 30 | @import "mixins/lists"; 31 | @import "mixins/list-group"; 32 | @import "mixins/nav-divider"; 33 | @import "mixins/forms"; 34 | @import "mixins/table-row"; 35 | 36 | // Skins 37 | @import "mixins/background-variant"; 38 | @import "mixins/border-radius"; 39 | @import "mixins/box-shadow"; 40 | @import "mixins/gradients"; 41 | @import "mixins/transition"; 42 | 43 | // Layout 44 | @import "mixins/clearfix"; 45 | @import "mixins/grid-framework"; 46 | @import "mixins/grid"; 47 | @import "mixins/float"; 48 | -------------------------------------------------------------------------------- /site/docs/versions.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: simple 3 | title: Versions 4 | description: An appendix of hosted documentation for nearly every release of Bootstrap, from v1 through v4. 5 | --- 6 | 7 |
8 | {% assign releases = site.data.docs-versions | reverse %} 9 | {% for release in releases %} 10 |
11 |

{{ release.group }}

12 |

{{ release.description }}

13 | {% assign versions = release.versions | reverse %} 14 | {% for version in versions %} 15 | {% if forloop.first %}
{% endif %} 16 | {% if version.v == site.docs_version %} 17 | 18 | {{ version.v }} 19 | Latest 20 | 21 | {% else %} 22 | 23 | {{ version.v }} 24 | 25 | {% endif %} 26 | {% if forloop.last %}
{% endif %} 27 | {% endfor %} 28 |
29 | {% endfor %} 30 |
31 | -------------------------------------------------------------------------------- /site/docs/4.5/utilities/image-replacement.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Image replacement 4 | description: Swap text for background images with the image replacement class. 5 | group: utilities 6 | --- 7 | 8 | {% capture callout %} 9 | ##### Warning 10 | 11 | The `text-hide()` class and mixin has been deprecated as of v4.1. It will be removed entirely in v5. 12 | {% endcapture %} 13 | {% include callout.html content=callout type="warning" %} 14 | 15 | Utilize the `.text-hide` class or mixin to help replace an element's text content with a background image. 16 | 17 | {% highlight html %} 18 |

Custom heading

19 | {% endhighlight %} 20 | 21 | {% highlight scss %} 22 | // Usage as a mixin 23 | .heading { 24 | @include text-hide; 25 | } 26 | {% endhighlight %} 27 | 28 | Use the `.text-hide` class to maintain the accessibility and SEO benefits of heading tags, but want to utilize a `background-image` instead of text. 29 | 30 |
31 |

Bootstrap

32 |
33 | 34 | {% highlight html %} 35 |

Bootstrap

36 | {% endhighlight %} 37 | -------------------------------------------------------------------------------- /.github/workflows/browserstack.yml: -------------------------------------------------------------------------------- 1 | name: BrowserStack 2 | on: [push] 3 | env: 4 | CI: true 5 | NODE: 12.x 6 | 7 | jobs: 8 | browserstack: 9 | runs-on: ubuntu-latest 10 | if: github.repository == 'twbs/bootstrap' 11 | 12 | steps: 13 | - name: Clone repository 14 | uses: actions/checkout@v2 15 | 16 | - name: Set Node.js version 17 | uses: actions/setup-node@v1 18 | with: 19 | node-version: "${{ env.NODE }}" 20 | 21 | - name: Set up npm cache 22 | uses: actions/cache@v2 23 | with: 24 | path: ~/.npm 25 | key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} 26 | restore-keys: | 27 | ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} 28 | ${{ runner.OS }}-node-v${{ env.NODE }}- 29 | 30 | - name: Install npm dependencies 31 | run: npm ci 32 | 33 | - name: Run dist 34 | run: npm run dist 35 | 36 | - name: Run BrowserStack tests 37 | run: npm run js-test-cloud 38 | env: 39 | BROWSER_STACK_ACCESS_KEY: "${{ secrets.BROWSER_STACK_ACCESS_KEY }}" 40 | BROWSER_STACK_USERNAME: "${{ secrets.BROWSER_STACK_USERNAME }}" 41 | -------------------------------------------------------------------------------- /scss/mixins/_image.scss: -------------------------------------------------------------------------------- 1 | // Image Mixins 2 | // - Responsive image 3 | // - Retina image 4 | 5 | 6 | // Responsive image 7 | // 8 | // Keep images from scaling beyond the width of their parents. 9 | 10 | @mixin img-fluid() { 11 | // Part 1: Set a maximum relative to the parent 12 | max-width: 100%; 13 | // Part 2: Override the height to auto, otherwise images will be stretched 14 | // when setting a width and height attribute on the img element. 15 | height: auto; 16 | } 17 | 18 | 19 | // Retina image 20 | // 21 | // Short retina mixin for setting background-image and -size. 22 | 23 | @mixin img-retina($file-1x, $file-2x, $width-1x, $height-1x) { 24 | background-image: url($file-1x); 25 | 26 | // Autoprefixer takes care of adding -webkit-min-device-pixel-ratio and -o-min-device-pixel-ratio, 27 | // but doesn't convert dppx=>dpi. 28 | // There's no such thing as unprefixed min-device-pixel-ratio since it's nonstandard. 29 | // Compatibility info: https://caniuse.com/#feat=css-media-resolution 30 | @media only screen and (min-resolution: 192dpi), // IE9-11 don't support dppx 31 | only screen and (min-resolution: 2dppx) { // Standardized 32 | background-image: url($file-2x); 33 | background-size: $width-1x $height-1x; 34 | } 35 | @include deprecate("`img-retina()`", "v4.3.0", "v5"); 36 | } 37 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/cover/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: examples 3 | title: Cover Template 4 | extra_css: "cover.rtl.css" 5 | body_class: "text-center" 6 | include_js: false 7 | --- 8 | 9 |
10 |
11 |
12 |

Cover

13 | 18 |
19 |
20 | 21 |
22 |

Cover your page.

23 |

Cover is a one-page template for building simple and beautiful home pages. Download, edit the text, and add your own fullscreen background photo to make it your own.

24 |

25 | Learn more 26 |

27 |
28 | 29 | 34 |
35 | -------------------------------------------------------------------------------- /scss/_toasts.scss: -------------------------------------------------------------------------------- 1 | .toast { 2 | // Prevents from shrinking in IE11, when in a flex container 3 | // See https://github.com/twbs/bootstrap/issues/28341 4 | flex-basis: $toast-max-width; 5 | max-width: $toast-max-width; 6 | @include font-size($toast-font-size); 7 | color: $toast-color; 8 | background-color: $toast-background-color; 9 | background-clip: padding-box; 10 | border: $toast-border-width solid $toast-border-color; 11 | box-shadow: $toast-box-shadow; 12 | opacity: 0; 13 | @include border-radius($toast-border-radius); 14 | 15 | &:not(:last-child) { 16 | margin-bottom: $toast-padding-x; 17 | } 18 | 19 | &.showing { 20 | opacity: 1; 21 | } 22 | 23 | &.show { 24 | display: block; 25 | opacity: 1; 26 | } 27 | 28 | &.hide { 29 | display: none; 30 | } 31 | } 32 | 33 | .toast-header { 34 | display: flex; 35 | align-items: center; 36 | padding: $toast-padding-y $toast-padding-x; 37 | color: $toast-header-color; 38 | background-color: $toast-header-background-color; 39 | background-clip: padding-box; 40 | border-bottom: $toast-border-width solid $toast-header-border-color; 41 | @include border-top-radius(subtract($toast-border-radius, $toast-border-width)); 42 | } 43 | 44 | .toast-body { 45 | padding: $toast-padding-x; // apply to both vertical and horizontal 46 | } 47 | -------------------------------------------------------------------------------- /scss/_images.scss: -------------------------------------------------------------------------------- 1 | // Responsive images (ensure images don't scale beyond their parents) 2 | // 3 | // This is purposefully opt-in via an explicit class rather than being the default for all ``s. 4 | // We previously tried the "images are responsive by default" approach in Bootstrap v2, 5 | // and abandoned it in Bootstrap v3 because it breaks lots of third-party widgets (including Google Maps) 6 | // which weren't expecting the images within themselves to be involuntarily resized. 7 | // See also https://github.com/twbs/bootstrap/issues/18178 8 | .img-fluid { 9 | @include img-fluid(); 10 | } 11 | 12 | 13 | // Image thumbnails 14 | .img-thumbnail { 15 | padding: $thumbnail-padding; 16 | background-color: $thumbnail-bg; 17 | border: $thumbnail-border-width solid $thumbnail-border-color; 18 | @include border-radius($thumbnail-border-radius); 19 | @include box-shadow($thumbnail-box-shadow); 20 | 21 | // Keep them at most 100% wide 22 | @include img-fluid(); 23 | } 24 | 25 | // 26 | // Figures 27 | // 28 | 29 | .figure { 30 | // Ensures the caption's text aligns with the image. 31 | display: inline-block; 32 | } 33 | 34 | .figure-img { 35 | margin-bottom: $spacer / 2; 36 | line-height: 1; 37 | } 38 | 39 | .figure-caption { 40 | @include font-size($figure-caption-font-size); 41 | color: $figure-caption-color; 42 | } 43 | -------------------------------------------------------------------------------- /scss/_spinners.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Rotating border 3 | // 4 | 5 | @keyframes spinner-border { 6 | to { transform: rotate(360deg); } 7 | } 8 | 9 | .spinner-border { 10 | display: inline-block; 11 | width: $spinner-width; 12 | height: $spinner-height; 13 | vertical-align: text-bottom; 14 | border: $spinner-border-width solid currentColor; 15 | border-right-color: transparent; 16 | // stylelint-disable-next-line property-disallowed-list 17 | border-radius: 50%; 18 | animation: spinner-border .75s linear infinite; 19 | } 20 | 21 | .spinner-border-sm { 22 | width: $spinner-width-sm; 23 | height: $spinner-height-sm; 24 | border-width: $spinner-border-width-sm; 25 | } 26 | 27 | // 28 | // Growing circle 29 | // 30 | 31 | @keyframes spinner-grow { 32 | 0% { 33 | transform: scale(0); 34 | } 35 | 50% { 36 | opacity: 1; 37 | transform: none; 38 | } 39 | } 40 | 41 | .spinner-grow { 42 | display: inline-block; 43 | width: $spinner-width; 44 | height: $spinner-height; 45 | vertical-align: text-bottom; 46 | background-color: currentColor; 47 | // stylelint-disable-next-line property-disallowed-list 48 | border-radius: 50%; 49 | opacity: 0; 50 | animation: spinner-grow .75s linear infinite; 51 | } 52 | 53 | .spinner-grow-sm { 54 | width: $spinner-width-sm; 55 | height: $spinner-height-sm; 56 | } 57 | -------------------------------------------------------------------------------- /site/_includes/icons/slack.svg: -------------------------------------------------------------------------------- 1 | Slack -------------------------------------------------------------------------------- /scss/_badge.scss: -------------------------------------------------------------------------------- 1 | // Base class 2 | // 3 | // Requires one of the contextual, color modifier classes for `color` and 4 | // `background-color`. 5 | 6 | .badge { 7 | display: inline-block; 8 | padding: $badge-padding-y $badge-padding-x; 9 | @include font-size($badge-font-size); 10 | font-weight: $badge-font-weight; 11 | line-height: 1; 12 | text-align: center; 13 | white-space: nowrap; 14 | vertical-align: baseline; 15 | @include border-radius($badge-border-radius); 16 | @include transition($badge-transition); 17 | 18 | @at-root a#{&} { 19 | @include hover-focus() { 20 | text-decoration: none; 21 | } 22 | } 23 | 24 | // Empty badges collapse automatically 25 | &:empty { 26 | display: none; 27 | } 28 | } 29 | 30 | // Quick fix for badges in buttons 31 | .btn .badge { 32 | position: relative; 33 | top: -1px; 34 | } 35 | 36 | // Pill badges 37 | // 38 | // Make them extra rounded with a modifier to replace v3's badges. 39 | 40 | .badge-pill { 41 | padding-right: $badge-pill-padding-x; 42 | padding-left: $badge-pill-padding-x; 43 | @include border-radius($badge-pill-border-radius); 44 | } 45 | 46 | // Colors 47 | // 48 | // Contextual variations (linked badges get darker on :hover). 49 | 50 | @each $color, $value in $theme-colors { 51 | .badge-#{$color} { 52 | @include badge-variant($value); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/img/favicons/safari-pinned-tab.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /scss/_alert.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base styles 3 | // 4 | 5 | .alert { 6 | position: relative; 7 | padding: $alert-padding-y $alert-padding-x; 8 | margin-bottom: $alert-margin-bottom; 9 | border: $alert-border-width solid transparent; 10 | @include border-radius($alert-border-radius); 11 | } 12 | 13 | // Headings for larger alerts 14 | .alert-heading { 15 | // Specified to prevent conflicts of changing $headings-color 16 | color: inherit; 17 | } 18 | 19 | // Provide class for links that match alerts 20 | .alert-link { 21 | font-weight: $alert-link-font-weight; 22 | } 23 | 24 | 25 | // Dismissible alerts 26 | // 27 | // Expand the right padding and account for the close button's positioning. 28 | 29 | .alert-dismissible { 30 | padding-right: $close-font-size + $alert-padding-x * 2; 31 | 32 | // Adjust close link position 33 | .close { 34 | position: absolute; 35 | top: 0; 36 | right: 0; 37 | z-index: 2; 38 | padding: $alert-padding-y $alert-padding-x; 39 | color: inherit; 40 | } 41 | } 42 | 43 | 44 | // Alternate styles 45 | // 46 | // Generate contextual modifier classes for colorizing the alert. 47 | 48 | @each $color, $value in $theme-colors { 49 | .alert-#{$color} { 50 | @include alert-variant(theme-color-level($color, $alert-bg-level), theme-color-level($color, $alert-border-level), theme-color-level($color, $alert-color-level)); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /scss/_progress.scss: -------------------------------------------------------------------------------- 1 | // Disable animation if transitions are disabled 2 | @if $enable-transitions { 3 | @keyframes progress-bar-stripes { 4 | from { background-position: $progress-height 0; } 5 | to { background-position: 0 0 #{"/*!rtl:ignore*/"}; } 6 | } 7 | } 8 | 9 | .progress { 10 | display: flex; 11 | height: $progress-height; 12 | overflow: hidden; // force rounded corners by cropping it 13 | line-height: 0; 14 | @include font-size($progress-font-size); 15 | background-color: $progress-bg; 16 | @include border-radius($progress-border-radius); 17 | @include box-shadow($progress-box-shadow); 18 | } 19 | 20 | .progress-bar { 21 | display: flex; 22 | flex-direction: column; 23 | justify-content: center; 24 | overflow: hidden; 25 | color: $progress-bar-color; 26 | text-align: center; 27 | white-space: nowrap; 28 | background-color: $progress-bar-bg; 29 | @include transition($progress-bar-transition); 30 | } 31 | 32 | .progress-bar-striped { 33 | @include gradient-striped(); 34 | background-size: $progress-height $progress-height; 35 | } 36 | 37 | @if $enable-transitions { 38 | .progress-bar-animated { 39 | animation: progress-bar-stripes $progress-bar-animation-timing; 40 | 41 | @if $enable-prefers-reduced-motion-media-query { 42 | @media (prefers-reduced-motion: reduce) { 43 | animation: none; 44 | } 45 | } 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /site/_layouts/docs.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% include header.html %} 5 | 6 | 7 | {% include skippy.html %} 8 | 9 | {% include docs-navbar.html %} 10 | 11 |
12 |
13 |
14 | {% include docs-sidebar.html %} 15 |
16 | 17 | {% if page.toc %} 18 | 21 | {% endif %} 22 | 23 |
24 |
25 | View on GitHub 26 |

{{ page.title | smartify }}

27 |
28 |

{{ page.description | smartify }}

29 | {% include ads.html %} 30 | {{ content }} 31 |
32 |
33 |
34 | 35 | {% include scripts.html %} 36 | 37 | 38 | -------------------------------------------------------------------------------- /site/docs/4.5/components/jumbotron.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Jumbotron 4 | description: Lightweight, flexible component for showcasing hero unit style content. 5 | group: components 6 | --- 7 | 8 | A lightweight, flexible component that can optionally extend the entire viewport to showcase key marketing messages on your site. 9 | 10 | {% capture example %} 11 |
12 |

Hello, world!

13 |

This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.

14 |
15 |

It uses utility classes for typography and spacing to space content out within the larger container.

16 | Learn more 17 |
18 | {% endcapture %} 19 | {% include example.html content=example %} 20 | 21 | To make the jumbotron full width, and without rounded corners, add the `.jumbotron-fluid` modifier class and add a `.container` or `.container-fluid` within. 22 | 23 | {% capture example %} 24 |
25 |
26 |

Fluid jumbotron

27 |

This is a modified jumbotron that occupies the entire horizontal space of its parent.

28 |
29 |
30 | {% endcapture %} 31 | {% include example.html content=example %} 32 | -------------------------------------------------------------------------------- /site/docs/4.5/content/figures.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Figures 4 | description: Documentation and examples for displaying related images and text with the figure component in Bootstrap. 5 | group: content 6 | --- 7 | 8 | Anytime you need to display a piece of content—like an image with an optional caption, consider using a `
`. 9 | 10 | Use the included `.figure` , `.figure-img` and `.figure-caption` classes to provide some baseline styles for the HTML5 `
` and `
` elements. Images in figures have no explicit size, so be sure to add the `.img-fluid` class to your `` to make it responsive. 11 | 12 | {% capture example %} 13 |
14 | {% include icons/placeholder.svg width="400" height="300" class="figure-img img-fluid rounded" %} 15 |
A caption for the above image.
16 |
17 | {% endcapture %} 18 | {% include example.html content=example %} 19 | 20 | Aligning the figure's caption is easy with our [text utilities]({{ site.baseurl }}/docs/{{ site.docs_version }}/utilities/text/#text-alignment). 21 | 22 | {% capture example %} 23 |
24 | {% include icons/placeholder.svg width="400" height="300" class="figure-img img-fluid rounded" %} 25 |
A caption for the above image.
26 |
27 | {% endcapture %} 28 | {% include example.html content=example %} 29 | -------------------------------------------------------------------------------- /.github/workflows/js.yml: -------------------------------------------------------------------------------- 1 | name: JS Tests 2 | on: [push, pull_request] 3 | env: 4 | CI: true 5 | 6 | jobs: 7 | run: 8 | name: Node ${{ matrix.node }} 9 | runs-on: ubuntu-latest 10 | 11 | strategy: 12 | fail-fast: false 13 | matrix: 14 | node: [10, 12] 15 | 16 | steps: 17 | - name: Clone repository 18 | uses: actions/checkout@v2 19 | 20 | - name: Set Node.js version 21 | uses: actions/setup-node@v1 22 | with: 23 | node-version: ${{ matrix.node }} 24 | 25 | - name: Set up npm cache 26 | uses: actions/cache@v2 27 | with: 28 | path: ~/.npm 29 | key: ${{ runner.os }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}} 30 | restore-keys: | 31 | ${{ runner.OS }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }} 32 | ${{ runner.OS }}-node-v${{ matrix.node }}- 33 | 34 | - name: Install npm dependencies 35 | run: npm ci 36 | 37 | - name: Run dist 38 | run: npm run js 39 | 40 | - name: Run JS tests 41 | run: npm run js-test 42 | 43 | - name: Run Coveralls 44 | uses: coverallsapp/github-action@master 45 | if: matrix.node == 12 46 | with: 47 | github-token: "${{ secrets.GITHUB_TOKEN }}" 48 | path-to-lcov: "./js/coverage/lcov.info" 49 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/floating-labels/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: examples 3 | title: Floating labels example 4 | extra_css: "floating-labels.rtl.css" 5 | include_js: false 6 | --- 7 | 8 | 33 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/product/product.css: -------------------------------------------------------------------------------- 1 | .container { 2 | max-width: 960px; 3 | } 4 | 5 | /* 6 | * Custom translucent site header 7 | */ 8 | 9 | .site-header { 10 | background-color: rgba(0, 0, 0, .85); 11 | -webkit-backdrop-filter: saturate(180%) blur(20px); 12 | backdrop-filter: saturate(180%) blur(20px); 13 | } 14 | .site-header a { 15 | color: #999; 16 | transition: ease-in-out color .15s; 17 | } 18 | .site-header a:hover { 19 | color: #fff; 20 | text-decoration: none; 21 | } 22 | 23 | /* 24 | * Dummy devices (replace them with your own or something else entirely!) 25 | */ 26 | 27 | .product-device { 28 | position: absolute; 29 | right: 10%; 30 | bottom: -30%; 31 | width: 300px; 32 | height: 540px; 33 | background-color: #333; 34 | border-radius: 21px; 35 | -webkit-transform: rotate(30deg); 36 | transform: rotate(30deg); 37 | } 38 | 39 | .product-device::before { 40 | position: absolute; 41 | top: 10%; 42 | right: 10px; 43 | bottom: 10%; 44 | left: 10px; 45 | content: ""; 46 | background-color: rgba(255, 255, 255, .1); 47 | border-radius: 5px; 48 | } 49 | 50 | .product-device-2 { 51 | top: -25%; 52 | right: auto; 53 | bottom: 0; 54 | left: 5%; 55 | background-color: #e5e5e5; 56 | } 57 | 58 | 59 | /* 60 | * Extra utilities 61 | */ 62 | 63 | .flex-equal > * { 64 | -ms-flex: 1; 65 | flex: 1; 66 | } 67 | @media (min-width: 768px) { 68 | .flex-md-equal > * { 69 | -ms-flex: 1; 70 | flex: 1; 71 | } 72 | } 73 | 74 | .overflow-hidden { overflow: hidden; } 75 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/product/product.rtl.css: -------------------------------------------------------------------------------- 1 | .container { 2 | max-width: 960px; 3 | } 4 | 5 | /* 6 | * Custom translucent site header 7 | */ 8 | 9 | .site-header { 10 | background-color: rgba(0, 0, 0, .85); 11 | -webkit-backdrop-filter: saturate(180%) blur(20px); 12 | backdrop-filter: saturate(180%) blur(20px); 13 | } 14 | .site-header a { 15 | color: #999; 16 | transition: ease-in-out color .15s; 17 | } 18 | .site-header a:hover { 19 | color: #fff; 20 | text-decoration: none; 21 | } 22 | 23 | /* 24 | * Dummy devices (replace them with your own or something else entirely!) 25 | */ 26 | 27 | .product-device { 28 | position: absolute; 29 | left: 10%; 30 | bottom: -30%; 31 | width: 300px; 32 | height: 540px; 33 | background-color: #333; 34 | border-radius: 21px; 35 | -webkit-transform: rotate(-30deg); 36 | transform: rotate(-30deg); 37 | } 38 | 39 | .product-device::before { 40 | position: absolute; 41 | top: 10%; 42 | left: 10px; 43 | bottom: 10%; 44 | right: 10px; 45 | content: ""; 46 | background-color: rgba(255, 255, 255, .1); 47 | border-radius: 5px; 48 | } 49 | 50 | .product-device-2 { 51 | top: -25%; 52 | left: auto; 53 | bottom: 0; 54 | right: 5%; 55 | background-color: #e5e5e5; 56 | } 57 | 58 | 59 | /* 60 | * Extra utilities 61 | */ 62 | 63 | .flex-equal > * { 64 | -ms-flex: 1; 65 | flex: 1; 66 | } 67 | @media (min-width: 768px) { 68 | .flex-md-equal > * { 69 | -ms-flex: 1; 70 | flex: 1; 71 | } 72 | } 73 | 74 | .overflow-hidden { overflow: hidden; } 75 | -------------------------------------------------------------------------------- /scss/_breadcrumb.scss: -------------------------------------------------------------------------------- 1 | .breadcrumb { 2 | display: flex; 3 | flex-wrap: wrap; 4 | padding: $breadcrumb-padding-y $breadcrumb-padding-x; 5 | margin-bottom: $breadcrumb-margin-bottom; 6 | @include font-size($breadcrumb-font-size); 7 | list-style: none; 8 | background-color: $breadcrumb-bg; 9 | @include border-radius($breadcrumb-border-radius); 10 | } 11 | 12 | .breadcrumb-item { 13 | display: flex; 14 | 15 | // The separator between breadcrumbs (by default, a forward-slash: "/") 16 | + .breadcrumb-item { 17 | padding-left: $breadcrumb-item-padding; 18 | 19 | &::before { 20 | display: inline-block; // Suppress underlining of the separator in modern browsers 21 | padding-right: $breadcrumb-item-padding; 22 | color: $breadcrumb-divider-color; 23 | content: escape-svg($breadcrumb-divider); 24 | } 25 | } 26 | 27 | // IE9-11 hack to properly handle hyperlink underlines for breadcrumbs built 28 | // without `
    `s. The `::before` pseudo-element generates an element 29 | // *within* the .breadcrumb-item and thereby inherits the `text-decoration`. 30 | // 31 | // To trick IE into suppressing the underline, we give the pseudo-element an 32 | // underline and then immediately remove it. 33 | + .breadcrumb-item:hover::before { 34 | text-decoration: underline; 35 | } 36 | // stylelint-disable-next-line no-duplicate-selectors 37 | + .breadcrumb-item:hover::before { 38 | text-decoration: none; 39 | } 40 | 41 | &.active { 42 | color: $breadcrumb-active-color; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /site/docs/4.5/utilities/vertical-align.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Vertical alignment 4 | description: Easily change the vertical alignment of inline, inline-block, inline-table, and table cell elements. 5 | group: utilities 6 | --- 7 | 8 | Change the alignment of elements with the [`vertical-alignment`](https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align) utilities. Please note that vertical-align only affects inline, inline-block, inline-table, and table cell elements. 9 | 10 | Choose from `.align-baseline`, `.align-top`, `.align-middle`, `.align-bottom`, `.align-text-bottom`, and `.align-text-top` as needed. 11 | 12 | With inline elements: 13 | 14 | {% capture example %} 15 | baseline 16 | top 17 | middle 18 | bottom 19 | text-top 20 | text-bottom 21 | {% endcapture %} 22 | {% include example.html content=example %} 23 | 24 | With table cells: 25 | 26 | {% capture example %} 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 |
    baselinetopmiddlebottomtext-toptext-bottom
    39 | {% endcapture %} 40 | {% include example.html content=example %} 41 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_nav.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Main navbar 3 | // 4 | 5 | .bd-navbar { 6 | min-height: 4rem; 7 | background-color: $bd-purple-bright; 8 | box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .05), inset 0 -1px 0 rgba(0, 0, 0, .1); 9 | 10 | @include media-breakpoint-down(md) { 11 | padding-right: .5rem; 12 | padding-left: .5rem; 13 | 14 | .navbar-nav-scroll { 15 | max-width: 100%; 16 | height: 2.5rem; 17 | margin-top: .25rem; 18 | overflow: hidden; 19 | 20 | .navbar-nav { 21 | padding-bottom: 2rem; 22 | overflow-x: auto; 23 | white-space: nowrap; 24 | -webkit-overflow-scrolling: touch; 25 | } 26 | } 27 | } 28 | 29 | @include media-breakpoint-up(md) { 30 | @supports (position: sticky) { 31 | position: sticky; 32 | top: 0; 33 | z-index: 1071; // over everything in bootstrap 34 | } 35 | } 36 | 37 | .navbar-nav { 38 | .nav-link { 39 | padding-right: .5rem; 40 | padding-left: .5rem; 41 | color: rgba($white, .85); 42 | 43 | &.active, 44 | &:hover { 45 | color: $white; 46 | background-color: transparent; 47 | } 48 | 49 | &.active { 50 | font-weight: 600; 51 | } 52 | } 53 | } 54 | 55 | .navbar-nav-svg { 56 | display: inline-block; 57 | width: 1rem; 58 | height: 1rem; 59 | vertical-align: text-top; 60 | } 61 | 62 | .dropdown-menu { 63 | @include font-size(.875rem); 64 | } 65 | 66 | .dropdown-item.active { 67 | font-weight: 600; 68 | color: $gray-900; 69 | background: escape-svg($dropdown-active-icon) no-repeat .4rem .6rem/.75rem .75rem; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "plugin:import/errors", 5 | "plugin:import/warnings", 6 | "plugin:unicorn/recommended", 7 | "xo/esnext", 8 | "xo/browser" 9 | ], 10 | "rules": { 11 | "capitalized-comments": "off", 12 | "indent": [ 13 | "error", 14 | 2, 15 | { 16 | "MemberExpression": "off", 17 | "SwitchCase": 1 18 | } 19 | ], 20 | "max-params": [ 21 | "warn", 22 | 5 23 | ], 24 | "new-cap": "off", 25 | "no-console": "error", 26 | "no-mixed-operators": "off", 27 | "no-negated-condition": "off", 28 | "object-curly-spacing": [ 29 | "error", 30 | "always" 31 | ], 32 | "prefer-named-capture-group": "off", 33 | "semi": [ 34 | "error", 35 | "never" 36 | ], 37 | "unicorn/consistent-function-scoping": "off", 38 | "unicorn/explicit-length-check": "off", 39 | "unicorn/import-index": "off", 40 | "unicorn/no-fn-reference-in-iterator": "off", 41 | "unicorn/no-for-loop": "off", 42 | "unicorn/no-null": "off", 43 | "unicorn/no-unused-properties": "error", 44 | "unicorn/no-useless-undefined": "off", 45 | "unicorn/prefer-array-find": "off", 46 | "unicorn/prefer-dataset": "off", 47 | "unicorn/prefer-includes": "off", 48 | "unicorn/prefer-node-append": "off", 49 | "unicorn/prefer-node-remove": "off", 50 | "unicorn/prefer-number-properties": "off", 51 | "unicorn/prefer-optional-catch-binding": "off", 52 | "unicorn/prefer-query-selector": "off", 53 | "unicorn/prefer-reflect-apply": "off", 54 | "unicorn/prefer-set-has": "off", 55 | "unicorn/prevent-abbreviations": "off" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /scss/mixins/_caret.scss: -------------------------------------------------------------------------------- 1 | @mixin caret-down() { 2 | border-top: $caret-width solid; 3 | border-right: $caret-width solid transparent; 4 | border-bottom: 0; 5 | border-left: $caret-width solid transparent; 6 | } 7 | 8 | @mixin caret-up() { 9 | border-top: 0; 10 | border-right: $caret-width solid transparent; 11 | border-bottom: $caret-width solid; 12 | border-left: $caret-width solid transparent; 13 | } 14 | 15 | @mixin caret-right() { 16 | border-top: $caret-width solid transparent; 17 | border-right: 0; 18 | border-bottom: $caret-width solid transparent; 19 | border-left: $caret-width solid; 20 | } 21 | 22 | @mixin caret-left() { 23 | border-top: $caret-width solid transparent; 24 | border-right: $caret-width solid; 25 | border-bottom: $caret-width solid transparent; 26 | } 27 | 28 | @mixin caret($direction: down) { 29 | @if $enable-caret { 30 | &::after { 31 | display: inline-block; 32 | margin-left: $caret-spacing; 33 | vertical-align: $caret-vertical-align; 34 | content: ""; 35 | @if $direction == down { 36 | @include caret-down(); 37 | } @else if $direction == up { 38 | @include caret-up(); 39 | } @else if $direction == right { 40 | @include caret-right(); 41 | } 42 | } 43 | 44 | @if $direction == left { 45 | &::after { 46 | display: none; 47 | } 48 | 49 | &::before { 50 | display: inline-block; 51 | margin-right: $caret-spacing; 52 | vertical-align: $caret-vertical-align; 53 | content: ""; 54 | @include caret-left(); 55 | } 56 | } 57 | 58 | &:empty::after { 59 | margin-left: 0; 60 | } 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_brand.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Brand guidelines 3 | // 4 | 5 | // Logo series wrapper 6 | .bd-brand-logos { 7 | display: table; 8 | width: 100%; 9 | margin-bottom: 1rem; 10 | overflow: hidden; 11 | color: $bd-purple; 12 | background-color: #f9f9f9; 13 | @include border-radius(); 14 | 15 | .inverse { 16 | color: $white; 17 | background-color: $bd-purple; 18 | } 19 | } 20 | 21 | // Individual items 22 | .bd-brand-item { 23 | padding: 4rem 0; 24 | text-align: center; 25 | 26 | + .bd-brand-item { 27 | border-top: 1px solid $white; 28 | } 29 | 30 | // Heading content within 31 | h1, 32 | h3 { 33 | margin-top: 0; 34 | margin-bottom: 0; 35 | } 36 | 37 | @include media-breakpoint-up(md) { 38 | display: table-cell; 39 | width: 1%; 40 | 41 | + .bd-brand-item { 42 | border-top: 0; 43 | border-left: 1px solid $white; 44 | } 45 | 46 | h1 { 47 | @include font-size(4rem); 48 | } 49 | } 50 | } 51 | 52 | 53 | // 54 | // Color swatches 55 | // 56 | 57 | .color-swatches { 58 | margin: 0 -5px; 59 | overflow: hidden; // clearfix 60 | 61 | // Docs colors 62 | .bd-purple { 63 | background-color: $bd-purple; 64 | } 65 | .bd-purple-light { 66 | background-color: $bd-purple-light; 67 | } 68 | .bd-purple-lighter { 69 | background-color: #e5e1ea; 70 | } 71 | .bd-gray { 72 | background-color: #f9f9f9; 73 | } 74 | } 75 | 76 | .color-swatch { 77 | float: left; 78 | width: 4rem; 79 | height: 4rem; 80 | margin-right: .25rem; 81 | margin-left: .25rem; 82 | @include border-radius(); 83 | 84 | @include media-breakpoint-up(md) { 85 | width: 6rem; 86 | height: 6rem; 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /site/docs/4.5/utilities/position.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Position 4 | description: Use these shorthand utilities for quickly configuring the position of an element. 5 | group: utilities 6 | toc: true 7 | --- 8 | 9 | ## Common values 10 | 11 | Quick positioning classes are available, though they are not responsive. 12 | 13 | {% highlight html %} 14 |
    ...
    15 |
    ...
    16 |
    ...
    17 |
    ...
    18 |
    ...
    19 | {% endhighlight %} 20 | 21 | ## Fixed top 22 | 23 | Position an element at the top of the viewport, from edge to edge. Be sure you understand the ramifications of fixed position in your project; you may need to add additional CSS. 24 | 25 | {% highlight html %} 26 |
    ...
    27 | {% endhighlight %} 28 | 29 | ## Fixed bottom 30 | 31 | Position an element at the bottom of the viewport, from edge to edge. Be sure you understand the ramifications of fixed position in your project; you may need to add additional CSS. 32 | 33 | {% highlight html %} 34 |
    ...
    35 | {% endhighlight %} 36 | 37 | ## Sticky top 38 | 39 | Position an element at the top of the viewport, from edge to edge, but only after you scroll past it. The `.sticky-top` utility uses CSS's `position: sticky`, which isn't fully supported in all browsers. 40 | 41 | **IE11 and IE10 will render `position: sticky` as `position: relative`.** As such, we wrap the styles in a `@supports` query, limiting the stickiness to only browsers that can render it properly. 42 | 43 | {% highlight html %} 44 |
    ...
    45 | {% endhighlight %} 46 | -------------------------------------------------------------------------------- /site/_includes/scripts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {%- if jekyll.environment == "production" or jekyll.environment == "netlify" -%} 5 | 6 | {%- else -%} 7 | 8 | {%- endif -%} 9 | 10 | {%- if page.layout == "docs" -%} 11 | 12 | {%- endif -%} 13 | 14 | {%- if jekyll.environment == "production" or jekyll.environment == "netlify" -%} 15 | 16 | {%- else -%} 17 | 18 | 19 | 20 | 21 | 22 | 23 | {%- endif -%} 24 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/navbar-fixed/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: examples 3 | title: Fixed top navbar example 4 | extra_css: "navbar-top-fixed.rtl.css" 5 | --- 6 | 7 | 30 | 31 |
    32 |
    33 |

    Navbar example

    34 |

    This example is a quick exercise to illustrate how fixed to top navbar works. As you scroll, it will remain fixed to the top of your browser’s viewport.

    35 | View navbar docs » 36 |
    37 |
    38 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/docs.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap Docs (https://getbootstrap.com/) 3 | * Copyright 2011-2020 The Bootstrap Authors 4 | * Copyright 2011-2020 Twitter, Inc. 5 | * Licensed under the Creative Commons Attribution 3.0 Unported License. 6 | * For details, see https://creativecommons.org/licenses/by/3.0/. 7 | */ 8 | 9 | // Dev notes 10 | // 11 | // Background information on nomenclature and architecture decisions here. 12 | // 13 | // - Bootstrap functions, variables, and mixins are included for easy reuse. 14 | // Doing so gives us access to the same core utilities provided by Bootstrap. 15 | // For example, consistent media queries through those mixins. 16 | // 17 | // - Bootstrap's **docs variables** are prefixed with `$bd-`. 18 | // These custom colors avoid collision with the components Bootstrap provides. 19 | // 20 | // - Classes are prefixed with `.bd-`. 21 | // These classes indicate custom-built or modified components for the design 22 | // and layout of the Bootstrap docs. They are not included in our builds. 23 | // 24 | // Happy Bootstrapping! 25 | 26 | // Load Bootstrap variables and mixins 27 | @import "../../../../../scss/functions"; 28 | @import "../../../../../scss/variables"; 29 | @import "../../../../../scss/mixins"; 30 | 31 | // Load docs components 32 | @import "variables"; 33 | @import "nav"; 34 | @import "masthead"; 35 | @import "ads"; 36 | @import "content"; 37 | @import "skippy"; 38 | @import "sidebar"; 39 | @import "footer"; 40 | @import "component-examples"; 41 | @import "buttons"; 42 | @import "callouts"; 43 | @import "browser-bugs"; 44 | @import "brand"; 45 | @import "colors"; 46 | @import "clipboard-js"; 47 | @import "placeholder-img"; 48 | 49 | // Load docs dependencies 50 | @import "syntax"; 51 | @import "anchor"; 52 | @import "algolia"; 53 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/navbar-static/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: examples 3 | title: Top navbar example 4 | extra_css: "navbar-top.rtl.css" 5 | --- 6 | 7 | 30 | 31 |
    32 |
    33 |

    Navbar example

    34 |

    This example is a quick exercise to illustrate how the top-aligned navbar works. As you scroll, this navbar remains in its original position and moves with the rest of the page.

    35 | View navbar docs » 36 |
    37 |
    38 | -------------------------------------------------------------------------------- /site/_includes/icons/placeholder.svg: -------------------------------------------------------------------------------- 1 | {%- comment -%} 2 | Usage: include icons/placeholder.svg args 3 | 4 | args can be one of the following: 5 | title: Used in the SVG `title` tag 6 | text: The text to show in the image - default: 'width x height' 7 | class: default: 'bd-placeholder-img' 8 | color: The text color (foreground) - default: '#dee2e6' 9 | background: The background color - default: '#868e96' 10 | width: default: 100% 11 | height: default: 180px 12 | {%- endcomment -%} 13 | 14 | {%- assign title = include.title | default: 'Placeholder' -%} 15 | {%- assign class = include.class | default: '' -%} 16 | {%- assign color = include.color | default: site.data.grays[2].hex -%} 17 | {%- assign background = include.background | default: site.data.grays[5].hex -%} 18 | {%- assign width = include.width | default: '100%' -%} 19 | {%- assign height = include.height | default: '180' -%} 20 | 21 | {%- if include.text -%} 22 | {%- assign text = include.text -%} 23 | {%- else -%} 24 | {%- assign text = width | append: 'x' | append: height -%} 25 | {%- endif -%} 26 | 27 | {%- capture svg -%} 28 | 29 | {% if title != ' ' %}{{ title }}{% endif %} 30 | 31 | {% if text != ' ' %}{{ text }}{% endif %} 32 | 33 | {%- endcapture -%} 34 | 35 | {{- svg | replace: ' ', '' | strip_newlines -}} 36 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/scss/_masthead.scss: -------------------------------------------------------------------------------- 1 | // stylelint-disable declaration-no-important 2 | 3 | .bd-masthead { 4 | position: relative; 5 | padding: 3rem ($grid-gutter-width / 2); 6 | background: linear-gradient(to right bottom, lighten($bd-purple-light, 16%) 50%, #fff 50%); 7 | 8 | h1 { 9 | @include font-size(4rem); 10 | line-height: 1; 11 | } 12 | 13 | .lead { 14 | @include font-size(1.5rem); 15 | font-weight: 400; 16 | color: $gray-700; 17 | } 18 | 19 | .btn { 20 | padding: .8rem 2rem; 21 | font-weight: 600; 22 | @include font-size(1.25rem); 23 | } 24 | 25 | .carbonad { 26 | margin-top: 0 !important; 27 | margin-bottom: -3rem !important; 28 | } 29 | 30 | @include media-breakpoint-up(sm) { 31 | padding-top: 5rem; 32 | padding-bottom: 5rem; 33 | 34 | .carbonad { 35 | margin-bottom: 0 !important; 36 | } 37 | } 38 | 39 | @include media-breakpoint-up(md) { 40 | .carbonad { 41 | margin-top: 3rem !important; 42 | } 43 | } 44 | } 45 | 46 | .masthead-followup { 47 | .bd-clipboard { display: none; } 48 | 49 | h2 { 50 | @include font-size(2.5rem); 51 | } 52 | 53 | .highlight { 54 | @include border-radius(.5rem); 55 | 56 | pre::-webkit-scrollbar { 57 | display: none; 58 | } 59 | 60 | pre code { 61 | display: inline-block; 62 | white-space: pre; 63 | 64 | &::before { 65 | display: none; 66 | } 67 | } 68 | } 69 | } 70 | 71 | .masthead-followup-icon { 72 | padding: .75rem; 73 | background-image: linear-gradient(to bottom right, rgba(255, 255, 255, .2), rgba(255, 255, 255, .01)); 74 | @include border-radius(.75rem); 75 | box-shadow: 0 .125rem .25rem rgba(0, 0, 0, .1); 76 | } 77 | 78 | .masthead-followup-svg { 79 | filter: drop-shadow(0 1px 0 rgba(0, 0, 0, .125)); 80 | } 81 | -------------------------------------------------------------------------------- /site/docs/4.5/about/license.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: License FAQs 4 | description: Commonly asked questions about Bootstrap's open source license. 5 | group: about 6 | --- 7 | 8 | Bootstrap is released under the MIT license and is copyright {{ site.time | date: "%Y" }} Twitter. Boiled down to smaller chunks, it can be described with the following conditions. 9 | 10 | #### It requires you to: 11 | 12 | * Keep the license and copyright notice included in Bootstrap's CSS and JavaScript files when you use them in your works 13 | 14 | #### It permits you to: 15 | 16 | - Freely download and use Bootstrap, in whole or in part, for personal, private, company internal, or commercial purposes 17 | - Use Bootstrap in packages or distributions that you create 18 | - Modify the source code 19 | - Grant a sublicense to modify and distribute Bootstrap to third parties not included in the license 20 | 21 | #### It forbids you to: 22 | 23 | - Hold the authors and license owners liable for damages as Bootstrap is provided without warranty 24 | - Hold the creators or copyright holders of Bootstrap liable 25 | - Redistribute any piece of Bootstrap without proper attribution 26 | - Use any marks owned by Twitter in any way that might state or imply that Twitter endorses your distribution 27 | - Use any marks owned by Twitter in any way that might state or imply that you created the Twitter software in question 28 | 29 | #### It does not require you to: 30 | 31 | - Include the source of Bootstrap itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it 32 | - Submit changes that you make to Bootstrap back to the Bootstrap project (though such feedback is encouraged) 33 | 34 | The full Bootstrap license is located [in the project repository]({{ site.repo }}/blob/v{{ site.current_version }}/LICENSE) for more information. 35 | -------------------------------------------------------------------------------- /site/docs/4.5/assets/js/src/search.js: -------------------------------------------------------------------------------- 1 | // NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT 2 | // IT'S ALL JUST JUNK FOR OUR DOCS! 3 | // ++++++++++++++++++++++++++++++++++++++++++ 4 | 5 | (function () { 6 | 'use strict' 7 | 8 | if (!window.docsearch) { 9 | return 10 | } 11 | 12 | var inputElement = document.getElementById('search-input') 13 | var siteDocsVersion = inputElement.getAttribute('data-docs-version') 14 | 15 | function getOrigin() { 16 | var location = window.location 17 | var origin = location.origin 18 | 19 | if (!origin) { 20 | var port = location.port ? ':' + location.port : '' 21 | 22 | origin = location.protocol + '//' + location.hostname + port 23 | } 24 | 25 | return origin 26 | } 27 | 28 | window.docsearch({ 29 | apiKey: '5990ad008512000bba2cf951ccf0332f', 30 | indexName: 'bootstrap', 31 | inputSelector: '#search-input', 32 | algoliaOptions: { 33 | facetFilters: ['version:' + siteDocsVersion] 34 | }, 35 | transformData: function (hits) { 36 | return hits.map(function (hit) { 37 | var currentUrl = getOrigin() 38 | var liveUrl = 'https://getbootstrap.com/' 39 | 40 | hit.url = currentUrl.lastIndexOf(liveUrl, 0) === 0 ? 41 | // On production, return the result as is 42 | hit.url : 43 | // On development or Netlify, replace `hit.url` with a trailing slash, 44 | // so that the result link is relative to the server root 45 | hit.url.replace(liveUrl, '/') 46 | 47 | // Prevent jumping to first header 48 | if (hit.anchor === 'content') { 49 | hit.url = hit.url.replace(/#content$/, '') 50 | hit.anchor = null 51 | } 52 | 53 | return hit 54 | }) 55 | }, 56 | // Set debug to `true` if you want to inspect the dropdown 57 | debug: false 58 | }) 59 | })() 60 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/navbar-bottom/index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: examples 3 | title: Bottom navbar example 4 | --- 5 | 6 |
    7 |
    8 |

    Bottom Navbar example

    9 |

    This example is a quick exercise to illustrate how the bottom navbar works.

    10 | View navbar docs » 11 |
    12 |
    13 | 40 | -------------------------------------------------------------------------------- /nuget/bootstrap.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bootstrap 5 | 6 | 4 7 | Bootstrap CSS 8 | The Bootstrap Authors, Twitter Inc. 9 | bootstrap 10 | The most popular front-end framework for developing responsive, mobile first projects on the web. 11 | https://blog.getbootstrap.com/ 12 | Bootstrap framework in CSS. Includes JavaScript 13 | en-us 14 | https://getbootstrap.com/ 15 | bootstrap.png 16 | LICENSE.txt 17 | Copyright 2017-2020 18 | false 19 | 20 | 21 | 22 | 23 | css mobile-first responsive front-end framework web 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /site/docs/4.5/content/code.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Code 4 | description: Documentation and examples for displaying inline and multiline blocks of code with Bootstrap. 5 | group: content 6 | toc: true 7 | --- 8 | 9 | ## Inline code 10 | 11 | Wrap inline snippets of code with ``. Be sure to escape HTML angle brackets. 12 | 13 | {% capture example %} 14 | For example, <section> should be wrapped as inline. 15 | {% endcapture %} 16 | {% include example.html content=example %} 17 | 18 | ## Code blocks 19 | 20 | Use `
    `s for multiple lines of code. Once again, be sure to escape any angle brackets in the code for proper rendering. You may optionally add the `.pre-scrollable` class, which will set a max-height of 340px and provide a y-axis scrollbar.
    21 | 
    22 | {% capture example %}
    23 | 
    <p>Sample text here...</p>
    24 | <p>And another line of sample text here...</p>
    25 | 
    26 | {% endcapture %} 27 | {% include example.html content=example %} 28 | 29 | ## Variables 30 | 31 | For indicating variables use the `` tag. 32 | 33 | {% capture example %} 34 | y = mx + b 35 | {% endcapture %} 36 | {% include example.html content=example %} 37 | 38 | ## User input 39 | 40 | Use the `` to indicate input that is typically entered via keyboard. 41 | 42 | {% capture example %} 43 | To switch directories, type cd followed by the name of the directory.
    44 | To edit settings, press ctrl + , 45 | {% endcapture %} 46 | {% include example.html content=example %} 47 | 48 | ## Sample output 49 | 50 | For indicating sample output from a program use the `` tag. 51 | 52 | {% capture example %} 53 | This text is meant to be treated as sample output from a computer program. 54 | {% endcapture %} 55 | {% include example.html content=example %} 56 | -------------------------------------------------------------------------------- /js/tests/browsers.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node */ 2 | /* eslint-disable camelcase */ 3 | 4 | const browsers = { 5 | safariMac: { 6 | base: 'BrowserStack', 7 | os: 'OS X', 8 | os_version: 'High Sierra', 9 | browser: 'Safari', 10 | browser_version: 'latest' 11 | }, 12 | chromeMac: { 13 | base: 'BrowserStack', 14 | os: 'OS X', 15 | os_version: 'High Sierra', 16 | browser: 'Chrome', 17 | browser_version: 'latest' 18 | }, 19 | firefoxMac: { 20 | base: 'BrowserStack', 21 | os: 'OS X', 22 | os_version: 'High Sierra', 23 | browser: 'Firefox', 24 | browser_version: 'latest' 25 | }, 26 | edgeWin10: { 27 | base: 'BrowserStack', 28 | os: 'Windows', 29 | os_version: '10', 30 | browser: 'Edge', 31 | browser_version: '15' 32 | }, 33 | ie11Win10: { 34 | base: 'BrowserStack', 35 | os: 'Windows', 36 | os_version: '10', 37 | browser: 'IE', 38 | browser_version: '11.0' 39 | }, 40 | chromeWin10: { 41 | base: 'BrowserStack', 42 | os: 'Windows', 43 | os_version: '10', 44 | browser: 'Chrome', 45 | browser_version: 'latest' 46 | }, 47 | firefoxWin10: { 48 | base: 'BrowserStack', 49 | os: 'Windows', 50 | os_version: '10', 51 | browser: 'Firefox', 52 | browser_version: 'latest' 53 | }, 54 | ie10Win8: { 55 | base: 'BrowserStack', 56 | os: 'Windows', 57 | os_version: '8', 58 | browser: 'IE', 59 | browser_version: '10.0' 60 | }, 61 | iphoneX: { 62 | base: 'BrowserStack', 63 | os: 'ios', 64 | os_version: '11.0', 65 | device: 'iPhone X', 66 | real_mobile: true 67 | }, 68 | pixel2: { 69 | base: 'BrowserStack', 70 | os: 'android', 71 | os_version: '8.0', 72 | device: 'Google Pixel 2', 73 | real_mobile: true 74 | } 75 | } 76 | 77 | const browsersKeys = Object.keys(browsers) 78 | 79 | module.exports = { 80 | browsers, 81 | browsersKeys 82 | } 83 | -------------------------------------------------------------------------------- /nuget/bootstrap.sass.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | bootstrap.sass 5 | 6 | 4 7 | Bootstrap Sass 8 | The Bootstrap Authors, Twitter Inc. 9 | bootstrap 10 | The most popular front-end framework for developing responsive, mobile first projects on the web. 11 | https://blog.getbootstrap.com/ 12 | Bootstrap framework in Sass. Includes JavaScript 13 | en-us 14 | https://getbootstrap.com/ 15 | bootstrap.png 16 | LICENSE.txt 17 | Copyright 2017-2020 18 | false 19 | 20 | 21 | 22 | 23 | css sass mobile-first responsive front-end framework web 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/offcanvas/offcanvas.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | overflow-x: hidden; /* Prevent scroll on narrow devices */ 4 | } 5 | 6 | body { 7 | padding-top: 56px; 8 | } 9 | 10 | @media (max-width: 991.98px) { 11 | .offcanvas-collapse { 12 | position: fixed; 13 | top: 56px; /* Height of navbar */ 14 | bottom: 0; 15 | left: 100%; 16 | width: 100%; 17 | padding-right: 1rem; 18 | padding-left: 1rem; 19 | overflow-y: auto; 20 | visibility: hidden; 21 | background-color: #343a40; 22 | transition: visibility .3s ease-in-out, -webkit-transform .3s ease-in-out; 23 | transition: transform .3s ease-in-out, visibility .3s ease-in-out; 24 | transition: transform .3s ease-in-out, visibility .3s ease-in-out, -webkit-transform .3s ease-in-out; 25 | } 26 | .offcanvas-collapse.open { 27 | visibility: visible; 28 | -webkit-transform: translateX(-100%); 29 | transform: translateX(-100%); 30 | } 31 | } 32 | 33 | .nav-scroller { 34 | position: relative; 35 | z-index: 2; 36 | height: 2.75rem; 37 | overflow-y: hidden; 38 | } 39 | 40 | .nav-scroller .nav { 41 | display: -ms-flexbox; 42 | display: flex; 43 | -ms-flex-wrap: nowrap; 44 | flex-wrap: nowrap; 45 | padding-bottom: 1rem; 46 | margin-top: -1px; 47 | overflow-x: auto; 48 | color: rgba(255, 255, 255, .75); 49 | text-align: center; 50 | white-space: nowrap; 51 | -webkit-overflow-scrolling: touch; 52 | } 53 | 54 | .nav-underline .nav-link { 55 | padding-top: .75rem; 56 | padding-bottom: .75rem; 57 | font-size: .875rem; 58 | color: #6c757d; 59 | } 60 | 61 | .nav-underline .nav-link:hover { 62 | color: #007bff; 63 | } 64 | 65 | .nav-underline .active { 66 | font-weight: 500; 67 | color: #343a40; 68 | } 69 | 70 | .text-white-50 { color: rgba(255, 255, 255, .5); } 71 | 72 | .bg-purple { background-color: #6f42c1; } 73 | 74 | .lh-100 { line-height: 1; } 75 | .lh-125 { line-height: 1.25; } 76 | .lh-150 { line-height: 1.5; } 77 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/offcanvas/offcanvas.rtl.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | overflow-x: hidden; /* Prevent scroll on narrow devices */ 4 | } 5 | 6 | body { 7 | padding-top: 56px; 8 | } 9 | 10 | @media (max-width: 991.98px) { 11 | .offcanvas-collapse { 12 | position: fixed; 13 | top: 56px; /* Height of navbar */ 14 | bottom: 0; 15 | right: 100%; 16 | width: 100%; 17 | padding-left: 1rem; 18 | padding-right: 1rem; 19 | overflow-y: auto; 20 | visibility: hidden; 21 | background-color: #343a40; 22 | transition: visibility .3s ease-in-out, -webkit-transform .3s ease-in-out; 23 | transition: transform .3s ease-in-out, visibility .3s ease-in-out; 24 | transition: transform .3s ease-in-out, visibility .3s ease-in-out, -webkit-transform .3s ease-in-out; 25 | } 26 | .offcanvas-collapse.open { 27 | visibility: visible; 28 | -webkit-transform: translateX(100%); 29 | transform: translateX(100%); 30 | } 31 | } 32 | 33 | .nav-scroller { 34 | position: relative; 35 | z-index: 2; 36 | height: 2.75rem; 37 | overflow-y: hidden; 38 | } 39 | 40 | .nav-scroller .nav { 41 | display: -ms-flexbox; 42 | display: flex; 43 | -ms-flex-wrap: nowrap; 44 | flex-wrap: nowrap; 45 | padding-bottom: 1rem; 46 | margin-top: -1px; 47 | overflow-x: auto; 48 | color: rgba(255, 255, 255, .75); 49 | text-align: center; 50 | white-space: nowrap; 51 | -webkit-overflow-scrolling: touch; 52 | } 53 | 54 | .nav-underline .nav-link { 55 | padding-top: .75rem; 56 | padding-bottom: .75rem; 57 | font-size: .875rem; 58 | color: #6c757d; 59 | } 60 | 61 | .nav-underline .nav-link:hover { 62 | color: #007bff; 63 | } 64 | 65 | .nav-underline .active { 66 | font-weight: 500; 67 | color: #343a40; 68 | } 69 | 70 | .text-white-50 { color: rgba(255, 255, 255, .5); } 71 | 72 | .bg-purple { background-color: #6f42c1; } 73 | 74 | .lh-100 { line-height: 1; } 75 | .lh-125 { line-height: 1.25; } 76 | .lh-150 { line-height: 1.5; } 77 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/cover/cover.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Globals 3 | */ 4 | 5 | /* Links */ 6 | a, 7 | a:focus, 8 | a:hover { 9 | color: #fff; 10 | } 11 | 12 | /* Custom default button */ 13 | .btn-secondary, 14 | .btn-secondary:hover, 15 | .btn-secondary:focus { 16 | color: #333; 17 | text-shadow: none; /* Prevent inheritance from `body` */ 18 | background-color: #fff; 19 | border: .05rem solid #fff; 20 | } 21 | 22 | 23 | /* 24 | * Base structure 25 | */ 26 | 27 | html, 28 | body { 29 | height: 100%; 30 | background-color: #333; 31 | } 32 | 33 | body { 34 | display: -ms-flexbox; 35 | display: flex; 36 | color: #fff; 37 | text-shadow: 0 .05rem .1rem rgba(0, 0, 0, .5); 38 | box-shadow: inset 0 0 5rem rgba(0, 0, 0, .5); 39 | } 40 | 41 | .cover-container { 42 | max-width: 42em; 43 | } 44 | 45 | 46 | /* 47 | * Header 48 | */ 49 | .masthead { 50 | margin-bottom: 2rem; 51 | } 52 | 53 | .masthead-brand { 54 | margin-bottom: 0; 55 | } 56 | 57 | .nav-masthead .nav-link { 58 | padding: .25rem 0; 59 | font-weight: 700; 60 | color: rgba(255, 255, 255, .5); 61 | background-color: transparent; 62 | border-bottom: .25rem solid transparent; 63 | } 64 | 65 | .nav-masthead .nav-link:hover, 66 | .nav-masthead .nav-link:focus { 67 | border-bottom-color: rgba(255, 255, 255, .25); 68 | } 69 | 70 | .nav-masthead .nav-link + .nav-link { 71 | margin-left: 1rem; 72 | } 73 | 74 | .nav-masthead .active { 75 | color: #fff; 76 | border-bottom-color: #fff; 77 | } 78 | 79 | @media (min-width: 48em) { 80 | .masthead-brand { 81 | float: left; 82 | } 83 | .nav-masthead { 84 | float: right; 85 | } 86 | } 87 | 88 | 89 | /* 90 | * Cover 91 | */ 92 | .cover { 93 | padding: 0 1.5rem; 94 | } 95 | .cover .btn-lg { 96 | padding: .75rem 1.25rem; 97 | font-weight: 700; 98 | } 99 | 100 | 101 | /* 102 | * Footer 103 | */ 104 | .mastfoot { 105 | color: rgba(255, 255, 255, .5); 106 | } 107 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/cover/cover.rtl.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Globals 3 | */ 4 | 5 | /* Links */ 6 | a, 7 | a:focus, 8 | a:hover { 9 | color: #fff; 10 | } 11 | 12 | /* Custom default button */ 13 | .btn-secondary, 14 | .btn-secondary:hover, 15 | .btn-secondary:focus { 16 | color: #333; 17 | text-shadow: none; /* Prevent inheritance from `body` */ 18 | background-color: #fff; 19 | border: .05rem solid #fff; 20 | } 21 | 22 | 23 | /* 24 | * Base structure 25 | */ 26 | 27 | html, 28 | body { 29 | height: 100%; 30 | background-color: #333; 31 | } 32 | 33 | body { 34 | display: -ms-flexbox; 35 | display: flex; 36 | color: #fff; 37 | text-shadow: 0 .05rem .1rem rgba(0, 0, 0, .5); 38 | box-shadow: inset 0 0 5rem rgba(0, 0, 0, .5); 39 | } 40 | 41 | .cover-container { 42 | max-width: 42em; 43 | } 44 | 45 | 46 | /* 47 | * Header 48 | */ 49 | .masthead { 50 | margin-bottom: 2rem; 51 | } 52 | 53 | .masthead-brand { 54 | margin-bottom: 0; 55 | } 56 | 57 | .nav-masthead .nav-link { 58 | padding: .25rem 0; 59 | font-weight: 700; 60 | color: rgba(255, 255, 255, .5); 61 | background-color: transparent; 62 | border-bottom: .25rem solid transparent; 63 | } 64 | 65 | .nav-masthead .nav-link:hover, 66 | .nav-masthead .nav-link:focus { 67 | border-bottom-color: rgba(255, 255, 255, .25); 68 | } 69 | 70 | .nav-masthead .nav-link + .nav-link { 71 | margin-right: 1rem; 72 | } 73 | 74 | .nav-masthead .active { 75 | color: #fff; 76 | border-bottom-color: #fff; 77 | } 78 | 79 | @media (min-width: 48em) { 80 | .masthead-brand { 81 | float: right; 82 | } 83 | .nav-masthead { 84 | float: left; 85 | } 86 | } 87 | 88 | 89 | /* 90 | * Cover 91 | */ 92 | .cover { 93 | padding: 0 1.5rem; 94 | } 95 | .cover .btn-lg { 96 | padding: .75rem 1.25rem; 97 | font-weight: 700; 98 | } 99 | 100 | 101 | /* 102 | * Footer 103 | */ 104 | .mastfoot { 105 | color: rgba(255, 255, 255, .5); 106 | } 107 | -------------------------------------------------------------------------------- /site/docs/4.5/utilities/float.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: docs 3 | title: Float 4 | description: Toggle floats on any element, across any breakpoint, using our responsive float utilities. 5 | group: utilities 6 | toc: true 7 | --- 8 | 9 | ## Overview 10 | 11 | These utility classes float an element to the left or right, or disable floating, based on the current viewport size using the [CSS `float` property](https://developer.mozilla.org/en-US/docs/Web/CSS/float). `!important` is included to avoid specificity issues. These use the same viewport breakpoints as our grid system. Please be aware float utilities have no effect on flex items. 12 | 13 | ## Classes 14 | 15 | Toggle a float with a class: 16 | 17 | {% capture example %} 18 |
    Float left on all viewport sizes

    19 |
    Float right on all viewport sizes

    20 |
    Don't float on all viewport sizes
    21 | {% endcapture %} 22 | {% include example.html content=example %} 23 | 24 | ## Mixins 25 | 26 | Or by Sass mixin: 27 | 28 | {% highlight scss %} 29 | .element { 30 | @include float-left; 31 | } 32 | .another-element { 33 | @include float-right; 34 | } 35 | .one-more { 36 | @include float-none; 37 | } 38 | {% endhighlight %} 39 | 40 | ## Responsive 41 | 42 | Responsive variations also exist for each `float` value. 43 | 44 | {% capture example %} 45 |
    Float left on viewports sized SM (small) or wider

    46 |
    Float left on viewports sized MD (medium) or wider

    47 |
    Float left on viewports sized LG (large) or wider

    48 |
    Float left on viewports sized XL (extra-large) or wider

    49 | {% endcapture %} 50 | {% include example.html content=example %} 51 | 52 | Here are all the support classes; 53 | 54 | {% for bp in site.data.breakpoints %} 55 | - `.float{{ bp.abbr }}-left` 56 | - `.float{{ bp.abbr }}-right` 57 | - `.float{{ bp.abbr }}-none`{% endfor %} 58 | -------------------------------------------------------------------------------- /site/_includes/example.html: -------------------------------------------------------------------------------- 1 | {%- comment -%} 2 | Usage: include example.html content=markup [args], 3 | where content is a capture with the HTML content 4 | 5 | args can be one of the following: 6 | id - null (default) 7 | class - "bd-example" (default) 8 | optional: hide_preview - disabled (default) 9 | optional: hide_markup - disabled (default) 10 | {%- endcomment -%} 11 | 12 | {%- assign id = include.id -%} 13 | {%- assign class = include.class -%} 14 | 15 | {%- if include.hide_preview == null -%} 16 | 17 | {{- include.content -}} 18 | 19 | {%- endif -%} 20 | 21 | {%- if include.hide_markup == null -%} 22 | {%- highlight html -%} 23 | {%- if include.content contains ' 41 | {%- endcapture -%} 42 | {{- img_placeholder -}} 43 | {%- else -%} 44 | {{- content_chunk -}} 45 | {%- endif -%} 46 | {%- endfor -%} 47 | {%- else -%} 48 | {{- include.content -}} 49 | {%- endif -%} 50 | {%- endhighlight -%} 51 | {%- endif -%} 52 | -------------------------------------------------------------------------------- /scss/_grid.scss: -------------------------------------------------------------------------------- 1 | // Container widths 2 | // 3 | // Set the container width, and override it for fixed navbars in media queries. 4 | 5 | @if $enable-grid-classes { 6 | // Single container class with breakpoint max-widths 7 | .container, 8 | // 100% wide container at all breakpoints 9 | .container-fluid { 10 | @include make-container(); 11 | } 12 | 13 | // Responsive containers that are 100% wide until a breakpoint 14 | @each $breakpoint, $container-max-width in $container-max-widths { 15 | .container-#{$breakpoint} { 16 | @extend .container-fluid; 17 | } 18 | 19 | @include media-breakpoint-up($breakpoint, $grid-breakpoints) { 20 | %responsive-container-#{$breakpoint} { 21 | max-width: $container-max-width; 22 | } 23 | 24 | // Extend each breakpoint which is smaller or equal to the current breakpoint 25 | $extend-breakpoint: true; 26 | 27 | @each $name, $width in $grid-breakpoints { 28 | @if ($extend-breakpoint) { 29 | .container#{breakpoint-infix($name, $grid-breakpoints)} { 30 | @extend %responsive-container-#{$breakpoint}; 31 | } 32 | 33 | // Once the current breakpoint is reached, stop extending 34 | @if ($breakpoint == $name) { 35 | $extend-breakpoint: false; 36 | } 37 | } 38 | } 39 | } 40 | } 41 | } 42 | 43 | 44 | // Row 45 | // 46 | // Rows contain your columns. 47 | 48 | @if $enable-grid-classes { 49 | .row { 50 | @include make-row(); 51 | } 52 | 53 | // Remove the negative margin from default .row, then the horizontal padding 54 | // from all immediate children columns (to prevent runaway style inheritance). 55 | .no-gutters { 56 | margin-right: 0; 57 | margin-left: 0; 58 | 59 | > .col, 60 | > [class*="col-"] { 61 | padding-right: 0; 62 | padding-left: 0; 63 | } 64 | } 65 | } 66 | 67 | // Columns 68 | // 69 | // Common styles for small and large grid columns 70 | 71 | @if $enable-grid-classes { 72 | @include make-grid-columns(); 73 | } 74 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/carousel/carousel.css: -------------------------------------------------------------------------------- 1 | /* GLOBAL STYLES 2 | -------------------------------------------------- */ 3 | /* Padding below the footer and lighter body text */ 4 | 5 | body { 6 | padding-top: 3rem; 7 | padding-bottom: 3rem; 8 | color: #5a5a5a; 9 | } 10 | 11 | 12 | /* CUSTOMIZE THE CAROUSEL 13 | -------------------------------------------------- */ 14 | 15 | /* Carousel base class */ 16 | .carousel { 17 | margin-bottom: 4rem; 18 | } 19 | /* Since positioning the image, we need to help out the caption */ 20 | .carousel-caption { 21 | bottom: 3rem; 22 | z-index: 10; 23 | } 24 | 25 | /* Declare heights because of positioning of img element */ 26 | .carousel-item { 27 | height: 32rem; 28 | } 29 | .carousel-item > img { 30 | position: absolute; 31 | top: 0; 32 | left: 0; 33 | min-width: 100%; 34 | height: 32rem; 35 | } 36 | 37 | 38 | /* MARKETING CONTENT 39 | -------------------------------------------------- */ 40 | 41 | /* Center align the text within the three columns below the carousel */ 42 | .marketing .col-lg-4 { 43 | margin-bottom: 1.5rem; 44 | text-align: center; 45 | } 46 | .marketing h2 { 47 | font-weight: 400; 48 | } 49 | .marketing .col-lg-4 p { 50 | margin-right: .75rem; 51 | margin-left: .75rem; 52 | } 53 | 54 | 55 | /* Featurettes 56 | ------------------------- */ 57 | 58 | .featurette-divider { 59 | margin: 5rem 0; /* Space out the Bootstrap
    more */ 60 | } 61 | 62 | /* Thin out the marketing headings */ 63 | .featurette-heading { 64 | font-weight: 300; 65 | line-height: 1; 66 | letter-spacing: -.05rem; 67 | } 68 | 69 | 70 | /* RESPONSIVE CSS 71 | -------------------------------------------------- */ 72 | 73 | @media (min-width: 40em) { 74 | /* Bump up size of carousel content */ 75 | .carousel-caption p { 76 | margin-bottom: 1.25rem; 77 | font-size: 1.25rem; 78 | line-height: 1.4; 79 | } 80 | 81 | .featurette-heading { 82 | font-size: 50px; 83 | } 84 | } 85 | 86 | @media (min-width: 62em) { 87 | .featurette-heading { 88 | margin-top: 7rem; 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /site/docs/4.5/examples/carousel/carousel.rtl.css: -------------------------------------------------------------------------------- 1 | /* GLOBAL STYLES 2 | -------------------------------------------------- */ 3 | /* Padding below the footer and lighter body text */ 4 | 5 | body { 6 | padding-top: 3rem; 7 | padding-bottom: 3rem; 8 | color: #5a5a5a; 9 | } 10 | 11 | 12 | /* CUSTOMIZE THE CAROUSEL 13 | -------------------------------------------------- */ 14 | 15 | /* Carousel base class */ 16 | .carousel { 17 | margin-bottom: 4rem; 18 | } 19 | /* Since positioning the image, we need to help out the caption */ 20 | .carousel-caption { 21 | bottom: 3rem; 22 | z-index: 10; 23 | } 24 | 25 | /* Declare heights because of positioning of img element */ 26 | .carousel-item { 27 | height: 32rem; 28 | } 29 | .carousel-item > img { 30 | position: absolute; 31 | top: 0; 32 | right: 0; 33 | min-width: 100%; 34 | height: 32rem; 35 | } 36 | 37 | 38 | /* MARKETING CONTENT 39 | -------------------------------------------------- */ 40 | 41 | /* Center align the text within the three columns below the carousel */ 42 | .marketing .col-lg-4 { 43 | margin-bottom: 1.5rem; 44 | text-align: center; 45 | } 46 | .marketing h2 { 47 | font-weight: 400; 48 | } 49 | .marketing .col-lg-4 p { 50 | margin-left: .75rem; 51 | margin-right: .75rem; 52 | } 53 | 54 | 55 | /* Featurettes 56 | ------------------------- */ 57 | 58 | .featurette-divider { 59 | margin: 5rem 0; /* Space out the Bootstrap
    more */ 60 | } 61 | 62 | /* Thin out the marketing headings */ 63 | .featurette-heading { 64 | font-weight: 300; 65 | line-height: 1; 66 | letter-spacing: -.05rem; 67 | } 68 | 69 | 70 | /* RESPONSIVE CSS 71 | -------------------------------------------------- */ 72 | 73 | @media (min-width: 40em) { 74 | /* Bump up size of carousel content */ 75 | .carousel-caption p { 76 | margin-bottom: 1.25rem; 77 | font-size: 1.25rem; 78 | line-height: 1.4; 79 | } 80 | 81 | .featurette-heading { 82 | font-size: 50px; 83 | } 84 | } 85 | 86 | @media (min-width: 62em) { 87 | .featurette-heading { 88 | margin-top: 7rem; 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /site/_includes/docs-sidebar.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | 44 | --------------------------------------------------------------------------------