diff --git a/docs/accordions.html b/docs/accordions.html index 720edd1d9..f1e0d8960 100644 --- a/docs/accordions.html +++ b/docs/accordions.html @@ -1,4 +1,5 @@ -Accordions • Pico CSS

Accordions

Toggle sections of content in pure HTML, without JavaScript.

Accordion 1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque urna diam, tincidunt nec porta sed, auctor id velit. Etiam venenatis nisl ut orci consequat, vitae tempus quam commodo. Nulla non mauris ipsum. Aliquam eu posuere orci. Nulla convallis lectus rutrum quam hendrerit, in facilisis elit sollicitudin. Mauris pulvinar pulvinar mi, dictum tristique elit auctor quis. Maecenas ac ipsum ultrices, porta turpis sit amet, congue turpis.

Accordion 2
  • Vestibulum id elit quis massa interdum sodales.
  • Nunc quis eros vel odio pretium tincidunt nec quis neque.
  • Quisque sed eros non eros ornare elementum.
  • Cras sed libero aliquet, porta dolor quis, dapibus ipsum.
<details>
+Accordions • Pico CSS

Accordions

Toggle sections of content in pure HTML, without JavaScript.

Accordion 1

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque urna diam, tincidunt nec porta sed, auctor id velit. Etiam venenatis nisl ut orci consequat, vitae tempus quam commodo. Nulla non mauris ipsum. Aliquam eu posuere orci. Nulla convallis lectus rutrum quam hendrerit, in facilisis elit sollicitudin. Mauris pulvinar pulvinar mi, dictum tristique elit auctor quis. Maecenas ac ipsum ultrices, porta turpis sit amet, congue turpis.

Accordion 2
  • Vestibulum id elit quis massa interdum sodales.
  • Nunc quis eros vel odio pretium tincidunt nec quis neque.
  • Quisque sed eros non eros ornare elementum.
  • Cras sed libero aliquet, porta dolor quis, dapibus ipsum.
<details>
   <summary>Accordion 1</summary>
   <p>…</p>
 </details>
@@ -25,6 +26,4 @@
 <details>
   <summary role="button" class="contrast">Accordion 3</summary>
   <p>…</p>
-</details>
-
-            

Code licensed MIT

\ No newline at end of file +</details>
\ No newline at end of file diff --git a/docs/buttons.html b/docs/buttons.html index 475ce83a5..3b234f0a1 100644 --- a/docs/buttons.html +++ b/docs/buttons.html @@ -1,6 +1,7 @@ -Buttons • Pico CSS

Buttons

The essential button in pure HTML, without .classes for the default style.

\ No newline at end of file diff --git a/docs/cards.html b/docs/cards.html index fef1434ce..98c42ac6d 100644 --- a/docs/cards.html +++ b/docs/cards.html @@ -1,5 +1,6 @@ -Cards • Pico CSS

Cards

A flexible container with graceful spacings across devices and viewports.

I'm a card!
<article>I'm a card!</article>

You can use <header> and footer <footer> inside <article>

Header
Body
Footer
<article>
+Cards • Pico CSS

Cards

A flexible container with graceful spacings across devices and viewports.

I'm a card!
<article>I'm a card!</article>

You can use <header> and footer <footer> inside <article>

Header
Body
Footer
<article>
   <header>Header</header>
   Body
   <footer>Footer</footer>
-</article>

Code licensed MIT

\ No newline at end of file +</article>
\ No newline at end of file diff --git a/docs/classless.html b/docs/classless.html index b70c07c16..af39b14fb 100644 --- a/docs/classless.html +++ b/docs/classless.html @@ -1,4 +1,5 @@ -Class-less version • Pico CSS

Class-less version

For wild HTML purists!

Pico provides a .classless version (example).

In this version, <header>, <main>, and <footer> act as containers to define a centered or a fluid viewport.

// Containers
+Class-less version • Pico CSS

Class-less version

For wild HTML purists!

Pico provides a .classless version (example).

In this version, <header>, <main>, and <footer> act as containers to define a centered or a fluid viewport.

// Containers
 body > header,
 body > main,
 body > footer {
@@ -26,4 +27,4 @@
 #root > footer {
   
 }
-

Code licensed MIT

\ No newline at end of file +
\ No newline at end of file diff --git a/docs/containers.html b/docs/containers.html index 31a13dc27..be775ff3f 100644 --- a/docs/containers.html +++ b/docs/containers.html @@ -1,3 +1,4 @@ -Containers • Pico CSS

Containers

.container enable a centered viewport.
.container-fluid enable a 100% layout.

<body>
+Containers • Pico CSS

Containers

.container enable a centered viewport.
.container-fluid enable a 100% layout.

<body>
   <main class="container"></main>
-</body>

Pico uses the same breakpoints and viewports sizes as Bootstrap.

DeviceExtra smallSmallMediumLargeExtra large
Breakpoint<576px≥576px≥768px≥992px≥1200px
Viewport100%540px720px960px1140px

<header>, <main> and <footer> as direct children of <body> provide a responsive vertical padding

<section> provides a responsive margin-bottom to separate your sections.


Code licensed MIT

\ No newline at end of file +</body>

Pico uses the same breakpoints and viewports sizes as Bootstrap.

DeviceExtra smallSmallMediumLargeExtra large
Breakpoint<576px≥576px≥768px≥992px≥1200px
Viewport100%540px720px960px1140px

<header>, <main> and <footer> as direct children of <body> provide a responsive vertical padding

<section> provides a responsive margin-bottom to separate your sections.

\ No newline at end of file diff --git a/docs/customization.html b/docs/customization.html index 9c83d1929..59c2e9473 100644 --- a/docs/customization.html +++ b/docs/customization.html @@ -1,4 +1,6 @@ -Customization • Pico CSS

Customization

You can customize themes with SCSS or, you can edit the CSS variables.

Example: pick a color!

Custom theme

// Simplified example
+Customization • Pico CSS

Customization

You can customize themes with SCSS or, you can edit the CSS variables.

Example: pick a color!

Custom theme

// Simplified example
 :root {
   --primary: ;
 }
@@ -56,4 +58,4 @@
 @import "@picocss/pico/scss/pico/layout/document";
 @import "@picocss/pico/scss/pico/layout/sectioning";
 
-

Compiling a custom SASS version allows you to create a lighter version with only the components that are useful to you.


Code licensed MIT

\ No newline at end of file +

Compiling a custom SASS version allows you to create a lighter version with only the components that are useful to you.

\ No newline at end of file diff --git a/docs/dropdowns.html b/docs/dropdowns.html index f754fabfb..70803ed07 100644 --- a/docs/dropdowns.html +++ b/docs/dropdowns.html @@ -1,4 +1,5 @@ -Dropdowns • Pico CSS
\ No newline at end of file diff --git a/docs/forms.html b/docs/forms.html index 6f4b14083..4147c77c1 100644 --- a/docs/forms.html +++ b/docs/forms.html @@ -1,4 +1,6 @@ -Forms • Pico CSS

Forms

All form elements are fully responsive in pure semantic HTML, allowing forms to scale gracefully across devices and viewports.

Inputs are width: 100%; by default. You can use .grid inside a form.

All native form elements are fully customizable and themeable with CSS variables.

We'll never share your email with anyone else.
<form>
+Forms • Pico CSS

Forms

All form elements are fully responsive in pure semantic HTML, allowing forms to scale gracefully across devices and viewports.

Inputs are width: 100%; by default. You can use .grid inside a form.

All native form elements are fully customizable and themeable with CSS variables.

We'll never share your email with anyone else.
<form>
 
   <!-- Grid -->
   <div class="grid">
@@ -24,10 +26,10 @@
   <!-- Button -->
   <button type="submit">Submit</button>
 
-</form>

Disabled and validation states:

<input type="text" placeholder="Valid" aria-invalid="false">
+</form>

Disabled and validation states:

<input type="text" placeholder="Valid" aria-invalid="false">
 <input type="text" placeholder="Invalid" aria-invalid="true">
 <input type="text" placeholder="Disabled" disabled>
-<input type="text" value="Readonly" readonly>

<fieldset> is unstyled and acts as a container for radios and checkboxes, providing a consistent margin-bottom for the set.

role="switch" on a type="checkbox" enable a custom switch.

Size
<!-- Select -->
+<input type="text" value="Readonly" readonly>

<fieldset> is unstyled and acts as a container for radios and checkboxes, providing a consistent margin-bottom for the set.

role="switch" on a type="checkbox" enable a custom switch.

Size
<!-- Select -->
 <label for="fruit">Fruit</label>
 <select id="fruit" required>
   <option value="" selected>Select a fruit…</option>
@@ -77,12 +79,12 @@
     <input type="checkbox" id="switch_disabled" name="switch_disabled" role="switch_disabled" disabled checked>
     User must change password at next logon
   </label>
-</fieldset>

You can change a checkbox to an indeterminate state by setting the indeterminate property to true

<script>
+</fieldset>

You can change a checkbox to an indeterminate state by setting the indeterminate property to true

<script>
   document.getElementById('indeterminate-checkbox').indeterminate = true;
-</script>

Others input types:

<!-- Search -->
+</script>

Others input types:

<!-- Search -->
 <input type="search" id="search" name="search" placeholder="Search">
 
-<!-- File browser -->
+<!-- File browser -->
 <label for="file">File browser
   <input type="file" id="file" name="file">
 </label>
@@ -105,4 +107,4 @@
 <!-- Color -->
 <label for="color">Color
   <input type="color" id="color" name="color" value="#0eaaaa">
-</label>

Code licensed MIT

\ No newline at end of file +</label>
\ No newline at end of file diff --git a/docs/grid.html b/docs/grid.html index 13bf01850..ee7727388 100644 --- a/docs/grid.html +++ b/docs/grid.html @@ -1,6 +1,7 @@ -Grid • Pico CSS

Grid

.grid enable a minimal grid system with auto-layout columns.

1
2
3
4

Columns intentionally collapses below large devices (992px)

To go further, discover how to merge Pico with the Bootstrap grid system.

 More about grids

As Pico focuses on native HTML elements, we kept this grid system very minimalist.

A complete grid system in flexbox, with all the ordering, offsetting and, breakpoints utilities, can be heavier than the total size of the Pico library. Not really in the Pico spirit.

If you need a quick way to prototyping or build a complex layout, you can look at Flexbox grid layouts. For example, Bootstrap Grid System only or Flexbox Grid.

If you need a light and custom grid, you can look at CSS Grid Generators. For example, CSS Grid Generator, Layoutit! or Griddy.

Alternatively, you can learn about CSS Grid.

\ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 5c9482f97..a2e050841 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,4 +1,6 @@ -Documentation • Pico CSS

Usage

Works without package manager or dependencies 🙂!

There are 4 ways to get started with Pico CSS:

Install manually

Download Pico and link /css/pico.min.css in the <head> of your website.

<link rel="stylesheet" href="css/pico.min.css">

Install from CDN

Alternatively, you can use jsDelivr CDN to link pico.css

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@1/css/pico.min.css">

Install with NPM

npm install @picocss/pico

Install with Composer

composer require picocss/pico

Starter HTML template:

<!doctype html>
+Documentation • Pico CSS

Usage

Works without package manager or dependencies 🙂!

There are 4 ways to get started with Pico CSS:

Install manually

Download Pico and link /css/pico.min.css in the <head> of your website.

<link rel="stylesheet" href="css/pico.min.css">

Install from CDN

Alternatively, you can use jsDelivr CDN to link pico.css

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@1/css/pico.min.css">

Install with NPM

npm install @picocss/pico

Install with Composer

composer require picocss/pico

Starter HTML template:

<!doctype html>
 <html lang="en">
   <head>
     <meta charset="utf-8">
@@ -11,4 +13,4 @@
       <h1>Hello, world!</h1>
     </main>
   </body>
-</html>

Code licensed MIT

