Merge branch 'main' into main-lmp-table-fix-unwanted-changes
|
@ -221,7 +221,7 @@ includes code changes) and under the terms of the
|
||||||
|
|
||||||
[Adhere to the Code Guide.](https://codeguide.co/#css)
|
[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).
|
- When feasible, default color palettes should comply with [WCAG color contrast guidelines](https://www.w3.org/TR/WCAG/#distinguishable).
|
||||||
- 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://www.a11yproject.com/posts/2013-01-25-never-remove-css-outlines/) for more details.
|
||||||
|
|
||||||
### JS
|
### JS
|
||||||
|
|
|
@ -21,3 +21,8 @@ updates:
|
||||||
timezone: Europe/Athens
|
timezone: Europe/Athens
|
||||||
versioning-strategy: increase
|
versioning-strategy: increase
|
||||||
rebase-strategy: disabled
|
rebase-strategy: disabled
|
||||||
|
groups:
|
||||||
|
production-dependencies:
|
||||||
|
dependency-type: "production"
|
||||||
|
development-dependencies:
|
||||||
|
dependency-type: "development"
|
||||||
|
|
|
@ -56,7 +56,7 @@ const Manipulator = {
|
||||||
|
|
||||||
for (const key of bsKeys) {
|
for (const key of bsKeys) {
|
||||||
let pureKey = key.replace(/^bs/, '')
|
let pureKey = key.replace(/^bs/, '')
|
||||||
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length)
|
pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1)
|
||||||
attributes[pureKey] = normalizeData(element.dataset[key])
|
attributes[pureKey] = normalizeData(element.dataset[key])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -320,7 +320,7 @@ class Dropdown extends BaseComponent {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...defaultBsPopperConfig,
|
...defaultBsPopperConfig,
|
||||||
...execute(this._config.popperConfig, [defaultBsPopperConfig])
|
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,6 @@ class Tooltip extends BaseComponent {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
this._activeTrigger.click = !this._activeTrigger.click
|
|
||||||
if (this._isShown()) {
|
if (this._isShown()) {
|
||||||
this._leave()
|
this._leave()
|
||||||
return
|
return
|
||||||
|
@ -392,7 +391,7 @@ class Tooltip extends BaseComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
_resolvePossibleFunction(arg) {
|
_resolvePossibleFunction(arg) {
|
||||||
return execute(arg, [this._element])
|
return execute(arg, [this._element, this._element])
|
||||||
}
|
}
|
||||||
|
|
||||||
_getPopperConfig(attachment) {
|
_getPopperConfig(attachment) {
|
||||||
|
@ -438,7 +437,7 @@ class Tooltip extends BaseComponent {
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...defaultBsPopperConfig,
|
...defaultBsPopperConfig,
|
||||||
...execute(this._config.popperConfig, [defaultBsPopperConfig])
|
...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -223,7 +223,7 @@ const defineJQueryPlugin = plugin => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
|
||||||
return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue
|
return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue
|
||||||
}
|
}
|
||||||
|
|
||||||
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
|
||||||
|
|
|
@ -143,7 +143,7 @@ class TemplateFactory extends Config {
|
||||||
}
|
}
|
||||||
|
|
||||||
_resolvePossibleFunction(arg) {
|
_resolvePossibleFunction(arg) {
|
||||||
return execute(arg, [this])
|
return execute(arg, [undefined, this])
|
||||||
}
|
}
|
||||||
|
|
||||||
_putElementInTemplate(element, templateElement) {
|
_putElementInTemplate(element, templateElement) {
|
||||||
|
|
|
@ -172,7 +172,10 @@ describe('Dropdown', () => {
|
||||||
|
|
||||||
const popperConfig = dropdown._getPopperConfig()
|
const popperConfig = dropdown._getPopperConfig()
|
||||||
|
|
||||||
expect(getPopperConfig).toHaveBeenCalled()
|
// Ensure that the function was called with the default config.
|
||||||
|
expect(getPopperConfig).toHaveBeenCalledWith(jasmine.objectContaining({
|
||||||
|
placement: jasmine.any(String)
|
||||||
|
}))
|
||||||
expect(popperConfig.placement).toEqual('left')
|
expect(popperConfig.placement).toEqual('left')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -56,6 +56,26 @@ describe('Popover', () => {
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('show', () => {
|
describe('show', () => {
|
||||||
|
it('should toggle a popover after show', () => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
fixtureEl.innerHTML = '<a href="#" title="Popover" data-bs-content="https://twitter.com/getbootstrap">BS twitter</a>'
|
||||||
|
|
||||||
|
const popoverEl = fixtureEl.querySelector('a')
|
||||||
|
const popover = new Popover(popoverEl)
|
||||||
|
|
||||||
|
popoverEl.addEventListener('shown.bs.popover', () => {
|
||||||
|
expect(document.querySelector('.popover')).not.toBeNull()
|
||||||
|
popover.toggle()
|
||||||
|
})
|
||||||
|
popoverEl.addEventListener('hidden.bs.popover', () => {
|
||||||
|
expect(document.querySelector('.popover')).toBeNull()
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
|
||||||
|
popover.show()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
it('should show a popover', () => {
|
it('should show a popover', () => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
fixtureEl.innerHTML = '<a href="#" title="Popover" data-bs-content="https://twitter.com/getbootstrap">BS twitter</a>'
|
fixtureEl.innerHTML = '<a href="#" title="Popover" data-bs-content="https://twitter.com/getbootstrap">BS twitter</a>'
|
||||||
|
@ -95,6 +115,60 @@ describe('Popover', () => {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should call content and title functions with trigger element', () => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
fixtureEl.innerHTML = '<a href="#" data-foo="bar">BS twitter</a>'
|
||||||
|
|
||||||
|
const popoverEl = fixtureEl.querySelector('a')
|
||||||
|
const popover = new Popover(popoverEl, {
|
||||||
|
title(el) {
|
||||||
|
return el.dataset.foo
|
||||||
|
},
|
||||||
|
content(el) {
|
||||||
|
return el.dataset.foo
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
popoverEl.addEventListener('shown.bs.popover', () => {
|
||||||
|
const popoverDisplayed = document.querySelector('.popover')
|
||||||
|
|
||||||
|
expect(popoverDisplayed).not.toBeNull()
|
||||||
|
expect(popoverDisplayed.querySelector('.popover-header').textContent).toEqual('bar')
|
||||||
|
expect(popoverDisplayed.querySelector('.popover-body').textContent).toEqual('bar')
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
|
||||||
|
popover.show()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should call content and title functions with correct this value', () => {
|
||||||
|
return new Promise(resolve => {
|
||||||
|
fixtureEl.innerHTML = '<a href="#" data-foo="bar">BS twitter</a>'
|
||||||
|
|
||||||
|
const popoverEl = fixtureEl.querySelector('a')
|
||||||
|
const popover = new Popover(popoverEl, {
|
||||||
|
title() {
|
||||||
|
return this.dataset.foo
|
||||||
|
},
|
||||||
|
content() {
|
||||||
|
return this.dataset.foo
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
popoverEl.addEventListener('shown.bs.popover', () => {
|
||||||
|
const popoverDisplayed = document.querySelector('.popover')
|
||||||
|
|
||||||
|
expect(popoverDisplayed).not.toBeNull()
|
||||||
|
expect(popoverDisplayed.querySelector('.popover-header').textContent).toEqual('bar')
|
||||||
|
expect(popoverDisplayed.querySelector('.popover-body').textContent).toEqual('bar')
|
||||||
|
resolve()
|
||||||
|
})
|
||||||
|
|
||||||
|
popover.show()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
it('should show a popover with just content without having header', () => {
|
it('should show a popover with just content without having header', () => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
fixtureEl.innerHTML = '<a href="#">Nice link</a>'
|
fixtureEl.innerHTML = '<a href="#">Nice link</a>'
|
||||||
|
|
|
@ -177,7 +177,10 @@ describe('Tooltip', () => {
|
||||||
|
|
||||||
const popperConfig = tooltip._getPopperConfig('top')
|
const popperConfig = tooltip._getPopperConfig('top')
|
||||||
|
|
||||||
expect(getPopperConfig).toHaveBeenCalled()
|
// Ensure that the function was called with the default config.
|
||||||
|
expect(getPopperConfig).toHaveBeenCalledWith(jasmine.objectContaining({
|
||||||
|
placement: jasmine.any(String)
|
||||||
|
}))
|
||||||
expect(popperConfig.placement).toEqual('left')
|
expect(popperConfig.placement).toEqual('left')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -919,10 +922,12 @@ describe('Tooltip', () => {
|
||||||
|
|
||||||
it('should show a tooltip with custom class provided as a function in config', () => {
|
it('should show a tooltip with custom class provided as a function in config', () => {
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
fixtureEl.innerHTML = '<a href="#" rel="tooltip" title="Another tooltip"></a>'
|
fixtureEl.innerHTML = '<a href="#" rel="tooltip" title="Another tooltip" data-class-a="custom-class-a" data-class-b="custom-class-b"></a>'
|
||||||
|
|
||||||
const spy = jasmine.createSpy('customClass').and.returnValue('custom-class')
|
|
||||||
const tooltipEl = fixtureEl.querySelector('a')
|
const tooltipEl = fixtureEl.querySelector('a')
|
||||||
|
const spy = jasmine.createSpy('customClass').and.callFake(function (el) {
|
||||||
|
return `${el.dataset.classA} ${this.dataset.classB}`
|
||||||
|
})
|
||||||
const tooltip = new Tooltip(tooltipEl, {
|
const tooltip = new Tooltip(tooltipEl, {
|
||||||
customClass: spy
|
customClass: spy
|
||||||
})
|
})
|
||||||
|
@ -931,7 +936,8 @@ describe('Tooltip', () => {
|
||||||
const tip = document.querySelector('.tooltip')
|
const tip = document.querySelector('.tooltip')
|
||||||
expect(tip).not.toBeNull()
|
expect(tip).not.toBeNull()
|
||||||
expect(spy).toHaveBeenCalled()
|
expect(spy).toHaveBeenCalled()
|
||||||
expect(tip).toHaveClass('custom-class')
|
expect(tip).toHaveClass('custom-class-a')
|
||||||
|
expect(tip).toHaveClass('custom-class-b')
|
||||||
resolve()
|
resolve()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -1337,6 +1343,32 @@ describe('Tooltip', () => {
|
||||||
|
|
||||||
expect(tooltip._getTitle()).toEqual('test')
|
expect(tooltip._getTitle()).toEqual('test')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should call title function with trigger element', () => {
|
||||||
|
fixtureEl.innerHTML = '<a href="#" rel="tooltip" data-foo="bar"></a>'
|
||||||
|
|
||||||
|
const tooltipEl = fixtureEl.querySelector('a')
|
||||||
|
const tooltip = new Tooltip(tooltipEl, {
|
||||||
|
title(el) {
|
||||||
|
return el.dataset.foo
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(tooltip._getTitle()).toEqual('bar')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should call title function with correct this value', () => {
|
||||||
|
fixtureEl.innerHTML = '<a href="#" rel="tooltip" data-foo="bar"></a>'
|
||||||
|
|
||||||
|
const tooltipEl = fixtureEl.querySelector('a')
|
||||||
|
const tooltip = new Tooltip(tooltipEl, {
|
||||||
|
title() {
|
||||||
|
return this.dataset.foo
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
expect(tooltip._getTitle()).toEqual('bar')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('getInstance', () => {
|
describe('getInstance', () => {
|
||||||
|
|
|
@ -521,10 +521,10 @@ describe('Util', () => {
|
||||||
|
|
||||||
it('should execute if arg is function & return the result', () => {
|
it('should execute if arg is function & return the result', () => {
|
||||||
const functionFoo = (num1, num2 = 10) => num1 + num2
|
const functionFoo = (num1, num2 = 10) => num1 + num2
|
||||||
const resultFoo = Util.execute(functionFoo, [4, 5])
|
const resultFoo = Util.execute(functionFoo, [undefined, 4, 5])
|
||||||
expect(resultFoo).toBe(9)
|
expect(resultFoo).toBe(9)
|
||||||
|
|
||||||
const resultFoo1 = Util.execute(functionFoo, [4])
|
const resultFoo1 = Util.execute(functionFoo, [undefined, 4])
|
||||||
expect(resultFoo1).toBe(14)
|
expect(resultFoo1).toBe(14)
|
||||||
|
|
||||||
const functionBar = () => 'foo'
|
const functionBar = () => 'foo'
|
||||||
|
|
54
package.json
|
@ -82,7 +82,7 @@
|
||||||
"docs-serve": "hugo server --port 9001 --disableFastRender --noHTTPCache --renderToMemory --printPathWarnings --printUnusedTemplates",
|
"docs-serve": "hugo server --port 9001 --disableFastRender --noHTTPCache --renderToMemory --printPathWarnings --printUnusedTemplates",
|
||||||
"docs-serve-only": "npx sirv-cli _site --port 9001",
|
"docs-serve-only": "npx sirv-cli _site --port 9001",
|
||||||
"lockfile-lint": "lockfile-lint --allowed-hosts npm --allowed-schemes https: --empty-hostname false --type npm --path package-lock.json",
|
"lockfile-lint": "lockfile-lint --allowed-hosts npm --allowed-schemes https: --empty-hostname false --type npm --path package-lock.json",
|
||||||
"update-deps": "ncu -u -x eslint,karma-browserstack-launcher,karma-rollup-preprocessor",
|
"update-deps": "ncu -u -x eslint,eslint-config-xo,karma-browserstack-launcher,karma-rollup-preprocessor,sass",
|
||||||
"release": "npm-run-all dist release-sri docs-build release-zip*",
|
"release": "npm-run-all dist release-sri docs-build release-zip*",
|
||||||
"release-sri": "node build/generate-sri.mjs",
|
"release-sri": "node build/generate-sri.mjs",
|
||||||
"release-version": "node build/change-version.mjs",
|
"release-version": "node build/change-version.mjs",
|
||||||
|
@ -103,35 +103,35 @@
|
||||||
"@popperjs/core": "^2.11.8"
|
"@popperjs/core": "^2.11.8"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/cli": "^7.24.8",
|
"@babel/cli": "^7.25.6",
|
||||||
"@babel/core": "^7.24.9",
|
"@babel/core": "^7.25.2",
|
||||||
"@babel/preset-env": "^7.24.8",
|
"@babel/preset-env": "^7.25.4",
|
||||||
"@docsearch/js": "^3.6.0",
|
"@docsearch/js": "^3.6.2",
|
||||||
"@popperjs/core": "^2.11.8",
|
"@popperjs/core": "^2.11.8",
|
||||||
"@rollup/plugin-babel": "^6.0.4",
|
"@rollup/plugin-babel": "^6.0.4",
|
||||||
"@rollup/plugin-commonjs": "^26.0.1",
|
"@rollup/plugin-commonjs": "^28.0.0",
|
||||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
"@rollup/plugin-node-resolve": "^15.3.0",
|
||||||
"@rollup/plugin-replace": "^5.0.7",
|
"@rollup/plugin-replace": "^6.0.1",
|
||||||
"@stackblitz/sdk": "^1.11.0",
|
"@stackblitz/sdk": "^1.11.0",
|
||||||
"autoprefixer": "^10.4.19",
|
"autoprefixer": "^10.4.20",
|
||||||
"bundlewatch": "^0.3.3",
|
"bundlewatch": "^0.4.0",
|
||||||
"clean-css-cli": "^5.6.3",
|
"clean-css-cli": "^5.6.3",
|
||||||
"clipboard": "^2.0.11",
|
"clipboard": "^2.0.11",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^8.57.1",
|
||||||
"eslint-config-xo": "^0.45.0",
|
"eslint-config-xo": "^0.45.0",
|
||||||
"eslint-plugin-html": "^8.1.1",
|
"eslint-plugin-html": "^8.1.2",
|
||||||
"eslint-plugin-import": "^2.29.1",
|
"eslint-plugin-import": "^2.30.0",
|
||||||
"eslint-plugin-markdown": "^5.1.0",
|
"eslint-plugin-markdown": "^5.1.0",
|
||||||
"eslint-plugin-unicorn": "^54.0.0",
|
"eslint-plugin-unicorn": "^55.0.0",
|
||||||
"find-unused-sass-variables": "^6.0.0",
|
"find-unused-sass-variables": "^6.0.0",
|
||||||
"globby": "^14.0.1",
|
"globby": "^14.0.2",
|
||||||
"hammer-simulator": "0.0.1",
|
"hammer-simulator": "0.0.1",
|
||||||
"hugo-bin": "^0.125.2",
|
"hugo-bin": "^0.132.0",
|
||||||
"ip": "^2.0.1",
|
"ip": "^2.0.1",
|
||||||
"jasmine": "^5.1.0",
|
"jasmine": "^5.3.0",
|
||||||
"jquery": "^3.7.1",
|
"jquery": "^3.7.1",
|
||||||
"karma": "^6.4.3",
|
"karma": "^6.4.4",
|
||||||
"karma-browserstack-launcher": "1.4.0",
|
"karma-browserstack-launcher": "1.4.0",
|
||||||
"karma-chrome-launcher": "^3.2.0",
|
"karma-chrome-launcher": "^3.2.0",
|
||||||
"karma-coverage-istanbul-reporter": "^3.0.3",
|
"karma-coverage-istanbul-reporter": "^3.0.3",
|
||||||
|
@ -141,19 +141,19 @@
|
||||||
"karma-jasmine-html-reporter": "^2.1.0",
|
"karma-jasmine-html-reporter": "^2.1.0",
|
||||||
"karma-rollup-preprocessor": "7.0.7",
|
"karma-rollup-preprocessor": "7.0.7",
|
||||||
"lockfile-lint": "^4.14.0",
|
"lockfile-lint": "^4.14.0",
|
||||||
"nodemon": "^3.1.4",
|
"nodemon": "^3.1.7",
|
||||||
"npm-run-all2": "^6.2.2",
|
"npm-run-all2": "^6.2.3",
|
||||||
"postcss": "^8.4.39",
|
"postcss": "^8.4.47",
|
||||||
"postcss-cli": "^11.0.0",
|
"postcss-cli": "^11.0.0",
|
||||||
"rollup": "^4.18.1",
|
"rollup": "^4.23.0",
|
||||||
"rollup-plugin-istanbul": "^5.0.0",
|
"rollup-plugin-istanbul": "^5.0.0",
|
||||||
"rtlcss": "^4.1.1",
|
"rtlcss": "^4.3.0",
|
||||||
"sass": "^1.77.8",
|
"sass": "1.78.0",
|
||||||
"sass-true": "^8.0.0",
|
"sass-true": "^8.0.0",
|
||||||
"shelljs": "^0.8.5",
|
"shelljs": "^0.8.5",
|
||||||
"stylelint": "^16.7.0",
|
"stylelint": "^16.9.0",
|
||||||
"stylelint-config-twbs-bootstrap": "^14.2.0",
|
"stylelint-config-twbs-bootstrap": "^15.1.0",
|
||||||
"terser": "^5.31.2",
|
"terser": "^5.34.1",
|
||||||
"vnu-jar": "23.4.11"
|
"vnu-jar": "23.4.11"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
|
|
|
@ -193,8 +193,7 @@
|
||||||
// The child selector allows nested `.card` within `.card-group`
|
// The child selector allows nested `.card` within `.card-group`
|
||||||
// to display properly.
|
// to display properly.
|
||||||
> .card {
|
> .card {
|
||||||
// Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
|
flex: 1 0 0;
|
||||||
flex: 1 0 0%;
|
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
|
|
||||||
+ .card {
|
+ .card {
|
||||||
|
|
|
@ -177,7 +177,7 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
|
||||||
@return if($l1 > $l2, divide($l1 + .05, $l2 + .05), divide($l2 + .05, $l1 + .05));
|
@return if($l1 > $l2, divide($l1 + .05, $l2 + .05), divide($l2 + .05, $l1 + .05));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return WCAG2.1 relative luminance
|
// Return WCAG2.2 relative luminance
|
||||||
// See https://www.w3.org/TR/WCAG/#dfn-relative-luminance
|
// See https://www.w3.org/TR/WCAG/#dfn-relative-luminance
|
||||||
// See https://www.w3.org/TR/WCAG/#dfn-contrast-ratio
|
// See https://www.w3.org/TR/WCAG/#dfn-contrast-ratio
|
||||||
@function luminance($color) {
|
@function luminance($color) {
|
||||||
|
|
|
@ -169,8 +169,8 @@
|
||||||
.nav-justified {
|
.nav-justified {
|
||||||
> .nav-link,
|
> .nav-link,
|
||||||
.nav-item {
|
.nav-item {
|
||||||
flex-basis: 0;
|
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
|
flex-basis: 0;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -139,8 +139,8 @@
|
||||||
// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`
|
// the default flexbox row orientation. Requires the use of `flex-wrap: wrap`
|
||||||
// on the `.navbar` parent.
|
// on the `.navbar` parent.
|
||||||
.navbar-collapse {
|
.navbar-collapse {
|
||||||
flex-basis: 100%;
|
|
||||||
flex-grow: 1;
|
flex-grow: 1;
|
||||||
|
flex-basis: 100%;
|
||||||
// For always expanded or extra full navbars, ensure content aligns itself
|
// For always expanded or extra full navbars, ensure content aligns itself
|
||||||
// properly vertically. Can be easily overridden with flex utilities.
|
// properly vertically. Can be easily overridden with flex utilities.
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|
|
@ -67,8 +67,8 @@ $colors: (
|
||||||
) !default;
|
) !default;
|
||||||
// scss-docs-end colors-map
|
// scss-docs-end colors-map
|
||||||
|
|
||||||
// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.0 are 3, 4.5 and 7.
|
// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.2 are 3, 4.5 and 7.
|
||||||
// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast
|
// See https://www.w3.org/TR/WCAG/#contrast-minimum
|
||||||
$min-contrast-ratio: 4.5 !default;
|
$min-contrast-ratio: 4.5 !default;
|
||||||
|
|
||||||
// Customize the light and dark text colors for use in our color contrast function.
|
// Customize the light and dark text colors for use in our color contrast function.
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
@include media-breakpoint-up($breakpoint, $breakpoints) {
|
@include media-breakpoint-up($breakpoint, $breakpoints) {
|
||||||
// Provide basic `.col-{bp}` classes for equal-width flexbox columns
|
// Provide basic `.col-{bp}` classes for equal-width flexbox columns
|
||||||
.col#{$infix} {
|
.col#{$infix} {
|
||||||
flex: 1 0 0%; // Flexbugs #4: https://github.com/philipwalton/flexbugs#flexbug-4
|
flex: 1 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.row-cols#{$infix}-auto > * {
|
.row-cols#{$infix}-auto > * {
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
// Use to only display content when it's focused, or one of its child elements is focused
|
// Use to only display content when it's focused, or one of its child elements is focused
|
||||||
// (i.e. when focus is within the element/container that the class was applied to)
|
// (i.e. when focus is within the element/container that the class was applied to)
|
||||||
//
|
//
|
||||||
// Useful for "Skip to main content" links; see https://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1
|
// Useful for "Skip to main content" links; see https://www.w3.org/WAI/WCAG22/Techniques/general/G1.html
|
||||||
|
|
||||||
@mixin visually-hidden-focusable() {
|
@mixin visually-hidden-focusable() {
|
||||||
&:not(:focus):not(:focus-within) {
|
&:not(:focus):not(:focus-within) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
---
|
---
|
||||||
layout: docs
|
layout: docs
|
||||||
title: About
|
title: About Bootstrap
|
||||||
description: Learn more about the team maintaining Bootstrap, how and why the project started, and how to get involved.
|
description: Learn more about the team maintaining Bootstrap, how and why the project started, and how to get involved.
|
||||||
group: about
|
group: about
|
||||||
aliases:
|
aliases:
|
||||||
|
|
|
@ -10,7 +10,7 @@ Community members have translated Bootstrap's documentation into various languag
|
||||||
{{< translations.inline >}}
|
{{< translations.inline >}}
|
||||||
<ul>
|
<ul>
|
||||||
{{ range .Site.Data.translations -}}
|
{{ range .Site.Data.translations -}}
|
||||||
<li><a href="{{ .url }}" hreflang="{{ .code }}">{{ .description }} ({{ .name }})</a></li>
|
<li><a href="{{ .url }}" hreflang="{{ .code }}" lang="{{ .code }}">{{ .description }} ({{ .name }})</a></li>
|
||||||
{{ end -}}
|
{{ end -}}
|
||||||
</ul>
|
</ul>
|
||||||
{{< /translations.inline >}}
|
{{< /translations.inline >}}
|
||||||
|
|
|
@ -165,7 +165,7 @@ You can make your carousels autoplay on page load by setting the `ride` option t
|
||||||
{{< callout info >}}
|
{{< callout info >}}
|
||||||
For accessibility reasons, we recommend avoiding the use of autoplaying carousels. If your page does include an autoplaying carousel, we recommend providing an additional button or control to explicitly pause/stop the carousel.
|
For accessibility reasons, we recommend avoiding the use of autoplaying carousels. If your page does include an autoplaying carousel, we recommend providing an additional button or control to explicitly pause/stop the carousel.
|
||||||
|
|
||||||
See [WCAG 2.1 Success Criterion 2.2.2 Pause, Stop, Hide](https://www.w3.org/TR/WCAG21/#pause-stop-hide).
|
See [WCAG 2.2 Success Criterion 2.2.2 Pause, Stop, Hide](https://www.w3.org/TR/WCAG/#pause-stop-hide).
|
||||||
{{< /callout >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
{{< example >}}
|
{{< example >}}
|
||||||
|
|
|
@ -126,7 +126,7 @@ The best part is you can do this with any button variant, too:
|
||||||
<!-- Example single danger button -->
|
<!-- Example single danger button -->
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button type="button" class="btn btn-danger dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
|
<button type="button" class="btn btn-danger dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
Action
|
Danger
|
||||||
</button>
|
</button>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li><a class="dropdown-item" href="#">Action</a></li>
|
<li><a class="dropdown-item" href="#">Action</a></li>
|
||||||
|
@ -228,7 +228,7 @@ We use this extra class to reduce the horizontal `padding` on either side of the
|
||||||
```html
|
```html
|
||||||
<!-- Example split danger button -->
|
<!-- Example split danger button -->
|
||||||
<div class="btn-group">
|
<div class="btn-group">
|
||||||
<button type="button" class="btn btn-danger">Action</button>
|
<button type="button" class="btn btn-danger">Danger</button>
|
||||||
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
|
<button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
<span class="visually-hidden">Toggle Dropdown</span>
|
<span class="visually-hidden">Toggle Dropdown</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
|
@ -201,7 +201,7 @@ When modals become too long for the user's viewport or device, they scroll indep
|
||||||
<h1 class="modal-title fs-5" id="exampleModalLongTitle">Modal title</h1>
|
<h1 class="modal-title fs-5" id="exampleModalLongTitle">Modal title</h1>
|
||||||
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body" style="min-height: 1500px">
|
<div class="modal-body" style="min-height: 100vh">
|
||||||
<p>This is some placeholder content to show the scrolling behavior for modals. Instead of repeating the text in the modal, we use an inline style to set a minimum height, thereby extending the length of the overall modal and demonstrating the overflow scrolling. When content becomes longer than the height of the viewport, scrolling will move the modal as needed.</p>
|
<p>This is some placeholder content to show the scrolling behavior for modals. Instead of repeating the text in the modal, we use an inline style to set a minimum height, thereby extending the length of the overall modal and demonstrating the overflow scrolling. When content becomes longer than the height of the viewport, scrolling will move the modal as needed.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
|
|
|
@ -111,7 +111,7 @@ And with custom HTML added:
|
||||||
With an SVG:
|
With an SVG:
|
||||||
|
|
||||||
<div class="bd-example tooltip-demo">
|
<div class="bd-example tooltip-demo">
|
||||||
<a href="#" class="d-inline-block" data-bs-toggle="tooltip" data-bs-title="Default tooltip">
|
<a href="#" class="d-inline-block" data-bs-toggle="tooltip" data-bs-title="Default tooltip" aria-label="Hover or focus to see default tooltip">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 100 100">
|
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50" viewBox="0 0 100 100">
|
||||||
<rect width="100%" height="100%" fill="#563d7c"/>
|
<rect width="100%" height="100%" fill="#563d7c"/>
|
||||||
<circle cx="50" cy="50" r="30" fill="#007bff"/>
|
<circle cx="50" cy="50" r="30" fill="#007bff"/>
|
||||||
|
|
|
@ -20,6 +20,7 @@ You can find and customize these variables for key global options in Bootstrap's
|
||||||
| `$enable-transitions` | `true` (default) or `false` | Enables predefined `transition`s on various components. |
|
| `$enable-transitions` | `true` (default) or `false` | Enables predefined `transition`s on various components. |
|
||||||
| `$enable-reduced-motion` | `true` (default) or `false` | Enables the [`prefers-reduced-motion` media query]({{< docsref "/getting-started/accessibility#reduced-motion" >}}), which suppresses certain animations/transitions based on the users' browser/operating system preferences. |
|
| `$enable-reduced-motion` | `true` (default) or `false` | Enables the [`prefers-reduced-motion` media query]({{< docsref "/getting-started/accessibility#reduced-motion" >}}), which suppresses certain animations/transitions based on the users' browser/operating system preferences. |
|
||||||
| `$enable-grid-classes` | `true` (default) or `false` | Enables the generation of CSS classes for the grid system (e.g. `.row`, `.col-md-1`, etc.). |
|
| `$enable-grid-classes` | `true` (default) or `false` | Enables the generation of CSS classes for the grid system (e.g. `.row`, `.col-md-1`, etc.). |
|
||||||
|
| `$enable-cssgrid` | `true` or `false` (default) | Enables the experimental CSS Grid system (e.g. `.grid`, `.g-col-md-1`, etc.). |
|
||||||
| `$enable-container-classes` | `true` (default) or `false` | Enables the generation of CSS classes for layout containers. (New in v5.2.0) |
|
| `$enable-container-classes` | `true` (default) or `false` | Enables the generation of CSS classes for layout containers. (New in v5.2.0) |
|
||||||
| `$enable-caret` | `true` (default) or `false` | Enables pseudo element caret on `.dropdown-toggle`. |
|
| `$enable-caret` | `true` (default) or `false` | Enables pseudo element caret on `.dropdown-toggle`. |
|
||||||
| `$enable-button-pointers` | `true` (default) or `false` | Add "hand" cursor to non-disabled button elements. |
|
| `$enable-button-pointers` | `true` (default) or `false` | Add "hand" cursor to non-disabled button elements. |
|
||||||
|
|
|
@ -40,11 +40,11 @@ body_class: ""
|
||||||
<div class="d-flex gap-2 justify-content-center py-5">
|
<div class="d-flex gap-2 justify-content-center py-5">
|
||||||
<button class="btn btn-primary d-inline-flex align-items-center" type="button">
|
<button class="btn btn-primary d-inline-flex align-items-center" type="button">
|
||||||
Primary icon
|
Primary icon
|
||||||
<svg class="bi ms-1" width="20" height="20"><use xlink:href="#arrow-right-short"/></svg>
|
<svg class="bi ms-1" width="20" height="20" aria-hidden="true"><use xlink:href="#arrow-right-short"/></svg>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-outline-secondary d-inline-flex align-items-center" type="button">
|
<button class="btn btn-outline-secondary d-inline-flex align-items-center" type="button">
|
||||||
Secondary icon
|
Secondary icon
|
||||||
<svg class="bi ms-1" width="20" height="20"><use xlink:href="#arrow-right-short"/></svg>
|
<svg class="bi ms-1" width="20" height="20" aria-hidden="true"><use xlink:href="#arrow-right-short"/></svg>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -921,7 +921,7 @@ direction: rtl
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
{{< example show_markup="false" >}}
|
{{< example show_markup="false" >}}
|
||||||
<div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
|
<div class="btn-group w-100 align-items-center justify-content-between flex-wrap me-0">
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
زر القائمة المنسدلة
|
زر القائمة المنسدلة
|
||||||
|
@ -1034,7 +1034,7 @@ direction: rtl
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
{{< example show_markup="false" >}}
|
{{< example show_markup="false" >}}
|
||||||
<div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
|
<div class="btn-group w-100 align-items-center justify-content-between flex-wrap me-0">
|
||||||
<div class="dropend">
|
<div class="dropend">
|
||||||
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
زر القائمة المنسدلة لليسار
|
زر القائمة المنسدلة لليسار
|
||||||
|
|
|
@ -920,7 +920,7 @@ body_class: "bg-body-tertiary"
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
{{< example show_markup="false" >}}
|
{{< example show_markup="false" >}}
|
||||||
<div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
|
<div class="btn-group w-100 align-items-center justify-content-between flex-wrap me-0">
|
||||||
<div class="dropdown">
|
<div class="dropdown">
|
||||||
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
<button class="btn btn-secondary btn-sm dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
Dropdown button
|
Dropdown button
|
||||||
|
@ -1033,7 +1033,7 @@ body_class: "bg-body-tertiary"
|
||||||
{{< /example >}}
|
{{< /example >}}
|
||||||
|
|
||||||
{{< example show_markup="false" >}}
|
{{< example show_markup="false" >}}
|
||||||
<div class="btn-group w-100 align-items-center justify-content-between flex-wrap">
|
<div class="btn-group w-100 align-items-center justify-content-between flex-wrap me-0">
|
||||||
<div class="dropend">
|
<div class="dropend">
|
||||||
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
<button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
|
||||||
Dropend button
|
Dropend button
|
||||||
|
|
|
@ -208,7 +208,7 @@ body_class: ""
|
||||||
<div class="d-grid gap-1">
|
<div class="d-grid gap-1">
|
||||||
<div class="cal">
|
<div class="cal">
|
||||||
<div class="cal-month">
|
<div class="cal-month">
|
||||||
<button class="btn cal-btn" type="button">
|
<button class="btn cal-btn" type="button" aria-label="previous month">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-left-short"/></svg>
|
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-left-short"/></svg>
|
||||||
</button>
|
</button>
|
||||||
<strong class="cal-month-name">June</strong>
|
<strong class="cal-month-name">June</strong>
|
||||||
|
@ -226,8 +226,8 @@ body_class: ""
|
||||||
<option value="November">November</option>
|
<option value="November">November</option>
|
||||||
<option value="December">December</option>
|
<option value="December">December</option>
|
||||||
</select>
|
</select>
|
||||||
<button class="btn cal-btn" type="button">
|
<button class="btn cal-btn" type="button" aria-label="next month">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-right-short"/></svg>
|
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#arrow-right-short"/></svg>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="cal-weekdays text-body-secondary">
|
<div class="cal-weekdays text-body-secondary">
|
||||||
|
@ -287,7 +287,7 @@ body_class: ""
|
||||||
<div class="d-grid gap-1">
|
<div class="d-grid gap-1">
|
||||||
<div class="cal">
|
<div class="cal">
|
||||||
<div class="cal-month">
|
<div class="cal-month">
|
||||||
<button class="btn cal-btn" type="button">
|
<button class="btn cal-btn" type="button" aria-label="previous month">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-left-short"/></svg>
|
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-left-short"/></svg>
|
||||||
</button>
|
</button>
|
||||||
<strong class="cal-month-name">June</strong>
|
<strong class="cal-month-name">June</strong>
|
||||||
|
@ -305,8 +305,8 @@ body_class: ""
|
||||||
<option value="November">November</option>
|
<option value="November">November</option>
|
||||||
<option value="December">December</option>
|
<option value="December">December</option>
|
||||||
</select>
|
</select>
|
||||||
<button class="btn cal-btn" type="button">
|
<button class="btn cal-btn" type="button" aria-label="next month">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-right-short"/></svg>
|
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#arrow-right-short"/></svg>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="cal-weekdays text-body-secondary">
|
<div class="cal-weekdays text-body-secondary">
|
||||||
|
|
|
@ -167,7 +167,7 @@ body_class: ""
|
||||||
<p>Monthly digest of what's new and exciting from us.</p>
|
<p>Monthly digest of what's new and exciting from us.</p>
|
||||||
<div class="d-flex flex-column flex-sm-row w-100 gap-2">
|
<div class="d-flex flex-column flex-sm-row w-100 gap-2">
|
||||||
<label for="newsletter1" class="visually-hidden">Email address</label>
|
<label for="newsletter1" class="visually-hidden">Email address</label>
|
||||||
<input id="newsletter1" type="text" class="form-control" placeholder="Email address">
|
<input id="newsletter1" type="email" class="form-control" placeholder="Email address">
|
||||||
<button class="btn btn-primary" type="button">Subscribe</button>
|
<button class="btn btn-primary" type="button">Subscribe</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -30,7 +30,7 @@ body_class: ""
|
||||||
<div class="d-inline-flex gap-2 mb-5">
|
<div class="d-inline-flex gap-2 mb-5">
|
||||||
<button class="d-inline-flex align-items-center btn btn-primary btn-lg px-4 rounded-pill" type="button">
|
<button class="d-inline-flex align-items-center btn btn-primary btn-lg px-4 rounded-pill" type="button">
|
||||||
Call to action
|
Call to action
|
||||||
<svg class="bi ms-2" width="24" height="24"><use xlink:href="#arrow-right-short"/></svg>
|
<svg class="bi ms-2" width="24" height="24" aria-hidden="true"><use xlink:href="#arrow-right-short"/></svg>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-outline-secondary btn-lg px-4 rounded-pill" type="button">
|
<button class="btn btn-outline-secondary btn-lg px-4 rounded-pill" type="button">
|
||||||
Secondary link
|
Secondary link
|
||||||
|
|
|
@ -34,7 +34,7 @@ body_class: ""
|
||||||
</svg>
|
</svg>
|
||||||
|
|
||||||
<div class="modal modal-sheet position-static d-block bg-body-secondary p-4 py-md-5" tabindex="-1" role="dialog" id="modalSheet">
|
<div class="modal modal-sheet position-static d-block bg-body-secondary p-4 py-md-5" tabindex="-1" role="dialog" id="modalSheet">
|
||||||
<div class="modal-dialog" role="document">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content rounded-4 shadow">
|
<div class="modal-content rounded-4 shadow">
|
||||||
<div class="modal-header border-bottom-0">
|
<div class="modal-header border-bottom-0">
|
||||||
<h1 class="modal-title fs-5">Modal title</h1>
|
<h1 class="modal-title fs-5">Modal title</h1>
|
||||||
|
@ -54,7 +54,7 @@ body_class: ""
|
||||||
<div class="b-example-divider"></div>
|
<div class="b-example-divider"></div>
|
||||||
|
|
||||||
<div class="modal modal-sheet position-static d-block bg-body-secondary p-4 py-md-5" tabindex="-1" role="dialog" id="modalChoice">
|
<div class="modal modal-sheet position-static d-block bg-body-secondary p-4 py-md-5" tabindex="-1" role="dialog" id="modalChoice">
|
||||||
<div class="modal-dialog" role="document">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content rounded-3 shadow">
|
<div class="modal-content rounded-3 shadow">
|
||||||
<div class="modal-body p-4 text-center">
|
<div class="modal-body p-4 text-center">
|
||||||
<h5 class="mb-0">Enable this setting?</h5>
|
<h5 class="mb-0">Enable this setting?</h5>
|
||||||
|
@ -71,7 +71,7 @@ body_class: ""
|
||||||
<div class="b-example-divider"></div>
|
<div class="b-example-divider"></div>
|
||||||
|
|
||||||
<div class="modal modal-sheet position-static d-block bg-body-secondary p-4 py-md-5" tabindex="-1" role="dialog" id="modalTour">
|
<div class="modal modal-sheet position-static d-block bg-body-secondary p-4 py-md-5" tabindex="-1" role="dialog" id="modalTour">
|
||||||
<div class="modal-dialog" role="document">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content rounded-4 shadow">
|
<div class="modal-content rounded-4 shadow">
|
||||||
<div class="modal-body p-5">
|
<div class="modal-body p-5">
|
||||||
<h2 class="fw-bold mb-0">What's new</h2>
|
<h2 class="fw-bold mb-0">What's new</h2>
|
||||||
|
@ -108,7 +108,7 @@ body_class: ""
|
||||||
<div class="b-example-divider"></div>
|
<div class="b-example-divider"></div>
|
||||||
|
|
||||||
<div class="modal modal-sheet position-static d-block bg-body-secondary p-4 py-md-5" tabindex="-1" role="dialog" id="modalSignin">
|
<div class="modal modal-sheet position-static d-block bg-body-secondary p-4 py-md-5" tabindex="-1" role="dialog" id="modalSignin">
|
||||||
<div class="modal-dialog" role="document">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content rounded-4 shadow">
|
<div class="modal-content rounded-4 shadow">
|
||||||
<div class="modal-header p-5 pb-4 border-bottom-0">
|
<div class="modal-header p-5 pb-4 border-bottom-0">
|
||||||
<h1 class="fw-bold mb-0 fs-2">Sign up for free</h1>
|
<h1 class="fw-bold mb-0 fs-2">Sign up for free</h1>
|
||||||
|
|
|
@ -38,25 +38,25 @@ title: Starter Template
|
||||||
<ul class="list-unstyled ps-0">
|
<ul class="list-unstyled ps-0">
|
||||||
<li>
|
<li>
|
||||||
<a class="icon-link mb-1" href="https://github.com/twbs/examples/tree/main/icons-font" rel="noopener" target="_blank">
|
<a class="icon-link mb-1" href="https://github.com/twbs/examples/tree/main/icons-font" rel="noopener" target="_blank">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-right-circle"/></svg>
|
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#arrow-right-circle"/></svg>
|
||||||
Bootstrap npm starter
|
Bootstrap npm starter
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="icon-link mb-1" href="https://github.com/twbs/examples/tree/main/parcel" rel="noopener" target="_blank">
|
<a class="icon-link mb-1" href="https://github.com/twbs/examples/tree/main/parcel" rel="noopener" target="_blank">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-right-circle"/></svg>
|
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#arrow-right-circle"/></svg>
|
||||||
Bootstrap Parcel starter
|
Bootstrap Parcel starter
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="icon-link mb-1" href="https://github.com/twbs/examples/tree/main/vite" rel="noopener" target="_blank">
|
<a class="icon-link mb-1" href="https://github.com/twbs/examples/tree/main/vite" rel="noopener" target="_blank">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-right-circle"/></svg>
|
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#arrow-right-circle"/></svg>
|
||||||
Bootstrap Vite starter
|
Bootstrap Vite starter
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="icon-link mb-1" href="https://github.com/twbs/examples/tree/main/webpack" rel="noopener" target="_blank">
|
<a class="icon-link mb-1" href="https://github.com/twbs/examples/tree/main/webpack" rel="noopener" target="_blank">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-right-circle"/></svg>
|
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#arrow-right-circle"/></svg>
|
||||||
Bootstrap Webpack starter
|
Bootstrap Webpack starter
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
@ -69,31 +69,31 @@ title: Starter Template
|
||||||
<ul class="list-unstyled ps-0">
|
<ul class="list-unstyled ps-0">
|
||||||
<li>
|
<li>
|
||||||
<a class="icon-link mb-1" href="{{< docsref "/getting-started/introduction" >}}">
|
<a class="icon-link mb-1" href="{{< docsref "/getting-started/introduction" >}}">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-right-circle"/></svg>
|
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#arrow-right-circle"/></svg>
|
||||||
Bootstrap quick start guide
|
Bootstrap quick start guide
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="icon-link mb-1" href="{{< docsref "/getting-started/webpack" >}}">
|
<a class="icon-link mb-1" href="{{< docsref "/getting-started/webpack" >}}">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-right-circle"/></svg>
|
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#arrow-right-circle"/></svg>
|
||||||
Bootstrap Webpack guide
|
Bootstrap Webpack guide
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="icon-link mb-1" href="{{< docsref "/getting-started/parcel" >}}">
|
<a class="icon-link mb-1" href="{{< docsref "/getting-started/parcel" >}}">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-right-circle"/></svg>
|
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#arrow-right-circle"/></svg>
|
||||||
Bootstrap Parcel guide
|
Bootstrap Parcel guide
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="icon-link mb-1" href="{{< docsref "/getting-started/vite" >}}">
|
<a class="icon-link mb-1" href="{{< docsref "/getting-started/vite" >}}">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-right-circle"/></svg>
|
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#arrow-right-circle"/></svg>
|
||||||
Bootstrap Vite guide
|
Bootstrap Vite guide
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a class="icon-link mb-1" href="{{< docsref "/getting-started/contribute" >}}">
|
<a class="icon-link mb-1" href="{{< docsref "/getting-started/contribute" >}}">
|
||||||
<svg class="bi" width="16" height="16"><use xlink:href="#arrow-right-circle"/></svg>
|
<svg class="bi" width="16" height="16" aria-hidden="true"><use xlink:href="#arrow-right-circle"/></svg>
|
||||||
Contributing to Bootstrap
|
Contributing to Bootstrap
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -10,7 +10,7 @@ Bootstrap provides an easy-to-use framework of ready-made styles, layout tools,
|
||||||
|
|
||||||
## Overview and limitations
|
## Overview and limitations
|
||||||
|
|
||||||
The overall accessibility of any project built with Bootstrap depends in large part on the author's markup, additional styling, and scripting they've included. However, provided that these have been implemented correctly, it should be perfectly possible to create websites and applications with Bootstrap that fulfill [<abbr title="Web Content Accessibility Guidelines">WCAG</abbr> 2.1](https://www.w3.org/TR/WCAG/) (A/AA/AAA), [Section 508](https://www.section508.gov/), and similar accessibility standards and requirements.
|
The overall accessibility of any project built with Bootstrap depends in large part on the author's markup, additional styling, and scripting they've included. However, provided that these have been implemented correctly, it should be perfectly possible to create websites and applications with Bootstrap that fulfill [<abbr title="Web Content Accessibility Guidelines">WCAG</abbr> 2.2](https://www.w3.org/TR/WCAG/) (A/AA/AAA), [Section 508](https://www.section508.gov/), and similar accessibility standards and requirements.
|
||||||
|
|
||||||
### Structural markup
|
### Structural markup
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ Because Bootstrap's components are purposely designed to be fairly generic, auth
|
||||||
|
|
||||||
### Color contrast
|
### Color contrast
|
||||||
|
|
||||||
Some combinations of colors that currently make up Bootstrap's default palette—used throughout the framework for things such as button variations, alert variations, form validation indicators—may lead to *insufficient* color contrast (below the recommended [WCAG 2.1 text color contrast ratio of 4.5:1](https://www.w3.org/TR/WCAG/#contrast-minimum) and the [WCAG 2.1 non-text color contrast ratio of 3:1](https://www.w3.org/TR/WCAG/#non-text-contrast)), particularly when used against a light background. Authors are encouraged to test their specific uses of color and, where necessary, manually modify/extend these default colors to ensure adequate color contrast ratios.
|
Some combinations of colors that currently make up Bootstrap's default palette—used throughout the framework for things such as button variations, alert variations, form validation indicators—may lead to *insufficient* color contrast (below the recommended [WCAG 2.2 text color contrast ratio of 4.5:1](https://www.w3.org/TR/WCAG/#contrast-minimum) and the [WCAG 2.2 non-text color contrast ratio of 3:1](https://www.w3.org/TR/WCAG/#non-text-contrast)), particularly when used against a light background. Authors are encouraged to test their specific uses of color and, where necessary, manually modify/extend these default colors to ensure adequate color contrast ratios.
|
||||||
|
|
||||||
### Visually hidden content
|
### Visually hidden content
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ On browsers that support `prefers-reduced-motion`, and where the user has *not*
|
||||||
|
|
||||||
## Additional resources
|
## Additional resources
|
||||||
|
|
||||||
- [Web Content Accessibility Guidelines (WCAG) 2.1](https://www.w3.org/TR/WCAG/)
|
- [Web Content Accessibility Guidelines (WCAG) 2.2](https://www.w3.org/TR/WCAG/)
|
||||||
- [The A11Y Project](https://www.a11yproject.com/)
|
- [The A11Y Project](https://www.a11yproject.com/)
|
||||||
- [MDN accessibility documentation](https://developer.mozilla.org/en-US/docs/Web/Accessibility)
|
- [MDN accessibility documentation](https://developer.mozilla.org/en-US/docs/Web/Accessibility)
|
||||||
- [Tenon.io Accessibility Checker](https://tenon.io/)
|
- [Tenon.io Accessibility Checker](https://tenon.io/)
|
||||||
|
|
|
@ -11,7 +11,7 @@ added:
|
||||||
Stacks offer a shortcut for applying a number of flexbox properties to quickly and easily create layouts in Bootstrap. All credit for the concept and implementation goes to the open source [Pylon project](https://almonk.github.io/pylon/).
|
Stacks offer a shortcut for applying a number of flexbox properties to quickly and easily create layouts in Bootstrap. All credit for the concept and implementation goes to the open source [Pylon project](https://almonk.github.io/pylon/).
|
||||||
|
|
||||||
{{< callout warning >}}
|
{{< callout warning >}}
|
||||||
**Heads up!** Support for gap utilities with flexbox was recently added to Safari, so consider verifying your intended browser support. Grid layout should have no issues. [Read more](https://caniuse.com/flexbox-gap).
|
**Heads up!** Support for gap utilities with flexbox isn't available in Safari prior to 14.5, so consider verifying your intended browser support. Grid layout should have no issues. [Read more](https://caniuse.com/flexbox-gap).
|
||||||
{{< /callout >}}
|
{{< /callout >}}
|
||||||
|
|
||||||
## Vertical
|
## Vertical
|
||||||
|
|
|
@ -431,7 +431,7 @@ Want more information? [Read the v5.1.0 blog post.](https://blog.getbootstrap.co
|
||||||
|
|
||||||
- Added new tints and shades for every color, providing nine separate colors for each base color, as new Sass variables.
|
- Added new tints and shades for every color, providing nine separate colors for each base color, as new Sass variables.
|
||||||
|
|
||||||
- Improved color contrast. Bumped color contrast ratio from 3:1 to 4.5:1 and updated blue, green, cyan, and pink colors to ensure WCAG 2.1 AA contrast. Also changed our color contrast color from `$gray-900` to `$black`.
|
- Improved color contrast. Bumped color contrast ratio from 3:1 to 4.5:1 and updated blue, green, cyan, and pink colors to ensure WCAG 2.2 AA contrast. Also changed our color contrast color from `$gray-900` to `$black`.
|
||||||
|
|
||||||
- To support our color system, we've added new custom `tint-color()` and `shade-color()` functions to mix our colors appropriately.
|
- To support our color system, we've added new custom `tint-color()` and `shade-color()` functions to mix our colors appropriately.
|
||||||
|
|
||||||
|
|
|
@ -15,10 +15,10 @@
|
||||||
{{ if (eq $i 0) }}<div class="row">{{ end }}
|
{{ if (eq $i 0) }}<div class="row">{{ end }}
|
||||||
{{ if $entry.external -}}
|
{{ if $entry.external -}}
|
||||||
<div class="col-md-6 col-lg-4 mb-3 d-flex gap-3">
|
<div class="col-md-6 col-lg-4 mb-3 d-flex gap-3">
|
||||||
<svg class="bi fs-5 flex-shrink-0 mt-1"><use xlink:href="#box-seam"></use></svg>
|
<svg class="bi fs-5 flex-shrink-0 mt-1" aria-hidden="true"><use xlink:href="#box-seam"></use></svg>
|
||||||
<div>
|
<div>
|
||||||
<h3 class="h5 mb-1">
|
<h3 class="h5 mb-1">
|
||||||
<a class="d-block link-offset-1" href="{{ urls.JoinPath $.Site.Params.github_org $example.url }}" target="_blank" rel="noopener">
|
<a class="d-block link-offset-1" href="{{ urls.JoinPath $.Site.Params.github_org $example.url }}" target="_blank" rel="noopener" id="starter-{{ $i }}">
|
||||||
{{ $example.name }}
|
{{ $example.name }}
|
||||||
</a>
|
</a>
|
||||||
</h3>
|
</h3>
|
||||||
|
@ -26,9 +26,9 @@
|
||||||
<p>
|
<p>
|
||||||
{{- $indexPath := default "index.html" $example.indexPath -}}
|
{{- $indexPath := default "index.html" $example.indexPath -}}
|
||||||
{{- $stackBlitzUrl := printf "%s%s%s" (urls.JoinPath "https://stackblitz.com/github/twbs" $example.url) "?file=" ($indexPath | urlquery) }}
|
{{- $stackBlitzUrl := printf "%s%s%s" (urls.JoinPath "https://stackblitz.com/github/twbs" $example.url) "?file=" ($indexPath | urlquery) }}
|
||||||
<a class="icon-link small link-secondary link-offset-1" href="{{ $stackBlitzUrl }}" target="_blank" rel="noopener">
|
<a class="icon-link small link-secondary link-offset-1" href="{{ $stackBlitzUrl }}" target="_blank" rel="noopener" aria-labelledby="edit-{{ $i }} starter-{{ $i }}">
|
||||||
<svg class="bi flex-shrink-0"><use xlink:href="#lightning-charge-fill"></use></svg>
|
<svg class="bi flex-shrink-0" aria-hidden="true"><use xlink:href="#lightning-charge-fill"></use></svg>
|
||||||
Edit in StackBlitz
|
<span id="edit-{{ $i }}">Edit in StackBlitz</span>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
<section class="pb-md-5 mb-5">
|
<section class="pb-md-5 mb-5">
|
||||||
<div class="col-lg-8 mb-5">
|
<div class="col-lg-8 mb-5">
|
||||||
<div class="masthead-followup-icon d-inline-block mb-3 me-2" style="--bg-rgb: var(--bs-danger-rgb);">
|
<div class="masthead-followup-icon d-inline-block mb-3 me-2" style="--bg-rgb: var(--bs-danger-rgb);">
|
||||||
<svg class="bi fs-1"><use xlink:href="#menu-button-wide-fill"></use></svg>
|
<svg class="bi fs-1" aria-hidden="true"><use xlink:href="#menu-button-wide-fill"></use></svg>
|
||||||
</div>
|
</div>
|
||||||
<svg class="bi me-2 fs-2 text-body-secondary"><use xlink:href="#plus"></use></svg>
|
<svg class="bi me-2 fs-2 text-body-secondary" aria-hidden="true"><use xlink:href="#plus"></use></svg>
|
||||||
<div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-info-rgb);">
|
<div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-info-rgb);">
|
||||||
<svg class="bi fs-1"><use xlink:href="#braces-asterisk"></use></svg>
|
<svg class="bi fs-1" aria-hidden="true"><use xlink:href="#braces-asterisk"></use></svg>
|
||||||
</div>
|
</div>
|
||||||
<h2 class="display-5 mb-3 fw-semibold lh-sm">Components, meet the Utility API</h2>
|
<h2 class="display-5 mb-3 fw-semibold lh-sm">Components, meet the Utility API</h2>
|
||||||
<p class="lead fw-normal">
|
<p class="lead fw-normal">
|
||||||
|
@ -52,10 +52,10 @@
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
`) "html" "" }}
|
`) "html" "" }}
|
||||||
<p class="d-flex justify-content-start mb-md-0">
|
<p class="d-flex mb-md-0">
|
||||||
<a href="/docs/{{ .Site.Params.docs_version }}/examples/#snippets" class="icon-link icon-link-hover fw-semibold">
|
<a href="/docs/{{ .Site.Params.docs_version }}/examples/#snippets" class="icon-link icon-link-hover fw-semibold">
|
||||||
Explore customized components
|
Explore customized components
|
||||||
<svg class="bi"><use xlink:href="#arrow-right"></use></svg>
|
<svg class="bi" aria-hidden="true"><use xlink:href="#arrow-right"></use></svg>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
@ -77,10 +77,10 @@ $utilities: map-merge(
|
||||||
);
|
);
|
||||||
`) "scss" "" }}
|
`) "scss" "" }}
|
||||||
|
|
||||||
<p class="d-flex justify-content-start mb-md-0">
|
<p class="d-flex mb-md-0">
|
||||||
<a href="/docs/{{ .Site.Params.docs_version }}/utilities/api/" class="icon-link icon-link-hover fw-semibold mb-3">
|
<a href="/docs/{{ .Site.Params.docs_version }}/utilities/api/" class="icon-link icon-link-hover fw-semibold mb-3">
|
||||||
Explore the utility API
|
Explore the utility API
|
||||||
<svg class="bi"><use xlink:href="#arrow-right"></use></svg>
|
<svg class="bi" aria-hidden="true"><use xlink:href="#arrow-right"></use></svg>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
<section class="row g-md-5 pb-md-5 mb-5 align-items-center">
|
<section class="row g-md-5 pb-md-5 mb-5 align-items-center">
|
||||||
<div class="col-lg-8 mb-5">
|
<div class="col-lg-8 mb-5">
|
||||||
<div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-pink-rgb);">
|
<div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-pink-rgb);">
|
||||||
<svg class="bi fs-1"><use xlink:href="#braces"></use></svg>
|
<svg class="bi fs-1" aria-hidden="true"><use xlink:href="#braces"></use></svg>
|
||||||
</div>
|
</div>
|
||||||
<h2 class="display-5 mb-3 fw-semibold lh-sm">Build and extend in real-time with CSS variables</h2>
|
<h2 class="display-5 mb-3 fw-semibold lh-sm">Build and extend in real-time with CSS variables</h2>
|
||||||
<p class="lead fw-normal">
|
<p class="lead fw-normal">
|
||||||
Bootstrap 5 is evolving with each release to better utilize CSS variables for global theme styles, individual components, and even utilities. We provide dozens of variables for colors, font styles, and more at a <code>:root</code> level for use anywhere. On components and utilities, CSS variables are scoped to the relevant class and can easily be modified.
|
Bootstrap 5 is evolving with each release to better utilize CSS variables for global theme styles, individual components, and even utilities. We provide dozens of variables for colors, font styles, and more at a <code>:root</code> level for use anywhere. On components and utilities, CSS variables are scoped to the relevant class and can easily be modified.
|
||||||
</p>
|
</p>
|
||||||
<p class="d-flex align-items-start flex-column lead fw-normal mb-0">
|
<p class="d-flex flex-column lead fw-normal mb-0">
|
||||||
<a href="/docs/{{ .Site.Params.docs_version }}/customize/css-variables/" class="icon-link icon-link-hover fw-semibold mb-3">
|
<a href="/docs/{{ .Site.Params.docs_version }}/customize/css-variables/" class="icon-link icon-link-hover fw-semibold mb-3">
|
||||||
Learn more about CSS variables
|
Learn more about CSS variables
|
||||||
<svg class="bi"><use xlink:href="#arrow-right"></use></svg>
|
<svg class="bi" aria-hidden="true"><use xlink:href="#arrow-right"></use></svg>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,15 +1,15 @@
|
||||||
<section class="col-lg-7 mb-5">
|
<section class="col-lg-7 mb-5">
|
||||||
<div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-primary-rgb);">
|
<div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-primary-rgb);">
|
||||||
<svg class="bi fs-1"><use xlink:href="#palette2"></use></svg>
|
<svg class="bi fs-1" aria-hidden="true"><use xlink:href="#palette2"></use></svg>
|
||||||
</div>
|
</div>
|
||||||
<h2 class="display-5 mb-3 fw-semibold lh-sm">Customize everything with Sass</h2>
|
<h2 class="display-5 mb-3 fw-semibold lh-sm">Customize everything with Sass</h2>
|
||||||
<p class="lead fw-normal">
|
<p class="lead fw-normal">
|
||||||
Bootstrap utilizes Sass for a modular and customizable architecture. Import only the components you need, enable global options like gradients and shadows, and write your own CSS with our variables, maps, functions, and mixins.
|
Bootstrap utilizes Sass for a modular and customizable architecture. Import only the components you need, enable global options like gradients and shadows, and write your own CSS with our variables, maps, functions, and mixins.
|
||||||
</p>
|
</p>
|
||||||
<p class="d-flex justify-content-start lead fw-normal">
|
<p class="d-flex lead fw-normal">
|
||||||
<a href="/docs/{{ .Site.Params.docs_version }}/customize/overview/" class="icon-link icon-link-hover fw-semibold">
|
<a href="/docs/{{ .Site.Params.docs_version }}/customize/overview/" class="icon-link icon-link-hover fw-semibold">
|
||||||
Learn more about customizing
|
Learn more about customizing
|
||||||
<svg class="bi"><use xlink:href="#arrow-right"></use></svg>
|
<svg class="bi" aria-hidden="true"><use xlink:href="#arrow-right"></use></svg>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
<div class="col-lg-7 mx-auto pb-3 mb-3 mb-md-5 text-md-center">
|
<div class="col-lg-7 mx-auto pb-3 mb-3 mb-md-5 text-md-center">
|
||||||
<div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-violet-rgb);">
|
<div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bd-violet-rgb);">
|
||||||
<svg class="bi fs-1"><use xlink:href="#code"></use></svg>
|
<svg class="bi fs-1" aria-hidden="true"><use xlink:href="#code"></use></svg>
|
||||||
</div>
|
</div>
|
||||||
<h2 class="display-5 mb-3 fw-semibold lh-sm">Get started any way you want</h2>
|
<h2 class="display-5 mb-3 fw-semibold lh-sm">Get started any way you want</h2>
|
||||||
<p class="lead fw-normal">
|
<p class="lead fw-normal">
|
||||||
Jump right into building with Bootstrap—use the CDN, install it via package manager, or download the source code.
|
Jump right into building with Bootstrap—use the CDN, install it via package manager, or download the source code.
|
||||||
</p>
|
</p>
|
||||||
<p class="d-flex justify-content-md-start justify-content-md-center lead fw-normal">
|
<p class="d-flex justify-content-md-center lead fw-normal">
|
||||||
<a href="/docs/{{ .Site.Params.docs_version }}/getting-started/download/" class="icon-link icon-link-hover fw-semibold ps-md-4">
|
<a href="/docs/{{ .Site.Params.docs_version }}/getting-started/download/" class="icon-link icon-link-hover fw-semibold ps-md-4">
|
||||||
Read installation docs
|
Read installation docs
|
||||||
<svg class="bi"><use xlink:href="#arrow-right"></use></svg>
|
<svg class="bi" aria-hidden="true"><use xlink:href="#arrow-right"></use></svg>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<section class="row g-3 g-md-5 mb-5 pb-5 justify-content-center">
|
<section class="row g-3 g-md-5 mb-5 pb-5 justify-content-center">
|
||||||
<div class="col-lg-6 py-lg-4 pe-lg-5">
|
<div class="col-lg-6 py-lg-4 pe-lg-5">
|
||||||
<svg class="bi mb-2 fs-2 text-body-secondary"><use xlink:href="#box-seam"></use></svg>
|
<svg class="bi mb-2 fs-2 text-body-secondary" aria-hidden="true"><use xlink:href="#box-seam"></use></svg>
|
||||||
<h3 class="fw-semibold">Install via package manager</h3>
|
<h3 class="fw-semibold">Install via package manager</h3>
|
||||||
<p class="pe-lg-5">
|
<p class="pe-lg-5">
|
||||||
Install Bootstrap’s source Sass and JavaScript files via npm, RubyGems, Composer, or Meteor. Package managed installs don’t include documentation or our full build scripts. You can also <a href="https://github.com/twbs/examples/">use any demo from our Examples repo</a> to quickly jumpstart Bootstrap projects.
|
Install Bootstrap’s source Sass and JavaScript files via npm, RubyGems, Composer, or Meteor. Package managed installs don’t include documentation or our full build scripts. You can also <a href="https://github.com/twbs/examples/">use any demo from our Examples repo</a> to quickly jumpstart Bootstrap projects.
|
||||||
|
@ -28,7 +28,7 @@
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6 py-lg-4 ps-lg-5 border-lg-start">
|
<div class="col-lg-6 py-lg-4 ps-lg-5 border-lg-start">
|
||||||
<svg class="bi mb-2 fs-2 text-body-secondary"><use xlink:href="#globe2"></use></svg>
|
<svg class="bi mb-2 fs-2 text-body-secondary" aria-hidden="true"><use xlink:href="#globe2"></use></svg>
|
||||||
<h3 class="fw-semibold">Include via CDN</h3>
|
<h3 class="fw-semibold">Include via CDN</h3>
|
||||||
<p class="pe-lg-5">
|
<p class="pe-lg-5">
|
||||||
When you only need to include Bootstrap’s compiled CSS or JS, you can use <a href="https://www.jsdelivr.com/package/npm/bootstrap">jsDelivr</a>. See it in action with our simple <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/#quick-start">quick start</a>, or <a href="/docs/{{ .Site.Params.docs_version }}/examples/">browse the examples</a> to jumpstart your next project. You can also choose to include Popper and our JS <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/#separate">separately</a>.
|
When you only need to include Bootstrap’s compiled CSS or JS, you can use <a href="https://www.jsdelivr.com/package/npm/bootstrap">jsDelivr</a>. See it in action with our simple <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/#quick-start">quick start</a>, or <a href="/docs/{{ .Site.Params.docs_version }}/examples/">browse the examples</a> to jumpstart your next project. You can also choose to include Popper and our JS <a href="/docs/{{ .Site.Params.docs_version }}/getting-started/introduction/#separate">separately</a>.
|
||||||
|
|
|
@ -7,10 +7,10 @@
|
||||||
<p class="lead fw-normal">
|
<p class="lead fw-normal">
|
||||||
<a href="{{ .Site.Params.icons }}">Bootstrap Icons</a> is an open source SVG icon library featuring over 1,800 glyphs, with more added every release. They're designed to work in any project, whether you use Bootstrap itself or not. Use them as SVGs or icon fonts—both options give you vector scaling and easy customization via CSS.
|
<a href="{{ .Site.Params.icons }}">Bootstrap Icons</a> is an open source SVG icon library featuring over 1,800 glyphs, with more added every release. They're designed to work in any project, whether you use Bootstrap itself or not. Use them as SVGs or icon fonts—both options give you vector scaling and easy customization via CSS.
|
||||||
</p>
|
</p>
|
||||||
<p class="d-flex justify-content-start lead fw-normal mb-md-0">
|
<p class="d-flex lead fw-normal mb-md-0">
|
||||||
<a href="{{ .Site.Params.icons }}" class="icon-link icon-link-hover fw-semibold">
|
<a href="{{ .Site.Params.icons }}" class="icon-link icon-link-hover fw-semibold">
|
||||||
Get Bootstrap Icons
|
Get Bootstrap Icons
|
||||||
<svg class="bi"><use xlink:href="#arrow-right"></use></svg>
|
<svg class="bi" aria-hidden="true"><use xlink:href="#arrow-right"></use></svg>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,11 +3,8 @@
|
||||||
<div class="col-md-8 mx-auto text-center">
|
<div class="col-md-8 mx-auto text-center">
|
||||||
<a class="d-flex flex-column flex-lg-row justify-content-center align-items-center mb-4 text-dark lh-sm text-decoration-none" href="https://www.herodevs.com/support/nes-bootstrap?utm_source=Bootstrap_site&utm_medium=Banner&utm_campaign=v3and4_eol" rel="noopener" target="_blank">
|
<a class="d-flex flex-column flex-lg-row justify-content-center align-items-center mb-4 text-dark lh-sm text-decoration-none" href="https://www.herodevs.com/support/nes-bootstrap?utm_source=Bootstrap_site&utm_medium=Banner&utm_campaign=v3and4_eol" rel="noopener" target="_blank">
|
||||||
<span class="d-sm-inline-flex align-items-center gap-1 py-2 px-3 me-2 mb-2 mb-lg-0 rounded-5 masthead-notice">
|
<span class="d-sm-inline-flex align-items-center gap-1 py-2 px-3 me-2 mb-2 mb-lg-0 rounded-5 masthead-notice">
|
||||||
<span class="fw-semibold">
|
Get Security Updates for Bootstrap 3 & 4
|
||||||
New!
|
<svg class="bi" style="width: 20px; height: 20px;" aria-hidden="true"><use xlink:href="#arrow-right-short"></use></svg>
|
||||||
</span>
|
|
||||||
Never-Ending Support for Bootstrap
|
|
||||||
<svg class="bi" style="width: 20px; height: 20px;"><use xlink:href="#arrow-right-short"></use></svg>
|
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
{{ partial "responsive-img" (dict "context" .
|
{{ partial "responsive-img" (dict "context" .
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
<section class="pb-md-5 mb-5">
|
<section class="pb-md-5 mb-5">
|
||||||
<div class="col-lg-8 mb-5">
|
<div class="col-lg-8 mb-5">
|
||||||
<div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-warning-rgb);">
|
<div class="masthead-followup-icon d-inline-block mb-3" style="--bg-rgb: var(--bs-warning-rgb);">
|
||||||
<svg class="bi fs-1"><use xlink:href="#plugin"></use></svg>
|
<svg class="bi fs-1" aria-hidden="true"><use xlink:href="#plugin"></use></svg>
|
||||||
</div>
|
</div>
|
||||||
<h2 class="display-5 mb-3 fw-semibold lh-sm">Powerful JavaScript plugins without jQuery</h2>
|
<h2 class="display-5 mb-3 fw-semibold lh-sm">Powerful JavaScript plugins without jQuery</h2>
|
||||||
<p class="lead fw-normal">
|
<p class="lead fw-normal">
|
||||||
Add toggleable hidden elements, modals and offcanvas menus, popovers and tooltips, and so much more—all without jQuery. Bootstrap's JavaScript is HTML-first, meaning most plugins are added with <code>data</code> attributes in your HTML. Need more control? Include individual plugins programmatically.
|
Add toggleable hidden elements, modals and offcanvas menus, popovers and tooltips, and so much more—all without jQuery. Bootstrap's JavaScript is HTML-first, meaning most plugins are added with <code>data</code> attributes in your HTML. Need more control? Include individual plugins programmatically.
|
||||||
</p>
|
</p>
|
||||||
<p class="d-flex justify-content-start lead fw-normal mb-md-0">
|
<p class="d-flex lead fw-normal mb-md-0">
|
||||||
<a href="/docs/{{ .Site.Params.docs_version }}/getting-started/javascript/" class="icon-link icon-link-hover fw-semibold">
|
<a href="/docs/{{ .Site.Params.docs_version }}/getting-started/javascript/" class="icon-link icon-link-hover fw-semibold">
|
||||||
Learn more about Bootstrap JavaScript
|
Learn more about Bootstrap JavaScript
|
||||||
<svg class="bi"><use xlink:href="#arrow-right"></use></svg>
|
<svg class="bi" aria-hidden="true"><use xlink:href="#arrow-right"></use></svg>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -7,10 +7,10 @@
|
||||||
<p class="lead fw-normal">
|
<p class="lead fw-normal">
|
||||||
Take Bootstrap to the next level with premium themes from the <a href="{{ .Site.Params.themes }}">official Bootstrap Themes marketplace</a>. Themes are built on Bootstrap as their own extended frameworks, rich with new components and plugins, documentation, and powerful build tools.
|
Take Bootstrap to the next level with premium themes from the <a href="{{ .Site.Params.themes }}">official Bootstrap Themes marketplace</a>. Themes are built on Bootstrap as their own extended frameworks, rich with new components and plugins, documentation, and powerful build tools.
|
||||||
</p>
|
</p>
|
||||||
<p class="d-flex justify-content-start lead fw-normal mb-md-0">
|
<p class="d-flex lead fw-normal mb-md-0">
|
||||||
<a href="{{ .Site.Params.themes }}" class="icon-link icon-link-hover fw-semibold">
|
<a href="{{ .Site.Params.themes }}" class="icon-link icon-link-hover fw-semibold">
|
||||||
Browse Bootstrap Themes
|
Browse Bootstrap Themes
|
||||||
<svg class="bi"><use xlink:href="#arrow-right"></use></svg>
|
<svg class="bi" aria-hidden="true"><use xlink:href="#arrow-right"></use></svg>
|
||||||
</a>
|
</a>
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} fill="currentColor" focusable="false" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} fill="currentColor" viewBox="0 0 16 16" aria-hidden="true">
|
||||||
<path d="M0 6a6 6 0 1112 0A6 6 0 010 6z"/>
|
<path d="M0 6a6 6 0 1112 0A6 6 0 010 6z"/>
|
||||||
<path d="M12.93 5h1.57a.5.5 0 01.5.5v9a.5.5 0 01-.5.5h-9a.5.5 0 01-.5-.5v-1.57a6.953 6.953 0 01-1-.22v1.79A1.5 1.5 0 005.5 16h9a1.5 1.5 0 001.5-1.5v-9A1.5 1.5 0 0014.5 4h-1.79c.097.324.17.658.22 1z"/>
|
<path d="M12.93 5h1.57a.5.5 0 01.5.5v9a.5.5 0 01-.5.5h-9a.5.5 0 01-.5-.5v-1.57a6.953 6.953 0 01-1-.22v1.79A1.5 1.5 0 005.5 16h9a1.5 1.5 0 001.5-1.5v-9A1.5 1.5 0 0014.5 4h-1.79c.097.324.17.658.22 1z"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 482 B After Width: | Height: | Size: 483 B |
|
@ -1,3 +1,3 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} fill="currentColor" focusable="false" viewBox="0 0 16 16">
|
<svg xmlns="http://www.w3.org/2000/svg"{{ with .width }} width="{{ . }}"{{ end }}{{ with .height }} height="{{ . }}"{{ end }}{{ with .class }} class="{{ . }}"{{ end }} fill="currentColor" viewBox="0 0 16 16" aria-hidden="true">
|
||||||
<path fill-rule="evenodd" d="M8 16a6 6 0 006-6c0-1.655-1.122-2.904-2.432-4.362C10.254 4.176 8.75 2.503 8 0c0 0-6 5.686-6 10a6 6 0 006 6zM6.646 4.646c-.376.377-1.272 1.489-2.093 3.13l.894.448c.78-1.559 1.616-2.58 1.907-2.87l-.708-.708z" clip-rule="evenodd"/>
|
<path fill-rule="evenodd" d="M8 16a6 6 0 006-6c0-1.655-1.122-2.904-2.432-4.362C10.254 4.176 8.75 2.503 8 0c0 0-6 5.686-6 10a6 6 0 006 6zM6.646 4.646c-.376.377-1.272 1.489-2.093 3.13l.894.448c.78-1.559 1.616-2.58 1.907-2.87l-.708-.708z" clip-rule="evenodd"/>
|
||||||
</svg>
|
</svg>
|
||||||
|
|
Before Width: | Height: | Size: 494 B After Width: | Height: | Size: 495 B |
|
@ -36,7 +36,7 @@
|
||||||
{{- if $show_text }}%3Ctext%20x='50%25'%20y='50%25'%20fill='{{ replace $color "#" "%23" }}'%20dy='.3em'%3E{{ $text }}%3C/text%3E{{ end -}}
|
{{- if $show_text }}%3Ctext%20x='50%25'%20y='50%25'%20fill='{{ replace $color "#" "%23" }}'%20dy='.3em'%3E{{ $text }}%3C/text%3E{{ end -}}
|
||||||
%3C/svg%3E">
|
%3C/svg%3E">
|
||||||
{{- else -}}
|
{{- else -}}
|
||||||
<svg class="bd-placeholder-img{{ with $class }} {{ . }}{{ end }}" width="{{ $width }}" height="{{ $height }}" xmlns="http://www.w3.org/2000/svg"{{ if (or $show_title $show_text) }} role="img" aria-label="{{ if $show_title }}{{ $title }}{{ if $show_text }}: {{ end }}{{ end }}{{ if ($show_text) }}{{ $text }}{{ end }}"{{ else }} aria-hidden="true"{{ end }} preserveAspectRatio="xMidYMid slice" focusable="false">
|
<svg class="bd-placeholder-img{{ with $class }} {{ . }}{{ end }}" width="{{ $width }}" height="{{ $height }}" xmlns="http://www.w3.org/2000/svg"{{ if (or $show_title $show_text) }} role="img" aria-label="{{ if $show_title }}{{ $title }}{{ if $show_text }}: {{ end }}{{ end }}{{ if ($show_text) }}{{ $text }}{{ end }}"{{ else }} aria-hidden="true"{{ end }} preserveAspectRatio="xMidYMid slice">
|
||||||
{{- if $show_title }}<title>{{ $title }}</title>{{ end -}}
|
{{- if $show_title }}<title>{{ $title }}</title>{{ end -}}
|
||||||
<rect width="100%" height="100%" fill="{{ $background }}"/>
|
<rect width="100%" height="100%" fill="{{ $background }}"/>
|
||||||
{{- if $show_text }}<text x="50%" y="50%" fill="{{ $color }}" dy=".3em">{{ $text }}</text>{{ end -}}
|
{{- if $show_text }}<text x="50%" y="50%" fill="{{ $color }}" dy=".3em">{{ $text }}</text>{{ end -}}
|
||||||
|
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 708 KiB After Width: | Height: | Size: 683 KiB |
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 118 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 8.6 KiB After Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 6.9 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.1 KiB |
Before Width: | Height: | Size: 521 KiB After Width: | Height: | Size: 520 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |