博客园主题

备份自定义主题
使用第三方主题 + 自定制
第三方主题官网: Silence

效果

文章页面

文章页面

代码高亮

代码高亮

夜间模式

夜间模式

博客首页

博客首页

目录样式

目录样式

配置

基本配置

基本配置

css配置

@import url(https://cdn.jsdelivr.net/npm/font-awesome@4.7.0/css/font-awesome.min.css);


@media only screen and (max- 1365px) {
    .github-corner {
        display: none
    }
}

@media only screen and (max- 1259px) {
    #home {
         100% !important
    }
}

@media only screen and (max- 990px) {
    #bannerbar {
        display: none
    }

    #header, .esa-mobile-menu {
        display: block !important
    }

    #header {
         auto;
        position: fixed !important;
        background: var(--blog-bg-color)
    }

    #header #blogTitle {
        margin-left: 15px
    }

    #header #navigator {
        display: none;
        left: 0;
        top: 61px
    }

    #header #navigator #navList > li {
        float: none;
        position: relative;
        background: var(--blog-bg-color);
        height: 34px;
        line-height: 34px;
         120px;
        border-bottom: 1px solid var(--border-color);
        border-right: 1px solid var(--border-color)
    }

    #header #navigator #navList > li > a {
        float: none;
         inherit;
        padding: 0 10px
    }

    #header #navigator #navList > li > a .arrow {
        position: absolute;
        top: .8rem;
        right: .8rem;
        transform: rotate(270deg) scaleX(-1)
    }

    #header #navigator #navList > li .esa-sub-navs {
        position: fixed;
         130px;
        top: 0;
        left: 121px;
        top: 61px
    }

    #header #navigator #navList > li .esa-sub-navs .caret {
        display: none
    }

    #header #navigator #navList > li .esa-sub-navs ul {
        box-shadow: none;
        padding: 0;
        border-radius: 0
    }

    #header #navigator #navList > li .esa-sub-navs ul li {
        height: 34px;
        line-height: 34px;
        border: 1px solid var(--border-color);
        border-top: none
    }

    #header #navigator #navList > li .esa-sub-navs ul li a {
        text-align: left;
        padding: 0 10px
    }

    #header #navigator #navList > li i {
        display: none
    }

    #sideBar {
        display: none !important
    }

    #home {
        min- auto !important
    }

    #main {
         100% !important;
        padding: 70px 0 0 !important
    }

    #main .forFlow {
        margin-left: 0 !important;
        padding-left: 15px;
        padding-right: 15px
    }

    #main .forFlow .postBody {
        padding: 0 !important
    }

    #main .forFlow .postDesc {
        display: none
    }

    #main .forFlow #comment_form {
        padding: 0 !important
    }

    #main .forFlow .commentform {
        margin-left: 0 !important
    }

    #main .forFlow .day .postDesc, #main .forFlow .entrylist .entrylistItemPostDesc {
        display: none
    }

    #myposts .postDesc2 {
        text-align: right !important
    }

    #myposts .postDesc2 span {
        display: none
    }

    .esa-toolbar .skin-popup {
        bottom: calc(50% - 67px) !important;
        border-radius: 15px !important
    }
}

:root[mode=light] {
    --blog-bg-color: #fff;
    --text-color: #596172;
    --border-color: #eef2f8;
    --catalog-bg-color: #fff;
    --panel-bg-color: #f8f8f8;
    --code-bg-color: #f1f1f1
}

:root[mode=dark] {

    --blog-bg-color: #202020;
    --text-color: #d8d8d8;
    --border-color: #2f2f2f;
    --catalog-bg-color: #252525;
    --panel-bg-color: #252525;
    --code-bg-color: #323836;
}

:root[theme=a] {
    --theme-color: #2d8cf0
}

:root[theme=b] {
    --theme-color: #fa7298
}

:root[theme=c] {
    --theme-color: #42b983
}

:root[theme=d] {
    --theme-color: #607d8b
}

:root[theme=e] {
    --theme-color: #5e72e4
}

:root[theme=f] {
    --theme-color: #ff9700
}

:root[theme=g] {
    --theme-color: #ff5722
}

:root[theme=h] {
    --theme-color: #009688
}

:root[theme=i] {
    --theme-color: #673bb7
}

:root[theme=j] {
    --theme-color: #906f61
}

* {
    margin: 0;
    padding: 0
}

body, html {
    height: 100%
}

body {
    background: var(--blog-bg-color);
    color: var(--text-color);
    font-family: Lato, PingFang SC, Microsoft YaHei, sans-serif;
    font-size: 14px;
    font-weight: 300
}

table {
    border-collapse: collapse;
    border-spacing: 0
}

td {
    padding: 5px
}

fieldset, img {
    border: 0
}

ul {
    word-break: break-all
}

li {
    list-style: none
}

h1, h2, h3, h4, h5, h6 {
    font-size: 100%;
    font-weight: 400
}

a {
    color: var(--text-color);
    text-decoration: none;
    transition: all .3s ease
}

a:hover {
    color: var(--theme-color)
}

::-moz-selection {
    background: var(--theme-color);
    color: #fff
}

::selection {
    background: var(--theme-color);
    color: #fff
}

#ad_c1, #ad_c2, #ad_t2, #author_profile, #comment_nav, #comment_pager_top, #green_channel, #lnkBlogLogo, #under_post_kb, #under_post_news, .blogStats, .c_ad_block, .dayTitle, .under-comment-nav {
    display: none
}

.clear {
    clear: both
}

#home {
     100%;
    height: 100%;
    transition: all 378ms
}

#header {
     960px;
    position: relative;
    top: 0;
    right: 0;
    left: 0;
    margin: 0 auto;
    border-top: 0;
    border-bottom: 1px solid var(--border-color);
    padding-bottom: 0;
    display: block;
    height: 60px;
    z-index: 999
}

#blogTitle h1 {
    font-size: 25px;
    font-weight: 600;
    font-family: Georgia;
    float: left;
    margin-top: 15px
}

#blogTitle h2 {
    display: none
}

#navigator {
    height: inherit;
    position: absolute;
    right: 0;
    top: 0
}

#navList {
    height: inherit;
    float: left
}

#navList > li {
    position: relative;
    float: left
}

#navList > li:hover i {
     100%;
    left: 0
}

#navList > li > a {
    float: left;
    font-size: 17px;
    border-right: 0;
    font-weight: 300;
    text-align: center;
     auto;
    padding: 19px 16px
}

#navList > li > a:after {
    content: "";
    position: absolute;
     100%;
    height: 4px;
    bottom: 0;
    left: 0;
    background-color: var(--theme-color);
    visibility: hidden;
    transform: scaleX(0);
    transition: .4s ease-in-out
}

#navList > li > a:hover:after {
    visibility: visible;
    transform: scaleX(1)
}

#navList .open {
    transform: rotate(180deg) scaleX(-1);
    transition-duration: .3s
}

#navList .esa-sub-navs {
    position: absolute;
     130px;
    top: 60px;
    left: calc(50% - 65px);
    display: none
}

#navList .esa-sub-navs .caret {
    border-top: 0 solid transparent;
    border-left: 8px solid transparent;
    border-right: 8px solid transparent;
    border-bottom: 8px solid var(--blog-bg-color);
     0;
    position: relative;
    left: calc(50% - 8px)
}

#navList .esa-sub-navs ul {
    background-color: var(--blog-bg-color);
    border-radius: 4px;
    box-shadow: 0 1px 15px rgba(27, 31, 35, .15);
    padding: 10px;
    text-align: center
}

#navList .esa-sub-navs ul li {
    float: none
}

#navList .esa-sub-navs ul li a {
    font-size: 15px;
    border-right: 0;
    color: var(--text-color);
    display: block;
     100%;
    padding: 10px 0;
    height: inherit;
    border-bottom: 1px solid transparent
}

#navList .esa-sub-navs ul li a:hover {
    color: var(--theme-color)
}

#main {
     960px;
    margin: 0 auto;
    min-height: calc(100% - 75px);
    padding: 15px 0;
    transition: all .3s ease
}

#mainContent {
    float: right;
    margin-left: -25em;
     100%
}

#mainContent .forFlow {
    margin: 0 auto 0 0;
    max- 960px
}

#sideBar {
     230px;
    border-right: 1px solid var(--border-color);
    font-weight: 300;
    display: none;
    min-height: 750px;
    padding: 0 15px 0 0
}

#sideBar #profile_block {
    margin: 0;
    font-size: 0;
    display: flex;
    flex-wrap: wrap;
    text-align: left;
    line-height: 1.6
}

#sideBar #profile_block a {
    box-sizing: border-box
}

#sideBar #profile_block a:first-child {
    font-size: 18px;
    font-weight: 700;
     100%;
    display: block;
    text-align: center;
    margin-bottom: 14px
}

#sideBar #profile_block a:nth-child(3):after {
    content: "\56ed\9f84"
}

#sideBar #profile_block a:nth-child(5):after {
    content: "\7c89\4e1d"
}

#sideBar #profile_block a:nth-child(7):after {
    content: "\5173\6ce8"
}

