diff --git a/.browserslistrc b/.browserslistrc
index b8e384bc9..c17ce9049 100644
--- a/.browserslistrc
+++ b/.browserslistrc
@@ -1,14 +1,11 @@
# https://github.com/browserslist/browserslist#readme
->= 0.5%
-last 2 major versions
+>= 1%
+last 1 major version
not dead
Chrome >= 60
Firefox >= 60
-# needed since Legacy Edge still has usage; 79 was the first Chromium Edge version
-# should be removed in the future when its usage drops or when it's moved to dead browsers
-not Edge < 79
-Firefox ESR
+Edge >= 16
iOS >= 10
Safari >= 10
Android >= 6
diff --git a/.bundlewatch.config.json b/.bundlewatch.config.json
index da47da480..7cab49f39 100644
--- a/.bundlewatch.config.json
+++ b/.bundlewatch.config.json
@@ -10,7 +10,7 @@
},
{
"path": "./dist/css/bootstrap-reboot.css",
- "maxSize": "2.25 kB"
+ "maxSize": "2 kB"
},
{
"path": "./dist/css/bootstrap-reboot.min.css",
@@ -18,11 +18,11 @@
},
{
"path": "./dist/css/bootstrap-utilities.css",
- "maxSize": "7.5 kB"
+ "maxSize": "7 kB"
},
{
"path": "./dist/css/bootstrap-utilities.min.css",
- "maxSize": "6.75 kB"
+ "maxSize": "6 kB"
},
{
"path": "./dist/css/bootstrap.css",
@@ -30,31 +30,31 @@
},
{
"path": "./dist/css/bootstrap.min.css",
- "maxSize": "22 kB"
+ "maxSize": "21 kB"
},
{
"path": "./dist/js/bootstrap.bundle.js",
- "maxSize": "41 kB"
+ "maxSize": "51 kB"
},
{
"path": "./dist/js/bootstrap.bundle.min.js",
- "maxSize": "21.5 kB"
+ "maxSize": "22.5 kB"
},
{
"path": "./dist/js/bootstrap.esm.js",
- "maxSize": "27 kB"
- },
- {
- "path": "./dist/js/bootstrap.esm.min.js",
- "maxSize": "18 kB"
- },
- {
- "path": "./dist/js/bootstrap.js",
"maxSize": "28 kB"
},
+ {
+ "path": "./dist/js/bootstrap.esm.min.js",
+ "maxSize": "19 kB"
+ },
+ {
+ "path": "./dist/js/bootstrap.js",
+ "maxSize": "29 kB"
+ },
{
"path": "./dist/js/bootstrap.min.js",
- "maxSize": "15.5 kB"
+ "maxSize": "16 kB"
}
],
"ci": {
diff --git a/.eslintignore b/.eslintignore
index ae6baae7e..6d874bc36 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -4,3 +4,4 @@
/_gh_pages/
/js/coverage/
/site/static/sw.js
+/package.js
diff --git a/.eslintrc.json b/.eslintrc.json
index d5a54d46b..59fe70f56 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -25,12 +25,7 @@
"error",
"always-multiline"
],
- "new-cap": [
- "error",
- {
- "properties": false
- }
- ],
+ "new-cap": "off",
"no-console": "error",
"object-curly-spacing": [
"error",
@@ -43,16 +38,21 @@
],
"unicorn/consistent-function-scoping": "off",
"unicorn/explicit-length-check": "off",
- "unicorn/no-array-callback-reference": "off",
+ "unicorn/import-index": "off",
+ "unicorn/no-fn-reference-in-iterator": "off",
"unicorn/no-for-loop": "off",
"unicorn/no-null": "off",
"unicorn/no-unused-properties": "error",
"unicorn/no-useless-undefined": "off",
- "unicorn/prefer-dom-node-append": "off",
- "unicorn/prefer-dom-node-dataset": "off",
- "unicorn/prefer-dom-node-remove": "off",
+ "unicorn/prefer-array-find": "off",
+ "unicorn/prefer-dataset": "off",
+ "unicorn/prefer-includes": "off",
+ "unicorn/prefer-node-append": "off",
+ "unicorn/prefer-node-remove": "off",
+ "unicorn/prefer-number-properties": "off",
"unicorn/prefer-optional-catch-binding": "off",
"unicorn/prefer-query-selector": "off",
+ "unicorn/prefer-set-has": "off",
"unicorn/prevent-abbreviations": "off"
}
}
diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 32b30cdb3..75841c222 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -101,12 +101,12 @@ Example:
Sometimes bugs reported to us are actually caused by bugs in the browser(s) themselves, not bugs in Bootstrap per se.
-| Vendor(s) | Browser(s) | Rendering engine | Bug reporting website(s) | Notes |
-| ------------- | ---------------------------- | ---------------- | ------------------------------------------------------ | -------------------------------------------------------- |
-| Mozilla | Firefox | Gecko | https://bugzilla.mozilla.org/enter_bug.cgi | "Core" is normally the right product option to choose. |
-| Apple | Safari | WebKit | https://bugs.webkit.org/enter_bug.cgi?product=WebKit | In Apple's bug reporter, choose "Safari" as the product. |
-| Google, Opera | Chrome, Chromium, Opera v15+ | Blink | https://bugs.chromium.org/p/chromium/issues/list | Click the "New issue" button. |
-| Microsoft | Edge | Blink | https://developer.microsoft.com/en-us/microsoft-edge/ | Go to "Help > Send Feedback" from the browser |
+| Vendor(s) | Browser(s) | Rendering engine | Bug reporting website(s) | Notes |
+| ------------- | ---------------------------- | ---------------- | ------------------------------------------------------------------------------------- | -------------------------------------------------------- |
+| Mozilla | Firefox | Gecko | https://bugzilla.mozilla.org/enter_bug.cgi | "Core" is normally the right product option to choose. |
+| Apple | Safari | WebKit | https://bugs.webkit.org/enter_bug.cgi?product=WebKit
https://bugreport.apple.com/ | In Apple's bug reporter, choose "Safari" as the product. |
+| Google, Opera | Chrome, Chromium, Opera v15+ | Blink | https://bugs.chromium.org/p/chromium/issues/list | Click the "New issue" button. |
+| Microsoft | Edge | EdgeHTML | https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/ | |
## Feature requests
@@ -123,20 +123,18 @@ Good pull requests—patches, improvements, new features—are a fantastic
help. They should remain focused in scope and avoid containing unrelated
commits.
-**Please ask first** before embarking on any **significant** pull request (e.g.
+**Please ask first** before embarking on any significant pull request (e.g.
implementing features, refactoring code, porting to a different language),
otherwise you risk spending a lot of time working on something that the
-project's developers might not want to merge into the project. For trivial
-things, or things that don't require a lot of your time, you can go ahead and
-make a PR.
+project's developers might not want to merge into the project.
Please adhere to the [coding guidelines](#code-guidelines) used throughout the
project (indentation, accurate comments, etc.) and any other requirements
(such as test coverage).
-**Do not edit `bootstrap.css` or `bootstrap.js`, and do not commit
-any dist files (`dist/` or `js/dist`).** Those files are automatically generated by our build tools. You should
-edit the source files in [`/bootstrap/scss/`](https://github.com/twbs/bootstrap/tree/main/scss)
+**Do not edit `bootstrap.css`, or `bootstrap.js`
+directly!** Those files are automatically generated. You should edit the
+source files in [`/bootstrap/scss/`](https://github.com/twbs/bootstrap/tree/main/scss)
and/or [`/bootstrap/js/src/`](https://github.com/twbs/bootstrap/tree/main/js/src) instead.
Similarly, when contributing to Bootstrap's documentation, you should edit the
@@ -217,7 +215,7 @@ includes code changes) and under the terms of the
[Adhere to the Code Guide.](https://codeguide.co/#css)
- When feasible, default color palettes should comply with [WCAG color contrast guidelines](https://www.w3.org/TR/WCAG20/#visual-audio-contrast).
-- Except in rare cases, don't remove default `:focus` styles (via e.g. `outline: none;`) without providing alternative styles. See [this A11Y Project post](https://www.a11yproject.com/posts/2013-01-25-never-remove-css-outlines/) for more details.
+- Except in rare cases, don't remove default `:focus` styles (via e.g. `outline: none;`) without providing alternative styles. See [this A11Y Project post](https://a11yproject.com/posts/never-remove-css-outlines/) for more details.
### JS
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 29135b400..31976021e 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -15,10 +15,3 @@ updates:
- v5
versioning-strategy: increase
rebase-strategy: disabled
- - package-ecosystem: "github-actions"
- directory: "/"
- schedule:
- interval: weekly
- day: tuesday
- time: "12:00"
- timezone: Europe/Athens
diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml
index e2b70e03e..ae1367c89 100644
--- a/.github/release-drafter.yml
+++ b/.github/release-drafter.yml
@@ -4,9 +4,6 @@ prerelease: true
exclude-labels:
- 'skip-changelog'
categories:
- - title: '❗ Breaking Changes'
- labels:
- - 'breaking-change'
- title: '🚀 Features'
labels:
- 'new-feature'
@@ -17,9 +14,6 @@ categories:
- 'fix'
- 'bugfix'
- 'bug'
- - title: '⚡ Performance Improvements'
- labels:
- - 'performance'
- title: '🎨 CSS'
labels:
- 'css'
@@ -32,19 +26,11 @@ categories:
- title: '🌎 Accessibility'
labels:
- 'accessibility'
- - title: '🔧 Utility API'
- labels:
- - 'utility API'
- - 'utilities'
- - title: '🏭 Tests'
- labels:
- - 'tests'
- title: '🧰 Misc'
labels:
- 'build'
- 'meta'
- 'chore'
- - 'CI'
- title: '📦 Dependencies'
labels:
- 'dependencies'
diff --git a/.github/workflows/browserstack.yml b/.github/workflows/browserstack.yml
index a12bffcf7..f709b98da 100644
--- a/.github/workflows/browserstack.yml
+++ b/.github/workflows/browserstack.yml
@@ -1,24 +1,20 @@
name: BrowserStack
-
-on:
- push:
-
+on: [push]
env:
- FORCE_COLOR: 2
- NODE: 14
+ CI: true
+ NODE: 12.x
jobs:
browserstack:
runs-on: ubuntu-latest
- if: github.repository == 'twbs/bootstrap' && (!contains(github.event.commits[0].message, '[ci skip]') && !contains(github.event.commits[0].message, '[skip ci]'))
- timeout-minutes: 30
+ if: github.repository == 'twbs/bootstrap'
steps:
- name: Clone repository
uses: actions/checkout@v2
- - name: Set up Node.js
- uses: actions/setup-node@v2
+ - name: Set Node.js version
+ uses: actions/setup-node@v1
with:
node-version: "${{ env.NODE }}"
@@ -28,8 +24,8 @@ jobs:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
- ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
- ${{ runner.os }}-node-v${{ env.NODE }}-
+ ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
+ ${{ runner.OS }}-node-v${{ env.NODE }}-
- name: Install npm dependencies
run: npm ci
diff --git a/.github/workflows/bundlewatch.yml b/.github/workflows/bundlewatch.yml
index b2bd5eed5..f09cc9667 100644
--- a/.github/workflows/bundlewatch.yml
+++ b/.github/workflows/bundlewatch.yml
@@ -1,14 +1,8 @@
name: Bundlewatch
-
-on:
- push:
- branches-ignore:
- - "dependabot/**"
- pull_request:
-
+on: [push, pull_request]
env:
- FORCE_COLOR: 2
- NODE: 14
+ CI: true
+ NODE: 12.x
jobs:
bundlewatch:
@@ -18,8 +12,8 @@ jobs:
- name: Clone repository
uses: actions/checkout@v2
- - name: Set up Node.js
- uses: actions/setup-node@v2
+ - name: Set Node.js version
+ uses: actions/setup-node@v1
with:
node-version: "${{ env.NODE }}"
@@ -29,8 +23,8 @@ jobs:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
- ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
- ${{ runner.os }}-node-v${{ env.NODE }}-
+ ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
+ ${{ runner.OS }}-node-v${{ env.NODE }}-
- name: Install npm dependencies
run: npm ci
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 469a5a4fc..777d812d6 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -1,33 +1,22 @@
-name: "CodeQL"
+name: "Code Scanning - Action"
on:
push:
- branches:
- - main
- - v4-dev
- - "!dependabot/**"
- pull_request:
- # The branches below must be a subset of the branches above
- branches:
- - main
- - v4-dev
schedule:
- - cron: "0 2 * * 5"
+ - cron: "0 0 * * 0"
jobs:
- analyze:
- name: Analyze
+ CodeQL-Build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- # Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
- languages: "javascript"
+ languages: javascript
- name: Autobuild
uses: github/codeql-action/autobuild@v1
diff --git a/.github/workflows/css.yml b/.github/workflows/css.yml
index a28059d79..390bffc96 100644
--- a/.github/workflows/css.yml
+++ b/.github/workflows/css.yml
@@ -1,14 +1,8 @@
name: CSS
-
-on:
- push:
- branches-ignore:
- - "dependabot/**"
- pull_request:
-
+on: [push, pull_request]
env:
- FORCE_COLOR: 2
- NODE: 14
+ CI: true
+ NODE: 12.x
jobs:
css:
@@ -18,8 +12,8 @@ jobs:
- name: Clone repository
uses: actions/checkout@v2
- - name: Set up Node.js
- uses: actions/setup-node@v2
+ - name: Set Node.js version
+ uses: actions/setup-node@v1
with:
node-version: "${{ env.NODE }}"
@@ -29,8 +23,8 @@ jobs:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
- ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
- ${{ runner.os }}-node-v${{ env.NODE }}-
+ ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
+ ${{ runner.OS }}-node-v${{ env.NODE }}-
- name: Install npm dependencies
run: npm ci
diff --git a/.github/workflows/dart-sass.yml b/.github/workflows/dart-sass.yml
new file mode 100644
index 000000000..8482a152e
--- /dev/null
+++ b/.github/workflows/dart-sass.yml
@@ -0,0 +1,24 @@
+name: CSS (Dart Sass)
+on: [push, pull_request]
+env:
+ CI: true
+ NODE: 12.x
+
+jobs:
+ css:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Clone repository
+ uses: actions/checkout@v2
+
+ - name: Set Node.js version
+ uses: actions/setup-node@v1
+ with:
+ node-version: "${{ env.NODE }}"
+
+ - name: Build CSS with Dart Sass
+ run: |
+ npx --package sass@latest sass --version
+ npx --package sass@latest sass --style expanded --source-map --embed-sources --no-error-css scss/:dist-sass/css/
+ ls -Al dist-sass/css
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 150e4d16c..652e27a7d 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -1,14 +1,8 @@
name: Docs
-
-on:
- push:
- branches-ignore:
- - "dependabot/**"
- pull_request:
-
+on: [push, pull_request]
env:
- FORCE_COLOR: 2
- NODE: 14
+ CI: true
+ NODE: 12.x
jobs:
docs:
@@ -18,8 +12,8 @@ jobs:
- name: Clone repository
uses: actions/checkout@v2
- - name: Set up Node.js
- uses: actions/setup-node@v2
+ - name: Set Node.js version
+ uses: actions/setup-node@v1
with:
node-version: "${{ env.NODE }}"
@@ -31,8 +25,8 @@ jobs:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
- ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
- ${{ runner.os }}-node-v${{ env.NODE }}-
+ ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
+ ${{ runner.OS }}-node-v${{ env.NODE }}-
- name: Install npm dependencies
run: npm ci
diff --git a/.github/workflows/js.yml b/.github/workflows/js.yml
index c56a2dfdd..543172ccb 100644
--- a/.github/workflows/js.yml
+++ b/.github/workflows/js.yml
@@ -1,13 +1,7 @@
name: JS Tests
-
-on:
- push:
- branches-ignore:
- - "dependabot/**"
- pull_request:
-
+on: [push, pull_request]
env:
- FORCE_COLOR: 2
+ CI: true
jobs:
run:
@@ -17,14 +11,14 @@ jobs:
strategy:
fail-fast: false
matrix:
- node: [10, 12, 14]
+ node: [10, 12]
steps:
- name: Clone repository
uses: actions/checkout@v2
- - name: Set up Node.js
- uses: actions/setup-node@v2
+ - name: Set Node.js version
+ uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node }}
@@ -34,8 +28,8 @@ jobs:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}}
restore-keys: |
- ${{ runner.os }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
- ${{ runner.os }}-node-v${{ matrix.node }}-
+ ${{ runner.OS }}-node-v${{ matrix.node }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
+ ${{ runner.OS }}-node-v${{ matrix.node }}-
- name: Install npm dependencies
run: npm ci
@@ -48,7 +42,7 @@ jobs:
- name: Run Coveralls
uses: coverallsapp/github-action@master
- if: matrix.node == 14
+ if: matrix.node == 12
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
path-to-lcov: "./js/coverage/lcov.info"
diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml
index 369aaced3..f3d00d69f 100644
--- a/.github/workflows/lint.yml
+++ b/.github/workflows/lint.yml
@@ -1,14 +1,8 @@
name: Lint
-
-on:
- push:
- branches-ignore:
- - "dependabot/**"
- pull_request:
-
+on: [push, pull_request]
env:
- FORCE_COLOR: 2
- NODE: 14
+ CI: true
+ NODE: 12.x
jobs:
lint:
@@ -18,8 +12,8 @@ jobs:
- name: Clone repository
uses: actions/checkout@v2
- - name: Set up Node.js
- uses: actions/setup-node@v2
+ - name: Set Node.js version
+ uses: actions/setup-node@v1
with:
node-version: "${{ env.NODE }}"
@@ -29,8 +23,8 @@ jobs:
path: ~/.npm
key: ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
restore-keys: |
- ${{ runner.os }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
- ${{ runner.os }}-node-v${{ env.NODE }}-
+ ${{ runner.OS }}-node-v${{ env.NODE }}-${{ hashFiles('package.json') }}-${{ hashFiles('package-lock.json') }}
+ ${{ runner.OS }}-node-v${{ env.NODE }}-
- name: Install npm dependencies
run: npm ci
diff --git a/.github/workflows/node-sass.yml b/.github/workflows/node-sass.yml
deleted file mode 100644
index ee64b2152..000000000
--- a/.github/workflows/node-sass.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-name: CSS (node-sass)
-
-on:
- push:
- branches-ignore:
- - "dependabot/**"
- pull_request:
-
-env:
- FORCE_COLOR: 2
- NODE: 14
-
-jobs:
- css:
- runs-on: ubuntu-latest
-
- steps:
- - name: Clone repository
- uses: actions/checkout@v2
-
- - name: Set up Node.js
- uses: actions/setup-node@v2
- with:
- node-version: "${{ env.NODE }}"
-
- - name: Build CSS with node-sass
- run: |
- npx --package node-sass@latest node-sass --version
- npx --package node-sass@latest node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/ -o dist-sass/css/
- ls -Al dist-sass/css
diff --git a/.gitignore b/.gitignore
index 0a0f88d15..4ac6ac325 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,19 @@
# Ignore docs files
/_gh_pages/
+# This is the old Jekyll docs dist folder;
+# keeping it here so that when we switch branches it doesn't show up
+/site/docs/**/dist/
+# Jekyll's cache folder; keeping it for the same reason as above
+/site/.jekyll-cache/
# Hugo resources folder
/resources/
+# Ignore ruby/bundler files;
+# keeping them here so that when we switch branches they don't show up
+/.bundle/
+/vendor/
+/.ruby-version
+
# Numerous always-ignore extensions
*.diff
*.err
@@ -28,9 +39,6 @@
*.sublime-workspace
nbproject
Thumbs.db
-/.vscode/
-# Local Netlify folder
-.netlify
# Komodo
.komodotools
diff --git a/.stylelintrc b/.stylelintrc
index c068d30b5..64e0184fd 100644
--- a/.stylelintrc
+++ b/.stylelintrc
@@ -3,16 +3,10 @@
"stylelint-config-twbs-bootstrap/scss"
],
"rules": {
- "declaration-property-value-disallowed-list": {
- "border": "none",
- "outline": "none"
- },
- "function-disallowed-list": [
- "calc",
- "lighten",
- "darken"
+ "function-blacklist": [
+ "calc"
],
- "property-disallowed-list": [
+ "property-blacklist": [
"border-radius",
"border-top-left-radius",
"border-top-right-radius",
diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md
index 5c6a4e727..963db62fe 100644
--- a/CODE_OF_CONDUCT.md
+++ b/CODE_OF_CONDUCT.md
@@ -40,4 +40,7 @@ Project maintainers who do not follow or enforce the Code of Conduct in good fai
## Attribution
-This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org/), version 1.4, available at
Sleek, intuitive, and powerful front-end framework for faster and easier web development.
- Explore Bootstrap docs »
+ Explore Bootstrap docs »
Report bug
@@ -46,14 +46,14 @@ Our default branch is for development of our upcoming Bootstrap 5 release. Head
Several quick start options are available:
-- [Download the latest release](https://github.com/twbs/bootstrap/archive/v5.0.0-beta1.zip)
+- [Download the latest release](https://github.com/twbs/bootstrap/archive/v5.0.0-alpha1.zip)
- Clone the repo: `git clone https://github.com/twbs/bootstrap.git`
- Install with [npm](https://www.npmjs.com/): `npm install bootstrap@next`
- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@next`
-- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:5.0.0-beta1`
+- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:5.0.0-alpha1`
- Install with [NuGet](https://www.nuget.org/): CSS: `Install-Package bootstrap` Sass: `Install-Package bootstrap.sass`
-Read the [Getting started page](https://getbootstrap.com/docs/5.0/getting-started/introduction/) for information on the framework contents, templates and examples, and more.
+Read the [Getting started page](https://v5.getbootstrap.com/docs/5.0/getting-started/introduction/) for information on the framework contents, templates and examples, and more.
## Status
@@ -68,10 +68,8 @@ Read the [Getting started page](https://getbootstrap.com/docs/5.0/getting-starte
[](https://david-dm.org/twbs/bootstrap?type=peer)
[](https://david-dm.org/twbs/bootstrap?type=dev)
[](https://coveralls.io/github/twbs/bootstrap?branch=main)
-[](https://github.com/twbs/bootstrap/blob/main/dist/css/bootstrap.min.css)
-[](https://github.com/twbs/bootstrap/blob/main/dist/css/bootstrap.min.css)
-[](https://github.com/twbs/bootstrap/blob/main/dist/js/bootstrap.min.js)
-[](https://github.com/twbs/bootstrap/blob/main/dist/js/bootstrap.min.js)
+[](https://github.com/twbs/bootstrap/tree/main/dist/css/bootstrap.min.css)
+[](https://github.com/twbs/bootstrap/tree/main/dist/js/bootstrap.min.js)
[](https://www.browserstack.com/automate/public-build/SkxZcStBeExEdVJqQ2hWYnlWckpkNmNEY213SFp6WHFETWk2bGFuY3pCbz0tLXhqbHJsVlZhQnRBdEpod3NLSDMzaHc9PQ==--3d0b75245708616eb93113221beece33e680b229)
[](#backers)
[](#sponsors)
@@ -83,52 +81,37 @@ Within the download you'll find the following directories and files, logically g
```text
bootstrap/
-├── css/
-│ ├── bootstrap-grid.css
-│ ├── bootstrap-grid.css.map
-│ ├── bootstrap-grid.min.css
-│ ├── bootstrap-grid.min.css.map
-│ ├── bootstrap-grid.rtl.css
-│ ├── bootstrap-grid.rtl.css.map
-│ ├── bootstrap-grid.rtl.min.css
-│ ├── bootstrap-grid.rtl.min.css.map
-│ ├── bootstrap-reboot.css
-│ ├── bootstrap-reboot.css.map
-│ ├── bootstrap-reboot.min.css
-│ ├── bootstrap-reboot.min.css.map
-│ ├── bootstrap-reboot.rtl.css
-│ ├── bootstrap-reboot.rtl.css.map
-│ ├── bootstrap-reboot.rtl.min.css
-│ ├── bootstrap-reboot.rtl.min.css.map
-│ ├── bootstrap-utilities.css
-│ ├── bootstrap-utilities.css.map
-│ ├── bootstrap-utilities.min.css
-│ ├── bootstrap-utilities.min.css.map
-│ ├── bootstrap-utilities.rtl.css
-│ ├── bootstrap-utilities.rtl.css.map
-│ ├── bootstrap-utilities.rtl.min.css
-│ ├── bootstrap-utilities.rtl.min.css.map
-│ ├── bootstrap.css
-│ ├── bootstrap.css.map
-│ ├── bootstrap.min.css
-│ ├── bootstrap.min.css.map
-│ ├── bootstrap.rtl.css
-│ ├── bootstrap.rtl.css.map
-│ ├── bootstrap.rtl.min.css
-│ └── bootstrap.rtl.min.css.map
-└── js/
- ├── bootstrap.bundle.js
- ├── bootstrap.bundle.js.map
- ├── bootstrap.bundle.min.js
- ├── bootstrap.bundle.min.js.map
- ├── bootstrap.esm.js
- ├── bootstrap.esm.js.map
- ├── bootstrap.esm.min.js
- ├── bootstrap.esm.min.js.map
- ├── bootstrap.js
- ├── bootstrap.js.map
- ├── bootstrap.min.js
- └── bootstrap.min.js.map
+└── dist/
+ ├── css/
+ │ ├── bootstrap-grid.css
+ │ ├── bootstrap-grid.css.map
+ │ ├── bootstrap-grid.min.css
+ │ ├── bootstrap-grid.min.css.map
+ │ ├── bootstrap-reboot.css
+ │ ├── bootstrap-reboot.css.map
+ │ ├── bootstrap-reboot.min.css
+ │ ├── bootstrap-reboot.min.css.map
+ │ ├── bootstrap-utilities.css
+ │ ├── bootstrap-utilities.css.map
+ │ ├── bootstrap-utilities.min.css
+ │ ├── bootstrap-utilities.min.css.map
+ │ ├── bootstrap.css
+ │ ├── bootstrap.css.map
+ │ ├── bootstrap.min.css
+ │ └── bootstrap.min.css.map
+ └── js/
+ ├── bootstrap.bundle.js
+ ├── bootstrap.bundle.js.map
+ ├── bootstrap.bundle.min.js
+ ├── bootstrap.bundle.min.js.map
+ ├── bootstrap.esm.js
+ ├── bootstrap.esm.js.map
+ ├── bootstrap.esm.min.js
+ ├── bootstrap.esm.min.js.map
+ ├── bootstrap.js
+ ├── bootstrap.js.map
+ ├── bootstrap.min.js
+ └── bootstrap.min.js.map
```
We provide compiled CSS and JS (`bootstrap.*`), as well as compiled and minified CSS and JS (`bootstrap.min.*`). [source maps](https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps) (`bootstrap.*.map`) are available for use with certain browsers' developer tools. Bundled JS files (`bootstrap.bundle.js` and minified `bootstrap.bundle.min.js`) include [Popper](https://popper.js.org/).
@@ -141,9 +124,9 @@ Have a bug or a feature request? Please first read the [issue guidelines](https:
## Documentation
-Bootstrap's documentation, included in this repo in the root directory, is built with [Hugo](https://gohugo.io/) and publicly hosted on GitHub Pages at
`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Duplicate behavior to the data-bs-* attribute for our tooltip plugin\n// 2. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 3. Add explicit cursor to indicate changed behavior.\n// 4. Prevent the text-decoration to be skipped.\n\nabbr[title],\nabbr[data-bs-original-title] { // 1\n text-decoration: underline; // 2\n text-decoration: underline dotted; // 2\n cursor: help; // 3\n text-decoration-skip-ink: none; // 4\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n background-color: $mark-bg;\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: $link-color;\n text-decoration: $link-decoration;\n\n &:hover {\n color: $link-hover-color;\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n direction: ltr #{\"/* rtl:ignore */\"};\n unicode-bidi: bidi-override;\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: $code-color;\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `