唯杰地图 logo唯杰地图
VJMAP
EN

科技感视觉规范(默认风格)

vjvp/references/visual-style.md 8.9 KB60 行
原文

用户拿到的大屏应当“一眼高科技”:深色渐变底、霓虹渐变标题、发光数值、半透明渐变面板、统一的装饰语言。生成时默认按本文执行,除非用户明确要浅色/简约风。成品参考 ../../../../data/综合大屏/科技风/(01 科技蓝、02 荧光青、03 深空紫、04 极光绿,均可直接导入对照)。

1. 配色 token(四套预设,按行业选一套;同屏只用一套主色 + 1~2 个点缀色)

套系 页面背景(渐变) 面板底(渐变) 面板边框 主色/光色 次级文字
科技蓝(能源/政务) linear-gradient(180deg,#020A18 0%,#081A38 55%,#04101F 100%) linear-gradient(160deg,rgba(10,28,56,0.72),rgba(5,16,36,0.78)) #14335F #00E5FF / #38BDF8 / #2E8BFF #7FA8D9
荧光青(工业/设备) linear-gradient(180deg,#021512 0%,#06231D 55%,#021008 100%) linear-gradient(165deg,rgba(7,42,36,0.88),rgba(3,20,16,0.94)) #0F4D42 #00FFC6 / #00FFA8 #4FA08F
深空紫(城市/交通) linear-gradient(180deg,#07041A 0%,#150B38 55%,#0A0524 100%) linear-gradient(160deg,rgba(32,20,68,0.74),rgba(14,8,34,0.82)) #322562 #8B5CF6 / #A78BFA / #E879F9 #9C8CD0
极光绿(运维/互联网) linear-gradient(180deg,#02120E 0%,#04281E 55%,#02140C 100%) linear-gradient(160deg,rgba(8,52,38,0.72),rgba(3,22,14,0.82)) #125842 #2EE6A8 / #22D3EE #4FA083

状态色全套系通用:正常 #00FFA8、警示 #FFC940/#FBBF24、告警 #FF5C7A、信息 #22D3EE。

渐变随处可用:页面/组件 background-color、graphical-color、text-font.color 都直接接受 CSS linear-gradient(...) 串——这是科技感的核心手段。

2. 装饰语言(每屏标配,全部用现有组件拼)

  • 顶栏:标题用渐变文字 + 发光(text-font.color 渐变 + font-shadow-color 主色 + font-shadow-blur:16~18 + font-spacing:4~6),下衬一条横向光带(basic-graphical rect 高 2px,linear-gradient(90deg, rgba(主色,0) 0%, rgba(主色,0.85) 50%, rgba(主色,0) 100%)),配英文小字副标题(11px 次级色 font-spacing:5)、右上 basic-timer 实时时间、左上 hexagon 渐变六边形角标。
  • 页面顶部辉光:全宽 basic-graphical rect(高 ~200),linear-gradient(180deg, rgba(主色,0.13~0.16), transparent),no-events:true。
  • 面板:渐变底 + 1px 边框 + 圆角 12~14;面板标题=「左侧 4×20 渐变光条(basic-graphical) + 17px 粗体标题 + 1px 半透明分隔线」三件套。
  • KPI 数值:basic-card,数值用渐变字 + 同色 font-shadow(blur 12~14),上叠 13px 次级色 label 文本;不同指标可用不同光色(蓝/绿/青/琥珀)。
  • 实时感:LIVE 圆点用 basic-graphical circle + animation-display:true, animation-type:"blink", animation-loop:true;卡片底部可加「渐变光条」(linear-gradient(90deg,主色,transparent) 高 3px)。
  • 图表:轴线/分割线用面板边框同族暗色(如 chart-axis-color:"#1B3A66"),标签用次级文字色;折线 smooth:true + show-symbol:false + show-area:true + area-opacity:24~32;柱图 bar-radius:4~6 + show-label:true(柱体已内置主色→透明渐变);横向排行用 direction:"horizontal"。bar-color/line-color 取套系主色,第二图换点缀色。
  • 所有纯装饰元素一律 no-events:true,避免挡交互。

3. 铺满守则(必须,否则播放有黑边/留白)

每个 type:"screen" 节点 options 必写 layout-profile + fullscreen-mode,按需求三选一:

需求 配方 参考示例
固定大屏(演示/16:9 LED) "layout-profile":"canvas-scale" + "fullscreen-mode":"fill-uniform" + "fill-auto-expand":true + static 布局 + 1920×1080 绝对坐标;内容排满整个画布(左右栏贴边 24px、底部留白 ≤24px) 科技风 01/02、布局 13
百分比自适应(任意窗口比例) "layout-profile":"canvas-percent" + "fullscreen-mode":"responsive" + static + 顶层组件全部 "geometry-unit":"percent",面板再开 "panel-content-fit":"contain"(盒子百分比响应、内部 px 内容跟随缩放不被裁) 科技风 03、布局 12
流式自适应(内容回流) "layout-profile":"flow-fluid" + "fullscreen-mode":"responsive" + 根页面 fluid+column+"fluid-wrap":"nowrap" ;行高 px 的横条 + adaptive 主区吃满剩余;行内再嵌 fluid row 等分面板 科技风 04、布局 03

⚠️ 任何 fluid 容器(页面或面板),只要主轴上有 adaptive 子项,就必须显式 "fluid-wrap":"nowrap":容器默认 wrap,而 adaptive 子项的 flex-basis 是 100%,于是每个子项各占一行/一列——横向等分列会竖着堆叠、后面的列被顶出画布(看起来"没有内容")。只有卡片墙(子项 px 宽、刻意换行)才留 wrap,见 data/布局/适配/04。各行高度 px+adaptive 之和也不要超过视口。

⚠️ 流式页面的 fullscreen-mode 只能是 responsive(画像 flow-fluid 的族就一个值)。写成 fill-uniform/stretch 会把长页锁死在 1920×1080 设计画布里再整体缩放,失去回流与滚动。

既要不变形又要铺满用 "fill-uniform"(等比铺满·锚左上,空白由页面背景延展填充,背景为纯色/渐变时无缝);严格保比可裁边用 "adaptive"。全部 8 值(含 fit-width/fit-height 单轴铺满滚动)见 envelope.md §4.1。

不变形 + 不留空(推荐替代 stretch 的第四种配方):"fullscreen-mode":"fill-uniform" + 主视觉配锚点 "responsive-x":"left-right","responsive-y":"top-bottom"(侧栏用 "right"+"top-bottom");懒得逐个配就在页面写 "fill-auto-expand":true 自动拉伸无锚点的地图/三维/组态/表格/布局容器,以及够大的卡片/图表。容器要保持卡片数不变写 "canvas-grow":"scale"。见 envelope.md §4.1。

自动填充内置四条构图规则(生成布局可以依赖):① 叠在主视觉之上的浮层(图例/工具条)不挡主视觉扩展;② 左右边距对称(两侧 ≥96px 且基本相等)的居中盒扩展时保持居中;③ 并排的多列/多行填充候选按设计尺寸比例分配增量(后续列平移、间距不变、叠在其上的浮层跟着走;增量 <48px 或列带间隙里有非成员时回退为带尾吃满);④ 被撑大的分组面板/固定面板(static、panel-content-fit 缺省/none)内部子项按同一套锚点+填充跟到新盒,贴原点且尺寸≈面板的铺满子项直接跟满(递归三层)。说明顶栏比主视觉宽但右侧还有贴边控件时,主视觉吃到控件左缘而不是钉在顶栏;右缘栏不拆横排 KPI 末卡(不依赖是否有装饰边框);装饰边框撑开后框内横排/说明块再分一次增量;与贴边栏水平重叠的同侧小控件作为侧栏簇一起走。 ⚠️ 仍需注意:组件平移只发生在「右缘窄栏 / 侧栏簇」与「并排带后续列」两处,要「贴着某条边走」必须写锚点;容器内要精确控制仍优先 "geometry-unit":"percent" 或锚点。

子布局在铺满下怎么选(容器都会被撑大,区别是子项怎么跟):

  • layout-row(栅格 12 列×1 行)/ layout-grid(分割树):两轴按轨道比例自动回流,最省心,「三列等宽」首选这个而不是三个并排候选。
  • layout-column(流式纵向 "fluid-wrap":"nowrap"):想让子项一起长高,子项写 "fluid-width-type":"adaptive" + "fluid-height-type":"adaptive"(固定大屏页拖入时已是这个默认);写成 "fluid-height-type":"px" 则增量堆在末尾留空。
  • layout-flow-row(流式横向 wrap):子项保持 px、按宽度自然换行。换行容器里主轴不能用 adaptive(每项 flex-basis:100% 会各占一行而塌掉,见 gotchas #3);要均分宽度就把容器改 nowrap 并给子项 adaptive。
  • layout-fixed-panel / group-panel(static):内部子项由嵌套回流跟到新盒(铺满子项直接跟满),或自己写锚点 / percent。

4. 数据循环容器卡片(设备墙等)

  • 根页面/外层主区用 static(坐标固定),流式只放进 data-repeater 内部(卡片墙)。卡片区固定 unit-size + overflow:"scroll-y";详情面板固定 position+size,互不挤压。
  • 卡片状态变色:dataRules(如 状态=告警) + 单元模板内文本的 conditionalStyles 切 text-font——行作用域下按本行求值,每张卡独立变色(见科技风 02)。
  • 需要实时变化用 mock 连接器 + refreshInterval(3~5s),字段 wave(波动)/walk(游走)/sequence(序号),并在 connectionData 放一帧初始 rows 便于编辑态预览。