Signed-off-by: TIANHE <TIANHE@GMAIL.COM>
This commit is contained in:
TIANHE
2025-12-30 17:38:47 +08:00
parent 6ce128f576
commit 23d731ea17
7 changed files with 358 additions and 340 deletions
+257 -209
View File
@@ -37,254 +37,290 @@
max-width: 600px;
}
/* 像素风格小奔跑动画 */
.pixel-dog-container {
/* 像素风格小奔跑动画容器 */
.pixel-cat-container {
position: relative;
width: 100%;
height: 140px;
height: 120px;
margin: 0 auto 30px;
overflow: hidden;
}
.pixel-dog {
/* 像素小猫主体 */
.pixel-cat {
position: absolute;
left: 0;
bottom: 30px;
width: 40px;
height: 50px;
animation: dogRun 0.5s steps(4) infinite, dogMove 4s linear infinite;
bottom: 24px;
width: 32px;
height: 32px;
animation: catRun 0.4s steps(2) infinite, catMove 3.5s linear infinite;
image-rendering: pixelated;
image-rendering: -moz-crisp-edges;
image-rendering: crisp-edges;
transform-origin: center bottom;
}
/* 所有像素元素都使用锐利边缘 */
.pixel-dog * {
.pixel-cat * {
image-rendering: pixelated;
image-rendering: -moz-crisp-edges;
image-rendering: crisp-edges;
}
/* 头 - 黑白相间设计,使用简单的几何形状 */
.dog-head {
/* 头 - 像素方块组成 */
.cat-head {
position: absolute;
left: 0;
left: 2px;
top: 0;
width: 40px;
height: 40px;
background: #000;
clip-path: polygon(15% 0%, 85% 0%, 100% 25%, 100% 75%, 85% 100%, 15% 100%, 0% 75%, 0% 25%);
border: 2px solid #000;
box-sizing: border-box;
animation: headBob 0.5s steps(4) infinite;
width: 16px;
height: 14px;
background:
/* 头部主体白色 */
linear-gradient(#fff, #fff) 2px 4px / 12px 10px no-repeat,
/* 左半脸黑色斑块 */
linear-gradient(#000, #000) 2px 4px / 6px 10px no-repeat,
/* 头顶 */
linear-gradient(#fff, #fff) 4px 2px / 8px 2px no-repeat;
animation: headBob 0.4s steps(2) infinite;
}
@keyframes headBob {
0%, 100% { transform: translateY(0px) rotate(0deg); }
25% { transform: translateY(-2px) rotate(-2deg); }
50% { transform: translateY(0px) rotate(0deg); }
75% { transform: translateY(-1px) rotate(1deg); }
/* 左耳 - 黑色尖耳朵 */
.cat-ear-left {
position: absolute;
left: 0px;
top: -2px;
width: 4px;
height: 6px;
background:
linear-gradient(#000, #000) 0px 4px / 4px 2px no-repeat,
linear-gradient(#000, #000) 1px 2px / 2px 2px no-repeat,
linear-gradient(#000, #000) 1px 0px / 2px 2px no-repeat;
}
/* 左半部分(白色) */
.dog-head::before {
/* 右耳 - 白色尖耳朵 */
.cat-ear-right {
position: absolute;
right: 0px;
top: -2px;
width: 4px;
height: 6px;
background:
linear-gradient(#fff, #fff) 0px 4px / 4px 2px no-repeat,
linear-gradient(#fff, #fff) 1px 2px / 2px 2px no-repeat,
linear-gradient(#fff, #fff) 1px 0px / 2px 2px no-repeat;
box-shadow: inset 0 0 0 1px #000;
}
.cat-ear-right::after {
content: '';
position: absolute;
left: 0;
top: 0;
width: 50%;
height: 100%;
background: #fff;
clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
width: 4px;
height: 6px;
border: 1px solid #000;
border-width: 0 1px 0 0;
box-sizing: border-box;
}
/* 左耳(白色三角形 */
.dog-ear-left {
/* 左眼 - 黑底白眼(在黑色区域 */
.cat-eye-left {
position: absolute;
left: 4px;
top: -6px;
width: 10px;
height: 10px;
top: 6px;
width: 4px;
height: 4px;
background: #fff;
clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}
/* 右耳(黑色三角形) */
.dog-ear-right {
.cat-eye-left::after {
content: '';
position: absolute;
right: 4px;
top: -6px;
width: 10px;
height: 10px;
left: 2px;
top: 1px;
width: 2px;
height: 2px;
background: #000;
clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
}
/* 左眼(黑色点在白色区域) */
.dog-eye-left {
/* 右眼 - 白底黑眼(在白色区域) */
.cat-eye-right {
position: absolute;
left: 10px;
top: 14px;
width: 6px;
height: 6px;
background: #000;
border-radius: 0;
clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
}
/* 右眼(白色点在黑色区域) */
.dog-eye-right {
position: absolute;
right: 10px;
top: 14px;
width: 6px;
height: 6px;
right: 2px;
top: 6px;
width: 4px;
height: 4px;
background: #fff;
border-radius: 0;
clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
}
/* 鼻子(黑色,中间) */
.dog-nose {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, 30%);
width: 8px;
height: 5px;
background: #000;
border-radius: 0;
clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
}
/* 身体 - 黑白相间 */
.dog-body {
position: absolute;
left: 8px;
top: 36px;
width: 24px;
height: 14px;
background: #000;
border: 1px solid #000;
box-sizing: border-box;
}
.dog-body::before {
.cat-eye-right::after {
content: '';
position: absolute;
left: 0;
top: 0;
width: 50%;
height: 100%;
background: #fff;
}
/* 左前腿 */
.dog-leg-front-left {
position: absolute;
left: 10px;
top: 48px;
width: 6px;
height: 12px;
left: 1px;
top: 0px;
width: 2px;
height: 2px;
background: #000;
border-radius: 0;
animation: legMoveFront 0.5s steps(4) infinite;
}
/* 右前腿 */
.dog-leg-front-right {
/* 鼻子 - 小粉色方块 */
.cat-nose {
position: absolute;
left: 18px;
top: 48px;
width: 6px;
height: 12px;
background: #fff;
border-radius: 0;
animation: legMoveFront 0.5s steps(4) infinite 0.125s;
left: 7px;
top: 10px;
width: 2px;
height: 2px;
background: #000;
}
/* 左后腿 */
.dog-leg-back-left {
/* 胡须 - 像素线条 */
.cat-whiskers {
position: absolute;
left: 0;
top: 10px;
width: 16px;
height: 4px;
}
.cat-whiskers::before {
content: '';
position: absolute;
left: -4px;
top: 0;
width: 4px;
height: 1px;
background: #000;
box-shadow: 0 2px 0 #000;
}
.cat-whiskers::after {
content: '';
position: absolute;
right: -4px;
top: 0;
width: 4px;
height: 1px;
background: #000;
box-shadow: 0 2px 0 #000;
}
/* 身体 - 黑白相间像素块 */
.cat-body {
position: absolute;
left: 4px;
top: 14px;
width: 14px;
height: 10px;
background:
/* 白色部分 */
linear-gradient(#fff, #fff) 6px 0 / 8px 10px no-repeat,
/* 黑色部分 */
linear-gradient(#000, #000) 0 0 / 8px 10px no-repeat;
border: 1px solid #000;
box-sizing: border-box;
}
/* 前腿 - 左 (黑色) */
.cat-leg-front-left {
position: absolute;
left: 6px;
top: 48px;
width: 6px;
height: 12px;
top: 22px;
width: 3px;
height: 8px;
background: #000;
animation: legFront 0.2s steps(2) infinite;
}
/* 前腿 - 右 (白色带边框) */
.cat-leg-front-right {
position: absolute;
left: 12px;
top: 22px;
width: 3px;
height: 8px;
background: #fff;
border-radius: 0;
animation: legMoveBack 0.5s steps(4) infinite 0.125s;
border: 1px solid #000;
box-sizing: border-box;
animation: legFront 0.2s steps(2) infinite 0.1s;
}
/* 后腿 */
.dog-leg-back-right {
/* 后腿 - 左 (白色带边框) */
.cat-leg-back-left {
position: absolute;
left: 22px;
top: 48px;
width: 6px;
height: 12px;
background: #000;
border-radius: 0;
animation: legMoveBack 0.5s steps(4) infinite;
left: 3px;
top: 22px;
width: 3px;
height: 8px;
background: #fff;
border: 1px solid #000;
box-sizing: border-box;
animation: legBack 0.2s steps(2) infinite 0.1s;
}
/* 尾巴 */
.dog-tail {
/* 后腿 - 右 (黑色) */
.cat-leg-back-right {
position: absolute;
right: -6px;
top: 38px;
width: 6px;
height: 6px;
left: 15px;
top: 22px;
width: 3px;
height: 8px;
background: #000;
border-radius: 0;
animation: tailWag 0.25s ease-in-out infinite alternate;
animation: legBack 0.2s steps(2) infinite;
}
/* 奔跑动画 - 上下跳动(像素风格,使用steps) */
@keyframes dogRun {
0% { transform: translateY(0px); }
25% { transform: translateY(-4px); }
50% { transform: translateY(0px); }
75% { transform: translateY(-2px); }
100% { transform: translateY(0px); }
/* 尾巴 - 长且弯曲的像素尾巴 */
.cat-tail {
position: absolute;
right: -10px;
top: 10px;
width: 12px;
height: 10px;
background:
/* 尾巴根部 */
linear-gradient(#000, #000) 0 6px / 3px 3px no-repeat,
/* 尾巴中部 */
linear-gradient(#000, #000) 3px 4px / 3px 3px no-repeat,
/* 尾巴弯曲 */
linear-gradient(#000, #000) 6px 2px / 3px 3px no-repeat,
/* 尾巴尖端 */
linear-gradient(#000, #000) 9px 0 / 3px 3px no-repeat;
animation: tailWag 0.3s steps(2) infinite alternate;
transform-origin: left bottom;
}
/* 奔跑动画 - 轻微上下跳动 */
@keyframes catRun {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-3px); }
}
/* 移动动画 - 左右移动 */
@keyframes dogMove {
@keyframes catMove {
0% { left: -40px; }
100% { left: calc(100% + 40px); }
}
/* 前腿动画 - 像素风格步进 */
@keyframes legMoveFront {
0% { transform: translateY(0px); }
25% { transform: translateY(-8px); }
50% { transform: translateY(0px); }
75% { transform: translateY(-4px); }
100% { transform: translateY(0px); }
/* 前腿动画 */
@keyframes legFront {
0%, 100% { transform: rotate(-15deg); }
50% { transform: rotate(15deg); }
}
/* 后腿动画 - 像素风格步进 */
@keyframes legMoveBack {
0% { transform: translateY(0px); }
25% { transform: translateY(-4px); }
50% { transform: translateY(0px); }
75% { transform: translateY(-8px); }
100% { transform: translateY(0px); }
/* 后腿动画 */
@keyframes legBack {
0%, 100% { transform: rotate(15deg); }
50% { transform: rotate(-15deg); }
}
/* 尾巴摆动 */
@keyframes tailWag {
0% { transform: rotate(-12deg); }
100% { transform: rotate(12deg); }
0% { transform: rotate(-10deg); }
100% { transform: rotate(10deg); }
}
/* 头部轻微摆动 */
@keyframes headBob {
0%, 100% { transform: translateY(0px) rotate(0deg); }
25% { transform: translateY(-2px) rotate(-2deg); }
50% { transform: translateY(0px) rotate(0deg); }
75% { transform: translateY(-1px) rotate(1deg); }
0%, 100% { transform: translateY(0); }
50% { transform: translateY(-1px); }
}
/* 地面效果 - 像素风格 */
@@ -293,23 +329,21 @@
bottom: 0;
left: 0;
right: 0;
height: 16px;
height: 12px;
background: repeating-linear-gradient(
90deg,
#333 0px,
#333 8px,
#666 8px,
#666 16px
#222 0px,
#222 6px,
#555 6px,
#555 12px
);
animation: groundMove 0.4s linear infinite;
animation: groundMove 0.3s linear infinite;
image-rendering: pixelated;
image-rendering: -moz-crisp-edges;
image-rendering: crisp-edges;
}
@keyframes groundMove {
0% { background-position: 0 0; }
100% { background-position: 16px 0; }
100% { background-position: 12px 0; }
}
/* 品牌文字 */
@@ -341,28 +375,41 @@
.ground {
background: repeating-linear-gradient(
90deg,
#666 0px,
#666 8px,
#444 8px,
#444 16px
#555 0px,
#555 6px,
#333 6px,
#333 12px
);
}
/* 暗色模式下白色部分改成浅灰 */
.cat-head {
background:
linear-gradient(#ddd, #ddd) 2px 4px / 12px 10px no-repeat,
linear-gradient(#000, #000) 2px 4px / 6px 10px no-repeat,
linear-gradient(#ddd, #ddd) 4px 2px / 8px 2px no-repeat;
}
.cat-body {
background:
linear-gradient(#ddd, #ddd) 6px 0 / 8px 10px no-repeat,
linear-gradient(#000, #000) 0 0 / 8px 10px no-repeat;
}
.cat-leg-front-right,
.cat-leg-back-left {
background: #ddd;
}
.cat-eye-left,
.cat-eye-right {
background: #ddd;
}
}
/* 确保像素风格在所有浏览器中正确显示 */
.pixel-dog,
.dog-head,
.dog-body,
.dog-leg-front-left,
.dog-leg-front-right,
.dog-leg-back-left,
.dog-leg-back-right,
.dog-tail,
.dog-ear-left,
.dog-ear-right,
.dog-eye-left,
.dog-eye-right,
.dog-nose {
.pixel-cat,
.pixel-cat * {
image-rendering: -moz-crisp-edges;
image-rendering: -webkit-crisp-edges;
image-rendering: pixelated;
@@ -371,8 +418,8 @@
/* 手机端适配 */
@media (max-width: 768px) {
.pixel-dog-container {
transform: scale(1.2);
.pixel-cat-container {
transform: scale(1.5);
}
.first-loading-wrp > h2 {
@@ -398,22 +445,23 @@
<div class="first-loading-wrp">
<h2>Landing</h2>
<div class="loading-wrp">
<div class="pixel-dog-container">
<div class="pixel-cat-container">
<div class="ground"></div>
<div class="pixel-dog">
<div class="dog-head">
<div class="dog-ear-left"></div>
<div class="dog-ear-right"></div>
<div class="dog-eye-left"></div>
<div class="dog-eye-right"></div>
<div class="dog-nose"></div>
<div class="pixel-cat">
<div class="cat-head">
<div class="cat-ear-left"></div>
<div class="cat-ear-right"></div>
<div class="cat-eye-left"></div>
<div class="cat-eye-right"></div>
<div class="cat-nose"></div>
<div class="cat-whiskers"></div>
</div>
<div class="dog-body"></div>
<div class="dog-leg-front-left"></div>
<div class="dog-leg-front-right"></div>
<div class="dog-leg-back-left"></div>
<div class="dog-leg-back-right"></div>
<div class="dog-tail"></div>
<div class="cat-body"></div>
<div class="cat-leg-front-left"></div>
<div class="cat-leg-front-right"></div>
<div class="cat-leg-back-left"></div>
<div class="cat-leg-back-right"></div>
<div class="cat-tail"></div>
</div>
</div>
</div>