首页 > 其他分享 >关于Butterfly的导航栏的一些教程

关于Butterfly的导航栏的一些教程

时间:2022-10-06 20:03:24浏览次数:53  
标签:Butterfly 教程 name transition search important nav 导航 png

--- title: 关于Butterfly的导航栏的一些教程 tags:   - Hexo魔改   - 干货教程   - 推荐文章   - 建站 categories:   - Hexo魔改 cover: 'https://bu.dusays.com/2022/09/01/631068b943a16.jpg' abbrlink: 895003b5 date: 2022-09-01 14:33:38 swiper_index: 12 description: 更好的导航栏mod updated: 2022-10-04 08:50:19 --- 在开始前,请先确保你已看此Hexo魔改系列前置教程,或者你是老司机:
{% link Hexo Butterfly博客魔改的一点点基础,LYXの小破站,https://yisous.xyz/posts/583ff077/ %}
在开始前,先说一些事情吧。最近要开学了,所以博客的更新会放缓,大概能够周更,不过几周鸽几下也是有可能的。
OK,那我们开始吧。
{% note info %} 本博仅作一些基础教程,一些自定义css请自行添加 {% endnote %} # 前言
butterfly的默认导航栏长这样:
![1662014580748.png](https://bu.dusays.com/2022/09/01/6310547648cc8.png)
这个导航栏非常单调、比较丑,而且没有居中,不支持常驻~~(Jerry偷懒了~~,所以这次就来给它来一次改头换面吧!
# 分离搜索栏与菜单栏。
为了方便管理,我们要让搜索栏在最右侧,而其它元素居中,这时我们需要修改一下pug
修改`[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug`: ```diff nav#nav   span#blog_name     a#site-name(href=url_for('/')) #[=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
```
这时,就变成了这样
![1662015427348.png](https://bu.dusays.com/2022/09/01/631057c4c4dda.png)
为了美观我隐藏了搜索栏的文字,若想要显示出来可以在最后加上:
```diff nav#nav   span#blog_name     a#site-name(href=url_for('/')) #[=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 +          span=' '+_p('search.title') -    #toggle-menu -      a.site-page -        i.fas.fa-bars.fa-fw +      #toggle-menu +        a.site-page +          i.fas.fa-bars.fa-fw ```
# 导航栏居中
其实导航栏居中可以用纯CSS的方式来解决:
在你的自定义css里面添加下面几句CSS:
```css #nav-right{     flex:1 1 auto;     justify-content: flex-end;     margin-left: auto;     display: flex;     flex-wrap:nowrap; } ```
导航栏居中就实现了
![1662016388179.png](https://bu.dusays.com/2022/09/01/63105b85d341e.png)
# 去掉导航栏项目底下的蓝色长条
默认的蓝色长条动画很坑,如果你想自定义hover效果,可以添加如下css来解决:
![1662016551531.png](https://bu.dusays.com/2022/09/01/63105c2927d6a.png)
```css #nav *::after{     background-color: transparent!important; } ```
# 子菜单横向布局
butterfly的二级菜单默认是纵向排列的,可以添加如下css使其横向排列
![1662017890178.png](https://bu.dusays.com/2022/09/01/631061640d5fc.png)
```css .menus_item_child li:not(#sidebar-menus li){     float: left;     border-radius: 6px!important;     -webkit-border-radius: 6px!important;     -moz-border-radius: 6px!important;     -ms-border-radius: 6px!important;     -o-border-radius: 6px!important; } .menus_item_child:not(#sidebar-menus ul){     left:calc(-150%)!important;/*这是估算值,为了保持元素居中的,如果不合适可以自己调*/ } ```
效果如下:
![1662018025137.png](https://bu.dusays.com/2022/09/01/631061eb0515f.png)
# 网站标题部分的增强版
默认的标题非常简单,就是一个a标签,按下来就返回主页,看到洪哥他们的有一个非常高大上的动画,所以我也写了一个
效果如下:
![1662018856050.png](https://bu.dusays.com/2022/09/01/63106529ad8e1.png)
原理不难,就是一个利用after标签特性的css
不过你需要自己根据css注释微调。
```css #site-name::before{     opacity: 0;     background-color: var(--lyx-theme)!important;     border-radius: 8px;     -webkit-border-radius: 8px;     -moz-border-radius: 8px;     -ms-border-radius: 8px;     -o-border-radius: 8px;     transition: .3s;     -webkit-transition: .3s;     -moz-transition: .3s;     -ms-transition: .3s;     -o-transition: .3s;     position:absolute;     top:0!important;     right:0!important;     width:100%;     height:100%;     content: "\f015";     box-shadow: 0 0 5px var(--lyx-theme);     font-family: "Font Awesome 6 Free";     text-align: center;     color:white;     line-height:34px;/*如果有溢出或者垂直不居中的现象微调一下这个参数*/     font-size: 18px;/*根据个人喜好*/ } #site-name:hover::before{     opacity: 1;     scale:1.03; } #site-name{     position: relative;     font-size: 24px; /*一定要把字体调大点,否则效果惨不忍睹!*/ } :root{     --lyx-theme:#ed709b /*我的主题色*/ } ```
# 顶栏常驻
butterfly的顶栏滚动时会自动收起,我并不喜欢,所以通过修改css的方式实现。
(以前其实改的是js但是忘记怎么改了) ```css .nav-fixed #nav{     transform: translateY(58px)!important;     -webkit-transform: translateY(58px)!important;     -moz-transform: translateY(58px)!important;     -ms-transform: translateY(58px)!important;     -o-transform: translateY(58px)!important; } #nav{     transition: none!important;     -webkit-transition: none!important;     -moz-transition: none!important;     -ms-transition: none!important;     -o-transition: none!important; } ```
改css的方式会出现一个bug:在滚动到顶部的时候再滚下来会闪一下,后面找到js的修改方式之后告诉你们吧。
# 显示标题
有时候文章看着看着忘记标题了,其实可以通过导航栏显示。鼠标向上移动时就自动显示导航,向下移动就显示标题,效果如下:
![1662019601915.png](https://bu.dusays.com/2022/09/01/631068142b3be.png) ![1662019598832.png](https://bu.dusays.com/2022/09/01/6310681abbcbb.png) ![1662019583585.png](https://bu.dusays.com/2022/09/01/631068225dfad.png)
因为技术原因,并没有实现上下滑动的动画效果,可以找洪哥扒一扒。
{% note warning %} 由于魔改项目不同,可能会出现排版错乱的问题,请自行调整css或者在评论区中询问 {% endnote %}
修改`[blogRoot]\themes\Butterfly\layout\includes\header\nav.pug` ```diff nav#nav   span#blog_name     a#site-name(href=url_for('/')) #[=config.title]       #menus     !=partial('includes/header/menu_item', {}, {cache: true}) +    center(id="name-container") +      a(id="page-name" href="javascript:scrollToTop()") PAGE_NAME   ... ```
然后添加`nav.js`,并且按照注释修改配置 ```javascript //js有一个小问题:就是只要鼠标滚动不论哪里都会响应,即便你滚动的是子元素
//2022.9.11 已修复,需要jq,请自行引入 document.getElementById("name-container").setAttribute("style", "display:none");
var position = $(window).scrollTop();
$(window).scroll(function () {
  var scroll = $(window).scrollTop();
  if (scroll > position) {

    document.getElementById("name-container").setAttribute("style", "");     document.getElementsByClassName("menus_items")[1].setAttribute("style", "display:none!important");
  } else {

    document.getElementsByClassName("menus_items")[1].setAttribute("style", "");     document.getElementById("name-container").setAttribute("style", "display:none");
  }
  position = scroll;
}); function scrollToTop(){     document.getElementsByClassName("menus_items")[1].setAttribute("style","");     document.getElementById("name-container").setAttribute("style","display:none");     btf.scrollToDest(0, 500); } //修复没有弄右键菜单的童鞋无法回顶部的问题 document.getElementById("page-name").innerText = document.title.split(" | LYXの小破站")[0]; /*这里是去掉你的网站全局名称的设置,如果你不需要去掉,你可以写成: document.getElementById("page-name").innerText=document.title
或者把你的网站的分隔符和全局网站名称加上去*/
```
最后添加如下css,按照注释修改参数: ```css /* 2022.10.4更新: 根据我发现的没有自适应,间距不合理问题进行调整,如果用了这个的朋友们建议改一改 */ #page-name::before{     font-size:18px;     position: absolute;     width:100%;     height:100%;     border-radius: 8px;     color:white!important;     top:0;     left:0;     content:'回到顶部';     background-color: var(--lyx-theme);     transition: all .3s;     -webkit-transition: all .3s;     -moz-transition: all .3s;     -ms-transition: all .3s;     -o-transition: all .3s;     opacity: 0;     box-shadow: 0 0 3px var(--lyx-theme);     line-height: 45px; /*如果垂直位置不居中可以微调此值,也可以删了*/ } #page-name:hover:before{     opacity: 1; } @media screen and (max-width:900px){     #page-name,#menus{       display:none!important;     } }
#name-container{     transition: all .3s;     -webkit-transition: all .3s;     -moz-transition: all .3s;     -ms-transition: all .3s;     -o-transition: all .3s; } #name-container:hover{     scale:1.03 } #page-name{     position: relative;     padding:10px 30px/*如果文字间隔不合理可以微调修改,第二个是水平方向的padding,第一个是垂直的*/ } #nav{     padding: 0 20px; }
```
恭喜你获得了一个更好的导航栏!

标签:Butterfly,教程,name,transition,search,important,nav,导航,png
From: https://www.cnblogs.com/LYXOfficial/p/16758312.html

相关文章