#sideBar #profile_block a:nth-child(3), #sideBar #profile_block a:nth-child(5), #sideBar #profile_block a:nth-child(7) {
    font-size: 14px;
     33.3333333%;
    display: block;
    padding: 0 4px;
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
    text-align: center
}

#sideBar #profile_block a:nth-child(3):after, #sideBar #profile_block a:nth-child(5):after, #sideBar #profile_block a:nth-child(7):after {
    color: #97979f;
    font-size: 14px;
    display: block;
    text-overflow: ellipsis;
    overflow: hidden;
     100%;
    font-weight: 400
}

#sideBar #profile_block #p_b_follow {
    margin: 15px 0 10px;
    text-align: center
}

#sideBar #profile_block #p_b_follow a {
    border: 1px solid var(--border-color);
    font-size: 13px;
    padding: 7px 0;
    border-radius: 4px;
     230px;
    font-weight: 300
}

#sideBar #profile_block #p_b_follow a:hover {
    border-color: var(--theme-color)
}

.newsItem {
    margin-bottom: 10px
}

.newsItem .catListTitle {
    display: none
}

#blog-calendar {
    border-top: 1px solid var(--border-color)
}

#blog-calendar .CalDayHeader {
    font-weight: 300
}

#blog-calendar .CalTodayDay {
    color: var(--theme-color);
    font-weight: 600
}

#sideBarMain ul {
    line-height: 1.6
}

.catListTitle {
    text-align: left;
    margin: 20px 0;
    font-size: 20px;
    font-weight: 300;
    border-left: 4px solid var(--theme-color);
    border-radius: 4px;
    padding-left: 7px
}

#sidebar_search #widget_my_zzk .input_my_zzk {
    color: #314659;
    border: 1px solid var(--border-color);
    background-color: transparent;
     150px;
    height: 32px;
    padding: 0 7px;
    font-size: 16px;
    border-radius: 4px
}

#sidebar_search #widget_my_zzk .input_my_zzk:focus {
    outline: none
}

#sidebar_search #widget_my_zzk .btn_my_zzk {
    height: 34px;
    font-size: 14px;
    font-weight: 300;
    background-color: transparent;
    color: var(--text-color);
    cursor: pointer;
     59px;
    outline: 0;
    border: 1px solid var(--border-color);
    border-radius: 4px;
    transition: border .3s
}

#sidebar_search #widget_my_zzk .btn_my_zzk:hover {
    color: var(--theme-color);
    border: 1px solid var(--theme-color)
}

#sidebar_search #widget_my_google {
    display: none
}

#sidebar_toptags li {
    font-size: 14px;
    height: 16px;
    line-height: 16px;
    padding: 5px 8px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max- 210px;
    border: 1px solid var(--border-color);
    margin: 0 6px 6px 0;
    display: inline-grid;
    transition: all .3s ease;
    border-radius: 4px
}

#sidebar_toptags li a {
    transition: inherit
}

#sidebar_toptags li a .tag-count {
    display: none
}

#sidebar_toptags li:active, #sidebar_toptags li:link, #sidebar_toptags li:visited {
    border-color: var(--border-color)
}

#sidebar_toptags li:hover {
    border-color: var(--theme-color)
}

#sidebar_categories li, #sidebar_scorerank li, #sidebar_shortcut li {
    font-size: 15px;
    height: 40px;
    padding-left: 3px;
    line-height: 30px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    list-style: none
}

#sidebar_recentposts li, #sidebar_topcommentedposts li, #sidebar_topdiggedposts li, #sidebar_topviewedposts li {
    font-size: 15px;
    padding: 7px 0;
    transition: all .3s;
    text-align: justify;
    border-bottom: 1px solid var(--border-color)
}

#sidebar_recentposts li:first-child, #sidebar_topcommentedposts li:first-child, #sidebar_topdiggedposts li:first-child, #sidebar_topviewedposts li:first-child {
    border-top: 1px solid var(--border-color)
}

#sidebar_recentcomments li {
    text-align: justify
}

#sidebar_recentcomments .recent_comment_title:nth-child(n+2) {
    padding-top: 10px
}

#sidebar_recentcomments .recent_comment_title:first-child {
    border-top: 1px solid var(--border-color);
    padding-top: 10px
}

#sidebar_recentcomments .recent_comment_body {
    border-radius: 4px;
    padding: 5px 10px;
    margin: 5px 0;
    background-color: var(--panel-bg-color)
}

#sidebar_recentcomments .recent_comment_author {
    margin-right: 0;
    text-align: right;
    padding-bottom: 10px;
    border-bottom: 1px solid var(--border-color)
}

#taglist_title, .entrylistTitle, .myposts_title, .PostListTitle, .thumbTitle {
    font-size: 20px;
    font-weight: 300;
    margin-bottom: 10px;
    text-align: left
}

.entrylistDescription {
    margin: 15px auto;
    border-left: 4px solid var(--border-color);
    text-align: justify;
    padding-left: 7px
}

#myposts {
    margin-left: 0
}

#myposts .PostList {
    border-bottom: 1px solid var(--border-color);
    padding: 0;
    margin: 0
}

#myposts .PostList:first-of-type {
    border-top: 1px solid var(--border-color)
}

#myposts .postTitl2 {
    font-size: 17px;
    margin: 10px 0;
    text-align: justify
}

#myposts .postDesc2 {
    text-align: right;
    margin-bottom: 10px;
    font-size: 14px
}

#myposts .postDesc2 > a {
    display: none
}

#myposts .postDesc2:before {
    font-family: FontAwesome;
    content: "\f017";
    opacity: .7
}

.post-view-count:before {
    content: "\f06e"
}

.post-comment-count:before, .post-view-count:before {
    font-family: FontAwesome;
    padding-left: 10px;
    padding-right: 5px;
    opacity: .7
}

.post-comment-count:before {
    content: "\f27b"
}

.post-digg-count:before {
    font-family: FontAwesome;
    content: "\f087";
    padding-left: 10px;
    padding-right: 5px;
    opacity: .7
}

.day, .day > .postSeparator, .entrylistItem {
    border-bottom: 1px solid var(--border-color);
    text-align: justify;
    margin-bottom: 10px;
    padding-bottom: 10px
}

.day .postTitle, .entrylist .entrylistPosttitle {
    font-size: 19px
}

.day .postTitle > a, .entrylist .entrylistPosttitle > a {
    position: relative
}

.day .postTitle > a:after, .entrylist .entrylistPosttitle > a:after {
    content: "";
    display: block;
     0;
    height: 1px;
    position: absolute;
    left: 0;
    bottom: -2px;
    background: var(--theme-color);
    transition: all .3s ease-in-out
}

.day .postTitle > a:hover:after, .entrylist .entrylistPosttitle > a:hover:after {
     100%
}

.day .postCon, .entrylist .entrylistPostSummary {
    font-size: 16px;
    padding: 10px 0
}

.day .postCon img, .entrylist .entrylistPostSummary img {
     200px;
    height: 150px;
    border-radius: 4px;
    margin-left: 10px
}

.day .postCon a, .entrylist .entrylistPostSummary a {
    border-bottom: 1px dotted var(--text-color);
    padding: 2px 5px;
    font-size: 14px;
    margin-top: 10px;
    display: table
}

.day .postCon a:after, .entrylist .entrylistPostSummary a:after {
    content: " \00bb"
}

.day .postCon a:hover, .entrylist .entrylistPostSummary a:hover {
    border-bottom: 1px dotted var(--theme-color)
}

.day .postDesc, .entrylist .entrylistItemPostDesc {
    text-align: right
}

.day .postDesc > a, .entrylist .entrylistItemPostDesc > a {
    display: none
}

.toc-container-header {
    font-size: 20px;
    font-weight: 700
}

#topics .postTitle {
    font-size: 21px;
    font-weight: 300
}

#topics .postBody {
    font-size: 16px;
    line-height: 1.75
}

#topics .postBody a {
    color: var(--theme-color);
    position: relative
}

#topics .postBody h1 a {
    color: #ffffff;

}

#topics .postBody a:after {
    content: "";
    display: block;
     0;
    height: 1px;
    position: absolute;
    left: 0;
    bottom: -2px;
    background: var(--theme-color);
    transition: all .3s ease-in-out
}

#topics .postBody a:hover:after {
     100%
}

#topics .postBody h1 {
    font-size: 21px
}

#topics .postBody h2 {
    font-size: 20px
}

#topics .postBody h3 {
    font-size: 19px
}

#topics .postBody h4 {
    font-size: 18px
}

#topics .postBody h5 {
    font-size: 17px
}

#topics .postBody h6 {
    font-size: 16px
}

#topics .postBody p {
    margin: 13px auto
}

#topics .postBody hr {
    border-top: none;
    border-bottom: 1px solid var(--border-color)
}

#topics .postBody blockquote {
    border: none;
    margin: 15px 0;
    color: inherit;
    border-radius: 4px;
    padding: 1px 15px;
    border-left: 4px solid var(--theme-color);
    background-color: var(--panel-bg-color)
}

#topics .postBody em {
    padding-right: 3px
}

#topics .postBody strong {
    margin: 0 3px;
    font-weight: 500
}

#topics .postBody img {
    display: block;
    margin: 15px 0 30px;
    border-radius: 3px;
    box-shadow: 0 1px 15px rgba(27, 31, 35, .15), 0 0 1px rgba(106, 115, 125, .35)
}

