语义化 CSS 系统 · 新资源

Pico CSS 设计系统.

Pico CSS 样式采用语义化 HTML,支持基于 rem 的响应式字号阶梯和主题变量。标准版、无类版和条件版的集成范围各不相同;本指南使用标准构建版本,展示带有原生展开面板和对话框行为的阅读偏好表单。

OpenDesign 指南9 个章节32 个参考条目原始应用指南
01

Pico CSS 设计系统界面预览

调整行宽和示例字号、切换外观,并在原生对话框中查看本地配置。

阅读配置与实时示例打开完整示例
官方 Pico CSS 2.1.1,采用语义化 HTML 和原版原生 JavaScript。· 实现参考
02

Pico CSS 设计系统设计参考

Pico CSS 2.1.1 默认编译后的样式表。最初定义的颜色为浅色主题。响应式根字号缩放会改变 rem 的像素值;不要假设每个视口的根字号都是 16px。阅读宽度和 800px 的布局断点均为应用层选择。

排版与节奏

来源
名称 / 规则值 / 配置用途
--pico-font-familyvar(--pico-font-family-sans-serif)系统无衬线字体族别名。
--pico-line-height1.5正文默认行高。
--pico-font-size100%响应式媒体规则生效前的初始根字号。
--pico-spacing1rem基础间距单位。
--pico-typography-spacing-vertical1rem文本垂直节奏。
--pico-grid-column-gapvar(--pico-spacing)原生 .grid 列之间的间距。
--pico-border-radius0.25rem控件/卡片的默认形状。
--pico-border-width0.0625rem默认边界粗细。
--pico-outline-width0.125rem焦点轮廓宽度。
--pico-form-element-spacing-vertical0.75rem输入框/按钮的垂直内边距。
--pico-form-element-spacing-horizontal1rem输入框/按钮的水平内边距。

浅色主题的主要角色

来源
名称 / 规则值 / 配置用途
--pico-primary#0172ad 链接/主要阅读文本颜色。
--pico-primary-background#0172ad 主按钮背景。
--pico-primary-hover#015887 悬停时的主要文本颜色。
--pico-primary-hover-background#02659a 悬停时的主要按钮界面表面。
--pico-primary-focusrgba(2, 154, 232, 0.5)焦点强调色。
--pico-primary-inverse#fff主要背景上的文本颜色。
--pico-background-color#fff页面界面表面。
--pico-color#373c44 正文默认文本颜色。
--pico-muted-color#646b79 次要文本。

响应式根字号

来源
名称 / 规则值 / 配置用途
Base100%若浏览器默认字号为 16px,则为 16px。
≥576px106.25%在相同假设下为 17px。
≥768px112.5%18px。
≥1024px118.75%19px。
≥1280px125%20px。
≥1536px131.25%21px。

标题字号与应用控件

来源
名称 / 规则值 / 配置用途
h12rem / 1.125官方标题字号与行高。
h21.75rem / 1.15官方二级标题。
h31.5rem / 1.175官方三级标题。
Reading measure48ch / 62ch / 72ch原有的可选最大行长。
Sample scale90–125%; step 5原有的范围限制,仅应用于示例文本。
Composition breakpoint800px原有的双列转为堆叠布局规则。
03

Pico CSS 设计系统完整指南

实用指南,介绍如何为真实界面选择、应用和评审此系统。

DESIGN-pico-css.md

完整指导、实现起点和源代码链接。

下载指南

Pico CSS 设计系统:简洁的语义化 HTML 界面表面

简洁的语义化 HTML 界面表面

Pico 为常见的 HTML 元素提供样式,无需为每个段落、字段或按钮都添加一长串组件类名。在此示例中,article 承载偏好设置卡片,其页眉和页脚划定边界,标签则包含原生 input/select 控件。main 元素使用 container,因为这里采用的是标准 Pico 构建版本,而非独立的无类分发版本。

摘自本 OpenDesign 指南

