核心理念:响应式设计三要素
在动手修改之前,请先理解这三个核心概念:

- 视口:在 HTML 的
<head>部分添加<meta name="viewport" content="width=device-width, initial-scale=1.0">,这是告诉浏览器如何控制页面的尺寸和缩放,是自适应的基石。 - 弹性布局:使用相对单位(如 ,
rem,em,vw/vh)代替固定像素,这样元素大小会根据屏幕尺寸自动调整。 - 媒体查询:通过
@media规则为不同尺寸的设备(如手机、平板、桌面)编写不同的 CSS 样式。
第一步:准备工作(至关重要)
在修改任何文件之前,务必备份! 备份你的网站数据库和所有相关模板文件 (/templets/ 目录)。
第二步:修改网站首页 (index.htm)
这是最常见也是最需要自适应的地方。
添加视口标签
打开你的首页模板文件,通常是 /templets/default/index.htm,在 <head> 标签内,添加或修改以下代码:
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">{dede:global.cfg_webname/}</title>
<!-- 其他 meta 和 link 标签 -->
<link rel="stylesheet" href="/templets/default/css/style.css"> <!-- 假设你的CSS文件在这里 -->
</head>
修改 HTML 结构(如果需要)
老旧的 DedeCMS 模板可能使用 <table> 布局,这种布局非常不利于自适应,你需要将其重构为 <div> 布局。

旧版 Table 布局示例(不推荐):
<table width="980" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="200" valign="top">左侧边栏</td>
<td width="780" valign="top">主内容区</td>
</tr>
</table>
新版 Div 布局示例(推荐):
<div class="main-container">
<div class="sidebar">左侧边栏</div>
<div class="content">主内容区</div>
</div>
编写自适应 CSS
我们来编写 CSS 样式,假设你有一个 /templets/default/css/style.css 文件。
基础样式(桌面端):

