css+js实现幽灵火车发车到站时刻表代码
代码语言:html
所属分类:表格
代码描述:css+js实现幽灵火车发车到站时刻表代码
代码标签: css js 幽灵 火车 发车 到站 时刻表 代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <link rel='stylesheet' href='https://fonts.googleapis.com/css2?family=Rubik:wght@400;500;700&display=swap'> <style> :root { --title: "Ghost Train Schedule"; --author: "Matt Cannon"; --contact: "mc@mattcannon.design"; --description: "A hauntingly animated split-flap board that displays arrivals and departures from the underworld's most trusted railway, Damnedtrak®."; --keywords: "ghost train, split-flap, schedule board, arrivals departures, halloween, animation, css grid, javascript animation, spooky ui, codepenchallenge, cpc-halloween-time, ui design, front-end, rubik font, motion design"; --last-modified: "2025-10-06"; --content-language: "en"; --generator: "HTML5, CSS3, JavaScript"; --bg: #0b0e13; --ink: #e8f0ff; --muted: #8d98ad; --ontime: #8cffd5; --arrived: #00c673; --warn: #ffcc33; --bad: #ff4b61; --weird: #66e7ff; --gap: 17px; --cell-h: 25px; } * { box-sizing: border-box; } body { margin: 0; font-family: "Rubik", sans-serif; background: radial-gradient(1200px 600px at 70% -10%, #1b2230 0%, var(--bg) 60%) no-repeat; color: var(--ink); } .station-bg { display: flex; justify-content: center; align-items: flex-start; padding: 20px; min-height: 100dvh; max-height: 90vh; overflow: hidden; padding-top: 85px; } .bezel { width: 92%; max-width: 880px; border-radius: 20px; background: linear-gradient(#0d1116, #0b0e13); box-shadow: 0 25px 70px #000a, inset 0 1px 0 #ffffff12; padding: 18px 20px 24px; display: flex; flex-direction: column; } .bezel__plate { position: relative; height: 50px; display: flex; align-items: center; justify-content: flex-start; background: #0d1116; border: 1px solid #1b2433; border-radius: 12px; margin-bottom: 12px; padding: 0 16px; } .logo-img { width: 300px; height: 40px; object-fit: cover; border-radius: 6px; opacity: 0.95; margin: 0; } .mast { position: absolute; right: 7px; top: 50%; transform: translateY(-50%); margin: 0; } .mode select { background: #0c1015; color: var(--ink); border: 1px solid #f15f0a; border-radius: 8px; padding: 6px 44px 6px 14px; font-family: "Rubik", sans-serif; font-size: 15px; cursor: pointer; appearance: none; background-image: url("data:image/svg+xml;utf8,<svg fill='%23b4b6bb' xmlns='http://www.w3.org/2000/svg' width='24' height='24'><path d='M6 9l6 6 6-6z'/></svg>"); background-repeat: no-repeat; background-position: right 14px center; background-size: 20px; } .marquee { position: relative; overflow: hidden; border-top: 1px solid #1c2432; border-bottom: 1px solid #1c2432; margin: 10px 0 14px; height: 28px; } .marquee__track { position: absolute; inset: 0; display: inline-block; white-space: nowrap; will-change: transform; animation: scroll 50s linear infinite; } .marquee__track span { display: inline-block; font-size: 14px; color: #b4b6bb; font-weight: 500; letter-spacing: 0.03em; padding-right: 60px; } @keyframes scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } } .board { background: linear-gradient(#0e141b, #0b0f14); border: 1px solid #1b2633; border-radius: 12px; display: grid; grid-template-columns: repeat(5, minmax(110px, 1fr)); gap: var(--gap); padding: 14px; box-shadow: inset 0 1px 2px #ffffff10; } .board__head { text-transform: uppercase; color: var(--muted); font-size: 12px; letter-spacing: 0.15em; padding-bottom: 4px; font-weight: 500; text-align: center; } .cell { position: relative; height: var(--cell-h); perspective: 800px; } .slot { position: relative; width: 100%; height: 100%; border-radius: 8px; background: #0c1117; overflow: hidden; text-align: center; box-shadow: inset 0 -1px 6px #000a; } .slot::before { content: ""; position: absolute; left: 0; right: 0; top: 50%; height: 1px; background: linear-gradient(90deg, transparent, #000 20%, #000 80%, transparent); opacity: 0.6; transform: translateY(-0.5px); } .slot .half { position: absolute; left: 0; right: 0; height: 50%; overflow: hidden; } .slot .half .txt { display: block; height: var(--cell-h); line-height: var(--cell-h); font-size: 15px; font-weight: 400; white-space: nowrap; } .top { top: 0; background: #0f141b; } .bottom { bottom: 0; background: #0c1117; } .bottom .txt { transform: translateY(calc(var(--cell-h) * -0.5)); } .top-flip { top: 0; background: #0f141b; transform-origin: bottom; animation: flipTop 0.42s ease-in forwards; z-index: 2; } .bottom-flip { bottom: 0; background: #0c1117; transform-origin: top; animation: flipBottom 0.42s ease-out 0.42s forwards; z-index: 1; } .bottom-flip .txt { transform: translateY(calc(var(--cell-h) * -0.5)); } @keyframes flipTop { to { transform: rotateX(-90deg); } } @keyframes flipBottom { from { transform: rotateX(90deg); } to { transform: rotateX(0); } } .cell[data-col="Time"] .txt, .cell[data-col="Status"] .txt { font-weight: 700; } .cell[data-col="Status"][data-status="On time"] .slot { color: var(--ontime); } .cell[data-col="Status"][data-status="Arrived"] .slot { color: var(--arrived); } .cell[data-col="Status"][data-status="Boarding"] .slot { color: var(--warn); } .cell[data-col="Status"][data-status="Delayed"] .slot { color: var(--bad); } .cell[data-col="Status"][data-status="Manifesting"] .slot { color: var(--weird); } </style> </head> <body translate="no"> <div class="station-bg"> <div class="bezel"> <div class="bezel__plate"> <img src="data:image/png;base64,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.........完整代码请登录后点击上方下载按钮下载查看
网友评论0