typescript+css实现密码输入框输入不正确验证提示动画效果代码
代码语言:html
所属分类:验证
代码描述:typescript+css实现密码输入框输入不正确验证提示动画效果代码确提示动画效果代码
代码标签: typescript css 密码 输入框 输入 不正确 验证 提示 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover"> <link rel='stylesheet' href='https://fonts.googleapis.com/css2?family=DM+Sans:ital,opsz,wght@0,9..40,100..1000;1,9..40,100..1000&display=swap'> <style> * { border: 0; box-sizing: border-box; margin: 0; padding: 0; } :root { --hue: 223; --bg: hsl(var(--hue),10%,90%); --fg: hsl(var(--hue),10%,10%); --focus: hsl(var(--hue),90%,50%); --error: hsl(3,90%,40%); --trans-dur: 0.3s; --trans-timing1: cubic-bezier(0.65,0,0.35,1); --trans-timing2: cubic-bezier(0.65,0,0.35,1.5); font-size: calc(14px + (30 - 14) * (100vw - 280px) / (3840 - 280)); } body, button, input { color: var(--fg); font: 1em/1.5 "DM Sans", sans-serif; } body { background-color: var(--bg); display: flex; height: 100vh; transition: background-color var(--trans-dur), color var(--trans-dur); } button { background-color: var(--fg); border-radius: 0.5em; color: var(--bg); cursor: pointer; display: block; padding: 0.75em 1em; width: 100%; transition: background-color var(--trans-dur), color var(--trans-dur); -webkit-appearance: none; appearance: none; } button:hover { background-color: var(--focus); } form { margin: auto; padding: 3em 0; } p { margin-bottom: 1.5em; } small { font-size: 0.75em; line-height: 2; } .field { margin-bottom: 1.5em; padding-bottom: 0.375em; position: relative; } .field__error, .field__label { position: absolute; } .field__error { color: var(--error); top: 100%; left: 0; transition: color var(--trans-dur); } .field__input, .field__label { -webkit-tap-highlight-color: transparent; } .field__input { background-color: white; border-radius: 0.5em; box-shadow: 0 0 0 0.125em white inset, 0 0.25em 0 hsl(var(--hue), 10%, 70%); outline: transparent; padding: 0.75em 1em; min-width: 15em; -webkit-appearance: none; appearance: none; transition: background-color var(--trans-dur), box-shadow var(--trans-dur) var(--trans-timing1), color var(--trans-dur), transform var(--trans-dur) var(--trans-timing1); } .field__input:hover { box-shadow: 0 0 0 0.125em hsl(var(--hue), 10%, 70%) inset, 0 0.25em 0 hsl(var(--hue), 10%, 70%); transform: scale(1.08, 1.08); } .field__input:focus-visible { box-shadow: 0 0 0 0.125em var(--focus) inset, 0 0.25em 0 var(--focus); transform: scale(1, 1); } .field__input:active { box-shadow: 0 0 0 0.25em hsl(var(--hue), 10%, 70%) inset, 0 0 0 hsl(var(--hue), 10%, 70%); transform: translateY(0.375em); } .field__input[aria-invalid=true] { animation: wobble calc(var(--trans-dur) * 3) var(--trans-timing1); box-shadow: 0 0 0 0.125em var(--error) inset, 0 0.25em 0 var(--error); } .field__input[aria-invalid=true] + .field__error { animation: fly-in calc(var(--trans-dur) * 3) var(--trans-timing1); } .field__label { pointer-events: none; top: 0.75em; left: 1em; transition: transform var(--trans-dur) var(--trans-timing2); z-index: 1; } .field:has(.field__input[aria-invalid=true]) .field__label { animation: bounce calc(var(--trans-dur) * 3) var(--trans-timing1); } .field:has(.field__input:focus-visible) .field__label, .field:has(.field__input:not(:placeholder-shown)) .field__label { pointer-events: auto; transform: translate(-1em, -2.5em); } .field:has(.field__input:placeholder-shown:active) .field__label { transform: translate(0.2em, 0.375em); transition-timing-function: var(--trans-timing1); } .note { color: hsl(var(--hue), 10%, 30%); transition: color var(--trans-dur); } /* Dark theme */ @media (prefers-color-scheme: dark) { :root { --bg: hsl(var(--hue),10%,10%); --fg: hsl(var(--hue),10%,90%); --focus: hsl(var(--hue),90%,70%); --error: hsl(3,90%,60%); } .field__input { background-color: hsl(var(--hue), 10%, 30%); box-shadow: 0 0 0 0.125em hsl(var(--hue), 10%, 30%) inset, 0 0.25em 0 black; } .field__input:hover { box-shadow: 0 0 0 0.125em black inset, 0 0.25em 0 black; } .field__input:focus-visible { box-shadow: 0 0 0 0.125em var(--focus) inset, 0 0.25em 0 var(--focus); } .field__input:active { box-shadow: 0 0 0 0.25em black inset, 0 0 0 black; } .field__input[aria-invalid=true] { box-shadow: 0 0 0 0.125em var(--error) inset, 0 0.25em 0 var(--error); } .........完整代码请登录后点击上方下载按钮下载查看
网友评论0