对于紧凑工具和内容驱动型界面,如果浏览器的原生控件已能满足需求,Pico 会非常实用。但它本身并不会将表单变成应用。完整的 JavaScript 负责阅读示例、审核快照和本地结果,浏览器则处理基础输入语义。

阅读配套规范

Pico CSS 设计系统主题变量与语义角色

主题变量与语义角色

默认的主要角色并不是一个不加区分地套用到所有地方的颜色。Pico 将主要文本、背景、悬停、焦点和反白值分别处理。参考表列出了实际的浅色主题定义,便于品牌定制时保留这些关系。阅读界面的标签使用主要文本角色;按钮则沿用 Pico 完整的组件样式。

外观切换开关会在 html 上设置 data-theme。显式指定 light 或 dark 属性时,将覆盖自动配色方案选择。移除该属性后,Pico 可以跟随浏览器的首选配色方案。演示采用显式的初始模式,以确保复选框与视觉外观保持同步。引入自定义主要配色时,请同时覆盖两种配色方案的定义;仅修改浅色根值不足以构成完整的深色主题。

阅读配套规范

Pico CSS 设计系统:响应式排版会改变整个字号比例

响应式排版会改变整个字号比例

Pico 会在多个视口宽度下调整根字号:初始为 100%,之后依次为 106.25%、112.5%、118.75%、125% 和 131.25%。在浏览器默认字号为 16px 时,这些值对应 16–21px。由于组件间距使用 rem,舒适的布局也会随着文本一同放大。因此,一个 rem 的设计令牌并不总是等于十六像素。

示例的滑块只会将 #sample 的 font-size 调整为其继承字号的相应百分比,不会改写 Pico 的根变量,也不会影响浏览器缩放设置。这样可以让设置控件保持稳定,并清楚地界定样式作用范围。原生输出会显示所选百分比。标题字号保留 Pico 默认值:h1 为 2rem,h2 为 1.75rem。

阅读配套规范

Pico CSS 设计系统:行宽与阅读布局

行宽与阅读布局

三种行宽是以 ch 为单位设定的自定义选项。它们限定最大宽度,不会强制文本超出所在栏宽。在移动设备上,示例内容可能窄于所选的最大宽度;这是响应式最大宽度的预期效果。即使选择较宽的行宽,也无需出现水平滚动。

自定义的 reading-layout 使用两列 minmax 布局,并在宽度低于 800px 时折叠为单列。这个断点仅适用于当前布局,并非 Pico 的官方断点。成对的审核/重置按钮使用 Pico 的网格辅助类,弹窗页脚则使用可换行的 flex 行布局。在窄屏上,保持设置面板易读比维持双列布局更重要。

阅读配套规范

Pico CSS 设计系统:通过有用的审核步骤进行原生校验

原生验证与实用的审核步骤

配置文件名称使用 required 和 minlength,并配有对应的简短说明。原生约束验证会阻止提交空值。脚本还会检查去除首尾空白后的值,避免仅输入两个空格就满足应用规则。发生 invalid 事件时,会添加 aria-invalid,以启用 Pico 的无效状态样式;输入时则会清除自定义错误和过期的无效状态属性。

选择框和范围滑块使用浏览器原生控件。它们会立即更新阅读示例;“审核配置文件”则会捕获单独的待应用对象。这个快照既是对话框中显示的文本,也是“在本地应用”所使用的数据,因此确认时描述的内容与实际应用的值不会不一致。

  1. 将配置文件名称留空,然后尝试审核配置文件。
  2. 输入名称,选择宽度,并调整示例字号。
  3. 查看快照;取消以继续编辑,或应用到本地状态。

阅读配套规范

Pico CSS 设计系统:真正的模态对话框,而非仅有样式的叠层

真正的模态对话框,而非仅设置样式的遮罩层

