下面我将为您提供从简单到专业的多种实现方案,包括纯 HTML/CSS 方案、结合 JavaScript 的动态方案,以及一些设计思路和最佳实践。

极简纯静态页面 (适合快速部署)
这是最基础的方式,使用 HTML5 和 CSS3 创建一个美观的占位页面。
index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">网站建设中 - 我的公司</title>
<link rel="stylesheet" href="style.css">
<!-- 引入一个图标库,Font Awesome -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
</head>
<body>
<div class="under-construction-container">
<div class="content">
<i class="fas fa-tools fa-4x"></i>
<h1>网站正在建设中</h1>
<p>我们正在努力为您打造一个全新的体验,敬请期待!</p>
<div class="countdown">
<p>预计上线时间:</p>
<p id="launch-date">2025年12月31日</p>
</div>
<div class="contact-info">
<p>如有任何疑问,请联系我们:</p>
<p><i class="fas fa-envelope"></i> contact@mycompany.com</p>
<p><i class="fas fa-phone"></i> +86 123 4567 8900</p>
</div>
</div>
</div>
</body>
</html>
style.css
/* 基础样式重置 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%);
color: #fff;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
text-align: center;
}
.under-construction-container {
padding: 2rem;
max-width: 600px;
}
.content i {
margin-bottom: 1.5rem;
animation: pulse 2s infinite;
}
@keyframes pulse {
0% {
transform: scale(1);
}
50% {
transform: scale(1.1);
}
100% {
transform: scale(1);
}
}
h1 {
font-size: 2.5rem;
margin-bottom: 1rem;
font-weight: 300;
}
p {
font-size: 1.1rem;
line-height: 1.6;
margin-bottom: 1.5rem;
opacity: 0.9;
}
.countdown {
background-color: rgba(255, 255, 255, 0.1);
padding: 1.5rem;
border-radius: 10px;
margin: 2rem 0;
backdrop-filter: blur(10px);
}
.contact-info p {
margin: 0.5rem 0;
}
.contact-info i {
margin-right: 0.5rem;
width: 20px;
text-align: center;
}
动态倒计时页面 (更具吸引力)
在方案一的基础上,加入一个实时更新的倒计时,能极大地提升用户体验。
index.html (只需修改 <body> 部分)
<body>
<div class="under-construction-container">
<div class="content">
<i class="fas fa-tools fa-4x"></i>
<h1>网站正在建设中</h1>
<p>我们正在努力为您打造一个全新的体验,敬请期待!</p>
<!-- 倒计时区域 -->
<div class="countdown-timer">
<p>距离正式上线还有:</p>
<div id="timer">
<span id="days">00</span> 天
<span id="hours">00</span> 时
<span id="minutes">00</span> 分
<span id="seconds">00</span> 秒
</div>
</div>
<div class="contact-info">
<p>如有任何疑问,请联系我们:</p>
<p><i class="fas fa-envelope"></i> contact@mycompany.com</p>
<p><i class="fas fa-phone"></i> +86 123 4567 8900</p>
</div>
</div>
</div>
<!-- 引入 JavaScript 文件 -->
<script src="script.js"></script>
</body>
script.js
// 设置目标上线日期 (年, 月-1, 日, 时, 分, 秒)
const launchDate = new Date('December 31, 2025 23:59:59').getTime();
function updateCountdown() {
const now = new Date().getTime();
const distance = launchDate - now;
// 计算时间单位
const days = Math.floor(distance / (1000 * 60 * 60 * 24));
const hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
const minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
const seconds = Math.floor((distance % (1000 * 60)) / 1000);
// 更新到 HTML
document.getElementById('days').innerText = String(days).padStart(2, '0');
document.getElementById('hours').innerText = String(hours).padStart(2, '0');
document.getElementById('minutes').innerText = String(minutes).padStart(2, '0');
document.getElementById('seconds').innerText = String(seconds).padStart(2, '0');
// 如果倒计时结束
if (distance < 0) {
document.getElementById('timer').innerHTML = "网站已上线!";
clearInterval(countdownInterval);
}
}
// 每秒更新一次
const countdownInterval = setInterval(updateCountdown, 1000);
// 立即执行一次,避免等待1秒
updateCountdown();
高级单页应用 (SPA) 方式 (专业且灵活)
对于更复杂的需求,可以使用现代前端框架(如 Vue.js 或 React)来构建,这里以 Vue.js 为例,因为它上手快,非常适合这种场景。
index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">网站建设中 - 我的公司</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
<style>
/* CSS 可以复用方案一的 style.css,或稍作修改 */
body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background: linear-gradient(135deg, #6a11cb 0%, #2575fc 100%); color: #fff; display: flex; justify-content: center; align-items: center; min-height: 100vh; text-align: center; }
.under-construction-container { padding: 2rem; max-width: 600px; }
.content i { margin-bottom: 1.5rem; animation: pulse 2s infinite; }
@keyframes pulse { 0% { transform: scale(1); } 50% { transform: scale(1.1); } 100% { transform: scale(1); } }
h1 { font-size: 2.5rem; margin-bottom: 1rem; font-weight: 300; }
p { font-size: 1.1rem; line-height: 1.6; margin-bottom: 1.5rem; opacity: 0.9; }
.countdown-timer { background-color: rgba(255, 255, 255, 0.1); padding: 1.5rem; border-radius: 10px; margin: 2rem 0; backdrop-filter: blur(10px); }
.timer-display { display: flex; justify-content: center; gap: 1rem; font-size: 1.5rem; }
.timer-unit { background: rgba(0,0,0,0.2); padding: 0.5rem 1rem; border-radius: 5px; min-width: 60px; }
.contact-info p { margin: 0.5rem 0; }
.contact-info i { margin-right: 0.5rem; width: 20px; text-align: center; }
</style>
</head>
<body>
<div id="app">
<div class="under-construction-container">
<div class="content">
<i class="fas fa-tools fa-4x"></i>
<h1>网站正在建设中</h1>
<p>我们正在努力为您打造一个全新的体验,敬请期待!</p>
<div class="countdown-timer">
<p>距离正式上线还有:</p>
<div class="timer-display">
<div class="timer-unit">
<div>{{ days }}</div>
<div>天</div>
</div>
<div class="timer-unit">
<div>{{ hours }}</div>
<div>时</div>
</div>
<div class="timer-unit">
<div>{{ minutes }}</div>
<div>分</div>
</div>
<div class="timer-unit">
<div>{{ seconds }}</div>
<div>秒</div>
</div>
</div>
</div>
<div class="contact-info">
<p>如有任何疑问,请联系我们:</p>
<p><i class="fas fa-envelope"></i> contact@mycompany.com</p>
<p><i class="fas fa-phone"></i> +86 123 4567 8900</p>
</div>
</div>
</div>
</div>
<!-- 引入 Vue.js -->
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<script src="app.js"></script>
</body>
</html>
app.js
const { createApp, ref, onMounted, onUnmounted } = Vue;
createApp({
setup() {
const days = ref('00');
const hours = ref('00');
const minutes = ref('00');
const seconds = ref('00');
let launchDate = new Date('December 31, 2025 23:59:59').getTime();
let countdownInterval;
function updateCountdown() {
const now = new Date().getTime();
const distance = launchDate - now;
if (distance < 0) {
days.value = '00';
hours.value = '00';
minutes.value = '00';
seconds.value = '00';
clearInterval(countdownInterval);
return;
}
days.value = String(Math.floor(distance / (1000 * 60 * 60 * 24))).padStart(2, '0');
hours.value = String(Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))).padStart(2, '0');
minutes.value = String(Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60))).padStart(2, '0');
seconds.value = String(Math.floor((distance % (1000 * 60)) / 1000)).padStart(2, '0');
}
onMounted(() => {
updateCountdown(); // 立即执行一次
countdownInterval = setInterval(updateCountdown, 1000);
});
onUnmounted(() => {
clearInterval(countdownInterval); // 组件销毁时清除定时器
});
return { days, hours, minutes, seconds };
}
}).mount('#app');
设计思路与最佳实践
-
保持品牌一致性:
(图片来源网络,侵删)使用你网站的主色调、字体和 Logo,让访客即使看到的是“建设中”页面,也能认出你的品牌。
-
信息清晰明确:
- 直接点明“网站正在建设中”或“即将上线”。
- 原因:简单说明一下,我们正在升级服务器,以提供更优质的服务”或“全新版本,敬请期待”。
- 预计时间:给出一个明确的上线日期或时间范围,管理访客的预期。
-
提供价值,而非障碍:
- 联系方式:提供邮箱、电话或社交媒体链接,让有紧急需求的访客可以联系到你。
- 收集潜在客户:可以添加一个简单的表单,让访客留下邮箱,以便上线时通知他们,这是非常有效的营销手段。
- 提供替代内容:如果可能,提供一个临时的着陆页,介绍你的公司、产品或博客。
-
用户体验与视觉设计:
(图片来源网络,侵删)- 响应式设计:确保在手机、平板和电脑上都能完美显示。
- 加载动画:一个简单的 CSS 动画(如方案一的脉冲效果或旋转的齿轮)能让页面不那么枯燥。
- 背景图片/视频:使用高质量的品牌背景图或一个简短的介绍视频,可以极大地提升页面的专业感。
-
技术实现细节:
- HTTP 状态码:如果你的网站暂时无法访问,可以向服务器配置返回
503 Service Unavailable状态码,这告诉搜索引擎你的网站是暂时维护,而不是永久关闭,在响应头中添加Retry-After字段,建议搜索引擎多久后再来抓取。 - SEO:在
<head>中设置<title>和<meta name="description">,方便搜索引擎了解页面内容。
- HTTP 状态码:如果你的网站暂时无法访问,可以向服务器配置返回
选择最适合你需求和技能水平的方案,稍作修改就能快速部署一个专业、友好的“建设中”页面。