#topics .postBody .cnblogs-markdown pre {
    white-space: pre;
    position: relative
}

#topics .postBody ol li, #topics .postBody ul li {
    margin: 3px 0
}

#topics .postBody table {
    font-size: 15px;
     100%;
    margin: 15px 0;
    display: block;
    overflow-x: auto;
    border: none
}

#topics .postBody table::-webkit-scrollbar {
    height: 4px !important
}

#topics .postBody table th {
    background: var(--panel-bg-color);
    white-space: nowrap;
    font-weight: 400
}

#topics .postBody table td, #topics .postBody table th {
    border: 1px solid var(--border-color);
    padding: 6px 15px;
    min- 100px
}

/* code 样式 */

#topics .postBody pre code table th {
    background: var(--panel-bg-color);
    white-space: nowrap;
    font-weight: 400
}

#topics .postBody pre code table td, #topics .postBody pre code table th {
    border: none;
    padding: 0;
    min- 0
}

#topics .postBody pre .termy th {
    background: var(--panel-bg-color);
    white-space: nowrap;
    font-weight: 400
}

#topics .postBody pre .termy td, #topics .postBody pre .termy th {
    border: none;
    padding: 0;
    min- 0
}


/* code 样式 end */

#topics .postBody h1 code, #topics .postBody h2 code, #topics .postBody h3 code, #topics .postBody h4 code, #topics .postBody h5 code, #topics .postBody h6 code, #topics .postBody li > code, #topics .postBody p > code, #topics .postBody table code {
    line-height: 1.2;
    font-family: consolas !important;
    vertical-align: middle;
    margin: 0 3px;
    background-color: var(--code-bg-color) !important;
    font-size: 14px !important;
    padding: .2em .3em !important;
    border-radius: 3px !important;
    border: none !important
}

#topics .postBody #BlogPostCategory, #topics .postBody #EntryTag {
    font-size: 14px
}

#topics .postBody #BlogPostCategory a, #topics .postBody #EntryTag a {
    font-size: 13px;
    border-radius: 4px;
    padding: 4px 6px;
    background-color: var(--panel-bg-color);
    margin-right: 5px;
    transform: none;
    color: var(--text-color)
}

#topics .postBody #BlogPostCategory a:hover, #topics .postBody #EntryTag a:hover {
    color: #fff;
    background-color: var(--theme-color)
}

#topics .postBody #BlogPostCategory a:after, #topics .postBody #EntryTag a:after {
    content: none
}

#topics .postBody #BlogPostCategory:before {
    content: "\f07c";
    font-family: FontAwesome;
    opacity: .7
}

#topics .postBody #EntryTag:before {
    content: "\f02c";
    font-family: FontAwesome;
    opacity: .7
}

#topics .postBody #post_next_prev {
    font-size: 14px
}

#topics .postDesc {
    border-top: 1px solid var(--border-color);
    padding-top: 5px;
    margin-top: 5px;
    text-align: right
}

.cnblogs_code {
    background-color: #333232;
    padding-left: 1em;
    padding-right: 1em;
    border: none;
    border-radius: 3px;
    font-family: Consolas, Monaco, Andale Mono, Ubuntu Mono, monospace !important
}

.cnblogs_code div {
    background-color: transparent;
    color: #656c73
}

.cnblogs_code img {
    margin: 0 !important
}

.cnblogs_code pre {
    color: #abb2bf;
    font-family: inherit !important;
    font-size: 15px !important
}

.cnblogs_code pre span {
    font-family: inherit !important;
    color: inherit !important
}

.cnblogs_code textarea {
    font-family: inherit !important;
    padding: 5px;
    border: 1px solid #3e4c42;
    color: #c5d4ef;
    background-color: #282c34
}

.cnblogs_code textarea:focus {
    outline: 0
}

.cnblogs_code .code_img_closed, .cnblogs_code .code_img_opened {
    display: none !important
}

.cnblogs_code .cnblogs_code_toolbar {
     20px
}

.cnblogs_code .cnblogs_code_toolbar span {
    padding-right: 0
}

.cnblogs_code .cnblogs_code_toolbar a:link img {
    background-color: transparent !important
}

.cnblogs_code .cnblogs_code_collapse {
    color: #656c73;
    border: 1px solid #989fa6;
    border-radius: 2px;
    background-color: transparent;
    display: inline-block;
    cursor: pointer;
    padding: 5px 5px 2px
}

#footer {
    border-top: 1px solid var(--border-color);
    font-size: 13px;
    text-align: center;
    padding: 15px 0
}

.louzhu {
    color: var(--theme-color);
    font-weight: 500
}

.feedbackListSubtitle .sendMsg2This {
    background: transparent;
    padding-left: 0;
    font-size: 15px
}

.feedbackListSubtitle .sendMsg2This:before {
    content: "✉️"
}

.feedbackManage {
    float: right
}

.feedbackItem .feedbackCon {
    margin-bottom: 10px;
    padding: 10px 0;
    border-bottom: 1px solid var(--border-color)
}

.feedbackItem .feedbackCon .comment_vote {
    margin-top: 12px
}

.blog_comment_body {
     auto;
    border-radius: 4px;
    padding: 12px;
    margin-left: 50px;
    background-color: var(--panel-bg-color);
    min-height: 19px
}

.blog_comment_body img {
    border-radius: 3px
}

#taglist_main {
    margin-top: 0
}

#taglist_main table {
     100%
}

#taglist_main table tr td {
    padding: 5px 20px 5px 0
}

#taglist_main table tr td:last-child {
    padding-right: 0
}

#taglist_main table tr td .small {
    display: none
}

#taglist_main table tr td a {
    display: block;
    padding: 5px;
    font-weight: 300;
    line-height: 20px;
    text-align: center;
    border: 1px solid var(--border-color);
    border-radius: 4px;
    color: var(--text-color)
}

#taglist_main table tr td a:hover {
    border: 1px solid var(--theme-color)
}

#div_digg {
    margin: 0;
     auto
}

#div_digg .buryit, #div_digg .diggit {
    background: none;
    height: auto;
     auto;
    min- 60px;
    margin: 0;
    font-size: 17px;
    border-radius: 4px;
    padding: 3px 10px;
    background-color: var(--panel-bg-color);
    transition: all .3s
}

#div_digg .buryit span, #div_digg .diggit span {
    font-size: inherit;
    color: inherit
}

#div_digg .buryit:hover, #div_digg .diggit:hover {
    color: #fff;
    background-color: var(--theme-color)
}

#div_digg .diggit:before {
    content: "\f087";
    font-family: FontAwesome;
    opacity: .7
}

#div_digg .buryit {
    margin-left: 15px
}

#div_digg .buryit:before {
    content: "\f088";
    font-family: FontAwesome;
    opacity: .7
}

.topicListFooter {
    text-align: right;
    margin-top: 10px;
    margin-right: 0
}

#nav_next_page, .pager {
    color: var(--text-color);
    text-align: right;
    margin-right: 0 !important
}

#nav_next_page a, .pager a {
    color: var(--text-color);
    padding: 4px 7px;
    border: 1px solid var(--border-color);
    border-radius: 4px
}

#nav_next_page a:hover, .pager a:hover {
    color: var(--theme-color);
    border: 1px solid var(--theme-color)
}

.pager span.current {
    padding: 3px 7px;
    border: 1px solid var(--theme-color);
    background-color: var(--theme-color);
    border-radius: 4px;
    margin: 0 0 0 5px
}

.feedback_area_title {
    font-size: 20px;
    border-bottom: 1px solid var(--border-color);
    margin: 20px 0;
    padding-bottom: 5px
}

#commentform_title {
    background-image: none;
    padding-left: 0;
    font-size: 20px
}

#commentform_title > a {
    display: none
}

.commentform #tip_comment {
    color: var(--theme-color) !important;
    margin: 15px 0;
    display: block
}

.commentform .comment_textarea {
     100%;
    border: 1px solid var(--border-color);
    background-color: transparent;
    padding: 0
}

.commentform .comment_textarea:focus {
    outline: 0
}

.commentform .commentbox_title {
    border-bottom: 1px solid var(--border-color)
}

.commentform .commentbox_title .commentbox_title_left .commentbox_tab {
    margin: 0;
    padding: 5px 15px;
    color: var(--text-color);
    border-bottom: none
}

.commentform .commentbox_title .commentbox_title_left .active {
    color: var(--theme-color)
}

.commentform .commentbox_title .commentbox_title_right {
    margin: 0 10px 0 0
}

.commentform .commentbox_title .commentbox_title_right .comment_svg:hover, .commentform .commentbox_title .commentbox_title_right .comment_svg_stroke:hover {
    fill: var(--theme-color);
    stroke: var(--theme-color)
}

.commentform #tbCommentBody, .commentform #tbCommentBodyPreview {
    padding: 10px 15px;
    background: transparent;
    color: var(--text-color);
    font-weight: 300
}

.commentform #tbCommentBodyPreviewBody {
    margin-left: 0;
    min-height: 235px;
    background-color: transparent
}

