算法艺术创作
algorithmic-art
通过代码和可调参数创作生成艺术与交互式视觉效果。
signal-to-noise-ratio【设计与创意】Use this skill whenever a design has too much or too little visual content competing for attention — when a screen "feels noisy," "looks busy," "feels cluttered," "feels empty," or when the user can't find the meaningful information amid decoration. Trigger when reviewing dashboards, data tables, settings pages, marketing surfaces, or any layout unde…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Signal-to-Noise Ratio (SNR) is the proportion of meaningful information to irrelevant or decorative content in a composition. The principle, borrowed from communications engineering, asserts that comprehension and aesthetic quality both improve as SNR rises — every visible element that doesn't carry meaning competes with the elements that do.
In a design, signal is anything that helps the viewer accomplish their task or understand the content: data, labels, controls, focal imagery, navigation paths, and the typographic and spatial structure that makes them legible. Noise is anything else: decorative borders that don't separate meaningful groups, illustrations unrelated to the content, repeated branding marks, gratuitous gradients, drop shadows on cards that don't elevate, status icons next to fields that have no status, hover effects on non-interactive elements. A high-SNR design strips away noise so the signal can land. A low-SNR design buries the signal in chrome.
A composition with high SNR feels effortless — the viewer reads it without working. A composition with low SNR feels exhausting in ways the viewer often can't articulate. They report it as "busy" or "overwhelming" or "cluttered," but the underlying mechanism is preattentive: the eye is constantly evaluating elements, and unproductive elements steal effort that could go to signal.
Low SNR also degrades the meaningful elements. A status badge is informative when it's the only colored element in a row; the same badge in a row of three other colored chips and an illustration becomes part of the visual texture and stops registering.
The distinction is always relative to the user's task. The same element can be signal on one surface and noise on another.
| Element | Signal when… | Noise when… |
|---|---|---|
| Border on a card | The card needs to be distinguished from surrounding content | Proximity already does the grouping work |
| Drop shadow | The element actually floats above context (popover, modal) | Applied to inert content (a card sitting on the page) |
| Illustration | It teaches, illustrates, or sets emotional tone for the moment | It fills space because the page felt empty |
| Status icon | Status varies and matters | Status is always the same or rarely changes |
| Background gradient | It separates a region or sets atmosphere | It's "polish" with no role |
| Divider | The two regions need stronger separation than spacing alone provides | Spacing already does the work |
| Color swatch | It encodes meaning the user must recognize | Brand decoration |
| Animated transition | It signals state change (open/close, success) | Eye-candy that interrupts focus |
The audit question is always: if I removed this, would the user lose information they need? If no, it's noise.
A practical four-step audit:
Most UIs have too many borders. Lines around cards, lines between rows, lines around inputs, lines around containers of inputs. Many of these are redundant — proximity, alignment, and background tint already group the content.
Procedure: in your CSS, set * { border: 0 !important; } temporarily. Look at the page. What broke? Anywhere structure collapsed, you needed the border. Restore those. Anywhere the page is fine without it, leave the border off.
Shadows are particularly easy to overuse. Default shadow-sm on every card, shadow-md on every popover, shadow-2xl on every dialog. A sea of shadowed elements feels like a toy box.
Reserve shadows for genuine elevation: a popover floating above content, a sticky header that needs to recess content under it, a dragged item that lifts.
Icons should make ambiguity disappear or save text space. An icon next to "Save" doesn't reduce ambiguity (the word is unambiguous) and doesn't save space (the button has the word too). Strip it.
Icons earn their pixels when:
If status is encoded in color, icon, and text, you have redundancy. Sometimes redundancy is correct (accessibility — color-blind users need a non-color signal). But if all three signals are firing for a low-stakes piece of metadata, you're spending three signals where one would do.
Low SNR (before):
<div class="kpi-tile" style="
border: 1px solid hsl(0 0% 88%);
border-radius: 0.75rem;
padding: 1.5rem;
background: linear-gradient(180deg, hsl(0 0% 99%), hsl(0 0% 96%));
box-shadow: 0 4px 12px rgba(0,0,0,0.04);
">
<div style="display: flex; align-items: center; gap: 0.5rem;">
<div style="background: hsl(220 90% 95%); padding: 0.5rem; border-radius: 0.5rem;">
<DollarIcon style="color: hsl(220 90% 50%);" />
</div>
<p style="font-size: 0.875rem; color: hsl(0 0% 35%); font-weight: 500;">
MONTHLY REVENUE
</p>
</div>
<p style="font-size: 2.5rem; font-weight: 600; margin-top: 1rem;">$48,200</p>
<div style="display: flex; align-items: center; gap: 0.25rem; margin-top: 0.5rem;">
<ChevronUpIcon style="color: hsl(142 70% 35%);" />
<p style="color: hsl(142 70% 35%); font-size: 0.875rem;">12% vs last month</p>
</div>
<hr style="margin: 1rem 0;" />
<p style="font-size: 0.75rem; color: hsl(0 0% 60%);">Last updated 3 minutes ago</p>
</div>
Audit: gradient (noise), shadow on inert card (noise), icon-in-tinted-square next to label (decoration, not load-bearing), divider before metadata (proximity does this for free).
High SNR (after):
<div class="kpi-tile" style="border: 1px solid hsl(0 0% 92%); border-radius: 0.5rem; padding: 1.5rem;">
<p style="font-size: 0.8rem; color: hsl(0 0% 45%);">Monthly revenue</p>
<p style="font-size: 2.5rem; font-weight: 600; margin-top: 0.25rem; font-variant-numeric: tabular-nums;">$48,200</p>
<p style="color: hsl(142 70% 30%); font-size: 0.875rem; margin-top: 0.25rem;">↑ 12% vs last month</p>
<p style="font-size: 0.75rem; color: hsl(0 0% 60%); margin-top: 1rem;">Last updated 3 minutes ago</p>
</div>
Same information, half the visual weight. The number — the actual signal — dominates.
Low SNR: chart with thick axis lines, every gridline labeled, 3D bars, drop shadows, gradient bar fills, legend repeated in tooltip, axis title in 18px bold.
High SNR: thin axis lines (or none), gridlines only at major intervals (light grey), flat bars, single-color fills, axis title in 12px lowercase, label values directly on bars when there are <8 of them.
<svg viewBox="0 0 320 200">
<!-- subtle baseline only -->
<line x1="40" y1="180" x2="310" y2="180" stroke="hsl(0 0% 80%)" stroke-width="1" />
<!-- bars, flat fill -->
<rect x="50" y="80" width="30" height="100" fill="hsl(220 70% 50%)" />
<rect x="100" y="60" width="30" height="120" fill="hsl(220 70% 50%)" />
<rect x="150" y="100" width="30" height="80" fill="hsl(220 70% 50%)" />
<rect x="200" y="40" width="30" height="140" fill="hsl(220 70% 50%)" />
<!-- value labels above bars (replace the y-axis entirely) -->
<text x="65" y="72" font-size="10" text-anchor="middle">42</text>
<text x="115" y="52" font-size="10" text-anchor="middle">58</text>
<text x="165" y="92" font-size="10" text-anchor="middle">31</text>
<text x="215" y="32" font-size="10" text-anchor="middle">71</text>
<!-- x labels -->
<text x="65" y="195" font-size="10" text-anchor="middle" fill="hsl(0 0% 45%)">Q1</text>
<text x="115" y="195" font-size="10" text-anchor="middle" fill="hsl(0 0% 45%)">Q2</text>
<text x="165" y="195" font-size="10" text-anchor="middle" fill="hsl(0 0% 45%)">Q3</text>
<text x="215" y="195" font-size="10" text-anchor="middle" fill="hsl(0 0% 45%)">Q4</text>
</svg>
The signal here is four numbers (Q1–Q4 values) and their relative magnitudes. Everything else is at the bare minimum needed to read them.
A common low-SNR pattern: every setting wrapped in its own card, every section heading colored in brand, every help text in a tinted callout box, "save" buttons under every section.
A high-SNR settings page uses one or two Card containers per section (proximity does the rest), section headings in normal text weight at the top of each section, help text in dim grey under the field it concerns, and a single "Save changes" button at the bottom (or auto-save with toast confirmation).
hierarchy — strong hierarchy raises SNR by making one element carry the message.proximity — proximity reduces the need for borders and dividers (which are often noise).horror-vacui — the impulse to fill empty space, which directly lowers SNR.highlighting — emphasis only works in low-noise environments.form-follows-function (aesthetics) — every form choice should derive from a function; SNR is the operational version.ockhams-razor (cognition / process) — among solutions that work, prefer the simplest.snr-densification — when SNR is too high (sterile, sparse), how to add signal density without adding noise.snr-decoration-removal — a structured audit method for removing decorative chrome.snr-emphasis-economy — how to spend emphasis (color, weight, size) sparingly so each instance lands.SNR is a discipline of subtraction. The pull toward addition is constant — every stakeholder wants their feature on the dashboard, every designer wants polish, every product manager wants a callout for the new thing. The job of the SNR-aware designer is to keep saying no — and yes only to the few things that earn their pixels.