\ No newline at end of file +</html>
\ No newline at end of file diff --git a/docs/js/commons.js b/docs/js/commons.js index 408e1863e..5ec3b2d29 100644 --- a/docs/js/commons.js +++ b/docs/js/commons.js @@ -6,16 +6,16 @@ */ // Imports -import themeSwitcher from './src/theme-switcher.js'; -import toggleNavigation from './src/toggle-navigation'; +import themeSwitcher from "./src/theme-switcher.js" +import toggleNavigation from "./src/toggle-navigation" // Theme switcher themeSwitcher.addButton({ - tag: 'BUTTON', - class: 'contrast switcher theme-switcher', - target: 'body', -}); -themeSwitcher.init(); + tag: "BUTTON", + class: "contrast switcher theme-switcher", + target: "body", +}) +themeSwitcher.init() // Toggle navigation -toggleNavigation.init(); \ No newline at end of file +toggleNavigation.init() diff --git a/docs/js/customization.js b/docs/js/customization.js index 4e95ebc79..6fb36261c 100644 --- a/docs/js/customization.js +++ b/docs/js/customization.js @@ -6,9 +6,9 @@ */ // Imports -import materialDesignColors from './src/material-design-colors.js'; -import colorPicker from './src/color-picker.js'; +import materialDesignColors from "./src/material-design-colors.js" +import colorPicker from "./src/color-picker.js" // Color Picker -colorPicker.colors = materialDesignColors; -colorPicker.init(); \ No newline at end of file +colorPicker.colors = materialDesignColors +colorPicker.init() diff --git a/docs/js/grid.js b/docs/js/grid.js index c170d5b34..30950b2b0 100644 --- a/docs/js/grid.js +++ b/docs/js/grid.js @@ -6,33 +6,32 @@ */ const grid = { - // Config buttons: { text: { - add: 'Add column', - remove: 'Remove column', + add: "Add column", + remove: "Remove column", }, - target: '#grid article', + target: "#grid article", }, grid: { current: 4, min: 1, max: 12, - gridTarget: '#grid .grid', - codeTarget: '#grid pre code', + gridTarget: "#grid .grid", + codeTarget: "#grid pre code", }, // Init init() { - this.addButtons(); - this.generateGrid(); + this.addButtons() + this.generateGrid() }, // Add buttons addButtons() { // Insert buttons - let buttons = document.createElement('P'); + let buttons = document.createElement("P") buttons.innerHTML = ` `; - document.querySelector(this.buttons.target).before(buttons); + ` + document.querySelector(this.buttons.target).before(buttons) // Add button listener - document.querySelector('#grid button.add').addEventListener('click', () => { - this.addColumn(); - }, false); + document.querySelector("#grid button.add").addEventListener( + "click", + () => { + this.addColumn() + }, + false + ) // Remove button listener - document.querySelector('#grid button.remove').addEventListener('click', () => { - this.removeColumn(); - }, false); + document.querySelector("#grid button.remove").addEventListener( + "click", + () => { + this.removeColumn() + }, + false + ) }, // Generate grid generateGrid() { // Config - let htmlInner = ''; - let codeInner = '<div class="grid">\n'; + let htmlInner = "" + let codeInner = '<div class="grid">\n' // Build for (let col = 0; col < this.grid.current; col++) { - htmlInner += '
' + (col + 1) + '
'; - codeInner += ' <div>' + (col + 1) + '</div>\n'; + htmlInner += "
" + (col + 1) + "
" + codeInner += " <div>" + (col + 1) + "</div>\n" } // Display - codeInner += '</div>'; - document.querySelector(this.grid.gridTarget).innerHTML = htmlInner; - document.querySelector(this.grid.codeTarget).innerHTML = codeInner; + codeInner += "</div>" + document.querySelector(this.grid.gridTarget).innerHTML = htmlInner + document.querySelector(this.grid.codeTarget).innerHTML = codeInner }, // Add column addColumn() { if (this.grid.current < this.grid.max) { - this.grid.current++; - this.generateGrid(); + this.grid.current++ + this.generateGrid() } }, // Remove column removeColumn() { if (this.grid.current > this.grid.min) { - this.grid.current--; - this.generateGrid(); + this.grid.current-- + this.generateGrid() } }, -}; +} // Init -grid.init(); \ No newline at end of file +grid.init() diff --git a/docs/js/modal.js b/docs/js/modal.js index beb98a261..13e546512 100644 --- a/docs/js/modal.js +++ b/docs/js/modal.js @@ -6,90 +6,96 @@ */ // Config -const isOpenClass = 'modal-is-open'; -const openingClass = 'modal-is-opening'; -const closingClass = 'modal-is-closing'; -const animationDuration = 400; // ms -let visibleModal = null; - +const isOpenClass = "modal-is-open" +const openingClass = "modal-is-opening" +const closingClass = "modal-is-closing" +const animationDuration = 400 // ms +let visibleModal = null // Toggle modal const toggleModal = event => { - event.preventDefault(); - const modal = document.getElementById(event.currentTarget.getAttribute('data-target')); - (typeof(modal) != 'undefined' && modal != null) - && isModalOpen(modal) ? closeModal(modal) : openModal(modal) + event.preventDefault() + const modal = document.getElementById( + event.currentTarget.getAttribute("data-target") + ) + typeof modal != "undefined" && modal != null && isModalOpen(modal) + ? closeModal(modal) + : openModal(modal) } // Is modal open const isModalOpen = modal => { - return modal.hasAttribute('open') && modal.getAttribute('open') != 'false' ? true : false; + return modal.hasAttribute("open") && modal.getAttribute("open") != "false" + ? true + : false } // Open modal const openModal = modal => { if (isScrollbarVisible()) { - document.documentElement.style.setProperty('--scrollbar-width', `${getScrollbarWidth()}px`); + document.documentElement.style.setProperty( + "--scrollbar-width", + `${getScrollbarWidth()}px` + ) } - document.documentElement.classList.add(isOpenClass, openingClass); + document.documentElement.classList.add(isOpenClass, openingClass) setTimeout(() => { - visibleModal = modal; - document.documentElement.classList.remove(openingClass); - }, animationDuration); - modal.setAttribute('open', true); + visibleModal = modal + document.documentElement.classList.remove(openingClass) + }, animationDuration) + modal.setAttribute("open", true) } // Close modal const closeModal = modal => { - visibleModal = null; - document.documentElement.classList.add(closingClass); + visibleModal = null + document.documentElement.classList.add(closingClass) setTimeout(() => { - document.documentElement.classList.remove(closingClass, isOpenClass); - document.documentElement.style.removeProperty('--scrollbar-width'); - modal.removeAttribute('open'); - }, animationDuration); + document.documentElement.classList.remove(closingClass, isOpenClass) + document.documentElement.style.removeProperty("--scrollbar-width") + modal.removeAttribute("open") + }, animationDuration) } // Close with a click outside -document.addEventListener('click', event => { +document.addEventListener("click", event => { if (visibleModal != null) { - const modalContent = visibleModal.querySelector('article'); - const isClickInside = modalContent.contains(event.target); - !isClickInside && closeModal(visibleModal); + const modalContent = visibleModal.querySelector("article") + const isClickInside = modalContent.contains(event.target) + !isClickInside && closeModal(visibleModal) } -}); +}) // Close with Esc key -document.addEventListener('keydown', event => { - if (event.key === 'Escape' && visibleModal != null) { - closeModal(visibleModal); +document.addEventListener("keydown", event => { + if (event.key === "Escape" && visibleModal != null) { + closeModal(visibleModal) } -}); +}) // Get scrollbar width const getScrollbarWidth = () => { - // Creating invisible container - const outer = document.createElement('div'); - outer.style.visibility = 'hidden'; - outer.style.overflow = 'scroll'; // forcing scrollbar to appear - outer.style.msOverflowStyle = 'scrollbar'; // needed for WinJS apps - document.body.appendChild(outer); + const outer = document.createElement("div") + outer.style.visibility = "hidden" + outer.style.overflow = "scroll" // forcing scrollbar to appear + outer.style.msOverflowStyle = "scrollbar" // needed for WinJS apps + document.body.appendChild(outer) // Creating inner element and placing it in the container - const inner = document.createElement('div'); - outer.appendChild(inner); + const inner = document.createElement("div") + outer.appendChild(inner) // Calculating difference between container's full width and the child width - const scrollbarWidth = (outer.offsetWidth - inner.offsetWidth); + const scrollbarWidth = outer.offsetWidth - inner.offsetWidth // Removing temporary elements from the DOM - outer.parentNode.removeChild(outer); + outer.parentNode.removeChild(outer) - return scrollbarWidth; + return scrollbarWidth } // Is scrollbar visible const isScrollbarVisible = () => { - return document.body.scrollHeight > screen.height; + return document.body.scrollHeight > screen.height } diff --git a/docs/js/src/color-picker.js b/docs/js/src/color-picker.js index 4a8fb8674..17db02f7d 100644 --- a/docs/js/src/color-picker.js +++ b/docs/js/src/color-picker.js @@ -6,107 +6,112 @@ */ export const colorPicker = { - // Config colors: null, buttonsTarget: '#customization article[data-theme="generated"]', - selectorButton: '#customization button[data-color]', - selectorSection: '#customization', + selectorButton: "#customization button[data-color]", + selectorSection: "#customization", buttons: null, generatedStyles: null, // Init init() { - this.generateButtons(); - this.setActiveButton('pink'); - this.generateTheme('pink'); + this.generateButtons() + this.setActiveButton("pink") + this.generateTheme("pink") }, // Generate Buttons generateButtons() { // Init - let innerButtons = ''; - let innerStyles = ''; + let innerButtons = "" + let innerStyles = "" // Loop colors for (const color in this.colors) { // Buttons - innerButtons += ``; + innerButtons += `` // Styles innerStyles += ` button[data-color="${color}"] { - background-color: ${this.colors[color]['600']}; + background-color: ${this.colors[color]["600"]}; } [data-theme="light"] button[data-color="${color}"]:hover, [data-theme="light"] button[data-color="${color}"]:active, [data-theme="light"] button[data-color="${color}"]:focus { - background-color: ${this.colors[color]['700']}; ' + background-color: ${this.colors[color]["700"]}; ' } [data-theme="dark"] button[data-color="${color}"]:hover, [data-theme="dark"] button[data-color="${color}"]:active, [data-theme="dark"] button[data-color="${color}"]:focus { - background-color: ${this.colors[color]['500']}; - }`; + background-color: ${this.colors[color]["500"]}; + }` } // Insert buttons - let containerButtons = document.createElement('FIGURE'); - containerButtons.innerHTML = innerButtons; - document.querySelector(this.buttonsTarget).before(containerButtons); + let containerButtons = document.createElement("FIGURE") + containerButtons.innerHTML = innerButtons + document.querySelector(this.buttonsTarget).before(containerButtons) // Buttons listeners - this.buttons = document.querySelectorAll(this.selectorButton); - this.buttons.forEach( button => { - button.addEventListener('click', event => { - let color = event.target.getAttribute('data-color'); - this.setActiveButton(color); - this.generateTheme(color); - }, false); - }); + this.buttons = document.querySelectorAll(this.selectorButton) + this.buttons.forEach(button => { + button.addEventListener( + "click", + event => { + let color = event.target.getAttribute("data-color") + this.setActiveButton(color) + this.generateTheme(color) + }, + false + ) + }) // Insert CSS Styles - let containerStyles = document.createElement('STYLE'); - containerStyles.setAttribute('title', 'color-picker'); - this.generatedStyles = this.minifyCSS(innerStyles); - containerStyles.innerHTML = this.generatedStyles; - document.querySelector('head').appendChild(containerStyles); + let containerStyles = document.createElement("STYLE") + containerStyles.setAttribute("title", "color-picker") + this.generatedStyles = this.minifyCSS(innerStyles) + containerStyles.innerHTML = this.generatedStyles + document.querySelector("head").appendChild(containerStyles) }, // Set active button setActiveButton(color) { // Remove all active states - this.buttons.forEach( button => { - button.removeAttribute('class'); - }); + this.buttons.forEach(button => { + button.removeAttribute("class") + }) // Set active state - let buttonPicked = document.querySelector(this.selectorButton + '[data-color="' + color + '"]'); - buttonPicked.setAttribute('class', 'picked'); + let buttonPicked = document.querySelector( + this.selectorButton + '[data-color="' + color + '"]' + ) + buttonPicked.setAttribute("class", "picked") }, // Set active button generateTheme(color) { - let name = color; - let data = this.colors[color]; + let name = color + let data = this.colors[color] // 1. Update name and colors in demo code let swaps = { - '.name': name.charAt(0).toUpperCase() + name.substring(1) + ' ', - '.c500': data[500], - '.c600': data[600], - '.c700': data[700], - '.c600-outline-light': this.hexToRgbA(data[600], 0.125), - '.c600-outline-dark': this.hexToRgbA(data[600], 0.25), - '.inverse': data['inverse'], - }; - - Object.keys(swaps).forEach( swap => { - let targets = document.querySelectorAll(this.selectorSection + ' ' + swap); - targets.forEach( target => { - target.innerHTML = swaps[swap]; - }); - }); + ".name": name.charAt(0).toUpperCase() + name.substring(1) + " ", + ".c500": data[500], + ".c600": data[600], + ".c700": data[700], + ".c600-outline-light": this.hexToRgbA(data[600], 0.125), + ".c600-outline-dark": this.hexToRgbA(data[600], 0.25), + ".inverse": data["inverse"], + } + + Object.keys(swaps).forEach(swap => { + let targets = document.querySelectorAll(this.selectorSection + " " + swap) + targets.forEach(target => { + target.innerHTML = swaps[swap] + }) + }) // 2. Update CSS Styles const innerStyles = ` @@ -115,7 +120,7 @@ export const colorPicker = { --primary: ${data[600]}; --primary-hover: ${data[700]}; --primary-focus: ${this.hexToRgbA(data[600], 0.125)}; - --primary-inverse: ${data['inverse']}; + --primary-inverse: ${data["inverse"]}; } @media only screen and (prefers-color-scheme: dark) { :root:not([data-theme="light"]) [data-theme="generated"] { @@ -123,7 +128,7 @@ export const colorPicker = { --primary: ${data[600]}; --primary-hover: ${data[500]}; --primary-focus: ${this.hexToRgbA(data[600], 0.25)}; - --primary-inverse: ${data['inverse']}; + --primary-inverse: ${data["inverse"]}; } } [data-theme="dark"] [data-theme="generated"] { @@ -131,43 +136,43 @@ export const colorPicker = { --primary: ${data[600]}; --primary-hover: ${data[500]}; --primary-focus: ${this.hexToRgbA(data[600], 0.25)}; - --primary-inverse: ${data['inverse']}; + --primary-inverse: ${data["inverse"]}; } [data-theme="generated"] { --form-element-active-border-color: var(--primary); --form-element-focus-color: var(--primary-focus); --switch-color: var(--primary-inverse); --switch-checked-background-color: var(--primary); - }`; + }` document.querySelector('style[title="color-picker"]').innerHTML = - this.generatedStyles + this.minifyCSS(innerStyles); + this.generatedStyles + this.minifyCSS(innerStyles) }, // Minify CSS minifyCSS(css) { - return css.replace(/^ +/gm, ''); + return css.replace(/^ +/gm, "") }, // Hexadecimal to Rgba hexToRgbA(hex, alpha) { - let c; + let c if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) { - c = hex.substring(1).split(''); + c = hex.substring(1).split("") if (c.length == 3) { - c = [c[0], c[0], c[1], c[1], c[2], c[2]]; + c = [c[0], c[0], c[1], c[1], c[2], c[2]] } - c = '0x' + c.join(''); + c = "0x" + c.join("") return ( - 'rgba(' + - [(c >> 16) & 255, (c >> 8) & 255, c & 255].join(', ') + - ', ' + + "rgba(" + + [(c >> 16) & 255, (c >> 8) & 255, c & 255].join(", ") + + ", " + alpha + - ')' - ); + ")" + ) } - throw new Error('Bad Hex'); + throw new Error("Bad Hex") }, -}; +} -export default colorPicker; +export default colorPicker diff --git a/docs/js/src/material-design-colors.js b/docs/js/src/material-design-colors.js index 7cb8e503f..40a456219 100644 --- a/docs/js/src/material-design-colors.js +++ b/docs/js/src/material-design-colors.js @@ -1,303 +1,303 @@ // Source: https://material.io/design/color/the-color-system.html export const materialDesignColors = { red: { - 50: '#ffebee', - 100: '#ffcdd2', - 200: '#ef9a9a', - 300: '#e57373', - 400: '#ef5350', - 500: '#f44336', - 600: '#e53935', - 700: '#d32f2f', - 800: '#c62828', - 900: '#b71c1c', - a100: '#ff8a80', - a200: '#ff5252', - a400: '#ff1744', - a700: '#d50000', - inverse: '#FFF', + 50: "#ffebee", + 100: "#ffcdd2", + 200: "#ef9a9a", + 300: "#e57373", + 400: "#ef5350", + 500: "#f44336", + 600: "#e53935", + 700: "#d32f2f", + 800: "#c62828", + 900: "#b71c1c", + a100: "#ff8a80", + a200: "#ff5252", + a400: "#ff1744", + a700: "#d50000", + inverse: "#FFF", }, pink: { - 50: '#fce4ec', - 100: '#f8bbd0', - 200: '#f48fb1', - 300: '#f06292', - 400: '#ec407a', - 500: '#e91e63', - 600: '#d81b60', - 700: '#c2185b', - 800: '#ad1457', - 900: '#880e4f', - a100: '#ff80ab', - a200: '#ff4081', - a400: '#f50057', - a700: '#c51162', - inverse: '#FFF', + 50: "#fce4ec", + 100: "#f8bbd0", + 200: "#f48fb1", + 300: "#f06292", + 400: "#ec407a", + 500: "#e91e63", + 600: "#d81b60", + 700: "#c2185b", + 800: "#ad1457", + 900: "#880e4f", + a100: "#ff80ab", + a200: "#ff4081", + a400: "#f50057", + a700: "#c51162", + inverse: "#FFF", }, purple: { - 50: '#f3e5f5', - 100: '#e1bee7', - 200: '#ce93d8', - 300: '#ba68c8', - 400: '#ab47bc', - 500: '#9c27b0', - 600: '#8e24aa', - 700: '#7b1fa2', - 800: '#6a1b9a', - 900: '#4a148c', - a100: '#ea80fc', - a200: '#e040fb', - a400: '#d500f9', - a700: '#aa00ff', - inverse: '#FFF', + 50: "#f3e5f5", + 100: "#e1bee7", + 200: "#ce93d8", + 300: "#ba68c8", + 400: "#ab47bc", + 500: "#9c27b0", + 600: "#8e24aa", + 700: "#7b1fa2", + 800: "#6a1b9a", + 900: "#4a148c", + a100: "#ea80fc", + a200: "#e040fb", + a400: "#d500f9", + a700: "#aa00ff", + inverse: "#FFF", }, - 'deep-purple': { - 50: '#ede7f6', - 100: '#d1c4e9', - 200: '#b39ddb', - 300: '#9575cd', - 400: '#7e57c2', - 500: '#673ab7', - 600: '#5e35b1', - 700: '#512da8', - 800: '#4527a0', - 900: '#311b92', - a100: '#b388ff', - a200: '#7c4dff', - a400: '#651fff', - a700: '#6200ea', - inverse: '#FFF', + "deep-purple": { + 50: "#ede7f6", + 100: "#d1c4e9", + 200: "#b39ddb", + 300: "#9575cd", + 400: "#7e57c2", + 500: "#673ab7", + 600: "#5e35b1", + 700: "#512da8", + 800: "#4527a0", + 900: "#311b92", + a100: "#b388ff", + a200: "#7c4dff", + a400: "#651fff", + a700: "#6200ea", + inverse: "#FFF", }, indigo: { - 50: '#e8eaf6', - 100: '#c5cae9', - 200: '#9fa8da', - 300: '#7986cb', - 400: '#5c6bc0', - 500: '#3f51b5', - 600: '#3949ab', - 700: '#303f9f', - 800: '#283593', - 900: '#1a237e', - a100: '#8c9eff', - a200: '#536dfe', - a400: '#3d5afe', - a700: '#304ffe', - inverse: '#FFF', + 50: "#e8eaf6", + 100: "#c5cae9", + 200: "#9fa8da", + 300: "#7986cb", + 400: "#5c6bc0", + 500: "#3f51b5", + 600: "#3949ab", + 700: "#303f9f", + 800: "#283593", + 900: "#1a237e", + a100: "#8c9eff", + a200: "#536dfe", + a400: "#3d5afe", + a700: "#304ffe", + inverse: "#FFF", }, blue: { - 50: '#e3f2fd', - 100: '#bbdefb', - 200: '#90caf9', - 300: '#64b5f6', - 400: '#42a5f5', - 500: '#2196f3', - 600: '#1e88e5', - 700: '#1976d2', - 800: '#1565c0', - 900: '#0d47a1', - a100: '#82b1ff', - a200: '#448aff', - a400: '#2979ff', - a700: '#2962ff', - inverse: '#FFF', + 50: "#e3f2fd", + 100: "#bbdefb", + 200: "#90caf9", + 300: "#64b5f6", + 400: "#42a5f5", + 500: "#2196f3", + 600: "#1e88e5", + 700: "#1976d2", + 800: "#1565c0", + 900: "#0d47a1", + a100: "#82b1ff", + a200: "#448aff", + a400: "#2979ff", + a700: "#2962ff", + inverse: "#FFF", }, - 'light-blue': { - 50: '#e1f5fe', - 100: '#b3e5fc', - 200: '#81d4fa', - 300: '#4fc3f7', - 400: '#29b6f6', - 500: '#03a9f4', - 600: '#039be5', - 700: '#0288d1', - 800: '#0277bd', - 900: '#01579b', - a100: '#80d8ff', - a200: '#40c4ff', - a400: '#00b0ff', - a700: '#0091ea', - inverse: '#FFF', + "light-blue": { + 50: "#e1f5fe", + 100: "#b3e5fc", + 200: "#81d4fa", + 300: "#4fc3f7", + 400: "#29b6f6", + 500: "#03a9f4", + 600: "#039be5", + 700: "#0288d1", + 800: "#0277bd", + 900: "#01579b", + a100: "#80d8ff", + a200: "#40c4ff", + a400: "#00b0ff", + a700: "#0091ea", + inverse: "#FFF", }, cyan: { - 50: '#e0f7fa', - 100: '#b2ebf2', - 200: '#80deea', - 300: '#4dd0e1', - 400: '#26c6da', - 500: '#00bcd4', - 600: '#00acc1', - 700: '#0097a7', - 800: '#00838f', - 900: '#006064', - a100: '#84ffff', - a200: '#18ffff', - a400: '#00e5ff', - a700: '#00b8d4', - inverse: '#FFF', + 50: "#e0f7fa", + 100: "#b2ebf2", + 200: "#80deea", + 300: "#4dd0e1", + 400: "#26c6da", + 500: "#00bcd4", + 600: "#00acc1", + 700: "#0097a7", + 800: "#00838f", + 900: "#006064", + a100: "#84ffff", + a200: "#18ffff", + a400: "#00e5ff", + a700: "#00b8d4", + inverse: "#FFF", }, teal: { - 50: '#e0f2f1', - 100: '#b2dfdb', - 200: '#80cbc4', - 300: '#4db6ac', - 400: '#26a69a', - 500: '#009688', - 600: '#00897b', - 700: '#00796b', - 800: '#00695c', - 900: '#004d40', - a100: '#a7ffeb', - a200: '#64ffda', - a400: '#1de9b6', - a700: '#00bfa5', - inverse: '#FFF', + 50: "#e0f2f1", + 100: "#b2dfdb", + 200: "#80cbc4", + 300: "#4db6ac", + 400: "#26a69a", + 500: "#009688", + 600: "#00897b", + 700: "#00796b", + 800: "#00695c", + 900: "#004d40", + a100: "#a7ffeb", + a200: "#64ffda", + a400: "#1de9b6", + a700: "#00bfa5", + inverse: "#FFF", }, green: { - 50: '#e8f5e9', - 100: '#c8e6c9', - 200: '#a5d6a7', - 300: '#81c784', - 400: '#66bb6a', - 500: '#4caf50', - 600: '#43a047', - 700: '#388e3c', - 800: '#2e7d32', - 900: '#1b5e20', - a100: '#b9f6ca', - a200: '#69f0ae', - a400: '#00e676', - a700: '#00c853', - inverse: '#FFF', + 50: "#e8f5e9", + 100: "#c8e6c9", + 200: "#a5d6a7", + 300: "#81c784", + 400: "#66bb6a", + 500: "#4caf50", + 600: "#43a047", + 700: "#388e3c", + 800: "#2e7d32", + 900: "#1b5e20", + a100: "#b9f6ca", + a200: "#69f0ae", + a400: "#00e676", + a700: "#00c853", + inverse: "#FFF", }, - 'light-green': { - 50: '#f1f8e9', - 100: '#dcedc8', - 200: '#c5e1a5', - 300: '#aed581', - 400: '#9ccc65', - 500: '#8bc34a', - 600: '#7cb342', - 700: '#689f38', - 800: '#558b2f', - 900: '#33691e', - a100: '#ccff90', - a200: '#b2ff59', - a400: '#76ff03', - a700: '#64dd17', - inverse: '#FFF', + "light-green": { + 50: "#f1f8e9", + 100: "#dcedc8", + 200: "#c5e1a5", + 300: "#aed581", + 400: "#9ccc65", + 500: "#8bc34a", + 600: "#7cb342", + 700: "#689f38", + 800: "#558b2f", + 900: "#33691e", + a100: "#ccff90", + a200: "#b2ff59", + a400: "#76ff03", + a700: "#64dd17", + inverse: "#FFF", }, lime: { - 50: '#f9fbe7', - 100: '#f0f4c3', - 200: '#e6ee9c', - 300: '#dce775', - 400: '#d4e157', - 500: '#cddc39', - 600: '#c0ca33', - 700: '#afb42b', - 800: '#9e9d24', - 900: '#827717', - a100: '#f4ff81', - a200: '#eeff41', - a400: '#c6ff00', - a700: '#aeea00', - inverse: 'rgba(0, 0, 0, 0.75)', + 50: "#f9fbe7", + 100: "#f0f4c3", + 200: "#e6ee9c", + 300: "#dce775", + 400: "#d4e157", + 500: "#cddc39", + 600: "#c0ca33", + 700: "#afb42b", + 800: "#9e9d24", + 900: "#827717", + a100: "#f4ff81", + a200: "#eeff41", + a400: "#c6ff00", + a700: "#aeea00", + inverse: "rgba(0, 0, 0, 0.75)", }, yellow: { - 50: '#fffde7', - 100: '#fff9c4', - 200: '#fff59d', - 300: '#fff176', - 400: '#ffee58', - 500: '#ffeb3b', - 600: '#fdd835', - 700: '#fbc02d', - 800: '#f9a825', - 900: '#f57f17', - a100: '#ffff8d', - a200: '#ffff00', - a400: '#ffea00', - a700: '#ffd600', - inverse: 'rgba(0, 0, 0, 0.75)', + 50: "#fffde7", + 100: "#fff9c4", + 200: "#fff59d", + 300: "#fff176", + 400: "#ffee58", + 500: "#ffeb3b", + 600: "#fdd835", + 700: "#fbc02d", + 800: "#f9a825", + 900: "#f57f17", + a100: "#ffff8d", + a200: "#ffff00", + a400: "#ffea00", + a700: "#ffd600", + inverse: "rgba(0, 0, 0, 0.75)", }, amber: { - 50: '#fff8e1', - 100: '#ffecb3', - 200: '#ffe082', - 300: '#ffd54f', - 400: '#ffca28', - 500: '#ffc107', - 600: '#ffb300', - 700: '#ffa000', - 800: '#ff8f00', - 900: '#ff6f00', - a100: '#ffe57f', - a200: '#ffd740', - a400: '#ffc400', - a700: '#ffab00', - inverse: 'rgba(0, 0, 0, 0.75)', + 50: "#fff8e1", + 100: "#ffecb3", + 200: "#ffe082", + 300: "#ffd54f", + 400: "#ffca28", + 500: "#ffc107", + 600: "#ffb300", + 700: "#ffa000", + 800: "#ff8f00", + 900: "#ff6f00", + a100: "#ffe57f", + a200: "#ffd740", + a400: "#ffc400", + a700: "#ffab00", + inverse: "rgba(0, 0, 0, 0.75)", }, orange: { - 50: '#fff3e0', - 100: '#ffe0b2', - 200: '#ffcc80', - 300: '#ffb74d', - 400: '#ffa726', - 500: '#ff9800', - 600: '#fb8c00', - 700: '#f57c00', - 800: '#ef6c00', - 900: '#e65100', - a100: '#ffd180', - a200: '#ffab40', - a400: '#ff9100', - a700: '#ff6d00', - inverse: '#FFF', + 50: "#fff3e0", + 100: "#ffe0b2", + 200: "#ffcc80", + 300: "#ffb74d", + 400: "#ffa726", + 500: "#ff9800", + 600: "#fb8c00", + 700: "#f57c00", + 800: "#ef6c00", + 900: "#e65100", + a100: "#ffd180", + a200: "#ffab40", + a400: "#ff9100", + a700: "#ff6d00", + inverse: "#FFF", }, - 'deep-orange': { - 50: '#fbe9e7', - 100: '#ffccbc', - 200: '#ffab91', - 300: '#ff8a65', - 400: '#ff7043', - 500: '#ff5722', - 600: '#f4511e', - 700: '#e64a19', - 800: '#d84315', - 900: '#bf360c', - a100: '#ff9e80', - a200: '#ff6e40', - a400: '#ff3d00', - a700: '#dd2c00', - inverse: '#FFF', + "deep-orange": { + 50: "#fbe9e7", + 100: "#ffccbc", + 200: "#ffab91", + 300: "#ff8a65", + 400: "#ff7043", + 500: "#ff5722", + 600: "#f4511e", + 700: "#e64a19", + 800: "#d84315", + 900: "#bf360c", + a100: "#ff9e80", + a200: "#ff6e40", + a400: "#ff3d00", + a700: "#dd2c00", + inverse: "#FFF", }, grey: { - 50: '#fafafa', - 100: '#f5f5f5', - 200: '#eeeeee', - 300: '#e0e0e0', - 400: '#bdbdbd', - 500: '#9e9e9e', - 600: '#757575', - 700: '#616161', - 800: '#424242', - 900: '#212121', - inverse: '#FFF', + 50: "#fafafa", + 100: "#f5f5f5", + 200: "#eeeeee", + 300: "#e0e0e0", + 400: "#bdbdbd", + 500: "#9e9e9e", + 600: "#757575", + 700: "#616161", + 800: "#424242", + 900: "#212121", + inverse: "#FFF", }, - 'blue-grey': { - 50: '#eceff1', - 100: '#cfd8dc', - 200: '#b0bec5', - 300: '#90a4ae', - 400: '#78909c', - 500: '#607d8b', - 600: '#546e7a', - 700: '#455a64', - 800: '#37474f', - 900: '#263238', - inverse: '#FFF', + "blue-grey": { + 50: "#eceff1", + 100: "#cfd8dc", + 200: "#b0bec5", + 300: "#90a4ae", + 400: "#78909c", + 500: "#607d8b", + 600: "#546e7a", + 700: "#455a64", + 800: "#37474f", + 900: "#263238", + inverse: "#FFF", }, -}; +} -export default materialDesignColors; +export default materialDesignColors diff --git a/docs/js/src/theme-switcher.js b/docs/js/src/theme-switcher.js index ed12aae58..8f70cba4e 100644 --- a/docs/js/src/theme-switcher.js +++ b/docs/js/src/theme-switcher.js @@ -6,90 +6,96 @@ */ export const themeSwitcher = { - // Config - _scheme: 'auto', + _scheme: "auto", change: { - light: 'Turn on dark mode', - dark: 'Turn off dark mode', + light: "Turn on dark mode", + dark: "Turn off dark mode", }, - buttonsTarget: '.theme-switcher', - localStorageKey: 'picoPreferredColorScheme', + buttonsTarget: ".theme-switcher", + localStorageKey: "picoPreferredColorScheme", // Init init() { - this.scheme = this.schemeFromLocalStorage; - this.initSwitchers(); + this.scheme = this.schemeFromLocalStorage + this.initSwitchers() }, // Get color scheme from local storage get schemeFromLocalStorage() { - if (typeof window.localStorage !== 'undefined') { + if (typeof window.localStorage !== "undefined") { if (window.localStorage.getItem(this.localStorageKey) !== null) { - return window.localStorage.getItem(this.localStorageKey); + return window.localStorage.getItem(this.localStorageKey) } } - return this._scheme; + return this._scheme }, // Preferred color scheme get preferredColorScheme() { - return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + return window.matchMedia("(prefers-color-scheme: dark)").matches + ? "dark" + : "light" }, // Init switchers initSwitchers() { - const buttons = document.querySelectorAll(this.buttonsTarget); + const buttons = document.querySelectorAll(this.buttonsTarget) buttons.forEach(button => { - button.addEventListener('click', () => { - this.scheme == 'dark' ? this.scheme = 'light' : this.scheme = 'dark'; - }, false); - }); + button.addEventListener( + "click", + () => { + this.scheme == "dark" + ? (this.scheme = "light") + : (this.scheme = "dark") + }, + false + ) + }) }, // Add new button addButton(config) { - let button = document.createElement(config.tag); - button.className = config.class; - document.querySelector(config.target).appendChild(button); + let button = document.createElement(config.tag) + button.className = config.class + document.querySelector(config.target).appendChild(button) }, // Set scheme set scheme(scheme) { - if (scheme == 'auto') { - this.preferredColorScheme == 'dark' ? this._scheme = 'dark' : this._scheme = 'light'; + if (scheme == "auto") { + this.preferredColorScheme == "dark" + ? (this._scheme = "dark") + : (this._scheme = "light") + } else if (scheme == "dark" || scheme == "light") { + this._scheme = scheme } - else if (scheme == 'dark' || scheme == 'light') { - this._scheme = scheme; - } - this.applyScheme(); - this.schemeToLocalStorage(); + this.applyScheme() + this.schemeToLocalStorage() }, // Get scheme get scheme() { - return this._scheme; + return this._scheme }, // Apply scheme applyScheme() { - document.querySelector('html').setAttribute('data-theme', this.scheme); - const buttons = document.querySelectorAll(this.buttonsTarget); - buttons.forEach( - button => { - const text = this.scheme == 'dark' ? this.change.dark : this.change.light; - button.innerHTML = text; - button.setAttribute('aria-label', text.replace(/<[^>]*>?/gm, '')); - } - ); + document.querySelector("html").setAttribute("data-theme", this.scheme) + const buttons = document.querySelectorAll(this.buttonsTarget) + buttons.forEach(button => { + const text = this.scheme == "dark" ? this.change.dark : this.change.light + button.innerHTML = text + button.setAttribute("aria-label", text.replace(/<[^>]*>?/gm, "")) + }) }, // Store scheme to local storage schemeToLocalStorage() { - if (typeof window.localStorage !== 'undefined') { - window.localStorage.setItem(this.localStorageKey, this.scheme); + if (typeof window.localStorage !== "undefined") { + window.localStorage.setItem(this.localStorageKey, this.scheme) } }, -}; +} -export default themeSwitcher; +export default themeSwitcher diff --git a/docs/js/src/toggle-navigation.js b/docs/js/src/toggle-navigation.js index 97341919b..a16ad7b96 100644 --- a/docs/js/src/toggle-navigation.js +++ b/docs/js/src/toggle-navigation.js @@ -6,11 +6,10 @@ */ export const toggleNavigation = { - // Config - _state: 'closed-on-mobile', - toggleLink: document.getElementById('toggle-docs-navigation'), - nav: document.querySelector('main > aside > nav'), + _state: "closed-on-mobile", + toggleLink: document.getElementById("toggle-docs-navigation"), + nav: document.querySelector("main > aside > nav"), // Init init() { @@ -18,25 +17,29 @@ export const toggleNavigation = { }, onToggleClick() { - this.toggleLink.addEventListener('click', event => { - event.preventDefault(); - this.state == 'closed-on-mobile' - ? this.state = 'open' - : this.state = 'closed-on-mobile'; - this.nav.removeAttribute('class'); - this.nav.classList.add(this.state); - }, false); + this.toggleLink.addEventListener( + "click", + event => { + event.preventDefault() + this.state == "closed-on-mobile" + ? (this.state = "open") + : (this.state = "closed-on-mobile") + this.nav.removeAttribute("class") + this.nav.classList.add(this.state) + }, + false + ) }, // Get state get state() { - return this._state; + return this._state }, // Set state set state(state) { - this._state = state; + this._state = state }, -}; +} -export default toggleNavigation; \ No newline at end of file +export default toggleNavigation diff --git a/docs/loading.html b/docs/loading.html index eaea7cdc5..35364f611 100644 --- a/docs/loading.html +++ b/docs/loading.html @@ -1,2 +1,3 @@ -Loading • Pico CSS

