打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

目前wiki关闭了自行注册账号的功能,如需注册账号,请查阅Help:注册账号

用户:ChenM0M/playground:修订间差异

来自RIA | Wiki
ChenM0M留言 | 贡献
ChenM0M留言 | 贡献
无编辑摘要
第13行: 第13行:
     <div class="pg-hero-sub">探索 MediaWiki TemplateStyles 的边界——这里没有 JavaScript,只有纯 CSS 的可能性。每一个组件、每一种交互,都在证明"无脚本"并不等于"无能力"。</div>
     <div class="pg-hero-sub">探索 MediaWiki TemplateStyles 的边界——这里没有 JavaScript,只有纯 CSS 的可能性。每一个组件、每一种交互,都在证明"无脚本"并不等于"无能力"。</div>
     <div class="pg-hero-meta">MediaWiki 1.39 · TemplateStyles · CSS-only · Zero JavaScript</div>
     <div class="pg-hero-meta">MediaWiki 1.39 · TemplateStyles · CSS-only · Zero JavaScript</div>
     <div class="pg-hero-nav">[[#pg-accord|手风琴]] · [[#pg-tabs|面板切换]] · [[#pg-hover|悬浮特效]] · [[#pg-gallery|色彩画廊]] · [[#pg-bars|进度条]] · [[#pg-typo|排版系统]] · [[#pg-grad|渐变卡片]] · [[#pg-timeline|时间线]]</div>
     <div class="pg-hero-nav">[[#pg-accord|手风琴]] · [[#pg-tabs|Tabs]] · [[#pg-hover|悬浮特效]] · [[#pg-gallery|色彩画廊]] · [[#pg-bars|进度条]] · [[#pg-grad|渐变卡片]] · [[#pg-timeline|时间线]] · [[#pg-stepper|步骤条]] · [[#pg-quotes|引言]] · [[#pg-patterns|图案]] · [[#pg-textfx|文字特效]] · [[#pg-pixel|像素画]] · [[#pg-anims|动画集]] · [[#pg-masonry|瀑布流]] · [[#pg-tooltips|提示]] · [[#pg-compare|对比]]</div>
   </div>
   </div>
</div>
</div>
第28行: 第28行:
   <div class="pg-muted">悬浮任意数字卡片查看交互效果。</div>
   <div class="pg-muted">悬浮任意数字卡片查看交互效果。</div>
   <div class="pg-stats pg-mt12">
   <div class="pg-stats pg-mt12">
     <div class="pg-stat"><span class="pg-stat-num">15</span><span class="pg-stat-label">组件类型</span></div>
     <div class="pg-stat"><span class="pg-stat-num">25</span><span class="pg-stat-label">组件类型</span></div>
     <div class="pg-stat"><span class="pg-stat-num">6</span><span class="pg-stat-label">Hover 特效</span></div>
     <div class="pg-stat"><span class="pg-stat-num">6</span><span class="pg-stat-label">@keyframes 动画</span></div>
     <div class="pg-stat"><span class="pg-stat-num">12</span><span class="pg-stat-label">色彩方案</span></div>
     <div class="pg-stat"><span class="pg-stat-num">8</span><span class="pg-stat-label">CSS 图案</span></div>
     <div class="pg-stat"><span class="pg-stat-num">0</span><span class="pg-stat-label">行 JavaScript</span></div>
     <div class="pg-stat"><span class="pg-stat-num">0</span><span class="pg-stat-label">行 JavaScript</span></div>
   </div>
   </div>
第340行: 第340行:
       <span class="pg-tl-text">响应式适配</span>
       <span class="pg-tl-text">响应式适配</span>
       <span class="pg-tl-desc">通过 @media 断点(720px / 480px)实现移动端优雅降级,确保所有组件在窄屏下依然可用。</span>
       <span class="pg-tl-desc">通过 @media 断点(720px / 480px)实现移动端优雅降级,确保所有组件在窄屏下依然可用。</span>
    </div>
  </div>
</div>
<div class="pg-zone" id="pg-stepper">
  <div class="pg-section-h pg-h-step">步骤条 · Stepper(CSS 计数器)</div>
  <div class="pg-muted">利用 <code>counter-increment</code> 和 <code>::before</code> 伪元素自动生成序号,无需在 HTML 中手写数字。悬浮时连接线变色。</div>
  <div class="pg-stepper pg-mt12">
    <div class="pg-step">
      <span class="pg-step-title">分析需求</span>
      <span class="pg-step-desc">明确功能目标与约束条件(MediaWiki 1.39 TemplateStyles 白名单),确定可用 CSS 属性范围。</span>
    </div>
    <div class="pg-step">
      <span class="pg-step-title">设计系统</span>
      <span class="pg-step-desc">建立色彩方案(6 主色 + 6 中性色)、排版阶梯(6 级字号)和间距系统,确保视觉一致性。</span>
    </div>
    <div class="pg-step">
      <span class="pg-step-title">构建组件</span>
      <span class="pg-step-desc">逐个实现原子组件——从 Hero、Banner 到 Tabs、FAQ,验证每个组件在 wiki 环境中的兼容性。</span>
    </div>
    <div class="pg-step">
      <span class="pg-step-title">集成测试</span>
      <span class="pg-step-desc">将所有组件整合到单一页面,测试 :target 锚点切换在 MediaWiki 中的实际行为和兼容性。</span>
    </div>
    <div class="pg-step">
      <span class="pg-step-title">响应式适配</span>
      <span class="pg-step-desc">通过 @media 断点确保所有组件在窄屏下依然可用,添加 480px / 720px 两级降级策略。</span>
    </div>
  </div>
</div>
<div class="pg-zone" id="pg-quotes">
  <div class="pg-section-h pg-h-quote">引言卡片 · Blockquote(::before 装饰)</div>
  <div class="pg-muted">利用 <code>::before</code> 伪元素和 <code>content: "\201c"</code> 生成大号引号装饰,无需额外图片或图标。</div>
  <div class="pg-quotes pg-mt12">
    <div class="pg-quote">
      <span class="pg-quote-text">在限制中寻找创造力——这正是 CSS-only 方案的魅力所在。约束不是枷锁,而是框架。</span>
      <span class="pg-quote-author">Playground 设计理念</span>
      <span class="pg-quote-role">CSS-only 交互探索</span>
    </div>
    <div class="pg-quote">
      <span class="pg-quote-text">最好的代码是不需要存在的代码。没有 JavaScript,就没有 JavaScript 的 bug。</span>
      <span class="pg-quote-author">TemplateStyles 哲学</span>
      <span class="pg-quote-role">零脚本安全策略</span>
    </div>
    <div class="pg-quote">
      <span class="pg-quote-text">一个像素的差异可能微不足道,但一百个精心调校的像素,就是专业与业余的分界线。</span>
      <span class="pg-quote-author">视觉设计原则</span>
      <span class="pg-quote-role">门户页美学标准</span>
    </div>
    <div class="pg-quote">
      <span class="pg-quote-text">:hover 是微交互的起点,:target 是状态管理的终点。两者组合,覆盖 90% 的信息展示需求。</span>
      <span class="pg-quote-author">CSS 交互定律</span>
      <span class="pg-quote-role">伪类交互模型</span>
    </div>
  </div>
</div>
<div class="pg-zone" id="pg-patterns">
  <div class="pg-section-h pg-h-pattern">CSS 图案背景 · Pattern Backgrounds</div>
  <div class="pg-muted">八种纯 CSS 图案——全部通过 <code>repeating-linear-gradient</code>、<code>radial-gradient</code> 和多层 <code>linear-gradient</code> 实现,无需图片资源。</div>
  <div class="pg-pattern-grid pg-mt12">
    <div class="pg-pattern-item"><div class="pg-pattern-swatch pg-pat-stripe"></div><div class="pg-pattern-label">斜条纹</div></div>
    <div class="pg-pattern-item"><div class="pg-pattern-swatch pg-pat-hstripe"></div><div class="pg-pattern-label">水平条纹</div></div>
    <div class="pg-pattern-item"><div class="pg-pattern-swatch pg-pat-grid"></div><div class="pg-pattern-label">网格线</div></div>
    <div class="pg-pattern-item"><div class="pg-pattern-swatch pg-pat-dot"></div><div class="pg-pattern-label">波点</div></div>
    <div class="pg-pattern-item"><div class="pg-pattern-swatch pg-pat-diag"></div><div class="pg-pattern-label">反对角线</div></div>
    <div class="pg-pattern-item"><div class="pg-pattern-swatch pg-pat-checker"></div><div class="pg-pattern-label">棋盘</div></div>
    <div class="pg-pattern-item"><div class="pg-pattern-swatch pg-pat-diamond"></div><div class="pg-pattern-label">菱形</div></div>
    <div class="pg-pattern-item"><div class="pg-pattern-swatch pg-pat-zigzag"></div><div class="pg-pattern-label">锯齿</div></div>
  </div>
</div>
<div class="pg-zone" id="pg-textfx">
  <div class="pg-section-h pg-h-textfx">文字特效 · Text Effects</div>
  <div class="pg-muted">所有效果均通过 <code>text-shadow</code>、<code>text-decoration</code> 和 <code>letter-spacing</code> 实现。"模糊揭示"效果需要鼠标悬浮。</div>
  <div class="pg-row pg-mt12">
    <div class="pg-col">
      <div class="pg-text-fx">
        <span class="pg-fx-label">text-shadow · 发光效果</span>
        <span class="pg-fx-glow">CSS 发光文字</span>
      </div>
      <div class="pg-text-fx">
        <span class="pg-fx-label">text-shadow · 立体效果</span>
        <span class="pg-fx-3d">CSS 立体文字</span>
      </div>
      <div class="pg-text-fx">
        <span class="pg-fx-label">text-shadow · 长阴影</span>
        <span class="pg-fx-long">Long Shadow</span>
      </div>
      <div class="pg-text-fx">
        <span class="pg-fx-label">text-shadow · 描边效果</span>
        <span class="pg-fx-outline">CSS 描边文字</span>
      </div>
    </div>
    <div class="pg-col">
      <div class="pg-text-fx">
        <span class="pg-fx-label">text-shadow · 模糊揭示(hover 查看)</span>
        <span class="pg-fx-blur">悬浮鼠标揭示文字</span>
      </div>
      <div class="pg-text-fx">
        <span class="pg-fx-label">text-decoration · 波浪下划线</span>
        <span class="pg-fx-wavy">这是波浪下划线效果 wavy underline</span>
      </div>
      <div class="pg-text-fx">
        <span class="pg-fx-label">text-decoration · 虚线下划线</span>
        <span class="pg-fx-dotted">这是虚点下划线效果 dotted underline</span>
      </div>
      <div class="pg-text-fx">
        <span class="pg-fx-label">letter-spacing · 超宽字距</span>
        <span class="pg-fx-spacing">Wide Spacing</span>
      </div>
    </div>
  </div>
</div>
<div class="pg-zone" id="pg-pixel">
  <div class="pg-section-h pg-h-pixel">像素艺术 · Box-shadow Pixel Art</div>
  <div class="pg-muted">仅用一个 6×6px 的 <code>&lt;span&gt;</code> 元素 + 多重 <code>box-shadow</code>,逐像素"画"出图形——零图片,零 canvas。</div>
  <div class="pg-pixel-grid pg-mt12">
    <div class="pg-pixel-card">
      <span class="pg-pixel-canvas pg-px-heart"></span>
      <span class="pg-pixel-label">爱心 Heart</span>
      <span class="pg-pixel-desc">26 个 box-shadow 像素点</span>
    </div>
    <div class="pg-pixel-card">
      <span class="pg-pixel-canvas pg-px-star"></span>
      <span class="pg-pixel-label">星星 Star</span>
      <span class="pg-pixel-desc">23 个 box-shadow 像素点</span>
    </div>
    <div class="pg-pixel-card">
      <span class="pg-pixel-canvas pg-px-arrow"></span>
      <span class="pg-pixel-label">箭头 Arrow</span>
      <span class="pg-pixel-desc">10 个 box-shadow 像素点</span>
    </div>
  </div>
</div>
<div class="pg-zone" id="pg-outlines">
  <div class="pg-section-h pg-h-outline">双层边框 · Outline Effects</div>
  <div class="pg-muted">利用 <code>outline</code> + <code>outline-offset</code> 在元素的 <code>border</code> 之外再叠加一层边框,悬浮时展开。</div>
  <div class="pg-outline-grid pg-mt12">
    <div class="pg-outline-card pg-oc-expand">
      <span class="pg-oc-label">外扩实线</span>
      <span class="pg-oc-desc">outline-offset: 4px</span>
    </div>
    <div class="pg-outline-card pg-oc-dashed">
      <span class="pg-oc-label">外扩虚线</span>
      <span class="pg-oc-desc">outline: dashed</span>
    </div>
    <div class="pg-outline-card pg-oc-contrast">
      <span class="pg-oc-label">对比色双框</span>
      <span class="pg-oc-desc">border ≠ outline color</span>
    </div>
  </div>
</div>
<div class="pg-zone" id="pg-anims">
  <div class="pg-section-h pg-h-anim">动画集合 · @keyframes Gallery</div>
  <div class="pg-muted">六种 <code>@keyframes</code> 动画——旋转、呼吸灯、弹跳、横向滑入、扫光骨架屏和打字机光标。全部纯 CSS,持续循环播放。</div>
  <div class="pg-anim-grid pg-mt12">
    <div class="pg-anim-card">
      <span class="pg-anim-demo pg-ad-spin"></span>
      <span class="pg-anim-label">旋转 Spin</span>
      <span class="pg-anim-desc">rotate 360deg · linear</span>
    </div>
    <div class="pg-anim-card">
      <span class="pg-anim-demo pg-ad-breathe"></span>
      <span class="pg-anim-label">呼吸灯 Breathe</span>
      <span class="pg-anim-desc">opacity 0.4→1 · ease</span>
    </div>
    <div class="pg-anim-card">
      <span class="pg-anim-demo pg-ad-bounce"></span>
      <span class="pg-anim-label">弹跳 Bounce</span>
      <span class="pg-anim-desc">translateY -10px · ease</span>
    </div>
    <div class="pg-anim-card">
      <span class="pg-anim-demo pg-ad-slide"></span>
      <span class="pg-anim-label">滑入 Slide In</span>
      <span class="pg-anim-desc">translateX -20px · ease</span>
    </div>
    <div class="pg-anim-card">
      <span class="pg-anim-demo pg-ad-shimmer"></span>
      <span class="pg-anim-label">扫光 Shimmer</span>
      <span class="pg-anim-desc">骨架屏加载效果</span>
    </div>
    <div class="pg-anim-card">
      <span class="pg-ad-blink">输入中</span>
      <span class="pg-anim-label">光标 Cursor Blink</span>
      <span class="pg-anim-desc">border-right · step-end</span>
    </div>
  </div>
</div>
<div class="pg-zone" id="pg-masonry">
  <div class="pg-section-h pg-h-mason">瀑布流 · Masonry Layout</div>
  <div class="pg-muted">利用 <code>column-count</code> + <code>break-inside: avoid</code> 实现类 Pinterest 的瀑布流排列,不同高度的卡片自动填充列空间。</div>
  <div class="pg-masonry pg-mt12">
    <div class="pg-masonry-item pg-mi-tall">
      <span class="pg-masonry-title">瀑布流原理</span>
      <span class="pg-masonry-text">CSS <code>column-count</code> 将容器分为指定列数,子元素按列优先顺序排列。配合 <code>break-inside: avoid</code> 确保单个卡片不被断列。</span>
    </div>
    <div class="pg-masonry-item pg-mi-short">
      <span class="pg-masonry-title">三列布局</span>
      <span class="pg-masonry-text">桌面端默认 3 列。</span>
    </div>
    <div class="pg-masonry-item pg-mi-med">
      <span class="pg-masonry-title">响应式降级</span>
      <span class="pg-masonry-text">720px 时降为 2 列,480px 时降为 1 列,确保移动端可读性。无需 JavaScript 监听。</span>
    </div>
    <div class="pg-masonry-item pg-mi-short">
      <span class="pg-masonry-title">零依赖</span>
      <span class="pg-masonry-text">不需要 Masonry.js。</span>
    </div>
    <div class="pg-masonry-item pg-mi-tall">
      <span class="pg-masonry-title">适用场景</span>
      <span class="pg-masonry-text">适合展示不等高的内容卡片:新闻摘要、知识条目、图片画廊描述等。每张卡片的高度完全由内容决定。</span>
    </div>
    <div class="pg-masonry-item pg-mi-med">
      <span class="pg-masonry-title">悬浮效果</span>
      <span class="pg-masonry-text">鼠标悬浮时边框变紫、增加阴影浮起感,增强交互反馈。</span>
    </div>
    <div class="pg-masonry-item pg-mi-short">
      <span class="pg-masonry-title">CSS-only</span>
      <span class="pg-masonry-text">纯样式,零脚本。</span>
    </div>
    <div class="pg-masonry-item pg-mi-med">
      <span class="pg-masonry-title">列间距控制</span>
      <span class="pg-masonry-text"><code>column-gap: 12px</code> 控制列间距,与卡片的 <code>margin-bottom</code> 配合形成均匀的网格间隙。</span>
    </div>
  </div>
</div>
<div class="pg-zone" id="pg-tooltips">
  <div class="pg-section-h pg-h-tip">悬浮提示 · CSS Tooltip</div>
  <div class="pg-muted">利用 <code>::after</code> 伪元素 + <code>attr(data-tip)</code> 读取自定义属性,悬浮时显示提示文字气泡——零 JavaScript。</div>
  <div class="pg-tooltip-row pg-mt12">
    <div class="pg-tip" data-tip="display: flex 是最安全可靠的布局方式">Flexbox</div>
    <div class="pg-tip" data-tip="CSS 网格,高版本浏览器支持">Grid</div>
    <div class="pg-tip" data-tip="CSS 变量,TemplateStyles 可能不支持">Custom Props</div>
    <div class="pg-tip" data-tip="支持旋转、位移、缩放等变换">Transform</div>
  </div>
</div>
<div class="pg-zone" id="pg-compare">
  <div class="pg-section-h pg-h-compare">对比卡片 · Comparison</div>
  <div class="pg-muted">展示 TemplateStyles 环境下**可用**与**不可用**的 CSS 能力对比。</div>
  <div class="pg-compare pg-mt12">
    <div class="pg-compare-col">
      <div class="pg-compare-header pg-ch-yes">✅ 可安全使用</div>
      <div class="pg-compare-body">
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> display: flex / inline-flex</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> transition &amp; @keyframes</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> ::before / ::after + content</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> :hover / :target 伪类</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> linear-gradient / radial-gradient</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> box-shadow / text-shadow</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> counter-increment / counter-reset</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> outline / outline-offset</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> column-count / column-gap</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> @media 响应式断点</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> position: absolute / relative</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-yes">✓</span> transform: rotate / translate</div>
      </div>
    </div>
    <div class="pg-compare-col">
      <div class="pg-compare-header pg-ch-no">🚫 禁止或高风险</div>
      <div class="pg-compare-body">
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> JavaScript 注入</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> &lt;input&gt; / &lt;label&gt; / &lt;button&gt;</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> checkbox / radio hack</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> position: fixed / sticky</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> pointer-events / user-select</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> -webkit-background-clip: text</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> -webkit-text-fill-color</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> perspective / transform-style</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> backface-visibility</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> filter (blur / grayscale 等)</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> mix-blend-mode</div>
        <div class="pg-compare-item"><span class="pg-ci-icon pg-ci-no">✗</span> clip-path / mask-image</div>
      </div>
     </div>
     </div>
   </div>
   </div>
第346行: 第637行:
<div class="pg-zone pg-zone-footer">
<div class="pg-zone pg-zone-footer">
   <div class="pg-section-h pg-h-footer">关于此页</div>
   <div class="pg-section-h pg-h-footer">关于此页</div>
   <div class="pg-muted">Playground 是 CSS 组件的技术探索空间,所有代码遵循 MediaWiki 1.39 TemplateStyles 安全策略。欢迎在此基础上复用和扩展组件。</div>
   <div class="pg-muted">Playground 是 CSS 组件的技术探索空间,所有代码遵循 MediaWiki 1.39 TemplateStyles 安全策略。当前展示 25 种组件,涵盖布局、交互、动画、装饰和信息展示五大类别。欢迎在此基础上复用和扩展组件。</div>
   <div class="pg-footer-links">[[#pg-top|返回顶部]] · [[分类:FST|分类:FST]]</div>
   <div class="pg-footer-links">[[#pg-top|返回顶部]] · [[分类:FST|分类:FST]]</div>
</div>
</div>

2026年2月14日 (六) 17:38的版本


RIA Wiki · Playground
Playground
探索 MediaWiki TemplateStyles 的边界——这里没有 JavaScript,只有纯 CSS 的可能性。每一个组件、每一种交互,都在证明"无脚本"并不等于"无能力"。
MediaWiki 1.39 · TemplateStyles · CSS-only · Zero JavaScript
   试验场
   本页是 CSS 组件的展示与探索空间。所有交互仅依赖 :hover:target 两种伪类,完全兼容 MediaWiki 的安全策略。
数据概览
悬浮任意数字卡片查看交互效果。
25组件类型
6@keyframes 动画
8CSS 图案
0行 JavaScript
手风琴 · FAQ(:target 交互)
点击问题标题展开答案,点击"↩ 收起"或其他问题折叠当前项。纯 CSS :target 实现。
       MediaWiki 的安全策略严格限制页面内 JavaScript 注入。TemplateStyles 只允许 CSS 属性白名单,因此我们利用 :target 伪类和锚点切换来实现折叠/展开等常见交互模式,既安全又可维护。
       ↩ 收起
       当 URL 的 hash 片段(如 #pg-q2)与页面某元素的 id 匹配时,该元素即处于 :target 状态。我们通过 CSS 控制 max-heightopacity 来实现平滑的展开/折叠动画。
       ↩ 收起
       高风险或常被限制的属性包括:position: fixed/stickyperspectivetransform-stylebackface-visibilitypointer-eventsuser-select 以及基于表单元素的 checkbox/radio hack 等。这些在 TemplateStyles 的白名单策略下可能被直接拦截。
       ↩ 收起
       移动端没有真正的 hover 事件,因此 :hover 效果主要服务于桌面端体验。移动端的交互应当依赖 :target(锚点切换),或在信息层面确保在无 hover 状态下也可阅读完整内容。
       ↩ 收起
面板切换 · Tabs(:target 交互)
点击标签切换内容面板,无需 JavaScript。利用 :target 控制面板显隐与 tab 高亮。
布局系统
基于 display: flex 的响应式布局是 TemplateStyles 中最可靠的布局手段。通过 flex-wrap: wrapmin-width 配合,无需 Grid 也能实现灵活的多列排版。辅以 @media 断点,可以在移动端自动降级为单列。
色彩策略
门户页的色彩应当克制——主色只用于强调标签、边框和标题色条。背景保持白/极浅灰,避免大面积彩色块。渐变色建议只在卡片、进度条等小面积元素上使用,不用于全屏背景。
交互模式
MediaWiki 中只有两种安全的 CSS 交互手段::hover(微交互:背景、边框、阴影变化)和 :target(锚点切换:Tabs、FAQ 展开等)。将这两者组合使用,已经能覆盖绝大多数信息门户的交互需求。
Hover 微交互展示
六种不同的悬浮效果,仅使用 borderbackgroundbox-shadowcolor 实现。将鼠标悬浮在卡片上查看效果。
     
     边框变色
     border-color 过渡
     
     背景渐变
     background gradient
     
     阴影浮起
     box-shadow elevation
     
     左色条
     border-left accent
     
     底部色条
     border-bottom accent
     
     色彩反转
     dark inversion
引用块 · Callout
四种语义化引用块,适用于提示、成功、警告和危险信息。
ℹ️ 信息提示
TemplateStyles 允许在任何 wiki 页面内加载自定义 CSS,只需在页面头部引用 <templatestyles src="样式页名" /> 即可生效。
✅ 操作成功
所有组件已通过 TemplateStyles 安全验证,可直接部署到 MediaWiki 1.39 站点。
⚠️ 注意事项
请勿使用 position: fixedpointer-eventsuser-select——这些属性可能被站点白名单拦截。
🚫 不可用
JavaScript 注入、表单标签(<input><label><button>)以及 checkbox/radio hack 均被 MediaWiki 安全策略禁止。
进度条 · Status Bar(CSS 动画)
纯 CSS 渐变填充条,悬浮时触发脉冲动画(@keyframes)。无 JavaScript,无 canvas。
布局能力 · Flexbox85%
色彩系统 · Gradient72%
静态交互 · :hover95%
状态切换 · :target58%
动画能力 · @keyframes40%
排版系统 · Typography
字号阶梯
巨型标题 2.4em
大标题 1.8em
区域标题 1.3em
正文段落:TemplateStyles 在 MediaWiki 1.39 中提供了一种安全的、页面级别的自定义样式加载方式。
辅助说明文字 0.88em — 用于注释、元信息、次要描述
最小文字 0.78em — 用于版本号、技术标注、脚注
标签系统 · Badges
       Purple
       Blue
       Green
       Orange
       Pink
       Dark
       Default
色彩系统 · Color Palette
主色板
Violet
Azure
Mint
Amber
Coral
Rose
中性色板
Charcoal
Slate
Silver
Smoke
Snow
White
渐变色卡片 · Gradient Cards
六种预设渐变方案,悬浮时呈现阴影浮起效果。适合用于大面积色块、Hero 背景或强调区域。
     Sunset
     温暖的日落色调
     135deg · #f093fb → #f5576c
     Ocean
     深海到浅海的过渡
     135deg · #4facfe → #00f2fe
     Forest
     生机盎然的自然绿
     135deg · #43e97b → #38f9d7
     Night Sky
     深邃的夜空蓝
     135deg · #1e3c72 → #2a5298
     Candy
     甜蜜的糖果色
     135deg · #fa709a → #fee140
     Slate Teal
     沉稳的深色专业感
     135deg · #2c3e50 → #4ca1af
时间线 · Timeline
竖线时间线:左侧色条 + 圆点节点,悬浮时节点填色。展示 position: absoluteborder 的组合运用。
     
     Phase 1
     基础组件
     实现 Hero、Banner、Section Header、Muted 文字等基础原子组件。
     
     Phase 2
     交互层
     加入 :hover 微交互(边框、阴影、背景渐变)与 :target 状态切换(Tabs、FAQ)。
     
     Phase 3
     色彩与排版
     建立完整的色彩系统(6 主色 + 6 中性色)和排版阶梯(6 级字号)。
     
     Phase 4
     动画层
     引入 @keyframes 脉冲动画和 transition 过渡,在 TemplateStyles 白名单内探索动效的极限。
     
     Phase 5
     响应式适配
     通过 @media 断点(720px / 480px)实现移动端优雅降级,确保所有组件在窄屏下依然可用。
步骤条 · Stepper(CSS 计数器)
利用 counter-increment::before 伪元素自动生成序号,无需在 HTML 中手写数字。悬浮时连接线变色。
     分析需求
     明确功能目标与约束条件(MediaWiki 1.39 TemplateStyles 白名单),确定可用 CSS 属性范围。
     设计系统
     建立色彩方案(6 主色 + 6 中性色)、排版阶梯(6 级字号)和间距系统,确保视觉一致性。
     构建组件
     逐个实现原子组件——从 Hero、Banner 到 Tabs、FAQ,验证每个组件在 wiki 环境中的兼容性。
     集成测试
     将所有组件整合到单一页面,测试 :target 锚点切换在 MediaWiki 中的实际行为和兼容性。
     响应式适配
     通过 @media 断点确保所有组件在窄屏下依然可用,添加 480px / 720px 两级降级策略。
引言卡片 · Blockquote(::before 装饰)
利用 ::before 伪元素和 content: "\201c" 生成大号引号装饰,无需额外图片或图标。
     在限制中寻找创造力——这正是 CSS-only 方案的魅力所在。约束不是枷锁,而是框架。
     Playground 设计理念
     CSS-only 交互探索
     最好的代码是不需要存在的代码。没有 JavaScript,就没有 JavaScript 的 bug。
     TemplateStyles 哲学
     零脚本安全策略
     一个像素的差异可能微不足道,但一百个精心调校的像素,就是专业与业余的分界线。
     视觉设计原则
     门户页美学标准
     :hover 是微交互的起点,:target 是状态管理的终点。两者组合,覆盖 90% 的信息展示需求。
     CSS 交互定律
     伪类交互模型
CSS 图案背景 · Pattern Backgrounds
八种纯 CSS 图案——全部通过 repeating-linear-gradientradial-gradient 和多层 linear-gradient 实现,无需图片资源。
斜条纹
水平条纹
网格线
波点
反对角线
棋盘
菱形
锯齿
文字特效 · Text Effects
所有效果均通过 text-shadowtext-decorationletter-spacing 实现。"模糊揭示"效果需要鼠标悬浮。
       text-shadow · 发光效果
       CSS 发光文字
       text-shadow · 立体效果
       CSS 立体文字
       text-shadow · 长阴影
       Long Shadow
       text-shadow · 描边效果
       CSS 描边文字
       text-shadow · 模糊揭示(hover 查看)
       悬浮鼠标揭示文字
       text-decoration · 波浪下划线
       这是波浪下划线效果 wavy underline
       text-decoration · 虚线下划线
       这是虚点下划线效果 dotted underline
       letter-spacing · 超宽字距
       Wide Spacing
像素艺术 · Box-shadow Pixel Art
仅用一个 6×6px 的 <span> 元素 + 多重 box-shadow,逐像素"画"出图形——零图片,零 canvas。
     
     爱心 Heart
     26 个 box-shadow 像素点
     
     星星 Star
     23 个 box-shadow 像素点
     
     箭头 Arrow
     10 个 box-shadow 像素点
双层边框 · Outline Effects
利用 outline + outline-offset 在元素的 border 之外再叠加一层边框,悬浮时展开。
     外扩实线
     outline-offset: 4px
     外扩虚线
     outline: dashed
     对比色双框
     border ≠ outline color
动画集合 · @keyframes Gallery
六种 @keyframes 动画——旋转、呼吸灯、弹跳、横向滑入、扫光骨架屏和打字机光标。全部纯 CSS,持续循环播放。
     
     旋转 Spin
     rotate 360deg · linear
     
     呼吸灯 Breathe
     opacity 0.4→1 · ease
     
     弹跳 Bounce
     translateY -10px · ease
     
     滑入 Slide In
     translateX -20px · ease
     
     扫光 Shimmer
     骨架屏加载效果
     输入中
     光标 Cursor Blink
     border-right · step-end
瀑布流 · Masonry Layout
利用 column-count + break-inside: avoid 实现类 Pinterest 的瀑布流排列,不同高度的卡片自动填充列空间。
     瀑布流原理
     CSS column-count 将容器分为指定列数,子元素按列优先顺序排列。配合 break-inside: avoid 确保单个卡片不被断列。
     三列布局
     桌面端默认 3 列。
     响应式降级
     720px 时降为 2 列,480px 时降为 1 列,确保移动端可读性。无需 JavaScript 监听。
     零依赖
     不需要 Masonry.js。
     适用场景
     适合展示不等高的内容卡片:新闻摘要、知识条目、图片画廊描述等。每张卡片的高度完全由内容决定。
     悬浮效果
     鼠标悬浮时边框变紫、增加阴影浮起感,增强交互反馈。
     CSS-only
     纯样式,零脚本。
     列间距控制
     column-gap: 12px 控制列间距,与卡片的 margin-bottom 配合形成均匀的网格间隙。
悬浮提示 · CSS Tooltip
利用 ::after 伪元素 + attr(data-tip) 读取自定义属性,悬浮时显示提示文字气泡——零 JavaScript。
Flexbox
Grid
Custom Props
Transform
对比卡片 · Comparison
展示 TemplateStyles 环境下**可用**与**不可用**的 CSS 能力对比。
✅ 可安全使用
display: flex / inline-flex
transition & @keyframes
 ::before / ::after + content
:hover / :target 伪类
linear-gradient / radial-gradient
box-shadow / text-shadow
counter-increment / counter-reset
outline / outline-offset
column-count / column-gap
@media 响应式断点
position: absolute / relative
transform: rotate / translate
🚫 禁止或高风险
JavaScript 注入
<input> / <label> / <button>
checkbox / radio hack
position: fixed / sticky
pointer-events / user-select
-webkit-background-clip: text
-webkit-text-fill-color
perspective / transform-style
backface-visibility
filter (blur / grayscale 等)
mix-blend-mode
clip-path / mask-image