dede 5.7三级下拉菜单如何实现?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文
  1. 准备数据:确保你的栏目结构清晰,并且已经将顶级栏目设置为“顶级栏目”。
  2. 修改模板文件:在首页模板文件中,编写用于调用栏目的 HTML 结构。
  3. 编写 CSS 样式:创建 CSS 文件来美化菜单并实现下拉效果。

第一步:准备数据(后台设置)

在 DedeCMS 后台,你需要确保栏目的层级结构是正确的。

dede 5.7三级下拉菜单
(图片来源网络,侵删)
  1. 登录 DedeCMS 后台。
  2. 进入【核心】 -> 【栏目管理】。
  3. 创建你的栏目。
    • 顶级栏目 1产品中心 (设置为“顶级栏目”)
      • 二级栏目 1.1硬件产品 (父栏目选择“产品中心”)
        • 三级栏目 1.1.1服务器 (父栏目选择“硬件产品”)
        • 三级栏目 1.1.2交换机 (父栏目选择“硬件产品”)
      • 二级栏目 1.2软件产品 (父栏目选择“产品中心”)
        • 三级栏目 1.2.1操作系统 (父栏目选择“软件产品”)
        • 三级栏目 1.2.2办公软件 (父栏目选择“软件产品”)
    • 顶级栏目 2关于我们 (设置为“顶级栏目”)
      • 二级栏目 2.1公司简介 (父栏目选择“关于我们”)
      • 二级栏目 2.2联系我们 (父栏目选择“关于我们”)

确保你的栏目结构是这样清晰的层级关系,否则调用会出错。


第二步:修改模板文件 (index.htm)

我们需要在首页模板中,使用 DedeCMS 的标签 {dede:channel} 来循环输出栏目,并构建出我们需要的 HTML 结构。

  1. 打开你的网站根目录下的 /templets/default/ 文件夹。
  2. 找到并编辑 index.htm 文件(或者你自定义的首页模板文件)。
  3. 在你希望显示菜单的位置(通常是 <body> 标签下,<header><nav> 区域内),粘贴以下代码:
<!-- 导航菜单开始 -->
<div class="main-nav">
    <ul id="nav">
        {dede:channel type='top' row='8'}
        <li>
            <a href="[field:typeurl/]">[field:typename/]</a>
            <!-- 二级栏目开始 -->
            {dede:son typeid='[field:id/]'}
            <ul class="sub-nav">
                <li>
                    <a href="[field:typeurl/]">[field:typename/]</a>
                    <!-- 三级栏目开始 -->
                    {dede:son typeid='[field:id/]'}
                    <ul class="sub-sub-nav">
                        <li><a href="[field:typeurl/]">[field:typename/]</a></li>
                    {/dede:son}
                    <!-- 三级栏目结束 -->
                </li>
            {/dede:son}
            <!-- 二级栏目结束 -->
            </ul>
        </li>
        {/dede:channel}
    </ul>
</div>
<!-- 导航菜单结束 -->

代码解释:

  • {dede:channel type='top' row='8'}:
    • type='top':这是关键,表示只调用顶级栏目。
    • row='8':表示调用最多8个顶级栏目,你可以根据需要修改。
  • [field:typeurl/][field:typename/]:分别输出栏目的链接和名称。
  • {dede:son typeid='[field:id/]'} ... {/dede:son}:
    • 这是一个嵌套循环,它会在每个顶级栏目循环内部,再次调用该顶级栏目下的所有二级栏目。
    • typeid='[field:id/] 将当前顶级栏目的ID作为参数,传递给 son 标签,从而实现子栏目的调用。
  • 我们再次嵌套了一层 {dede:son ... },用于在二级栏目下调用三级栏目,这样就构成了完整的三级结构。

第三步:编写 CSS 样式 (style.css)

我们有了 HTML 骨架,需要用 CSS 来给它穿上“衣服”并实现下拉效果。

dede 5.7三级下拉菜单
(图片来源网络,侵删)
  1. 打开 /templets/default/style.css 文件(或你自定义的样式文件)。
  2. 在文件末尾添加以下 CSS 代码:
