| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>运输计划 · 无「装/送」文字区分 Demo</title>
- <style>
- :root {
- --load: #059669;
- --delivery: #0284c7;
- --text: #1e293b;
- --muted: #64748b;
- --border: #e2e8f0;
- --page: #f8fafc;
- }
- * { box-sizing: border-box; }
- body {
- margin: 0;
- padding: 32px 24px 64px;
- font-family: Inter, "PingFang SC", "Microsoft YaHei", system-ui, sans-serif;
- font-size: 14px;
- line-height: 1.5;
- color: var(--text);
- background: var(--page);
- }
- h1 { margin: 0 0 8px; font-size: 22px; font-weight: 700; }
- .lead { margin: 0 0 12px; color: var(--muted); max-width: 760px; }
- .hint {
- margin: 0 0 28px;
- padding: 10px 14px;
- max-width: 760px;
- border-radius: 8px;
- background: #ecfdf5;
- border: 1px solid #a7f3d0;
- font-size: 13px;
- color: #065f46;
- }
- .grid {
- display: grid;
- grid-template-columns: repeat(auto-fill, minmax(340px, 1fr));
- gap: 20px;
- }
- .card {
- background: #fff;
- border: 1px solid var(--border);
- border-radius: 10px;
- overflow: hidden;
- }
- .card__head {
- display: flex; align-items: center; justify-content: space-between; gap: 12px;
- padding: 14px 16px; border-bottom: 1px solid var(--border);
- }
- .card__title { margin: 0; font-size: 15px; font-weight: 700; }
- .badge {
- flex-shrink: 0; padding: 2px 8px; border-radius: 999px;
- font-size: 11px; font-weight: 600;
- }
- .badge--rec { color: #065f46; background: #ecfdf5; border: 1px solid #a7f3d0; }
- .badge--alt { color: #334155; background: #f1f5f9; border: 1px solid #cbd5e1; }
- .card__body { padding: 16px; }
- .card__note { margin: 12px 0 0; font-size: 12px; color: var(--muted); }
- .cell {
- padding: 10px 12px;
- border: 1px solid var(--border);
- border-radius: 8px;
- background: #fff;
- }
- .name { font-size: 13px; font-weight: 600; line-height: 1.45; word-break: break-word; }
- .sub { margin-top: 2px; font-size: 12px; line-height: 1.4; color: var(--muted); }
- .body { flex: 1; min-width: 0; }
- /* 图例:列头可放小图例 */
- .col-legend {
- display: flex; gap: 12px; margin-bottom: 8px;
- font-size: 11px; color: var(--muted);
- }
- .col-legend span { display: inline-flex; align-items: center; gap: 5px; }
- .col-legend i {
- display: inline-block; width: 10px; height: 10px; border-radius: 2px;
- }
- .col-legend i.load { background: var(--load); }
- .col-legend i.delivery { background: var(--delivery); }
- /* N1 左侧色条 */
- .n1 { display: flex; flex-direction: column; gap: 0; }
- .n1__row {
- display: flex; align-items: flex-start;
- padding: 4px 0 4px 10px;
- border-left: 3px solid transparent;
- }
- .n1__row--load { border-left-color: var(--load); }
- .n1__row--delivery { border-left-color: var(--delivery); }
- .n1__row + .n1__row {
- margin-top: 8px; padding-top: 8px;
- border-top: 1px dashed var(--border);
- }
- /* N2 时间轴 */
- .n2 { display: flex; flex-direction: column; }
- .n2__row {
- display: flex; align-items: flex-start; gap: 10px;
- padding: 2px 0 10px;
- }
- .n2__row:last-child { padding-bottom: 2px; }
- .n2__rail {
- flex-shrink: 0; display: flex; flex-direction: column; align-items: center; width: 12px;
- }
- .n2__dot {
- width: 10px; height: 10px; border-radius: 50%; z-index: 1;
- }
- .n2__dot--load { background: var(--load); }
- .n2__dot--delivery { background: var(--delivery); }
- .n2__line {
- flex: 1; width: 2px; min-height: 12px; margin-top: 2px; background: #cbd5e1;
- }
- .n2__row:last-child .n2__line { display: none; }
- /* N3 箭头图标 */
- .n3 { display: flex; flex-direction: column; gap: 0; }
- .n3__row {
- display: flex; align-items: flex-start; gap: 8px;
- padding: 2px 0;
- }
- .n3__row + .n3__row {
- margin-top: 8px; padding-top: 8px;
- border-top: 1px dashed var(--border);
- }
- .n3__icon {
- flex-shrink: 0;
- display: inline-flex; align-items: center; justify-content: center;
- width: 18px; height: 18px; margin-top: 1px;
- color: #fff; border-radius: 4px;
- }
- .n3__icon--load { background: var(--load); }
- .n3__icon--delivery { background: var(--delivery); }
- .n3__icon svg { width: 12px; height: 12px; display: block; }
- /* N4 仅顺序 + 极淡色点 */
- .n4 { display: flex; flex-direction: column; gap: 0; }
- .n4__row {
- display: flex; align-items: flex-start; gap: 8px;
- padding: 2px 0;
- }
- .n4__row + .n4__row {
- margin-top: 8px; padding-top: 8px;
- border-top: 1px dashed var(--border);
- }
- .n4__dot {
- flex-shrink: 0; width: 6px; height: 6px; margin-top: 6px;
- border-radius: 50%;
- }
- .n4__dot--load { background: var(--load); }
- .n4__dot--delivery { background: var(--delivery); }
- /* N5 流程箭头夹在中间 */
- .n5 { display: flex; flex-direction: column; gap: 4px; }
- .n5__row {
- display: flex; align-items: flex-start;
- padding: 4px 0 4px 10px;
- border-left: 3px solid transparent;
- }
- .n5__row--load { border-left-color: var(--load); }
- .n5__row--delivery { border-left-color: var(--delivery); }
- .n5__flow {
- display: flex; align-items: center; justify-content: flex-start;
- padding: 0 0 0 2px;
- color: #94a3b8; font-size: 11px; line-height: 1;
- }
- .n5__flow svg { width: 14px; height: 14px; }
- .legend {
- margin-top: 28px; padding: 16px 18px; max-width: 860px;
- border-radius: 10px; background: #fff; border: 1px solid var(--border);
- }
- .legend h2 { margin: 0 0 8px; font-size: 14px; }
- .legend ul { margin: 0; padding-left: 18px; color: var(--muted); font-size: 13px; }
- .legend li { margin: 4px 0; }
- .legend strong { color: var(--text); }
- </style>
- </head>
- <body>
- <h1>无「装 / 送」文字 · 如何表达装货与送货</h1>
- <p class="lead">
- 约定不变:<strong>上行 = 装货</strong>,<strong>下行 = 送货</strong>。色语义:绿 = 装、蓝 = 送。单元格内不再出现「装」「送」二字,靠色条 / 时间轴 / 图标 / 圆点表达。
- </p>
- <p class="hint">
- 建议:列头旁加一行小图例「■ 装货 ■ 送货」,新用户也能懂。下方 N1 / N2 已示范图例。
- </p>
- <div class="grid">
- <!-- N1 -->
- <section class="card">
- <div class="card__head">
- <h2 class="card__title">N1. 左侧色条</h2>
- <span class="badge badge--rec">推荐</span>
- </div>
- <div class="card__body">
- <div class="col-legend">
- <span><i class="load"></i>装货</span>
- <span><i class="delivery"></i>送货</span>
- </div>
- <div class="cell">
- <div class="n1">
- <div class="n1__row n1__row--load">
- <div class="body">
- <div class="name">宜昌市西陵区某某化工园 A 区 12 号</div>
- <div class="sub">2026-09-16 08:30</div>
- </div>
- </div>
- <div class="n1__row n1__row--delivery">
- <div class="body">
- <div class="name">武汉市东西湖区物流大道 88 号</div>
- <div class="sub">2026-09-16 16:00</div>
- </div>
- </div>
- </div>
- </div>
- <p class="card__note">无标签字;扫视靠左边线颜色。与当前结构最接近,只隐藏 label。</p>
- </div>
- </section>
- <!-- N2 -->
- <section class="card">
- <div class="card__head">
- <h2 class="card__title">N2. 时间轴圆点</h2>
- <span class="badge badge--rec">推荐</span>
- </div>
- <div class="card__body">
- <div class="col-legend">
- <span><i class="load"></i>装货</span>
- <span><i class="delivery"></i>送货</span>
- </div>
- <div class="cell">
- <div class="n2">
- <div class="n2__row">
- <div class="n2__rail">
- <span class="n2__dot n2__dot--load"></span>
- <span class="n2__line"></span>
- </div>
- <div class="body">
- <div class="name">宜昌市西陵区某某化工园 A 区 12 号</div>
- <div class="sub">2026-09-16 08:30</div>
- </div>
- </div>
- <div class="n2__row">
- <div class="n2__rail">
- <span class="n2__dot n2__dot--delivery"></span>
- <span class="n2__line"></span>
- </div>
- <div class="body">
- <div class="name">武汉市东西湖区物流大道 88 号</div>
- <div class="sub">2026-09-16 16:00</div>
- </div>
- </div>
- </div>
- </div>
- <p class="card__note">绿→蓝连线天然表达「先装后送」流程,地址/时间列尤其合适。</p>
- </div>
- </section>
- <!-- N3 -->
- <section class="card">
- <div class="card__head">
- <h2 class="card__title">N3. 入/出箭头图标</h2>
- <span class="badge badge--alt">备选</span>
- </div>
- <div class="card__body">
- <div class="cell">
- <div class="n3">
- <div class="n3__row">
- <span class="n3__icon n3__icon--load" title="装货" aria-label="装货">
- <!-- download-into = 装入 -->
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 3v12"/><path d="m7 10 5 5 5-5"/><path d="M5 21h14"/></svg>
- </span>
- <div class="body">
- <div class="name">宜昌市西陵区某某化工园 A 区 12 号</div>
- <div class="sub">2026-09-16 08:30</div>
- </div>
- </div>
- <div class="n3__row">
- <span class="n3__icon n3__icon--delivery" title="送货" aria-label="送货">
- <!-- upload-out = 送出 -->
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M12 21V9"/><path d="m7 14 5-5 5 5"/><path d="M5 3h14"/></svg>
- </span>
- <div class="body">
- <div class="name">武汉市东西湖区物流大道 88 号</div>
- <div class="sub">2026-09-16 16:00</div>
- </div>
- </div>
- </div>
- </div>
- <p class="card__note">↓ 装入 / ↑ 送出。无汉字但有语义;需统一全列表图标含义。</p>
- </div>
- </section>
- <!-- N4 -->
- <section class="card">
- <div class="card__head">
- <h2 class="card__title">N4. 色点前缀</h2>
- <span class="badge badge--alt">备选</span>
- </div>
- <div class="card__body">
- <div class="cell">
- <div class="n4">
- <div class="n4__row">
- <span class="n4__dot n4__dot--load" title="装货"></span>
- <div class="body">
- <div class="name">宜昌市西陵区某某化工园 A 区 12 号</div>
- <div class="sub">2026-09-16 08:30</div>
- </div>
- </div>
- <div class="n4__row">
- <span class="n4__dot n4__dot--delivery" title="送货"></span>
- <div class="body">
- <div class="name">武汉市东西湖区物流大道 88 号</div>
- <div class="sub">2026-09-16 16:00</div>
- </div>
- </div>
- </div>
- </div>
- <p class="card__note">最省空间;辨识弱于色条/时间轴,适合列很多、信息极密时。</p>
- </div>
- </section>
- <!-- N5 -->
- <section class="card">
- <div class="card__head">
- <h2 class="card__title">N5. 色条 + 中间流向箭头</h2>
- <span class="badge badge--alt">备选</span>
- </div>
- <div class="card__body">
- <div class="cell">
- <div class="n5">
- <div class="n5__row n5__row--load">
- <div class="body">
- <div class="name">宜昌市西陵区某某化工园 A 区 12 号</div>
- <div class="sub">2026-09-16 08:30</div>
- </div>
- </div>
- <div class="n5__flow" aria-hidden="true">
- <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M12 5v14"/><path d="m19 12-7 7-7-7"/></svg>
- </div>
- <div class="n5__row n5__row--delivery">
- <div class="body">
- <div class="name">武汉市东西湖区物流大道 88 号</div>
- <div class="sub">2026-09-16 16:00</div>
- </div>
- </div>
- </div>
- </div>
- <p class="card__note">中间 ↓ 强化「从装到送」;略占高度,多列重复时可能略吵。</p>
- </div>
- </section>
- </div>
- <div class="legend">
- <h2>怎么选</h2>
- <ul>
- <li><strong>N1 色条</strong>:改动最小(隐藏文字即可),适合所有配对列统一样式。</li>
- <li><strong>N2 时间轴</strong>:流程感最强,优先用在地址/时间这类「有先后」的列。</li>
- <li><strong>N3 图标</strong>:语义明确但要培训/图例,避免与别的操作图标混淆。</li>
- <li>无论哪种,列头或工具栏旁加「绿=装 / 蓝=送」小图例,可弥补去掉汉字后的学习成本。</li>
- </ul>
- </div>
- </body>
- </html>
|