parent
d17a270517
commit
4796478ce3
Binary file not shown.
Binary file not shown.
@ -0,0 +1,682 @@
|
|||||||
|
/* 基本重置 */
|
||||||
|
body, h1, h2, p, a {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
text-decoration: none;
|
||||||
|
color: rgb(255, 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 基础字体和背景 */
|
||||||
|
body {
|
||||||
|
font-family: 'Arial', sans-serif;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: #fff;
|
||||||
|
padding: 20px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
padding: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
background-color: #fe5b56;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px 0;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 输入框和按钮样式 */
|
||||||
|
input[type="text"] {
|
||||||
|
padding: 10px;
|
||||||
|
margin: 10px 0;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 5px;
|
||||||
|
width: calc(100% - 22px); /* 减去padding和border的宽度 */
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
padding: 10px 20px;
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: #fff;
|
||||||
|
border: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: #c9302c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 动画效果 */
|
||||||
|
@keyframes fadeInDown {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
header, main, footer {
|
||||||
|
animation: fadeInDown 1s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
/* 针对小屏幕的样式调整 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 动态阴影效果 */
|
||||||
|
@keyframes shadowPulse {
|
||||||
|
0%, 100% { box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); }
|
||||||
|
50% { box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); }
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
animation: shadowPulse 1.5s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文字跳动动画*/
|
||||||
|
h1 {
|
||||||
|
animation: jump 1.5s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes jump {
|
||||||
|
0%, 100% { transform: translateY(0); }
|
||||||
|
50% { transform: translateY(-10px); }
|
||||||
|
}
|
||||||
|
/* 输入框和按钮的悬停效果*/
|
||||||
|
input[type="text"]:hover, button:hover {
|
||||||
|
border: 1px solid #d9534f;
|
||||||
|
box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
/*按钮点击动画*/
|
||||||
|
button:active {
|
||||||
|
transform: scale(0.95);
|
||||||
|
background-color: #b52b27;
|
||||||
|
}
|
||||||
|
/*光晕效果*/
|
||||||
|
.glow {
|
||||||
|
animation: glowEffect 1.5s infinite alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes glowEffect {
|
||||||
|
from {
|
||||||
|
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #d9534f, 0 0 20px #d9534f, 0 0 25px #d9534f, 0 0 30px #d9534f;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
text-shadow: 0 0 10px #fff, 0 0 20px #d9534f, 0 0 30px #d9534f, 0 0 40px #d9534f, 0 0 50px #d9534f, 0 0 60px #d9534f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* 3D翻转效果*/
|
||||||
|
.feature {
|
||||||
|
perspective: 1000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature:hover .feature-inner {
|
||||||
|
transform: rotateY(360deg);
|
||||||
|
transition: transform 15s;
|
||||||
|
}
|
||||||
|
/*视差滚动效果*/
|
||||||
|
|
||||||
|
.parallax-section {
|
||||||
|
background-attachment: fixed;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
/* 粒子背景*/
|
||||||
|
.particle-background {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.particle {
|
||||||
|
fill: rgba(255, 255, 255, 0.8);
|
||||||
|
animation: moveParticles 10s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes moveParticles {
|
||||||
|
0% { transform: translate(0, 0); }
|
||||||
|
100% { transform: translate(100px, 100px); }
|
||||||
|
}
|
||||||
|
/*线条动画*/
|
||||||
|
.dynamic-line {
|
||||||
|
stroke-dasharray: 300;
|
||||||
|
stroke-dashoffset: 300;
|
||||||
|
animation: dash 3s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes dash {
|
||||||
|
from {
|
||||||
|
stroke-dashoffset: 300;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*光晕效果*/
|
||||||
|
button {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
button::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 300%;
|
||||||
|
height: 200%;
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
transform: translate(-50%, -50%) rotate(45deg);
|
||||||
|
transition: all 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover::before {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
/*闪烁效果*/
|
||||||
|
@keyframes blinker {
|
||||||
|
50% { opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.blink-text {
|
||||||
|
animation: blinker 1s linear infinite;
|
||||||
|
}
|
||||||
|
/* 打字机效果*/
|
||||||
|
.typewriter {
|
||||||
|
font-family: monospace;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 100%;
|
||||||
|
animation: typewriter 4s steps(40) 1s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes typewriter {
|
||||||
|
0% { width: 0; }
|
||||||
|
100% { width: 100%; }
|
||||||
|
}
|
||||||
|
/* 3D文字效果*/
|
||||||
|
.three-d-text {
|
||||||
|
transform: rotateX(45deg) rotateY(45deg);
|
||||||
|
transform-style: preserve-3d;
|
||||||
|
perspective: 600px;
|
||||||
|
}
|
||||||
|
/*渐变文字效果*/
|
||||||
|
.gradient-text {
|
||||||
|
background: -webkit-linear-gradient(45deg, #d9534f, #fe5b56);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
}
|
||||||
|
/*动态阴影效果*/
|
||||||
|
.dynamic-shadow {
|
||||||
|
transition: box-shadow 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynamic-shadow:hover {
|
||||||
|
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*光点闪烁效果*/
|
||||||
|
.sparkle-point {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: rgba(255, 255, 255, 0.8);
|
||||||
|
pointer-events: none;
|
||||||
|
animation: sparkle 2s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes sparkle {
|
||||||
|
0% { opacity: 0; transform: scale(0); }
|
||||||
|
50% { opacity: 1; transform: scale(1); }
|
||||||
|
100% { opacity: 0; transform: scale(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*动态渲染效果*/
|
||||||
|
.render-effect {
|
||||||
|
animation: renderEffect 5s infinite alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes renderEffect {
|
||||||
|
0%, 100% { filter: grayscale(0); }
|
||||||
|
50% { filter: grayscale(1); }
|
||||||
|
}
|
||||||
|
/* 全屏背景动画*/
|
||||||
|
body {
|
||||||
|
background: linear-gradient(-45deg, #000, #7c7c7c, #000);
|
||||||
|
background-size: 400% 1000%;
|
||||||
|
animation: gradientBG 15s ease infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes gradientBG {
|
||||||
|
0% { background-position: 0% 50%; }
|
||||||
|
50% { background-position: 100% 50%; }
|
||||||
|
100% { background-position: 0% 50%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*线条动画*/
|
||||||
|
.waves {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 90px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@keyframes backgroundGradient {
|
||||||
|
0% { background-position: 0% 50%; }
|
||||||
|
50% { background-position: 100% 50%; }
|
||||||
|
100% { background-position: 0% 50%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
animation: backgroundGradient 15s ease infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #fdfdfd;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.svg-background {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: -1; /* 确保SVG在内容的后面 */
|
||||||
|
}
|
||||||
|
@keyframes colorShift {
|
||||||
|
0% { background-color: #d9534f; }
|
||||||
|
50% { background-color: #fe5b56; }
|
||||||
|
100% { background-color: #d9534f; }
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
animation: colorShift 3s infinite;
|
||||||
|
}
|
||||||
|
.blink {
|
||||||
|
animation: blink 1s step-start infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
50% { opacity: 0; }
|
||||||
|
}
|
||||||
|
input[type="text"]:hover {
|
||||||
|
background-color: rgba(217, 83, 79, 0.1);
|
||||||
|
}
|
||||||
|
.parallax-section {
|
||||||
|
background-image: url('your-image.jpg');
|
||||||
|
background-attachment: fixed;
|
||||||
|
background-size: cover;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
/*字体动态改变*/
|
||||||
|
h2 {
|
||||||
|
transition: font-size 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2:hover {
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
/*动态内容加载*/
|
||||||
|
.main-content {
|
||||||
|
animation: fadeIn 1s ease-in;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadeIn {
|
||||||
|
from { opacity: 0; }
|
||||||
|
to { opacity: 1; }
|
||||||
|
}
|
||||||
|
/* 旋转效果*/
|
||||||
|
footer {
|
||||||
|
transition: transform 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer:hover {
|
||||||
|
transform: rotate(5deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynamic-line {
|
||||||
|
stroke: #d9534f;
|
||||||
|
stroke-width: 2;
|
||||||
|
fill: none;
|
||||||
|
animation: dash 5s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes dash {
|
||||||
|
0% { stroke-dasharray: 0, 100; }
|
||||||
|
100% { stroke-dasharray: 100, 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
button {
|
||||||
|
perspective: 1000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
transform: rotateX(10deg) rotateY(10deg);
|
||||||
|
transition: transform 0.3s;
|
||||||
|
}
|
||||||
|
/*文字打字效果*/
|
||||||
|
.typewriter {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
border-right: .15em solid orange;
|
||||||
|
animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes typing {
|
||||||
|
from { width: 0; }
|
||||||
|
to { width: 100%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink-caret {
|
||||||
|
from, to { border-color: transparent; }
|
||||||
|
50% { border-color: orange; }
|
||||||
|
}
|
||||||
|
/*旋转加载*/
|
||||||
|
.loading {
|
||||||
|
border: 8px solid #f3f3f3;
|
||||||
|
border-top: 8px solid #3498db;
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
animation: spin 2s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes spin {
|
||||||
|
0% { transform: rotate(0deg); }
|
||||||
|
100% { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
/*字体阴影动态*/
|
||||||
|
h2 {
|
||||||
|
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||||
|
transition: text-shadow 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2:hover {
|
||||||
|
text-shadow: 0 0 20px rgba(255, 0, 0, 1);
|
||||||
|
}
|
||||||
|
/*彩色阴影*/
|
||||||
|
button {
|
||||||
|
box-shadow: 0 4px 20px rgba(217, 83, 79, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
box-shadow: 0 8px 30px rgba(217, 83, 79, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.particle-background {
|
||||||
|
background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 10%, transparent 10%);
|
||||||
|
animation: particleAnimation 5s infinite;
|
||||||
|
}
|
||||||
|
/*随机粒子背景*/
|
||||||
|
@keyframes particleAnimation {
|
||||||
|
0% { background-size: 0%; }
|
||||||
|
100% { background-size: 100%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*光环效果*/
|
||||||
|
header {
|
||||||
|
box-shadow: 0 0 20px rgba(217, 83, 79, 0.6);
|
||||||
|
}
|
||||||
|
/*悬浮按钮效果*/
|
||||||
|
button {
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*玻璃效果*/
|
||||||
|
main {
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**/
|
||||||
|
.result-box {
|
||||||
|
background-color: #ff6e7a; /* 淡红色背景,与按钮颜色呼应 */
|
||||||
|
border: 1px solid #d9534f; /* 边框颜色与头部和底部颜色一致 */
|
||||||
|
padding: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
border-radius: 5px; /* 圆角边框 */
|
||||||
|
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); /* 轻微的立体阴影效果 */
|
||||||
|
animation: fadeInDown 1s ease-in-out; /* 淡入下移动画 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 结果文本框样式 */
|
||||||
|
.result-textarea {
|
||||||
|
background-color: #f5f5f5; /* 浅灰色背景,更好的对比度 */
|
||||||
|
border: 1px solid #ddd; /* 边框颜色与输入框一致 */
|
||||||
|
border-radius: 5px; /* 圆角边框 */
|
||||||
|
padding: 10px;
|
||||||
|
width: 100%; /* 宽度与输入框一致 */
|
||||||
|
box-sizing: border-box; /* 盒模型宽度包含padding和border */
|
||||||
|
resize: none; /* 禁止调整大小 */
|
||||||
|
font-family: 'Arial', sans-serif; /* 与页面字体一致 */
|
||||||
|
color: #333; /* 文本颜色与页面一致 */
|
||||||
|
line-height: 1.5; /* 行高 */
|
||||||
|
overflow-y: auto; /* 超出内容显示滚动条 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.result-box {
|
||||||
|
width: auto; /* 小屏幕上宽度自动调整 */
|
||||||
|
margin-left: 10px; /* 较小的外边距 */
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
input[type="text"] {
|
||||||
|
width: calc(100% - 22px); /* 调整输入框宽度 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 悬停效果,使结果框在鼠标悬停时有阴影变化 */
|
||||||
|
.result-box:hover {
|
||||||
|
box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 点击效果,使结果框在被点击时有压缩效果 */
|
||||||
|
.result-box:active {
|
||||||
|
transform: translateY(2px);
|
||||||
|
}
|
||||||
|
/* 显示动画 */
|
||||||
|
@keyframes fadeInDown {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 隐藏动画 */
|
||||||
|
@keyframes fadeOutUp {
|
||||||
|
from {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 展开动画 */
|
||||||
|
@keyframes expand {
|
||||||
|
from {
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
height: 200px; /* 根据需要调整高度 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.result-box {
|
||||||
|
display: none; /* 初始时隐藏 */
|
||||||
|
background-color: #f8d7da;
|
||||||
|
border: 1px solid #d9534f;
|
||||||
|
padding: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
|
||||||
|
animation-fill-mode: forwards; /* 保持动画结束状态 */
|
||||||
|
overflow: hidden; /* 隐藏内容超出部分 */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.result-box:active {
|
||||||
|
animation: ripple 0.5s forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes gradientBG {
|
||||||
|
0% { background-position: 0% 50%; }
|
||||||
|
50% { background-position: 100% 50%; }
|
||||||
|
100% { background-position: 0% 50%; }
|
||||||
|
}
|
||||||
|
.result-box {
|
||||||
|
background-size: 200% 200%;
|
||||||
|
animation: gradientBG 5s ease infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@keyframes textBounce {
|
||||||
|
0%, 100% { transform: translateY(0); }
|
||||||
|
50% { transform: translateY(-5px); }
|
||||||
|
}
|
||||||
|
.result-textarea:hover {
|
||||||
|
animation: textBounce 0.5s infinite;
|
||||||
|
}
|
||||||
|
@keyframes borderBounce {
|
||||||
|
0%, 100% { border: 1px solid #d9534f; }
|
||||||
|
50% { border: 2px solid #ff6e7a; }
|
||||||
|
}
|
||||||
|
.result-box:hover {
|
||||||
|
animation: borderBounce 1s infinite;
|
||||||
|
}
|
||||||
|
@keyframes backgroundBlink {
|
||||||
|
0%, 100% { background-color: #ff6e7a; }
|
||||||
|
50% { background-color: #d9534f; }
|
||||||
|
}
|
||||||
|
.result-box:hover {
|
||||||
|
animation: backgroundBlink 1s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes typewriter {
|
||||||
|
0% { width: 0; }
|
||||||
|
100% { width: 100%; }
|
||||||
|
}
|
||||||
|
.result-textarea {
|
||||||
|
animation: typewriter 3s steps(30, end) forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-box {
|
||||||
|
background-image: linear-gradient(135deg, #ff6e7a, #d9534f);
|
||||||
|
}
|
||||||
|
.result-textarea {
|
||||||
|
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-box, .result-textarea {
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-box:hover {
|
||||||
|
background-image: linear-gradient(135deg, #ff7e8a, #e95a5f);
|
||||||
|
}
|
||||||
|
|
||||||
|
.result-box:active {
|
||||||
|
transform: scale(0.98);
|
||||||
|
}
|
||||||
|
@keyframes textGlow {
|
||||||
|
0%, 100% { color: #333; }
|
||||||
|
50% { color: #555; }
|
||||||
|
}
|
||||||
|
.result-textarea {
|
||||||
|
animation: textGlow 2s infinite;
|
||||||
|
}
|
||||||
|
.result-box {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
.result-box::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
z-index: 1;
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.3s ease;
|
||||||
|
}
|
||||||
|
.result-box:hover::before {
|
||||||
|
animation: ripple 1.5s infinite;
|
||||||
|
}
|
||||||
|
@keyframes ripple {
|
||||||
|
0% {
|
||||||
|
transform: scale(0);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(1.5);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@keyframes bounce {
|
||||||
|
0%, 100% { transform: translateY(0); }
|
||||||
|
50% { transform: translateY(-10px); }
|
||||||
|
}
|
||||||
|
.result-box {
|
||||||
|
animation: bounce 2s infinite ease-in-out;
|
||||||
|
}
|
||||||
|
@keyframes shadowSpread {
|
||||||
|
0%, 100% { box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); }
|
||||||
|
50% { box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2); }
|
||||||
|
}
|
||||||
|
.result-box:hover {
|
||||||
|
animation: shadowSpread 2s infinite;
|
||||||
|
}
|
@ -0,0 +1,568 @@
|
|||||||
|
/* 基本重置 */
|
||||||
|
body, h1, h2, p, a {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
text-decoration: none;
|
||||||
|
color: rgb(255, 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 基础字体和背景 */
|
||||||
|
body {
|
||||||
|
font-family: 'Arial', sans-serif;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: #fff;
|
||||||
|
padding: 20px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
padding: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
background-color: #fe5b56;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px 0;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 输入框和按钮样式 */
|
||||||
|
input[type="text"] {
|
||||||
|
padding: 10px;
|
||||||
|
margin: 10px 0;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 5px;
|
||||||
|
width: calc(100% - 22px); /* 减去padding和border的宽度 */
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
padding: 10px 20px;
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: #fff;
|
||||||
|
border: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: #c9302c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 动画效果 */
|
||||||
|
@keyframes fadeInDown {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
header, main, footer {
|
||||||
|
animation: fadeInDown 1s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
/* 针对小屏幕的样式调整 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 动态阴影效果 */
|
||||||
|
@keyframes shadowPulse {
|
||||||
|
0%, 100% { box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); }
|
||||||
|
50% { box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); }
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
animation: shadowPulse 1.5s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文字跳动动画*/
|
||||||
|
h1 {
|
||||||
|
animation: jump 1.5s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes jump {
|
||||||
|
0%, 100% { transform: translateY(0); }
|
||||||
|
50% { transform: translateY(-10px); }
|
||||||
|
}
|
||||||
|
/* 输入框和按钮的悬停效果*/
|
||||||
|
input[type="text"]:hover, button:hover {
|
||||||
|
border: 1px solid #d9534f;
|
||||||
|
box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
/*按钮点击动画*/
|
||||||
|
button:active {
|
||||||
|
transform: scale(0.95);
|
||||||
|
background-color: #b52b27;
|
||||||
|
}
|
||||||
|
/*光晕效果*/
|
||||||
|
.glow {
|
||||||
|
animation: glowEffect 1.5s infinite alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes glowEffect {
|
||||||
|
from {
|
||||||
|
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #d9534f, 0 0 20px #d9534f, 0 0 25px #d9534f, 0 0 30px #d9534f;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
text-shadow: 0 0 10px #fff, 0 0 20px #d9534f, 0 0 30px #d9534f, 0 0 40px #d9534f, 0 0 50px #d9534f, 0 0 60px #d9534f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* 3D翻转效果*/
|
||||||
|
.feature {
|
||||||
|
perspective: 1000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature:hover .feature-inner {
|
||||||
|
transform: rotateY(360deg);
|
||||||
|
transition: transform 15s;
|
||||||
|
}
|
||||||
|
/*视差滚动效果*/
|
||||||
|
|
||||||
|
.parallax-section {
|
||||||
|
background-attachment: fixed;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
/* 粒子背景*/
|
||||||
|
.particle-background {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.particle {
|
||||||
|
fill: rgba(255, 255, 255, 0.8);
|
||||||
|
animation: moveParticles 10s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes moveParticles {
|
||||||
|
0% { transform: translate(0, 0); }
|
||||||
|
100% { transform: translate(100px, 100px); }
|
||||||
|
}
|
||||||
|
/*线条动画*/
|
||||||
|
.dynamic-line {
|
||||||
|
stroke-dasharray: 300;
|
||||||
|
stroke-dashoffset: 300;
|
||||||
|
animation: dash 3s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes dash {
|
||||||
|
from {
|
||||||
|
stroke-dashoffset: 300;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*光晕效果*/
|
||||||
|
button {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
button::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 300%;
|
||||||
|
height: 200%;
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
transform: translate(-50%, -50%) rotate(45deg);
|
||||||
|
transition: all 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover::before {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
/*闪烁效果*/
|
||||||
|
@keyframes blinker {
|
||||||
|
50% { opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.blink-text {
|
||||||
|
animation: blinker 1s linear infinite;
|
||||||
|
}
|
||||||
|
/* 打字机效果*/
|
||||||
|
.typewriter {
|
||||||
|
font-family: monospace;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 100%;
|
||||||
|
animation: typewriter 4s steps(40) 1s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes typewriter {
|
||||||
|
0% { width: 0; }
|
||||||
|
100% { width: 100%; }
|
||||||
|
}
|
||||||
|
/* 3D文字效果*/
|
||||||
|
.three-d-text {
|
||||||
|
transform: rotateX(45deg) rotateY(45deg);
|
||||||
|
transform-style: preserve-3d;
|
||||||
|
perspective: 600px;
|
||||||
|
}
|
||||||
|
/*渐变文字效果*/
|
||||||
|
.gradient-text {
|
||||||
|
background: -webkit-linear-gradient(45deg, #d9534f, #fe5b56);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
}
|
||||||
|
/*动态阴影效果*/
|
||||||
|
.dynamic-shadow {
|
||||||
|
transition: box-shadow 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynamic-shadow:hover {
|
||||||
|
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*光点闪烁效果*/
|
||||||
|
.sparkle-point {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: rgba(255, 255, 255, 0.8);
|
||||||
|
pointer-events: none;
|
||||||
|
animation: sparkle 2s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes sparkle {
|
||||||
|
0% { opacity: 0; transform: scale(0); }
|
||||||
|
50% { opacity: 1; transform: scale(1); }
|
||||||
|
100% { opacity: 0; transform: scale(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*动态渲染效果*/
|
||||||
|
.render-effect {
|
||||||
|
animation: renderEffect 5s infinite alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes renderEffect {
|
||||||
|
0%, 100% { filter: grayscale(0); }
|
||||||
|
50% { filter: grayscale(1); }
|
||||||
|
}
|
||||||
|
/* 全屏背景动画*/
|
||||||
|
body {
|
||||||
|
background: linear-gradient(-45deg, #000, #7c7c7c, #000);
|
||||||
|
background-size: 400% 1000%;
|
||||||
|
animation: gradientBG 15s ease infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes gradientBG {
|
||||||
|
0% { background-position: 0% 50%; }
|
||||||
|
50% { background-position: 100% 50%; }
|
||||||
|
100% { background-position: 0% 50%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*线条动画*/
|
||||||
|
.waves {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 90px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@keyframes backgroundGradient {
|
||||||
|
0% { background-position: 0% 50%; }
|
||||||
|
50% { background-position: 100% 50%; }
|
||||||
|
100% { background-position: 0% 50%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
animation: backgroundGradient 15s ease infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #fdfdfd;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.svg-background {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: -1; /* 确保SVG在内容的后面 */
|
||||||
|
}
|
||||||
|
@keyframes colorShift {
|
||||||
|
0% { background-color: #d9534f; }
|
||||||
|
50% { background-color: #fe5b56; }
|
||||||
|
100% { background-color: #d9534f; }
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
animation: colorShift 3s infinite;
|
||||||
|
}
|
||||||
|
.blink {
|
||||||
|
animation: blink 1s step-start infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
50% { opacity: 0; }
|
||||||
|
}
|
||||||
|
input[type="text"]:hover {
|
||||||
|
background-color: rgba(217, 83, 79, 0.1);
|
||||||
|
}
|
||||||
|
.parallax-section {
|
||||||
|
background-image: url('your-image.jpg');
|
||||||
|
background-attachment: fixed;
|
||||||
|
background-size: cover;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
/*字体动态改变*/
|
||||||
|
h2 {
|
||||||
|
transition: font-size 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2:hover {
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
/*动态内容加载*/
|
||||||
|
.main-content {
|
||||||
|
animation: fadeIn 1s ease-in;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadeIn {
|
||||||
|
from { opacity: 0; }
|
||||||
|
to { opacity: 1; }
|
||||||
|
}
|
||||||
|
/* 旋转效果*/
|
||||||
|
footer {
|
||||||
|
transition: transform 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer:hover {
|
||||||
|
transform: rotate(5deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynamic-line {
|
||||||
|
stroke: #d9534f;
|
||||||
|
stroke-width: 2;
|
||||||
|
fill: none;
|
||||||
|
animation: dash 5s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes dash {
|
||||||
|
0% { stroke-dasharray: 0, 100; }
|
||||||
|
100% { stroke-dasharray: 100, 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
button {
|
||||||
|
perspective: 1000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
transform: rotateX(10deg) rotateY(10deg);
|
||||||
|
transition: transform 0.3s;
|
||||||
|
}
|
||||||
|
/*文字打字效果*/
|
||||||
|
.typewriter {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
border-right: .15em solid orange;
|
||||||
|
animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes typing {
|
||||||
|
from { width: 0; }
|
||||||
|
to { width: 100%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink-caret {
|
||||||
|
from, to { border-color: transparent; }
|
||||||
|
50% { border-color: orange; }
|
||||||
|
}
|
||||||
|
/*旋转加载*/
|
||||||
|
.loading {
|
||||||
|
border: 8px solid #f3f3f3;
|
||||||
|
border-top: 8px solid #3498db;
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
animation: spin 2s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes spin {
|
||||||
|
0% { transform: rotate(0deg); }
|
||||||
|
100% { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
/*字体阴影动态*/
|
||||||
|
h2 {
|
||||||
|
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||||
|
transition: text-shadow 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2:hover {
|
||||||
|
text-shadow: 0 0 20px rgba(255, 0, 0, 1);
|
||||||
|
}
|
||||||
|
/*彩色阴影*/
|
||||||
|
button {
|
||||||
|
box-shadow: 0 4px 20px rgba(217, 83, 79, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
box-shadow: 0 8px 30px rgba(217, 83, 79, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.particle-background {
|
||||||
|
background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 10%, transparent 10%);
|
||||||
|
animation: particleAnimation 5s infinite;
|
||||||
|
}
|
||||||
|
/*随机粒子背景*/
|
||||||
|
@keyframes particleAnimation {
|
||||||
|
0% { background-size: 0%; }
|
||||||
|
100% { background-size: 100%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*光环效果*/
|
||||||
|
header {
|
||||||
|
box-shadow: 0 0 20px rgba(217, 83, 79, 0.6);
|
||||||
|
}
|
||||||
|
/*悬浮按钮效果*/
|
||||||
|
button {
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*玻璃效果*/
|
||||||
|
main {
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 术语 */
|
||||||
|
/* 术语结果框样式 */
|
||||||
|
.result-box {
|
||||||
|
background-color: #ff6e7a; /* 淡红色背景,与按钮颜色呼应 */
|
||||||
|
border: 1px solid #d9534f; /* 边框颜色与头部和底部颜色一致 */
|
||||||
|
padding: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
border-radius: 5px; /* 圆角边框 */
|
||||||
|
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); /* 轻微的立体阴影效果 */
|
||||||
|
animation: fadeInDown 1s ease-in-out; /* 淡入下移动画 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 结果文本框样式 */
|
||||||
|
.result-textarea {
|
||||||
|
background-color: #f5f5f5; /* 浅灰色背景,更好的对比度 */
|
||||||
|
border: 1px solid #ddd; /* 边框颜色与输入框一致 */
|
||||||
|
border-radius: 5px; /* 圆角边框 */
|
||||||
|
padding: 10px;
|
||||||
|
width: 100%; /* 宽度与输入框一致 */
|
||||||
|
box-sizing: border-box; /* 盒模型宽度包含padding和border */
|
||||||
|
resize: none; /* 禁止调整大小 */
|
||||||
|
font-family: 'Arial', sans-serif; /* 与页面字体一致 */
|
||||||
|
color: #333; /* 文本颜色与页面一致 */
|
||||||
|
line-height: 1.5; /* 行高 */
|
||||||
|
overflow-y: auto; /* 超出内容显示滚动条 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.result-box {
|
||||||
|
width: auto; /* 小屏幕上宽度自动调整 */
|
||||||
|
margin-left: 10px; /* 较小的外边距 */
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
input[type="text"] {
|
||||||
|
width: calc(100% - 22px); /* 调整输入框宽度 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 悬停效果,使结果框在鼠标悬停时有阴影变化 */
|
||||||
|
.result-box:hover {
|
||||||
|
box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 点击效果,使结果框在被点击时有压缩效果 */
|
||||||
|
.result-box:active {
|
||||||
|
transform: translateY(2px);
|
||||||
|
}
|
||||||
|
/* 显示动画 */
|
||||||
|
@keyframes fadeInDown {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 隐藏动画 */
|
||||||
|
@keyframes fadeOutUp {
|
||||||
|
from {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 展开动画 */
|
||||||
|
@keyframes expand {
|
||||||
|
from {
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
height: 200px; /* 根据需要调整高度 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.result-box {
|
||||||
|
display: none; /* 初始时隐藏 */
|
||||||
|
background-color: #f8d7da;
|
||||||
|
border: 1px solid #d9534f;
|
||||||
|
padding: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
|
||||||
|
animation-fill-mode: forwards; /* 保持动画结束状态 */
|
||||||
|
overflow: hidden; /* 隐藏内容超出部分 */
|
||||||
|
}
|
@ -0,0 +1,568 @@
|
|||||||
|
/* 基本重置 */
|
||||||
|
body, h1, h2, p, a {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
text-decoration: none;
|
||||||
|
color: rgb(255, 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 基础字体和背景 */
|
||||||
|
body {
|
||||||
|
font-family: 'Arial', sans-serif;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: #fff;
|
||||||
|
padding: 20px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
padding: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
background-color: #fe5b56;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px 0;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 输入框和按钮样式 */
|
||||||
|
input[type="text"] {
|
||||||
|
padding: 10px;
|
||||||
|
margin: 10px 0;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 5px;
|
||||||
|
width: calc(100% - 22px); /* 减去padding和border的宽度 */
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
padding: 10px 20px;
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: #fff;
|
||||||
|
border: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: #c9302c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 动画效果 */
|
||||||
|
@keyframes fadeInDown {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
header, main, footer {
|
||||||
|
animation: fadeInDown 1s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
/* 针对小屏幕的样式调整 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 动态阴影效果 */
|
||||||
|
@keyframes shadowPulse {
|
||||||
|
0%, 100% { box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); }
|
||||||
|
50% { box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); }
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
animation: shadowPulse 1.5s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文字跳动动画*/
|
||||||
|
h1 {
|
||||||
|
animation: jump 1.5s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes jump {
|
||||||
|
0%, 100% { transform: translateY(0); }
|
||||||
|
50% { transform: translateY(-10px); }
|
||||||
|
}
|
||||||
|
/* 输入框和按钮的悬停效果*/
|
||||||
|
input[type="text"]:hover, button:hover {
|
||||||
|
border: 1px solid #d9534f;
|
||||||
|
box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
/*按钮点击动画*/
|
||||||
|
button:active {
|
||||||
|
transform: scale(0.95);
|
||||||
|
background-color: #b52b27;
|
||||||
|
}
|
||||||
|
/*光晕效果*/
|
||||||
|
.glow {
|
||||||
|
animation: glowEffect 1.5s infinite alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes glowEffect {
|
||||||
|
from {
|
||||||
|
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #d9534f, 0 0 20px #d9534f, 0 0 25px #d9534f, 0 0 30px #d9534f;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
text-shadow: 0 0 10px #fff, 0 0 20px #d9534f, 0 0 30px #d9534f, 0 0 40px #d9534f, 0 0 50px #d9534f, 0 0 60px #d9534f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* 3D翻转效果*/
|
||||||
|
.feature {
|
||||||
|
perspective: 1000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature:hover .feature-inner {
|
||||||
|
transform: rotateY(360deg);
|
||||||
|
transition: transform 15s;
|
||||||
|
}
|
||||||
|
/*视差滚动效果*/
|
||||||
|
|
||||||
|
.parallax-section {
|
||||||
|
background-attachment: fixed;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
/* 粒子背景*/
|
||||||
|
.particle-background {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.particle {
|
||||||
|
fill: rgba(255, 255, 255, 0.8);
|
||||||
|
animation: moveParticles 10s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes moveParticles {
|
||||||
|
0% { transform: translate(0, 0); }
|
||||||
|
100% { transform: translate(100px, 100px); }
|
||||||
|
}
|
||||||
|
/*线条动画*/
|
||||||
|
.dynamic-line {
|
||||||
|
stroke-dasharray: 300;
|
||||||
|
stroke-dashoffset: 300;
|
||||||
|
animation: dash 3s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes dash {
|
||||||
|
from {
|
||||||
|
stroke-dashoffset: 300;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*光晕效果*/
|
||||||
|
button {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
button::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 300%;
|
||||||
|
height: 200%;
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
transform: translate(-50%, -50%) rotate(45deg);
|
||||||
|
transition: all 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover::before {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
/*闪烁效果*/
|
||||||
|
@keyframes blinker {
|
||||||
|
50% { opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.blink-text {
|
||||||
|
animation: blinker 1s linear infinite;
|
||||||
|
}
|
||||||
|
/* 打字机效果*/
|
||||||
|
.typewriter {
|
||||||
|
font-family: monospace;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 100%;
|
||||||
|
animation: typewriter 4s steps(40) 1s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes typewriter {
|
||||||
|
0% { width: 0; }
|
||||||
|
100% { width: 100%; }
|
||||||
|
}
|
||||||
|
/* 3D文字效果*/
|
||||||
|
.three-d-text {
|
||||||
|
transform: rotateX(45deg) rotateY(45deg);
|
||||||
|
transform-style: preserve-3d;
|
||||||
|
perspective: 600px;
|
||||||
|
}
|
||||||
|
/*渐变文字效果*/
|
||||||
|
.gradient-text {
|
||||||
|
background: -webkit-linear-gradient(45deg, #d9534f, #fe5b56);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
}
|
||||||
|
/*动态阴影效果*/
|
||||||
|
.dynamic-shadow {
|
||||||
|
transition: box-shadow 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynamic-shadow:hover {
|
||||||
|
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*光点闪烁效果*/
|
||||||
|
.sparkle-point {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: rgba(255, 255, 255, 0.8);
|
||||||
|
pointer-events: none;
|
||||||
|
animation: sparkle 2s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes sparkle {
|
||||||
|
0% { opacity: 0; transform: scale(0); }
|
||||||
|
50% { opacity: 1; transform: scale(1); }
|
||||||
|
100% { opacity: 0; transform: scale(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*动态渲染效果*/
|
||||||
|
.render-effect {
|
||||||
|
animation: renderEffect 5s infinite alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes renderEffect {
|
||||||
|
0%, 100% { filter: grayscale(0); }
|
||||||
|
50% { filter: grayscale(1); }
|
||||||
|
}
|
||||||
|
/* 全屏背景动画*/
|
||||||
|
body {
|
||||||
|
background: linear-gradient(-45deg, #000, #7c7c7c, #000);
|
||||||
|
background-size: 400% 1000%;
|
||||||
|
animation: gradientBG 15s ease infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes gradientBG {
|
||||||
|
0% { background-position: 0% 50%; }
|
||||||
|
50% { background-position: 100% 50%; }
|
||||||
|
100% { background-position: 0% 50%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*线条动画*/
|
||||||
|
.waves {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 90px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@keyframes backgroundGradient {
|
||||||
|
0% { background-position: 0% 50%; }
|
||||||
|
50% { background-position: 100% 50%; }
|
||||||
|
100% { background-position: 0% 50%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
animation: backgroundGradient 15s ease infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #fdfdfd;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.svg-background {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: -1; /* 确保SVG在内容的后面 */
|
||||||
|
}
|
||||||
|
@keyframes colorShift {
|
||||||
|
0% { background-color: #d9534f; }
|
||||||
|
50% { background-color: #fe5b56; }
|
||||||
|
100% { background-color: #d9534f; }
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
animation: colorShift 3s infinite;
|
||||||
|
}
|
||||||
|
.blink {
|
||||||
|
animation: blink 1s step-start infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
50% { opacity: 0; }
|
||||||
|
}
|
||||||
|
input[type="text"]:hover {
|
||||||
|
background-color: rgba(217, 83, 79, 0.1);
|
||||||
|
}
|
||||||
|
.parallax-section {
|
||||||
|
background-image: url('your-image.jpg');
|
||||||
|
background-attachment: fixed;
|
||||||
|
background-size: cover;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
/*字体动态改变*/
|
||||||
|
h2 {
|
||||||
|
transition: font-size 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2:hover {
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
/*动态内容加载*/
|
||||||
|
.main-content {
|
||||||
|
animation: fadeIn 1s ease-in;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadeIn {
|
||||||
|
from { opacity: 0; }
|
||||||
|
to { opacity: 1; }
|
||||||
|
}
|
||||||
|
/* 旋转效果*/
|
||||||
|
footer {
|
||||||
|
transition: transform 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer:hover {
|
||||||
|
transform: rotate(5deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynamic-line {
|
||||||
|
stroke: #d9534f;
|
||||||
|
stroke-width: 2;
|
||||||
|
fill: none;
|
||||||
|
animation: dash 5s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes dash {
|
||||||
|
0% { stroke-dasharray: 0, 100; }
|
||||||
|
100% { stroke-dasharray: 100, 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
button {
|
||||||
|
perspective: 1000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
transform: rotateX(10deg) rotateY(10deg);
|
||||||
|
transition: transform 0.3s;
|
||||||
|
}
|
||||||
|
/*文字打字效果*/
|
||||||
|
.typewriter {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
border-right: .15em solid orange;
|
||||||
|
animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes typing {
|
||||||
|
from { width: 0; }
|
||||||
|
to { width: 100%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink-caret {
|
||||||
|
from, to { border-color: transparent; }
|
||||||
|
50% { border-color: orange; }
|
||||||
|
}
|
||||||
|
/*旋转加载*/
|
||||||
|
.loading {
|
||||||
|
border: 8px solid #f3f3f3;
|
||||||
|
border-top: 8px solid #3498db;
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
animation: spin 2s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes spin {
|
||||||
|
0% { transform: rotate(0deg); }
|
||||||
|
100% { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
/*字体阴影动态*/
|
||||||
|
h2 {
|
||||||
|
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||||
|
transition: text-shadow 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2:hover {
|
||||||
|
text-shadow: 0 0 20px rgba(255, 0, 0, 1);
|
||||||
|
}
|
||||||
|
/*彩色阴影*/
|
||||||
|
button {
|
||||||
|
box-shadow: 0 4px 20px rgba(217, 83, 79, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
box-shadow: 0 8px 30px rgba(217, 83, 79, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.particle-background {
|
||||||
|
background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 10%, transparent 10%);
|
||||||
|
animation: particleAnimation 5s infinite;
|
||||||
|
}
|
||||||
|
/*随机粒子背景*/
|
||||||
|
@keyframes particleAnimation {
|
||||||
|
0% { background-size: 0%; }
|
||||||
|
100% { background-size: 100%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*光环效果*/
|
||||||
|
header {
|
||||||
|
box-shadow: 0 0 20px rgba(217, 83, 79, 0.6);
|
||||||
|
}
|
||||||
|
/*悬浮按钮效果*/
|
||||||
|
button {
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*玻璃效果*/
|
||||||
|
main {
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 术语 */
|
||||||
|
/* 术语结果框样式 */
|
||||||
|
.result-box {
|
||||||
|
background-color: #ff6e7a; /* 淡红色背景,与按钮颜色呼应 */
|
||||||
|
border: 1px solid #d9534f; /* 边框颜色与头部和底部颜色一致 */
|
||||||
|
padding: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
border-radius: 5px; /* 圆角边框 */
|
||||||
|
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); /* 轻微的立体阴影效果 */
|
||||||
|
animation: fadeInDown 1s ease-in-out; /* 淡入下移动画 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 结果文本框样式 */
|
||||||
|
.result-textarea {
|
||||||
|
background-color: #f5f5f5; /* 浅灰色背景,更好的对比度 */
|
||||||
|
border: 1px solid #ddd; /* 边框颜色与输入框一致 */
|
||||||
|
border-radius: 5px; /* 圆角边框 */
|
||||||
|
padding: 10px;
|
||||||
|
width: 100%; /* 宽度与输入框一致 */
|
||||||
|
box-sizing: border-box; /* 盒模型宽度包含padding和border */
|
||||||
|
resize: none; /* 禁止调整大小 */
|
||||||
|
font-family: 'Arial', sans-serif; /* 与页面字体一致 */
|
||||||
|
color: #333; /* 文本颜色与页面一致 */
|
||||||
|
line-height: 1.5; /* 行高 */
|
||||||
|
overflow-y: auto; /* 超出内容显示滚动条 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.result-box {
|
||||||
|
width: auto; /* 小屏幕上宽度自动调整 */
|
||||||
|
margin-left: 10px; /* 较小的外边距 */
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
input[type="text"] {
|
||||||
|
width: calc(100% - 22px); /* 调整输入框宽度 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 悬停效果,使结果框在鼠标悬停时有阴影变化 */
|
||||||
|
.result-box:hover {
|
||||||
|
box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 点击效果,使结果框在被点击时有压缩效果 */
|
||||||
|
.result-box:active {
|
||||||
|
transform: translateY(2px);
|
||||||
|
}
|
||||||
|
/* 显示动画 */
|
||||||
|
@keyframes fadeInDown {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 隐藏动画 */
|
||||||
|
@keyframes fadeOutUp {
|
||||||
|
from {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 展开动画 */
|
||||||
|
@keyframes expand {
|
||||||
|
from {
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
height: 200px; /* 根据需要调整高度 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.result-box {
|
||||||
|
display: none; /* 初始时隐藏 */
|
||||||
|
background-color: #f8d7da;
|
||||||
|
border: 1px solid #d9534f;
|
||||||
|
padding: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
|
||||||
|
animation-fill-mode: forwards; /* 保持动画结束状态 */
|
||||||
|
overflow: hidden; /* 隐藏内容超出部分 */
|
||||||
|
}
|
@ -0,0 +1,568 @@
|
|||||||
|
/* 基本重置 */
|
||||||
|
body, h1, h2, p, a {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
text-decoration: none;
|
||||||
|
color: rgb(255, 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 基础字体和背景 */
|
||||||
|
body {
|
||||||
|
font-family: 'Arial', sans-serif;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: #fff;
|
||||||
|
padding: 20px 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
padding: 20px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
background-color: #fe5b56;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
padding: 10px 0;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 输入框和按钮样式 */
|
||||||
|
input[type="text"] {
|
||||||
|
padding: 10px;
|
||||||
|
margin: 10px 0;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 5px;
|
||||||
|
width: calc(100% - 22px); /* 减去padding和border的宽度 */
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
padding: 10px 20px;
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: #fff;
|
||||||
|
border: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
cursor: pointer;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
background-color: #c9302c;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 动画效果 */
|
||||||
|
@keyframes fadeInDown {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
header, main, footer {
|
||||||
|
animation: fadeInDown 1s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
/* 针对小屏幕的样式调整 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 动态阴影效果 */
|
||||||
|
@keyframes shadowPulse {
|
||||||
|
0%, 100% { box-shadow: 0 0 10px rgba(0, 0, 0, 0.5); }
|
||||||
|
50% { box-shadow: 0 0 20px rgba(0, 0, 0, 0.8); }
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
animation: shadowPulse 1.5s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 文字跳动动画*/
|
||||||
|
h1 {
|
||||||
|
animation: jump 1.5s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes jump {
|
||||||
|
0%, 100% { transform: translateY(0); }
|
||||||
|
50% { transform: translateY(-10px); }
|
||||||
|
}
|
||||||
|
/* 输入框和按钮的悬停效果*/
|
||||||
|
input[type="text"]:hover, button:hover {
|
||||||
|
border: 1px solid #d9534f;
|
||||||
|
box-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
/*按钮点击动画*/
|
||||||
|
button:active {
|
||||||
|
transform: scale(0.95);
|
||||||
|
background-color: #b52b27;
|
||||||
|
}
|
||||||
|
/*光晕效果*/
|
||||||
|
.glow {
|
||||||
|
animation: glowEffect 1.5s infinite alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes glowEffect {
|
||||||
|
from {
|
||||||
|
text-shadow: 0 0 5px #fff, 0 0 10px #fff, 0 0 15px #d9534f, 0 0 20px #d9534f, 0 0 25px #d9534f, 0 0 30px #d9534f;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
text-shadow: 0 0 10px #fff, 0 0 20px #d9534f, 0 0 30px #d9534f, 0 0 40px #d9534f, 0 0 50px #d9534f, 0 0 60px #d9534f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* 3D翻转效果*/
|
||||||
|
.feature {
|
||||||
|
perspective: 1000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.feature:hover .feature-inner {
|
||||||
|
transform: rotateY(360deg);
|
||||||
|
transition: transform 15s;
|
||||||
|
}
|
||||||
|
/*视差滚动效果*/
|
||||||
|
|
||||||
|
.parallax-section {
|
||||||
|
background-attachment: fixed;
|
||||||
|
background-position: center;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
/* 粒子背景*/
|
||||||
|
.particle-background {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.particle {
|
||||||
|
fill: rgba(255, 255, 255, 0.8);
|
||||||
|
animation: moveParticles 10s infinite linear;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes moveParticles {
|
||||||
|
0% { transform: translate(0, 0); }
|
||||||
|
100% { transform: translate(100px, 100px); }
|
||||||
|
}
|
||||||
|
/*线条动画*/
|
||||||
|
.dynamic-line {
|
||||||
|
stroke-dasharray: 300;
|
||||||
|
stroke-dashoffset: 300;
|
||||||
|
animation: dash 3s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes dash {
|
||||||
|
from {
|
||||||
|
stroke-dashoffset: 300;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
stroke-dashoffset: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*光晕效果*/
|
||||||
|
button {
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
button::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: 50%;
|
||||||
|
left: 50%;
|
||||||
|
width: 300%;
|
||||||
|
height: 200%;
|
||||||
|
background: rgba(255, 255, 255, 0.2);
|
||||||
|
transform: translate(-50%, -50%) rotate(45deg);
|
||||||
|
transition: all 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover::before {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
/*闪烁效果*/
|
||||||
|
@keyframes blinker {
|
||||||
|
50% { opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
.blink-text {
|
||||||
|
animation: blinker 1s linear infinite;
|
||||||
|
}
|
||||||
|
/* 打字机效果*/
|
||||||
|
.typewriter {
|
||||||
|
font-family: monospace;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
width: 100%;
|
||||||
|
animation: typewriter 4s steps(40) 1s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes typewriter {
|
||||||
|
0% { width: 0; }
|
||||||
|
100% { width: 100%; }
|
||||||
|
}
|
||||||
|
/* 3D文字效果*/
|
||||||
|
.three-d-text {
|
||||||
|
transform: rotateX(45deg) rotateY(45deg);
|
||||||
|
transform-style: preserve-3d;
|
||||||
|
perspective: 600px;
|
||||||
|
}
|
||||||
|
/*渐变文字效果*/
|
||||||
|
.gradient-text {
|
||||||
|
background: -webkit-linear-gradient(45deg, #d9534f, #fe5b56);
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
-webkit-text-fill-color: transparent;
|
||||||
|
}
|
||||||
|
/*动态阴影效果*/
|
||||||
|
.dynamic-shadow {
|
||||||
|
transition: box-shadow 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynamic-shadow:hover {
|
||||||
|
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*光点闪烁效果*/
|
||||||
|
.sparkle-point {
|
||||||
|
position: absolute;
|
||||||
|
border-radius: 50%;
|
||||||
|
background-color: rgba(255, 255, 255, 0.8);
|
||||||
|
pointer-events: none;
|
||||||
|
animation: sparkle 2s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes sparkle {
|
||||||
|
0% { opacity: 0; transform: scale(0); }
|
||||||
|
50% { opacity: 1; transform: scale(1); }
|
||||||
|
100% { opacity: 0; transform: scale(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*动态渲染效果*/
|
||||||
|
.render-effect {
|
||||||
|
animation: renderEffect 5s infinite alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes renderEffect {
|
||||||
|
0%, 100% { filter: grayscale(0); }
|
||||||
|
50% { filter: grayscale(1); }
|
||||||
|
}
|
||||||
|
/* 全屏背景动画*/
|
||||||
|
body {
|
||||||
|
background: linear-gradient(-45deg, #000, #7c7c7c, #000);
|
||||||
|
background-size: 400% 1000%;
|
||||||
|
animation: gradientBG 15s ease infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes gradientBG {
|
||||||
|
0% { background-position: 0% 50%; }
|
||||||
|
50% { background-position: 100% 50%; }
|
||||||
|
100% { background-position: 0% 50%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*线条动画*/
|
||||||
|
.waves {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 90px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@keyframes backgroundGradient {
|
||||||
|
0% { background-position: 0% 50%; }
|
||||||
|
50% { background-position: 100% 50%; }
|
||||||
|
100% { background-position: 0% 50%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
animation: backgroundGradient 15s ease infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #fdfdfd;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
background-color: #d9534f;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.svg-background {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
z-index: -1; /* 确保SVG在内容的后面 */
|
||||||
|
}
|
||||||
|
@keyframes colorShift {
|
||||||
|
0% { background-color: #d9534f; }
|
||||||
|
50% { background-color: #fe5b56; }
|
||||||
|
100% { background-color: #d9534f; }
|
||||||
|
}
|
||||||
|
button {
|
||||||
|
animation: colorShift 3s infinite;
|
||||||
|
}
|
||||||
|
.blink {
|
||||||
|
animation: blink 1s step-start infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
50% { opacity: 0; }
|
||||||
|
}
|
||||||
|
input[type="text"]:hover {
|
||||||
|
background-color: rgba(217, 83, 79, 0.1);
|
||||||
|
}
|
||||||
|
.parallax-section {
|
||||||
|
background-image: url('your-image.jpg');
|
||||||
|
background-attachment: fixed;
|
||||||
|
background-size: cover;
|
||||||
|
height: 100vh;
|
||||||
|
}
|
||||||
|
/*字体动态改变*/
|
||||||
|
h2 {
|
||||||
|
transition: font-size 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2:hover {
|
||||||
|
font-size: 2em;
|
||||||
|
}
|
||||||
|
/*动态内容加载*/
|
||||||
|
.main-content {
|
||||||
|
animation: fadeIn 1s ease-in;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadeIn {
|
||||||
|
from { opacity: 0; }
|
||||||
|
to { opacity: 1; }
|
||||||
|
}
|
||||||
|
/* 旋转效果*/
|
||||||
|
footer {
|
||||||
|
transition: transform 0.5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer:hover {
|
||||||
|
transform: rotate(5deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.dynamic-line {
|
||||||
|
stroke: #d9534f;
|
||||||
|
stroke-width: 2;
|
||||||
|
fill: none;
|
||||||
|
animation: dash 5s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes dash {
|
||||||
|
0% { stroke-dasharray: 0, 100; }
|
||||||
|
100% { stroke-dasharray: 100, 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
button {
|
||||||
|
perspective: 1000px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
transform: rotateX(10deg) rotateY(10deg);
|
||||||
|
transition: transform 0.3s;
|
||||||
|
}
|
||||||
|
/*文字打字效果*/
|
||||||
|
.typewriter {
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
border-right: .15em solid orange;
|
||||||
|
animation: typing 3.5s steps(40, end), blink-caret .75s step-end infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes typing {
|
||||||
|
from { width: 0; }
|
||||||
|
to { width: 100%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink-caret {
|
||||||
|
from, to { border-color: transparent; }
|
||||||
|
50% { border-color: orange; }
|
||||||
|
}
|
||||||
|
/*旋转加载*/
|
||||||
|
.loading {
|
||||||
|
border: 8px solid #f3f3f3;
|
||||||
|
border-top: 8px solid #3498db;
|
||||||
|
border-radius: 50%;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
animation: spin 2s linear infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes spin {
|
||||||
|
0% { transform: rotate(0deg); }
|
||||||
|
100% { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
/*字体阴影动态*/
|
||||||
|
h2 {
|
||||||
|
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||||
|
transition: text-shadow 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2:hover {
|
||||||
|
text-shadow: 0 0 20px rgba(255, 0, 0, 1);
|
||||||
|
}
|
||||||
|
/*彩色阴影*/
|
||||||
|
button {
|
||||||
|
box-shadow: 0 4px 20px rgba(217, 83, 79, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
box-shadow: 0 8px 30px rgba(217, 83, 79, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.particle-background {
|
||||||
|
background: radial-gradient(circle, rgba(255, 255, 255, 0.3) 10%, transparent 10%);
|
||||||
|
animation: particleAnimation 5s infinite;
|
||||||
|
}
|
||||||
|
/*随机粒子背景*/
|
||||||
|
@keyframes particleAnimation {
|
||||||
|
0% { background-size: 0%; }
|
||||||
|
100% { background-size: 100%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*光环效果*/
|
||||||
|
header {
|
||||||
|
box-shadow: 0 0 20px rgba(217, 83, 79, 0.6);
|
||||||
|
}
|
||||||
|
/*悬浮按钮效果*/
|
||||||
|
button {
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*玻璃效果*/
|
||||||
|
main {
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
backdrop-filter: blur(10px);
|
||||||
|
border-radius: 10px;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* 术语 */
|
||||||
|
/* 术语结果框样式 */
|
||||||
|
.result-box {
|
||||||
|
background-color: #ff6e7a; /* 淡红色背景,与按钮颜色呼应 */
|
||||||
|
border: 1px solid #d9534f; /* 边框颜色与头部和底部颜色一致 */
|
||||||
|
padding: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
border-radius: 5px; /* 圆角边框 */
|
||||||
|
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); /* 轻微的立体阴影效果 */
|
||||||
|
animation: fadeInDown 1s ease-in-out; /* 淡入下移动画 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 结果文本框样式 */
|
||||||
|
.result-textarea {
|
||||||
|
background-color: #f5f5f5; /* 浅灰色背景,更好的对比度 */
|
||||||
|
border: 1px solid #ddd; /* 边框颜色与输入框一致 */
|
||||||
|
border-radius: 5px; /* 圆角边框 */
|
||||||
|
padding: 10px;
|
||||||
|
width: 100%; /* 宽度与输入框一致 */
|
||||||
|
box-sizing: border-box; /* 盒模型宽度包含padding和border */
|
||||||
|
resize: none; /* 禁止调整大小 */
|
||||||
|
font-family: 'Arial', sans-serif; /* 与页面字体一致 */
|
||||||
|
color: #333; /* 文本颜色与页面一致 */
|
||||||
|
line-height: 1.5; /* 行高 */
|
||||||
|
overflow-y: auto; /* 超出内容显示滚动条 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 响应式设计 */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.result-box {
|
||||||
|
width: auto; /* 小屏幕上宽度自动调整 */
|
||||||
|
margin-left: 10px; /* 较小的外边距 */
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
input[type="text"] {
|
||||||
|
width: calc(100% - 22px); /* 调整输入框宽度 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 悬停效果,使结果框在鼠标悬停时有阴影变化 */
|
||||||
|
.result-box:hover {
|
||||||
|
box-shadow: 0px 0px 20px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 点击效果,使结果框在被点击时有压缩效果 */
|
||||||
|
.result-box:active {
|
||||||
|
transform: translateY(2px);
|
||||||
|
}
|
||||||
|
/* 显示动画 */
|
||||||
|
@keyframes fadeInDown {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 隐藏动画 */
|
||||||
|
@keyframes fadeOutUp {
|
||||||
|
from {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(-20px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 展开动画 */
|
||||||
|
@keyframes expand {
|
||||||
|
from {
|
||||||
|
height: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
height: 200px; /* 根据需要调整高度 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.result-box {
|
||||||
|
display: none; /* 初始时隐藏 */
|
||||||
|
background-color: #f8d7da;
|
||||||
|
border: 1px solid #d9534f;
|
||||||
|
padding: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
|
||||||
|
animation-fill-mode: forwards; /* 保持动画结束状态 */
|
||||||
|
overflow: hidden; /* 隐藏内容超出部分 */
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,24 @@
|
|||||||
|
<template>
|
||||||
|
<div id="app">
|
||||||
|
<transition>
|
||||||
|
<router-view />
|
||||||
|
</transition>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
html,
|
||||||
|
body {
|
||||||
|
height: 100%;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-webkit-touch-callout: none;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
}
|
||||||
|
#app {
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,837 @@
|
|||||||
|
<template>
|
||||||
|
<div class="login">
|
||||||
|
<div class="light-spots"></div>
|
||||||
|
<div class="ripples"></div>
|
||||||
|
<div class="flowing-lines"></div>
|
||||||
|
<div class="login-container">
|
||||||
|
<el-tabs
|
||||||
|
v-model="activeName"
|
||||||
|
class="login-tabs"
|
||||||
|
stretch
|
||||||
|
@tab-click="handleClick"
|
||||||
|
>
|
||||||
|
<el-tab-pane label="用户登录" name="login">
|
||||||
|
<el-form
|
||||||
|
ref="loginForm"
|
||||||
|
:model="user"
|
||||||
|
status-icon
|
||||||
|
:rules="rules"
|
||||||
|
class="login-form"
|
||||||
|
>
|
||||||
|
<el-form-item label="用户名" prop="username">
|
||||||
|
<el-input type="text" v-model="user.username" class="form-input">
|
||||||
|
<i slot="prefix" class="el-icon-user"></i>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="密码" prop="password">
|
||||||
|
<el-input type="password" v-model="user.password" class="form-input">
|
||||||
|
<i slot="prefix" class="el-icon-lock"></i>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="submitForm('loginForm')" class="submit-btn">
|
||||||
|
<span>登 录</span>
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-tab-pane>
|
||||||
|
|
||||||
|
<el-tab-pane label="用户注册" name="register">
|
||||||
|
<el-form
|
||||||
|
ref="registerForm"
|
||||||
|
:model="user"
|
||||||
|
status-icon
|
||||||
|
:rules="rules"
|
||||||
|
class="login-form"
|
||||||
|
>
|
||||||
|
<el-form-item label="用户名" prop="username">
|
||||||
|
<el-input type="text" v-model="user.username" class="form-input">
|
||||||
|
<i slot="prefix" class="el-icon-user"></i>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="密码" prop="password">
|
||||||
|
<el-input type="password" v-model="user.password" class="form-input">
|
||||||
|
<i slot="prefix" class="el-icon-lock"></i>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="确认密码" prop="surePassword">
|
||||||
|
<el-input type="password" v-model="user.surePassword" class="form-input">
|
||||||
|
<i slot="prefix" class="el-icon-key"></i>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="邮箱" prop="email">
|
||||||
|
<el-input type="email" v-model="user.email" class="form-input">
|
||||||
|
<i slot="prefix" class="el-icon-message"></i>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-button type="primary" @click="submitForm('registerForm')" class="submit-btn">
|
||||||
|
<span>注 册</span>
|
||||||
|
</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</el-tab-pane>
|
||||||
|
|
||||||
|
<el-tab-pane>
|
||||||
|
<span slot="label"><i class="el-icon-service"></i> 帮助中心</span>
|
||||||
|
<div class="help-content">
|
||||||
|
<i class="el-icon-question"></i>
|
||||||
|
<p>如需帮助请联系客服</p>
|
||||||
|
</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapActions } from "vuex"
|
||||||
|
import { MessageBox } from 'element-ui'
|
||||||
|
export default {
|
||||||
|
name: "Login",
|
||||||
|
data() {
|
||||||
|
var validateUsername = (rule, value, callback) => {
|
||||||
|
if (value === "") {
|
||||||
|
callback(new Error("请输入用户名"));
|
||||||
|
}
|
||||||
|
callback();
|
||||||
|
};
|
||||||
|
|
||||||
|
var validatePassword = (rule, value, callback) => {
|
||||||
|
if (value === "") {
|
||||||
|
callback(new Error("请输入密码"));
|
||||||
|
}
|
||||||
|
callback();
|
||||||
|
};
|
||||||
|
|
||||||
|
var validateSurePassword = (rule, value, callback) => {
|
||||||
|
if (value === "") {
|
||||||
|
callback(new Error("请输入确认密码"));
|
||||||
|
} else if (value !== this.user.password) {
|
||||||
|
callback(new Error("两次输入的密码不一致"));
|
||||||
|
} else {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
var validateEmail = (rule, value, callback) => {
|
||||||
|
const emailPattern = /^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$/;
|
||||||
|
if (value === "") {
|
||||||
|
callback(new Error("请输入邮箱"));
|
||||||
|
} else if (!emailPattern.test(value)) {
|
||||||
|
callback(new Error("请输入有效的邮箱地址"));
|
||||||
|
} else {
|
||||||
|
callback();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return {
|
||||||
|
user: {
|
||||||
|
username: "",
|
||||||
|
password: "",
|
||||||
|
surePassword: "",
|
||||||
|
email:""
|
||||||
|
},
|
||||||
|
rules: {
|
||||||
|
username: [{ validator: validateUsername, trigger: "blur" }],
|
||||||
|
password: [{ validator: validatePassword, trigger: "blur" }],
|
||||||
|
email: [{ validator: validateEmail, trigger: "blur" }],
|
||||||
|
surePassword: [
|
||||||
|
{ validator: validateSurePassword, trigger: "blur" },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
activeName: "login",
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapActions("loginModule",["setUserActions"]),
|
||||||
|
submitForm(formName) {
|
||||||
|
this.$refs[formName].validate((valid) => {
|
||||||
|
if (valid) {
|
||||||
|
if (this.activeName === "login") {
|
||||||
|
this.setUserActions(this.user)
|
||||||
|
}
|
||||||
|
if (this.activeName === "register") {
|
||||||
|
this.$api.register({
|
||||||
|
username:this.user.username,
|
||||||
|
password:this.user.password,
|
||||||
|
email:this.user.email
|
||||||
|
}).then(res => {
|
||||||
|
if (res.data.success) {
|
||||||
|
MessageBox.alert(res.data.msg || '注册成功', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
type: 'success'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
MessageBox.alert(res.data.msg || '注册失败', '提示', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).catch(error => {
|
||||||
|
MessageBox.alert('请勿重复注册', '错误', {
|
||||||
|
confirmButtonText: '确定',
|
||||||
|
type: 'error'
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log("error submit!!");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleClick(tab, event) {},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="less">
|
||||||
|
.login {
|
||||||
|
min-height: 100vh;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
// 更丰富的渐变背景
|
||||||
|
background: linear-gradient(135deg,
|
||||||
|
#002FA7 0%, // 克莱因蓝
|
||||||
|
#0047AB 50%, // 钴蓝
|
||||||
|
#1E90FF 100% // 道奇蓝
|
||||||
|
);
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
// 动态光斑效果
|
||||||
|
.light-spots {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
|
||||||
|
&::before, &::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 200px;
|
||||||
|
height: 200px;
|
||||||
|
border-radius: 50%;
|
||||||
|
background: rgba(255, 255, 255, 0.1);
|
||||||
|
animation: spotFloat 10s infinite alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
top: 20%;
|
||||||
|
left: 20%;
|
||||||
|
animation-delay: -5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
bottom: 20%;
|
||||||
|
right: 20%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 波纹动画效果
|
||||||
|
.ripples {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
|
||||||
|
&::before, &::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: radial-gradient(circle, rgba(255,255,255,0.2) 0%, transparent 70%);
|
||||||
|
border-radius: 50%;
|
||||||
|
animation: rippleEffect 8s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
animation-delay: -4s;
|
||||||
|
animation-duration: 10s;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 流动的线条效果
|
||||||
|
.flowing-lines {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 200%;
|
||||||
|
height: 200%;
|
||||||
|
top: -50%;
|
||||||
|
left: -50%;
|
||||||
|
background: linear-gradient(45deg,
|
||||||
|
transparent 45%,
|
||||||
|
rgba(255,255,255,0.1) 50%,
|
||||||
|
transparent 55%
|
||||||
|
);
|
||||||
|
animation: flowingLines 5s linear infinite;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-container {
|
||||||
|
width: 480px;
|
||||||
|
backdrop-filter: blur(20px);
|
||||||
|
background: rgba(255, 255, 255, 0.08);
|
||||||
|
border-radius: 20px;
|
||||||
|
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
|
||||||
|
padding: 30px;
|
||||||
|
position: relative;
|
||||||
|
z-index: 1;
|
||||||
|
animation: float 6s ease-in-out infinite;
|
||||||
|
transition: all 0.4s ease;
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: -2px;
|
||||||
|
left: -2px;
|
||||||
|
right: -2px;
|
||||||
|
bottom: -2px;
|
||||||
|
background: linear-gradient(45deg,
|
||||||
|
#002FA7, // 克莱因蓝
|
||||||
|
);
|
||||||
|
border-radius: 22px;
|
||||||
|
z-index: -1;
|
||||||
|
animation: containerGlow 4s linear infinite;
|
||||||
|
filter: blur(15px);
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
transform: translateY(-5px);
|
||||||
|
box-shadow: 0 15px 35px rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-tabs {
|
||||||
|
:deep(.el-tabs__nav-wrap) {
|
||||||
|
&::after {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-tabs__item) {
|
||||||
|
color: #ffffff;
|
||||||
|
font-size: 16px;
|
||||||
|
transition: all 0.3s;
|
||||||
|
padding: 0 20px;
|
||||||
|
|
||||||
|
&.is-active {
|
||||||
|
color: #fff;
|
||||||
|
font-weight: 600;
|
||||||
|
text-shadow: 0 0 10px rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #fff;
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-tabs__active-bar) {
|
||||||
|
background: linear-gradient(90deg, #ffffff, rgba(255, 255, 255, 0.6));
|
||||||
|
height: 3px;
|
||||||
|
border-radius: 3px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.login-form {
|
||||||
|
margin-top: 30px;
|
||||||
|
|
||||||
|
.el-form-item__label {
|
||||||
|
color: #ffffff !important;
|
||||||
|
font-weight: 500;
|
||||||
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-input {
|
||||||
|
:deep(.el-input__inner) {
|
||||||
|
background: rgba(255, 255, 255, 0.08);
|
||||||
|
border: 1px solid rgba(255, 255, 255, 0.2);
|
||||||
|
border-radius: 10px;
|
||||||
|
color: #ffffff;
|
||||||
|
height: 45px;
|
||||||
|
padding-left: 45px;
|
||||||
|
transition: all 0.3s;
|
||||||
|
font-size: 15px;
|
||||||
|
|
||||||
|
&::placeholder {
|
||||||
|
color: rgba(255, 255, 255, 0.6);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: rgba(255, 255, 255, 0.15);
|
||||||
|
border-color: rgba(255, 255, 255, 0.3);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
border-color: #002FA7;
|
||||||
|
box-shadow: 0 0 15px rgba(0, 47, 167, 0.5);
|
||||||
|
animation: borderFlow 2s linear infinite;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-input__prefix) {
|
||||||
|
left: 15px;
|
||||||
|
color: #ffffff;
|
||||||
|
opacity: 0.8;
|
||||||
|
animation: iconGlow 2s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.submit-btn {
|
||||||
|
width: 100%;
|
||||||
|
height: 45px;
|
||||||
|
background: linear-gradient(45deg, #002FA7, #0047AB);
|
||||||
|
border: none;
|
||||||
|
border-radius: 10px;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
color: #fff;
|
||||||
|
transition: all 0.3s;
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: -50%;
|
||||||
|
left: -50%;
|
||||||
|
width: 200%;
|
||||||
|
height: 200%;
|
||||||
|
background: radial-gradient(
|
||||||
|
circle,
|
||||||
|
rgba(255, 255, 255, 0.3) 0%,
|
||||||
|
transparent 50%
|
||||||
|
);
|
||||||
|
animation: btnRadialGlow 3s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: linear-gradient(45deg, #0047AB, #1E90FF);
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: 0 7px 20px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
transform: translateY(1px);
|
||||||
|
}
|
||||||
|
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 30px;
|
||||||
|
height: 100%;
|
||||||
|
top: 0;
|
||||||
|
left: -30px;
|
||||||
|
background: linear-gradient(
|
||||||
|
to right,
|
||||||
|
transparent,
|
||||||
|
rgba(255, 255, 255, 0.3),
|
||||||
|
transparent
|
||||||
|
);
|
||||||
|
transform: skewX(-45deg);
|
||||||
|
animation: btnShine 3s infinite;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.help-content {
|
||||||
|
text-align: center;
|
||||||
|
color: #ffffff;
|
||||||
|
padding: 30px;
|
||||||
|
|
||||||
|
i {
|
||||||
|
font-size: 40px;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
animation: pulse 2s infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
font-size: 15px;
|
||||||
|
color: #ffffff;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加高级光束效果
|
||||||
|
.light-beam {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
pointer-events: none;
|
||||||
|
opacity: 0.5;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 2px;
|
||||||
|
background: linear-gradient(90deg,
|
||||||
|
transparent 0%,
|
||||||
|
rgba(255, 255, 255, 0.2) 50%,
|
||||||
|
transparent 100%
|
||||||
|
);
|
||||||
|
animation: scanLine 4s linear infinite;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 增强登录容器的交互效果
|
||||||
|
.login-container {
|
||||||
|
// 添加磁性悬浮效果
|
||||||
|
&:hover {
|
||||||
|
.el-input__inner {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
transition: transform 0.3s ease;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 增强输入框焦点效果
|
||||||
|
.form-input {
|
||||||
|
&:focus-within {
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
inset: -2px;
|
||||||
|
border-radius: inherit;
|
||||||
|
padding: 2px;
|
||||||
|
background: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
transparent,
|
||||||
|
rgba(255, 255, 255, 0.2),
|
||||||
|
transparent
|
||||||
|
);
|
||||||
|
mask: linear-gradient(#fff 0 0) content-box,
|
||||||
|
linear-gradient(#fff 0 0);
|
||||||
|
mask-composite: exclude;
|
||||||
|
animation: focusGlow 2s linear infinite;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 增强按钮点击效果
|
||||||
|
.submit-btn {
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
transform: scale(0.98);
|
||||||
|
&::after {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
inset: 0;
|
||||||
|
border-radius: inherit;
|
||||||
|
background: radial-gradient(
|
||||||
|
circle at center,
|
||||||
|
rgba(255, 255, 255, 0.3),
|
||||||
|
transparent 70%
|
||||||
|
);
|
||||||
|
animation: buttonPress 0.3s ease-out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 动画关键帧
|
||||||
|
@keyframes float {
|
||||||
|
0%, 100% { transform: translateY(0); }
|
||||||
|
50% { transform: translateY(-10px); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes borderGlow {
|
||||||
|
0%, 100% { opacity: 0.5; }
|
||||||
|
50% { opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes shine {
|
||||||
|
0% {
|
||||||
|
transform: translateX(-100%) skewX(-15deg);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
20% { opacity: 0.5; }
|
||||||
|
100% {
|
||||||
|
transform: translateX(100%) skewX(-15deg);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes rotate {
|
||||||
|
from { transform: rotate(0deg); }
|
||||||
|
to { transform: rotate(360deg); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes pulse {
|
||||||
|
0% { transform: scale(1); opacity: 1; }
|
||||||
|
50% { transform: scale(1.1); opacity: 0.8; }
|
||||||
|
100% { transform: scale(1); opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes buttonShine {
|
||||||
|
0% { left: -100%; }
|
||||||
|
50% { left: 100%; }
|
||||||
|
100% { left: 100%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes particleMove {
|
||||||
|
0% { transform: translateY(0) rotate(0deg); }
|
||||||
|
100% { transform: translateY(-100%) rotate(360deg); }
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加新的光波动画
|
||||||
|
@keyframes ripple {
|
||||||
|
0% { transform: scale(1); opacity: 0.4; }
|
||||||
|
100% { transform: scale(2); opacity: 0; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// 响应式适配
|
||||||
|
@media screen and (max-width: 576px) {
|
||||||
|
.login {
|
||||||
|
.login-container {
|
||||||
|
width: 90%;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增动画关键帧
|
||||||
|
@keyframes spotFloat {
|
||||||
|
0% { transform: translate(0, 0) scale(1); }
|
||||||
|
50% { transform: translate(30px, 20px) scale(1.2); }
|
||||||
|
100% { transform: translate(-20px, -15px) scale(0.8); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes rippleEffect {
|
||||||
|
0% {
|
||||||
|
transform: scale(0.5);
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
transform: scale(2);
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(0.5);
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes flowingLines {
|
||||||
|
0% { transform: translateX(-50%) rotate(0deg); }
|
||||||
|
100% { transform: translateX(50%) rotate(360deg); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes borderRotate {
|
||||||
|
0% { filter: hue-rotate(0deg); }
|
||||||
|
100% { filter: hue-rotate(360deg); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes inputGlow {
|
||||||
|
0% { box-shadow: 0 0 5px rgba(255, 255, 255, 0.2); }
|
||||||
|
100% { box-shadow: 0 0 20px rgba(255, 255, 255, 0.4); }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes btnShine {
|
||||||
|
0% { left: -30px; }
|
||||||
|
100% { left: 130%; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加新的呼吸灯效果
|
||||||
|
@keyframes breathe {
|
||||||
|
0%, 100% { opacity: 0.4; }
|
||||||
|
50% { opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
// 添加3D悬浮效果
|
||||||
|
@keyframes float3D {
|
||||||
|
0% {
|
||||||
|
transform: perspective(1000px) rotateX(0deg) rotateY(0deg);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
transform: perspective(1000px) rotateX(3deg) rotateY(5deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: perspective(1000px) rotateX(0deg) rotateY(0deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes borderFlow {
|
||||||
|
0% {
|
||||||
|
border-image: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
#002FA7 0%,
|
||||||
|
#0047AB 25%,
|
||||||
|
#1E90FF 50%,
|
||||||
|
#0047AB 75%,
|
||||||
|
#002FA7 100%
|
||||||
|
) 1;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
border-image: linear-gradient(
|
||||||
|
90deg,
|
||||||
|
#002FA7 100%,
|
||||||
|
#0047AB 0%,
|
||||||
|
#1E90FF 25%,
|
||||||
|
#0047AB 50%,
|
||||||
|
#002FA7 75%
|
||||||
|
) 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes iconGlow {
|
||||||
|
0%, 100% {
|
||||||
|
text-shadow: 0 0 5px rgba(255, 255, 255, 0.5);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
text-shadow: 0 0 15px rgba(255, 255, 255, 0.8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes containerGlow {
|
||||||
|
0% {
|
||||||
|
filter: blur(15px) hue-rotate(0deg);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
filter: blur(15px) hue-rotate(360deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 修改所有文字为白色
|
||||||
|
.el-form-item__label,
|
||||||
|
.el-tabs__item,
|
||||||
|
.help-content,
|
||||||
|
.el-input__inner,
|
||||||
|
.submit-btn {
|
||||||
|
color: #ffffff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 增强提交按钮效果
|
||||||
|
.submit-btn {
|
||||||
|
background: linear-gradient(45deg, #002FA7, #0047AB);
|
||||||
|
position: relative;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
content: '';
|
||||||
|
position: absolute;
|
||||||
|
top: -50%;
|
||||||
|
left: -50%;
|
||||||
|
width: 200%;
|
||||||
|
height: 200%;
|
||||||
|
background: radial-gradient(
|
||||||
|
circle,
|
||||||
|
rgba(255, 255, 255, 0.3) 0%,
|
||||||
|
transparent 50%
|
||||||
|
);
|
||||||
|
animation: btnRadialGlow 3s ease-in-out infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background: linear-gradient(45deg, #0047AB, #1E90FF);
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes btnRadialGlow {
|
||||||
|
0% {
|
||||||
|
transform: scale(0.5) rotate(0deg);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(2) rotate(360deg);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.form-input {
|
||||||
|
:deep(.el-input__inner) {
|
||||||
|
color: #ffffff !important;
|
||||||
|
-webkit-text-fill-color: #ffffff !important;
|
||||||
|
background-color: rgba(255, 255, 255, 0.08) !important;
|
||||||
|
caret-color: #ffffff !important; // 光标颜色
|
||||||
|
|
||||||
|
// 处理自动填充
|
||||||
|
&:-webkit-autofill,
|
||||||
|
&:-webkit-autofill:hover,
|
||||||
|
&:-webkit-autofill:focus,
|
||||||
|
&:-webkit-autofill:active {
|
||||||
|
-webkit-text-fill-color: #ffffff !important;
|
||||||
|
-webkit-box-shadow: 0 0 0 30px transparent inset !important;
|
||||||
|
transition: background-color 5000s ease-in-out 0s;
|
||||||
|
background-color: transparent !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 占位符样式
|
||||||
|
&::placeholder {
|
||||||
|
color: rgba(255, 255, 255, 0.6) !important;
|
||||||
|
-webkit-text-fill-color: rgba(255, 255, 255, 0.6) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 全局覆盖输入框样式
|
||||||
|
:deep(.el-input__inner),
|
||||||
|
:deep(.el-input input),
|
||||||
|
:deep(.el-input textarea) {
|
||||||
|
color: #ffffff !important;
|
||||||
|
-webkit-text-fill-color: #ffffff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 标签文字颜色
|
||||||
|
:deep(.el-form-item__label) {
|
||||||
|
color: #ffffff !important;
|
||||||
|
-webkit-text-fill-color: #ffffff !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 新增动画关键帧
|
||||||
|
@keyframes scanLine {
|
||||||
|
0% {
|
||||||
|
transform: translateY(-100%);
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: translateY(100%);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes focusGlow {
|
||||||
|
0% {
|
||||||
|
background-position: 200% 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
background-position: -200% 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes buttonPress {
|
||||||
|
0% {
|
||||||
|
transform: scale(0.8);
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
transform: scale(1.5);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
.el-input__inner {
|
||||||
|
color: #ffffff !important;
|
||||||
|
-webkit-text-fill-color: #ffffff !important;
|
||||||
|
background-color: rgba(255, 255, 255, 0.08) !important;
|
||||||
|
}
|
||||||
|
</style>
|
After Width: | Height: | Size: 6.7 KiB |
@ -0,0 +1,59 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<bar title="法律助手" left="bars" right="search" color="font-white" />
|
||||||
|
<carousel />
|
||||||
|
<navigation />
|
||||||
|
<ask-home />
|
||||||
|
<infer-home />
|
||||||
|
<legal-home />
|
||||||
|
<background />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Background from "@/components/background/Background";
|
||||||
|
import Carousel from "@/components/carousel/Carousel";
|
||||||
|
import Bar from "@/components/bar/Bar";
|
||||||
|
import Navigation from "@/components/main/Navigation";
|
||||||
|
import AskHome from "@/components/main/ask/AskHome";
|
||||||
|
import InferHome from "@/components/main/infer/InferHome";
|
||||||
|
import LegalHome from "@/components/main/legal/LegalHome";
|
||||||
|
import {mapState} from 'vuex'
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "Home",
|
||||||
|
components: {
|
||||||
|
LegalHome,
|
||||||
|
InferHome,
|
||||||
|
Navigation,
|
||||||
|
Background,
|
||||||
|
Carousel,
|
||||||
|
Bar,
|
||||||
|
AskHome
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState(['currentTab'])
|
||||||
|
},
|
||||||
|
watch: {
|
||||||
|
currentTab() {
|
||||||
|
let metaThemeColor = document.querySelector("meta[name=theme-color]");
|
||||||
|
if(this.currentTab === 'Home') {
|
||||||
|
metaThemeColor.setAttribute("content", "#ffa947");
|
||||||
|
} else {
|
||||||
|
setTimeout(() => {
|
||||||
|
if(this.currentTab === 'Ask') {
|
||||||
|
metaThemeColor.setAttribute("content", "#12D8FA");
|
||||||
|
} else if(this.currentTab === 'Infer') {
|
||||||
|
metaThemeColor.setAttribute("content", "#3ba675");
|
||||||
|
}
|
||||||
|
}, 400);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<style>
|
||||||
|
* {
|
||||||
|
box-sizing: border-box!important;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,30 @@
|
|||||||
|
<template>
|
||||||
|
<div class="background">
|
||||||
|
<background-color :colors="setting.color"/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapState } from 'vuex'
|
||||||
|
import BackgroundColor from "@/components/background/BackgroundColor";
|
||||||
|
export default {
|
||||||
|
name: "Background",
|
||||||
|
components: {
|
||||||
|
BackgroundColor
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState(['setting'])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.background {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,33 @@
|
|||||||
|
<template>
|
||||||
|
<div class="background-color"
|
||||||
|
:style="{ backgroundImage: gradientColor }"
|
||||||
|
></div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "BackgroundColor",
|
||||||
|
props: {
|
||||||
|
colors: {
|
||||||
|
type: Array
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
gradientColor () {
|
||||||
|
const colorBottom = `color-stop(30%, ${this.colors[0]})`;
|
||||||
|
const colorTop = `to(${this.colors[1]})`;
|
||||||
|
return `-webkit-gradient(linear, left bottom, left top, ${colorBottom}, ${colorTop})`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.background-color {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
transition: opacity 0.5s ease;
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,63 @@
|
|||||||
|
<template>
|
||||||
|
<div class="bar text-shadow" :class="[`${color}`]">
|
||||||
|
<span @click="$emit('left')">
|
||||||
|
<i :class="['fas', `fa-${left}`]"></i>
|
||||||
|
</span>
|
||||||
|
<span>{{ title }}</span>
|
||||||
|
<span @click="$emit('right')">
|
||||||
|
<i :class="['fas', `fa-${right}`]"></i>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
left: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
right: {
|
||||||
|
type: String,
|
||||||
|
default: ''
|
||||||
|
},
|
||||||
|
color: {
|
||||||
|
type: String,
|
||||||
|
default: 'font-white'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.bar {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
flex-direction: row;
|
||||||
|
height: 54px;
|
||||||
|
font-size: 18px;
|
||||||
|
z-index: 1;
|
||||||
|
padding: 0 15px;
|
||||||
|
transition-duration: 250ms;
|
||||||
|
}
|
||||||
|
|
||||||
|
span {
|
||||||
|
padding: 5px 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.font-white {
|
||||||
|
color: #fefefe;
|
||||||
|
text-shadow: 2px 4px 6px rgba(0, 0, 0, 0.15);
|
||||||
|
}
|
||||||
|
|
||||||
|
.font-dark {
|
||||||
|
color: #37474f;
|
||||||
|
text-shadow: 2px 4px 6px rgba(0, 0, 0, 0.3);
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,45 @@
|
|||||||
|
<template>
|
||||||
|
<div class="carousel">
|
||||||
|
<p class="heading-1">智能</p>
|
||||||
|
<p class="heading-2">法律助手</p>
|
||||||
|
<p class="heading-3">Smart Legal Assistant</p>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.carousel {
|
||||||
|
display: flex;
|
||||||
|
padding: 0 40px;
|
||||||
|
height: 220px;
|
||||||
|
justify-content: flex-end;
|
||||||
|
flex-direction: column;
|
||||||
|
transition: all 0.5s ease;
|
||||||
|
color: #fefefe;
|
||||||
|
text-shadow: 2px 4px 5px rgba(0, 0, 0, 0.2);
|
||||||
|
}
|
||||||
|
.heading-1 {
|
||||||
|
font-size: 48px;
|
||||||
|
opacity: 95%;
|
||||||
|
font-weight: 200;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.heading-2 {
|
||||||
|
font-size: 40px;
|
||||||
|
opacity: 95%;
|
||||||
|
font-weight: 300;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
.heading-3 {
|
||||||
|
opacity: 90%;
|
||||||
|
font-size: 25px;
|
||||||
|
font-weight: 200;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,28 @@
|
|||||||
|
<template>
|
||||||
|
<div class="ask-card">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "AskCard"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.ask-card {
|
||||||
|
width: 100%;
|
||||||
|
height: 60px;
|
||||||
|
background-color: rgba(255, 255, 255, 0.80);
|
||||||
|
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius: 30px;
|
||||||
|
padding-top: 12px;
|
||||||
|
margin-top: 15px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
transition-duration: 2s;
|
||||||
|
will-change: transform;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,13 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "AskList"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,32 @@
|
|||||||
|
<template>
|
||||||
|
<div class="navigation">
|
||||||
|
<!--通过tab控制跳往哪个子组件-->
|
||||||
|
<navigator-button tab="Ask" title="问答咨询" icon="far fa-comment"/>
|
||||||
|
<navigator-button tab="Infer" title="案情推断" icon="far fa-compass"/>
|
||||||
|
<navigator-button tab="Legal" title="文书查询" icon="fas fa-search"/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import NavigatorButton from "@/components/main/NavigatorButton";
|
||||||
|
export default {
|
||||||
|
name: "Navigation",
|
||||||
|
components: {
|
||||||
|
NavigatorButton,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.navigation {
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-content: center;
|
||||||
|
padding: 0 40px;
|
||||||
|
margin-top: 25px;
|
||||||
|
justify-content: flex-start;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
transition: all 0.5s ease;
|
||||||
|
color: #fefefe;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,79 @@
|
|||||||
|
<template>
|
||||||
|
<div class="button" @click="handleClick">
|
||||||
|
<i :class="[`${icon}`]" class="button-icon"></i>
|
||||||
|
<span class="button-title">{{ title }}</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {mapState} from 'vuex'
|
||||||
|
export default {
|
||||||
|
props: {
|
||||||
|
tab: {
|
||||||
|
type: String,
|
||||||
|
default: 'Ask'
|
||||||
|
},
|
||||||
|
icon: {
|
||||||
|
type: String,
|
||||||
|
default: 'comment'
|
||||||
|
},
|
||||||
|
title: {
|
||||||
|
type: String,
|
||||||
|
default: '问答咨询'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState(['selected', 'unselect', 'onAsk'])
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
handleClick () {
|
||||||
|
const appRect = document.querySelector('#app').getBoundingClientRect();
|
||||||
|
const elRect = this.$el.getBoundingClientRect();
|
||||||
|
const rect = {};
|
||||||
|
const tab = this.tab;
|
||||||
|
rect.top = elRect.top - appRect.top;
|
||||||
|
rect.left = elRect.left - appRect.left;
|
||||||
|
rect.width = elRect.width;
|
||||||
|
rect.height = elRect.height;
|
||||||
|
rect.appWidth = appRect.width;
|
||||||
|
rect.appHeight = appRect.height;
|
||||||
|
this.$store.commit('selectTab', { rect });
|
||||||
|
this.$store.commit('setTab', tab)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.button {
|
||||||
|
width: 100%;
|
||||||
|
height: 60px;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius: 30px;
|
||||||
|
padding-top: 12px;
|
||||||
|
margin-top: 15px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
transition-duration: 2s;
|
||||||
|
will-change: transform;
|
||||||
|
text-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.button:hover {
|
||||||
|
background-color: rgba(255, 255, 255, 0.87);
|
||||||
|
box-shadow: 5px 10px 10px rgba(0, 0, 0, 0.18);
|
||||||
|
}
|
||||||
|
.button-icon {
|
||||||
|
font-size: 30px;
|
||||||
|
color: #455a64;
|
||||||
|
margin-right: 15px;
|
||||||
|
margin-top: 2px;
|
||||||
|
margin-left: -25px;
|
||||||
|
}
|
||||||
|
.button-title {
|
||||||
|
font-size: 18px;
|
||||||
|
margin-top: 5px;
|
||||||
|
color: #37474f;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,13 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "AskDetail"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,13 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "InferDetail"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,224 @@
|
|||||||
|
<template>
|
||||||
|
<transition name="show" @enter="handleEnter" @leave="handleLeave">
|
||||||
|
<div class="infer-home" v-if="selected&&(currentTab=='Infer')">
|
||||||
|
<bar id="app-bar" class="app-bar" :color="barColor" @left="unselectTab" left="arrow-left"/>
|
||||||
|
<div class="infer-content">
|
||||||
|
<div class="infer-heading">
|
||||||
|
<i v-if="loading" class="fas fa-5x fa-spin fa-spinner infer-icon"></i>
|
||||||
|
<i v-else class="fas fa-microphone-alt infer-icon"></i>
|
||||||
|
<search-bar class="search-bar" type="area" v-on:result="handleInferResult" mode="infer" v-on:loading="handleLoading" />
|
||||||
|
<h1 class="infer-title">案情推断</h1><br>
|
||||||
|
</div>
|
||||||
|
<div id="infer-list" class="infer-list">
|
||||||
|
<home-card class="home-card" v-for="(infer, index) in data" :theId="index" :key="index" :title="title(index)" :content="infer" />
|
||||||
|
</div>
|
||||||
|
<div class="infer-footer">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {mapState, mapMutations} from 'vuex';
|
||||||
|
import Bar from "@/components/bar/Bar";
|
||||||
|
import SearchBar from "@/components/utils/SearchBar";
|
||||||
|
import HomeCard from "@/components/utils/HomeCard";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "InferHome",
|
||||||
|
components: {
|
||||||
|
HomeCard,
|
||||||
|
Bar,
|
||||||
|
SearchBar
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
barColor: 'font-white',
|
||||||
|
data: null,
|
||||||
|
crime: null,
|
||||||
|
loading: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState(['selected', 'unselect', 'currentTab']),
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapMutations(['unselectTab']),
|
||||||
|
handleEnter(el) {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: `${this.selected.rect.top}px`,
|
||||||
|
left: `${this.selected.rect.left}px`,
|
||||||
|
width: `${this.selected.rect.width}px`,
|
||||||
|
height: `${this.selected.rect.height}px`
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
width: `${this.selected.rect.appWidth}px`,
|
||||||
|
height: `${this.selected.rect.appHeight}px`
|
||||||
|
})
|
||||||
|
}, 0)
|
||||||
|
},
|
||||||
|
handleLeave(el) {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
width: `${this.unselect.rect.appWidth}px`,
|
||||||
|
height: `${this.unselect.rect.appHeight}px`
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: `${this.unselect.rect.top}px`,
|
||||||
|
left: `${this.unselect.rect.left}px`,
|
||||||
|
width: `${this.unselect.rect.width}px`,
|
||||||
|
height: `${this.unselect.rect.height}px`
|
||||||
|
})
|
||||||
|
}, 0)
|
||||||
|
},
|
||||||
|
handleLoading(data) {
|
||||||
|
this.loading = data;
|
||||||
|
},
|
||||||
|
handleInferResult(data) {
|
||||||
|
delete data.id;
|
||||||
|
this.crime = data.crimeName;
|
||||||
|
delete data.crimeName;
|
||||||
|
this.data = data;
|
||||||
|
this.loading = false;
|
||||||
|
},
|
||||||
|
title(index) {
|
||||||
|
if(index==='concept') {
|
||||||
|
return '罪名解释'
|
||||||
|
} else if(index==='feature') {
|
||||||
|
return '罪名特征'
|
||||||
|
} else if(index==='rending') {
|
||||||
|
return '定罪条件'
|
||||||
|
} else if(index==='punish') {
|
||||||
|
return '量刑区间'
|
||||||
|
} else if(index==='laws') {
|
||||||
|
return '有关法条'
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.infer-home {
|
||||||
|
position: fixed;
|
||||||
|
border-radius: 0;
|
||||||
|
color: #444;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
padding: 0 12px;
|
||||||
|
will-change: top, left, width, height;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.infer-home::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-bar {
|
||||||
|
width: 100%;
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.infer-heading {
|
||||||
|
width: calc(100% + 60px);
|
||||||
|
height: 450px;
|
||||||
|
color: #fff;
|
||||||
|
background: #2c7d59;
|
||||||
|
text-align: center;
|
||||||
|
text-shadow: 0 5px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
background: -webkit-linear-gradient(to top, #2c7d59, #3ba675);
|
||||||
|
background: linear-gradient(to top, #2c7d59, #3ba675);
|
||||||
|
margin-top: -54px;
|
||||||
|
margin-left: -30px;
|
||||||
|
margin-right: -30px;
|
||||||
|
padding: 30px;
|
||||||
|
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.15);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.infer-heading h1 {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-bar {
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-bottom: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.infer-icon {
|
||||||
|
font-size: 35px;
|
||||||
|
color: #fafafa;
|
||||||
|
margin-bottom: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-card {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-card:first-of-type {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.infer-footer {
|
||||||
|
width: 100%;
|
||||||
|
height: 60px;
|
||||||
|
padding-top: 15px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
font-size: 15px;
|
||||||
|
color: #37474f;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-enter-to,
|
||||||
|
.show-leave {
|
||||||
|
border-radius: 0;
|
||||||
|
|
||||||
|
.infer-home {
|
||||||
|
padding: 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.infer-home,
|
||||||
|
.app-bar,
|
||||||
|
.infer-heading,
|
||||||
|
.infer-content {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-leave-to,
|
||||||
|
.show-enter {
|
||||||
|
border-radius: 30px;
|
||||||
|
|
||||||
|
.infer-home {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.infer-home,
|
||||||
|
.app-bar,
|
||||||
|
.infer-heading,
|
||||||
|
.infer-content{
|
||||||
|
opacity: 0;
|
||||||
|
transform: translate3d(0, -40px, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-enter-active,
|
||||||
|
.show-leave-active {
|
||||||
|
transition: all 0.5s ease;
|
||||||
|
|
||||||
|
.infer-home,
|
||||||
|
.app-bar,
|
||||||
|
.infer-heading,
|
||||||
|
.infer-content{
|
||||||
|
transition: all 0.5s ease;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,13 @@
|
|||||||
|
<template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
name: "LegalDetail"
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
@ -0,0 +1,211 @@
|
|||||||
|
<template>
|
||||||
|
<transition name="show" @enter="handleEnter" @leave="handleLeave">
|
||||||
|
<div class="legal-home" v-if="selected&&(currentTab=='Legal')">
|
||||||
|
<bar id="app-bar" class="app-bar" :color="barColor" @left="unselectTab" left="arrow-left"/>
|
||||||
|
<div class="legal-content">
|
||||||
|
<div class="legal-heading">
|
||||||
|
<search-bar class="search-bar" type="area" v-on:result="handleInferResult" mode="legal" v-on:loading="handleLoading"/>
|
||||||
|
<h1 class="legal-title">查询相似文书</h1>
|
||||||
|
</div>
|
||||||
|
<div id="legal-list" class="legal-list">
|
||||||
|
<home-card class="home-card" v-for="(theCase,index) in data" :theId="index" :key="index" :title="theCase.title" :content="theCase"/>
|
||||||
|
</div>
|
||||||
|
<div class="legal-footer"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {mapState, mapMutations} from 'vuex'
|
||||||
|
import Bar from "@/components/bar/Bar";
|
||||||
|
import HomeCard from "@/components/utils/HomeCard";
|
||||||
|
import SearchBar from "@/components/utils/SearchBar";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "LegalHome",
|
||||||
|
components: {
|
||||||
|
HomeCard,
|
||||||
|
Bar,
|
||||||
|
SearchBar
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
barColor: 'font-white',
|
||||||
|
data: {},
|
||||||
|
loading: false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState(['selected', 'unselect', 'currentTab'])
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapMutations(['unselectTab']),
|
||||||
|
handleInferResult(data) {
|
||||||
|
this.data=data;
|
||||||
|
},
|
||||||
|
handleLoading(loading) {
|
||||||
|
this.loading=loading;
|
||||||
|
},
|
||||||
|
handleEnter(el) {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: `${this.selected.rect.top}px`,
|
||||||
|
left: `${this.selected.rect.left}px`,
|
||||||
|
width: `${this.selected.rect.width}px`,
|
||||||
|
height: `${this.selected.rect.height}px`
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
width: `${this.selected.rect.appWidth}px`,
|
||||||
|
height: `${this.selected.rect.appHeight}px`
|
||||||
|
})
|
||||||
|
}, 0)
|
||||||
|
},
|
||||||
|
handleLeave(el) {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
width: `${this.unselect.rect.appWidth}px`,
|
||||||
|
height: `${this.unselect.rect.appHeight}px`
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: `${this.unselect.rect.top}px`,
|
||||||
|
left: `${this.unselect.rect.left}px`,
|
||||||
|
width: `${this.unselect.rect.width}px`,
|
||||||
|
height: `${this.unselect.rect.height}px`
|
||||||
|
})
|
||||||
|
}, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.legal-home {
|
||||||
|
position: fixed;
|
||||||
|
border-radius: 0;
|
||||||
|
color: #444;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
padding: 0 12px;
|
||||||
|
will-change: top, left, width, height;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-home::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-bar {
|
||||||
|
width: 100%;
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-heading {
|
||||||
|
width: calc(100% + 60px);
|
||||||
|
height: 350px;
|
||||||
|
color: #fff;
|
||||||
|
background: #6e18e1;
|
||||||
|
text-align: center;
|
||||||
|
text-shadow: 0 5px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
background: -webkit-linear-gradient(to top, #4A00E0, #8E2DE2);
|
||||||
|
background: linear-gradient(to top, #4A00E0, #8E2DE2);
|
||||||
|
margin-top: -54px;
|
||||||
|
margin-left: -30px;
|
||||||
|
margin-right: -30px;
|
||||||
|
padding: 30px;
|
||||||
|
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.15);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-heading h1 {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-bar {
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-bottom: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-icon {
|
||||||
|
font-size: 30px;
|
||||||
|
color: #fafafa;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-card {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-card:first-of-type {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-footer {
|
||||||
|
width: 100%;
|
||||||
|
height: 60px;
|
||||||
|
padding-top: 15px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
font-size: 15px;
|
||||||
|
color: #37474f;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-enter-to,
|
||||||
|
.show-leave {
|
||||||
|
border-radius: 0;
|
||||||
|
|
||||||
|
.legal-home {
|
||||||
|
padding: 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-home,
|
||||||
|
.app-bar,
|
||||||
|
.legal-heading,
|
||||||
|
.legal-content {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-leave-to,
|
||||||
|
.show-enter {
|
||||||
|
border-radius: 30px;
|
||||||
|
|
||||||
|
.legal-home {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-home,
|
||||||
|
.app-bar,
|
||||||
|
.legal-heading,
|
||||||
|
.legal-content {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translate3d(0, -40px, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-enter-active,
|
||||||
|
.show-leave-active {
|
||||||
|
transition: all 0.5s ease;
|
||||||
|
|
||||||
|
.legal-home,
|
||||||
|
.app-bar,
|
||||||
|
.legal-heading,
|
||||||
|
.legal-content {
|
||||||
|
transition: all 0.5s ease;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,207 @@
|
|||||||
|
<template>
|
||||||
|
<transition name="show" @enter="handleEnter" @leave="handleLeave">
|
||||||
|
<div class="legal-home" v-if="selected&&(currentTab=='Legal')">
|
||||||
|
<bar id="app-bar" class="app-bar" :color="barColor" @left="unselectTab" left="arrow-left"/>
|
||||||
|
<div class="legal-content">
|
||||||
|
<div class="legal-heading">
|
||||||
|
<form class="upload-form">
|
||||||
|
<a href="#"><i class="fas fa-upload legal-icon"></i></a>
|
||||||
|
<Upload class="upload" />
|
||||||
|
</form>
|
||||||
|
<h1 class="legal-title">查询相似文书</h1>
|
||||||
|
</div>
|
||||||
|
<div id="legal-list" class="legal-list">
|
||||||
|
<home-card class="home-card" />
|
||||||
|
</div>
|
||||||
|
<div class="legal-footer">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</transition>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import {mapState, mapMutations} from 'vuex'
|
||||||
|
import Bar from "@/components/bar/Bar";
|
||||||
|
import HomeCard from "@/components/utils/HomeCard";
|
||||||
|
import Upload from "@/components/utils/Upload";
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: "LegalHome",
|
||||||
|
components: {
|
||||||
|
HomeCard,
|
||||||
|
Bar,
|
||||||
|
Upload
|
||||||
|
},
|
||||||
|
data: function () {
|
||||||
|
return {
|
||||||
|
barColor: 'font-white',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapState(['selected', 'unselect', 'currentTab'])
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
...mapMutations(['unselectTab']),
|
||||||
|
handleEnter(el) {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: `${this.selected.rect.top}px`,
|
||||||
|
left: `${this.selected.rect.left}px`,
|
||||||
|
width: `${this.selected.rect.width}px`,
|
||||||
|
height: `${this.selected.rect.height}px`
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
width: `${this.selected.rect.appWidth}px`,
|
||||||
|
height: `${this.selected.rect.appHeight}px`
|
||||||
|
})
|
||||||
|
}, 0)
|
||||||
|
},
|
||||||
|
handleLeave(el) {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
width: `${this.unselect.rect.appWidth}px`,
|
||||||
|
height: `${this.unselect.rect.appHeight}px`
|
||||||
|
});
|
||||||
|
setTimeout(() => {
|
||||||
|
Object.assign(el.style, {
|
||||||
|
top: `${this.unselect.rect.top}px`,
|
||||||
|
left: `${this.unselect.rect.left}px`,
|
||||||
|
width: `${this.unselect.rect.width}px`,
|
||||||
|
height: `${this.unselect.rect.height}px`
|
||||||
|
})
|
||||||
|
}, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.legal-home {
|
||||||
|
position: fixed;
|
||||||
|
border-radius: 0;
|
||||||
|
color: #444;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
padding: 0 12px;
|
||||||
|
will-change: top, left, width, height;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-home::-webkit-scrollbar {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.app-bar {
|
||||||
|
width: 100%;
|
||||||
|
position: fixed;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload {
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-heading {
|
||||||
|
width: calc(100% + 60px);
|
||||||
|
height: 350px;
|
||||||
|
color: #fff;
|
||||||
|
background: #6e18e1;
|
||||||
|
text-align: center;
|
||||||
|
text-shadow: 0 5px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
background: -webkit-linear-gradient(to top, #4A00E0, #8E2DE2);
|
||||||
|
background: linear-gradient(to top, #4A00E0, #8E2DE2);
|
||||||
|
margin-top: -54px;
|
||||||
|
margin-left: -30px;
|
||||||
|
margin-right: -30px;
|
||||||
|
padding: 30px;
|
||||||
|
box-shadow: 0 10px 10px rgba(0, 0, 0, 0.15);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.upload-form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-heading h1 {
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-bar {
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-bottom: 45px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-icon {
|
||||||
|
font-size: 30px;
|
||||||
|
color: #fafafa;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-card {
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.home-card:first-of-type {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-footer {
|
||||||
|
width: 100%;
|
||||||
|
height: 60px;
|
||||||
|
padding-top: 15px;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
font-size: 15px;
|
||||||
|
color: #37474f;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-enter-to,
|
||||||
|
.show-leave {
|
||||||
|
border-radius: 0;
|
||||||
|
|
||||||
|
.legal-home {
|
||||||
|
padding: 0 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-home,
|
||||||
|
.app-bar,
|
||||||
|
.legal-heading,
|
||||||
|
.legal-content {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translate3d(0, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-leave-to,
|
||||||
|
.show-enter {
|
||||||
|
border-radius: 30px;
|
||||||
|
|
||||||
|
.legal-home {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legal-home,
|
||||||
|
.app-bar,
|
||||||
|
.legal-heading,
|
||||||
|
.legal-content{
|
||||||
|
opacity: 0;
|
||||||
|
transform: translate3d(0, -40px, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.show-enter-active,
|
||||||
|
.show-leave-active {
|
||||||
|
transition: all 0.5s ease;
|
||||||
|
|
||||||
|
.legal-home,
|
||||||
|
.app-bar,
|
||||||
|
.legal-heading,
|
||||||
|
.legal-content{
|
||||||
|
transition: all 0.5s ease;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,92 @@
|
|||||||
|
<template>
|
||||||
|
<div class="upload">
|
||||||
|
<label class="file" id="fileLabel">
|
||||||
|
<input type="file" id="file">
|
||||||
|
<span class="file-custom">123</span>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name : "upload",
|
||||||
|
methods: {
|
||||||
|
uploadFunc : function (document) {
|
||||||
|
let input = document.getElementById("file");
|
||||||
|
let label = document.getElementById("fileLabel");
|
||||||
|
|
||||||
|
input.addEventListener( 'change', function( e )
|
||||||
|
{
|
||||||
|
let fileName = '';
|
||||||
|
fileName = e.target.value.split( '\\' ).pop();
|
||||||
|
label.querySelector( 'span' ).innerHTML = fileName;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Firefox bug fix
|
||||||
|
input.addEventListener( 'focus', function(){ input.classList.add( 'has-focus' ); });
|
||||||
|
input.addEventListener( 'blur', function(){ input.classList.remove( 'has-focus' ); });
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
this.uploadFunc(document);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.file {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
cursor: pointer;
|
||||||
|
height: 40px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
.file input {
|
||||||
|
min-width: 14rem;
|
||||||
|
margin: 0;
|
||||||
|
filter: alpha(opacity=0);
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
.file-custom {
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
left: 0;
|
||||||
|
z-index: 5;
|
||||||
|
height: 40px;
|
||||||
|
padding: .5rem 1rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #555;
|
||||||
|
background-color: #fff;
|
||||||
|
border: .075rem solid #ddd;
|
||||||
|
border-radius: .25rem;
|
||||||
|
box-shadow: inset 0 .2rem .4rem rgba(0,0,0,.05);
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
.file-custom:before {
|
||||||
|
position: absolute;
|
||||||
|
top: -.075rem;
|
||||||
|
right: -.075rem;
|
||||||
|
bottom: -.075rem;
|
||||||
|
z-index: 6;
|
||||||
|
display: block;
|
||||||
|
content: "选择文书";
|
||||||
|
height: 20px;
|
||||||
|
padding: .5rem 1rem;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #555;
|
||||||
|
background-color: #eee;
|
||||||
|
border: .075rem solid #ddd;
|
||||||
|
border-radius: 0 .25rem .25rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Focus */
|
||||||
|
.file input:focus ~ .file-custom {
|
||||||
|
box-shadow: 0 0 0 .075rem #fff, 0 0 0 .2rem #0074d9;
|
||||||
|
}
|
||||||
|
</style>
|
@ -0,0 +1,17 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import App from './App.vue'
|
||||||
|
import router from "@/router";
|
||||||
|
import store from "@/store";
|
||||||
|
import './registerServiceWorker'
|
||||||
|
import Axios from "axios";
|
||||||
|
import VueAxios from "vue-axios";
|
||||||
|
|
||||||
|
Vue.use(VueAxios, Axios);
|
||||||
|
|
||||||
|
Vue.config.productionTip = false;
|
||||||
|
|
||||||
|
new Vue({
|
||||||
|
router,
|
||||||
|
store,
|
||||||
|
render: h => h(App),
|
||||||
|
}).$mount('#app');
|
@ -0,0 +1,32 @@
|
|||||||
|
/* eslint-disable no-console */
|
||||||
|
|
||||||
|
import { register } from 'register-service-worker'
|
||||||
|
|
||||||
|
if (process.env.NODE_ENV === 'production') {
|
||||||
|
register(`${process.env.BASE_URL}service-worker.js`, {
|
||||||
|
ready () {
|
||||||
|
console.log(
|
||||||
|
'App is being served from cache by a service worker.\n' +
|
||||||
|
'For more details, visit https://goo.gl/AFskqB'
|
||||||
|
)
|
||||||
|
},
|
||||||
|
registered () {
|
||||||
|
console.log('Service worker has been registered.')
|
||||||
|
},
|
||||||
|
cached () {
|
||||||
|
console.log('Content has been cached for offline use.')
|
||||||
|
},
|
||||||
|
updatefound () {
|
||||||
|
console.log('New content is downloading.')
|
||||||
|
},
|
||||||
|
updated () {
|
||||||
|
console.log('New content is available; please refresh.')
|
||||||
|
},
|
||||||
|
offline () {
|
||||||
|
console.log('No internet connection found. App is running in offline mode.')
|
||||||
|
},
|
||||||
|
error (error) {
|
||||||
|
console.error('Error during service worker registration:', error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
@ -0,0 +1,19 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import Router from 'vue-router'
|
||||||
|
import Home from "@/components/Home";
|
||||||
|
|
||||||
|
Vue.use(Router);
|
||||||
|
|
||||||
|
export default new Router({
|
||||||
|
mode: 'history',
|
||||||
|
base: process.env.BABEL_URL,
|
||||||
|
routes: [
|
||||||
|
{
|
||||||
|
path: '/',
|
||||||
|
name: 'home',
|
||||||
|
components: {
|
||||||
|
default: Home,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
@ -0,0 +1,58 @@
|
|||||||
|
import Vue from 'vue'
|
||||||
|
import Vuex from 'vuex'
|
||||||
|
|
||||||
|
Vue.use(Vuex);
|
||||||
|
|
||||||
|
export default new Vuex.Store({
|
||||||
|
state: {
|
||||||
|
setting: {
|
||||||
|
color: ['#ff6262', '#ffa947'],
|
||||||
|
},
|
||||||
|
settingOption: {
|
||||||
|
colors: [{
|
||||||
|
name: '炽焰',
|
||||||
|
color: ['#ff6262', '#ffa947'],
|
||||||
|
},{
|
||||||
|
name: '冰蓝',
|
||||||
|
color: ['#5b9df9', '#47bfff'],
|
||||||
|
},{
|
||||||
|
name: '青草',
|
||||||
|
color: ['#2c7d59', '#3ba776'],
|
||||||
|
},{
|
||||||
|
name: '江户',
|
||||||
|
color: ['#8E2DE2', '#4A00E0'],
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
askList: [],
|
||||||
|
onAsk: false,
|
||||||
|
onInfer: false,
|
||||||
|
onLegal: false,
|
||||||
|
currentTab: 'Home',
|
||||||
|
selected: null,
|
||||||
|
unselect: null,
|
||||||
|
cardSelected: null,
|
||||||
|
cardUnselect: null,
|
||||||
|
},
|
||||||
|
mutations: {
|
||||||
|
selectTab (state, selected) {
|
||||||
|
state.unselect = null;
|
||||||
|
state.selected = selected;
|
||||||
|
},
|
||||||
|
setTab (state, tab) {
|
||||||
|
state.currentTab = tab;
|
||||||
|
},
|
||||||
|
unselectTab (state) {
|
||||||
|
state.unselect = state.selected;
|
||||||
|
state.selected = null;
|
||||||
|
state.currentTab = 'Home';
|
||||||
|
},
|
||||||
|
selectCard (state, selected) {
|
||||||
|
state.cardUnselect = null;
|
||||||
|
state.cardSelected = selected;
|
||||||
|
},
|
||||||
|
unselectCard (state) {
|
||||||
|
state.cardUnselect = state.cardSelected;
|
||||||
|
state.cardSelected = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
Loading…
Reference in new issue