/* ===== 导航菜单样式开始 ===== */
/* 主导航容器 */
.main-nav {
    width: 100%; /* 或固定宽度,如 1200px */
    background-color: #333; /* 背景色 */
    margin: 0 auto;
}
/* 主导航列表 */
#nav {
    list-style: none; /* 去掉列表前的点 */
    margin: 0;
    padding: 0;
    text-align: center; /* 让菜单项居中 */
}
/* 主导航列表项 */
#nav > li {
    display: inline-block; /* 横向排列 */
    position: relative; /* 关键:为下拉菜单定位提供参考 */
}
/* 主导航链接 */
#nav > li > a {
    display: block; /* 让链接可以撑满整个 li */
    padding: 15px 20px;
    color: #fff;
    text-decoration: none;
    font-size: 16px;
}
/* 鼠标悬停在主链接上的效果 */
#nav > li > a:hover {
    background-color: #555;
}
/* ===== 二级下拉菜单样式 ===== */
/* 默认隐藏二级菜单 */
#nav > li > .sub-nav {
    display: none;
    position: absolute; /* 绝对定位,相对于父级 li */
    top: 100%; /* 定位在主链接的下方 */
    left: 0;
    background-color: #444;
    min-width: 200px; /* 设置一个最小宽度 */
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
    z-index: 1000;
}
/* 当鼠标悬停在主菜单项上时,显示二级菜单 */
#nav > li:hover > .sub-nav {
    display: block;
}
/* 二级菜单的列表项 */
#nav > li > .sub-nav > li {
    width: 100%;
    position: relative; /* 关键:为三级菜单定位提供参考 */
}
/* 二级菜单的链接 */
#nav > li > .sub-nav > li > a {
    display: block;
    padding: 12px 15px;
    color: #fff;
    text-decoration: none;
    border-bottom: 1px solid #555;
}
/* 鼠标悬停在二级链接上的效果 */
#nav > li > .sub-nav > li > a:hover {
    background-color: #666;
}
/* ===== 三级下拉菜单样式 ===== */
/* 默认隐藏三级菜单 */
#nav > li > .sub-nav > li > .sub-sub-nav {
    display: none;
    position: absolute; /* 绝对定位,相对于父级 li (二级菜单的项) */
    top: 0; /* 定位在二级链接的右侧 */
    left: 100%; /* 水平位置在父级元素的右边 */
    background-color: #555;
    min-width: 180px;
    box-shadow: 0 2px 5px rgba(0,0,0,0.2);
}
/* 当鼠标悬停在二级菜单项上时,显示三级菜单 */
#nav > li > .sub-nav > li:hover > .sub-sub-nav {
    display: block;
}
/* 三级菜单的链接 */
#nav > li > .sub-nav > li > .sub-sub-nav > li > a {
    display: block;
    padding: 10px 15px;
    color: #fff;
    text-decoration: none;
    border-bottom: 1px solid #666;
}
/* 鼠标悬停在三级链接上的效果 */
#nav > li > .sub-nav > li > .sub-sub-nav > li > a:hover {
    background-color: #777;
}
/* ===== 导航菜单样式结束 ===== */

CSS 核心逻辑解释:

  1. position: relativeposition: absolute:这是实现下拉菜单的精髓。
    • 我们给包含下拉菜单的 <li> 设置了 position: relative;,这让它成为了一个“定位参考系”。
    • 然后给下拉的 <ul> 设置了 position: absolute;,这样它的位置就可以相对于那个“参考系”来定位了。
    • 二级菜单top: 100%; left: 0; 让它出现在主菜单的下方。
    • 三级菜单top: 0; left: 100%; 让它出现在二级菜单的右侧。
  2. display: nonehover
    • 默认情况下,二级和三级菜单的 display 都是 none,所以是隐藏的。
    • 当鼠标移动到父级 <li> 上时(#nav > li:hover),我们通过选择器 #nav > li:hover > .sub-nav 将对应二级菜单的 display 设置为 block,使其显示出来,三级菜单同理。

最终效果与优化

完成以上三步后,保存所有文件并刷新你的网站首页,你应该能看到一个功能完整、样式美观的三级下拉菜单了。

常见问题与优化:

  1. 菜单对齐问题:如果菜单没有居中或对齐,检查 #navtext-align#nav > lidisplay: inline-block
  2. IE6/IE7 兼容性:非常老的浏览器(如 IE6)不支持 hover 在非 <a> 标签上的应用,如果需要支持,你可能需要引入一个小的 hover.htc 文件或者使用 JavaScript(如 jQuery)来实现,但对于现代网站,可以忽略。
  3. 菜单宽度:通过调整 .sub-nav.sub-sub-navmin-width 属性,可以控制下拉菜单的宽度。
  4. 响应式设计:上面的 CSS 是为桌面端设计的,在移动端,你可能需要将这个多级菜单转换为一个“汉堡包”图标,这通常需要结合媒体查询(@media)和 JavaScript 来实现。

这个方法利用了 DedeCMS 自带的标签,结构清晰,易于理解和维护,是 DedeCMS 制作下拉菜单最标准、最推荐的方式。

dede 5.7三级下拉菜单
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
dede5.7验证码不正确怎么办?
« 上一篇 01-11
织梦编辑文章打开慢,如何解决?
下一篇 » 01-11

相关文章

取消
微信二维码
支付宝二维码

目录[+]