/* * Copyright: YC-2025Copyright * Description: 左侧菜单布局内容区等比缩放(封顶 1.25 倍) * 依赖:页面存在 .cg-main 元素;侧边栏宽度、内容基准宽见 components.css / 页面内联样式 * 说明:仅当缩放系数 > 1 时才写入内联样式;带 data-cg-no-zoom 的 .cg-main 不缩放(全屏类应用页) */ (function () { var main = document.querySelector('.cg-main'); if (!main || main.hasAttribute('data-cg-no-zoom')) { return; } var BASE_CONTENT_WIDTH = 1400; // 与 .cg-content 的 max-width 一致 var MAX_ZOOM = 1.6; // 封顶系数,覆盖 2K/4K 常见缩放场景(规格:2026-08-14-cg-layout-adaptive-fix-design) var MOBILE_BREAKPOINT = 768; // 移动端全宽布局(侧边栏隐藏),不缩放 var sidebar = document.querySelector('.cg-sidebar'); function sidebarWidth() { if (sidebar) { var w = sidebar.getBoundingClientRect().width; if (w > 0) { return w; } } return 220; // 默认与 .cg-sidebar 的 width 一致 } function computeZoom(viewportWidth, sw) { return Math.max(1, Math.min(MAX_ZOOM, (viewportWidth - sw) / BASE_CONTENT_WIDTH)); } function clear() { main.style.zoom = ''; main.style.marginLeft = ''; main.style.width = ''; } function apply() { var vw = document.documentElement.clientWidth; if (vw <= MOBILE_BREAKPOINT) { clear(); return; } var sw = sidebarWidth(); var zoom = computeZoom(vw, sw); if (zoom <= 1) { // 内容已铺满(vw − 侧边栏 ≤ 基准宽度),无需缩放 clear(); return; } main.style.zoom = zoom; // zoom 会同步放大元素自身的 margin 与 width,除以同一系数抵消: // - margin-left / zoom × zoom = 原侧边栏宽度,内容仍紧贴侧边栏 // - width / zoom × zoom = vw − 侧边栏宽度,避免超出视口产生横向滚动条 main.style.marginLeft = (sw / zoom) + 'px'; main.style.width = ((vw - sw) / zoom) + 'px'; } apply(); window.addEventListener('resize', apply); })();