Pico 会为 dialog 及其文章内容设置样式,但不会提供应用层的 JavaScript。本示例调用 HTMLDialogElement.showModal。浏览器会将对话框置于顶层,使文档其余部分变为惰性状态,并提供原生的 Escape 键关闭行为。仅设置 open 属性会产生不同的非模态行为,本示例不会这样做。

对话框通过 aria-labelledby 指向其标题。关闭按钮带有明确的无障碍标签,“继续编辑”和“在本地应用”则清楚说明了两种结果。两个取消按钮都会调用 close,但不会更改已保存的状态。应用操作会将待应用的配置文件显示为可见文本,然后关闭对话框;它不会写入 localStorage,也不会发送请求。

阅读配套规范

Pico CSS 设计系统:使用原生披露组件展示补充说明

使用原生折叠控件展示补充说明

details/summary 组合用于说明哪些控件会影响示例,哪些不会。无需 JavaScript,它就能真正展开或收起,因为这种行为由 HTML 元素提供。summary 会提出清楚的问题,并且支持键盘操作。这段说明属于辅助内容,因此不会在主表单中插入另一个始终展开的面板。

不要仅仅因为闭合状态的截图看起来相似,就把 details 替换成带样式的标题。同样,外观选项输入仍保留 type=checkbox 和 role=switch,因此具有真实的二元状态。Pico 会为语义结构应用样式;而这些结构本身也承载了大部分交互约定。

  • article 用于创建视觉上分组的偏好设置界面表面。
  • details 和 summary 提供原生披露功能。
  • 使用 showModal 打开的 dialog 提供模态审核边界。

阅读配套规范

Pico CSS 设计系统:安装一次,确保示例可复现

安装一次,确保示例可复现

标准软件包包含编译后的 pico.min.css。将其复制到本地 assets 文件夹,在应用布局规则之前引入,并使用 defer 加载随附的 app.js。上文已提供完整标记、CSS 和脚本。本示例无需框架提供器、图标字体或第三方 JavaScript 插件。

始终使用标准样式表及其容器/网格类。无类构建版本采用不同的布局假设,条件构建版本则以不同方式限定样式范围;未经检查标记就互换这些发行版本,并非不会产生影响的优化。如果要在现有网站中添加 Pico,请先检查其元素选择器与现有表单和排版样式之间的相互作用,再决定是否全局应用。

阅读配套规范

Pico CSS 设计系统:调整标记之前先选择发行版本

调整标记前,先选择分发版本

本示例使用标准发行版本及其容器和网格辅助类。无类发行版本会改变布局假设,条件发行版本则会限定 Pico 样式的作用范围。选择发行版本应视为集成决策,而不是可以随意互换的文件体积优化。

在现有网站中,请检查元素选择器对现有标题、表单、文章和对话框的影响范围。阅读示例中的百分比字号属于局部覆盖,应保持局部;更改根字号也会改变 Pico 基于 rem 的间距和控件尺寸。确定文档哪些部分继承主题时,请确保外观属性与应用的偏好设置控件保持一致。

阅读配套规范

Pico CSS 设计系统:组件示例

完整的语义化阅读界面

标签包裹对应控件,article 创建设置卡片,details 提供披露功能,dialog 则包含审核内容。

