样式
样式是一个平铺的对象,字段名跟 CSS 走:
{ "fontSize": 12, "color": "#333333", "lineHeight": 1.5, "borderBottom": "1pt solid #D0D7DE" }字段取值以 Word 能表达的为准。某个格式表达不了的字段,渲染时忽略,打一条警告,不报错。写了不存在的字段会报错。
字段在 JSON 里都平铺在一层,分组只是为了查起来方便:
| 组 | 例子 | 参考页 |
|---|---|---|
| 文字 | fontFamily fontSize color bold underline |
文字样式 |
| 段落 | align lineHeight spaceBefore textIndent |
段落样式 |
| 边框、背景、盒子 | border background padding width |
边框、背景和盒子 |
| 列表 | listStyleType listMarkerFormat listIndent |
列表样式 |
| 图片位置 | position float wrap x y |
图片样式 |
| 表格 | cellPadding repeatHeader tableLayout |
表格样式 |
长度、颜色、边框这些值怎么写,见取值写法。
有四个地方,写法一样:
- 元素的
style:只管这一个元素。 - 元素的
parts:只管这个元素的某个部位。 - 顶层
styles:- 键是组件名,就是组件样式,对这类组件全部生效:
"Text"、"Heading.1"、"Table.header"。 - 其他键是命名样式,元素用名字引用:
"style": "muted"。
- 键是组件名,就是组件样式,对这类组件全部生效:
- 样式集:一整套外观,可以放进单独的文件给很多文档共用。见样式集。
"styles": { "Text": { "textIndent": "2em" }, "Heading.1": { "align": "center" }, "Table.header": { "background": "#1A73E8", "color": "#FFFFFF" }, "muted": { "color": "#666666", "fontSize": 10 }}组件样式的键:
| 键 | 管什么 |
|---|---|
Heading Text Code List Table Image Slide Section Document |
这类组件的全部元素 |
InlineCode |
runs 里的行内代码 |
Heading.1 … Heading.6 |
某一级标题 |
List.level1 … List.level9、List.marker、List.item |
列表的某一级、编号、项文字 |
Table.header、Table.evenRow 等 |
表格部位,见表格 |
Image.caption、Slide.title、Slide.body |
其他部位 |
自定义组件名 |
自定义组件展开后的根元素 |
自定义组件名:模板元素id |
自定义组件里的某个元素,后面还能接 .部位 |
键里的组件名不存在、部位不存在,都会报错。
像 CSS 一样,有的字段会从父元素传给子元素,有的不会。
- 会继承:文字字段、大部分段落字段、列表字段。具体是
fontFamilyfontSizecolorbolditalicunderlineunderlineColorstrikecapsletterSpacinghighlightemphasisMarkscalekerninglanghiddenalignlineHeighttextIndenthangingIndentwidowControlcontextualSpacingautoSpacekinsokudirection,以及全部list*字段(listStart除外)。 - 不继承:
verticalAlignspaceBeforespaceAftermarginLeftmarginRightkeepWithNextkeepTogetherpageBreakBeforewrapoutlineLevel,全部边框、背景、盒子、图片位置、表格字段,还有listStart。
所以在 Document 上写 fontSize,全文都变;在 Document 上写 border,只有它自己有框。
一个元素的最终样式,按下面的顺序叠。后面的覆盖前面的:
- 父元素传下来的会继承的字段。根元素的「父」是内置全局默认值,再叠上样式集的
global。 - 内置的组件默认样式:先
Heading,再Heading.1。 - 样式集的组件样式:先
Heading,再Heading.1。 - 顶层
styles里的组件样式:同样先Heading再Heading.1。 - 自定义组件模板里写的
style。 - 指名自定义组件的组件样式:
Callout、Callout:head。 - 元素自己的
style。数组里后面的覆盖前面的。 - runs 上的文字样式(只管这一小段文字)。
几点说明:
- 第 1 步排最低。组件样式总能盖过继承来的值,和 CSS 一样。
- 第 4 步在第 3 步后面。样式集当底子,文档自己写的优先。
- 部位样式按同样的顺序叠:内置 → 样式集 → 顶层
styles→ 模板的parts→组件名:元素id.部位→ 元素自己的parts。部位样式最后叠在元素样式上面。 fontFamily按文种合并。先写"fontFamily": "Times New Roman",再写{ "eastAsia": "黑体" },结果是西文 Times、中文黑体。
内置默认样式
Section titled “内置默认样式”什么都不写时就是这套:
| 键 | 默认值 |
|---|---|
| 全局 | fontSize 10.5,lineHeight 1.5 |
Heading |
加粗,keepWithNext,段前 12,段后 6,lineHeight 1.25 |
Heading.1 … Heading.6 |
字号 20 / 16 / 14 / 12 / 11 / 11;1 级段前 18 |
Text |
段后 6 |
Code |
等宽字体,9pt,lineHeight 1.4,底色 #F6F8FA,内边距 8,段后 8,keepTogether |
InlineCode |
等宽字体,底色 #F0F1F3 |
List |
段后 6,listIndent 2em,listHanging 2em |
Table |
边框 0.5pt solid #999999,cellPadding 4,repeatHeader,段后 8 |
Table.header |
加粗,底色 #F3F3F3 |
Image |
段后 6 |
Image.caption |
9pt,#666666 |
Slide.title |
20pt,加粗 |
数字单位都是 pt。等宽字体是 Menlo, Consolas, DejaVu Sans Mono。链接默认 #0563C1 加下划线。
{ "version": "0.1", "meta": { "title": "样式示例", "lang": "zh-CN" }, "styles": { "Document": { "fontSize": 11, "lineHeight": 1.6 }, "Heading.1": { "align": "center", "color": "#1F2328" }, "Text": { "textIndent": "2em", "align": "justify" }, "note": { "background": "#FFF8C5", "borderLeft": "3pt solid #D4A72C", "padding": 8, "textIndent": 0 } }, "root": "doc", "elements": { "doc": { "type": "Document", "children": ["title", "p1", "tip"] }, "title": { "type": "Heading", "props": { "level": 1, "text": "样式示例" } }, "p1": { "type": "Text", "props": { "text": "正文首行缩进两个字,两端对齐。字号和行高写在 Document 上,全文继承。" } }, "tip": { "type": "Text", "props": { "text": "提示框用命名样式 note:左边粗线、浅黄底。" }, "style": "note" } }}