密码强度检测器
代码语言:html
所属分类:表单美化
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<style>
@import url("https://fonts.googleapis.com/css?family=Playfair+Display&display=swap");
body {
font-family: "Playfair Display", serif;
}
h1 {
color: #f7c926;
text-align: center;
font-size: 27px;
}
#wrapper {
width: 100%;
min-height: 100vh;
height: 100%;
display: -webkit-box;
display: flex;
-webkit-box-pack: center;
justify-content: center;
-webkit-box-align: center;
align-items: center;
background-color: #151414;
}
#box {
max-width: 750px;
width: 100%;
}
.pass-wrapper {
display: -webkit-box;
display: flex;
-webkit-box-pack: center;
justify-content: center;
margin: 0 0 20px 0;
}
#svg {
width: 300px;
height: 300px;
display: block;
padding: 20px;
}
#input-wrapper {
position: relative;
height: 40px;
}
#input-wrapper label {
display: block;
width: 100%;
pointer-events: none;
color: #f7c926;
position: absolute;
bottom: 10px;
-webkit-transition-duration: 0.3s;
transition-duration: 0.3s;
font-size: 18px;
opacity: 1;
left: 10px;
}
#input-wrapper #pwd:valid + label, #input-wrapper #pwd:focus + label {
bottom: 35px;
font-size: 14px;
opacity: 0;
}
#pwd {
overflow: hidden;
display: block;
width: 100%;
border: none;
outline: none;
background: rgba(247, 201, 38, 0.2);
caret-color: #FFFFFF;
font-size: 25px;
color: #f7c926;
border-radius: 7px;
padding: 5px 10px;
box-sizing: border-box;
line-height: 40px;
height: 100%;
border: 3px solid #f7c926;
}
.levels-container {
width: 60%;
box-sizing: border-box;
padding: 10px;
margin: 10px 0 0 0;
border-radius: 7px;
pointer-events: none;
display: -webkit-box;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
flex-direction: column;
-webkit-box-pack: center;
justify-content: center;
}
.levels-container .level-line {
margin: 15px 0;
-webkit-box-align: center;
align-items: center;
display: -webkit-box;
display: flex;
color: rgba(255, 255, 255, 0);
}
.levels-container .level-line .line-label {
width: 30%;
color: #f7c926;
padding: 0 20px 0 0;
text-align: center;
-webkit-transition-duration: 0.3s;
transition-duration: 0.3s;
}
.levels-container .level-line .line-progression {
width: 50%;
position: relative;
height: 5px;
-webkit-animation: glowBar 0.6s ease-in-out infinite alternate;
animation: glowBar 0.6s ease-in-out infinite alternate;
}
.levels-container .level-line .line-progression:before, .levels-container .level-line .line-progression:after {
content: '';
display: block;
height: 5px;
position: absolute;
border-radius: 2px;
top: 50%;
left: 0;
-webkit-transform: translateY(-50%);
transform: translateY(-50%);
}
.levels-container .level-line .line-progression:before {
background-color: rgba(247, 201, 38, 0.2);
width: 100%;
}
.levels-container .level-line .line-progression:after {
-webkit-transition-duration: 0.9s;
transition-duration: 0.9s;
background-color: #f7c926;
-webkit-animation-duration: 0.8s;
animation-duration: 0.8s;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
border-style: solid;
border-width: 0px;
}
[data-level="0"] .line-progression:after {
width: 2%;
border-width: 0px;
}
[data-level="1"] .line-progression:after {
width: 33%;
-webkit-animation-name: pulse1;
animation-name: pulse1;
border-color: rgba(255, 255, 255, 0.3);
border-width: 1px;
}
[data-level="2"] .line-progression:after {
width: 66%;
-webkit-animation-name: pulse2;
animation-name: pulse2;
border-color: rgba(255, 255, 255, 0.6);
border-width: 1px;
}
[data-level="3"] {
color: #f7c926 !important;
}
[data-level="3"] .line-label {
-webkit-animation: glow 0.6s ease-in-out infinite alternate;
animation: glow 0.6s ease-in-out infinite alternate;
color: #FFFFFF !important;
}
[data-level="3"] .line-progression:after {
width: 100%;
-webkit-animation-name: pulse3;
animation-name: pulse3;
border-color: white;
border-width: 1px !important;
-webkit-animation-duration: 2s !important;
animation-duration: 2s !important;
color: #FFFFFF;
}
@-webkit-keyframes pulse1 {
0% {
box-shadow: 0px 0px 0px 0px white;
}
50% {
box-shadow: 0px 0px 30px 0px white;
}
100% {
box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0);
}
}
@keyframes pulse1 {
0% {
box-shadow: 0px 0px 0px 0px white;
}
50% {
box-shadow: 0px 0px 30px 0px white;
}
100% {
box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0);
}
}
@-webkit-keyframes pulse2 {
0% {
box-shadow: 0px 0px 0px 0px white;
}
50% {
box-shadow: 0px 0px 30px 5px white;
}
100% {
box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0);
}
}
@keyframes pulse2 {
0% {
box-shadow: 0px 0px 0px 0px white;
}
50% {
box-shadow: 0px 0px 30px 5px white;
}
100% {
box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0);
}
}
@-webkit-keyframes pulse3 {
0% {
box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.8);
}
100% {
box-shadow: 0px 0px 6px 10px rgba(255, 255, 255, 0);
}
}
@keyframes pulse3 {
0% {
box-shadow: 0px 0px 0px 0px rgba(255, 255, 255, 0.8);
}
100% {
box-shadow: 0px 0px 6px 10px rgba(255, 255, 255, 0);
}
}
@-webkit-keyframes glow {
from {
text-shadow: 0 0 5px #f7c926, 0 0 10px #f7c926, 0 0 15px #f7c926, 0 0 30px #f7c926, 0 0 45px #f7c926, 0 0 60px #f7c926, 0 0 75px #f7c926;
}
to {
text-shadow: 0 0 10px #f7c926, 0 0 15px #f7c926, 0 0 20px #f7c926, 0 0 25px #f7c926, 0 0 30px #f7c926, 0 0 35px #f7c926, 0 0 40px #f7c926;
}
}
@keyframes glow {
from {
text-shadow: 0 0 5px #f7c926, 0 0 10px #f7c926, 0 0 15px #f7c926, 0 0 30px #f7c926, 0 0 45px #f7c926, 0 0 60px #f7c926, 0 0 75px #f7c926;
}
to {
text-shadow: 0 0 10px #f7c926, 0 0 15px #f7c926, 0 0 20px #f7c926, 0 0 25px #f7c926, 0 0 30px #f7c926, 0 0 35px #f7c926, 0 0 40px #f7c926;
}
}
@-webkit-keyframes glowBar {
from {
box-shadow: 0 0 5px currentColor, 0 0 10px currentColor, 0 0 15px currentColor, 0 0 30px currentColor, 0 0 45px currentColor, 0 0 60px currentColor, 0 0 75px currentColor;
}
to {
box-shadow: 0 0 10px currentColor, 0 0 15px currentColor, 0 0 20px currentColor, 0 0 25px currentColor, 0 0 30px currentColor, 0 0 35px currentColor, 0 0 40px currentColor;
}
}
@keyframes glowBar {
from {
box-shadow: 0 0 5px currentColor, 0 0 10px currentColor, 0 0 15px currentColor, 0 0 30px currentColor, 0 0 45px currentColor, 0 0 60px currentColor, 0 0 75px currentColor;
}
to {
box-shadow: 0 0 10px currentColor, 0 0 15px currentColor, 0 0 20px currentColor, 0 0 25px currentColor, 0 0 30px currentColor, 0 0 35px currentColor, 0 0 40px currentColor;
}
}
</style>
</head>
<body translate="no">
<div id="wrapper">
<div id="box">
<div class="side">
<h1>Build your (strong) password here:</h1>
</div>
<div class="pass-wrapper">
<svg id="svg" viewBox="0 0 105.83333 105.83334">
</svg>
<div class="levels-container">
<div data-carac="length" data-level="0" class="level-line">
<div class="line-label">Length</div>
<div class="line-progression"></div>
</div>
<div data-carac="uppercases" data-level="0" class="level-line">
<div class="line-label">Capitals</div>
<div class="line-progression"></div>
</div>
<div data-carac="specials" data-level="0" class="level-line">
<div class="line-label">Specials</div>
<div class="line-progression"></div>
</div>
<div data-carac="numbers" data-level="0" class="level-line">
<div class="line-label">Numbers</div>
<div class="line-progression"></div>
</div>
</div>
</div>
<div class="side">
<div id="input-wrapper">
<input required id="pwd" type="text">
<label>type here...</label>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="http://repo.bfw.wiki/bfwrepo/js/snap.svg-min.js"></script>
<script >
console.clear();
var s = Snap("#svg");
const config = {
strokeColor: '#734b00',
fillShield: '#734b00',
strokeDarkColor: '#f7c926',
fillColor: '#f7c926',
shadow: s.filter(Snap.filter.shadow(0, 0, 2, '#ffffff', 0.3)),
strengthSteps: {
length: [0, 6, 10, 16],
specials: [0, 2, 4, 6],
numbers: [0, 2, 4, 6],
uppercases: [0, 2, 4, 6] } };
class Draw {
constructor(strokeColor, fillColor, strokeDarkColor, fillShield, shadow) {
this.fillShield = fillShield;
this.strokeColor = strokeColor;
this.fillColor = fillColor;
this.strokeDarkColor = strokeDarkColor;
this.shadow = shadow;
}
paths() {
return [
{
carac: 'length',
assets: [
{
name: 'bottom',
d: [
.........完整代码请登录后点击上方下载按钮下载查看
网友评论0