跳到正文
册页

展示

FigureBand - 数字带

一排被数出来的事实,只用细线分隔,此外什么都没有。

用法

TSX
import { FigureBand } from '@misoto22/folio'

说明

带完整边框的响应式指标组,每项数据保留词条与数值的语义关系。

结构

FigureBand anatomy
部件说明
容器查询外层必填包在列表外面的一个普通 <div>,而且必须有:容器查询解析的是某个祖先容器,绝不会是声明容器的那个元素自己。它的 w-full 同样承重——contain: inline-size 计算宽度时不看内容,所以作为一个按内容收缩的 flex 项,它解析成了零,整条带子渲染出来是两列 0px。
带必填那个 <dl>:上下各一条 --rule 细线,外层到 @3xl 之前是两列、之后是四列——这是关于这条带子有多宽的判断,不是关于窗口有多宽的判断。
格子必填一个数字一个 <div>。每一档分栏宽度点名的是那些不开新行的格子,而不是先加一条线再收回去,所以永远不会有一条边被画到最后一列之外。
词条必填那个 <dt>:数值上方的大写等宽眉标。
数值必填那个 <dd>,用标题字脸排,字号随 scale 取 --fs-lead 或 --fs-sub。
注解同一个词条下的第二个 <dd>——一段趋势、一个限定,或者第二个事实。

实践建议

推荐

  • 给它两个或者四个数字。这个网格在 @3xl 之前是两列、之后是四列,所以三个在两种排法里都留一个洞,五个在带子铺成四列之后留三个洞。
  • 一条给页面做支撑、而不是页面本身的带子,用 scale="sub":--fs-lead 是横幅标题那一档,所以一个用 lead 排出来的辅助数字,是在和页面自己的主题抢。
  • 每个数字按它数的那件事来做 key——id 是必填而不是可选,因为它就是 React 的 key,而用下标做 key 的话,列表一重排,下一次渲染的数字就落到了上一个词条底下。

避免

  • 别往 note 里放一个句子。数值和注解是同一个 <dt> 下的两个 <dd>,所以读屏软件会把它们当作同一个词条的两个值来念:「文章:48,今年 +6」讲得通,一个从句讲不通。
  • 别用 className 里的视口断点去设列数。这条带子读的是容器查询,所以写在它上面的 sm:grid-cols-4,在 1440px 窗口里那条 390px 的侧栏中就是错的——而那正是它取代掉的做法。
  • figures={[]} 渲染出来是 null,所以一条被喂了空数组的带子既不留下线,也不留下空状态——如果“什么都没有”本身就是新闻,那得由调用处说出来。

示例

default

四个数字,它和二一样,是仅有的几个排得下的个数之一:容器到 @3xl 之前是两列、之后是四列,所以三个在两种排布下都留个洞,五个则留三个。id 是必填而不是可选,因为它就是 React 的 key——一旦列表重排,用下标当 key 会把下一次渲染的数字塞到上一个标签底下。

Releases
12
Median build
2m 14s
down from 3m 40s
Rollbacks
0
Uptime
99.98%
measured at the edge

a supporting band

同一条数字带,降一档。scale="sub" 是给那些为页面作支撑、而不是页面本身的数字用的——lead 是这条带做标题的那一档,所以一条支撑性的带设在那儿,是在跟它上面的标题抢同一级台阶。两个数字在任何宽度下都填满一行,这也是为什么值得去拿的个数是二和四。

Retrieval rewrite

Chunking moved from a fixed window to headings, and the citation panel started reading the same rows the answer did.

Median latency
240ms
from 610ms
Answers with a citation
96%
from 71%

a note is a second value

什么该放进 note,什么不该。数值和注记是同一个 dt 底下的两个 dd,所以读屏软件会把它们当作同一个术语的两个值来读:「文章:48,另外今年 6 篇」成立,而一个解释原因的从句不成立。把它压在一个趋势、一个限定条件,或者第二个事实上——那种句子属于这条带周围的正文。

Posts
48
+6 this year
Frames
1,204
38 rolls
Projects
11
3 shipped
Words
86k
English and Chinese

in a narrow column

同样这四个数字,放在一个 24rem 的列里,仍然是两个一排。这条带读的是容器查询,不是视口,所以它在判断的是这条带自己有多宽,而不是窗口有多宽——这也是为什么通过 className 往上写一个 sm:grid-cols-4,在一个 1440px 页面的侧栏里会是错的。把列拉宽,同样的标记自己就变成四个一排。

Components
61
Tokens
145
Examples
147
Peer deps
2

无障碍

  • 用 <dl>:每个格子是一个词条和它的值,这是一堆 div 表达不了的。