前提

情况是有一天博客闲逛,逛到了LiuShen’s Blog - 清羽飞扬,发现他添加了一个左上角小菜单,我觉得有意思,我也想添加一个1 我搜搜看有没有现成的教程可以喂饭到嘴,发现没人做这方面的东西,然后在Prorise - 博客小栈发现同样也有这个样式,我就去问问博主,得到回复是anzhiyu主题自带的,这下事情明朗了,直接下载主题开始扒代码。

修改nav.pug

打开\themes\butterfly\layout\includes\header\nav.pug,在原有的代码中插入以下内容

  #nav-group
    //- 添加左上角菜单
    span#blog_name
      if theme.nav.enable
        .back-home-button
          i.anzhiyufont.anzhiyu-icon-grip-vertical
          .back-menu-list-groups
            each group in theme.nav.menu
              .back-menu-list-group
                .back-menu-list-title= group.title
                .back-menu-list
                  each item in group.item
                    a.back-menu-item(href=url_for(item.link), title=item.name)
                      img.back-menu-item-icon(src=item.icon alt=item.name)
                      span.back-menu-item-text= item.name

或直接使用替换好的

nav#nav
  #nav-group
    //- 添加左上角菜单
    span#blog_name
      if theme.nav.enable
        .back-home-button
          i.anzhiyufont.anzhiyu-icon-grip-vertical
          .back-menu-list-groups
            each group in theme.nav.menu
              .back-menu-list-group
                .back-menu-list-title= group.title
                .back-menu-list
                  each item in group.item
                    a.back-menu-item(href=url_for(item.link), title=item.name)
                      img.back-menu-item-icon(src=item.icon alt=item.name)
                      span.back-menu-item-text= item.name
    
    span#blog-info
      a.nav-site-title(href=url_for('/'))
        if theme.nav.logo
          img.site-icon(src=url_for(theme.nav.logo) alt='Logo')
        if theme.nav.display_title
          span.site-name=config.title
      if globalPageType === 'post' && theme.nav.display_post_title
        a.nav-page-title(href=url_for('/'))
          span.site-name=(page.title || config.title)
          span.site-name
            i.fa-solid.fa-circle-arrow-left
            span= ' ' + _p('post.back_to_home')

  #menus
    if theme.search.use
      #search-button
        span.site-page.social-icon.search
          i.fas.fa-search.fa-fw
          span= ' ' + _p('search.title')
    if theme.menu
      != partial('includes/header/menu_item', {}, {cache: true})

      #toggle-menu
        span.site-page
          i.fas.fa-bars.fa-fw

这样左上角就会显示一个隐藏的按钮了(因为源代码用的anzhiyu图标,咱是原版butterfly自然不会显示)

修改nav.styl

新建themes\butterfly\source\css\_layout\nav.styl,并添加以下代码

/* 左上角菜单样式 */
.back-home-button
  display flex
  width 35px
  height 35px
  padding 0 !important
  align-items center
  justify-content center
  margin-right 4px
  transition 0.3s
  border-radius 8px

.back-home-button:hover
  background var(--anzhiyu-main)
  color var(--anzhiyu-white) !important

.back-home-button:hover .back-menu-list-groups
  display: flex;
  opacity: 1;
  transition: .3s;
  top: 55px;
  pointer-events: auto;
  left: 0rem;
  transform: scale(1);

.back-home-button .back-menu-list-groups
  position: absolute;
  top: 45px;
  transform: scale(.8);
  transform-origin: top left;
  left: 0rem;
  /* 半透明毛玻璃背景 */
  background-color: rgba(255, 255, 255, 0.59);
  backdrop-filter: blur(20px) saturate(180%);
  -webkit-backdrop-filter: blur(20px) saturate(180%);
  border-radius: 12px;
  border: var(--style-border);
  flex-direction: column;
  font-size: 12px;
  color: var(--anzhiyu-secondtext);
  box-shadow: var(--anzhiyu-shadow-border);
  transition: .1s;
  opacity: 0;
  pointer-events: none;

.back-home-button .back-menu-list-group
  display flex
  flex-direction column

.back-home-button .back-menu-list-group .back-menu-list-title
  margin 8px 0 0 16px
  transition 0.3s
  color: #333 /* 白天模式标题颜色 */

.back-home-button .back-menu-list
  display flex
  flex-direction row
  flex-wrap wrap
  width 340px
  justify-content space-between

.back-home-button .back-menu-list::before
  position absolute
  top -24px
  left 0px
  width 100%
  height 25px
  content ""
  transition: 0s

.back-home-button .back-menu-list-groups .back-menu-list-group:last-child .back-menu-list
  margin 0 0 8px

.back-home-button .back-menu-list-group:hover .back-menu-list-title
  color var(--anzhiyu-main)

