@vaadin/vaadin-lumo-styles
Version:
Lumo is a design system foundation for modern web applications, used by Vaadin components
229 lines (200 loc) • 7.8 kB
CSS
/**
* @license
* Copyright (c) 2017 - 2026 Vaadin Ltd.
* This program is available under Apache License Version 2.0, available at https://vaadin.com/license/
*/
@media lumo_components_input-container {
:host {
display: flex;
align-items: center;
flex: 0 1 auto;
--_border-radius: var(--vaadin-input-field-border-radius, 0);
--_input-border-width: var(--vaadin-input-field-border-width, 0px);
box-shadow: inset 0 0 0 var(--_input-border-width, 0) var(--_input-border-color);
background: var(--_background);
padding: 0 calc(0.375em + var(--_input-container-radius) / 4 - 1px);
font-weight: var(--vaadin-input-field-value-font-weight, 500);
line-height: 1;
position: relative;
cursor: text;
box-sizing: border-box;
border-radius:
/* See https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius#syntax */
var(--vaadin-input-field-top-start-radius, var(--_input-container-radius))
var(--vaadin-input-field-top-end-radius, var(--_input-container-radius))
var(--vaadin-input-field-bottom-end-radius, var(--_input-container-radius))
var(--vaadin-input-field-bottom-start-radius, var(--_input-container-radius));
/* Fallback */
--_input-container-radius: var(--vaadin-input-field-border-radius, var(--lumo-border-radius-m));
--_input-height: var(--lumo-text-field-size, var(--lumo-size-m));
/* Default values */
--_background: var(--vaadin-input-field-background, var(--lumo-contrast-10pct));
--_hover-highlight: var(--vaadin-input-field-hover-highlight, var(--lumo-contrast-50pct));
--_input-border-color: var(--vaadin-input-field-border-color, var(--lumo-contrast-50pct));
--_icon-color: var(--vaadin-input-field-icon-color, var(--lumo-contrast-60pct));
--_icon-size: var(--vaadin-input-field-icon-size, var(--lumo-icon-size-m));
--_invalid-background: var(--vaadin-input-field-invalid-background, var(--lumo-error-color-10pct));
--_invalid-hover-highlight: var(--vaadin-input-field-invalid-hover-highlight, var(--lumo-error-color-50pct));
--_disabled-background: var(--vaadin-input-field-disabled-background, var(--lumo-contrast-5pct));
--_disabled-value-color: var(--vaadin-input-field-disabled-value-color, var(--lumo-disabled-text-color));
}
:host([dir='rtl']) {
border-radius:
/* Don't use logical props, see https://github.com/vaadin/vaadin-time-picker/issues/145 */
var(--vaadin-input-field-top-end-radius, var(--_input-container-radius))
var(--vaadin-input-field-top-start-radius, var(--_input-container-radius))
var(--vaadin-input-field-bottom-start-radius, var(--_input-container-radius))
var(--vaadin-input-field-bottom-end-radius, var(--_input-container-radius));
}
/* Used for hover and activation effects */
:host::after {
content: '';
position: absolute;
inset: 0;
border-radius: inherit;
pointer-events: none;
background: var(--_hover-highlight);
opacity: 0;
transition:
transform 0.15s,
opacity 0.2s;
transform-origin: 100% 0;
}
:host([hidden]) {
display: none ;
}
/* Reset the native input styles */
::slotted(input) {
appearance: none;
flex: auto;
white-space: nowrap;
overflow: hidden;
width: 100%;
height: 100%;
outline: none;
margin: 0;
padding: 0;
border: 0;
border-radius: 0;
min-width: 0;
font: inherit;
line-height: normal;
color: inherit;
background-color: transparent;
/* Disable default invalid style in Firefox */
box-shadow: none;
}
::slotted(*) {
flex: none;
}
::slotted(:is(input, textarea))::placeholder {
/* Use ::slotted(input:placeholder-shown) in themes to style the placeholder. */
/* because ::slotted(...)::placeholder does not work in Safari. */
font: inherit;
color: inherit;
/* Override default opacity in Firefox */
opacity: 1;
}
::slotted(:not([slot$='fix'])) {
cursor: inherit;
min-height: var(--vaadin-input-field-height, var(--_input-height));
padding: 0 0.25em;
--_lumo-text-field-overflow-mask-image: linear-gradient(to left, transparent, #000 1.25em);
mask-image: var(--_lumo-text-field-overflow-mask-image);
}
/* Read-only */
:host([readonly]) {
color: var(--lumo-secondary-text-color);
background-color: transparent;
cursor: default;
}
:host([readonly])::after {
background-color: transparent;
opacity: 1;
border: var(--vaadin-input-field-readonly-border, 1px dashed var(--lumo-contrast-30pct));
}
/* Disabled */
:host([disabled]) {
background: var(--_disabled-background);
}
:host([disabled]) ::slotted(:not([slot$='fix'])) {
-webkit-text-fill-color: var(--_disabled-value-color);
color: var(--_disabled-value-color);
}
/* Invalid */
:host([invalid]) {
background: var(--_invalid-background);
}
:host([invalid]:not([readonly]))::after {
background: var(--_invalid-hover-highlight);
}
/* Slotted icons */
::slotted(vaadin-icon) {
color: var(--_icon-color);
width: var(--_icon-size);
height: var(--_icon-size);
}
/* Vaadin icons are based on a 16x16 grid (unlike Lumo and Material icons with 24x24), so they look too big by default */
::slotted(vaadin-icon[icon^='vaadin:']) {
padding: 0.25em;
box-sizing: border-box ;
}
/* Text align */
:host([dir='rtl']) ::slotted(:not([slot$='fix'])) {
--_lumo-text-field-overflow-mask-image: linear-gradient(to right, transparent, #000 1.25em);
}
@-moz-document url-prefix() {
:host([dir='rtl']) ::slotted(:not([slot$='fix'])) {
mask-image: var(--_lumo-text-field-overflow-mask-image);
}
}
:host([theme~='align-left']) ::slotted(:not([slot$='fix'])) {
text-align: start;
--_lumo-text-field-overflow-mask-image: none;
}
:host([theme~='align-center']) ::slotted(:not([slot$='fix'])) {
text-align: center;
--_lumo-text-field-overflow-mask-image: none;
}
:host([theme~='align-right']) ::slotted(:not([slot$='fix'])) {
text-align: end;
--_lumo-text-field-overflow-mask-image: none;
}
@-moz-document url-prefix() {
/* Firefox is smart enough to align overflowing text to right */
:host([theme~='align-right']) ::slotted(:not([slot$='fix'])) {
--_lumo-text-field-overflow-mask-image: linear-gradient(to right, transparent 0.25em, #000 1.5em);
}
}
@-moz-document url-prefix() {
/* Firefox is smart enough to align overflowing text to right */
:host([theme~='align-left']) ::slotted(:not([slot$='fix'])) {
--_lumo-text-field-overflow-mask-image: linear-gradient(to left, transparent 0.25em, #000 1.5em);
}
}
/* RTL specific styles */
:host([dir='rtl'])::after {
transform-origin: 0% 0;
}
:host([theme~='align-left'][dir='rtl']) ::slotted(:not([slot$='fix'])) {
--_lumo-text-field-overflow-mask-image: none;
}
:host([theme~='align-center'][dir='rtl']) ::slotted(:not([slot$='fix'])) {
--_lumo-text-field-overflow-mask-image: none;
}
:host([theme~='align-right'][dir='rtl']) ::slotted(:not([slot$='fix'])) {
--_lumo-text-field-overflow-mask-image: none;
}
@-moz-document url-prefix() {
/* Firefox is smart enough to align overflowing text to right */
:host([theme~='align-right'][dir='rtl']) ::slotted(:not([slot$='fix'])) {
--_lumo-text-field-overflow-mask-image: linear-gradient(to right, transparent 0.25em, #000 1.5em);
}
}
@-moz-document url-prefix() {
/* Firefox is smart enough to align overflowing text to right */
:host([theme~='align-left'][dir='rtl']) ::slotted(:not([slot$='fix'])) {
--_lumo-text-field-overflow-mask-image: linear-gradient(to left, transparent 0.25em, #000 1.5em);
}
}
}