前言
灵感来自油管 传送门
看到 chatGPT 官网的登陆页面有这个样式,看着挺好看,所以就去找了下教程,并且自己优化了一点,纯 css 实现
基础
首先创建一个盒子用于存放 input
和 label
1 2 3 4
| <div class="inputBox"> <input type="text" placeholder=" " class="input" id="input-userName" /> <label for="input-userName" class="label">用户名</label> </div>
|
给他们加上样式
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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| body { display: flex; align-items: center; justify-content: center; width: 100%; height: 100vh; }
.inputBox { position: relative; }
.input { outline: none; border: 2px solid #000; padding: 5px; border-radius: 5px; }
.label { position: absolute; top: 50%; transform: translateY(-50%); white-space: nowrap; left: 15px; font-size: 12px; font-weight: bold; transition: all 0.2s; padding: 0 3px; }
|
添加上获得焦点样式,
.input:not(:placeholder-shown).input:not(:focus) ~ .label
的意思是:
当输入框不具有占位符、且不处于焦点状态时选择其后的兄弟元素中类名为 “label” 的元素
1 2 3 4 5 6 7 8 9
| .input:focus ~ .label, .input:not(:placeholder-shown).input:not(:focus) ~ .label { top: 1.5px; left: 10px; background: #fff; }
|
至此,最基本的样子就有了,只需要再加上一点点的样式
进阶
获得焦点的颜色样式
1 2 3 4 5 6 7 8 9
| .input:focus { border: 2px solid rgb(0, 200, 255); }
.input:focus ~ .label { color: rgb(0, 200, 255); }
|