DedeCMS 的导航栏通常由两部分组成:

(图片来源网络,侵删)
- PHP 模板文件:负责生成导航栏的 HTML 结构。
- CSS 样式文件:负责定义导航栏的外观,如颜色、字体、布局等。
下面我将分步为你讲解如何从零开始或修改已有的导航栏样式。
第一步:理解导航栏的 HTML 结构 (由 head.htm 生成)
在 DedeCMS 中,主导航栏的 HTML 结构通常是在 templets/default/head.htm 文件中通过调用 {dede:channelartlist} 和 {dede:type} 等标签生成的。
一个典型的导航栏 HTML 结构可能如下所示:
<div class="header">
<div class="nav">
<ul class="nav_ul">
<!-- 首页 -->
<li class='nav_li'><a href='/'><span>首页</span></a></li>
<!-- 一级栏目 -->
<li class='nav_li on'><a href='/plus/list.php?tid=1'><span>公司简介</span></a></li>
<li class='nav_li'><a href='/plus/list.php?tid=2'><span>产品中心</span></a></li>
<!-- 带有子栏目的二级导航 -->
<li class='nav_li'><a href='/plus/list.php?tid=3'><span>新闻资讯</span></a>
<ul class="sub_nav_ul">
<li><a href='/plus/list.php?tid=4'>公司新闻</a></li>
<li><a href='/plus/list.php?tid=5'>行业动态</a></li>
</ul>
</li>
<li class='nav_li'><a href='/plus/list.php?tid=6'><span>联系我们</span></a></li>
</ul>
</div>
</div>
关键点解析:

(图片来源网络,侵删)
<div class="nav">或<ul class="nav_ul">:这是导航栏的最外层容器,我们通常在这里设置宽度、居中对齐等。<li class="nav_li">:这是每一个导航项,我们在这里设置间距、背景色、鼠标悬停效果等。<a href="..."><span>...</span></a>:这是导航链接和文字,用<span>包裹文字是一个很好的习惯,可以方便地对文字进行单独样式控制,而不会影响整个<a>class="on":这是当前页面对应的导航项,我们可以用它来高亮显示当前页面所在的栏目。<ul class="sub_nav_ul">:这是二级子菜单,默认通常是隐藏的,当鼠标移到父级菜单上时才显示。
第二步:编写 CSS 样式
CSS 样式可以写在两个地方:
- 推荐方式:在
templets/default/style/dedecms.css文件中添加,这是 DedeCMS 的主样式表,方便统一管理。 - 临时方式:在
head.htm文件的<head>标签内使用<style>标签写入,适合快速测试。
下面我们通过一个完整的例子,一步步构建一个常见的导航栏样式。
示例目标:
创建一个水平、居中、带悬停效果和二级下拉菜单的导航栏。
基础布局样式 (作用于 .nav_ul)
我们要让导航列表变成水平一行,并居中显示。

