mdui
Version:
a CSS Framework based on material design
426 lines (358 loc) • 9.04 kB
text/less
/**
* =============================================================================
* ************ Text Field 文本框 ************
* =============================================================================
*/
/* 文本框外层 */
.mdui-textfield {
position: relative;
padding-top: 16px;
padding-bottom: 8px;
overflow: hidden;
}
.mdui-textfield-has-bottom {
padding-bottom: 28px;
}
/* 输入框 */
.mdui-textfield-input {
display: block;
box-sizing: border-box;
width: 100%;
height: 36px;
margin: 0;
padding: 8px 0;
overflow: hidden;
color: rgba(0, 0, 0, 0.87);
font-size: 16px;
font-family: inherit;
line-height: 20px;
background: none;
border: none;
border-bottom: 1px solid rgba(0, 0, 0, .42);
border-radius: 0;
outline: none;
box-shadow: none;
transition-timing-function: @animation-curve-default;
transition-duration: .2s;
transition-property: border-bottom-color, padding-right, box-shadow;
appearance: none;
resize: none;
&::-webkit-input-placeholder {
color: inherit;
opacity: 0.42;
}
&:not([disabled]):hover {
border-bottom: 1px solid rgba(0, 0, 0, .87);
box-shadow: 0 1px 0 0 rgba(0, 0, 0, .87);
cursor: pointer;
}
&[rows] {
height: auto ;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
}
/* 文本框 label */
.mdui-textfield-label {
display: block;
width: 100%;
color: rgba(0, 0, 0, 0.54);
font-size: 16px;
transform: scale(0.75) translateY(0);
transform-origin: left;
transition: all .2s;
pointer-events: none;
}
/* 表单验证错误提示、帮助文本提示 */
.mdui-textfield-error,
.mdui-textfield-helper {
position: absolute;
bottom: 8px;
height: 12px;
font-size: 12px;
line-height: 12px;
.mdui-text-truncate();
}
.mdui-textfield-error {
color: rgba(red(@color-red-a400), green(@color-red-a400), blue(@color-red-a400), .87);
visibility: hidden;
}
.mdui-textfield-helper {
color: rgba(0, 0, 0, 0.54);
}
/* 表单中的图标
========== */
.mdui-textfield {
.mdui-icon {
position: absolute;
bottom: 8px;
padding: 6px;
color: @color-black-icon;
~ .mdui-textfield-label,
~ .mdui-textfield-input,
~ .mdui-textfield-error,
~ .mdui-textfield-helper,
~ .mdui-textfield-flex-wrap {
/* stylelint-disable-next-line */
width: calc(~"100% - 56px");
margin-left: 56px;
}
}
}
.mdui-textfield-has-bottom {
.mdui-icon {
bottom: 28px;
}
}
/* 聚焦状态的文本框
============= */
.mdui-textfield-focus {
.mdui-textfield-input,
.mdui-textfield-input:hover {
border-bottom-color: @color-default-a700;
box-shadow: 0 1px 0 0 @color-default-a700;
}
.mdui-textfield-label,
.mdui-icon {
color: rgba(red(@color-default-a700), green(@color-default-a700), blue(@color-default-a700), .87);
}
}
/* 含有浮动标签的文本框
================ */
.mdui-textfield-floating-label {
.mdui-textfield-label {
color: rgba(0, 0, 0, 0.35);
transform: scale(1) translateY(27px);
}
&.mdui-textfield-focus,
&.mdui-textfield-not-empty {
.mdui-textfield-label {
color: rgba(0, 0, 0, 0.65);
transform: scale(0.75) translateY(0);
}
}
&.mdui-textfield-focus {
.mdui-textfield-label {
.mdui-text-color(@color-accent-default-name);
}
}
}
/* 可展开文本框,默认向右展开
========== */
.mdui-textfield-expandable {
width: 36px;
min-height: 36px;
padding: 1px 0;
transition: width .3s @animation-curve-default;
.mdui-icon {
bottom: 0;
padding: 0;
}
.mdui-textfield-input {
/* stylelint-disable-next-line */
width: calc(~"100% - 36px");
margin-left: 36px;
padding-right: 0;
}
.mdui-textfield-icon {
position: absolute;
top: 0;
left: 0;
}
.mdui-textfield-close {
position: absolute;
top: 0;
right: 0;
transform: scale(0);
}
&.mdui-textfield-expanded {
width: 100%;
.mdui-textfield-input {
padding-right: 36px;
}
.mdui-textfield-close {
transform: scale(1);
}
}
}
/* 表单验证不通过
=========== */
.mdui-textfield-invalid,
.mdui-textfield-invalid-html5 {
.mdui-textfield-input,
&.mdui-textfield-focus .mdui-textfield-input {
border-bottom-color: @color-red-a400 ;
box-shadow: 0 1px 0 0 @color-red-a400 ;
}
.mdui-textfield-label {
color: @color-red-a400 ;
}
&.mdui-textfield-floating-label {
.mdui-textfield-label {
color: rgba(red(@color-red-a400), green(@color-red-a400), blue(@color-red-a400), 0.35) ;
}
&.mdui-textfield-focus,
&.mdui-textfield-not-empty {
.mdui-textfield-label {
color: @color-red-a400 ;
}
}
}
.mdui-textfield-error {
visibility: visible;
&+.mdui-textfield-helper {
visibility: hidden;
}
}
}
/* 禁用表单
====== */
.mdui-textfield-disabled {
.mdui-textfield-label,
.mdui-textfield-input::-webkit-input-placeholder {
color: @color-black-disabled;
}
.mdui-textfield-input {
color: rgba(0, 0, 0, .42);
cursor: default;
}
.mdui-textfield-input {
border-bottom: 1px dashed rgba(0, 0, 0, .42);
}
}
/* 字数统计
====== */
.mdui-textfield-counter {
position: absolute;
right: 8px;
bottom: 8px;
height: 12px;
color: @color-black-secondary;
font-size: 12px;
line-height: 12px;
}
/**
* =============================================================================
* ************ Textfield dark ************
* =============================================================================
*/
.layout-theme({
// 输入框颜色
.mdui-textfield-input {
color: #fff;
border-bottom-color: rgba(255, 255, 255, .7);
&::-webkit-input-placeholder {
color: rgba(255, 255, 255, .5);
}
&:not([disabled]):hover {
border-bottom-color: rgba(255, 255, 255, 1);
box-shadow: 0 1px 0 0 rgba(255, 255, 255, 1);
}
}
// 图标颜色
.mdui-textfield {
.mdui-icon {
color: rgba(255, 255, 255, 0.7);
}
}
// 标签颜色
.mdui-textfield-label {
color: rgba(255, 255, 255, 0.7);
}
.mdui-textfield-floating-label {
.mdui-textfield-label {
color: rgba(255, 255, 255, 0.35);
}
}
// 错误文本颜色
.mdui-textfield-error {
color: @color-red-a400;
}
// 帮助文本颜色
.mdui-textfield-helper {
color: rgba(255, 255, 255, 0.7);
}
// 字数统计颜色
.mdui-textfield-counter {
color: @color-white-secondary;
}
// 聚焦状态
.mdui-textfield-focus {
.mdui-textfield-input,
.mdui-textfield-input:hover {
border-bottom-color: @color-default-a200;
box-shadow: 0 1px 0 0 @color-default-a200;
}
.mdui-textfield-label {
color: @color-default-a200;
}
}
// 禁用状态
.mdui-textfield-disabled {
.mdui-textfield-label,
.mdui-textfield-input::-webkit-input-placeholder {
color: @color-white-disabled;
}
.mdui-textfield-input {
color: @color-white-disabled;
}
.mdui-textfield-input {
border-bottom-color: rgba(255, 255, 255, .7);
}
}
});
/**
* =============================================================================
* ************ Textfield 强调色 ************
* =============================================================================
*/
& {
.loop-accent-theme(@counter-color) when (@counter-color > 0) {
.loop-accent-theme((@counter-color - 1));
@colorName: extract(@globalAccentColors, @counter-color);
.mdui-theme-accent-@{colorName} when not (@colorName = null) {
@colorA700: 'color-@{colorName}-a700';
@colorA200: 'color-@{colorName}-a200';
.mdui-textfield-focus {
.mdui-textfield-input {
border-bottom-color: @@colorA700;
box-shadow: 0 1px 0 0 @@colorA700;
}
.mdui-textfield-label,
.mdui-textfield-floating-label.mdui-textfield-focus .mdui-textfield-label,
.mdui-icon {
color: rgba(red(@@colorA700), green(@@colorA700), blue(@@colorA700), .87);
}
}
// 暗色主题
& {
.dark-mode() {
.mdui-textfield-focus {
.mdui-textfield-input {
border-bottom-color: @@colorA200;
box-shadow: 0 1px 0 0 @@colorA200;
}
.mdui-textfield-label,
.mdui-textfield-floating-label.mdui-textfield-focus .mdui-textfield-label,
.mdui-icon {
color: @@colorA200;
}
}
}
& when (@globalLayoutDark = true) {
&.mdui-theme-layout-dark {
.dark-mode();
}
}
& when (@globalLayoutAuto = true) {
@media (prefers-color-scheme: dark) {
&.mdui-theme-layout-auto {
.dark-mode();
}
}
}
}
}
}
.loop-accent-theme(length(@globalAccentColors));
}