@vaadin/vaadin-lumo-styles
Version:
Lumo is a design system foundation for modern web applications, used by Vaadin components
117 lines (101 loc) • 3.44 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_text-area {
.vaadin-text-area-container {
flex: auto;
}
/* The label, helper text and the error message should neither grow nor shrink. */
[part='label'],
[part='helper-text'],
[part='error-message'] {
flex: none;
}
::slotted(textarea) {
appearance: none;
flex: auto;
overflow: hidden;
width: 100%;
height: 100%;
outline: none;
resize: none;
margin: 0;
padding: 0 0.25em;
border: 0;
border-radius: 0;
min-width: 0;
font: inherit;
font-size: 1em;
line-height: normal;
color: inherit;
background-color: transparent;
/* Disable default invalid style in Firefox */
box-shadow: none;
}
/* Override styles from <vaadin-input-container> */
[part='input-field'] ::slotted(textarea) {
align-self: stretch;
white-space: pre-wrap;
line-height: inherit;
--_lumo-text-field-overflow-mask-image: none;
}
[part='input-field'] ::slotted(:not(textarea)) {
align-self: flex-start;
}
/* Workaround https://bugzilla.mozilla.org/show_bug.cgi?id=1739079 */
:host([disabled]) ::slotted(textarea) {
user-select: none;
}
[part='input-field'],
[part='input-field'] ::slotted(textarea) {
height: auto;
box-sizing: border-box;
min-height: 0;
}
[part='input-field'] {
flex: auto;
overflow: auto;
/* Equal to the implicit padding in vaadin-text-field */
padding-top: calc((var(--lumo-text-field-size) - 1em * var(--lumo-line-height-s)) / 2);
padding-bottom: calc((var(--lumo-text-field-size) - 1em * var(--lumo-line-height-s)) / 2);
transition: background-color 0.1s;
line-height: var(--lumo-line-height-s);
}
:host(:not([readonly])) [part='input-field']::after {
display: none;
}
:host([readonly]) [part='input-field'] {
border: var(--vaadin-input-field-readonly-border, 1px dashed var(--lumo-contrast-30pct));
}
:host([readonly]) [part='input-field']::after {
border: none;
}
:host(:hover:not([readonly]):not([focused]):not([invalid])) [part='input-field'] {
background-color: var(--lumo-contrast-20pct);
}
@media (pointer: coarse) {
:host(:hover:not([readonly]):not([focused]):not([invalid])) [part='input-field'] {
background-color: var(--lumo-contrast-10pct);
}
:host(:active:not([readonly]):not([focused])) [part='input-field'] {
background-color: var(--lumo-contrast-20pct);
}
}
/* Use sticky positioning to keep prefix/suffix/clear button visible when scrolling textarea container */
[part='input-field'] ::slotted([slot$='fix']),
[part~='clear-button'] {
position: sticky;
top: 0;
align-self: flex-start;
}
[part='input-field'] ::slotted(vaadin-icon[slot$='fix']),
[part~='clear-button'] {
/* Vertically align icon prefix/suffix/clear button with the first line of text */
top: calc((var(--lumo-icon-size-m) - 1em * var(--lumo-line-height-s)) / -2);
margin-top: calc((var(--lumo-icon-size-m) - 1em * var(--lumo-line-height-s)) / -2);
/* Reduce effective height to match line height of native textarea, so icons don't increase component size when using single row */
margin-bottom: calc((var(--lumo-icon-size-m) - 1em * var(--lumo-line-height-s)) / -2);
}
}