diff --git a/docs/accordions.html b/docs/accordions.html index 720edd1d..f1e0d896 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 475ce83a..3b234f0a 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 fef1434c..98c42ac6 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 b70c07c1..af39b14f 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 31a13dc2..be775ff3 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 9c83d192..59c2e947 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 f754fabf..70803ed0 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 6f4b1408..4147c77c 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 13bf0185..ee772738 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 5c9482f9..a2e05084 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 408e1863..5ec3b2d2 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 4e95ebc7..6fb36261 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 c170d5b3..30950b2b 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 beb98a26..13e54651 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 4a8fb867..17db02f7 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'], - }; + ".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]; - }); - }); + 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 7cb8e503..40a45621 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 ed12aae5..8f70cba4 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 97341919..a16ad7b9 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 eaea7cdc..35364f61 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 868fa66a..09e41b3c 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 2ffb4bf0..ffd888bc 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 5b922b11..9d3d7995 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 0fc8238d..6f62f166 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 7ed19585..86ba9b67 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 12d3be15..05b84a01 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 a6004547..797dbd72 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 04e4b497..a9e99d73 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 dfdf4395..a4dc23b4 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 48dc49b8..c9049889 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 @@
     <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 @@
 <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 7b37c182..e4b7180c 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 d3861b73..9d7f4058 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 6321a1a5..67b22656 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 @@
 

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 @@
 // 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 63dd3b76..f83026b0 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 c56913d5..23072dca 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 @@

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 @@
 }
 
-

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 @@
 // 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 @@
 
 
-

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 9b9146c1..ffaecfa0 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 @@
 </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 @@
   </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 @@
  • @@ -151,7 +202,9 @@
    - 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 @@
         </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 7f6f41be..3567f4f6 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 @@
       <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 @@
         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 @@
     <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 60835163..1653b514 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 @@
    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 5c52c548..d38c4417 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 @@

    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 @@
         </main>
       </body>
     </html>
    -
    ${require('./_footer.html')} -
    diff --git a/docs/src/loading.html b/docs/src/loading.html index b2fe190d..0ee31cb1 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 @@
    <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 5feb1cef..f0cbc898 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 f109deb9..5434534a 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 e5ce1e29..a9887459 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 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 479a3074..89b9fce5 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 bea1ab43..d49aadd8 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>
    +          
    <figure>
       <table>
         …
       </table>
     </figure>
    -
    ${require('./_footer.html')} -
    diff --git a/docs/src/tables.html b/docs/src/tables.html index d097f00c..d92c88b1 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 @@ -
    <table>
    +          
    <table>
       <thead>
         <tr>
           <th scope="col">#</th>
    @@ -120,7 +117,9 @@
       </tfoot>
     </table>
    -

    role="grid" enable striped rows.

    +

    + role="grid" enable striped rows. +

    @@ -162,14 +161,12 @@
    -
    <table role="grid">
    +          
    <table role="grid">
       
     </table>
    -
    ${require('./_footer.html')} -
    diff --git a/docs/src/tooltips.html b/docs/src/tooltips.html index be225a3b..91266185 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 55cdc1fc..7e8b0992 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 @@ -

    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 869c8c4d..7c663d6a 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 1106b759..cb69de52 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 107c7574..704ebc08 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 34019189..f0950323 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 2e0944e3..a80cf05e 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