{
  "_description": "本文件由 data/ 生成：请改动来源文件，不要改这里。各字段的证据边界见接入指南。",
  "schemaVersion": "1.0.0",
  "kind": "entry",
  "locale": "zh-CN",
  "id": "fill-in-the-blanks",
  "name": {
    "zh": "填空式输入",
    "en": "Fill in the Blanks"
  },
  "page": "https://designvocabulary.com/zh/entries/fill-in-the-blanks/",
  "self": "https://designvocabulary.com/zh/entries/fill-in-the-blanks.json",
  "alternates": {
    "zh-CN": "https://designvocabulary.com/zh/entries/fill-in-the-blanks.json",
    "en": "https://designvocabulary.com/en/entries/fill-in-the-blanks.json"
  },
  "site": {
    "catalogSchemaVersion": "0.1.0",
    "entries": 137,
    "index": "https://designvocabulary.com/zh/entries/index.json",
    "query": "https://designvocabulary.com/api/query?lang=zh",
    "guide": "https://designvocabulary.com/zh/agents/",
    "llms": "https://designvocabulary.com/llms.txt"
  },
  "provenance": {
    "sourceBacked": [
      "entry.definition"
    ],
    "editorial": [
      "entry.boundary",
      "entry.signature",
      "entry.when",
      "entry.when_not",
      "entry.tradeoff",
      "entry.comparison",
      "entry.rules",
      "entry.relations",
      "entry.implementationNote",
      "entry.behavior"
    ],
    "scope": "定义参考以上来源；数字界面示例、选择建议、条件关系及配方由本样例编辑，尚未经用户研究验证。",
    "editorialStatus": "drafted",
    "specimenData": "fictional",
    "specimenNote": "示例为原创虚构界面；定义附来源，用法与配方为编辑建议。",
    "sources": [
      {
        "id": "fitb-ui-patterns",
        "url": "https://ui-patterns.com/patterns/FillInTheBlanks",
        "title": "UI Patterns · Fill in the Blanks design pattern",
        "checkedAt": "2026-09-16",
        "archive": {
          "status": "pending",
          "confirmed": false,
          "url": null,
          "capturedAt": null,
          "lookupUrl": "https://web.archive.org/web/20260916*/https://ui-patterns.com/patterns/FillInTheBlanks"
        }
      }
    ],
    "lists": [],
    "ordered": false,
    "listDisclaimer": "席位号是编辑位置，不是评分、排名或人气统计；清单未收满时保持原样，不补足。"
  },
  "entry": {
    "id": "fill-in-the-blanks",
    "type": "interaction",
    "name": {
      "zh": "填空式输入",
      "en": "Fill in the Blanks"
    },
    "aliases": [
      "Natural Language Form",
      "Madlib Form",
      "自然语言表单",
      "句子式表单"
    ],
    "granularity": "component",
    "intents": [
      "prevent-error",
      "reduce-complexity"
    ],
    "tags": [
      "表单",
      "输入",
      "句子",
      "上下文",
      "标签"
    ],
    "definition": "把输入控件嵌进一句话里，让填完之后整句读起来是通顺的陈述：字段的含义由它在句中的位置说明，而不是由一个单独的标签说明。",
    "boundary": "判定标准是\"句子本身就是标签\"，而不是\"表单写得口语化\"。它只适用于字段少、且彼此确实构成一句话的情形；字段一多，句子就会变成必须通读的长段，反而比逐项标签更慢。它也不是自然语言输入：用户填的仍是受控的字段，只是被排成一句话。这一模式天然依赖语序，翻译时句子结构会变，字段顺序也得跟着变，因此多语言产品要为每种语言各自排布，而不是把控件位置写死。",
    "signature": [
      "输入控件与文字交替排列，共同构成一句可读的话",
      "字段没有独立标签，含义由句子的上下文承担",
      "填写完成后整句就是对所填内容的一句陈述"
    ],
    "when": [
      "单独给字段写标签时，标签怎么写都说不清它到底要什么",
      "标签会变得又长又绕，放进句子反而一眼就懂",
      "字段数量少且必填，句中出现空缺会让人自然想补上"
    ],
    "when_not": [
      "字段很多，用户必须读完整段句子才能动手",
      "大部分字段可以不填，句子中留下的空缺反而令人不安",
      "界面需要支持多语言但字段位置被写死在一种语序里"
    ],
    "tradeoff": "句子承担了标签与说明的全部工作，理解成本几乎为零；代价是它牺牲了表单的可扫读性：字段不再对齐成列，用户无法快速判断还剩几项没填。",
    "comparison": {
      "focus": "用句子的上下文说明每个字段要填什么",
      "mechanism": "输入控件嵌入连续文字之中",
      "cost": "失去对齐与可扫读性，且依赖语序"
    },
    "sources": [
      {
        "id": "fitb-ui-patterns",
        "title": "UI Patterns · Fill in the Blanks design pattern",
        "url": "https://ui-patterns.com/patterns/FillInTheBlanks",
        "claim": "该模式记录别称为\"自然语言表单\"，并建议在以下情形使用：为输入框写的标签说不清它到底要什么；标签变得冗长复杂、反而让用户难以理解；字段的含义可以通过把它放进一句话来表达；以及字段为必填或强烈期望被填写——句中留下空缺会让用户不适。它同时提醒：字段数量多时把它们都放进句子会让用户疲惫，因为句式结构迫使用户读完每一句，并且不要在大量字段可不填时使用。本词条的适用与不适用条件据此转述。",
        "checkedAt": "2026-09-16",
        "archive": {
          "lookupUrl": "https://web.archive.org/web/20260916*/https://ui-patterns.com/patterns/FillInTheBlanks",
          "status": "pending",
          "checkedAt": "2026-09-22T11:55:04.410Z",
          "error": "status-request-failed",
          "jobId": "spn2-f131fc62c7ca8c7cf7934fb55bb00d0e98264a0a"
        }
      }
    ],
    "relations": [
      {
        "target": "inline-edit",
        "kind": "related",
        "condition": "用户在正文所在的位置直接修改取值",
        "reason": "两者都把控件放进内容之中，但就地编辑修改的是已有内容，填空式输入是从一开始就用句子收集内容。",
        "basis": "editorial"
      },
      {
        "target": "inline-validation",
        "kind": "composes_with",
        "condition": "某个空缺填入了不合法的取值",
        "reason": "句中没有独立标签可供挂载错误说明，因此提示必须贴近该空缺本身，并说清期望的格式。",
        "basis": "editorial"
      },
      {
        "target": "cognitive-load",
        "kind": "composes_with",
        "condition": "句中空缺的数量增加",
        "reason": "每增加一个空缺，用户就要多维持一段未完成的句子在工作记忆里，超过少数几个就会得不偿失。",
        "basis": "editorial"
      }
    ],
    "rules": [
      {
        "when": "输入控件被嵌入句子中",
        "instruction": "仍为每个控件提供可被读屏识别的名称，不要只依赖视觉上的上下文。",
        "strength": "must",
        "basis": "editorial"
      },
      {
        "when": "界面需要翻译成其他语言",
        "instruction": "把整句作为可调整语序的模板交给翻译，而不是把控件位置固定在原语言的语序上。",
        "strength": "must",
        "basis": "editorial"
      }
    ],
    "behavior": {
      "states": [
        "empty",
        "partial",
        "complete",
        "invalid"
      ],
      "a11y": [
        "每个嵌入控件有可访问名称，而不是仅靠周围文字暗示",
        "句子在放大字号或换行后仍保持可读的顺序"
      ],
      "motion": "无动效；填入后的句子直接更新"
    },
    "demo": null,
    "version": "0.1.0",
    "editorialStatus": "drafted",
    "requirements": [],
    "demoCapabilities": [],
    "implementationNote": "本词条尚无可操作示例；插画为编辑示意，其中的句子与取值均为虚构。应用到产品前仍须确认每个嵌入控件都有可访问名称，并在放大字号与换行后检查句子的阅读顺序。",
    "image": {
      "src": "/images/fill-in-the-blanks.webp",
      "alt": "一张名为 FIELDNOTES 的虚构表单示意：一行文字中交替出现灰色词条与三个带下划线的输入空缺，其中两个已填入深色短文本，第三个为空并带光标。"
    },
    "searchTerms": [
      "form",
      "input",
      "sentence",
      "context",
      "label"
    ]
  }
}