.commentform #btn_comment_submit {
     auto;
    height: auto;
    border- 0;
    cursor: pointer;
    color: #fff;
    background-color: var(--theme-color);
    border-color: var(--theme-color);
    font-weight: 300;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    padding: 5px 17px;
    font-size: 13px;
    border-radius: 4px;
    outline: none;
    transition: all .3s
}

.commentform #btn_comment_submit:hover {
    opacity: .7
}

.commentform .comment_my_posted > img {
    display: none
}

.commentform .bq_post_comment {
    margin-top: 5px;
    font-size: 13px;
    display: block;
    color: var(--text-color);
    background-color: var(--border-color);
    border: none;
    border-radius: 4px;
    padding: 1px 15px
}

::-webkit-scrollbar {
     3px
}

::-webkit-scrollbar-thumb {
    background-color: var(--text-color)
}

.github-corner:hover .octo-arm {
    -webkit-animation: octocat-wave .56s ease-in-out;
    animation: octocat-wave .56s ease-in-out
}

.github-corner svg {
    fill: var(--theme-color);
    z-index: 999;
    cursor: pointer;
    position: fixed;
    top: 0;
    border: 0;
    left: 0;
    transform: scaleX(-1)
}

@-webkit-keyframes octocat-wave {
    0%, to {
        transform: rotate(0)
    }
    20%, 60% {
        transform: rotate(-25deg)
    }
    40%, 80% {
        transform: rotate(10deg)
    }
}

@keyframes octocat-wave {
    0%, to {
        transform: rotate(0)
    }
    20%, 60% {
        transform: rotate(-25deg)
    }
    40%, 80% {
        transform: rotate(10deg)
    }
}

.esa-mobile-menu {
    display: none;
    position: fixed;
    top: 17px;
    right: 20px;
    height: 25px;
     25px;
    text-align: center;
    line-height: 25px;
    z-index: 941113;
    font-size: 1.5em;
    cursor: pointer;
    color: var(--text-color);
    border-radius: 4px
}

.esa-profile-avatar {
    border-radius: 4px;
     100%
}

.esa-contents {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    background-color: var(--blog-bg-color);
    border-left: 1px solid var(--border-color);
    overflow-y: auto;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    padding: 1rem 0;
     252px;
    transform: translate3d(252px, 0, 0);
    z-index: 1000
}

.esa-contents ul {
    padding: 0 15px;
    overflow-y: auto
}

.esa-contents ul li {
    padding: 5px 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    cursor: pointer;
    color: var(--text-color)
}

.esa-contents ul li .level1 {
    margin-left: 0
}

.esa-contents ul li .level2 {
    margin-left: 10px
}

.esa-contents ul li .level3 {
    margin-left: 26px
}

.esa-anchor {
    opacity: 0;
    transition: opacity .3s ease;
    margin-left: 8px
}

.active {
    transform: translateZ(0)
}

.active, .noactive {
    transition-duration: 378ms
}

.noactive {
    transform: translate3d(252px, 0, 0)
}

.esa-post-signature {
    padding: 12px 24px 12px 20px;
    margin-top: 15px;
    font-size: 15px;
    background-color: var(--panel-bg-color);
    position: relative;
    border-radius: 4px;
    border-left: 4px solid var(--theme-color)
}

.esa-post-signature p {
    margin: 0 !important
}

.esa-post-signature a {
    color: var(--text-color) !important
}

.esa-sponsor {
    position: relative;
     100%;
    height: 85px;
    margin: 100px 0
}

.esa-sponsor .title {
    text-align: center;
    margin-bottom: 15px;
    font-size: 17px;
    font-weight: 400;
    opacity: .8
}

.esa-sponsor .box {
    position: absolute;
    left: calc(50% - 101px);
    border: 1px solid var(--border-color);
    border-radius: 4px
}

.esa-sponsor .box li {
     60px;
    float: left;
    margin: 0 !important;
    text-align: center;
    border-left: 1px solid var(--border-color);
    background: transparent;
    transition: background .3s ease;
    cursor: pointer;
    line-height: 0;
    opacity: 1;
    list-style: none;
    margin: 0;
    padding: 6px 3px
}

.esa-sponsor .box li svg {
    opacity: .5
}

.esa-sponsor .box li:hover {
    background: var(--panel-bg-color)
}

.esa-sponsor .box li:first-child {
    border- 0
}

.esa-sponsor .qrshow {
    position: absolute;
     200px;
    height: 200px;
    background: var(--blog-bg-color);
    cursor: pointer;
    left: calc(50% - 100px);
    top: -170px;
    z-index: 999;
    display: none;
    box-shadow: 0 1px 15px rgba(27, 31, 35, .15), 0 0 1px rgba(106, 115, 125, .35)
}

.esa-sponsor .qrshow .noconfig {
    position: absolute;
    top: 85px;
    left: 60px;
    border: 1px solid var(--border-color);
    border-radius: 4px;
    padding: 0 10px
}

.esa-sponsor .qrshow img {
    height: 100%;
     100%;
    box-shadow: none !important;
    margin: 0 !important
}

.esa-comment-avatar {
    float: left
}

.esa-comment-avatar img {
    height: 43px;
     43px;
    border-radius: 4px;
    transition: all .5s ease-out;
    -webkit-transition: all .6s ease-out
}

.esa-comment-avatar img:hover {
    border-radius: 50%
}

.esa-toolbar {
    position: fixed;
    bottom: 30px;
    right: 30px;
     45px;
    height: 45px;
    z-index: 1001
}

.esa-toolbar .bars {
    position: relative;
     inherit;
    height: inherit;
    cursor: pointer;
    border-radius: 50%;
    background: var(--theme-color);
    z-index: 1;
    text-align: center;
    font-size: 24px;
    line-height: 46px;
    color: #fff;
    transition: all .3s ease;
    box-shadow: 0 2px 4px 1px rgba(0, 0, 0, .2)
}

.esa-toolbar .contents, .esa-toolbar .mode, .esa-toolbar .skin, .esa-toolbar .up {
    position: absolute;
    cursor: pointer;
    bottom: 0;
    right: 0;
    height: 35px;
     35px;
    text-align: center;
    line-height: 35px;
    z-index: 0;
    opacity: 0;
    border-radius: 4px;
    box-shadow: 0 2px 4px 1px rgba(0, 0, 0, .2);
    background-color: var(--panel-bg-color);
    transition: all .3s ease
}

.esa-toolbar .contents:hover, .esa-toolbar .mode:hover, .esa-toolbar .skin:hover, .esa-toolbar .up:hover {
    color: #fff;
    background-color: var(--theme-color)
}

.esa-toolbar .bars-show {
    transform: rotate(270deg)
}

.esa-toolbar .up-show {
    transform: translate3d(0, -200%, 0);
    opacity: 1
}

.esa-toolbar .mode-show {
    transform: translate3d(-140%, -140%, 0);
    opacity: 1
}

.esa-toolbar .skin-show {
    transform: translate3d(-200%, 0, 0);
    opacity: 1
}

.esa-toolbar .contents-show {
    transform: translate3d(-350%, 0, 0);
    opacity: 1
}

.esa-toolbar .skin-popup {
    display: none;
    position: fixed;
    left: calc(50% - 100px);
    bottom: 0;
    padding: 25px;
    opacity: 1;
     150px;
    height: auto;
    border-radius: 15px 15px 0 0;
    background-clip: border-box;
    box-shadow: 0 2px 4px 1px rgba(0, 0, 0, .2);
    background-color: var(--panel-bg-color)
}

.esa-toolbar .skin-popup .item {
    text-align: center
}

.esa-toolbar .skin-popup .title {
    font-size: 17px;
    margin-bottom: .5em
}

.esa-toolbar .skin-popup .themes button {
    font-size: 1em;
    position: relative;
     calc(1.75em - 5px);
    height: calc(1.75em - 5px);
    border-radius: .15em;
    cursor: pointer;
    margin: 2.5px;
    flex-shrink: 0;
    justify-self: center;
    transition: all .15s;
    overflow: hidden;
    background: transparent;
    z-index: 1;
    box-sizing: border-box;
    outline: none;
    border: none
}

@-webkit-keyframes loading {
    0% {
        opacity: 0
    }
    to {
        opacity: 1
    }
}

@keyframes loading {
    0% {
        opacity: 0
    }
    to {
        opacity: 1
    }
}

.dark-loading {
    background: #222
}

.light-loading {
    background: #fff;
}

.light-loading .box span {
    display: inline-block;
    vertical-align: middle;
     .6em;
    height: .6em;
    margin: .19em;
    background: lightgreen;
    -webkit-animation: load 1.04s ease infinite;
}

.light-loading .box span:last-child {
    margin-right: 0px;
}

@-webkit-keyframes load {
    0% {
        opacity: 1;
        -webkit-transform: scale(1.2);
    }
    100% {
        opacity: .2;
        -webkit-transform: scale(.2);
    }
}

.light-loading .box span:nth-child(1) {
    -webkit-animation-delay: 0.13s;
}

.light-loading .box span:nth-child(2) {
    -webkit-animation-delay: 0.26s;
}

.light-loading .box span:nth-child(3) {
    -webkit-animation-delay: 0.39s;
}

.light-loading .box span:nth-child(4) {
    -webkit-animation-delay: 0.52s;
}