Loading

aria-busy="true" enable a loading indicator.

<button aria-busy="true">Please wait…</button>
-<button aria-busy="true" class="secondary"></button>

It can be applied to any block:

<article aria-busy="true"></article>

Or any text element:

\ No newline at end of file +Loading • Pico CSS

Loading

aria-busy="true" enable a loading indicator.

<button aria-busy="true">Please wait…</button>
+<button aria-busy="true" class="secondary"></button>

It can be applied to any block:

<article aria-busy="true"></article>

Or any text element:

\ No newline at end of file diff --git a/docs/modal.html b/docs/modal.html index 868fa66a3..09e41b3c9 100644 --- a/docs/modal.html +++ b/docs/modal.html @@ -1,4 +1,5 @@ -Modal • Pico CSS

Confirm your action!

Cras sit amet maximus risus. Pellentesque sodales odio sit amet augue finibus pellentesque. Nullam finibus risus non semper euismod.

\ No newline at end of file diff --git a/docs/navs.html b/docs/navs.html index 2ffb4bf0d..ffd888bc1 100644 --- a/docs/navs.html +++ b/docs/navs.html @@ -1,4 +1,5 @@ -Navs • Pico CSS
\ No newline at end of file diff --git a/docs/progress.html b/docs/progress.html index 5b922b119..9d3d79959 100644 --- a/docs/progress.html +++ b/docs/progress.html @@ -1 +1,2 @@ -Progress • Pico CSS