/* style.css */
.main-container {
width: 100%; /* 容器宽度100% */
max-width: 1200px; /* 限制最大宽度,避免在大屏幕上过宽 */
margin: 0 auto; /* 居中 */
display: flex; /* 使用弹性布局 */
}
.sidebar {
width: 25%; /* 侧边栏占25% */
background-color: #f4f4f4;
padding: 15px;
}
.content {
width: 75%; /* 主内容占75% */
padding: 15px;
}
添加媒体查询(针对移动端):
在 CSS 文件的末尾,添加以下代码,当浏览器窗口宽度小于 768px 时,这些样式会生效。
/* style.css - 在文件末尾添加 */
/* 平板和手机端 (屏幕宽度小于 768px) */
@media screen and (max-width: 768px) {
.main-container {
flex-direction: column; /* 将侧边栏和内容区从左右排列变为上下排列 */
}
.sidebar, .content {
width: 100%; /* 在移动端,两者都占满宽度 */
}
}
效果解释:
- 桌面端 (> 768px):
main-container是一个flex容器,sidebar在左(25%宽度),content在右(75%宽度)。 - 移动端 (≤ 768px):
flex-direction: column;让子元素垂直排列。sidebar和content的宽度都变为100%,它们会依次从上到下显示。
第三步:修改文章列表页 (list_article.htm)
文章列表页的自适应修改方法与首页类似。
修改 HTML 结构
找到文章列表的循环部分,通常是这样的结构:
<!-- 旧版可能用 table 或固定宽度的 div -->
{dede:list pagesize='20'}
<table>
<tr>
<td><a href="[field:arcurl/]">[field:title/]</a></td>
<td>[field:pubdate function="MyDate('Y-m-d',@me)"/]</td>
</tr>
</table>
{/dede:list}
将其修改为更现代的 div 结构:
<div class="article-list">
{dede:list pagesize='20'}
<article class="article-item">
<h2><a href="[field:arcurl/]">[field:title/]</a></h2>
<div class="article-meta">
<span class="date">[field:pubdate function="MyDate('Y-m-d',@me)"]</span>
<span class="author">作者:[field:writer/]</span>
</div>
<p class="summary">[field:description/]...</p>
</article>
{/dede:list}
</div>
编写自适应 CSS
/* style.css */
.article-list {
max-width: 1200px;
margin: 0 auto;
padding: 20px;
}
.article-item {
border-bottom: 1px solid #eee;
padding: 15px 0;
display: flex; /* 使用 flex 布局来排列标题和摘要 */
flex-wrap: wrap; /* 允许换行 */
}
.article-item h2 {
flex: 1; /* 标题占据剩余空间 */
margin: 0;
font-size: 1.5rem;
}
.article-item h2 a {
text-decoration: none;
color: #333;
}
.article-meta {
color: #999;
font-size: 0.9rem;
margin-left: 15px;
}
.summary {
margin-top: 10px;
color: #666;
flex-basis: 100%; /* 摘要占满一行 */
}
/* 媒体查询:移动端优化 */
@media screen and (max-width: 768px) {
.article-item h2 {
font-size: 1.2rem; /* 标题字号变小 */
}
.article-meta {
margin-left: 0; /* 移除左边距,让信息更紧凑 */
margin-top: 5px;
display: block; /* 让 meta 信息换行 */
}
}
第四步:修改文章内容页 (article_article.htm)
页的自适应主要关注图片和文本。
处理图片
这是最关键的一步,默认情况下,DedeCMS 上传的图片是固定宽度的,在手机上会撑破屏幕。
解决方案:使用 CSS 强制图片自适应
在你的 CSS 文件中添加以下全局样式:
/* style.css */
/* 让所有图片最大宽度为100%,高度自动 */
img {
max-width: 100%;
height: auto;
display: block; /* 去除图片下方的小间隙 */
}
这行代码 max-width: 100%; 能确保任何图片都不会超过其父容器的宽度,从而实现自适应。
处理文章内容和分页
本身是文本,通常没有问题,但分页按钮需要优化。
HTML 结构:
找到文章分页的代码,通常类似这样:
<div class="dede_pages">
<ul class="pagelist">
<!-- {dede:pagelist listitem="info,index,end,pre,next,pageno" listsize="5"/} -->
</ul>
</div>
CSS 样式:
/* style.css */
.dede_pages {
text-align: center;
margin: 30px 0;
}
.pagelist {
list-style: none;
padding: 0;
}
.pagelist li {
display: inline-block; /* 让分页按钮水平排列 */
margin: 0 5px;
}
.pagelist a, .pagelist span {
display: inline-block;
padding: 5px 10px;
border: 1px solid #ddd;
border-radius: 3px;
text-decoration: none;
}
.pagelist a:hover {
background-color: #f0f0f0;
}
/* 移动端让分页按钮更紧凑 */
@media screen and (max-width: 480px) {
.pagelist li {
margin: 0 2px;
}
.pagelist a, .pagelist span {
padding: 3px 8px;
font-size: 0.9rem;
}
}
第五步:修改头部和底部 (head.htm, footer.htm)
头部和底部也会被多个页面调用,所以修改它们会影响全局。
- 导航菜单:导航菜单在移动端通常会变成一个“汉堡包”图标,点击后展开。
- 实现方法:
- 在 HTML 中,将导航菜单包裹在一个
div中,并添加一个用于切换的按钮(图标)。 - 在 CSS 中,默认隐藏移动端菜单,使用媒体查询在桌面端显示。
- 使用 JavaScript 来监听汉堡包图标的点击事件,控制菜单的显示和隐藏。
- 在 HTML 中,将导航菜单包裹在一个
这是一个稍微复杂的话题,但实现原理是通用的,你可以搜索 "CSS Hamburger Menu" 找到大量现成的教程和代码。
总结与最佳实践
- 从 CSS 开始:自适应 90% 的工作是 CSS 和 HTML 结构的调整,你几乎不需要改动 DedeCMS 的 PHP 代码。
- 使用现代布局:放弃
<table>布局,拥抱<div>+Flexbox+Grid布局。 - 媒体查询是关键:为不同的断点(如 768px, 480px)编写样式,覆盖默认样式。
- 图片是重点:务必使用
max-width: 100%;和height: auto;来处理所有图片。 - 使用相对单位:多用 ,
rem,em代替px,让布局更灵活。 - 测试!测试!测试!:使用浏览器的开发者工具(F12)的“设备模拟”功能,实时预览你的网站在不同设备上的效果,这是最高效的调试方式。
遵循以上步骤,你就可以将你的 DedeCMS 网站逐步改造为现代化的自适应网站,如果遇到具体问题,可以随时提出,我会尽力提供更详细的解决方案。
