From cfc9c82bfdfaf514fffa8ed04d331506326b349c Mon Sep 17 00:00:00 2001 From: secret-deus <1263403710@qq.com> Date: Thu, 16 Jul 2026 22:01:35 +0800 Subject: [PATCH] fix(notebook): fluid five-col layout that survives zoom Drop display:contents flattening that left a empty right side. Use fr/clamp columns, hide doodles under 1200px, stack under 900px, zero edge padding on mobile. --- src/components/Footer.astro | 6 ++ src/components/Header.astro | 34 ++++++- src/components/SideDoodles.astro | 155 ++++++++++++++++--------------- src/layouts/BaseLayout.astro | 83 ++++++++++++++++- src/pages/index.astro | 23 +++++ src/styles/board.css | 106 +++++++++++++++++---- src/styles/global.css | 28 +++++- 7 files changed, 334 insertions(+), 101 deletions(-) diff --git a/src/components/Footer.astro b/src/components/Footer.astro index 9098a39..b98f0f4 100644 --- a/src/components/Footer.astro +++ b/src/components/Footer.astro @@ -26,4 +26,10 @@ const year = new Date().getFullYear(); footer p { margin: 0.2rem 0; } + @media (max-width: 720px) { + footer { + padding-left: 0; + padding-right: 0; + } + } diff --git a/src/components/Header.astro b/src/components/Header.astro index b9ca9f9..a0b052a 100644 --- a/src/components/Header.astro +++ b/src/components/Header.astro @@ -26,7 +26,7 @@ import HeaderLink from './HeaderLink.astro'; transition: background var(--dur) var(--ease-out); } nav { - width: var(--wide); + width: 100%; max-width: 100%; margin: 0 auto; padding: 0 var(--page-pad-x); @@ -35,6 +35,7 @@ import HeaderLink from './HeaderLink.astro'; justify-content: space-between; gap: 1rem; min-height: 3.1rem; + box-sizing: border-box; } .brand { font-weight: 700; @@ -97,5 +98,36 @@ import HeaderLink from './HeaderLink.astro'; font-weight: 700; background: var(--accent-soft); } + + @media (max-width: 720px) { + nav { + min-height: 2.85rem; + gap: 0.45rem; + padding-left: 0; + padding-right: 0; + } + .brand { + font-size: 0.92em; + flex-shrink: 0; + max-width: 42%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .links { + gap: 0; + flex: 1; + justify-content: flex-end; + min-width: 0; + } + .links :global(a) { + padding: 0.35rem 0.4rem; + font-size: 0.82em; + } + .links :global(a::after) { + left: 0.4rem; + right: 0.4rem; + } + } diff --git a/src/components/SideDoodles.astro b/src/components/SideDoodles.astro index af4faea..9f88a64 100644 --- a/src/components/SideDoodles.astro +++ b/src/components/SideDoodles.astro @@ -1,12 +1,18 @@ --- /** - * 大屏两侧随性手绘:物理公式 / 曲线。 - * 摆放与角度在客户端随机,每次刷新略有不同。 + * 五列布局的左右图案列:物理公式 / 曲线涂鸦。 + * rail=left|right;角度随机;无分界线。 */ +interface Props { + rail?: 'left' | 'right'; +} +const { rail = 'left' } = Astro.props; --- -
+ > + )} + diff --git a/src/pages/index.astro b/src/pages/index.astro index 1062bea..ff06e11 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -317,4 +317,27 @@ const latestDate = (() => { color: #0b1a16; } } + + @media (max-width: 720px) { + .site-name { + font-size: 1.28rem; + } + .folder-cards { + grid-template-columns: 1fr 1fr; + gap: 0.4rem; + } + .folder-card { + padding: 0.5rem 0.4rem; + } + .featured h2 { + font-size: 1.08rem; + } + .cta-row { + gap: 0.4rem; + } + .btn { + padding: 0.4rem 0.75rem; + font-size: 0.82rem; + } + } diff --git a/src/styles/board.css b/src/styles/board.css index 25a216b..2f89bdf 100644 --- a/src/styles/board.css +++ b/src/styles/board.css @@ -1,30 +1,45 @@ -/* 全站信息板:用侧栏模块填内容,不是拉宽留白 */ +/* 信息板:流体比例列,任意缩放铺满;无分界线;不依赖 display:contents */ .page-board { display: grid; - grid-template-columns: minmax(0, 1fr) minmax(240px, 300px); - gap: 0.9rem; + /* 主 + 右 */ + grid-template-columns: minmax(0, 1.45fr) minmax(0, 0.85fr); + gap: clamp(0.5rem, 1.5vw, 1rem); align-items: start; - width: min(1180px, 100%); - margin: 0 auto; + width: 100%; + max-width: 100%; + margin: 0; + border: none; + box-sizing: border-box; } .page-board.with-left { - grid-template-columns: minmax(210px, 280px) minmax(0, 1fr) minmax(240px, 300px); + /* 左 | 主 | 右 —— 全 fr,缩放时按比例伸缩 */ + grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.55fr) minmax(0, 0.95fr); } -/* 首页也是三栏但中间更宽 */ +/* 首页:主栏略宽 */ .page-board.home-board { - grid-template-columns: minmax(200px, 260px) minmax(0, 1.25fr) minmax(230px, 280px); + grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.65fr) minmax(0, 0.9fr); +} + +.page-board > * { + min-width: 0; + max-width: 100%; } .page-board .board-main, .page-board .board-side, .page-board .board-left { min-width: 0; + width: 100%; + max-width: 100%; display: flex; flex-direction: column; gap: 0.75rem; + border: none; + box-shadow: none; + box-sizing: border-box; } .panel { @@ -246,43 +261,95 @@ color: rgb(var(--muted)); } -/* 正文页:主栏阅读 + 右侧信息 */ +/* 正文页:主 + 侧,流体比例 */ .prose-board { display: grid; - grid-template-columns: minmax(0, 1fr) minmax(240px, 300px); - gap: 1rem; + grid-template-columns: minmax(0, 1.55fr) minmax(0, 0.75fr); + gap: clamp(0.5rem, 1.5vw, 1.1rem); align-items: start; - width: min(1120px, 100%); - margin: 0 auto; + width: 100%; + max-width: 100%; + margin: 0; + border: none; + box-sizing: border-box; +} + +.prose-board > * { + min-width: 0; + max-width: 100%; } .prose-board .article { min-width: 0; - max-width: 46rem; + width: 100%; + max-width: none; + border: none; } .prose-board .board-side { position: sticky; top: 4rem; + border: none; + width: 100%; } -@media (max-width: 960px) { +/* 窄于约 900px 或高缩放:单列,主内容优先 */ +@media (max-width: 900px) { .page-board, .page-board.with-left, + .page-board.home-board, .prose-board { - grid-template-columns: 1fr; + display: flex; + flex-direction: column; + grid-template-columns: none; + width: 100%; + max-width: 100%; + gap: 0.85rem; + } + + .page-board .board-main, + .page-board .board-side, + .page-board .board-left, + .prose-board .article, + .prose-board .board-side { + width: 100%; + min-width: 0; + max-width: none; + flex: none; } .prose-board .board-side { position: static; } + .page-board .board-main, .prose-board .article { - max-width: none; + order: 1; + } + .page-board .board-left { + order: 2; + } + .page-board .board-side, + .prose-board .board-side { + order: 3; } } @media (max-width: 720px) { + .page-board, + .page-board.with-left, + .prose-board { + gap: 0.65rem; + } + + .panel { + padding: 0.4rem 0 0.55rem; + } + + .metric-grid { + grid-template-columns: 1fr 1fr; + } + .dense-item { grid-template-columns: 1fr; gap: 0.2rem; @@ -292,5 +359,10 @@ flex-direction: row; align-items: center; gap: 0.45rem; + flex-wrap: wrap; + } + + .dense-title { + font-size: 0.95rem; } } diff --git a/src/styles/global.css b/src/styles/global.css index 62a9b5a..2597435 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -17,9 +17,10 @@ --shadow-lift: none; --radius: 8px; /* 阅读正文略宽一点;列表/首页用更宽壳,减少大屏两侧空旷 */ - --content: 46rem; - --wide: min(72rem, calc(100vw - 3rem)); - --page-pad-x: clamp(1rem, 3vw, 2rem); + --content: min(46rem, 100%); + /* 宽页铺满可用宽度,缩放时跟视口走 */ + --wide: 100%; + --page-pad-x: clamp(0.75rem, 2vw, 1.75rem); /* 动效节奏:短、稳、不抢戏 */ --ease-out: cubic-bezier(0.22, 1, 0.36, 1); @@ -86,6 +87,7 @@ main { max-width: 100%; margin: 0 auto; padding: 2rem var(--page-pad-x) 3.5rem; + box-sizing: border-box; /* 页面进入 */ animation: page-in var(--dur-slow) var(--ease-out) both; } @@ -455,11 +457,29 @@ blockquote:has(> p:first-child) { } @media (max-width: 720px) { + :root { + --page-pad-x: 0; + } body { font-size: 14.5px; } + /* 手机端左右贴边归零 */ main { - padding: 1.35rem 0 2.75rem; + padding: 1.15rem 0 2.5rem; + } + main.wide { + width: 100%; + } + h1 { + font-size: 1.28rem; + } + pre { + font-size: 0.8em; + padding: 0.75rem 0.8rem; + max-width: 100%; + } + .tag-row { + gap: 0.3rem; } }