lu2
Version:
Simple and flexible UI component library based on native HTML and JavaScript
171 lines (154 loc) • 5.61 kB
CSS
@charset "UTF-8";
/**
*
* @Input.css
* @author zhangxinxu(.com)
* @create 15-06-16
* @edit 17-06-13
19-07-18 version pure
20-04-03 version edge
22-01-25 version hope
*/
/* input基础变量 */
:root {
--ui-input-height: var(--ui-component-height, 3rem);
--ui-input-line-height: var(--ui-basic-height, 1.25rem);
--ui-input-radius: var(--ui-radius, .25rem);
--ui-input-border: var(--ui-border, #d0d0d5);
--ui-input-focus: var(--ui-primary, #2a80eb);
--ui-input-image-search: var(--ui-image-search, url(https://qidian.gtimg.com/lulu/hope/ui/Input/assets/search.svg));
--ui-input-image-clear: var(--ui-image-clear, url(https://qidian.gtimg.com/lulu/hope/ui/Input/assets/clear.svg));
}
input::placeholder {
transition: opacity var(--ui-animate-time, .2s);
color: var(--ui-gray, #a2a9b6);
font-size: var(--ui-input-font);
opacity: 1;
}
input:focus::placeholder {
opacity: var(--ui-opacity, .4);
}
.ui-input,
[is="ui-input"] {
height: var(--ui-input-height);
width: var(--ui-input-width, 100%);
line-height: var(--ui-input-line-height);
padding: calc((var(--ui-input-height) - var(--ui-input-line-height) - 2px) / 2) calc(var(--ui-input-height) / 4);
border: 1px solid var(--ui-input-border);
border-radius: var(--ui-input-radius);
background: var(--ui-white, #fff) no-repeat center / auto var(--ui-input-line-height);
background-image: var(--ui-input-image-label, none), var(--ui-input-image-count, none);
background-position-x: calc(var(--ui-input-height) / 4), calc(100% - var(--ui-input-height) / 4);
box-sizing: border-box;
font-size: var(--ui-input-font);
outline: none;
color: var(--ui-dark, #4c5161);
transition: color, border-color, background-size, background-position, --ui-fill;
transition-duration: var(--ui-animate-time, .2s);
/* 一些变量 */
--ui-fill: var(--ui-gray, #a2a9b6);
--ui-input-font: min(var(--ui-font, 1rem), calc(0.75rem + (var(--ui-input-height) - 1.5rem) / 6));
--ui-input-icon-size: calc(var(--ui-input-font) * 1.25);
}
[is="ui-input"][_maxlength] {
padding-right: calc(var(--ui-input-height) / 4 + var(--ui-char-numbers, 0) * 1ch);
}
.ui-input:focus,
[is="ui-input"]:focus {
border-color: var(--ui-input-focus);
}
.ui-input[border="bottom"],
[is="ui-input"][border="bottom"] {
border-bottom-left-radius: 0;
border-bottom-right-radius: 0;
border-top-color: transparent;
border-left-color: transparent;
border-right-color: transparent;
background-color: var(--ui-light, #f7f9fa);
}
.ui-input[border="bottom"]:read-write:focus,
[is="ui-input"][border="bottom"]:read-write:focus {
border-image: linear-gradient(transparent calc(100% - 2px), var(--ui-input-focus) 0) 2 / 2px;
background-color: var(--ui-light-background);
}
input[border="bottom"][label] {
padding-top: calc(var(--ui-input-height) - var(--ui-input-line-height) - 2px - .5rem - calc((var(--ui-input-height) - 3rem) / 2));
padding-bottom: 0;
}
input[border="bottom"][label]::placeholder {
color: transparent;
}
input[border="bottom"][label]:focus,
input[border="bottom"][label]:not(:placeholder-shown) {
background-position-y: calc(.25rem + (var(--ui-input-height) - 3rem) / 4), 50%;
background-size: auto calc(var(--ui-input-line-height) * 0.75), auto var(--ui-input-line-height);
--ui-fill: var(--ui-input-focus);
}
.ui-input[border="none"],
[is="ui-input"][border="none"] {
border-radius: 0;
border-color: transparent;
background-color: transparent;
}
[active] .ui-input[border="none"]:active,
[active] [is="ui-input"][border="none"]:active {
border-image: var(--ui-image-active) 1 fill / auto / 100vw;
}
/* type=[search] with icon */
[type="search"]::-webkit-search-cancel-button {
-webkit-appearance: none;
width: var(--ui-input-icon-size);
height: var(--ui-input-icon-size);
margin-right: -2px;
background: var(--ui-dark-gray, #b6bbc6);
-webkit-mask: no-repeat center / contain;
mask: no-repeat center / contain;
-webkit-mask-image: var(--ui-input-image-clear);
mask-image: var(--ui-input-image-clear);
cursor: pointer;
}
[type="search"]::-webkit-search-cancel-button:hover {
background-color: var(--ui-dark, #4c5161);
}
[type="search"]::-webkit-search-results-decoration {
display: none;
}
.ui-input[type="search"],
[is="ui-input"][type="search"] {
-webkit-appearance: none;
appearance: none;
padding-left: calc(var(--ui-input-height) / 2 + var(--ui-input-line-height));
background: linear-gradient(var(--ui-fill), var(--ui-fill)), var(--ui-input-image-search) no-repeat calc(var(--ui-input-height) / 4) 50% / auto var(--ui-input-icon-size), var(--ui-light-background);
background-blend-mode: screen, normal;
}
.ui-input[type="search"]:focus,
[is="ui-input"][type="search"]:focus {
--ui-fill: var(--ui-input-focus);
}
[type="search"] ~ [type="reset"] {
background-color: transparent;
border: 0;
font-size: 100%;
padding: 0 .5rem;
margin-left: .25rem;
color: inherit;
}
[type="search"]:invalid ~ [type="reset"] {
display: none;
}
/* 只读和禁用 */
.ui-input:disabled,
[is="ui-input"]:disabled {
background-color: var(--ui-light, #f7f9fa);
color: var(--ui-gray, #a2a9b6);
}
/* error */
.ui-input[is-error],
[is="ui-input"][is-error] {
--ui-input-border: var(--ui-red, #eb4646);
--ui-input-focus: var(--ui-red, #eb4646);
}
.ui-input[is-error][border],
[is="ui-input"][is-error][border] {
background-color: #fff2f2 ;
}