Progress

Progress bar element in pure HTML, without JavaScript.

<progress value="25" max="100"></progress>

A progress bar without a value attribute is indeterminate.

<progress></progress>
\ No newline at end of file +Progress • Pico CSS

Progress

Progress bar element in pure HTML, without JavaScript.

<progress value="25" max="100"></progress>

A progress bar without a value attribute is indeterminate.

<progress></progress>
\ No newline at end of file diff --git a/docs/rtl.html b/docs/rtl.html index 0fc8238dd..6f62f1662 100644 --- a/docs/rtl.html +++ b/docs/rtl.html @@ -1,4 +1,5 @@ -RTL (Right-To-Left) • Pico CSS

RTL

Support for right-to-left text in Pico.

To enable RTL in Pico you need to set dir="rtl"on the <html> element (example).

<!doctype html>
+RTL (Right-To-Left) • Pico CSS

RTL

Support for right-to-left text in Pico.

To enable RTL in Pico you need to set dir="rtl"on the <html> element (example).

<!doctype html>
 <html dir="rtl" lang="ar">
   ...
-</html>

ℹ️ The RTL feature is still experimental and will probably evolve.


Code licensed MIT

\ No newline at end of file +</html>

ℹ️ The RTL feature is still experimental and will probably evolve.

\ No newline at end of file diff --git a/docs/scroller.html b/docs/scroller.html index 7ed195857..86ba9b677 100644 --- a/docs/scroller.html +++ b/docs/scroller.html @@ -1,5 +1,6 @@ -Horizontal scroller • Pico CSS