(图片来源网络,侵删)
/* 在 dedecms.css 中添加 */
/* 导航栏容器 */
.nav {
width: 1000px; /* 设置一个固定宽度,或使用 max-width: 1000px; */
margin: 0 auto; /* 水平居中 */
height: 50px; /* 设置一个固定高度 */
}
/* 导航列表 - 去掉默认样式,并设置布局 */
.nav_ul {
list-style: none; /* 去掉列表前的点 */
margin: 0;
padding: 0;
display: flex; /* 使用 Flexbox 布局,轻松实现水平排列 */
justify-content: center; /* 子元素水平居中 */
align-items: center; /* 子元素垂直居中 */
}
/* 导航项 - 设置间距 */
.nav_li {
margin: 0 15px; /* 左右间距 */
position: relative; /* 这个属性很重要,为二级菜单定位做准备 */
}
导航链接和文字样式 (作用于 .nav_li a 和 span)
美化导航链接本身。
/* 导航链接样式 */
.nav_li a {
text-decoration: none; /* 去掉下划线 */
color: #333; /* 默认文字颜色 */
font-size: 16px;
display: block; /* 让 a 标签充满整个 li */
line-height: 50px; /* 行高等于容器高度,实现垂直居中 */
padding: 0 10px; /* 增加一点内边距,让点击区域更大 */
transition: all 0.3s ease; /* 添加平滑过渡效果 */
}
/* 鼠标悬停效果 */
.nav_li a:hover {
color: #007bff; /* 鼠标移上去时文字颜色变蓝 */
background-color: #f0f0f0; /* 鼠标移上去时背景变色 */
}
/* 当前页面的导航项高亮 */
.nav_li.on a {
color: #007bff; /* 当前页面的文字颜色 */
font-weight: bold; /* 加粗 */
}
/* 如果你用了 <span>,可以单独设置 */
.nav_li a span {
/* a 标签的样式已经满足,这里可以不写 */
}
二级下拉菜单样式 (作用于 .sub_nav_ul)
这是最关键的一步,我们需要让二级菜单默认隐藏,并在鼠标移到父级时显示。
/* 二级菜单容器 - 默认隐藏 */
.sub_nav_ul {
list-style: none;
margin: 0;
padding: 0;
position: absolute; /* 绝对定位,相对于设置了 position: relative; 的父级 .nav_li */
top: 100%; /* 定位在父级 li 的下方 */
left: 0;
background-color: #fff; /* 背景色 */
box-shadow: 0 2px 5px rgba(0,0,0,0.1); /* 阴影效果,增加层次感 */
display: none; /* 默认隐藏 */
z-index: 1000; /* 确保菜单显示在其他内容之上 */
}
/* 当鼠标移到父级 li 时,显示二级菜单 */
.nav_li:hover .sub_nav_ul {
display: block; /* 鼠标悬停时显示 */
}
/* 二级菜单项的样式 */
.sub_nav_ul li {
width: 150px; /* 设置二级菜单的宽度 */
}
.sub_nav_ul li a {
display: block;
line-height: 40px; /* 二级菜单项的高度 */
text-align: center; /* 文字居中 */
border-bottom: 1px solid #eee; /* 添加分隔线 */
}
.sub_nav_ul li a:hover {
background-color: #f8f8f8; /* 鼠标悬停时的背景色 */
}
第三步:整合与最终代码
将以上所有 CSS 代码整合到你的 dedecms.css 文件中,你的导航栏就会变成一个功能完整、外观漂亮的样式了。
dedecms.css 中最终添加的代码:
/* ====================== 导航栏样式 Start ====================== */
.nav {
width: 1000px;
margin: 20px auto 0;
height: 50px;
}
.nav_ul {
list-style: none;
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
}
.nav_li {
margin: 0 15px;
position: relative;
}
.nav_li a {
text-decoration: none;
color: #333;
font-size: 16px;
display: block;
line-height: 50px;
padding: 0 10px;
transition: all 0.3s ease;
}
.nav_li a:hover {
color: #007bff;
background-color: #f0f0f0;
}
.nav_li.on a {
color: #007bff;
font-weight: bold;
}
/* 二级下拉菜单 */
.sub_nav_ul {
list-style: none;
margin: 0;
padding: 0;
position: absolute;
top: 100%;
left: 0;
background-color: #fff;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
display: none;
z-index: 1000;
}
.nav_li:hover .sub_nav_ul {
display: block;
}
.sub_nav_ul li {
width: 150px;
}
.sub_nav_ul li a {
display: block;
line-height: 40px;
text-align: center;
border-bottom: 1px solid #eee;
}
.sub_nav_ul li a:hover {
background-color: #f8f8f8;
}
/* ====================== 导航栏样式 End ====================== */
常见问题与技巧
-
导航栏文字对不齐?
- 原因:通常是
line-height和height没有设置成一样的值。 - 解决:确保
.nav_li的高度和.nav_li a的line-height相同,例如都是50px。
- 原因:通常是
-
二级菜单位置不对?
- 原因:父级
.nav_li没有设置position: relative;。 - 解决:给
.nav_li添加position: relative;。
- 原因:父级
-
如何修改导航栏的背景色?
- 解决:给
.nav或.nav_ul添加background-color属性。.nav { background-color: #2c3e50; /* 深蓝色背景 */ }
- 解决:给
-
如何让导航栏固定在页面顶部?
- 解决:给
.nav的父级(通常是.header)添加position: fixed;和top: 0;以及width: 100%;,为了防止内容被遮挡,需要给 body 添加一个padding-top,其值等于导航栏的高度。.header { position: fixed; top: 0; left: 0; width: 100%; z-index: 999; } body { padding-top: 50px; /* 因为导航栏高度是 50px */ }
- 解决:给
通过以上步骤,你就可以完全掌控 DedeCMS 导航栏的样式了,核心是理解其 HTML 结构,然后用 CSS 精准地定位和美化每一个元素。
