feat(frontend): deepen single post 1:1 parity with Zibll

Split related style/source settings, add subtitle/meta/allow-view helpers, align cover/author/tags/pay shell markup and CSS with Zibll single.
This commit is contained in:
kate522 committed 2026-07-13 12:43:07 +08:00
1 parent 72ea0828bc
commit 48f7436030
14 files changed
+2156 -1434

No files matched your search

@@ -21,9 +21,13 @@ export const pageSchema = {
post_lightbox_play: false,
post_related_enabled: true,
post_related_count: 6,
// Display style (Zibll img/list/text). Legacy post_related_type may still hold source or style.
post_related_style: 'img',
post_related_source: 'category',
post_related_type: 'category',
post_related_orderby: 'rand',
post_related_orderby: 'views',
post_related_title: '相关推荐',
breadcrumbs_single_text: true,
post_copyright_enabled: true,
post_copyright_text: '',
share_s: true,
@@ -64,6 +68,7 @@ export const pageSchema = {
{ key: 'post_reading_progress', label: '阅读进度条', type: 'switch', default: true },
{ key: 'breadcrumbs_single_s', label: '面包屑导航', type: 'switch', default: true },
{ key: 'breadcrumbs_home_text', label: '面包屑首页文字', type: 'input', default: '首页', dependsOn: { key: 'breadcrumbs_single_s', value: true } },
{ key: 'breadcrumbs_single_text', label: '末项显示「正文」', type: 'switch', default: true, dependsOn: { key: 'breadcrumbs_single_s', value: true }, help: '关闭后末项显示文章标题' },
{ key: 'post_prevnext_s', label: '上一篇/下一篇', type: 'switch', default: true },
{ key: 'post_authordesc_s', label: '作者简介', type: 'switch', default: true },
{ key: 'post_single_hide_time_s', label: '隐藏文章时间', type: 'switch', default: false },
@@ -101,16 +106,21 @@ export const pageSchema = {
fields: [
{ key: 'post_related_enabled', label: '显示相关推荐', type: 'switch', default: true },
{ key: 'post_related_count', label: '推荐数量', type: 'number', default: 6, min: 1, max: 20, dependsOn: { key: 'post_related_enabled', value: true } },
{ key: 'post_related_type', label: '推荐方式', type: 'radio', default: 'category', options: [
{ label: '同分类', value: 'category' },
{ key: 'post_related_style', label: '展示样式', type: 'radio', default: 'img', options: [
{ label: '图文卡片', value: 'img' },
{ label: '列表', value: 'list' },
{ label: '纯文字', value: 'text' },
], dependsOn: { key: 'post_related_enabled', value: true }, help: '对齐 Zibll 相关文章三种样式' },
{ key: 'post_related_source', label: '推荐来源', type: 'radio', default: 'category', options: [
{ label: '同分类/标签/专题', value: 'category' },
{ label: '同标签', value: 'tag' },
{ label: '随机', value: 'random' },
], dependsOn: { key: 'post_related_enabled', value: true } },
{ key: 'post_related_orderby', label: '推荐排序', type: 'select', default: 'rand', options: [
{ key: 'post_related_orderby', label: '推荐排序', type: 'select', default: 'views', options: [
{ label: '浏览量', value: 'views' },
{ label: '随机', value: 'rand' },
{ label: '相关度', value: 'relevance' },
{ label: '时间', value: 'date' },
{ label: '浏览量', value: 'views' },
{ label: '更新时间', value: 'modified' },
], dependsOn: { key: 'post_related_enabled', value: true } },
{ key: 'post_related_title', label: '推荐标题', type: 'input', default: '相关推荐', dependsOn: { key: 'post_related_enabled', value: true } },
+46 -16
View File
@@ -1,5 +1,7 @@
/* ========== 面包屑导航 — 对齐 zibll breadcrumb ========== */
.breadcrumb-nav {
.breadcrumb-nav,
ul.breadcrumb,
.breadcrumbs-wrap {
font-size: 13px;
padding: 0 8px;
margin-bottom: 12px;
@@ -8,7 +10,9 @@
}
.breadcrumb-nav ol,
.breadcrumb-nav ul {
.breadcrumb-nav ul,
ul.breadcrumb,
.breadcrumbs.breadcrumb {
list-style: none;
margin: 0;
padding: 0;
@@ -18,59 +22,85 @@
gap: 0;
}
.breadcrumb-nav li {
.breadcrumb-nav li,
ul.breadcrumb > li,
.breadcrumbs.breadcrumb > li {
display: inline-flex;
align-items: center;
}
.breadcrumb-nav li + li::before {
/* Zibll flat ul.breadcrumb inserts parents with " </li><li> " — separators via content */
.breadcrumb-nav li + li::before,
ul.breadcrumb > li + li::before {
content: '/';
padding: 0 0 0 6px;
padding: 0 6px 0 6px;
opacity: 0.6;
}
.breadcrumb-nav a {
.breadcrumbs.breadcrumb .breadcrumbs__sep {
padding: 0 6px;
opacity: 0.6;
}
.breadcrumb-nav a,
ul.breadcrumb a,
.breadcrumbs a {
color: var(--color-ink-4, #999);
text-decoration: none;
transition: color 0.2s;
}
.breadcrumb-nav a:hover {
.breadcrumb-nav a:hover,
ul.breadcrumb a:hover,
.breadcrumbs a:hover {
color: var(--color-primary, #f04494);
}
.breadcrumb-nav .current {
.breadcrumb-nav .current,
ul.breadcrumb > li:last-child,
.breadcrumbs__item.is-current {
color: var(--color-ink-2, #4e5358);
font-weight: 500;
}
.single-cover-con .breadcrumb-nav,
.single-cover-con .breadcrumb {
.single-cover-con .breadcrumb,
.single-cover-con ul.breadcrumb,
.post-breadcrumbs .breadcrumb {
font-size: 13px;
margin: 5px 0 0 -6px;
opacity: unset;
padding: 0;
}
/* 封面内面包屑 */
.single-cover-con .breadcrumb-nav {
color: rgba(255, 255, 255, 0.7);
.single-cover-con .breadcrumb-nav,
.single-cover-con ul.breadcrumb,
.single-cover-con .breadcrumb {
color: rgba(255, 255, 255, 0.85);
}
.single-cover-con .breadcrumb-nav a {
color: rgba(255, 255, 255, 0.7);
.single-cover-con .breadcrumb-nav a,
.single-cover-con ul.breadcrumb a,
.single-cover-con .breadcrumb a {
color: rgba(255, 255, 255, 0.85);
}
.single-cover-con .breadcrumb-nav a:hover {
.single-cover-con .breadcrumb-nav a:hover,
.single-cover-con ul.breadcrumb a:hover {
color: #fff;
}
.single-cover-con .breadcrumb-nav .current {
.single-cover-con .breadcrumb-nav .current,
.single-cover-con ul.breadcrumb > li:last-child {
color: #fff;
}
/* 移动端 */
@media (max-width: 767px) {
.breadcrumb-nav {
.breadcrumb-nav,
ul.breadcrumb,
.breadcrumbs-wrap {
font-size: 12px;
}
}
@@ -540,3 +540,11 @@ html.dark .post-drop-meta__item:hover {
.post-actions .action i {
font-size: 16px;
}
.article-tags br { flex-basis: 100%; width: 100%; content: ""; display: block; height: 0; }
.article-tags .but.c-blue { color: #2196f3; }
.article-tags .but.c-yellow { color: #f0ad4e; }
.article-tags .but.c-green { color: #5cb85c; }
.article-tags .but.c-purple { color: #9c27b0; }
.article-tags .but.c-red { color: #f44336; }
+62 -2
View File
@@ -211,5 +211,65 @@
.single-head-cover .cover-meta.single-metabox {
display: flex; flex-wrap: wrap; gap: 8px 12px; font-size: 12px; color: var(--color-ink-4);
}
.aksrt-single-pay-box { margin: 16px 0 20px; }
.aksrt-single-pay-box .pay-box, .aksrt-single-pay-box .aksrt-paywall { margin: 0; }
/* Pay box root — Zibll #posts-pay.zib-widget.pay-box */
#posts-pay.zib-widget,
#posts-pay.pay-box,
.aksrt-single-pay-box {
margin: 16px 0 20px;
}
#posts-pay .aksrt-paywall,
.aksrt-single-pay-box .pay-box,
.aksrt-single-pay-box .aksrt-paywall {
margin: 0;
}
/* Cover meta pills + title-h-left */
.single-cover-con .article-title.title-h-left,
.single-cover .article-title.title-h-left {
color: #fff;
text-shadow: 0 1px 4px rgba(0, 0, 0, 0.45);
margin: 0;
}
.single-metabox.cover-meta,
.cover-meta.abs-right {
position: absolute;
top: 12px;
right: 12px;
z-index: 3;
color: #fff;
}
.single-metabox .post-metas item,
.single-metabox .post-metas item a {
color: inherit;
opacity: 0.92;
margin-left: 10px;
font-size: 12px;
}
.single-metabox .post-metas item .fa,
.single-metabox .post-metas item i {
margin-right: 3px;
opacity: 0.9;
}
.single-cover-slide-wrap {
position: relative;
overflow: hidden;
border-radius: var(--radius-2xl, 16px);
}
.single-cover-slide-wrap .abs-center.left-bottom {
z-index: 2;
padding: 18px 20px;
color: #fff;
}
.article-avatar name.flex {
gap: 4px;
flex-wrap: wrap;
}
.article-avatar .aksrt-vip-badge,
.article-avatar .aksrt-identity-chip {
font-size: 12px;
line-height: 1.2;
vertical-align: middle;
}
.article-avatar .display-name {
margin-right: 2px;
}
@@ -549,3 +549,26 @@ html.dark .article-end-separator span {
.post-nav-box__item.is-empty {
visibility: hidden;
}
/* ===== Related (Zibll .relates / .relates-thumb) ===== */
.relates .title-theme { margin-bottom: 0; }
.relates .zib-widget { padding: 12px 15px; }
.relates ul.no-thumb { list-style: none; margin: 0; padding: 0; }
.relates ul.no-thumb li { padding: 6px 0; border-bottom: 1px dashed var(--color-line, rgba(0,0,0,.06)); }
.relates ul.no-thumb li:last-child { border-bottom: 0; }
.relates ul.no-thumb a.icon-circle { color: inherit; text-decoration: none; }
.relates ul.no-thumb a.icon-circle:hover { color: var(--focus-color, #f04494); }
.relates-thumb .swiper-scroll { padding-bottom: 4px; }
.relates-thumb .swiper-slide { width: 200px; max-width: 70vw; }
.relates-thumb .graphic.style-3 { position: relative; overflow: hidden; border-radius: 8px; }
.relates-thumb .graphic.style-3 .graphic-img { position: relative; overflow: hidden; background: var(--surface-2, #f3f4f6); }
.relates-thumb .graphic.style-3 img.fit-cover { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.relates-thumb .graphic.style-3 .graphic-text { padding: 10px 12px; width: 100%; background: linear-gradient(transparent, rgba(0,0,0,.55)); color: #fff; }
.relates-thumb .graphic.style-3 .text1 { font-size: 13px; font-weight: 600; color: #fff; }
.relates-thumb .graphic.style-3 .text3 { opacity: .9; margin-top: 4px; }
/* Colored tag pills on single */
.article-tags .but { display: inline-flex; align-items: center; gap: 4px; margin: 0 6px 6px 0; }
.article-tags .but.ml6 { margin-left: 0; }
.allow-view-deny { margin: 20px 0; }