Horizontal scroller

<figure> acts as a container to make any content scrollable horizontally.

Useful to have responsive <table>

#HeadingHeadingHeadingHeadingHeadingHeadingHeadingHeadingHeading
1CellCellCellCellCellCellCellCellCell
2CellCellCellCellCellCellCellCellCell
3CellCellCellCellCellCellCellCellCell
<figure>
+Horizontal scroller • Pico CSS

Horizontal scroller

<figure> acts as a container to make any content scrollable horizontally.

Useful to have responsive <table>

#HeadingHeadingHeadingHeadingHeadingHeadingHeadingHeadingHeading
1CellCellCellCellCellCellCellCellCell
2CellCellCellCellCellCellCellCellCell
3CellCellCellCellCellCellCellCellCell
<figure>
   <table>
     …
   </table>
-</figure>

Code licensed MIT

\ No newline at end of file +</figure>
\ No newline at end of file diff --git a/docs/src/_footer.html b/docs/src/_footer.html index 12d3be151..05b84a010 100644 --- a/docs/src/_footer.html +++ b/docs/src/_footer.html @@ -1,4 +1,13 @@ \ No newline at end of file +
+

+ Code licensed + MIT +

+ diff --git a/docs/src/_head.html b/docs/src/_head.html index a60045474..797dbd72f 100644 --- a/docs/src/_head.html +++ b/docs/src/_head.html @@ -1,8 +1,8 @@ - - + + ${props.title} • Pico CSS - - - - - \ No newline at end of file + + + + + diff --git a/docs/src/_nav.html b/docs/src/_nav.html index 04e4b497e..a9e99d734 100644 --- a/docs/src/_nav.html +++ b/docs/src/_nav.html @@ -2,22 +2,50 @@ - \ No newline at end of file + diff --git a/docs/src/_sidebar.html b/docs/src/_sidebar.html index dfdf4395a..a4dc23b41 100644 --- a/docs/src/_sidebar.html +++ b/docs/src/_sidebar.html @@ -1,13 +1,31 @@ diff --git a/docs/src/accordions.html b/docs/src/accordions.html index 48dc49b8f..c9049889a 100644 --- a/docs/src/accordions.html +++ b/docs/src/accordions.html @@ -1,42 +1,53 @@ - + - ${require('./_head.html') - title=`Accordions` - description=`Toggle sections of content in pure HTML, without JavaScript.` - canonical=`accordions.html` - } + ${require('./_head.html') title=`Accordions` description=`Toggle sections of + content in pure HTML, without JavaScript.` canonical=`accordions.html` } ${require('./_nav.html')} - +
${require('./_sidebar.html') active=`accordions-link`} - +

Accordions

-

Toggle sections of content in pure HTML, without JavaScript.

+

+ Toggle sections of content in pure HTML, without JavaScript. +

Accordion 1 -

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque urna diam, tincidunt nec porta sed, auctor id velit. Etiam venenatis nisl ut orci consequat, vitae tempus quam commodo. Nulla non mauris ipsum. Aliquam eu posuere orci. Nulla convallis lectus rutrum quam hendrerit, in facilisis elit sollicitudin. Mauris pulvinar pulvinar mi, dictum tristique elit auctor quis. Maecenas ac ipsum ultrices, porta turpis sit amet, congue turpis.

+

+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. + Pellentesque urna diam, tincidunt nec porta sed, auctor id + velit. Etiam venenatis nisl ut orci consequat, vitae tempus quam + commodo. Nulla non mauris ipsum. Aliquam eu posuere orci. Nulla + convallis lectus rutrum quam hendrerit, in facilisis elit + sollicitudin. Mauris pulvinar pulvinar mi, dictum tristique elit + auctor quis. Maecenas ac ipsum ultrices, porta turpis sit amet, + congue turpis. +

Accordion 2
  • Vestibulum id elit quis massa interdum sodales.
  • -
  • Nunc quis eros vel odio pretium tincidunt nec quis neque.
  • +
  • + Nunc quis eros vel odio pretium tincidunt nec quis neque. +
  • Quisque sed eros non eros ornare elementum.
  • -
  • Cras sed libero aliquet, porta dolor quis, dapibus ipsum.
  • +
  • + Cras sed libero aliquet, porta dolor quis, dapibus ipsum. +
- -
<details>
+              
<details>
   <summary>Accordion 1</summary>
   <p>…</p>
 </details>
@@ -48,26 +59,39 @@ 

Toggle sections of content in pure HTML, without JavaScript.

<li>…</li> </ul> </details>
-
-

role="button" can be used to turn <summary> into a button.

+

+ role="button" can be used to turn + <summary> into a button. +

Accordion 1 -

Aenean vestibulum nunc at libero congue, eu pretium nulla viverra. Fusce sed ex at est egestas vehicula. Integer sit amet lectus mi. Duis ut viverra mauris, at laoreet enim.

+

+ Aenean vestibulum nunc at libero congue, eu pretium nulla + viverra. Fusce sed ex at est egestas vehicula. Integer sit amet + lectus mi. Duis ut viverra mauris, at laoreet enim. +

Accordion 2 -

Quisque porta dictum ipsum nec vestibulum. Suspendisse non mi ac tellus scelerisque egestas. Sed vel nisi laoreet, rhoncus urna quis, luctus risus. Donec vitae molestie felis.

+

+ Quisque porta dictum ipsum nec vestibulum. Suspendisse non mi ac + tellus scelerisque egestas. Sed vel nisi laoreet, rhoncus urna + quis, luctus risus. Donec vitae molestie felis. +

Accordion 3 -

Praesent quam ipsum, condimentum non augue at, porttitor interdum tellus. Curabitur ultrices consectetur leo, a placerat mauris malesuada et. In quis varius risus.

+

+ Praesent quam ipsum, condimentum non augue at, porttitor + interdum tellus. Curabitur ultrices consectetur leo, a placerat + mauris malesuada et. In quis varius risus. +

- -
<!-- Primary -->
+              
<!-- Primary -->
 <details>
   <summary role="button">Accordion 1</summary>
   <p>…</p>
@@ -83,14 +107,12 @@ 

Toggle sections of content in pure HTML, without JavaScript.

<details> <summary role="button" class="contrast">Accordion 3</summary> <p>…</p> -</details> - +</details>
${require('./_footer.html')} -
diff --git a/docs/src/buttons.html b/docs/src/buttons.html index 7b37c1822..e4b7180c0 100644 --- a/docs/src/buttons.html +++ b/docs/src/buttons.html @@ -1,75 +1,107 @@ - + - ${require('./_head.html') - title=`Buttons` - description=`The essential button in pure HTML, without .classes for the default style.` - canonical=`buttons.html` - } + ${require('./_head.html') title=`Buttons` description=`The essential button + in pure HTML, without .classes for the default style.` + canonical=`buttons.html` } ${require('./_nav.html')} - +
${require('./_sidebar.html') active=`buttons-link`} - +

Buttons

-

The essential button in pure HTML, without .classes for the default style.

+

+ The essential button in pure HTML, without + .classes for the default style. +

- +
- -
<button>Button</button>
+              
<button>Button</button>
 <input type="submit">
-
-

Buttons are width: 100%; by default. Use role="button" on an inline element if you need an inline button.

+

+ Buttons are width: 100%; by default. Use + role="button" on an inline element if you + need an inline button. +

Link Link
- -
<a href="#" role="button">Link</a>
+              
<a href="#" role="button">Link</a>
 <a href="#" role="button">Link</a>
-
-

Buttons come with .secondary and .contrast styles.

-

ℹ️ These classes are not available in the class-less version.

+

+ Buttons come with .secondary and + .contrast styles. +

+

+ ℹ️ These classes are not available in the + class-less version. +

- Secondary - Contrast + Secondary + Contrast
- -
<a href="#" role="button" class="secondary">Secondary</a>
+              
<a href="#" role="button" class="secondary">Secondary</a>
 <a href="#" role="button" class="contrast">Contrast</a>
-

And a classic .outline variant.

- Primary - Secondary - Contrast + Primary + Secondary + Contrast
- -
<a href="#" role="button" class="outline">Primary</a>
+              
<a href="#" role="button" class="outline">Primary</a>
 <a href="#" role="button" class="secondary outline">Secondary</a>
 <a href="#" role="button" class="contrast outline">Contrast</a>
