UNPKG

@public-ui/components

Version:

Contains all web components that belong to KoliBri - The accessible HTML-Standard.

305 lines 8.13 kB
/* forward the rem function */ /* * This file defines the layer order for all CSS layers used in KoliBri. * The order is important as it determines the cascade priority. * * Layer order (lowest to highest priority): * 1. kol-a11y - Accessibility defaults and requirements * 2. kol-global - Global component styles and resets * 3. kol-component - Component-specific styles * 4. kol-theme-global - Theme-specific global styles * 5. kol-theme-component - Theme-specific component styles */ @layer kol-a11y, kol-global, kol-component, kol-theme-global, kol-theme-component; /* * This file contains all rules for accessibility. */ @layer kol-a11y { :host { /* * Minimum size of interactive elements. */ --a11y-min-size: calc(44 * 1rem / var(--kolibri-root-font-size, 16)); /* * No element should be used without verifying the contrast ratio of its background and font colors. * By initially setting the background color to white and the font color to black, * the contrast ratio is ensured and explicit adjustment is forced. */ color: black; background-color: white; /* * Verdana is an accessible font that can be used without requiring additional loading time. */ font-family: Verdana; /* * Letter spacing is required for all texts. */ letter-spacing: inherit; /* * Word spacing is required for all texts. */ word-spacing: inherit; /* * Text should be aligned left by default to provide a predictable starting point. */ text-align: left; } * { /* * This rule enables the word dividing for all texts. That is important for high zoom levels. */ hyphens: auto; /* * This rule enables the word dividing for all texts. That is important for high zoom levels. */ word-break: break-word; } /* * All interactive elements should have a minimum size of to-rem(44). */ /* input:not([type='checkbox'], [type='radio'], [type='range']), */ /* option, */ /* select, */ /* textarea, */ button, .kol-input .input { min-width: var(--a11y-min-size); min-height: var(--a11y-min-size); } /* * Some interactive elements should not inherit the font-family and font-size. */ a, button, h1, h2, h3, h4, h5, h6, input, option, select, textarea { /* * All elements should inherit the text color from his parent element. */ color: inherit; /* * All elements should inherit the font family from his parent element. */ font-family: inherit; /* * All elements should inherit the font size from his parent element. */ font-size: inherit; /* * Letter spacing is required for all texts. */ letter-spacing: inherit; /* * Word spacing is required for all texts. */ word-spacing: inherit; } /** * Sometimes we need the semantic element for accessibility reasons, * but we don't want to show it. * * - https://www.a11yproject.com/posts/how-to-hide-content/ */ .visually-hidden { position: fixed; top: 0; left: 0; width: 1px; height: 1px; overflow: hidden; white-space: nowrap; clip-path: inset(50%); } } @layer kol-global { /* * Dieses CSS stellt sicher, dass der Standard-Style * von A und Button resettet werden. */ :is(a, button) { background-color: transparent; width: 100%; margin: 0; padding: 0; border: none; /* 100% needed for custom width from outside */ } /* * Ensure elements with hidden attribute to be actually not visible * @see https://meowni.ca/hidden.is.a.lie.html */ [hidden] { display: none !important; } .badge-text-hint { color: black; background-color: white; } } @layer kol-global { :host { /* * The max-width is needed to prevent the table from overflowing the * parent node, if the table is wider than the parent node. */ max-width: 100%; font-size: calc(16 * 1rem / var(--kolibri-root-font-size, 16)); } * { /* * We prefer to box-sizing: border-box for all elements. */ box-sizing: border-box; } .kol-span { /* KolSpan is a layout component with icons in all directions and a label text in the middle. */ display: flex; flex-flow: column; align-items: center; justify-content: center; /* The sub span in KolSpan is the horizontal span with icon left and right and the label text in the middle. */ } .kol-span__container { display: flex; align-items: center; } a, button { cursor: pointer; } .kol-span .kol-span__label--hide-label .kol-span__label { display: none; } /* Reset browser agent style. */ button:disabled { color: unset; } .disabled label, .disabled:focus-within label, [aria-disabled=true], [aria-disabled=true]:focus, [disabled], [disabled]:focus { outline: none; cursor: not-allowed; } [aria-disabled=true]:focus .kol-span, [disabled]:focus .kol-span { outline: none !important; } .hastooltip { z-index: 900 !important; } } @layer kol-component { .kol-meter { --color-optimal: var(--kol-meter-color-optimal, #2ea32e); --color-suboptimal: var(--kol-meter-color-suboptimal, #c8a000); --color-critical: var(--kol-meter-color-critical, #c00); --vertical-height: var(--kol-meter-vertical-height, 128); --horizontal-height: var(--kol-meter-horizontal-height, 12); } .kol-meter__bar { display: grid; align-items: center; grid-template-areas: "label label" "bar value"; grid-template-columns: 1fr auto; } .kol-meter__bar-label { grid-column-end: 2; grid-area: label; } .kol-meter__bar-track { display: flex; min-width: 100%; grid-area: bar; } .kol-meter__value-unit { grid-area: value; } .kol-meter:not(.kol-meter--vertical) .kol-meter__value { display: inline-block; text-align: right; } .kol-meter--vertical { min-height: 100%; } .kol-meter--vertical .kol-meter__bar { min-height: 100%; align-items: end; justify-items: center; grid-template-areas: "label" "bar" "value"; grid-template-columns: 1fr; grid-template-rows: min-content 1fr min-content; } .kol-meter--vertical .kol-meter__bar-label { text-align: center; } .kol-meter--vertical .kol-meter__bar-track { position: relative; min-width: 0; min-height: calc(var(--vertical-height) * 1rem / var(--kolibri-root-font-size, 16)); align-items: center; } .kol-meter--vertical .kol-meter__bar meter { transform: rotate(-90deg); transform-origin: left bottom; position: absolute; bottom: 0; width: calc(var(--vertical-height) * 1rem / var(--kolibri-root-font-size, 16)); } .kol-meter { /* Base meter styling */ } .kol-meter meter { width: 100%; height: calc(var(--horizontal-height) * 1rem / var(--kolibri-root-font-size, 16)); /* Remove default appearance in some browsers */ -webkit-appearance: none; -moz-appearance: none; appearance: none; } .kol-meter { /* Chrome, Safari, Edge (WebKit/Blink) */ } .kol-meter meter::-webkit-meter-bar { background: white; height: calc(var(--horizontal-height) * 1rem / var(--kolibri-root-font-size, 16)); border: 1px solid black; } .kol-meter meter::-webkit-meter-optimum-value { background: var(--color-optimal); } .kol-meter meter::-webkit-meter-suboptimum-value { background: var(--color-suboptimal); } .kol-meter meter::-webkit-meter-even-less-good-value { background: var(--color-critical); } .kol-meter { /* Firefox */ } @supports (selector(::-moz-meter-bar)) { .kol-meter meter { background: white; border: 1px solid black; } } .kol-meter meter::-moz-meter-bar { background: var(--color-optimal); } .kol-meter meter:-moz-meter-sub-optimum::-moz-meter-bar { background: var(--color-suboptimal); } .kol-meter meter:-moz-meter-sub-sub-optimum::-moz-meter-bar { background: var(--color-critical); } }