.light-loading .box span:nth-child(5) {
    -webkit-animation-delay: 0.65s;
}


.dark-loading, .light-loading {
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    display: flex;
    justify-content: center;
    align-items: center;
    z-index: 99999
}

.dark-loading .box h2 {
    color: #777;
    margin: 0;
    font: .8em verdana;
    text-transform: uppercase;
    letter-spacing: .1em;
    text-align: center
}

.dark-loading .box span {
    display: inline-block;
    vertical-align: middle;
     .6em;
    height: .6em;
    margin: .19em;
    background: #007db6;
    border-radius: .6em;
    -webkit-animation: loading 1s infinite alternate;
    animation: loading 1s infinite alternate
}

.dark-loading .box span:nth-of-type(2) {
    background: #008fb2;
    -webkit-animation-delay: .2s;
    animation-delay: .2s
}

.dark-loading .box span:nth-of-type(3) {
    background: #009b9e;
    -webkit-animation-delay: .4s;
    animation-delay: .4s
}

.dark-loading .box span:nth-of-type(4) {
    background: #00a77d;
    -webkit-animation-delay: .6s;
    animation-delay: .6s
}

.dark-loading .box span:nth-of-type(5) {
    background: #00b247;
    -webkit-animation-delay: .8s;
    animation-delay: .8s
}

.dark-loading .box span:nth-of-type(6) {
    background: #5ab027;
    -webkit-animation-delay: 1s;
    animation-delay: 1s
}

.dark-loading .box span:nth-of-type(7) {
    background: #a0b61e;
    -webkit-animation-delay: 1.2s;
    animation-delay: 1.2s
}


/* ................代码行号样式 开始 ............. */
.ln-bg {
    z-index: 1;
    top: 0;
    height: 100%;
    background: #333;
    border-radius: 4px 0 0 4px
}

.ln-bg, .ln-num {
    position: absolute;
    left: 0;
     2.4em
}

.ln-num {
    z-index: 2;
    text-align: center;
    display: inline-block;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none
}

.ln-num:before {
    color: #777;
    font-style: normal;
    font-weight: 400;
    text-align: center;
    content: attr(data-num)
}

/* ...................代码行号样式 结束 ............. */

/* ................. hl js 高亮自定义 开始 ............ */
/* 官方主题 https://highlightjs.org/static/demo/ */
:root {
    --hl-background: #f5f5f5; /* 代码标签背景 */
    --hl-border-color: #f5f5f5; /* 代码标签框背景 */
    --hl-text-color: #36464e; /* 普通代码的颜色 */
    --hl-comment: #5c6370; /* 代码注释 */

    --hl-quote: #a846b9; /* 代码引用 markdown 的 > */
    --hl-section: #e06c75; /* markdown的标题 */
    --hl-bullet: #3f6ec6; /* yaml 的 - 或 markdown 的 1. */
    --hl-link: #3f6ec6; /* markdown 中 [l](xxx) 的xxx */

    --hl-doctag: #c678dd; /* 代码注释 tag 如 java 的 @author*/
    --hl-formula: #c678dd;

    --hl-deletion: #e06c75; /* 减 diff 的 - */
    --hl-addition: #1c7d4d; /* 加 diff 的 + */

    --hl-name: #e06c75; /* HTML或XML的标签 */
    --hl-tag: #3f6ec6; /* HTML或XML的标签 */
    --hl-attr: #d52a2a; /* HTML或XML的属性 */
    --hl-attribute: #1c7d4d; /* html属性名 */

    --hl-meta-string: #1c7d4d;

    --hl-subst: #e06c75; /* 如 bash $variable 或 ${cls} */
    --hl-literal: #56b6c2; /* 如 None null true false [] */
    --hl-regexp: #1c7d4d; /* 正则高亮 */
    --hl-string: #1c7d4d; /* 字符串 */
    --hl-built_in: #3f6ec6; /* built in */
    --hl-class: #e6c07b; /* 类 结构 接口 */
    --hl-title: #e6c07b; /* 类名 函数名 */
    --hl-number: #d52a2a; /* 数字 */
    --hl-type: #d52a2a; /* 内置类型 如: int string */
    --hl-variable: #d52a2a; /* 变量名 */
    --hl-meta: #3f6ec6; /* shell: $  python: 装饰器 import*/
    --hl-keyword: #3f6ec6; /* 关键字 import def 等*/

    --hl-selector-attr: #d52a2a; /* css 属性选择器 */
    --hl-selector-class: #d52a2a; /* css 类选择器 */
    --hl-selector-id: #3f6ec6; /* css id选择器 */
    --hl-selector-pseudo: #d52a2a; /* css 伪类 */
    --hl-selector-tag: #3f6ec6; /* css 标签名选择器 */
    --hl-template-variable: #d52a2a; /* django template 的占位符 {{ request.user }} */

    --hl-symbol: #3f6ec6; /* 反引号的内容 */
}

/* 夜间模式的代码 */
:root[mode=dark] {
    --hl-background: #252a33; /* 代码标签背景 */
    --hl-border-color: #252a33; /* 代码标签框背景 */
    --hl-text-color: #bababa; /* 普通代码的颜色 */
    --hl-comment: #5c6370; /* 代码注释 */

    --hl-quote: #a846b9; /* 代码引用 markdown 的 > */
    --hl-section: #e06c75; /* markdown的标题 */
    --hl-bullet: #61aeee; /* yaml 的 - 或 markdown 的 1. */
    --hl-link: #61aeee; /* markdown 中 [l](xxx) 的xxx */

    --hl-doctag: #c678dd; /* 代码注释 tag 如 java 的 @author*/
    --hl-formula: #c678dd;

    --hl-deletion: #e06c75; /* 减 diff 的 - */
    --hl-addition: #98c379; /* 加 diff 的 + */

    --hl-name: #7171bf; /* HTML或XML的标签 */
    --hl-tag: #7171bf; /* HTML或XML的标签 */
    --hl-attr: #d19a66; /* HTML或XML的属性 */
    --hl-attribute: #98c379; /* html属性名 */

    --hl-meta-string: #98c379;

    --hl-subst: #e06c75; /* 如 bash $variable 或 ${cls} */
    --hl-literal: #56b6c2; /* 如 None null true false [] */
    --hl-regexp: #98c379; /* 正则高亮 */
    --hl-string: #98c379; /* 字符串 */
    --hl-built_in: #e6c07b; /* built in */
    --hl-class: #e6c07b; /* 类 结构 接口 */
    --hl-title: #e6c07b; /* 类名 函数名 */
    --hl-number: #d19a66; /* 数字 */
    --hl-type: #d19a66; /* 内置类型 如: int string */
    --hl-variable: #d19a66; /* 变量名 */
    --hl-meta: #61aeee; /* shell: $  python: 装饰器 import*/
    --hl-keyword: #7171bf; /* 关键字 import def 等*/

    --hl-selector-attr: #d19a66; /* css 属性选择器 */
    --hl-selector-class: #d19a66; /* css 类选择器 */
    --hl-selector-id: #61aeee; /* css id选择器 */
    --hl-selector-pseudo: #d19a66; /* css 伪类 */
    --hl-selector-tag: #7171bf; /* css 标签名选择器 */
    --hl-template-variable: #d19a66; /* django template 的占位符 {{ request.user }} */

    --hl-symbol: #61aeee; /* 反引号的内容 */
}

.cnblogs-markdown .hljs, .cnblogs-markdown .hljsln {
    display: block;
    overflow-x: auto;
    padding: .7em 1em .7em 3em !important;
    background: var(--hl-background) !important; /* 代码背景颜色 */
    border: 1px solid var(--hl-border-color) !important; /* 代码边框颜色 */
    color: var(--hl-text-color); /* 代码文字颜色 */
    font-family: Consolas, Monaco, Andale Mono, Ubuntu Mono, monospace !important;
    font-size: 15px !important
}

.cnblogs-markdown .hljs::-webkit-scrollbar, .cnblogs-markdown .hljsln::-webkit-scrollbar {
    height: 4px
}

.cnblogs-markdown .hljs.ln-hide {
    padding: .7em 1em !important
}

/* 代码注释 */
.hljs-comment {
    color: var(--hl-comment);
    font-style: italic
}

/* 代码引用 markdown 的 > */
.hljs-quote {
    color: var(--hl-quote);
    font-style: italic
}

/* 如 markdown的标题 */
.hljs-section {
    color: var(--hl-section);

}

/* 如 yaml 的 -
     或 markdown的
       1. xxx
       2. bbb
      中的1. 2.
*/
.hljs-bullet {
    color: var(--hl-bullet);
}

/* markdown 的[with links](http://example.com) 中的http://example.com */
.hljs-link {
    text-decoration: underline;
    color: var(--hl-link);
}

/* 代码注释 tag
    如 java的
    / **
    * @author John Smith <john.smith@example.com>
    * /
    的 @author
*/
.hljs-doctag {
    color: var(--hl-doctag);
}

/* 未知 暂时使用 .hljs-doctag 的 */
.hljs-formula {
    color: var(--hl-formula);
}

/* 如 diff 的
    -  defaultMode:
    中的 -
    即 删除
*/
.hljs-deletion {
    color: var(--hl-deletion);
}