-
${require('./_footer.html')} -
diff --git a/docs/src/cards.html b/docs/src/cards.html index d3861b73e..9d7f40588 100644 --- a/docs/src/cards.html +++ b/docs/src/cards.html @@ -1,46 +1,47 @@ - + - ${require('./_head.html') - title=`Cards` - description=`A flexible container with graceful spacings across devices and viewports.` - canonical=`cards.html` + ${require('./_head.html') title=`Cards` description=`A flexible container + with graceful spacings across devices and viewports.` canonical=`cards.html` } ${require('./_nav.html')} - +
${require('./_sidebar.html') active=`cards-link`} - +

Cards

-

A flexible container with graceful spacings across devices and viewports.

+

+ A flexible container with graceful spacings across devices and + viewports. +

-
- I'm a card! -
+
I'm a card!
<article>I'm a card!</article>
-

You can use <header> and footer <footer> inside <article>

+

+ You can use <header> and footer + <footer> inside + <article> +

Header
Body
Footer
-
<article>
+          
<article>
   <header>Header</header>
   Body
   <footer>Footer</footer>
 </article>
-
${require('./_footer.html')} -
diff --git a/docs/src/classless.html b/docs/src/classless.html index 6321a1a57..67b22656e 100644 --- a/docs/src/classless.html +++ b/docs/src/classless.html @@ -1,29 +1,38 @@ - + - ${require('./_head.html') - title=`Class-less version` - description=`For wild HTML purists, Pico provides a .classless version.` - canonical=`classless.html` - } + ${require('./_head.html') title=`Class-less version` description=`For wild + HTML purists, Pico provides a .classless version.` + canonical=`classless.html` } ${require('./_nav.html')} - +
${require('./_sidebar.html') active=`classless-link`} - +

Class-less version

For wild HTML purists!

-

Pico provides a .classless version (example).

-

In this version, <header>, <main>, and <footer> act as containers to define a centered or a fluid viewport.

+

+ Pico provides a .classless version (example). +

+

+ In this version, <header>, + <main>, and + <footer> act as + containers to define a centered or a + fluid viewport. +

-
// Containers
+          
// Containers
 body > header,
 body > main,
 body > footer {
@@ -32,24 +41,46 @@ 

For wild HTML purists!

Usage:

-

Use the default .classless version if you need centered viewports:

+

+ Use the default .classless version if you need centered + viewports: +

<link rel="stylesheet" href="css/pico.classless.min.css">
-

Or use the .fluid.classless version if you need a fluid container:

+

+ Or use the .fluid.classless version if you need a fluid + container: +

<link rel="stylesheet" href="css/pico.fluid.classless.min.css">
-

These .classless versions are also available on jsDelivr CDN:

+

+ These .classless versions are also available on + jsDelivr CDN: +

-
// Centered viewport
+          
// Centered viewport
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@1/css/pico.classless.min.css">
 
-
// Fluid viewport
+          
// Fluid viewport
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@1/css/pico.fluid.classless.min.css">
 
-

If you need to customize the default parent (<body>) for <header>, <main>, and <footer>, you can recompile Pico by defining another CSS selector.

-

Useful for React, Gatsby or Next.js.

+

+ If you need to customize the default parent + (<body>) for + <header>, + <main>, and + <footer>, you can recompile Pico by + defining another CSS selector. +

+

+ Useful for React, + Gatsby or + Next.js. +

-
/* Custom Class-less version for React */
+          
/* Custom Class-less version for React */
 
 // Set the root element
 $semantic-root-element: "#root";
@@ -63,20 +94,21 @@ 

For wild HTML purists!

// Import Pico @import "@picocss/pico/scss/pico";
-

The code above will compile Pico with the containers defined like this:

+

+ The code above will compile Pico with the containers defined like + this: +

-
// Containers
+          
// Containers
 #root > header,
 #root > main,
 #root > footer {
   
 }
 
-
${require('./_footer.html')} -
diff --git a/docs/src/containers.html b/docs/src/containers.html index 63dd3b76a..f83026b0d 100644 --- a/docs/src/containers.html +++ b/docs/src/containers.html @@ -1,34 +1,39 @@ - + - ${require('./_head.html') - title=`Containers` - description=`.container enable a centered viewport, .container-fluid enable a 100% layout.` - canonical=`containers.html` - } + ${require('./_head.html') title=`Containers` description=`.container enable + a centered viewport, .container-fluid enable a 100% layout.` + canonical=`containers.html` } ${require('./_nav.html')} - +
${require('./_sidebar.html') active=`containers-link`} - +

Containers

- .container enable a centered viewport.
- .container-fluid enable a 100% layout. + .container enable a centered viewport.
+ .container-fluid enable a + 100% layout.

-
<body>
+          
<body>
   <main class="container"></main>
 </body>
-

Pico uses the same breakpoints and viewports sizes as Bootstrap.

+

+ Pico uses the same breakpoints and viewports sizes as + Bootstrap. +

@@ -61,12 +66,20 @@

-

<header>, <main> and <footer> as direct children of <body> provide a responsive vertical padding

-

<section> provides a responsive margin-bottom to separate your sections.

+

+ <header>, + <main> and + <footer> as direct children of + <body> provide a responsive vertical + padding +

+

+ <section> provides a responsive + margin-bottom to separate your sections. +

${require('./_footer.html')} -
diff --git a/docs/src/customization.html b/docs/src/customization.html index c56913d52..23072dca5 100644 --- a/docs/src/customization.html +++ b/docs/src/customization.html @@ -1,24 +1,26 @@ - + - ${require('./_head.html') - title=`Customization` - description=`You can customize themes with SCSS, or you can edit the CSS variables. All Pico's styles and colors are set with CSS custom properties (variables).` - canonical=`customization.html` - } + ${require('./_head.html') title=`Customization` description=`You can + customize themes with SCSS, or you can edit the CSS variables. All Pico's + styles and colors are set with CSS custom properties (variables).` + canonical=`customization.html` } ${require('./_nav.html')} - +
${require('./_sidebar.html') active=`customization-link`} - +

Customization

-

You can customize themes with SCSS or, you can edit the CSS variables.

+

+ You can customize themes with SCSS or, you can edit the CSS + variables. +

Example: pick a color!

@@ -26,32 +28,60 @@

You can customize themes with SCSS or, you can edit the CSS variables.

Custom theme

- - - + + +
- -
// Simplified example
+              
// Simplified example
 :root {
   --primary: ;
 }
 
-

There are 2 ways to customize your version of Pico CSS:

Overriding CSS variables

-

All Pico's styles and colors are set with CSS custom properties (variables). Just override the CSS variables to customize your version of Pico.

+

+ All Pico's styles and colors are set with + CSS custom properties (variables). Just override the CSS + variables to customize your version of Pico. +

-
/* Light scheme (Default) */
+          
/* Light scheme (Default) */
 /* Can be forced with data-theme="light" */
 [data-theme="light"],
 :root:not([data-theme="dark"]) {
@@ -90,12 +120,22 @@ 

Overriding CSS variables

}
-

You can find all the CSS variables used in the default theme here: css/themes/default.css

+

+ You can find all the CSS variables used in the default theme here: + css/themes/default.css +

Importing Pico SASS library

-

We recommend customizing Pico by importing SASS source files into your project. This way, you can keep Pico up to date without conflicts since Pico code and your custom code are separated.

+

+ We recommend customizing Pico by importing SASS source files into + your project. This way, you can keep Pico up to date without + conflicts since Pico code and your custom code are separated. +

Compile the SASS file to CSS to get a custom version of Pico.

-
/* Custom  version */
+          
/* Custom  version */
 
 // Override default variables
 $primary-500: ;
@@ -105,9 +145,12 @@ 

Importing Pico SASS library

// Import Pico @import "@picocss/pico/scss/pico";
-

Alternatively, you can create a custom theme and import it into your project with the components you need.

+

+ Alternatively, you can create a custom theme and import it into your + project with the components you need. +

-
/* Custom version */
+          
/* Custom version */
 
 // Custom theme
 @import "path/themes/custom";
@@ -118,11 +161,13 @@ 

Importing Pico SASS library

-

Compiling a custom SASS version allows you to create a lighter version with only the components that are useful to you.

+

+ Compiling a custom SASS version allows you to create a lighter + version with only the components that are useful to you. +

${require('./_footer.html')} -
diff --git a/docs/src/dropdowns.html b/docs/src/dropdowns.html index 9b9146c15..ffaecfa08 100644 --- a/docs/src/dropdowns.html +++ b/docs/src/dropdowns.html @@ -1,11 +1,8 @@ - + - ${require('./_head.html') - title=`Dropdowns` - description=`Dropdown menus and custom selects without JavaScript.` - canonical=`dropdowns.html` - } + ${require('./_head.html') title=`Dropdowns` description=`Dropdown menus and + custom selects without JavaScript.` canonical=`dropdowns.html` } @@ -20,15 +17,31 @@

Dropdowns

Dropdown menus and custom selects without JavaScript.

-

Dropdowns are built with <details role="list"> as a wrapper and <summary> and <ul> as direct children.

-

For style consistency with the form elements, dropdowns are styled like a <select> by default.

+

+ Dropdowns are built with + <details role="list"> as a + wrapper and <summary> and + <ul> as direct children. +

+

+ For style consistency with the form elements, dropdowns are styled + like a <select> by default. +

Dropdown
- -
<!-- Dropdown -->
+              
<!-- Dropdown -->
 <details role="list">
   <summary aria-haspopup="listbox">Dropdown</summary>
   <ul role="listbox">
@@ -50,43 +62,74 @@ 

Dropdown menus and custom selects without JavaScript.

</details> <!-- Select --> -<select
> +<select> <option value="" disabled selected>Select</option> <option>…</option> </select>
- -
+
-

<summary role="button"> transforms the dropdown into a button.

+

+ <summary role="button"> + transforms the dropdown into a button. +

- Dropdown as a button 1 + + Dropdown as a button 1 +
- Dropdown as a button 2 + + Dropdown as a button 2 +
- Dropdown as a button 3 + + Dropdown as a button 3 +
- -
<!-- Primary -->
+              
<!-- Primary -->
 <details role="list">
   <summary aria-haspopup="listbox" role="button">
     Dropdown as a button 1
@@ -122,10 +165,13 @@ 

Dropdown menus and custom selects without JavaScript.

</ul> </details>
- -
+
-

Dropdowns can be used as custom selects with <input type="radio"> or <input type="checkbox">

+

+ Dropdowns can be used as custom selects with + <input type="radio"> or + <input type="checkbox"> +

Select single element @@ -138,7 +184,12 @@

Dropdown menus and custom selects without JavaScript.

  • @@ -151,7 +202,9 @@

    Dropdown menus and custom selects without JavaScript.

    - Select multiple elements + + Select multiple elements +
    - -
    <!-- With radio buttons -->
    +              
    <!-- With radio buttons -->
     <details role="list">
       <summary aria-haspopup="listbox">Dropdown</summary>
       <ul role="listbox">
    @@ -224,10 +276,14 @@ 

    Dropdown menus and custom selects without JavaScript.

    </li> </ul> </details> - -
    + +
    -

    Dropdowns can be used inside a <nav> with a nested <details role="list">

    +

    + Dropdowns can be used inside a + <nav> with a nested + <details role="list"> +

    Example with a dropdown as a link:

    Example with a default dropdown and a dropdown as a button:

    -

    You can also use <li role="list"> as a nested wrapper to render a list as a dropdown.

    -

    ℹ️ This syntax is experimental. In this version, the dropdown menu is triggered on hover.

    +

    + You can also use + <li role="list"> as a nested + wrapper to render a list as a dropdown. +

    +

    + ℹ️ This syntax is experimental. In this version, the dropdown + menu is triggered on hover. +

    ${require('./_footer.html')} - diff --git a/docs/src/forms.html b/docs/src/forms.html index 7f6f41be0..3567f4f6e 100644 --- a/docs/src/forms.html +++ b/docs/src/forms.html @@ -1,11 +1,9 @@ - + - ${require('./_head.html') - title=`Forms` - description=`All form elements are fully responsive in pure semantic HTML, allowing forms to scale gracefully across devices and viewports.` - canonical=`forms.html` - } + ${require('./_head.html') title=`Forms` description=`All form elements are + fully responsive in pure semantic HTML, allowing forms to scale gracefully + across devices and viewports.` canonical=`forms.html` } @@ -18,30 +16,62 @@

    Forms

    -

    All form elements are fully responsive in pure semantic HTML, allowing forms to scale gracefully across devices and viewports.

    +

    + All form elements are fully responsive in pure semantic HTML, + allowing forms to scale gracefully across devices and viewports. +

    -

    Inputs are width: 100%; by default. You can use .grid inside a form.

    -

    All native form elements are fully customizable and themeable with CSS variables.

    +

    + Inputs are width: 100%; by default. You + can use .grid inside a form. +

    +

    + All native form elements are fully customizable and themeable with + CSS variables. +

    - + We'll never share your email with anyone else. - +
    - -
    <form>
    +              
    <form>
     
       <!-- Grid -->
       <div class="grid">
    @@ -68,28 +98,52 @@ 

    All form elements are fully responsive in pure semantic HTML, allowing forms <button type="submit">Submit</button> </form>

    -

    Disabled and validation states:

    - - - - + + + +
    - -
    <input type="text" placeholder="Valid" aria-invalid="false">
    +              
    <input type="text" placeholder="Valid" aria-invalid="false">
     <input type="text" placeholder="Invalid" aria-invalid="true">
     <input type="text" placeholder="Disabled" disabled>
     <input type="text" value="Readonly" readonly>
    -
    -

    <fieldset> is unstyled and acts as a container for radios and checkboxes, providing a consistent margin-bottom for the set.

    -

    role="switch" on a type="checkbox" enable a custom switch.

    +

    + <fieldset> is unstyled and acts as a + container for radios and checkboxes, providing a consistent + margin-bottom for the set. +

    +

    + role="switch" on a + type="checkbox" enable a custom switch. +

    + Small
    - -
    <!-- Select -->
    +              
    <!-- Select -->
     <label for="fruit">Fruit</label>
     <select id="fruit" required>
       <option value="" selected>Select a fruit…</option>
    @@ -192,49 +275,76 @@ 

    All form elements are fully responsive in pure semantic HTML, allowing forms User must change password at next logon </label> </fieldset>

    -
    -

    You can change a checkbox to an indeterminate state by setting the indeterminate property to true

    +

    + You can change a checkbox to an indeterminate state by setting the + indeterminate property to + true +

    - +
    - -
    <script>
    +              
    <script>
       document.getElementById('indeterminate-checkbox').indeterminate = true;
     </script>
    -

    Others input types:

    -
    - -
    + + -
    - -
    <!-- Search -->
    +              
    <!-- Search -->
     <input type="search" id="search" name="search" placeholder="Search">
     
    -<!-- File browser -->
    +<!-- File browser -->
     <label for="file">File browser
       <input type="file" id="file" name="file">
     </label>
    @@ -258,13 +368,11 @@ 

    All form elements are fully responsive in pure semantic HTML, allowing forms <label for="color">Color <input type="color" id="color" name="color" value="#0eaaaa"> </label>

    -
    ${require('./_footer.html')} - diff --git a/docs/src/grid.html b/docs/src/grid.html index 608351639..1653b5141 100644 --- a/docs/src/grid.html +++ b/docs/src/grid.html @@ -1,24 +1,24 @@ - + - ${require('./_head.html') - title=`Grid` - description=`.grid enable a minimal grid system with auto-layout columns.` - canonical=`grid.html` - } + ${require('./_head.html') title=`Grid` description=`.grid enable a minimal + grid system with auto-layout columns.` canonical=`grid.html` } ${require('./_nav.html')} - +
    ${require('./_sidebar.html') active=`grid-link`} - +

    Grid

    -

    .grid enable a minimal grid system with auto-layout columns.

    +

    + .grid enable a minimal grid system with auto-layout + columns. +

    @@ -28,37 +28,81 @@

    .grid enable a minimal grid system with auto-layout columns.4

    - -
    <div class="grid">
    +              
    <div class="grid">
       <div>1</div>
       <div>2</div>
       <div>3</div>
       <div>4</div>
     </div>
    -
    -

    Columns intentionally collapses below large devices (992px)

    -

    To go further, discover how to merge Pico with the Bootstrap grid system.

    +

    + Columns intentionally collapses below large devices + (992px) +

    +

    + To go further, discover how to + merge Pico with the Bootstrap grid system. +

    - -

    As Pico focuses on native HTML elements, we kept this grid system very minimalist.

    -

    A complete grid system in flexbox, with all the ordering, offsetting and, breakpoints utilities, can be heavier than the total size of the Pico library. Not really in the Pico spirit.

    -

    If you need a quick way to prototyping or build a complex layout, you can look at Flexbox grid layouts. For example, Bootstrap Grid System only or Flexbox Grid.

    -

    If you need a light and custom grid, you can look at CSS Grid Generators. For example, CSS Grid Generator, Layoutit! or Griddy.

    -

    Alternatively, you can learn about CSS Grid.

    +

    + As Pico focuses on native HTML elements, we kept this grid system + very minimalist. +

    +

    + A complete grid system in flexbox, with all the ordering, + offsetting and, breakpoints utilities, can be heavier than the + total size of the Pico library. Not really in the Pico spirit. +

    +

    + If you need a quick way to prototyping or build a complex layout, + you can look at Flexbox grid layouts. For + example, + Bootstrap Grid System only + or Flexbox Grid. +

    +

    + If you need a light and custom grid, you can look at + CSS Grid Generators. For example, + CSS Grid Generator, Layoutit! or + Griddy. +

    +

    + Alternatively, you can + learn about CSS Grid. +

    ${require('./_footer.html')} -
    diff --git a/docs/src/index.html b/docs/src/index.html index 5c52c5480..d38c44173 100644 --- a/docs/src/index.html +++ b/docs/src/index.html @@ -1,19 +1,18 @@ - + - ${require('./_head.html') - title=`Documentation` - description=`Pico works without package manager or dependencies! There are 4 ways to get started with Pico CSS: manually, from a CDN, with NPM, or with Composer.` - canonical=`` - } + ${require('./_head.html') title=`Documentation` description=`Pico works + without package manager or dependencies! There are 4 ways to get started + with Pico CSS: manually, from a CDN, with NPM, or with Composer.` + canonical=`` } ${require('./_nav.html')} - +
    ${require('./_sidebar.html') active=`start-link`} - +
    @@ -22,18 +21,31 @@

    Works without package manager or dependencies 🙂!

    There are 4 ways to get started with Pico CSS:

    Install manually

    -

    Download Pico and link /css/pico.min.css in the <head> of your website.

    +

    + Download Pico + and link /css/pico.min.css in the + <head> of your website. +

    <link rel="stylesheet" href="css/pico.min.css">

    Install from CDN

    -

    Alternatively, you can use jsDelivr CDN to link pico.css

    +

    + Alternatively, you can use + jsDelivr CDN + to link pico.css +

    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@1/css/pico.min.css">

    Install with NPM

    npm install @picocss/pico

    Install with Composer

    -
    composer require picocss/pico
    +
    composer require picocss/pico

    Starter HTML template:

    -
    <!doctype html>
    +          
    <!doctype html>
     <html lang="en">
       <head>
         <meta charset="utf-8">
    @@ -47,11 +59,9 @@ 

    Install with Composer

    </main> </body> </html>
    -
    ${require('./_footer.html')} -
    diff --git a/docs/src/loading.html b/docs/src/loading.html index b2fe190d6..0ee31cb11 100644 --- a/docs/src/loading.html +++ b/docs/src/loading.html @@ -1,33 +1,31 @@ - + - ${require('./_head.html') - title=`Loading` - description=`aria-busy='true' enable a loading indicator.` - canonical=`loading.html` - } + ${require('./_head.html') title=`Loading` description=`aria-busy='true' + enable a loading indicator.` canonical=`loading.html` } ${require('./_nav.html')} - +
    ${require('./_sidebar.html') active=`loading-link`} - +

    Loading

    -

    aria-busy="true" enable a loading indicator.

    +

    + aria-busy="true" enable a loading + indicator. +

    - -
    <button aria-busy="true">Please wait…</button>
    +              
    <button aria-busy="true">Please wait…</button>
     <button aria-busy="true" class="secondary"></button>
    -

    It can be applied to any block:

    @@ -35,7 +33,9 @@

    aria-busy="true" enable a loading indicator.

    <article aria-busy="true"></article>

    Or any text element:

    ${require('./_footer.html')} -
    diff --git a/docs/src/modal.html b/docs/src/modal.html index 5feb1cef6..f0cbc8988 100644 --- a/docs/src/modal.html +++ b/docs/src/modal.html @@ -1,45 +1,60 @@ - + - ${require('./_head.html') - title=`Modal` - description=`A flexible container with graceful spacings across devices and viewports.` - canonical=`modal.html` + ${require('./_head.html') title=`Modal` description=`A flexible container + with graceful spacings across devices and viewports.` canonical=`modal.html` } ${require('./_nav.html')} - +
    ${require('./_sidebar.html') active=`modal-link`} - +
    ${require('./_footer.html')} -
    - +

    Confirm your action!

    -

    Cras sit amet maximus risus. Pellentesque sodales odio sit amet augue finibus pellentesque. Nullam finibus risus non semper euismod.

    +

    + Cras sit amet maximus risus. Pellentesque sodales odio sit amet augue + finibus pellentesque. Nullam finibus risus non semper euismod. +

    - - - \ No newline at end of file + diff --git a/docs/src/navs.html b/docs/src/navs.html index f109deb96..5434534a5 100644 --- a/docs/src/navs.html +++ b/docs/src/navs.html @@ -1,19 +1,16 @@ - + - ${require('./_head.html') - title=`Navs` - description=`The essential navbar component in pure semantic HTML.` - canonical=`navs.html` - } + ${require('./_head.html') title=`Navs` description=`The essential navbar + component in pure semantic HTML.` canonical=`navs.html` } ${require('./_nav.html')} - +
    ${require('./_sidebar.html') active=`navs-link`} - +
    - - ${require('./_footer.html')} - -
    -
    - - - - \ No newline at end of file + + + + + ${require('./_footer.html')} + + + + + diff --git a/docs/src/progress.html b/docs/src/progress.html index e5ce1e29e..a9887459b 100644 --- a/docs/src/progress.html +++ b/docs/src/progress.html @@ -1,11 +1,8 @@ - + - ${require('./_head.html') - title=`Progress` - description=`Progress bar element in pure HTML, without JavaScript.` - canonical=`progress.html` - } + ${require('./_head.html') title=`Progress` description=`Progress bar element + in pure HTML, without JavaScript.` canonical=`progress.html` } @@ -23,24 +20,22 @@

    Progress bar element in pure HTML, without JavaScript.

    - -
    <progress value="25" max="100"></progress>
    - +
    <progress value="25" max="100"></progress>
    -

    A progress bar without a value attribute is indeterminate.

    +

    + A progress bar without a value attribute is + indeterminate. +

    - -
    <progress></progress>
    - +
    <progress></progress>
    ${require('./_footer.html')} - diff --git a/docs/src/rtl.html b/docs/src/rtl.html index 479a30747..89b9fce51 100644 --- a/docs/src/rtl.html +++ b/docs/src/rtl.html @@ -1,37 +1,43 @@ - + - ${require('./_head.html') - title=`RTL (Right-To-Left)` - description=`Support for right-to-left text in Pico with dir='rtl'` - canonical=`rtl.html` - } + ${require('./_head.html') title=`RTL (Right-To-Left)` description=`Support + for right-to-left text in Pico with dir='rtl'` canonical=`rtl.html` } ${require('./_nav.html')} - +
    ${require('./_sidebar.html') active=`rtl-link`} - +

    RTL

    Support for right-to-left text in Pico.

    -

    To enable RTL in Pico you need to set dir="rtl"on the <html> element (example).

    +

    + To enable RTL in Pico you need to set + dir="rtl"on the <html> element (example). +

    -
    <!doctype html>
    +          
    <!doctype html>
     <html dir="rtl" lang="ar">
       ...
     </html>
    -

    ℹ️ The RTL feature is still experimental and will probably evolve.

    +

    + ℹ️ The RTL feature is still experimental and will probably + evolve. +

    ${require('./_footer.html')} -
    diff --git a/docs/src/scroller.html b/docs/src/scroller.html index bea1ab430..d49aadd8f 100644 --- a/docs/src/scroller.html +++ b/docs/src/scroller.html @@ -1,24 +1,25 @@ - + - ${require('./_head.html') - title=`Horizontal scroller` - description=`<figure> acts as a container to make any content scrollable horizontally.` - canonical=`scroller.html` - } + ${require('./_head.html') title=`Horizontal scroller` + description=`<figure> acts as a container to make any content + scrollable horizontally.` canonical=`scroller.html` } ${require('./_nav.html')} - +
    ${require('./_sidebar.html') active=`scroller-link`} - +

    Horizontal scroller

    -

    <figure> acts as a container to make any content scrollable horizontally.

    +

    + <figure> acts as a container to make any + content scrollable horizontally. +

    Useful to have responsive <table>

    @@ -78,16 +79,14 @@

    <figure> acts as a container to make any content s

    -
    <figure>
    +          
    <figure>
       <table>
         …
       </table>
     </figure>
    -
    ${require('./_footer.html')} -
    diff --git a/docs/src/tables.html b/docs/src/tables.html index d097f00c5..d92c88b14 100644 --- a/docs/src/tables.html +++ b/docs/src/tables.html @@ -1,19 +1,16 @@ - + - ${require('./_head.html') - title=`Tables` - description=`Default styles for tables without .classes` - canonical=`tables.html` - } + ${require('./_head.html') title=`Tables` description=`Default styles for + tables without .classes` canonical=`tables.html` } ${require('./_nav.html')} - +
    ${require('./_sidebar.html') active=`tables-link`} - +
    @@ -71,7 +68,7 @@

    Default styles for tables without .classes

    -
    <table>
    +          
    <table>
       <thead>
         <tr>
           <th scope="col">#</th>
    @@ -120,7 +117,9 @@ 

    Default styles for tables without .classes

    </tfoot> </table>
    -

    role="grid" enable striped rows.

    +

    + role="grid" enable striped rows. +

    @@ -162,14 +161,12 @@

    Default styles for tables without .classes

    -
    <table role="grid">
    +          
    <table role="grid">
       
     </table>
    -
    ${require('./_footer.html')} -
    diff --git a/docs/src/tooltips.html b/docs/src/tooltips.html index be225a3b7..912661853 100644 --- a/docs/src/tooltips.html +++ b/docs/src/tooltips.html @@ -1,63 +1,86 @@ - + - ${require('./_head.html') - title=`Tooltips` - description=`Enable tooltips everywhere in pure HTML, without JavaScript.` - canonical=`tooltips.html` - } + ${require('./_head.html') title=`Tooltips` description=`Enable tooltips + everywhere in pure HTML, without JavaScript.` canonical=`tooltips.html` } ${require('./_nav.html')} - +
    ${require('./_sidebar.html') active=`tooltips-link`} - +

    Tooltips

    -

    Enable tooltips everywhere in pure HTML, without JavaScript.

    +

    + Enable tooltips everywhere in pure HTML, without JavaScript. +

    -

    Tooltip on a link

    +

    + Tooltip on a + link +

    Tooltip on inline element

    -

    +

    + +

    - -
    <p>Tooltip on a <a href="#" data-tooltip="Tooltip">link</a></p>
    +              
    <p>Tooltip on a <a href="#" data-tooltip="Tooltip">link</a></p>
     <p>Tooltip on <em data-tooltip="Tooltip">inline element</em></p>
     <p><button data-tooltip="Tooltip">Tooltip on a button</button></p>
     
    -
    -

    data-placement with the values top, right, bottom or left is used to control the position of the tooltip.

    +

    + data-placement with the values + top, right, bottom or left is used to + control the position of the tooltip. +

    -
    -
    -
    -
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    - -
    <button data-tooltip="Top" data-placement="top">Top</button>
    +              
    <button data-tooltip="Top" data-placement="top">Top</button>
     <button data-tooltip="Right" data-placement="right">Right</button>
     <button data-tooltip="Bottom" data-placement="bottom">Bottom</button>
     <button data-tooltip="Left" data-placement="left">Left</button>
     
    -
    -
    ${require('./_footer.html')} -
    diff --git a/docs/src/typography.html b/docs/src/typography.html index 55cdc1fc2..7e8b09926 100644 --- a/docs/src/typography.html +++ b/docs/src/typography.html @@ -1,11 +1,9 @@ - ${require('./_head.html') - title=`Typography` - description=`All typographic elements are responsive, allowing text to scale gracefully across devices and viewports.` - canonical=`typography.html` - } + ${require('./_head.html') title=`Typography` description=`All typographic + elements are responsive, allowing text to scale gracefully across devices + and viewports.` canonical=`typography.html` } @@ -163,8 +161,14 @@

    Heading 2

    -

    Links come with .secondary and .contrast styles.

    -

    ℹ️ These classes are not available in the class-less version.

    +

    + Links come with .secondary and + .contrast styles. +

    +

    + ℹ️ These classes are not available in the + class-less version. +

    Primary
    + - ${require('./_head.html') - title=`We love .classes` - description=`As a starting point, Pico chose to be as neutral and semantic as possible using very few .classes. But of course, .classes are not a bad practice at all. Feel free to use modifiers.` - canonical=`we-love-classes.html` - } + ${require('./_head.html') title=`We love .classes` description=`As a + starting point, Pico chose to be as neutral and semantic as possible using + very few .classes. But of course, .classes are not a bad practice at all. + Feel free to use modifiers.` canonical=`we-love-classes.html` } ${require('./_nav.html')} - +
    ${require('./_sidebar.html') active=`we-love-classes-link`} - +

    We love .classes

    -

    As a starting point, Pico chose to be as neutral and semantic as possible using very few .classes

    -

    But of course, .classes are not a bad practice at all.

    +

    + As a starting point, Pico chose to be as neutral and semantic as + possible using very few .classes +

    +

    + But of course, .classes are not a bad practice at all. +

    Feel free to use modifiers.

    <button class="warning">Action</button>
    -

    Just try to keep your HTML clean and semantic to keep the Pico spirit.

    +

    + Just try to keep your HTML clean and semantic to keep the Pico + spirit. +

    <button class="button-red margin-large padding-medium">Action</button>
    ${require('./_footer.html')} -
    diff --git a/docs/tables.html b/docs/tables.html index 869c8c4d1..7c663d6a0 100644 --- a/docs/tables.html +++ b/docs/tables.html @@ -1,4 +1,5 @@ -Tables • Pico CSS

    Tables

    Default styles for tables without .classes

    #HeadingHeadingHeadingHeadingHeading
    1CellCellCellCellCell
    2CellCellCellCellCell
    3CellCellCellCellCell
    #TotalTotalTotalTotalTotal
    <table>
    +Tables • Pico CSS

    Tables

    Default styles for tables without .classes

    #HeadingHeadingHeadingHeadingHeading
    1CellCellCellCellCell
    2CellCellCellCellCell
    3CellCellCellCellCell
    #TotalTotalTotalTotalTotal
    <table>
       <thead>
         <tr>
           <th scope="col">#</th>
    @@ -47,4 +48,4 @@
       </tfoot>
     </table>

    role="grid" enable striped rows.

    #HeadingHeadingHeadingHeadingHeading
    1CellCellCellCellCell
    2CellCellCellCellCell
    3CellCellCellCellCell
    <table role="grid">
       
    -</table>

    Code licensed MIT

    \ No newline at end of file +</table>

    Code licensed MIT

    \ No newline at end of file diff --git a/docs/themes.html b/docs/themes.html index 1106b7599..cb69de520 100644 --- a/docs/themes.html +++ b/docs/themes.html @@ -1,8 +1,8 @@ -Themes • Pico CSSThemes • Pico CSS

    Themes

    Pico is shipped with 2 consistent themes: Light & Dark.

    The Light theme is used by default. The Dark theme is automatically enabled if the user has dark mode enabled prefers-color-scheme: dark

    Color schemes can be defined for the entire document using <html data-theme="light"> or for specific HTML elements, such as <article data-theme="dark">.

    Color schemes at the HTML tag level work great for elements such as a, button, table, input, textarea, select, article, dialog, progress.

    CSS variables specific to the color scheme are assigned to every HTML tag. However, to maintain transparent backgrounds and ensure colors are inherited from the parent tag, we have not enforced specific background and color settings across all HTML tags.

    For some other HTML tags, you might need to explicitly specify background-color and color.

    Light theme

    <article data-theme="light">
    +    ('prefers-color-scheme: dark')."/>

    Themes

    Pico is shipped with 2 consistent themes: Light & Dark.

    The Light theme is used by default. The Dark theme is automatically enabled if the user has dark mode enabled prefers-color-scheme: dark

    Color schemes can be defined for the entire document using <html data-theme="light"> or for specific HTML elements, such as <article data-theme="dark">.

    Color schemes at the HTML tag level work great for elements such as a, button, table, input, textarea, select, article, dialog, progress.

    CSS variables specific to the color scheme are assigned to every HTML tag. However, to maintain transparent backgrounds and ensure colors are inherited from the parent tag, we have not enforced specific background and color settings across all HTML tags.

    For some other HTML tags, you might need to explicitly specify background-color and color.

    Light theme

    <article data-theme="light">
       …
     </article>

    Dark theme

    <article data-theme="dark">
       …
    -</article>

    Code licensed MIT

    \ No newline at end of file +</article>

    Code licensed MIT

    \ No newline at end of file diff --git a/docs/tooltips.html b/docs/tooltips.html index 107c75745..704ebc085 100644 --- a/docs/tooltips.html +++ b/docs/tooltips.html @@ -1,8 +1,9 @@ -Tooltips • Pico CSS

    Tooltips

    Enable tooltips everywhere in pure HTML, without JavaScript.

    Tooltip on a link

    Tooltip on inline element

    <p>Tooltip on a <a href="#" data-tooltip="Tooltip">link</a></p>
    +Tooltips • Pico CSS

    Tooltips

    Enable tooltips everywhere in pure HTML, without JavaScript.

    Tooltip on a link

    Tooltip on inline element

    <p>Tooltip on a <a href="#" data-tooltip="Tooltip">link</a></p>
     <p>Tooltip on <em data-tooltip="Tooltip">inline element</em></p>
     <p><button data-tooltip="Tooltip">Tooltip on a button</button></p>
     

    data-placement with the values top, right, bottom or left is used to control the position of the tooltip.

    <button data-tooltip="Top" data-placement="top">Top</button>
     <button data-tooltip="Right" data-placement="right">Right</button>
     <button data-tooltip="Bottom" data-placement="bottom">Bottom</button>
     <button data-tooltip="Left" data-placement="left">Left</button>
    -

    Code licensed MIT

    \ No newline at end of file +

    Code licensed MIT

    \ No newline at end of file diff --git a/docs/typography.html b/docs/typography.html index 34019189d..f09503233 100644 --- a/docs/typography.html +++ b/docs/typography.html @@ -1,4 +1,6 @@ -Typography • Pico CSS

    Typography

    All typographic elements are responsive, allowing text to scale gracefully across devices and viewports.

    DeviceExtra smallSmallMediumLargeExtra large
    Base font16px17px18px19px20px
    <h1>32px34px36px38px40px
    <h2>28px29px31.5px33.25px35px
    <h3>24px25.5px27px28.5px30px
    <h4>20px21.25px22.5px23.75px25px
    <h5>18px19.125px20.25px21.375px22.5px
    <h6>16px17px18px19px20px
    <small>14px14.875px15.75px16.625px17.5px

    Headings:

    Heading 1

    Heading 2

    Heading 3

    Heading 4

    Heading 5
    Heading 6
    <h1>Heading 1</h1>
    +Typography • Pico CSS

    Typography

    All typographic elements are responsive, allowing text to scale gracefully across devices and viewports.

    DeviceExtra smallSmallMediumLargeExtra large
    Base font16px17px18px19px20px
    <h1>32px34px36px38px40px
    <h2>28px29px31.5px33.25px35px
    <h3>24px25.5px27px28.5px30px
    <h4>20px21.25px22.5px23.75px25px
    <h5>18px19.125px20.25px21.375px22.5px
    <h6>16px17px18px19px20px
    <small>14px14.875px15.75px16.625px17.5px

    Headings:

    Heading 1

    Heading 2

    Heading 3

    Heading 4

    Heading 5
    Heading 6
    <h1>Heading 1</h1>
     <h2>Heading 2</h2>
     <h3>Heading 3</h3>
     <h4>Heading 4</h4>
    @@ -14,4 +16,4 @@
       <footer>
         <cite>- Phasellus eget lacinia</cite>
       </footer>
    -</blockquote>

    Code licensed MIT

    \ No newline at end of file +</blockquote>

    Code licensed MIT

    \ No newline at end of file diff --git a/docs/we-love-classes.html b/docs/we-love-classes.html index 2e0944e37..a80cf05e1 100644 --- a/docs/we-love-classes.html +++ b/docs/we-love-classes.html @@ -1 +1,4 @@ -We love .classes • Pico CSS

    We love .classes

    As a starting point, Pico chose to be as neutral and semantic as possible using very few .classes

    But of course, .classes are not a bad practice at all.

    Feel free to use modifiers.

    <button class="warning">Action</button>

    Just try to keep your HTML clean and semantic to keep the Pico spirit.

    <button class="button-red margin-large padding-medium">Action</button>

    Code licensed MIT

    \ No newline at end of file +We love .classes • Pico CSS

    We love .classes

    As a starting point, Pico chose to be as neutral and semantic as possible using very few .classes

    But of course, .classes are not a bad practice at all.

    Feel free to use modifiers.

    <button class="warning">Action</button>

    Just try to keep your HTML clean and semantic to keep the Pico spirit.

    <button class="button-red margin-large padding-medium">Action</button>

    Code licensed MIT

    \ No newline at end of file