html
<main class="container"><header><p class="kicker">PICO CSS / READING ROOM</p><h1>A calmer reading setup</h1><p>Adjust a local reading profile. Semantic HTML does most of the work.</p></header><div class="reading-layout"><article><header><h2>Reading preferences</h2></header><form id="preferences"><label for="reader">Profile name<input id="reader" name="reader" required minlength="2" placeholder="Weekend reader" aria-describedby="name-help"></label><small id="name-help">At least two characters. Saved only for this open preview.</small><label for="measure">Reading width<select id="measure"><option value="48">Narrow — 48 characters</option><option value="62" selected>Balanced — 62 characters</option><option value="72">Wide — 72 characters</option></select></label><label for="scale">Text size <output id="size-label">100%</output><input id="scale" type="range" min="90" max="125" step="5" value="100"></label><label><input id="night" type="checkbox" role="switch"> Dark appearance</label><div class="grid"><button type="submit">Review profile</button><button type="reset" class="secondary outline">Reset</button></div></form><footer id="saved" role="status">No profile applied yet.</footer></article><section class="reading-copy"><p class="kicker">A SHORT SAMPLE</p><h2>Make space for attention.</h2><div id="sample"><p>The margin is not leftover space. It gives each paragraph a clear beginning and lets the eye return to the next line without effort.</p><p>A reading interface can be quiet without becoming empty. Descriptive headings, useful contrast, and a predictable rhythm let the content remain in charge.</p></div><details><summary>What changes in this preview?</summary><p>Width changes the maximum line measure, text size scales only this sample, and the appearance switch changes Pico’s theme. These are local preferences, not browser accessibility settings.</p></details></section></div><small>Official Pico CSS 2.1.1. Native form, details, and dialog elements; original application behavior.</small></main><dialog id="review" aria-labelledby="review-title"><article><header><button id="close" aria-label="Close review" rel="prev"></button><h2 id="review-title">Review reading profile</h2></header><p id="review-text"></p><footer><button id="cancel" class="secondary">Keep editing</button><button id="apply">Apply locally</button></footer></article></dialog>

代码参考

  • Pico 为这些元素设置样式;浏览器 API 提供原生行为。
  • 通过 showModal 打开对话框,而不是添加 open 属性。

原始配置文件交互

实时样式、原生验证、安全的审核文本,以及本地应用/重置行为。

javascript
const $=id=>document.getElementById(id);let pending=null;
function update(){ $('sample').style.maxWidth=$('measure').value+'ch';$('sample').style.fontSize=$('scale').value+'%';$('size-label').value=$('scale').value+'%';document.documentElement.dataset.theme=$('night').checked?'dark':'light';}
for(const id of ['measure','scale','night'])$(id).addEventListener('input',update);
$('preferences').addEventListener('submit',event=>{event.preventDefault();pending={name:$('reader').value.trim(),width:$('measure').value,size:$('scale').value,dark:$('night').checked};if(pending.name.length<2){$('reader').setCustomValidity('Use at least two non-space characters.');$('reader').reportValidity();return;}$('review-text').textContent=`${pending.name}: ${pending.width}-character maximum, ${pending.size}% sample text, ${pending.dark?'dark':'light'} appearance. This will apply only to this preview.`;$('review').showModal();});
$('reader').addEventListener('input',()=>{$('reader').setCustomValidity('');$('reader').removeAttribute('aria-invalid')});$('reader').addEventListener('invalid',()=>{$('reader').setAttribute('aria-invalid','true')});
for(const id of ['close','cancel'])$(id).addEventListener('click',()=>$('review').close());
$('apply').addEventListener('click',()=>{$('saved').textContent=`Applied ${pending.name} locally (${pending.width}ch, ${pending.size}%, ${pending.dark?'dark':'light'}). Reloading clears this profile.`;$('review').close();});
$('preferences').addEventListener('reset',()=>{setTimeout(()=>{$('reader').setCustomValidity('');$('reader').removeAttribute('aria-invalid');$('saved').textContent='No profile applied yet.';update()},0)});update();

代码参考

  • 配置文件不会离开本文档。
  • 仅含空白字符的名称会通过 setCustomValidity 被拒绝。

阅读布局

明确的应用规则将设置面板与示例分开。

css
main.container{max-width:1120px;padding:2rem 1rem}.kicker{font-size:.7rem;letter-spacing:.13em;font-weight:700;color:var(--pico-primary)}.reading-layout{display:grid;grid-template-columns:minmax(260px,.95fr) minmax(0,1.05fr);gap:2rem;align-items:start}.reading-copy{padding-top:1rem}#sample{transition:font-size .15s}output{float:right}#review article{max-width:560px}#review footer{display:flex;flex-wrap:wrap;gap:.5rem}#review footer button{flex:1}h1{max-width:20ch}header>p{max-width:65ch}@media(max-width:800px){.reading-layout{grid-template-columns:1fr;gap:1rem}}

