react-float-input

碰到项目需要给输入框一个小效果类似这个

floatInput

大概思路将label绝对定位到input输入框内,点击input框后用transform将label缩小并上移
欢迎去npm下载使用插件 react-float-input 😊

1
2
$ yarn add react-float-input
$ npm install react-float-input

react dom结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
return (
<div className="control">
<input
type={type}
className={`input ${className}`}
onChange={that.handleNumberChange}
data-value={dataValueLength}
value={inputValue}
/>
<label htmlFor="" className="label">
{label}
</label>
</div>
);

css 核心代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
.input {
z-index: 0;
height: 48px;
padding-top: 20px;
box-sizing: border-box;
border: 1px solid rgba(232, 234, 239, 1);
box-shadow: 0 2px 4px 0 rgba(32, 49, 100, 0.05);
//点击出现效果
&:focus + .label {
transform: translateY(-10px) scale(0.85);
}
//用data-value这个钩子,当其设定值等于0时,也就是删除input内输入时,复原初始效果
&:not([data-value='0']) + .label {
transform: translateY(-10px) scale(0.85);
}

.label {
position: absolute;
top: 14px;
left: 12px;
z-index: 2;
height: 20px;
font-size: 14px;
line-height: 20px;
color: #000;
pointer-events: none; // 穿透label获取焦点用
cursor: text;
transition: all 0.2s ease-out;
transform-origin: top left;
}

有兴趣可以尝试下 吼吼吼。。。

PenZ wechat
交个朋友吧
点滴分享,您的支持将极大的鼓励我!