/*如 diff 中的 +
    即 增加
*/
.hljs-addition {
    color: var(--hl-addition);
}

/* 如 HTML或XML的标签 */
.hljs-name {
    color: var(--hl-name);
}

/* 如 html的属性名 */
.hljs-attr {
    color: var(--hl-attr);
}

/* html等标签 */
.hljs-tag {
    color: var(--hl-tag)
}

/* 如 html中的属性名 */
.hljs-attribute {
    color: var(--hl-attribute);
}

/* 如 bash中的使用其他变量: $variable 或 ${cls} */
.hljs-subst {
    color: var(--hl-subst);
}

/* 如 python中的None  或其他语言的false true null */
.hljs-literal {
    color: var(--hl-literal);
}


/* 未知 */
.hljs-meta-string {
    color: var(--hl-meta-string);
}

/* 正则高亮, js nginx */
.hljs-regexp {
    color: var(--hl-regexp);
}

/* 一般代码 字符串 */
.hljs-string {
    color: var(--hl-string);
}

/* 一般代码 built_in */
.hljs-built_in {
    color: var(--hl-built_in);

}

/* 一般代码 类 结构 接口 */
.hljs-class {
    color: var(--hl-class);
}

/* 一般代码 类名/函数名等 */
.hljs-title {
    color: var(--hl-title);
}

/* 一般代码 数字 */
.hljs-number {
    color: var(--hl-number);
}

/* 一般代码 内置类型 如: int string */
.hljs-type {
    color: var(--hl-type);
}

/* 一般代码 变量名 */
.hljs-variable {
    color: var(--hl-variable)
}

/* 常用代码, 如 shell 的$  或python 装饰器 import */
.hljs-meta {
    color: var(--hl-meta);
}

/* 常用代码 关键字 包括 import def 等 */
.hljs-keyword {
    color: var(--hl-keyword);
}

/* css 属性选择器 */
.hljs-selector-attr {
    color: var(--hl-selector-attr);

}

/* css 类选择器 */
.hljs-selector-class {
    color: var(--hl-selector-attr);
}

/* css id选择器 */
.hljs-selector-id {
    color: var(--hl-selector-id);
}

/* css 选择器 伪类 */
.hljs-selector-pseudo {
    color: var(--hl-selector-pseudo);
}

/* css 标签名选择器 */
.hljs-selector-tag {
    color: var(--hl-selector-tag);
}

/* 如 django template 的占位符 {{ request.user }} */
.hljs-template-variable {
    color: var(--hl-template-variable);
}

/* 未知 好像是反引号的内容 */
.hljs-symbol {
    color: var(--hl-symbol);
}

.hljs-emphasis {
    font-style: italic
}

.hljs-strong {
    font-weight: 700
}

/* -------------------- hl js  高亮自定义 结束 ............ */

/* ................ 自定义Termynal样式 开始 ................. */
/* Termynal代码复制 btn */
[data-termynal] span[data-ty="input"] {
    position: relative;
}

[data-termynal] button.code-copay-btn.clipboard {
    visibility: unset;
    color: var(--theme-color) !important;
    background: var(--color-bg) !important;
    position: absolute;
    left: -25px;
    top: 9px;
}

/* 行代码间距 */
[data-line-number] {
    padding-right: 15px;
}

/* termynal代码 line-height */
[data-termynal] td.hljs-ln-line.hljs-ln-code {
    line-height: unset;

}

/* 进度条字符间隔 */
[data-termynal] span[data-ty="progress"] {
    letter-spacing: -1px;
}

/* ................ 自定义Termynal样式 结束 ................. */

/* 隐藏订阅信息中的昵称 */
#sideBar #profile_block a:first-child {
    display: none;
}

/* 文章标题样式 */
#cb_post_title_url {
    word-break: break-word;
    color: var(--text-color);
    word-wrap: break-word;
    padding: 0;
    line-height: 1.5;
    font-weight: bold;
    text-rendering: optimizelegibility;
    font-size: 3rem;
    margin: 0.7em 0;
    font-family: "Noto Sans CJK SC", "Helvetica Neue", Helvetica, Tahoma, Arial, "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", "WenQuanYi Micro Hei", Heiti, "黑体", sans-serif;
    text-align: center;
}

/* 复制代码样式 */
.code {
    position: relative;
    display: inline-block;
}

/* 一般代码的复制 btn */
.code-copay-btn {
    color: var(--theme-color);
    position: absolute;
    right: 10px;
    top: 10px;
    border: none;
    background: var(--hl-background);

}

/* 复制自带的 btn 隐藏 */
.cnb-code-toolbar span.cnb-code-toolbar-item {
    display: none !important;
    color: var(--theme-color);
    background: var(--hl-background);
}

/* 活动目录样式 */
.esa-contents .active-catalog {
    border-left: var(--theme-color) 4px solid;
    border-radius: 4px;
    padding-left: 7px;
}


/* 代码: `code` */
.cnblogs-markdown :not(pre,div,td) > code, .blogpost-body :not(pre,div,td) > code {
    background-color: var(--code-bg-color) !important;
}

/* header title 样式 */
a#Header1_HeaderTitle pre {
    color: var(--text-color);
    background: none;
    font-size: 1px;
    margin-top: -25px;
    font-weight: 1000;
}

博客侧边栏公告

<script>
    window.$silence = {
    avatar: 'https://blog-static.cnblogs.com/files/lczmx/code-green.ico',
    favicon: 'https://blog-static.cnblogs.com/files/lczmx/code.ico',
    github: 'https://github.com/lczmx/',
    defaultTheme: 'c',
    defaultMode: 'light',
    hljsln: false,
     catalog: {
        enable: true,
        index: true,
        active: false,
        levels: ['h1', 'h2', 'h3']
    },
    signature: {
        enable: true,
        author: "忞翛",
        license: ['署名-非商业性使用-相同方式共享 4.0 国际', 'https://creativecommons.org/licenses/by-nc-sa/4.0/'],
        remark: '欢迎各位大佬评论交流。可以的话,不妨点一下推荐。</div>',
    },
     navbars: [
        {
            title: '博客园',
            url: 'https://www.cnblogs.com/'
        }, 
        {
            title: '首页',
            url: 'https://www.cnblogs.com/lczmx/'
        }, 
        {
            title: '随笔',
            url: 'https://www.cnblogs.com/lczmx/p/'
        },
        {
            title: '更多',
            chilren: [ 
                 {
                title: "个人收藏",
                target: "_blank",
                url: "https://wz.cnblogs.com/"
            },
            {
                title: '我的标签',
                target: '_blank',
                url: 'https://www.cnblogs.com/lczmx/tag/',
            }, 
             {
                title: '我的笔记',
                target: '_blank',
                url: 'https://gitee.com/lczmx/Note/',
            }, 
            {
                title: 'Github',
                target: '_blank',
                url: 'https://github.com/lczmx',
            },
            ]
        }
    ],
    };

</script>

<link rel="stylesheet" href="https://blog-static.cnblogs.com/files/lczmx/termynal.css">
<script src="https://blog-static.cnblogs.com/files/lczmx/clipboard.min.js"></script>
<script src="https://blog-static.cnblogs.com/files/lczmx/silence.min.js"></script>
<script src="https://blog-static.cnblogs.com/files/lczmx/termynal.js"></script>
<script src="https://blog-static.cnblogs.com/files/lczmx/figlet.js"></script>

页首HTML代码

<div class="light-loading">
   <div class="box">
        <span></span>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
   </div>    
</div>

页脚HTML代码

