WEBLEB
Início
Editor
Entrar
Pro
Português
English
Français
Español
Português
Deutsch
Italiano
हिंदी
Erro de senha saltitante
1091
Andev.web
Abrir no Editor
Publique Seu Código
Recomendado
20 June 2025
Modelo de painel de administração HTML
4 November 2024
página inicial para um site de portfólio
6 August 2025
Código de Mete
HTML
Copy
Andev Web
Enter new password
Must contain at least
characters.
Reset Password
CSS
Copy
* { 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); } .note { color: hsl(var(--hue), 10%, 70%); transition: color var(--trans-dur); } } /* Animations */ @keyframes bounce { from, to { transform: translate(-1em, -2.5em); } 16.67% { transform: translate(-1em, -1.75em) rotate(-15deg) translateX(-0.75em); } 33.33% { transform: translate(-1em, -5em) rotate(15deg); } 50% { transform: translate(-1em, -5em); } 66.67% { animation-timing-function: cubic-bezier(0.32, 0, 0.67, 0); transform: translate(-1em, -2em); } 83.33% { animation-timing-function: cubic-bezier(0.33, 1, 0.68, 1); transform: translate(-1em, -2.75em); } } @keyframes fly-in { from, 66.67% { animation-timing-function: cubic-bezier(0.32, 0, 0.67, 0); opacity: 0; transform: translateY(50%); } 83.33% { animation-timing-function: cubic-bezier(0.33, 1, 0.68, 1); opacity: 1; transform: translateY(-25%); } to { opacity: 1; transform: translateY(0); } } @keyframes wobble { from, 50%, to { box-shadow: 0 0 0 0.125em var(--error) inset, 0 0.25em 0 var(--error); transform: rotate(0); } 16.67% { box-shadow: 0 0 0 0.125em var(--error) inset, -0.25em 0.25em 0 var(--error); transform: rotate(-15deg); } 33.33% { box-shadow: 0 0 0 0.125em var(--error) inset, 0.25em -0.25em 0 var(--error); transform: rotate(15deg); } }
JS
Copy
"use strict"; window.addEventListener("DOMContentLoaded", () => { const pass = new PasswordForm("form"); }); class PasswordForm { /** * @param el CSS selector of the form */ constructor(el) { var _a; /** Minimum password length */ this.minLength = 6; this._invalid = false; this._message = ""; this.el = document.querySelector(el); (_a = this.el) === null || _a === void 0 ? void 0 : _a.addEventListener("submit", this.validate.bind(this)); this.minLengthDisplay(); } get invalid() { return this._invalid; } set invalid(value) { this._invalid = value; } get message() { return this._message; } set message(value) { this._message = value; } /** Display the minimum characters required. */ minLengthDisplay() { var _a; const reqEl = (_a = this.el) === null || _a === void 0 ? void 0 : _a.querySelector("[data-req]"); if (reqEl) { reqEl.textContent = `${this.minLength}`; } } /** * Check the input. * @param e Submit event */ validate(e) { var _a, _b, _c, _d; e.preventDefault(); this.invalid = ((_a = this.el) === null || _a === void 0 ? void 0 : _a.pass.value.length) < this.minLength; (_b = this.el) === null || _b === void 0 ? void 0 : _b.pass.setAttribute("aria-invalid", this.invalid); if (this.invalid) { this.message = Message.TooShort; } else { this.message = ""; (_c = this.el) === null || _c === void 0 ? void 0 : _c.pass.blur(); } const errorEl = (_d = this.el) === null || _d === void 0 ? void 0 : _d.querySelector("[data-error]"); if (errorEl) { errorEl.textContent = this.message; } } } var Message; (function (Message) { Message["TooShort"] = "Too short!"; })(Message || (Message = {}));