@@ -1,20 +1,20 @@
html [ data-ui = 'vivid' ] . article-layout { max-width : 1100 px ; margin : 0 auto ; padding : 36 px 28 px 60 px ;
html [ data-ui = 'vivid' ] . article-layout { max-width : 1100 px ; margin : 0 auto ; padding : 24 px 24 px 44 px ;
display : grid ;
grid-template-columns : 140 px minmax ( 0 , 1 fr ) 180 px ;
gap : 32 px ; align-items : start ; }
gap : 24 px ; align-items : start ; }
@ media ( max-width : 960px ) {
html [ data-ui = 'vivid' ] . article-layout { grid-template-columns : 1 fr ; gap : 0 }
html [ data-ui = 'vivid' ] . side-l , html [ data-ui = 'vivid' ] . side-r { display : none }
html [ data-ui = 'vivid' ] . progress-pct { display : none }
}
/* 宽屏: 三栏往外扩。1100 的上限在 1456 的屏上两侧各空 171px,而且中间那列只有
650px(正文 554px,根本没到 --measure 的 680),所以「文章太窄」和「留白太大」
是同一个原因。这里把上限提到 1340,中列固定在 776 = 680(正文) + 48× 2(.paper 内边距),
正文正好吃满 --measure 而不留内空;侧栏 180/220 把多出来的宽度吸收掉,
space-between 让时间线左缘 / 目录右缘正好落在 28px 内边距上(和顶栏对齐) 。
顶栏在阅读页同步放宽到 1340,见 chrome.css 的 .top-in.wide 。 */
/* 宽屏三栏。上限必须和「三栏 + 两个 gap + 左右内边距」正好相等,声明的 gap 才是
渲染出来的 gap —— 否则 justify-content:space-between 会把富余量塞回列间隙里,
数字改小也不动:
180 + 776 + 220 + 24× 2(gap) = 1224 内容宽,+ 24× 2(内边距) = 1272
中列 776 = 728(正文, --measure) + 24× 2(.paper 内边距),正文吃满不留内空 。
顶栏不跟着放 —— 顶栏全站一个宽度(1100),从首页点进文章时导航不会跳 。 */
@ media ( min-width : 1200px ) {
html [ data-ui = 'vivid' ] . article-layout { max-width : 1340 px ;
html [ data-ui = 'vivid' ] . article-layout { max-width : 1272 px ;
grid-template-columns : 180 px minmax ( 0 , 776 px ) 220 px ;
justify-content : space-between ; }
}
@@ -32,30 +32,59 @@ html[data-ui='vivid'] .tl-item.now::before {background:var(--accent);
html [ data-ui = 'vivid' ] . tl-item b { display : block ; color : var ( - - soft ) ; font-weight : 700 ; font-size : 12 px }
html [ data-ui = 'vivid' ] . tl-item . now b { color : var ( - - accent ) }
/* 纸张不再是卡片:去掉底色 / 边框 / 圆角 / 阴影,正文直接落在页面上(手机和桌面一致)。
48px 横向内边距留着 —— 现在它只是留白,但它决定了正文列在中列里的位置:
776(中列) - 96 = 680 = --measure,正好吃满,卡片里和列里都不会剩空。
横向内边距 24px(原来 48)——它决定了正文列在中列里的位置:776 - 24× 2 = 728 = --measure,
正好吃满不剩空。这三个数是一组,改一个另两个要跟着动,否则正文会在列里偏左
(实测:只把内边距改成 24、measure 不动,正文离左栏 83px、离右栏 131px,一边宽一边窄)。
右上角那团强调色渐晕是卡片的角饰,卡片没了也一并去掉。 */
html [ data-ui = 'vivid' ] . paper { padding : 44 px 48 px 52 px ;
html [ data-ui = 'vivid' ] . paper { padding : 30 px 24 px 40 px ;
animation : paperIn .7 s var ( - - spring ) both ; }
@ keyframes paperIn {
from { opacity : 0 ; transform : translateY ( 24 px ) scale ( .985 ) }
to { opacity : 1 ; transform : none }
}
html [ data-ui = 'vivid' ] . paper . meta { display : flex ; gap : 12 px ; align-items : center ; flex-wrap : wrap ;
font-size : 12.5 px ; color : var ( - - muted ) ; font-weight : 600 ; margin-bottom : 18 px ; }
html [ data-ui = 'vivid' ] . paper h1 { margin : 0 0 20 px ; font-size : clamp ( 28 px , 4 vw , 40 px ) ; font-weight : 800 ;
letter-spacing : -.03 em ; line-height : 1.25 ; color : var ( - - ink ) ; }
html [ data-ui = 'vivid' ] . paper . dek { margin : 0 0 32 px ; font-size : 17 px ; line-height : 1.8 ; color : var ( - - soft ) ;
/* 题头居中(参考 innei.in 的文章页:题头整块居中,正文才回到左对齐)。
tabular-nums 让日期/字数这类数字等宽,换行时也不会左右跳。
注意都用 > 直接子元素:.paper h1 会连正文里的 h1(正文本身可能从 `# 标题` 开始)
一起命中,把正文标题也居中。 */
html [ data-ui = 'vivid' ] . paper > . meta { display : flex ; gap : 12 px ; align-items : center ; flex-wrap : wrap ;
justify-content : center ;
font-size : 12.5 px ; color : var ( - - muted ) ; font-weight : 600 ;
font-variant-numeric : tabular-nums ;
margin-bottom : 18 px ; }
html [ data-ui = 'vivid' ] . paper > h1 { margin : 0 0 20 px ; font-size : clamp ( 28 px , 4 vw , 40 px ) ; font-weight : 800 ;
letter-spacing : -.03 em ; line-height : 1.25 ; color : var ( - - ink ) ;
text-align : center ;
/* 居中标题容易折出「最后一行只落一两个字」,balance 让两行长度接近(Chrome/Safari) */
text-wrap : balance ; }
html [ data-ui = 'vivid' ] . paper > . dek { margin : 0 0 32 px ; font-size : 17 px ; line-height : 1.8 ; color : var ( - - soft ) ;
padding-left : 16 px ; border-left : 3 px solid var ( - - accent ) ;
font-family : var ( - - serif ) ; }
html [ data-ui = 'vivid' ] . prose { font-size : 16.5 px ; line-height : 1.95 ; color : var ( - - text ) ; max-width : var ( - - measure ) }
html [ data-ui = 'vivid' ] . prose p { margin : 0 0 1.35 em }
html [ data-ui = 'vivid' ] . prose { font-size : 16.5 px ; line-height : 1.95 ; color : var ( - - text ) ; max-width : var ( - - measure ) ;
/* 中英混排自动补一点字距(Chrome 120+ 的 text-autospace)。不支持就退回现在的样子。 */
text-autospace : normal ; }
/* 段距上下各 1.5em(参考 .v10dui0 .rich-paragraph),首末段把外边距吃掉,
否则标题/分隔线上方会多出一段空白 */
html [ data-ui = 'vivid' ] . prose p { margin : 1.5 em 0 }
html [ data-ui = 'vivid' ] . prose > : first-child { margin-top : 0 }
html [ data-ui = 'vivid' ] . prose > : last-child { margin-bottom : 0 }
html [ data-ui = 'vivid' ] . prose h2 { font-size : 21 px ; font-weight : 800 ; margin : 2.2 em 0 .8 em ;
letter-spacing : -.02 em ; color : var ( - - ink ) ;
padding-bottom : 10 px ; border-bottom : 1 px solid var ( - - line ) ; }
html [ data-ui = 'vivid' ] . prose a { color : var ( - - accent ) ; font-weight : 600 ; border-bottom : 1.5 px solid var ( - - accent - soft ) ; transition : border-color .25 s }
/* 设计稿只写了 h2,h1/h3 不补样式会退回浏览器默认(h1 是 2em + .67em 外边距、
h3 是 1.17em + 自己的行高),在 16.5px/1.95 的正文里很突兀。
正文里出现 h1 是因为有的文章正文本身就是从 `# 标题` 开始的。 */
html [ data-ui = 'vivid' ] . prose h1 { margin : 2.4 em 0 .8 em ; font-size : 1.5 em ; font-weight : 800 ;
letter-spacing : -.02 em ; color : var ( - - ink ) ; }
html [ data-ui = 'vivid' ] . prose h3 { margin : 1.65 em 0 .65 em ; font-size : 1.18 em ; font-weight : 700 ;
letter-spacing : -.01 em ; color : var ( - - ink ) ; }
/* 链接改用 text-decoration: border-bottom 会进盒模型,换行时下划线也跟着断得不对。
参考里是 1px、hover 加粗到 2px。 */
html [ data-ui = 'vivid' ] . prose a { color : var ( - - accent ) ; font-weight : 600 ;
text-decoration : underline ; text-decoration-thickness : 1 px ;
text-underline-offset : 2 px ; text-decoration-color : var ( - - accent - soft ) ;
transition : text - decoration-color .25 s , text - decoration-thickness .25 s ; }
@ media ( hover : hover ) and ( pointer : fine ) {
html [ data-ui = 'vivid' ] . prose a : hover { border-bottom-color : var ( - - accent ) }
html [ data-ui = 'vivid' ] . prose a : hover { text-decoration-color : var ( - - accent ) ; text-decoration-thickness : 2 px }
}
html [ data-ui = 'vivid' ] . prose code { font-family : var ( - - mono ) ; font-size : .88 em ;
background : var ( - - accent - soft ) ; color : var ( - - accent ) ;
@@ -72,15 +101,60 @@ html[data-ui='vivid'] .prose blockquote {margin:1.8em 0;padding:16px 20px;
font-family : var ( - - serif ) ; font-size : 1.05 em ;
color : var ( - - soft ) ; font-style : italic ; }
html [ data-ui = 'vivid' ] . prose ul { padding-left : 1.3 em }
/* 设计稿漏了 ol,默认 40px 缩进和 ul 对不上;序号比圆点宽,给多一点 */
html [ data-ui = 'vivid' ] . prose ol { padding-left : 1.6 em }
html [ data-ui = 'vivid' ] . prose li { margin-bottom : .55 em }
html [ data-ui = 'vivid' ] . prose hr { border : 0 ; border-top : 1 px dashed var ( - - line - strong ) ; margin : 2.5 em 0 }
/* 分隔线收成 60px 居中(参考),比整幅虚线安静 */
html [ data-ui = 'vivid' ] . prose hr { border : 0 ; border-top : 1 px solid var ( - - line - strong ) ;
width : 60 px ; margin : 3.5 em auto ; }
/* 图:设计稿没写,插图会顶满整列、和上下文字紧贴 */
html [ data-ui = 'vivid' ] . prose img { max-width : 100 % ; height : auto ; border-radius : var ( - - radius - sm ) }
html [ data-ui = 'vivid' ] . prose p > img { margin : 2 em 0 }
html [ data-ui = 'vivid' ] . prose figure { margin : 2 em 0 }
html [ data-ui = 'vivid' ] . prose figcaption { margin-top : 1 em ; font-size : .875 em ; line-height : 1.5 ;
color : var ( - - muted ) ; text-align : center ; }
/* 标签用 home.css 里那个共用的 .tg(纯文本 #标签),不加自己的一套。
「标签」二字的小标也去掉了:有 # 就是标签,再来两个字是重复。
这里只补一点纵向内边距 —— 详情页的标签是链接,12.5px 裸文字只有 ~18px 高,
手机上不好点;不画背景不画边框,观感不变。 */
html [ data-ui = 'vivid' ] . paper . end { margin-top : 40 px ; padding-top : 24 px ; border-top : 1 px dashed var ( - - line - strong ) ;
html [ data-ui = 'vivid' ] . paper > . end { margin-top : 40 px ; padding-top : 24 px ; border-top : 1 px dashed var ( - - line - strong ) ;
display : flex ; gap : 14 px ; flex-wrap : wrap ; align-items : center ; }
html [ data-ui = 'vivid' ] . paper . end . tg { padding : 6 px 0 }
html [ data-ui = 'vivid' ] . paper > . end . tg { padding : 6 px 0 }
/* ==========================================================================
把 classic 的 .prose 挡回去
--------------------------------------------------------------------------
styles.css 里那一段 .prose 规则是不带 data-ui 前缀的,vivid 也照样命中。
我们的规则特指度更高,但只覆盖自己声明过的属性 —— 没声明的就漏过来了。
实测漏过来的是这几条(都是量出来的,不是猜的):
· a 的 border-bottom → 和新的 text-decoration 叠成双下划线
· hr 的 height+background → 我们的 60px 细线被垫成 2px、颜色也变成 --line
· h3::after → 每条 h3 下面多一条 28×2px 的强调色横杠
· ul/ol 的 1.1em 下边距 → 和正文 1.5em 的段距对不齐
· blockquote 里末段 p → 下边距没被吃掉,引用块底部多半行空
· pre 的 1px 边框 → 深色代码块外多一圈发丝线
· h4 → 用 classic 的 16.5px(和正文字号一样大,不成层级)
下面逐条认领。tokens.css 里那段防线处理的是 .stat/.toolbar/.chip 那类组件外壳,
正文这一摊放在这里,改正文的人一眼能看到。
========================================================================== */
html [ data-ui = 'vivid' ] . prose a { border-bottom : 0 }
html [ data-ui = 'vivid' ] . prose hr { height : 0 ; background : none }
html [ data-ui = 'vivid' ] . prose h3 :: after { content : none }
html [ data-ui = 'vivid' ] . prose ul ,
html [ data-ui = 'vivid' ] . prose ol { margin : 1.5 em 0 }
html [ data-ui = 'vivid' ] . prose blockquote p : last-child { margin-bottom : 0 }
html [ data-ui = 'vivid' ] . prose pre { border : 0 }
html [ data-ui = 'vivid' ] . prose h4 { margin : 1.4 em 0 .5 em ; font-size : 1.05 em ; font-weight : 700 ;
letter-spacing : -.01 em ; color : var ( - - ink ) ; }
/* 首字下沉:设计稿里没有这条,classic 漏过来的是固定 52px。参考站(innei.in 余白模式)
也有首字下沉,那就认领成自己的,按 2.4em 走、跟着正文字号缩放。 */
html [ data-ui = 'vivid' ] . prose > p : first-of-type :: first-letter { float : left ;
font-family : var ( - - serif ) ; font-size : 2.4 em ; line-height : 1 ;
margin : .06 em .18 em 0 0 ; color : var ( - - accent ) ; }
/* 短文不做首字下沉:正文第一句就是全部,压一个大字进去反而像截断
(classic 也是这么分的,它用 .prose-short 关掉) */
html [ data-ui = 'vivid' ] . prose . prose-note > p : first-of-type :: first-letter { float : none ;
font-family : inherit ; font-size : inherit ; line-height : inherit ; margin : 0 ; color : inherit ; }
html [ data-ui = 'vivid' ] . back { display : inline-flex ; align-items : center ; gap : 6 px ;
font-size : 13 px ; font-weight : 700 ; color : var ( - - accent ) ;
margin-bottom : 20 px ; padding : 6 px 0 ;