<script>
    // 颜色列表
    window.$themeColor = {
        a: "#2D8CF0",
        b: "#FA7298",
        c: "#42B983",
        d: "#607D8B",
        e: "#5E72E4",
        f: "#FF9700",
        g: "#FF5722",
        h: "#009688",
        i: "#673BB7",
        j: "#906f61",
    };
    // 用于存放setTimeOut对象, 用于取消 setTimeOut
    window.$tasks = []
    // 用于存放termynal对象
    window.$termynals = []


    $(document).ready(function () {
        repeatExec(initColor);
        repeatExec(initExtend);
        repeatExec(initHtmlTitle);
        repeatExec(bindCleanAnimate);
    });


    window.onload = function () {
        try {
            repeatExec(setupTermynal);
            repeatExec(bindChangeColorBtn);
            repeatExec(bindClipboard);
            repeatExec(initColor);
            repeatExec(initCatalog);
            repeatExec(initAEleScroll);
            repeatExec(initPathToA);
            repeatExec(initAsciiText);

        } catch (e) {
            console.log(e)
        } finally {
            // 无论如何都要去除loading
            hideLoading();
        }
    }

    function repeatExec(func, timeout = 200, ...args) {
        /* 对于 为为及时引入的情况 重复执行 */
        try {
            func(...args);
        } catch (e) {
            console.log("[repeatExec] error", e)
            setTimeout(function () {
                console.log("[repeatExec] redo", func.name);
                repeatExec(func, timeout, ...args);
            }, timeout)

        }
    }

    function hideLoading() {
        /* 去除loading 页面 */
        $(".light-loading, .dark-loading").fadeOut()
    }

    function initAsciiText() {
        /* 初始话 Ascii 字符 */
        let chars = "Lczmx Blog";
        // 替换 文章Header
        let headerTitleSelector = "#Header1_HeaderTitle";
        genAsciiText($(headerTitleSelector).html(), headerTitleSelector, "SantaClara");
        genAsciiText(chars, null);

    }

    function genAsciiText(inputText, targetSelector, fontName, fontPath, hLayout, vLayout,) {
        /* 生成Ascii字符
        * Santa Clara
        *  需要 figlet.js
        * */
        if (!fontPath) {
            fontPath = "https://blog-static.cnblogs.com/files/lczmx"
        }
        // 字体路径
        figlet.defaults({fontPath: fontPath});

        // 字体名
        if (!fontName) {
            // 大的字符
            fontName = "Crazy";
        }

        // 必需参数
        if (!inputText) {
            console.log('[genAsciiText] genAsciiText missing required arguments');
            return;
        }

        // 水平布局
        // 选项: "default" "full" "fitted" "controlled smushing" "universal smushing"
        if (!hLayout) {
            hLayout = "fitted";
        }

        // 垂直布局
        // 选项: "default" "full" "fitted" "controlled smushing" "universal smushing"
        if (!vLayout) {
            vLayout = "full";
        }


        figlet(inputText, {
            font: fontName,
            horizontalLayout: hLayout,
            verticalLayout: vLayout
        }, function (err, text) {
            if (err) {
                console.log('[genAsciiText] genAsciiText something went wrong...');
                console.dir(err);
                return;
            }
            if (!targetSelector) {
                console.log(text)

            } else {
                $(targetSelector).html("<pre>" + text + "</pre>");
            }
        });


    }

    function initHtmlTitle() {
        /* 修改浏览器的标题, 去除 博客园 后缀 */
        let titleEle = $("title")
        let title = titleEle.html().split("-");
        let temp = title.slice(0, title.length - 1);
        let s = temp.join("-");
        s = s.trim();
        titleEle.html(s);
        console.log("[initHtmlTitle] change html title:", s);
    }

    function cleanAnimate() {
        /* 取消timeOut 及 停止动画的正式实现 */
        $.each(window.$tasks, (index, value) => {
            console.log("[cleanAnimate] break animate and clear timeout task");
            clearTimeout(value);
        })
        $('html,body').stop();
        // 清空
        window.$tasks.length = 0
    }

    function bindCleanAnimate() {
        /* 绑定打断动画事件 */

        // 滚轮打断
        window.onmousewheel = cleanAnimate;

        // 绑定点击目录 a标签 等
        // !!! 见 initAEleScroll()

        // 手机滑动打断
        window.ontouchmove = cleanAnimate;

    }

    function addCatalogCss(titleEle) {
        /* 修改第一次加载时 的 目录的样式 */
        if (!titleEle) {
            let catalogLevels = window.$silence.catalog.levels;
            let catalogEle = []
            catalogLevels.forEach((value) => {
                $("#cnblogs_post_body " + value).each(function () {
                    catalogEle.push(this)
                })
            })
            // 默认第一个标题
            titleEle = catalogEle[0];
        }
        // 跳过没有标题的页面
        if (!titleEle) {
            return
        }
        let tagName = $(titleEle).prop("tagName").toLowerCase();
        let eleID = $(titleEle).attr("id");
        console.log("[addCatalogCss] change catalog to", eleID);

        $(".esa-contents li").each(function () {
            let aEle = $(this).children("a:first")
            let href = aEle.attr("href")

            if (this.classList.contains(tagName) && href === eleID) {
                $(this).addClass("active-catalog");
                // 修改目录对应位置在中间位置
                $(".esa-contents")[0].scrollTop = this.offsetTop - Math.round($(window).height() / 2);
            } else {
                $(this).removeClass("active-catalog")
            }
        })
    }

    function initPathToA() {
        /* 刷新时 根据path 跳转到对应锚点*/
        let href = location.hash.split("?")[0];
        if (href) {
            let titleID = decodeURI(href);
            let titleEle = $(titleID);
            if (titleEle[0]) {
                // 有对应id
                // 跳转到对应位置
                scrollTo(titleEle);
                addCatalogCss(titleEle);

            } else {
                $('html,body').animate({
                    // 防止目录不能识别
                    scrollTop: 5
                }, 200);
                // 添加第一个目录的样式
                addCatalogCss()
            }
        } else {
            $('html,body').animate({
                // 防止目录不能识别
                scrollTop: 5
            }, 200);
            // 添加第一个目录的样式
            addCatalogCss()
        }
    }

    function initExtend() {
        /* 插入 jquery扩展 */

        // 禁止子元素滚动触发父元素滚动
        $.fn.scrollUnique = function () {
            return $(this).each(function () {
                var eventType = 'mousewheel';
                if (document.mozHidden !== undefined) {
                    eventType = 'DOMMouseScroll';
                }
                $(this).on(eventType, function (event) {
                    // 一些数据
                    var scrollTop = this.scrollTop,
                        scrollHeight = this.scrollHeight,
                        height = this.clientHeight;

                    var delta = (event.originalEvent.wheelDelta) ? event.originalEvent.wheelDelta : -(event.originalEvent.detail || 0);

                    if ((delta > 0 && scrollTop <= delta) || (delta < 0 && scrollHeight - height - scrollTop <= -1 * delta)) {
                        // IE浏览器下滚动会跨越边界直接影响父级滚动,因此,临界时候手动边界滚动定位
                        this.scrollTop = delta > 0 ? 0 : scrollHeight;
                        // 向上滚 || 向下滚
                        event.preventDefault();
                    }
                });
            });
        };

    }

    function initCatalog() {
        /* 初始化 并 监听文本 改变目录 */
        let catalogLevels = window.$silence.catalog.levels;
        let catalogEle = []
        catalogLevels.forEach((value) => {
            $("#cnblogs_post_body " + value).each(function () {
                catalogEle.push(this)
            })
        })

        // 没有目录禁用
        if (!catalogEle) {
            return
        }
        // 禁止子元素滚动触发父元素滚动
        $(".esa-contents").scrollUnique();

        $(window).scroll(function () {
            let minTop = 10000;
            let nowCatalogEle = catalogEle[0];
            // 滚动条不是很稳
            // changelog: 已经使用initAEleScroll函数完善

            $.each(catalogEle, function (i, ele) {
                // 获取top最小的值
                let top = Math.round(ele.getBoundingClientRect().top);
                if (top > 0) {
                    return true
                }
                top = Math.abs(top)
                if (minTop > top) {
                    minTop = top;
                    nowCatalogEle = ele
                }
            })

            // 没有标题禁用
            if (!nowCatalogEle) {
                return
            }
            let tagName = $(nowCatalogEle).prop("tagName").toLowerCase();
            let eleID = $(nowCatalogEle).attr("id");
            // 修改目录
            eleID = "#" + eleID
            $(".esa-contents li").each(function () {
                let aEle = $(this).children("a:first")
                let href = aEle.attr("href")

                if (this.classList.contains(tagName) && href === eleID) {
                    $(this).addClass("active-catalog");
                    // 修改滚动条
                    // e.scrollTop = p.offsetTop
                    // Math.round($(window).height() / 2)
                    $(".esa-contents")[0].scrollTop = this.offsetTop - Math.round($(window).height() / 2);
                } else {
                    $(this).removeClass("active-catalog")
                }
            })
        })
    }

    function bindChangeColorBtn() {
        /* 绑定修改主题btn主题 */
        // 颜色 动态改变
        $(".themes button").click(function (e) {
            let theme = $(this).attr("data-theme");
            let color = window.$themeColor[theme];
            changeColor(color)
        });
    }

    function changeColor(color) {
        /* 修改该主题颜色 */
        let defaultColor = "#42B983"

        if (!color) {
            color = defaultColor
        }
        // 一级标题颜色
        $("#cnblogs_post_body h1").each(function () {
            if ($(this).attr("class") === "story_title") {
            } else {
                $(this).css({
                    "margin-left": "-10px", "display": "inline-block",
                    "width": "auto", "height": "40px", "background-color": color,
                    "border-bottom-right-radius": "100px", "color": "rgba(255, 255, 255, 1)",
                    "padding-right": "30px", "padding-left": "30px", "line-height": "40px", "font-size": "16px"
                })
            }
        });
        // 二级标题下划线
        $("#cnblogs_post_body h2").each(function () {
            $(this).css(
                {"border-bottom": "3px solid " + color})

        });

        // 三级标题下划线
        $("#cnblogs_post_body h3").each(function () {
            $(this).css(
                {"border-bottom": "1px solid " + color})

        });
        // 主页个文章标题下划线
        $(".postSeparator,.day").each(function () {
            $(this).css(
                {"border-bottom": "1px solid " + color})

        });
        // 复制btn
        $(".code-copay-btn").css("color", color)

    }

    function initColor() {
        // 获取颜色
        // 当前主题
        let theme = sessionStorage.getItem("silence-theme-lczmx")
        // 当前 亮or暗
        let mode = sessionStorage.getItem("silence-mode-lczmx")
        let color = window.$themeColor[theme];

        changeColor(color);
    }

    function bindClipboard() {
        /*
        * 绑定 复制按钮
        * */
        // 使用termynal的类名称
        let clipboard = new ClipboardJS(".clipboard")
        clipboard.on('success', function (e) {
            // 已经复制 修改内容
            let copyIconEle = $('<i class="fa fa-clone" aria-hidden="true"></i>')
            let successIconEle = $('<i class="fa fa-check" aria-hidden="true"></i>')
            $(e.trigger).html(successIconEle)
            setTimeout(function () {
                // 重新 修复成copy
                $(e.trigger).html(copyIconEle)
            }, 2000)

            e.clearSelection();
        });

    }

    function generateMixed(n) {
        /*
        生成随机数
        */
        const chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
            'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
            'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
        let res = "";
        for (let i = 0; i < n; i++) {
            let id = Math.floor(Math.random() * 36);
            res += chars[id];
        }
        return res;
    }

    function changeAttr() {
        /*
      * 修改原code的span属性
      * */
        // 要绑定的id
        let bindCodeEleId = []
        window.$minHeightCss = {}

        // 进度条配置
        let progressBars = {"pip": [$('<span data-ty="progress" data-ty-progressChar="█"></span>')],}
        // config为使用termynal的语言
        let config = ["language-python-repl", "language-shell"]
        let flag = false;   // 是否已经匹配了
        $("pre code").each((index, ele) => {
            flag = false
            config.forEach((language, i) => {
                if (ele.classList.contains(language)) {
                    flag = true // 已经匹配

                    //$(ele).find("td").css("padding", 0);

                    // ele => code tag
                    // 可以替换
                    // 添加data-termynal属性
                    let codeId = "code" + generateMixed(10)
                    let divEle = $('<div data-termynaldata-ty-typeDelay="40" data-ty-lineDelay="700">')
                    // 添加min-height
                    // 没有空时110px
                    let minHeight = ele.clientHeight + 120
                    window.$minHeightCss[codeId] = minHeight
                    divEle.css("min-height", minHeight)
                    divEle.attr("id", codeId).attr("class", "termy")
                    bindCodeEleId.push("#" + codeId)
                    // 为文本添加span
                    $(ele).find(".hljs-ln-code").each((i, lineCodeEle) => {
                        // if tag 在lineEle
                        // 为代码
                        // prompt前缀

                        // 一行的所有span的tag
                        let allSpanEle = $(lineCodeEle).children("span")

                        // let spanEle = $("<span>").text(content).attr("data-ty", "")

                        if (allSpanEle[0]) {
                            // 代码span
                            let prompt = $(allSpanEle).first().text()
                            let content = $(allSpanEle).last().text()
                            $(allSpanEle).last().attr("data-ty", "input").attr("data-ty-prompt", prompt);

                            // 为命令行提供复制按钮
                            divEle.hover(function () {
                                // 鼠标进入
                                $(this).find('span[data-ty="input"]').mouseenter(bindTermynalCopyBtn)

                            }, function () {
                                // 鼠标离开
                                // 当前code的全部btn hide
                                $(this).find(".clipboard").hide()
                            })

                            // 需要删除prompt, 否则重复
                            $(allSpanEle).first().remove();

                            let progressCMD = content.split(" ").filter(item => item !== '')[0];
                            let progressEle = progressBars[progressCMD];
                            if (progressEle) {
                                // 添加进度条
                                $(allSpanEle).after(progressEle)
                                // 一行进度条 大约30px
                                window.$minHeightCss[codeId] += 30
                            }
                        } else {
                            // 没有命令
                            $(lineCodeEle).attr("data-ty", "")

                        }

                    })

                    $(divEle).append($(ele).clone())
                    $(ele).after(divEle)
                    $(ele).remove()

                }

            })
            if (!flag) {
                // data-termynal添加属性
                // 三个点
                $(ele).attr("data-code", "")
                // 添加padding
                $(ele).find("table").css("padding-top", "20px");
                bindCopyBtn($(ele))
            }


        })

        return bindCodeEleId
    }

    function bindTermynalCopyBtn() {
        /* 为Termynal代码添加复制按钮 */
        let e = $(this);
        let cmdID = e.attr('id');
        let copyBtn = e.find(".clipboard");
        if (!cmdID) {
            // 为 span 标签添加id
            cmdID = "cmd-" + generateMixed(10);
            e.attr("id", cmdID);
        }
        if (!copyBtn[0]) {
            let copyIconEle = $('<i class="fa fa-clone" aria-hidden="true"></i>');
            copyBtn = $('<button type="button" class="code-copay-btn hljs-comment clipboard"></button>')
            copyBtn.append(copyIconEle)
            copyBtn.attr('data-clipboard-target', '#' + cmdID).attr('data-clipboard-action', "copy").attr("aria-label", "复制代码")
            e.append(copyBtn)
        }
        // 当前code的全部btn hide
        e.parents('div[data-termynal]').find(".clipboard").hide()

        // show 当前 btn
        copyBtn.show()
    }

    function bindCopyBtn(e) {
        /* 为普通代码添加复制按钮 */

        let copyBtn = $('<button type="button" class="code-copay-btn hljs-comment clipboard"></button>')
        let boxID = "code-" + generateMixed(10)
        let copyIconEle = $('<i class="fa fa-clone" aria-hidden="true"></i>')
        copyBtn.append(copyIconEle)
        e.attr("id", boxID);
        e.addClass("code")
        copyBtn.attr('data-clipboard-target', '#' + boxID + " table").attr('data-clipboard-action', "copy").attr("aria-label", "复制代码")
        e.append(copyBtn)
        copyBtn.hide()
        // 绑定悬浮显示
        e.mouseenter(function () {
            copyBtn.show()
        })
        // 绑定离开, 不显示
        e.mouseleave(function () {
            copyBtn.hide()
        })
    }

    function newTermynal(ele, config) {
        /* 不停 添加termynal */
        console.log("[newTermynal] new termynal")
        const termynal = new Termynal(ele, config);
        window.$termynals.push(termynal)
    }

    function setupTermynal() {
        /* 启动termynal
        *  绑定所有changeAttr函数返回的Element
        *  */

        let bindCodeEleId = changeAttr();

        // 自定义配置termynal
        let termynalConfig = {
            //lineData: useLines,
            noInit: true,
            lineDelay: 500
        }
        bindCodeEleId.forEach((v, i) => {
            // 内部push termynals
            repeatExec(newTermynal, 200, v, termynalConfig)
        });

        // 监听开始时间
        function loadVisibleTermynals() {
            window.$termynals = window.$termynals.filter(termynal => {
                if (termynal.container.getBoundingClientRect().top - innerHeight <= 0) {
                    termynal.init();
                    setMinHeight(termynal.container)
                    return false;
                }
                return true;
            });
        }

        window.addEventListener("scroll", loadVisibleTermynals);
        loadVisibleTermynals();
    }

    function setMinHeight(codeEle) {
        /* 为termynal 设置min-height*/
        let codeID = $(codeEle).attr("id");
        let height = window.$minHeightCss[codeID];
        $(codeEle).css("min-height", height);
        console.log(`[setMinHeight] codeID: [${codeID}] change min-height: ${height}`)

    }

    function scrollTo(titleEle, scrollSpeed, replySpeed, scrollTimeOut) {
        /* 平滑跳转到 对应位置 (titleEle)  */
        // scrollSpeed 滑动到titleEle的时间, 未激活termynal
        // replySpeed 滑动到重新排版的titleEle的时间, 已激活termynal
        // 1. 先激活termynal
        if (!scrollSpeed) {
            // 激活termynal的时间
            // 即 滑动的时间
            scrollSpeed = 1
        }
        if (!replySpeed) {
            scrollSpeed = 200

        }
        if (!scrollTimeOut) {
            scrollTimeOut = 200
        }
        $('html,body').animate({
            // 防止目录不能识别 距离 + 5
            scrollTop: titleEle.offset().top + 5
        }, scrollSpeed);

        // 2. 修改了对应的min-height
        //    然后 再次跳转
        let task = setTimeout(function () {
            $('html,body').animate({
                // 防止目录不能识别
                scrollTop: titleEle.offset().top + 5
            }, scrollSpeed);
        }, scrollTimeOut)

        // 假如 在的执行过程中 可以被打断
        window.$tasks.push(task)
    }

    function initAEleScroll() {
        /* 绑定事件, 使锚点 使用这个函数 并 修改URL
        * */
        $("a[href^='#']").click(function () {
            // 禁用 锚点a标签点击
            // 为目录li标签绑定click事件, 让目录可以准确滚动

            // 触发点击打断之前的事件
            cleanAnimate();

            let href = $(this).attr("href");
            let target = $(href);
            $("a[href^='#']").stop(true); //清除元素的所有动画, 防止卡顿
            console.log("[initAEleScroll] pass href", href);

            if (target[0]) {
                scrollTo(target, 100, 200, 1000)
                // 修改浏览器URL
                window.history.pushState(null, null, href)

                return false
            }
            // 在文档中找不到, 就返回true, 默认跳转
            return true
        });
    }
</script>

文件

文件位于:博客园主题

本文来自博客园,作者:403·Forbidden,转载请注明原文链接:https://www.cnblogs.com/lczmx/p/15669379.html

原文地址:https://www.cnblogs.com/lczmx/p/15669379.html