Files
blog/source/_posts/2025/2025.08/custom-navbar.md

321 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 自定义导航栏
categories: 建站手札
series: webcustom
summary: 介绍如何修改导航栏
abbrlink: 3e61a389
date: 2025-08-13 16:12:25
tags: 网站
---
最近在查找怎样自定义导航栏奈何没有对应版本的修改教程本站使用最新版butterfly5.4。
# PC 菜单栏
修改`[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug`的内容
```diff
nav#nav
span#blog-info
a(href=url_for('/') title=config.title)
if theme.nav.logo
img.site-icon(src=url_for(theme.nav.logo))
if theme.nav.display_title
span.site-name=config.title
#menus
- if (theme.algolia_search.enable || theme.local_search.enable)
- #search-button
- a.site-page.social-icon.search
- i.fas.fa-search.fa-fw
- span=' '+_p('search.title')
!=partial('includes/header/menu_item', {}, {cache: true})
+ #nav-right
+ if (theme.algolia_search.enable || theme.local_search.enable)
+ #search-button
+ a.site-page.social-icon.search
+ i.fas.fa-search.fa-fw
+ #toggle-menu
+ a.site-page
+ i.fas.fa-bars.fa-fw
+ #toggle-menu
+ a.site-page
+ i.fas.fa-bars.fa-fw
```
新建css文件
```css
#nav-right{
flex:1 1 auto;
justify-content: flex-end;
margin-left: auto;
display: flex;
flex-wrap:nowrap;
}
/* 导航栏居中 */
#sidebar #sidebar-menus .menus_items .menus_item {
margin: 10px 0;
}
#sidebar #sidebar-menus .menus_items a.site-page {
padding-left: 0;
}
#sidebar #sidebar-menus .menus_items .site-page {
position: relative;
display: block;
padding: 6px 30px 6px 22px;
color: var(--font-color);
font-size: 1.15em;
border: var(--style-border-always);
background: var(--icat-card-bg);
font-size: 14px;
border-radius: 12px;
}
#sidebar #sidebar-menus .menus_items .site-page i:first-child {
text-align: left;
padding-left: 10px;
}
```
# PE端
修改`[blogRoot]/themes/butterfly/layout/includes/header/menu_item.pug`内容。
```diff
if theme.menu
.menus_items
each value, label in theme.menu
if typeof value !== 'object'
- .menus_item
+ .icat_menus_item
- const valueArray = value.split('||')
a.site-page(href=url_for(trim(valueArray[0])))
···
```
修改`[blogRoot]/themes/butterfly/source/css/_layout/head.styl `内容
```diff
···
.menus_items
display: inline
.menus_item
+ .icat_menus_item
position: relative
display: inline-block
padding: 0 0 0 14px
&:hover
.menus_item_child
display: block
···
```
修改[blogRoot]/themes/butterfly/source/css/_layout/sidebar.styl内容
```diff
···
.menus_items
padding: 0 10px 40px
+ .menus_item
+ margin: 10px 0
.site-page
@extend .limit-one-line
position: relative
display: block
padding: 6px 30px 6px 22px
color: var(--font-color)
font-size: 1.15em
+ border: var(--icat-style-border-always)
+ background: var(--icat-essay-card-bg)
+ font-size: 14px
+ border-radius: 12px
&:hover
background: var(--text-bg-hover)
i:first-child
width: 15%
text-align: left
+ padding-left: 10px
&.group
& > i:last-child
position: absolute
top: .78em
right: 18px
transition: transform .3s
&.hide
& > i:last-child
transform: rotate(90deg)
& + .menus_item_child
display: none
.menus_item_child
margin: 0
list-style: none
padding-top: 6px
+#sidebar
+ #sidebar-menus
+ .icat_menus_item
+ display: inline-block
+ width: 50%
+
+ .site-page
+ text-align: center
+ margin: 4px
+ display: flex
+ flex-direction: column
+ align-items: center
+ padding: 8px 0
+ border-radius: 12px
+ font-size: 14px
+
+ i:first-child
+ padding-left: 0
+
+ & > .icat-essay
+ font-weight: 500
+
+ span
+ margin-top: -8px
```
在css文件中添加
```css
#sidebar #sidebar-menus .menus_items .menus_item_child {
display: -webkit-box;
display: -moz-box;
display: -webkit-flex;
display: -ms-flexbox;
display: box;
display: flex;
-webkit-box-orient: horizontal;
-moz-box-orient: horizontal;
-o-box-orient: horizontal;
-webkit-flex-direction: row;
-ms-flex-direction: row;
flex-direction: row;
-webkit-box-lines: multiple;
-moz-box-lines: multiple;
-o-box-lines: multiple;
-webkit-flex-wrap: wrap;
-ms-flex-wrap: wrap;
flex-wrap: wrap;
}
#sidebar #sidebar-menus .menus_items a.site-page, #sidebar .menus_item ul {
padding-left: 0;
}
#sidebar #sidebar-menus .menus_item_child li {
width: calc(50% - 8px);
margin: 4px;
}
#sidebar #sidebar-menus .menus_item_child .site-page.child {
display: -webkit-box;
display: -moz-box;
display: -webkit-flex;
display: -ms-flexbox;
display: box;
display: flex;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
-o-box-orient: vertical;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: center;
-moz-box-align: center;
-o-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
padding: 8px;
border-radius: 12px;
border: var(--style-border-always);
background: var(--icat-card-bg);
font-size: 14px;
}
#nav.hide-menu #toggle-menu {
padding: 0 0 0 12px;
}
#sidebar #sidebar-menus .icat_menus_item .site-page {
text-align: center;
margin: 4px;
display: -webkit-box;
display: -moz-box;
display: -webkit-flex;
display: -ms-flexbox;
display: box;
display: flex;
-webkit-box-orient: vertical;
-moz-box-orient: vertical;
-o-box-orient: vertical;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-align: center;
-moz-box-align: center;
-o-box-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
padding: 8px 0;
border-radius: 12px;
font-size: 14px;
}
@media screen and (max-width: 768px) {
#sidebar #sidebar-menus .menus_items .site-page.group > i:last-child {
margin-top: 4px;
}
#sidebar #sidebar-menus .menus_items .icat_menus_item .site-page i:first-child {
text-align: center;
padding-left: 0;
}
}
/* 子菜单美化 */
#sidebar .open > .avatar-img img {
height: 100px;
width: 100px;
border-radius: 50%;
}
#sidebar .open > .avatar-img img {
border: 5px #fff solid;
}
#sidebar .open > .avatar-img::before {
bottom: 8px;
height: 12px;
width: 12px;
}
#sidebar .open > .avatar-img::before {
content: '';
position: absolute;
left: 50%;
transform: translate(65%);
background: #6bdf8f;
border: 5px solid #fff;
border-radius: 50%;
transition: filter 375ms ease-in .2s,transform .3s;
z-index: 2;
}
/* 头像美化 */
#sidebar #sidebar-menus .sidebar-site-data {
padding: 0;
margin-left: 10px;
background: var(--icat-card-bg);
border-radius: 12px;
border: var(--style-border-always);
}
@media screen and (max-width: 768px) {
.site-data {
width: 94%;
}
}
/* 侧边栏的统计栏美化 */
/* PE端菜单栏美化 */
```
# 参考
{% link Meuicat的博客,Meuicat,https://meuicat.com/posts/2dbd58d6.html %}