.back-home-button .back-menu-list-groups:hover
  border var(--style-border-hover)

.back-home-button .back-menu-list .back-menu-item
  display flex
  align-items center
  margin 4px 8px
  padding 4px 8px !important
  transition 0.3s
  width 150px
  border-radius 8px !important
  transition 0.2s !important

.back-menu-list-groups .back-menu-list .back-menu-item .back-menu-item-text
  font-size var(--global-font-size)
  margin-left 0.5rem
  color: #333 /* 白天模式文字颜色为黑色 */
  white-space nowrap

.back-menu-list-groups .back-menu-list .back-menu-item .back-menu-item-icon
  width 24px
  height 24px
  border-radius 24px
  background var(--anzhiyu-secondbg)

.back-home-button .back-menu-list .back-menu-item:hover .back-menu-item-text
  color var(--anzhiyu-white)

/* 页面头部样式调整 */
#page-header #nav .back-home-button
  cursor pointer
  position relative

#page-header:not(.not-top-img) #nav .back-home-button
  color var(--light-grey)

#page-header.nav-fixed:not(.not-top-img) #nav .back-home-button
  color var(--font-color)

/* 黑夜模式适配 */
[data-theme="dark"]
  .back-home-button .back-menu-list-groups
    background-color: rgba(0, 0, 0, 0.3) /* 深色模式背景更暗 */
  
  .back-menu-list-groups .back-menu-list .back-menu-item .back-menu-item-text
    color: #fff /* 深色模式文字颜色为白色 */
  
  .back-home-button .back-menu-list-group .back-menu-list-title
    color: #fff /* 深色模式标题颜色为白色 */

/* 移动端适配 */
@media screen and (max-width: 768px)
  .back-menu-list-groups .back-menu-list .back-menu-item .back-menu-item-text
    font-size: 14px;
    text-overflow: ellipsis;
    overflow: hidden;
    white-space: nowrap;

这样菜单列表就能正常显示了

给小菜单添加可见图标

在自定义css文件中添加以下样式代码

.back-home-button i.anzhiyufont.anzhiyu-icon-grip-vertical {
  display: none;
}

.back-home-button {
  position: relative;
  padding-left: 28px; /* 左侧留出图标空间 + 边距 */
  padding-right: 8px; /* 右侧边距 */
  padding-top: 6px; /* 上边距 */
  padding-bottom: 6px; /* 下边距 */
  display: flex;
  align-items: center;
  min-height: 32px; /* 最小高度确保按钮有足够空间 */
}

.back-home-button::before {
  content: "";
  position: absolute;
  left: 8px; /* 图标左侧边距 */
  top: 50%;
  transform: translateY(-50%);
  width: 18px; /* 图标宽度 */
  height: 18px; /* 图标高度 */
  background-image: url('你的图标路径');
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
}

修改完后,搜索按钮可能会错位,再次添加css进行固定 我这里是固定在右上角

#menus {
  display: flex;
  align-items: center;
  width: 100%;
}

#search-button {
  margin-left: auto;
}

添加菜单内容

config.butterfly.yml中找到nav配置(一般就在配置的第一项),并仿写

nav:
  # Navigation bar logo image
  logo: 
  display_title: true
  display_post_title: true
  # Whether to fix navigation bar
  fixed: false
  home_icon_url: /img/lemon.png 
  enable: true
  menu:
    - title: "我的网站"
      item:
        - name: "博客"
          link: https://hexo.seln.cn/
          icon: https://hexo.seln.cn/img/ico.jpg
    - title: "友情链接"
      item:
        - name: "阿叶Ayeez"
          link: https://blog.ayeez.cn
          icon: https://blog.ayeez.cn/imgs/photo.jpg
        - name: "裕裕裕"
          link: https://yu-blog.top/
          icon: https://free.picui.cn/free/2025/09/30/68dbd5869ed39.jpg
        - name: "ZY知识库"
          link: https://blog.pljzy.top/
          icon: https://blog.pljzy.top/_astro/logo.BxIxyJV1_Z19cEQW.webp

更多修改

  1. 可能会导致左上角小标题和菜单图标次序错误,可以添加css进行更改
#nav-group {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  padding: 0 20px; /* 根据需要调整内边距 */
}

#blog_name {
  display: flex;
  align-items: center;
}

#blog-info {
  margin-left: auto;
  display: flex;
  align-items: center;
}

.nav-site-title {
  text-decoration: none;
  color: inherit;
}

.site-name {
  font-size: 1.2em;
  font-weight: bold;
}

这样就是菜单在左,标题在右了 2. 边距修改 修改完之后,左上角肯定会因为多的样式导致位置变化,添加css移动他

#nav-group {
    position: relative;
    left: -30px; /* 向左移动30像素,根据需要调整数值 */
}
1 2