feat(webui): 横屏导航改为侧边(不再压底部),列表栏固定 320
用户:「导航栏在窄屏横屏情况下不也应当是在侧边吗?」。
横屏缺的是**竖向**空间:底部导航吃掉本就不多的高度(844×390 里它占了 61px),
而横向反而有余(824px)。所以在紧凑双栏下复用桌面那条 60px 图标栏,去掉底部导航。
## 顺带修掉"横屏没自适应"的另一半原因
列表栏宽度写的是 `lg:w-[320px]`,而 lg 断点是 **1024px** —— 844 宽的横屏不满足
⇒ 它退回 `w-full` ⇒ **列表吃掉整宽、详情被挤成一条缝**。之前我只改了排布方式,
没管这件事,所以横屏仍然不好用。现在按"紧凑双栏"这个**语义条件**给宽度
(`.compact-2pane .comm-pane { flex: 0 0 320px }`),而不是再猜一个像素断点。
**实测**(844×390):侧栏 60×380 在左侧;导航项 = 通信/日历/联系/我;底部导航**不存在**;
列表栏 x=80 宽 **320**;详情 434;无横向溢出。
This commit is contained in:
@ -225,7 +225,7 @@ export default function App() {
|
|||||||
// 它们已经是紧凑外壳的一部分,换的只是内容区的排布方式。
|
// 它们已经是紧凑外壳的一部分,换的只是内容区的排布方式。
|
||||||
if (compactTwoPane && hasList) {
|
if (compactTwoPane && hasList) {
|
||||||
return (
|
return (
|
||||||
<NarrowShell>
|
<NarrowShell sideNav>
|
||||||
<div className="flex-1 min-h-0 flex">{list}{main}</div>
|
<div className="flex-1 min-h-0 flex">{list}{main}</div>
|
||||||
</NarrowShell>
|
</NarrowShell>
|
||||||
);
|
);
|
||||||
@ -266,7 +266,28 @@ function PaneLoading() {
|
|||||||
* fixed 层级 + 遮罩的代价是:抽屉 `z-50` 铺满视口高度,把底部导航
|
* fixed 层级 + 遮罩的代价是:抽屉 `z-50` 铺满视口高度,把底部导航
|
||||||
* 最左那一项盖住点不到(实测 elementFromPoint 命中抽屉里的 SVG)。
|
* 最左那一项盖住点不到(实测 elementFromPoint 命中抽屉里的 SVG)。
|
||||||
*/
|
*/
|
||||||
function NarrowShell({ children }: { children: React.ReactNode }) {
|
function NarrowShell({
|
||||||
|
children,
|
||||||
|
sideNav = false
|
||||||
|
}: {
|
||||||
|
children: React.ReactNode;
|
||||||
|
/**
|
||||||
|
* 导航放侧边而不是底边(紧凑横屏用)。
|
||||||
|
*
|
||||||
|
* 用户(2026-09-14):「导航栏在窄屏横屏情况下不也应当是在侧边吗?」——
|
||||||
|
* 横屏缺的是**竖向**空间:底部导航会吃掉本就不多的高度,而横向反而有余。
|
||||||
|
* 复用桌面那条 60px 图标栏,而不是为横屏再写一套导航。
|
||||||
|
*/
|
||||||
|
sideNav?: boolean;
|
||||||
|
}) {
|
||||||
|
if (sideNav) {
|
||||||
|
return (
|
||||||
|
<div className="narrow-shell compact-2pane h-full flex bg-gray-50 overflow-hidden safe-frame">
|
||||||
|
<Sidebar />
|
||||||
|
{children}
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<div className="narrow-shell h-full flex flex-col bg-gray-50 overflow-hidden safe-frame">
|
<div className="narrow-shell h-full flex flex-col bg-gray-50 overflow-hidden safe-frame">
|
||||||
{children}
|
{children}
|
||||||
|
|||||||
@ -1131,3 +1131,23 @@ html.view-switch .glass-control,
|
|||||||
animation: none;
|
animation: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 紧凑双栏(手机横屏)下,列表栏固定 320px。
|
||||||
|
*
|
||||||
|
* 为什么不能靠 Tailwind:列表栏的宽度写的是 `lg:w-[320px]`,而 lg 断点是 1024px ——
|
||||||
|
* 844 宽的横屏**不满足** ⇒ 它退回 `w-full` ⇒ 列表吃掉整宽、详情被挤成一条缝
|
||||||
|
* (这正是用户最早说"横屏没自适应"背后的一半原因)。
|
||||||
|
* 这里按"紧凑双栏"这个语义条件给宽度,而不是再猜一个像素断点。
|
||||||
|
*/
|
||||||
|
.compact-2pane .comm-pane {
|
||||||
|
flex: 0 0 320px;
|
||||||
|
max-width: 320px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 详情栏占满剩下的宽度 */
|
||||||
|
.compact-2pane > .flex-1 > :last-child {
|
||||||
|
flex: 1 1 0%;
|
||||||
|
min-width: 0;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user