代码参考

  • 800px 断点和 ch 尺寸是自定义选择。
04

Pico CSS 设计系统:AI Agent 设置

实现起点

将上方的完整示例分别保存为 body、style.css 和 app.js。独立预览会内联相同的官方 CSS 和原始应用代码。此示例使用当前浏览器对原生 dialog API 的支持。HTML 包装器包含完整的 body 标记;请将随附的交互示例和 CSS 示例保存为此处引用的文件名。

html
<!-- npm install @picocss/[email protected]
mkdir -p assets
cp node_modules/@picocss/pico/css/pico.min.css assets/pico.min.css -->
<!doctype html>
<html lang="en" data-theme="light">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
<title>Reading room</title>
<link rel="stylesheet" href="assets/pico.min.css">
<link rel="stylesheet" href="style.css">
<script src="app.js" defer></script></head>
<body><main class="container"><header><p class="kicker">PICO CSS / READING ROOM</p><h1>A calmer reading setup</h1><p>Adjust a local reading profile. Semantic HTML does most of the work.</p></header><div class="reading-layout"><article><header><h2>Reading preferences</h2></header><form id="preferences"><label for="reader">Profile name<input id="reader" name="reader" required minlength="2" placeholder="Weekend reader" aria-describedby="name-help"></label><small id="name-help">At least two characters. Saved only for this open preview.</small><label for="measure">Reading width<select id="measure"><option value="48">Narrow — 48 characters</option><option value="62" selected>Balanced — 62 characters</option><option value="72">Wide — 72 characters</option></select></label><label for="scale">Text size <output id="size-label">100%</output><input id="scale" type="range" min="90" max="125" step="5" value="100"></label><label><input id="night" type="checkbox" role="switch"> Dark appearance</label><div class="grid"><button type="submit">Review profile</button><button type="reset" class="secondary outline">Reset</button></div></form><footer id="saved" role="status">No profile applied yet.</footer></article><section class="reading-copy"><p class="kicker">A SHORT SAMPLE</p><h2>Make space for attention.</h2><div id="sample"><p>The margin is not leftover space. It gives each paragraph a clear beginning and lets the eye return to the next line without effort.</p><p>A reading interface can be quiet without becoming empty. Descriptive headings, useful contrast, and a predictable rhythm let the content remain in charge.</p></div><details><summary>What changes in this preview?</summary><p>Width changes the maximum line measure, text size scales only this sample, and the appearance switch changes Pico’s theme. These are local preferences, not browser accessibility settings.</p></details></section></div><small>Official Pico CSS 2.1.1. Native form, details, and dialog elements; original application behavior.</small></main><dialog id="review" aria-labelledby="review-title"><article><header><button id="close" aria-label="Close review" rel="prev"></button><h2 id="review-title">Review reading profile</h2></header><p id="review-text"></p><footer><button id="cancel" class="secondary">Keep editing</button><button id="apply">Apply locally</button></footer></article></dialog>
</body>
</html>

适用于你项目的提示词

Agent 提示词
使用 Pico 2.1.1 阅读配置文件示例,搭配标准样式表、语义化 article、原生表单和 details 披露组件。将字号和行宽调整限制在示例范围内,并使外观复选框与 data-theme 保持同步。验证去除首尾空白后的配置文件名称,捕获审核快照,并使用 dialog.showModal 打开对话框;取消操作不得应用更改。只应用已捕获的本地配置文件,并在恢复原生表单默认值后重置。保留 Pico 的响应式根字号比例,不要用示例字号设置替换它。
05

Pico CSS 设计系统:来源与适用范围

Pico CSS 2.1.1。默认令牌与原有阅读布局和个人资料规则相互独立。不实现持久化或远程服务。