作为一名编程博主,今天我们来解析并优化一个视频网站页面代码。这个"诗哩诗哩"视频网虽然功能简单,但包含了前端开发中常见的结构设计、样式应用和资源展示等核心知识点。通过优化这个案例,我们可以学习到如何将基础代码提升到专业水准。
一、原代码分析
首先我们来看看原始代码的结构和存在的问题:
1. CSS 样式问题
#all{
width: 1000px;
height: 780px;
/*border:2px solid blue;*/
margin: 0 auto;
}
.one{
width: 1000px;
height:150px;
/* border-bottom:2px solid yellow;*/
}
.one a {
color: orange;
text-decoration: none;
}
.two{
width: 1000px;
height:400px;
/*border-bottom:2px solid green;*/
}
.three{
width:1000px;
height:200px;
/*border-bottom:2px solid red;*/
}
存在问题:
- 使用固定像素宽度,不支持响应式设计
- 样式命名不够语义化(.one, .two, .three)
- 缺乏必要的布局规划和组件设计
- 注释方式不规范
2. HTML 结构问题
主页面结构:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="css/spbfwz.css">
<style>
#all{text-align: center;vertical-align: middle;}
a {
text-decoration: none;
color: gray;
}
a:hover {
color: blue;
cursor: pointer;
}
</style>
</head>
<body>
<div id="all">
<div class="one"><h1>诗书画唱网视频网分网:shilishili(诗哩诗哩)</h1>
<h2>想入股投资者可联系我</h2>
</div>
<div class="two">
<iframe src="ck.html" width="1000px" height="350px" name="a"></iframe>
<hr color="pink">
<a href="ck.html" target="a"><b>最开始默认为《热血混剪》视频</b></a>
<a href="img/新宝岛1.mp4" target="a">点击播放《新宝岛版本1》视频</a>
<a href="img/新宝岛2.mp4" target="a">点击播放《新宝岛版本2》视频</a>
<a href="img/qg.jpg" target="a" >点击查看美图</a>
</div>
<div class="three"><iframe src="bq.html" width="1000px" height="200px" name="a"></iframe></div>
</div>
</body>
</html>
存在问题:
- 缺少必要的 meta 标签(如视口设置)
- 页面标题为空,不利于 SEO
- 使用 iframe 加载内容的方式不够灵活
- 语义化标签使用不足,全依赖 div
- 链接和资源组织方式简单粗暴
- 缺乏错误处理机制
二、优化方案与实现
针对以上问题,我们将从以下几个方面进行优化:
- 重构 HTML 结构,采用语义化标签
- 使用响应式设计,适配不同设备
- 优化 CSS 样式,采用模块化组织
- 提升用户体验,增加交互效果
- 优化视频播放体验
- 增加错误处理和兼容性考虑
- 加入基本的 SEO 优化
优化后完整代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="诗书画唱网视频分网:shilishili(诗哩诗哩),提供优质的诗书画唱相关视频内容">
<meta name="keywords" content="诗书画唱, 视频, 诗哩诗哩, shilishili">
<title>诗哩诗哩 - 诗书画唱网视频分网</title>
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css" rel="stylesheet">
<!-- Tailwind 配置 -->
<script>
tailwind.config = {
theme: {
extend: {
colors: {
primary: '#FF7A00', // 主色调:橙色,呼应原设计
secondary: '#165DFF', // 辅助色:蓝色,用于交互元素
neutral: {
100: '#F5F7FA',
200: '#E5E6EB',
300: '#C9CDD4',
800: '#272E3B',
900: '#1D2129'
}
},
fontFamily: {
sans: ['Inter', 'system-ui', 'sans-serif'],
},
},
}
}
</script>
<style type="text/tailwindcss">
@layer utilities {
.content-auto {
content-visibility: auto;
}
.video-container {
aspect-ratio: 16 / 9;
}
.nav-link {
@apply relative px-4 py-2 text-neutral-800 hover:text-primary transition-colors duration-300;
}
.nav-link::after {
@apply content-[''] absolute w-0 h-0.5 bg-primary left-0 -bottom-1 transition-all duration-300;
}
.nav-link:hover::after {
@apply w-full;
}
}
</style>
</head>
<body class="bg-neutral-100 font-sans text-neutral-800">
<!-- 页面头部 -->
<header class="bg-white shadow-sm sticky top-0 z-50 transition-all duration-300">
<div class="container mx-auto px-4 py-4 flex flex-col md:flex-row items-center justify-between">
<div class="flex items-center space-x-2 mb-4 md:mb-0">
<i class="fa fa-play-circle text-primary text-3xl"></i>
<h1 class="text-2xl font-bold text-neutral-900">
诗哩诗哩 <span class="text-primary text-lg">(shilishili)</span>
</h1>
</div>
<nav class="w-full md:w-auto">
<ul class="flex flex-wrap justify-center gap-2 md:gap-0">
<li><a href="#" class="nav-link font-medium">首页</a></li>
<li><a href="#" class="nav-link font-medium">诗歌</a></li>
<li><a href="#" class="nav-link font-medium">书画</a></li>
<li><a href="#" class="nav-link font-medium">演唱</a></li>
<li><a href="#" class="nav-link font-medium">关于我们</a></li>
</ul>
</nav>
</div>
</header>
<!-- 主要内容区 -->
<main class="container mx-auto px-4 py-8">
<!-- 网站介绍 -->
<section class="mb-8 text-center">
<h2 class="text-[clamp(1.5rem,3vw,2.5rem)] font-bold mb-4 text-neutral-900">诗书画唱网视频分网</h2>
<p class="text-lg text-neutral-800 max-w-3xl mx-auto">
专注于分享优质的诗、书、画、唱相关视频内容,打造独特的文化艺术视频平台。
</p>
<div class="mt-6">
<a href="#contact" class="inline-block bg-primary hover:bg-primary/90 text-white font-medium px-6 py-3 rounded-lg shadow-md transition-all duration-300 transform hover:scale-105">
投资合作咨询 <i class="fa fa-handshake-o ml-2"></i>
</a>
</div>
</section>
<!-- 视频播放区 -->
<section class="bg-white rounded-xl shadow-md p-4 md:p-6 mb-8 transform transition-all duration-300 hover:shadow-lg">
<div class="mb-4 flex justify-between items-center">
<h3 class="text-xl font-bold text-neutral-900" id="video-title">热血混剪</h3>
<div class="flex items-center">
<span class="text-sm text-neutral-500 mr-2">分享</span>
<a href="#" class="text-neutral-500 hover:text-secondary transition-colors">
<i class="fa fa-share-alt"></i>
</a>
</div>
</div>
<!-- 视频容器 -->
<div class="video-container w-full bg-black rounded-lg overflow-hidden mb-6 relative group">
<video
id="main-video"
class="w-full h-full object-contain"
src="img/热血混剪.mp4"
controls
poster="https://picsum.photos/1280/720?grayscale&blur=2"
>
您的浏览器不支持视频播放,请升级浏览器。
</video>
<!-- 视频加载提示 -->
<div id="video-loading" class="absolute inset-0 flex items-center justify-center bg-black/70 text-white">
<i class="fa fa-spinner fa-spin text-4xl"></i>
<span class="ml-2 text-lg">加载中...</span>
</div>
</div>
<!-- 视频列表 -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
<button class="video-option bg-neutral-100 hover:bg-primary/10 p-3 rounded-lg text-left transition-all duration-300 border-2 border-primary"
data-video="img/热血混剪.mp4"
data-title="热血混剪">
<div class="flex items-center">
<i class="fa fa-play-circle text-primary mr-3"></i>
<span>热血混剪</span>
</div>
</button>
<button class="video-option bg-neutral-100 hover:bg-primary/10 p-3 rounded-lg text-left transition-all duration-300"
data-video="img/新宝岛1.mp4"
data-title="新宝岛版本1">
<div class="flex items-center">
<i class="fa fa-play-circle text-primary mr-3"></i>
<span>新宝岛版本1</span>
</div>
</button>
<button class="video-option bg-neutral-100 hover:bg-primary/10 p-3 rounded-lg text-left transition-all duration-300"
data-video="img/新宝岛2.mp4"
data-title="新宝岛版本2">
<div class="flex items-center">
<i class="fa fa-play-circle text-primary mr-3"></i>
<span>新宝岛版本2</span>
</div>
</button>
<button class="video-option bg-neutral-100 hover:bg-primary/10 p-3 rounded-lg text-left transition-all duration-300"
data-image="img/qg.jpg"
data-title="精选美图">
<div class="flex items-center">
<i class="fa fa-image text-primary mr-3"></i>
<span>精选美图</span>
</div>
</button>
</div>
</section>
<!-- 底部图片展示 -->
<section class="bg-white rounded-xl shadow-md p-4 md:p-6 overflow-hidden">
<h3 class="text-xl font-bold text-neutral-900 mb-4">推荐内容</h3>
<div class="w-full h-[200px] bg-neutral-200 rounded-lg overflow-hidden">
<img src="img/foot.jpg" alt="诗书画唱相关图片展示" class="w-full h-full object-cover transition-transform duration-700 hover:scale-105">
</div>
</section>
</main>
<!-- 联系咨询区域 -->
<section id="contact" class="bg-neutral-800 text-white py-12 mt-12">
<div class="container mx-auto px-4">
<h2 class="text-2xl font-bold mb-6 text-center">投资合作咨询</h2>
<div class="max-w-2xl mx-auto bg-neutral-900/50 p-6 rounded-xl">
<p class="mb-4 text-center">如果您对本平台感兴趣,有意向投资合作,请通过以下方式联系我们</p>
<div class="flex flex-col md:flex-row justify-center items-center gap-6 mt-8">
<a href="mailto:contact@shilishili.com" class="flex items-center text-white hover:text-primary transition-colors">
<i class="fa fa-envelope text-2xl mr-2"></i>
<span>contact@shilishili.com</span>
</a>
<a href="tel:+8612345678901" class="flex items-center text-white hover:text-primary transition-colors">
<i class="fa fa-phone text-2xl mr-2"></i>
<span>+86 123 4567 8901</span>
</a>
</div>
</div>
</div>
</section>
<!-- 页脚 -->
<footer class="bg-neutral-900 text-neutral-300 py-6">
<div class="container mx-auto px-4 text-center">
<p>© 2023 诗哩诗哩(shilishili) - 诗书画唱网视频分网 版权所有</p>
<div class="flex justify-center gap-4 mt-4">
<a href="#" class="hover:text-primary transition-colors"><i class="fa fa-weibo"></i></a>
<a href="#" class="hover:text-primary transition-colors"><i class="fa fa-wechat"></i></a>
<a href="#" class="hover:text-primary transition-colors"><i class="fa fa-youtube-play"></i></a>
</div>
</div>
</footer>
<!-- JavaScript -->
<script>
// 视频切换功能
document.addEventListener('DOMContentLoaded', function() {
const videoElement = document.getElementById('main-video');
const videoTitle = document.getElementById('video-title');
const videoOptions = document.querySelectorAll('.video-option');
const videoLoading = document.getElementById('video-loading');
// 隐藏加载提示
videoElement.addEventListener('canplay', function() {
videoLoading.classList.add('hidden');
});
// 视频选项点击事件
videoOptions.forEach(option => {
option.addEventListener('click', function() {
// 显示加载提示
videoLoading.classList.remove('hidden');
// 更新激活状态
videoOptions.forEach(opt => opt.classList.remove('border-primary'));
this.classList.add('border-primary');
// 获取视频信息
const videoSrc = this.getAttribute('data-video');
const imageSrc = this.getAttribute('data-image');
const title = this.getAttribute('data-title');
// 更新标题
videoTitle.textContent = title;
// 处理视频或图片
if (videoSrc) {
// 是视频
videoElement.src = videoSrc;
videoElement.style.display = 'block';
videoElement.load();
videoElement.play();
} else if (imageSrc) {
// 是图片
videoElement.style.display = 'none';
videoLoading.classList.add('hidden');
// 创建图片元素
let imgElement = document.querySelector('#main-video + img');
if (!imgElement) {
imgElement = document.createElement('img');
imgElement.className = 'w-full h-full object-contain';
videoElement.parentNode.insertBefore(imgElement, videoElement.nextSibling);
} else {
imgElement.style.display = 'block';
}
imgElement.src = imageSrc;
imgElement.alt = title;
// 图片加载完成后隐藏加载提示
imgElement.onload = function() {
videoLoading.classList.add('hidden');
};
}
});
});
// 滚动时改变头部样式
window.addEventListener('scroll', function() {
const header = document.querySelector('header');
if (window.scrollY > 10) {
header.classList.add('py-2', 'shadow');
header.classList.remove('py-4');
} else {
header.classList.add('py-4');
header.classList.remove('py-2', 'shadow');
}
});
});
</script>
</body>
</html>
三、优化要点解析
1. 语义化HTML结构
原代码大量使用div标签,缺乏语义化。优化后:
- 使用
<header>
、<main>
、<section>
、<footer>
等语义化标签 - 合理组织页面结构,使代码更具可读性和可维护性
- 为所有媒体资源添加alt属性,提高可访问性
2. 响应式设计实现
原代码使用固定宽度,无法适配不同设备。优化后:
- 使用Tailwind CSS的响应式工具类(sm:、md:、lg:等前缀)
- 采用弹性布局(flex)和网格布局(grid)
- 使用clamp()函数实现字体大小的动态调整
- 添加视口(viewport)设置,确保移动设备正常显示
3. 现代化样式设计
- 使用Tailwind CSS替代传统CSS写法,提高开发效率
- 定义主题色和辅助色,保持整体风格统一
- 添加过渡动画和微交互,提升用户体验
- 使用阴影、圆角等元素增强视觉层次感
4. 视频播放体验优化
- 替换iframe播放方式为原生video标签,提高性能
- 添加视频封面图(poster),优化加载体验
- 实现视频加载状态提示
- 统一视频容器比例(16:9),保持视觉一致性
- 优化视频切换逻辑,添加平滑过渡
5. 交互体验提升
- 为导航链接添加悬停动画效果
- 实现滚动时头部样式动态变化
- 为按钮和可点击元素添加反馈效果
- 图片添加缩放动画,增强交互感
6. SEO与可访问性优化
- 添加页面标题和meta标签(description、keywords)
- 合理使用标题层级(h1-h3)
- 为所有媒体添加alt属性
- 使用语义化标签提升内容结构化程度
四、扩展知识:前端开发最佳实践
1. 响应式设计原则
响应式设计是现代前端开发的基础,核心原则包括:
- 移动优先:先设计移动设备版本,再逐步适配更大屏幕
- 流式布局:使用相对单位(%、rem、vw等)替代固定像素
- 媒体查询:根据不同屏幕尺寸应用不同样式
- 弹性图片:确保图片能适应不同容器大小
2. 语义化HTML的重要性
- 提升代码可读性和可维护性
- 有利于搜索引擎优化(SEO)
- 提高页面可访问性,帮助屏幕阅读器正确解析内容
- 符合Web标准,有利于未来扩展
3. 现代CSS解决方案
Tailwind CSS等工具类CSS框架的优势:
- 提高开发效率,减少CSS文件体积
- 实现样式的一致性和可维护性
- 内置响应式设计支持
- 易于定制,可根据项目需求调整主题
4. 视频播放优化技巧
- 使用合适的视频格式和编码(如H.264/MP4)
- 实现视频懒加载,减少初始加载时间
- 提供多种分辨率版本,适应不同网络环境
- 添加预加载策略(preload属性)
- 实现自定义控件,提升品牌一致性
五、总结
通过对"诗哩诗哩"视频网站的重构,我们将一个基础的静态页面提升为具有现代感、响应式、用户体验良好的专业级页面。这次优化不仅改进了视觉效果,更重要的是提升了代码质量、可维护性和扩展性。
对于未来的发展,可以考虑以下方向:
- 实现视频分类和搜索功能
- 添加用户系统,支持评论和收藏
- 优化视频加载速度,实现分片加载
- 添加更多交互效果和动画,提升用户体验
- 实现深色模式,适应不同使用场景
希望这个案例分析能帮助你理解前端开发中的关键优化点,提升你的项目开发水平!