白天黑夜转换动画 点击查看白天黑夜切换动画教程 custom文件夹若没有需要自己新建,以后新建的文件可以放置此处
新建[Blogroot]\themes\butterfly\layout\includes\custom\sun_moon.pug
,这部分其实实质上就是一个svg文件,通过js操作它的旋转显隐,淡入淡出实现动画效果。1 2 3 4 5 6 7 8 9 svg(aria-hidden='true', style='position:absolute; overflow:hidden; width:0; height:0') symbol#icon-sun(viewBox='0 0 1024 1024') path(d='M960 512l-128 128v192h-192l-128 128-128-128H192v-192l-128-128 128-128V192h192l128-128 128 128h192v192z', fill='#FFD878', p-id='8420') path(d='M736 512a224 224 0 1 0-448 0 224 224 0 1 0 448 0z', fill='#FFE4A9', p-id='8421') path(d='M512 109.248L626.752 224H800v173.248L914.752 512 800 626.752V800h-173.248L512 914.752 397.248 800H224v-173.248L109.248 512 224 397.248V224h173.248L512 109.248M512 64l-128 128H192v192l-128 128 128 128v192h192l128 128 128-128h192v-192l128-128-128-128V192h-192l-128-128z', fill='#4D5152', p-id='8422') path(d='M512 320c105.888 0 192 86.112 192 192s-86.112 192-192 192-192-86.112-192-192 86.112-192 192-192m0-32a224 224 0 1 0 0 448 224 224 0 0 0 0-448z', fill='#4D5152', p-id='8423') symbol#icon-moon(viewBox='0 0 1024 1024') path(d='M611.370667 167.082667a445.013333 445.013333 0 0 1-38.4 161.834666 477.824 477.824 0 0 1-244.736 244.394667 445.141333 445.141333 0 0 1-161.109334 38.058667 85.077333 85.077333 0 0 0-65.066666 135.722666A462.08 462.08 0 1 0 747.093333 102.058667a85.077333 85.077333 0 0 0-135.722666 65.024z', fill='#FFB531', p-id='11345') path(d='M329.728 274.133333l35.157333-35.157333a21.333333 21.333333 0 1 0-30.165333-30.165333l-35.157333 35.157333-35.114667-35.157333a21.333333 21.333333 0 0 0-30.165333 30.165333l35.114666 35.157333-35.114666 35.157334a21.333333 21.333333 0 1 0 30.165333 30.165333l35.114667-35.157333 35.157333 35.157333a21.333333 21.333333 0 1 0 30.165333-30.165333z', fill='#030835', p-id='11346')
新建[Blogroot]\themes\butterfly\source\css\_layout\sun_moon.styl
,1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 .Cuteen_DarkSky ,.Cuteen_DarkSky :before content '' position fixed left 0 right 0 top 0 bottom 0 z-index 88888888 .Cuteen_DarkSky background linear-gradient (#feb8b0 , #fef9db ) &:before transition 2s ease all opacity 0 background linear-gradient (#4c3f6d , #6c62bb , #93b1ed ) .DarkMode .Cuteen_DarkSky &:before opacity 1 .Cuteen_DarkPlanet z-index 99999999 position fixed left -50% top -50% width 200% height 200% -webkit-animation CuteenPlanetMove 2s cubic-bezier (0.7 , 0 , 0 , 1 ) animation CuteenPlanetMove 2s cubic-bezier (0.7 , 0 , 0 , 1 ) transform-origin center bottom @-webkit-keyframes CuteenPlanetMove { 0% { transform : rotate (0 ); } to { transform : rotate (360deg ); } } @keyframes CuteenPlanetMove { 0% { transform : rotate (0 ); } to { transform : rotate (360deg ); } } .Cuteen_DarkPlanet &:after position absolute left 35% top 40% width 9.375rem height 9.375rem border-radius 50% content '' background linear-gradient (#fefefe , #fffbe8 ) .search span display none .menus_item a text-decoration none!important .icon-V padding 5px
新建[Blogroot]\themes\butterfly\source\js\custom\sun_moon.js
,去除了冗余代码,去jquery。感觉源代码做过混淆加密,好多三元运算一层套一层,看昏了都。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 function switchNightMode ( ) { document .querySelector ('body' ).insertAdjacentHTML ('beforeend' , '<div class="Cuteen_DarkSky"><div class="Cuteen_DarkPlanet"></div></div>' ), setTimeout (function ( ) { document .querySelector ('body' ).classList .contains ('DarkMode' ) ? (document .querySelector ('body' ).classList .remove ('DarkMode' ), localStorage .setItem ('isDark' , '0' ), document .getElementById ('modeicon' ).setAttribute ('xlink:href' , '#icon-moon' )) : (document .querySelector ('body' ).classList .add ('DarkMode' ), localStorage .setItem ('isDark' , '1' ), document .getElementById ('modeicon' ).setAttribute ('xlink:href' , '#icon-sun' )), setTimeout (function ( ) { document .getElementsByClassName ('Cuteen_DarkSky' )[0 ].style .transition = 'opacity 3s' ; document .getElementsByClassName ('Cuteen_DarkSky' )[0 ].style .opacity = '0' ; setTimeout (function ( ) { document .getElementsByClassName ('Cuteen_DarkSky' )[0 ].remove (); }, 1e3 ); }, 2e3 ) }) const nowMode = document .documentElement .getAttribute ('data-theme' ) === 'dark' ? 'dark' : 'light' if (nowMode === 'light' ) { activateDarkMode () saveToLocal.set ('theme' , 'dark' , 2 ) GLOBAL_CONFIG .Snackbar !== undefined && btf.snackbarShow (GLOBAL_CONFIG .Snackbar .day_to_night ) document .getElementById ('modeicon' ).setAttribute ('xlink:href' , '#icon-sun' ) } else { activateLightMode () saveToLocal.set ('theme' , 'light' , 2 ) document .querySelector ('body' ).classList .add ('DarkMode' ), document .getElementById ('modeicon' ).setAttribute ('xlink:href' , '#icon-moon' ) } typeof utterancesTheme === 'function' && utterancesTheme () typeof FB === 'object' && window .loadFBComment () window .DISQUS && document .getElementById ('disqus_thread' ).children .length && setTimeout (() => window .disqusReset (), 200 ) }
修改[Blogroot]\themes\butterfly\layout\includes\head.pug
,以后新文件可以自己加在这里:1 2 3 4 5 6 7 8 9 10 //- global config !=partial('includes/head/config', {}, {cache: true}) include ./head/config_site.pug include ./head/noscript.pug + include ./custom/sun_moon.pug !=fragment_cache('injectHeadJs', function(){return inject_head_js()}) !=fragment_cache('injectHead', function(){return injectHtml(theme.inject.head)})
修改[Blogroot]\themes\butterfly\layout\includes\rightside.pug
,把原本的昼夜切换按钮替换掉1 2 3 4 5 6 7 8 9 10 when 'translate' if translate.enable button#translateLink(type="button" title=_p('rightside.translate_title'))= translate.default when 'darkmode' if darkmode.enable && darkmode.button - button#darkmode(type="button" title=_p('rightside.night_mode_title')) - i.fas.fa-adjust + a.icon-V.hidden(onclick='switchNightMode()', title=_p('rightside.night_mode_title')) + svg(width='25', height='25', viewBox='0 0 1024 1024') + use#modeicon(xlink:href='#icon-moon')
修改[Blogroot]\_config.butterfly.yml
,引入一下js1 2 3 4 inject: head: bottom: - <script src="/js/custom/sun_moon.js" async></script>
具体效果就自己切换下夜间模式看看吧。 首页文章卡片修改,感觉不好看,自己未采用 点击首页文章卡片修改教程 修改[Blogroot]\themes\butterfly\layout\includes\mixins\post-ui.pug
,将整个文件的内容替换为以下代码:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 mixin postUI(posts) each article , index in page.posts.data .recent-post-item - let link = article.link || article.path let title = article.title || _p('no_title') const position = theme.cover.position let leftOrRight = position === 'both' ? index%2 == 0 ? 'left' : 'right' : position === 'left' ? 'left' : 'right' let post_cover = article.cover let no_cover = article.cover === false || !theme.cover.index_enable ? 'no-cover' : '' - .recent-post-content(class=leftOrRight) a.article-content(href=url_for(link) title=subtitle) //- Display the article introduction on homepage case theme.index_post_content.method when false - break when 1 .article-content-text!= article.description when 2 if article.description .article-content-text!= article.description else - const content = strip_html(article.content) - let expert = content.substring(0, theme.index_post_content.length) - content.length > theme.index_post_content.length ? expert += ' ...' : '' .article-content-text!= expert default - const content = strip_html(article.content) - let expert = content.substring(0, theme.index_post_content.length) - content.length > theme.index_post_content.length ? expert += ' ...' : '' .article-content-text!= expert .recent-post-info a.article-title(href=url_for(link) title=subtitle) .article-title-link= title .recent-post-meta .article-meta-wrap if (is_home() && (article.top || article.sticky > 0)) span.article-meta i.fas.fa-thumbtack.sticky span.sticky= _p('sticky') span.article-meta-separator | if (theme.post_meta.page.date_type) span.post-meta-date if (theme.post_meta.page.date_type === 'both') i.far.fa-calendar-alt span.article-meta-label=_p('post.created') time.post-meta-date-created(datetime=date_xml(article.date) title=_p('post.created') + ' ' + full_date(article.date))=date(article.date, config.date_format) span.article-meta-separator | i.fas.fa-history span.article-meta-label=_p('post.updated') time.post-meta-date-updated(datetime=date_xml(article.updated) title=_p('post.updated') + ' ' + full_date(article.updated))=date(article.updated, config.date_format) else - let data_type_updated = theme.post_meta.page.date_type === 'updated' - let date_type = data_type_updated ? 'updated' : 'date' - let date_icon = data_type_updated ? 'fas fa-history' :'far fa-calendar-alt' - let date_title = data_type_updated ? _p('post.updated') : _p('post.created') i(class=date_icon) span.article-meta-label=date_title time(datetime=date_xml(article[date_type]) title=date_title + ' ' + full_date(article[date_type]))=date(article[date_type], config.date_format) if (theme.post_meta.page.categories && article.categories.data.length > 0) span.article-meta span.article-meta-separator | i.fas.fa-inbox each item, index in article.categories.data a(href=url_for(item.path)).article-meta__categories #[=item.name] if (index < article.categories.data.length - 1) i.fas.fa-angle-right.article-meta-link if (theme.post_meta.page.tags && article.tags.data.length > 0) span.article-meta.tags span.article-meta-separator | i.fas.fa-tag each item, index in article.tags.data a(href=url_for(item.path)).article-meta__tags #[=item.name] if (index < article.tags.data.length - 1) span.article-meta-link #[='•'] mixin countBlockInIndex - needLoadCountJs = true span.article-meta span.article-meta-separator | i.fas.fa-comments if block block span.article-meta-label= ' ' + _p('card_post_count') if theme.comments.card_post_count case theme.comments.use[0] when 'Disqus' when 'Disqusjs' +countBlockInIndex a(href=full_url_for(link) + '#disqus_thread') when 'Valine' +countBlockInIndex a(href=url_for(link) + '#post-comment' itemprop="discussionUrl") span.valine-comment-count(data-xid=url_for(link) itemprop="commentCount") when 'Waline' +countBlockInIndex a(href=url_for(link) + '#post-comment') span.waline-comment-count(id=url_for(link)) when 'Twikoo' +countBlockInIndex a.twikoo-count(href=url_for(link) + '#post-comment') when 'Facebook Comments' +countBlockInIndex a(href=url_for(link) + '#post-comment') span.fb-comments-count(data-href=urlNoIndex(article.permalink)) .recent-post-cover img.article-cover(src=url_for(post_cover) onerror=`this.onerror=null;this.src='`+ url_for(theme.error_img.post_page) + `'` alt=subtitle) if theme.ad && theme.ad.index if (index + 1) % 3 == 0 .recent-post-item.ads-wrap!=theme.ad.index
修改[Blogroot]\themes\butterfly\source\css\_page\homepage.styl
,将整个文件的内容替换为以下代码:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 :root --recent-post-bgcolor : rgba (255 , 255 , 255 , 0.9 ) --article-content-bgcolor : #49b1f5 --recent-post-triangle : #fff --recent-post-cover-shadow : #ffffff [data-theme="dark" ] --recent-post-bgcolor : rgba (35 ,35 ,35 ,0.5 ) --article-content-bgcolor : #99999a --recent-post-triangle : #37e2dd --recent-post-cover-shadow : #232323 .recent-posts padding 0 15px 0 15px .recent-post-item margin-bottom 15px width 100% background var (--recent-post-bgcolor) overflow hidden border-radius 15px .recent-post-info .article-title-link display -webkit-box -webkit-box-orient vertical -webkit-line-clamp 2 overflow hidden .article-content background var (--article-content-bgcolor) position relative display flex align-items : center; justify-content : center; .article-content-text transition : all .8s cubic-bezier (0.59 , 0.01 , 0.48 , 1.17 ) display -webkit-box -webkit-box-orient vertical -webkit-line-clamp 4 text-overflow : ellipsis overflow hidden color #fff text-shadow : 1px 2px 3px #000 ; .recent-post-cover position relative background transparent img &.article-cover height 100% width 100% object-fit cover .recent-post-info align-items center flex-direction column position relative background var (--recent-post-bgcolor) display flex color #000000 .article-title height 50% font-size 24px display : flex align-items : center justify-content : flex-end flex-direction : column .article-title-link color : var (--text-highlight-color) transition : all .2s ease-in-out &:hover color : $text -hover .recent-post-meta height 50% display : flex align-items : center justify-content : flex-start flex-direction : column .article-meta-wrap font-size 12px color #969797 display : -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3 ; overflow : hidden; a color : var (--text-highlight-color) transition : all .2s ease-in-out color #969797 &:hover color : $text -hover &.ads-wrap display : block !important height : auto !important @media screen and (min-width :600px ) .recent-post-item &:hover .recent-post-content &.both, &.right transform translateX(21% ) transition: all .8s cubic-bezier(0.59 , 0.01 , 0.48 , 1.17 ) &::before transition: all .8s cubic-bezier(0.59 , 0.01 , 0.48 , 1.17 ) left: 50px ; .article-content-text margin 20px 20px 20px 60px &.left transform translateX (-21% ) transition : all .8s cubic-bezier (0.59 , 0.01 , 0.48 , 1.17 ) &::before transition : all .8s cubic-bezier (0.59 , 0.01 , 0.48 , 1.17 ) right : 50px ; .article-content-text margin 20px 60px 20px 20px .recent-post-content background var (--recent-post-bgcolor) position relative height 200px width 130% z-index 0 display flex overflow hidden border 0px solid &::before content : "" ; width : 0 ; height : 0 ; background : transparent; position : absolute; z-index : 3 ; top : calc (50% - 10px ); border-top : 10px solid transparent; border-bottom : 10px solid transparent; transition : all .5s cubic-bezier (0.59 , 0.01 , 0.48 , 1.17 ) &.both , &.right flex-direction : row; left calc (-23.07% - 41px ) transition : all .5s cubic-bezier (0.59 , 0.01 , 0.48 , 1.17 ) &::before left : calc (23.07% + 40px ); border-left : 6px solid var (--recent-post-triangle); .recent-post-info &::before background linear-gradient (to right, var (--recent-post-cover-shadow), transparent) left calc (100% - 1px ) .article-content &::before right -59px border-left 60px solid var (--article-content-bgcolor) .article-content-text margin 20px 20px 20px 0px .article-title padding 0px 30px 0px 70px .recent-post-meta padding 0px 20px 0px 70px &.left flex-direction : row-reverse; right 9px transition : all .5s cubic-bezier (0.59 , 0.01 , 0.48 , 1.17 ) &::before right : calc (23.07% + 40px ); border-right : 6px solid var (--recent-post-triangle); .recent-post-info &::before background linear-gradient (to left, var (--recent-post-cover-shadow), transparent) right calc (100% - 1px ) .article-content &::before left -59px border-right 60px solid var (--article-content-bgcolor) .article-content-text margin 20px 0px 20px 20px .article-title padding 0px 70px 0px 30px .recent-post-meta padding 0px 70px 0px 20px .article-content width 30% height 200px left 0 align-items center &::before content "" width 0 height 0 background transparent position absolute z-index 2 top 0 border-top 100px solid transparent border-bottom 100px solid transparent .recent-post-info width 60% height 200px &::before content "" width 200px height 200px position absolute z-index 1 top 0 .recent-post-meta & > .article-meta-wrap margin : 6px 0 color : $theme -meta-color font-size : 90% & > .post-meta-date cursor : default .sticky color : $sticky -color i margin : 0 4px 0 0 .article-meta-label if hexo-config ('post_meta.page.label' ) padding-right : 4px else display : none .article-meta-separator margin : 0 6px .article-meta-link margin : 0 4px if hexo-config ('post_meta.page.date_format' ) == 'relative' time display : none a color : $theme -meta-color &:hover color : $text -hover text-decoration : underline .recent-post-cover width 40% height 200px @media screen and (max-width :600px ) .recent-post-item height 400px .recent-post-content display flex flex-direction: column height 400px .article-content pointer-events none order: 1 ; height : 200px ; position : absolute; width : calc (100% - 40px ); z-index : 3 ; background : rgba (22 ,22 ,22 ,0.5 ); border-top-left-radius : 15px ; border-top-right-radius : 15px ; display : none opacity : 0 .article-content-text height 120px color : white; width : 80% .recent-post-cover order : 2 height 200px transition : all .5s .recent-post-info order : 3 height 200px &::before content : '' ; width : 0 ; height : 0 ; position : absolute; z-index : 3 ; bottom : calc (100% - 4px ); left : 0 ; border-bottom : 50px solid var (--recent-post-bgcolor); border-right : 300px solid transparent; &::after content : '' ; width : 0 ; height : 0 ; position : absolute; z-index : 3 ; bottom : calc (100% + 150px ); right : 0 ; border-top : 50px solid var (--recent-post-bgcolor); border-left : 300px solid transparent; .article-title padding : 0px 35px 0px 35px .recent-post-meta padding : 0px 30px 0px 30px &:hover .article-content display : flex !important ; animation : shutter-effect-content 0.5s 2 forwards linear .recent-post-info &::before animation : shutter-effect-left 0.5s 1 ease-in-out &::after animation : shutter-effect-right 0.5s 1 ease-in-out .recent-post-cover filter blur (2px ) @keyframes shutter-effect-right { 0% { bottom : calc (100% + 150px ); border-top : 50px solid var (--recent-post-bgcolor); border-left : 300px solid transparent; } 50% { bottom : 100% ; border-top : 200px solid var (--recent-post-bgcolor); border-left : 600px solid transparent; } 100% { bottom : calc (100% + 150px ); border-top : 50px solid var (--recent-post-bgcolor); border-left : 300px solid transparent; } } @keyframes shutter-effect-left { 0% { bottom : calc (100% - 4px ); border-bottom : 50px solid var (--recent-post-bgcolor); border-right : 300px solid transparent; } 50% { bottom : calc (100% - 4px ); border-bottom : 200px solid var (--recent-post-bgcolor); border-right : 600px solid transparent; } 100% { bottom : calc (100% - 4px ); border-bottom : 50px solid var (--recent-post-bgcolor); border-right : 300px solid transparent; } } @keyframes shutter-effect-content { from { opacity : 0 } to { opacity : 1 } }
注意事项 样式配色因为采用了大量伪类,所以如果底色采用了半透明配色,可能因为卡片叠加加深导致接合边界非常明显的暴露出来。所以在配色上,我是不建议加半透明的。 因为部分伪类的偏移量是靠计算得出的,为了尽量满足自适应效果,部分位置保留了5%左右的容差。所以在一些极端屏宽比下,还是会出现一些样式不完美问题。 顶栏菜单——子菜单居中 修改子菜单居中 新建[Blogroot]\themes\butterfly\source\css\custom\menu_center.css
,添加样式。1 2 3 4 5 6 7 8 9 10 11 12 13 #nav .menus_items .menus_item .menus_item_child li { display : inline-block; } ul .menus_item_child { overflow : hidden; border-radius : 5px ; } #nav .menus_items .menus_item .menus_item_child { margin-top : 0px !important ; }
打开[Blogroot]\themes\butterfly\layout\includes\header\menu_item.pug
,修改内容。参数记得自己计算。1 2 - ul.menus_item_child + ul.menus_item_child(style=`left:`+ (-48 * Object.keys(value).length + 65) + `px;`)
引入css文件1 2 3 inject: head: + - <link rel="stylesheet" href="/css/custom/menu_center.css">
站点动态title 点击查看站点动态title教程 站点动态title是通过js监测是否聚焦于当前页面,从而替换标签显示内容。
在[Blogroot]\themes\butterfly\source\custom\js\
目录下新建diy_title.js
,1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 var OriginTitile = document .title ;var titleTime;document .addEventListener ('visibilitychange' , function ( ) { if (document .hidden ) { document .title = 'w(゚Д゚)w 不要走!再看看嘛!' ; clearTimeout (titleTime); } else { document .title = '♪(^∇^*)欢迎回来!' + OriginTitile ; titleTime = setTimeout (function ( ) { document .title = OriginTitile ; }, 2000 ); } });
在[Blogroot]\_config.butterfly.yml
的inject
配置项添加引入,此处因为这是个独立的js
,而且体量极小,所以可以添加async
异步加载标签:1 2 3 4 5 inject: head: # - <link rel="stylesheet" href="/xxx.css"> bottom: + - <script async src="/js/diytitle.js"></script>
信笺样式留言板 信笺样式留言板 在[Blogroot]
运行指令1 npm install hexo-butterfly-envelope --save
在站点配置文件或者主题配置文件添加配置项(对,两者任一均可。但不要都写)1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 envelope_comment: enable: true custom_pic: cover: https://npm.elemecdn.com/hexo-butterfly-envelope/lib/violet.jpg line: https://npm.elemecdn.com/hexo-butterfly-envelope/lib/line.png beforeimg: https://npm.elemecdn.com/hexo-butterfly-envelope/lib/before.png afterimg: https://npm.elemecdn.com/hexo-butterfly-envelope/lib/after.png message: - 有什么想问的? - 有什么想说的? - 有什么想吐槽的? - 哪怕是有什么想吃的,都可以告诉我哦~ bottom: 自动书记人偶竭诚为您服务! height: path: front_matter: title: 留言板 comments: true
新建[Blogroot]\hemes\butterfly\layout\includes\page\envelope.pug
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #article-container if top_img === false h1.page-title= page.title #maincontent #form-wrap img#beforeimg(src='https://cdn.jsdelivr.net/gh/Akilarlxh/Valine-Admin@v1.0/source/img/before.png') #envelope form .formmain img.headerimg(src=url_for(theme.envelope_comment.cover)) .comments-main h3.title3=`来自` + config.author + `的留言:` .comments each i in theme.envelope_comment.message div=`${i}` .bottomcontent img.bottomimg(src='https://ae01.alicdn.com/kf/U0968ee80fd5c4f05a02bdda9709b041eE.png') p.bottomhr=`${theme.envelope_comment.bottom}` img#afterimg(src='https://cdn.jsdelivr.net/gh/Akilarlxh/Valine-Admin@v1.0/source/img/after.png') != page.content
新建[Blogroot]\themes\butterfly\source\css\_layout\commentsbar.styl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 if hexo-config ('envelope_comment.enable' ) $hoverHeight = hexo-config ('envelope_comment.height' ) ? convert (hexo-config ('envelope_comment.height' )) : 1050px @media screen and (max-width : 600px ) #beforeimg, #afterimg display none !important @media screen and (min-width : 600px ) #article-container img margin 0 auto 0rem #form-wrap overflow hidden height 447px position relative top 0px transition all 1s ease-in-out .3s z-index 0 &:hover height $hover Height top -200px #maincontent width 530px margin 20px auto 0 #beforeimg position absolute bottom 126px left 0px background-repeat no-repeat width 530px height 317px z-index -100 pointer-events none #afterimg position absolute bottom -2px left 0 background-repeat no-repeat width 530px height 259px z-index 100 pointer-events none #envelope position relative overflow visible width 500px margin 0px auto transition all 1s ease-in-out .3s padding-top 200px .headerimg width 100% overflow hidden pointer-events none .formmain background white width 95% max-width 800px margin auto auto border-radius 5px border 1px solid overflow hidden -webkit-box-shadow 0px 0px 20px 0px rgba(0 , 0 , 0 , 0.12 ) box-shadow 0px 0px 20px 0px rgba(0 , 0 , 0 , 0.18 ) .comments-main padding 5px 20px .title3 text-decoration none color $theme-color text-align center .comments text-align center border-bottom #ddd 1px solid border-left #ddd 1px solid padding-bottom 20px background-color #eee margin 15px 0px padding-left 20px padding-right 20px border-top #ddd 1px solid border-right #ddd 1px solid padding-top 20px .bottomcontent text-align center margin-top 40px .bottomimg width 100% margin 5px auto 5px auto display block pointer-events none .bottomhr font-size 12px text-align center color #999 [data-theme='dark'] .formmain background rgb(50 , 50 , 50 ) .comments background rgba(90 , 90 , 90 , 0.8 )
修改[Blogroot]\themes\butterfly\layout\page.pug
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 block content #page case page.type when 'tags' include includes/page/tags.pug when 'link' include includes/page/flink.pug when 'categories' include includes/page/categories.pug when 'artitalk' include includes/page/artitalk.pug + when 'envelope' + include includes/page/envelope.pug default include includes/page/default-page.pug
修改[Blogroot]\_config.butterfly.yml,新增配置项
1 2 3 4 5 6 7 8 9 10 envelope_comment: enable: true cover: https://ae01.alicdn.com/kf/U5bb04af32be544c4b41206d9a42fcacfd.jpg message: - 有什么想问的? - 有什么想说的? - 有什么想吐槽的? - 哪怕是有什么想吃的,都可以告诉我哦~ bottom: 自动书记人偶竭诚为您服务! height:
新建留言板页面(已有的不用重复操作。) 在[Blogroot]
打开终端,输入 打开[Blogroot]\source\comments\index.md
将其内容修改为:1 2 3 4 5 --- title: 留言板 top_img: type: "envelope" ---
旧版方案详见:Akilarの糖果屋
鼠标指针样式替换 点击查看鼠标指针样式替换教程 鼠标指针的样式替换原理其实就是重设对应版块的cursor
属性,在这之前我们需要准备好相应的.cur
文件,即静态鼠标指针图标。(目前还不支持.ani
后缀的动态鼠标指针图标)。可以从一些美化网站找到鼠标指针图标。例如店长就是在一个Windows美化网站上找的。
如果下载下来的是.ani
格式,然后又实在喜欢这个指针图标,那么可以考虑动态转静态,使用Axialis cursorworkshop
这款软件,导入.ani
文件后抽取喜欢的那一帧,导出为静态图标。
你甚至还可以直接在阿里图标库里找到心仪的图标以后,在convertio
上将png
转为cur
文件。不过根据店长试用效果来看,因为png
文件转的cur
文件较大,很多时候图标都加载不出来。最好事先降低一下图标的分辨率到合适的程度。
然后就是正文了,依然是在custom.css
中进行修改。用F12 控制台左上方的箭头按钮获取对应块元素的id
或者css
。然后修改对应的cursor
属性。cur
图标的路径引用方式和背景图片的引用方式是一样的,都支持图床外链和本地相对链接。以下是一些常用位置的更改示例。读者还可以自己定义更多块元素的具体图标。
新建[Blogroot]\themes\butterfly\source\css\custom\mouse_cursor.css
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 body ,html { cursor : url ('https://npm.elemecdn.com/akilar-candyassets/cur/arrow.cur' ),auto !important ; } img { cursor : url ('https://npm.elemecdn.com/akilar-candyassets/cur/btn.cur' ),auto !important ; } a :hover { cursor : url ('https://npm.elemecdn.com/akilar-candyassets/cur/link.cur' ),auto; } input :hover { cursor : url ('https://npm.elemecdn.com/akilar-candyassets/cur/input.cur' ),auto; } button :hover { cursor : url ('https://npm.elemecdn.com/akilar-candyassets/cur/btn.cur' ),auto; } i :hover { cursor : url ('https://npm.elemecdn.com/akilar-candyassets/cur/link.cur' ),auto; } #footer-wrap a :hover { cursor : url ('https://npm.elemecdn.com/akilar-candyassets/cur/hf.cur' ),auto; } #pagination .page-number :hover { cursor : url ('https://npm.elemecdn.com/akilar-candyassets/cur/i.cur' ),auto; } #nav .site-page :hover { cursor : url ('https://npm.elemecdn.com/akilar-candyassets/cur/hf.cur' ),auto; }
在[Blogroot]_config.butterfly.yml
引入文件1 2 3 4 inject: head: # 鼠标样式 + - <link rel="stylesheet" href="/css/custom/mouse_cursor.css">
页脚添加徽标 点击查看页脚添加徽标教程 修改[Blogroot]\themes\butterfly\layout\includes\footer.pug
,添加页脚标签循环节:1 2 3 4 5 6 7 8 if theme.footer.custom_text .footer_custom_text!=`${theme.footer.custom_text}` //v3.4.0以下版本可能还有ICP的配置项。此处只要保证p和上方的if缩进平级就好。 + p#ghbdages + if theme.ghbdage.enable + each item in theme.ghbdage.bdageitem + a.github-badge(target='_blank' href=url_for(item.link) style='margin-inline:5px') + img(src=url_for(item.shields) title=item.message)
在[Blogroot]\_config.butterfly.yml
中添加相关配置项:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ghbdage: enable: true bdageitem: - link: https://hexo.io/ shields: https://img.shields.io/badge/Frame-Hexo-blue?style=flat&logo=hexo message: 博客框架为Hexo_v5.3.0 - link: https://butterfly.js.org/ shields: https://img.shields.io/badge/Theme-Butterfly-6513df?style=flat&logo=bitdefender message: 主题版本Butterfly_v3.4.2 - link: https://www.jsdelivr.com/ shields: https://img.shields.io/badge/CDN-jsDelivr-orange?style=flat&logo=jsDelivr message: 本站使用JsDelivr为静态资源提供CDN加速 - link: https://vercel.com/ shields: https://img.shields.io/badge/Hosted-Vercel-brightgreen?style=flat&logo=Vercel message: 本站采用双线部署,默认线路托管于Vercel - link: https://vercel.com/ shields: https://img.shields.io/badge/Hosted-Coding-0cedbe?style=flat&logo=Codio message: 本站采用双线部署,联通线路托管于Coding - link: https://github.com/ shields: https://img.shields.io/badge/Source-Github-d021d6?style=flat&logo=GitHub message: 本站项目由Github托管 - link: http://creativecommons.org/licenses/by-nc-sa/4.0/ shields: https://img.shields.io/badge/Copyright-BY--NC--SA%204.0-d42328?style=flat&logo=Claris message: 本站采用知识共享署名-非商业性使用-相同方式共享4.0国际许可协议进行许可
添加留言弹幕功能