@doubao-dev/plugin-app-dev 0.0.0-stage → 0.0.40-canary-dea0ddc73-20261026073950

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +10 -2
  2. package/dist/147.js +9 -0
  3. package/dist/assets.d.ts +5 -0
  4. package/dist/assets.js +4 -0
  5. package/dist/index.d.ts +43 -0
  6. package/dist/index.js +1378 -0
  7. package/dist/plugin.d.ts +102 -0
  8. package/dist/plugin.js +4995 -0
  9. package/dist/preview.js +16 -0
  10. package/dist/rslib-runtime.js +33 -0
  11. package/dist/skills/doubao-plugin-app/SKILL.md +21 -0
  12. package/dist/skills/doubao-plugin-app/references/app-development.md +85 -0
  13. package/dist/skills/doubao-plugin-app/references/frontend/components/container-overlay.md +131 -0
  14. package/dist/skills/doubao-plugin-app/references/frontend/components/form-controls.md +146 -0
  15. package/dist/skills/doubao-plugin-app/references/frontend/components/interactive-controls.md +120 -0
  16. package/dist/skills/doubao-plugin-app/references/frontend/components/map-canvas.md +107 -0
  17. package/dist/skills/doubao-plugin-app/references/frontend/components/overview.md +43 -0
  18. package/dist/skills/doubao-plugin-app/references/frontend/components/scroll-list.md +149 -0
  19. package/dist/skills/doubao-plugin-app/references/frontend/components/text-media.md +209 -0
  20. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/01-/345/237/272/347/241/200.md +1389 -0
  21. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/02-/347/263/273/347/273/237.md +1376 -0
  22. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/03-/350/207/252/345/256/232/344/271/211/351/200/232/344/277/241.md +127 -0
  23. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/04-/345/256/232/344/275/215.md +784 -0
  24. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/05-/345/255/230/345/202/250.md +1176 -0
  25. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/06-/350/267/257/347/224/261.md +839 -0
  26. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/07-/347/225/214/351/235/242.md +376 -0
  27. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/08-/344/272/244/344/272/222.md +1319 -0
  28. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/09-/350/276/223/345/205/245.md +192 -0
  29. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/10-/347/275/221/347/273/234.md +900 -0
  30. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/11-/345/252/222/344/275/223.md +1496 -0
  31. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/12-/344/270/232/345/212/241/350/203/275/345/212/233.md +1281 -0
  32. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/13-/347/231/273/345/275/225.md +511 -0
  33. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/14-/346/224/257/344/273/230.md +943 -0
  34. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/15-/346/225/260/346/215/256/345/210/206/346/236/220.md +124 -0
  35. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/16-/350/223/235/347/211/231.md +3364 -0
  36. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/17-wi-fi.md +1028 -0
  37. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/18-/345/212/240/351/200/237/345/272/246/350/256/241.md +354 -0
  38. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/19-ibeacon.md +508 -0
  39. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/20-/347/275/227/347/233/230.md +320 -0
  40. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/21-/350/256/276/345/244/207/346/226/271/345/220/221.md +351 -0
  41. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/22-/351/231/200/350/236/272/344/273/252.md +354 -0
  42. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/23-/345/252/222/344/275/223-/350/256/276/345/244/207-/347/275/221/347/273/234.md +264 -0
  43. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/24-/347/237/255/344/277/241.md +155 -0
  44. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/25-/346/227/240/351/232/234/347/242/215.md +144 -0
  45. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/26-/345/237/272/347/241/200/344/277/241/346/201/257.md +238 -0
  46. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/27-/347/224/265/346/261/240.md +235 -0
  47. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/28-/345/211/252/350/264/264/346/235/277.md +303 -0
  48. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/29-/345/212/240/345/257/206.md +126 -0
  49. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/30-/346/227/245/345/216/206.md +417 -0
  50. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/31-/347/224/265/350/257/235.md +144 -0
  51. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/32-/346/211/253/347/240/201.md +236 -0
  52. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/33-/345/261/217/345/271/225.md +747 -0
  53. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/34-/351/234/207/345/212/250.md +277 -0
  54. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/35-/346/226/207/344/273/266/347/263/273/347/273/237.md +431 -0
  55. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/common-errors.md +69 -0
  56. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/groups.md +43 -0
  57. package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/quick-reference.md +436 -0
  58. package/dist/skills/doubao-plugin-app/references/frontend/examples/common-patterns.md +590 -0
  59. package/dist/skills/doubao-plugin-app/references/frontend/examples/doubao-agentic-service-api-recipes.md +209 -0
  60. package/dist/skills/doubao-plugin-app/references/frontend/examples/page-widget-basics.md +368 -0
  61. package/dist/skills/doubao-plugin-app/references/frontend/examples/page-widget-recipes.md +65 -0
  62. package/dist/skills/doubao-plugin-app/references/frontend/framework/core.md +283 -0
  63. package/dist/skills/doubao-plugin-app/references/frontend/guides/auth.md +277 -0
  64. package/dist/skills/doubao-plugin-app/references/frontend/guides/best-practices.md +574 -0
  65. package/dist/skills/doubao-plugin-app/references/frontend/guides/client-tools-and-events.md +209 -0
  66. package/dist/skills/doubao-plugin-app/references/frontend/guides/component-development.md +832 -0
  67. package/dist/skills/doubao-plugin-app/references/frontend/guides/debugger-mcp.md +537 -0
  68. package/dist/skills/doubao-plugin-app/references/frontend/guides/expired-widget.md +101 -0
  69. package/dist/skills/doubao-plugin-app/references/frontend/guides/performance-optimization.md +417 -0
  70. package/dist/skills/doubao-plugin-app/references/frontend/guides/troubleshooting.md +278 -0
  71. package/dist/skills/doubao-plugin-app/references/frontend/lynx/best-practices.md +720 -0
  72. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/pseudo-classes.md +149 -0
  73. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/selectors.md +224 -0
  74. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/supported-properties.md +269 -0
  75. package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/values-and-units.md +314 -0
  76. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/flex-layout.md +334 -0
  77. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/grid-layout.md +408 -0
  78. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/linear-layout.md +355 -0
  79. package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/relative-layout.md +189 -0
  80. package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/css-differences.md +737 -0
  81. package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/migration-guide.md +669 -0
  82. package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/unsupported-features.md +290 -0
  83. package/dist/skills/doubao-plugin-app/references/frontend/lynx/overview.md +60 -0
  84. package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/animation.md +243 -0
  85. package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/responsive.md +194 -0
  86. package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/theming.md +143 -0
  87. package/dist/skills/doubao-plugin-app/references/frontend/lynx/quick-reference.md +229 -0
  88. package/dist/skills/doubao-plugin-app/references/frontend/rules/dos-and-donts.md +479 -0
  89. package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/design-boundary.md +46 -0
  90. package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/overview.md +118 -0
  91. package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/props.md +301 -0
  92. package/dist/skills/doubao-plugin-app/references/mcp-and-cards.md +38 -0
  93. package/dist/templates/README.md.template +11 -0
  94. package/dist/templates/com.doubao/app/manifest.yaml +41 -0
  95. package/dist/templates/com.doubao/app/package.json.template +13 -0
  96. package/dist/templates/com.doubao/app/src/app.config.ts.template +5 -0
  97. package/dist/templates/com.doubao/app/src/app.ts.template +3 -0
  98. package/dist/templates/com.doubao/app/src/pages/home/index.css +14 -0
  99. package/dist/templates/com.doubao/app/src/pages/home/index.tsx.template +14 -0
  100. package/dist/templates/com.doubao/app/src/widgets/example/index.tsx.template +29 -0
  101. package/dist/templates/com.doubao/app/tsconfig.json +19 -0
  102. package/dist/templates/mcp.json +9 -0
  103. package/dist/templates/plugin.json.template +29 -0
  104. package/dist/templates/skills/example/SKILL.md.template +14 -0
  105. package/dist/upload.d.ts +44 -0
  106. package/dist/upload.js +38 -0
  107. package/package.json +60 -3
@@ -0,0 +1,314 @@
1
+ # CSS 值和单位
2
+
3
+ Lynx 支持的 CSS 值类型和单位。
4
+
5
+ ## 长度单位
6
+
7
+ ### 绝对单位
8
+
9
+ - `px` - 像素(最常用)
10
+
11
+ ### 相对单位
12
+
13
+ - `%` - 相对于父元素
14
+ - `vw` - 视口宽度的百分比(viewport width)
15
+ - `vh` - 视口高度的百分比(viewport height)
16
+ - `rem` - 相对于根元素字体大小(**推荐**)
17
+ - `em` - 相对于字体大小
18
+ - `rpx` - 响应式像素(Lynx 特有,自动适配屏幕宽度)
19
+
20
+ ### 不支持的单位
21
+
22
+ - ❌ `cm`, `mm`, `in`, `pt`, `pc` - 物理单位
23
+ - ❌ `ch`, `ex` - 字体相关
24
+ - ❌ `vmin`, `vmax`(部分支持)
25
+
26
+ Lynx 不会在运行时把不支持的 CSS 单位自动归一化为 `px`。如果样式来自 Web、设计系统或外部配置,应在样式生成前转换为 Lynx 支持的单位;不要把 `in`、`pt`、`ex` 等不支持单位直接输出到 Lynx 样式中。
27
+
28
+ 对于 Web CSS 中的 `in`,Lynx 仍不原生支持,但样式生成或迁移层可以按 CSS 绝对长度规则转换后输出:`1in = 96px`,例如 `0.25in = 24px`、`1.25in = 120px`。这个转换不随 Android、iOS 或设备物理 DPI 改变。其他不支持单位仍应视为不支持;本文档不提供明确转换方式。除非迁移层有明确规则,不要自动类推为可转换单位,尤其不要把字体相关单位(如 `ex`、`ch`)转换为通过证据。
29
+
30
+ ## rem 响应式适配(推荐)
31
+
32
+ 推荐使用 `rem` 配合 `vw` 实现响应式适配,这是 Web 标准的方案,具有更好的兼容性。
33
+
34
+ ```css
35
+ /* 在根元素设置基准字体大小 */
36
+ page {
37
+ font-size: calc(100vw / 23.4375); /* 1rem = 16px @ 375px 宽度 */
38
+ }
39
+
40
+ /* 使用 rem 进行屏幕适配 */
41
+ .container {
42
+ width: 100%;
43
+ padding: 2rem; /* 32px @ 375px */
44
+ }
45
+
46
+ .card {
47
+ width: 21.4rem; /* 约 342px @ 375px */
48
+ margin: 1rem;
49
+ }
50
+ ```
51
+
52
+ **设置方法**:
53
+
54
+ 1. 在 `page` 元素上设置 `font-size: calc(100vw / 23.4375)`
55
+ 2. 基准计算公式:`基准宽度 / 期望的基准字体大小`(如 375px / 16px = 23.4375)
56
+ 3. 所有尺寸使用 rem 单位
57
+
58
+ ## rpx 响应式像素(Lynx 特有)
59
+
60
+ ⚠️ **注意**:`rpx` 是 Lynx **特有**的单位,不具备 Web 兼容性。若需同时支持 Web 渲染,建议使用 `rem`。
61
+
62
+ `rpx` 会根据屏幕宽度自动缩放,实现原理:`value × screen_width / 750`,功能完整且适用于自适应布局。
63
+
64
+ **换算规则**(以 750rpx 为基准宽度):
65
+
66
+ - 在 375px 宽度的屏幕上:1rpx = 0.5px
67
+ - 在 750px 宽度的屏幕上:1rpx = 1px
68
+ - 在 1125px 宽度的屏幕上:1rpx = 1.5px
69
+
70
+ ```css
71
+ /* 全宽 */
72
+ .full-width {
73
+ width: 750rpx;
74
+ }
75
+
76
+ /* 半宽 */
77
+ .half-width {
78
+ width: 375rpx;
79
+ }
80
+ ```
81
+
82
+ **rpx 使用场景**:
83
+
84
+ - 仅用于 Lynx 项目且不需要 Web 兼容性时
85
+ - 需要随屏幕宽度缩放的大小
86
+
87
+ ## 颜色值
88
+
89
+ ### 颜色名称
90
+
91
+ ```css
92
+ color: red;
93
+ background-color: blue;
94
+ border-color: transparent;
95
+ ```
96
+
97
+ ### 十六进制
98
+
99
+ ```css
100
+ /* 简写 */
101
+ color: #f00;
102
+
103
+ /* 完整 */
104
+ color: #ff351a;
105
+
106
+ /* 带透明度 */
107
+ color: #ff351a80; /* 50% 透明 */
108
+ color: rgba(255, 53, 26, 0.5);
109
+ ```
110
+
111
+ ### RGB/RGBA
112
+
113
+ ```css
114
+ color: rgb(255, 53, 26);
115
+ color: rgba(255, 53, 26, 0.5);
116
+ ```
117
+
118
+ ### HSL/HSLA
119
+
120
+ ```css
121
+ color: hsl(9, 100%, 55%);
122
+ color: hsla(9, 100%, 55%, 0.5);
123
+ ```
124
+
125
+ ## 数值
126
+
127
+ ```css
128
+ /* 无单位数字 */
129
+ opacity: 0.5;
130
+ flex-grow: 1;
131
+ z-index: 100;
132
+ line-height: 1.5;
133
+
134
+ /* 带单位 */
135
+ width: 100px;
136
+ font-size: 14px;
137
+ ```
138
+
139
+ ## 百分比
140
+
141
+ ```css
142
+ /* 相对于父元素宽度 */
143
+ width: 50%;
144
+
145
+ /* 相对于父元素高度 */
146
+ height: 100%;
147
+
148
+ /* 相对于字体大小 */
149
+ line-height: 150%;
150
+ ```
151
+
152
+ ## 特殊值
153
+
154
+ ### auto
155
+
156
+ ```css
157
+ width: auto;
158
+ height: auto;
159
+ margin: auto;
160
+ ```
161
+
162
+ ### none
163
+
164
+ ```css
165
+ display: none;
166
+ background: none;
167
+ border: none;
168
+ ```
169
+
170
+ ### inherit
171
+
172
+ ```css
173
+ color: inherit;
174
+ font-size: inherit;
175
+ ```
176
+
177
+ ### initial
178
+
179
+ ```css
180
+ color: initial;
181
+ ```
182
+
183
+ ### 全局关键字
184
+
185
+ - `initial` - 初始值
186
+ - `inherit` - 继承父元素
187
+
188
+ ## 字符串
189
+
190
+ ```css
191
+ /* 字体名称 */
192
+ font-family: 'PingFang SC', 'Helvetica Neue', sans-serif;
193
+
194
+ /* 图片 URL */
195
+ background-image: url('https://example.com/image.png');
196
+ ```
197
+
198
+ ## 函数
199
+
200
+ ### 计算
201
+
202
+ ```css
203
+ /* calc 部分支持 - 仅用于长度属性 */
204
+ width: calc(100% - 20px);
205
+ height: calc(50% + 100px);
206
+ padding: calc(var(--base) * 2);
207
+ ```
208
+
209
+ **支持 calc() 的属性:**
210
+
211
+ - 尺寸:`width`, `height`, `min-width`, `max-width`, `min-height`, `max-height`
212
+ - 盒模型:`padding`, `margin`, `flex-basis`
213
+ - 间距:`gap`, `column-gap`, `row-gap`
214
+
215
+ **不支持 calc() 的属性:**
216
+
217
+ - 枚举值属性:`flex-direction`, `justify-content`, `linear-orientation` 等
218
+ - 整数值属性:`order`, `z-index`, `font-weight` 等
219
+ - 颜色属性:`color`, `background-color` 等
220
+
221
+ ### 环境变量
222
+
223
+ ```css
224
+ /* 安全区域 */
225
+ .safe-area {
226
+ padding-top: env(safe-area-inset-top);
227
+ padding-bottom: env(safe-area-inset-bottom);
228
+ }
229
+ ```
230
+
231
+ ### 渐变色
232
+
233
+ ```css
234
+ /* 线性渐变 */
235
+ background: linear-gradient(to bottom, #ff351a, #00ebeb);
236
+ background: linear-gradient(45deg, #ff351a 0%, #00ebeb 100%);
237
+
238
+ /* 径向渐变 */
239
+ background: radial-gradient(circle, #ff351a, #00ebeb);
240
+ ```
241
+
242
+ ### 动画时间函数
243
+
244
+ 用于 `transition-timing-function`、`animation-timing-function` 等属性。
245
+
246
+ #### 关键字
247
+
248
+ - `linear`
249
+ - `ease`(在 Lynx 中等价于 `ease-in-out`)
250
+ - `ease-in`
251
+ - `ease-out`
252
+ - `ease-in-out`
253
+ - `ease-in-ease-out`(Lynx 中的 `ease`/`ease-in-out` 同义词)
254
+ - `step-start`(等价于 `steps(1, start)`)
255
+ - `step-end`(等价于 `steps(1, end)`)
256
+
257
+ > **注意**:在 Lynx 引擎内部,`ease`、`ease-in-out`、`ease-in-ease-out` 均映射到同一种时间函数;这与 Web CSS 标准不同(Web 中 `ease` 和 `ease-in-out` 是两条不同的贝塞尔曲线)。
258
+
259
+ #### 函数
260
+
261
+ ```css
262
+ /* 自定义贝塞尔曲线 */
263
+ transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
264
+
265
+ /* 步进函数 - 必须带方向参数 */
266
+ animation-timing-function: steps(5, end);
267
+ animation-timing-function: steps(3, jump-start);
268
+ animation-timing-function: steps(4, jump-none);
269
+ animation-timing-function: steps(4, jump-both);
270
+
271
+ /* Lynx 特有扩展 */
272
+ transition-timing-function: square-bezier(1, 0.5);
273
+ ```
274
+
275
+ **`cubic-bezier(...)` 说明**:
276
+ - 语法为 `cubic-bezier(x1, y1, x2, y2)`
277
+ - 超出 `[0, 1]` 范围的控制点会被解析并生效
278
+ - 当 x 坐标超出 `[0, 1]` 时,引擎会使用起点/终点的梯度进行线性外推,不会报错或被截断
279
+ - 若 x1 和 x2 都在 `[0, 1]` 内,曲线是单调递增的;超出该范围时曲线可能非单调
280
+
281
+ **`steps(...)` 说明**:
282
+ - 语法为 `steps(n, direction)`,**必须**包含方向参数
283
+ - 不支持省略方向参数的 `steps(1)` 写法(会被视为无效)
284
+ - 支持的 direction:`start`、`jump-start`、`end`、`jump-end`、`jump-none`、`jump-both`
285
+
286
+ ## 内在尺寸
287
+
288
+ ### 支持的值
289
+
290
+ - ✅ `max-content` - 内容最大宽度
291
+ - ✅ `fit-content` - 适应内容宽度
292
+
293
+ ```css
294
+ .container {
295
+ width: max-content; /* 根据内容自动调整 */
296
+ width: fit-content; /* 适应内容,不超过容器 */
297
+ }
298
+ ```
299
+
300
+ ### 部分支持
301
+
302
+ - ⚠️ `min-content` - 在大多数情况下支持,但在 `flex-basis` 中会被视为 0px
303
+
304
+ ```css
305
+ /* ✅ 支持 */
306
+ .container {
307
+ width: min-content;
308
+ }
309
+
310
+ /* ❌ 不支持 - 在 flex-basis 中视为 0px */
311
+ .flex-item {
312
+ flex-basis: min-content; /* 不要这样用 */
313
+ }
314
+ ```
@@ -0,0 +1,334 @@
1
+ # Flexbox 布局
2
+
3
+ Lynx 支持 CSS Flexbox 的常用能力,整体遵循 Flexbox 弹性分配模型。迁移 Web 布局时仍需关注默认布局、内在尺寸和默认值差异。
4
+
5
+ ## 启用 Flex
6
+
7
+ ```css
8
+ .container {
9
+ display: flex;
10
+ }
11
+ ```
12
+
13
+ ## 常见布局模式
14
+
15
+ ### 水平居中
16
+
17
+ ```css
18
+ .center-horizontal {
19
+ display: flex;
20
+ flex-direction: row;
21
+ justify-content: center; /* 主轴居中 */
22
+ }
23
+ ```
24
+
25
+ ### 垂直居中
26
+
27
+ ```css
28
+ .center-vertical {
29
+ display: flex;
30
+ flex-direction: column;
31
+ justify-content: center; /* 主轴居中 */
32
+ }
33
+ ```
34
+
35
+ ### 水平垂直居中
36
+
37
+ ```css
38
+ .center-both {
39
+ display: flex;
40
+ justify-content: center; /* 主轴居中 */
41
+ align-items: center; /* 交叉轴居中 */
42
+ }
43
+ ```
44
+
45
+ ```jsx
46
+ <view className="center-both">
47
+ <text>Centered Content</text>
48
+ </view>
49
+ ```
50
+
51
+ ### 两端对齐
52
+
53
+ ```css
54
+ .space-between {
55
+ display: flex;
56
+ flex-direction: row;
57
+ justify-content: space-between;
58
+ }
59
+ ```
60
+
61
+ ```jsx
62
+ <view className="space-between">
63
+ <text>Left</text>
64
+ <text>Right</text>
65
+ </view>
66
+ ```
67
+
68
+ ### 等分布局
69
+
70
+ ```css
71
+ .equal-width {
72
+ display: flex;
73
+ }
74
+
75
+ .equal-width .item {
76
+ flex: 1; /* 每个 item 等分空间 */
77
+ }
78
+ ```
79
+
80
+ ### 左侧固定,右侧自适应
81
+
82
+ ```css
83
+ .layout {
84
+ display: flex;
85
+ }
86
+
87
+ .sidebar {
88
+ width: 200px; /* 固定宽度 */
89
+ }
90
+
91
+ .main {
92
+ flex: 1; /* 占据剩余空间 */
93
+ }
94
+ ```
95
+
96
+ ```jsx
97
+ <view className="layout">
98
+ <view className="sidebar">
99
+ <text>Sidebar</text>
100
+ </view>
101
+ <view className="main">
102
+ <text>Main Content</text>
103
+ </view>
104
+ </view>
105
+ ```
106
+
107
+ ### 底部固定按钮
108
+
109
+ ```css
110
+ .page {
111
+ display: flex;
112
+ flex-direction: column;
113
+ min-height: 100vh;
114
+ }
115
+
116
+ .content {
117
+ flex: 1; /* 内容区域占据剩余空间 */
118
+ }
119
+
120
+ .footer {
121
+ /* 固定在底部 */
122
+ }
123
+ ```
124
+
125
+ ## Flex Wrap
126
+
127
+ ```css
128
+ .wrap-container {
129
+ display: flex;
130
+ flex-wrap: wrap;
131
+ gap: 16px;
132
+ }
133
+
134
+ .wrap-container .item {
135
+ width: calc(50% - 8px); /* 两列布局 */
136
+ }
137
+ ```
138
+
139
+ ## 多行对齐
140
+
141
+ ```css
142
+ .multi-line {
143
+ display: flex;
144
+ flex-wrap: wrap;
145
+ align-content: space-between; /* 多行之间的对齐 */
146
+ gap: 16px;
147
+ }
148
+ ```
149
+
150
+ ## 属性值参考
151
+
152
+ ### flex-direction
153
+
154
+ | 值 | 说明 |
155
+ | ---------------- | ---------------- |
156
+ | `row` | 水平排列(默认) |
157
+ | `column` | 垂直排列 |
158
+ | `row-reverse` | 水平反向排列 |
159
+ | `column-reverse` | 垂直反向排列 |
160
+
161
+ ### flex-wrap
162
+
163
+ | 值 | 说明 |
164
+ | -------------- | -------------- |
165
+ | `nowrap` | 不换行(默认) |
166
+ | `wrap` | 换行 |
167
+ | `wrap-reverse` | 反向换行 |
168
+
169
+ ### flex-flow
170
+
171
+ `flex-direction` 和 `flex-wrap` 的简写属性。
172
+
173
+ ```css
174
+ .container {
175
+ flex-flow: row wrap; /* 等同于 flex-direction: row; flex-wrap: wrap; */
176
+ }
177
+ ```
178
+
179
+ ### justify-content
180
+
181
+ | 值 | 说明 |
182
+ | --------------- | --------------------------- |
183
+ | `flex-start` | 起点对齐 |
184
+ | `center` | 居中对齐 |
185
+ | `flex-end` | 终点对齐 |
186
+ | `space-between` | 两端对齐,中间等分 |
187
+ | `space-around` | 环绕对齐 |
188
+ | `space-evenly` | 均匀对齐 |
189
+ | `stretch` | 拉伸对齐(默认,Lynx 2.1+) |
190
+
191
+ ### align-items
192
+
193
+ | 值 | 说明 |
194
+ | ------------ | ---------------- |
195
+ | `stretch` | 拉伸填满(默认) |
196
+ | `flex-start` | 交叉轴起点对齐 |
197
+ | `center` | 交叉轴居中对齐 |
198
+ | `flex-end` | 交叉轴终点对齐 |
199
+ | `baseline` | 基线对齐 |
200
+
201
+ ### align-self
202
+
203
+ 单个项目的对齐方式,覆盖容器的 `align-items`。
204
+
205
+ | 值 | 说明 |
206
+ | ------------ | -------------------- |
207
+ | `auto` | 继承自父元素(默认) |
208
+ | `stretch` | 拉伸填满 |
209
+ | `flex-start` | 交叉轴起点对齐 |
210
+ | `center` | 交叉轴居中对齐 |
211
+ | `flex-end` | 交叉轴终点对齐 |
212
+ | `baseline` | 基线对齐 |
213
+
214
+ ### align-content
215
+
216
+ 多行内容的对齐方式(需要 `flex-wrap: wrap`)。
217
+
218
+ | 值 | 说明 |
219
+ | --------------- | ---------------- |
220
+ | `stretch` | 拉伸填满(默认) |
221
+ | `flex-start` | 起点对齐 |
222
+ | `center` | 居中对齐 |
223
+ | `flex-end` | 终点对齐 |
224
+ | `space-between` | 两端对齐 |
225
+ | `space-around` | 环绕对齐 |
226
+
227
+ ### flex
228
+
229
+ `flex-grow`、`flex-shrink`、`flex-basis` 的简写。
230
+
231
+ ```css
232
+ .item {
233
+ flex: 1; /* 等同于 flex: 1 1 0% */
234
+ flex: auto; /* 等同于 flex: 1 1 auto */
235
+ flex: none; /* 等同于 flex: 0 0 auto */
236
+ }
237
+ ```
238
+
239
+ ### flex-grow
240
+
241
+ 项目的放大比例,默认 `0`(不放大)。
242
+
243
+ ### flex-shrink
244
+
245
+ 项目的缩小比例,默认 `1`(可缩小)。
246
+
247
+ `flex-shrink` 只在主轴可用空间不足时生效:`flex-direction: row` 时看容器宽度,`flex-direction: column` 时看容器高度。如果父容器主轴尺寸没有被 `width` / `height`、`max-width` / `max-height`、外层约束或视口约束限制,子项总尺寸不会产生负剩余空间,也就不会触发压缩。不显式设置主轴尺寸通常可以避免压缩,但如果尺寸来自外层容器、视口或其它布局约束,仍可能触发 `flex-shrink`。
248
+
249
+ 压缩量不是只按 `flex-shrink` 数值分配。当前 Lynx Flex 布局按缩放收缩因子分配负剩余空间:
250
+
251
+ ```text
252
+ scaled shrink factor = flex-shrink * flex base size
253
+ ```
254
+
255
+ `flex base size` 通常来自 `flex-basis`;当 `flex-basis: auto` 时,会使用主轴方向上的 `width` / `height` 或内容测量结果。也就是说,基础尺寸更大的项目即使 `flex-shrink` 相同,也会分摊更多压缩量。
256
+
257
+ 示例:父容器宽度为 `500px`,两个子项总基础宽度为 `600px`,需要压缩 `100px`。
258
+
259
+ ```css
260
+ .item-a {
261
+ width: 200px;
262
+ flex-shrink: 1;
263
+ }
264
+
265
+ .item-b {
266
+ width: 400px;
267
+ flex-shrink: 2;
268
+ }
269
+ ```
270
+
271
+ `item-a` 的收缩权重是 `200 * 1 = 200`,`item-b` 的收缩权重是 `400 * 2 = 800`。最终 `item-a` 压缩 `20px`,宽度为 `180px`;`item-b` 压缩 `80px`,宽度为 `320px`。
272
+
273
+ 如果多个项目的基础尺寸相同,看起来会像只按 `flex-shrink` 数值等比压缩;一旦基础尺寸不同,基础尺寸也会参与分配。
274
+
275
+ ### flex-basis
276
+
277
+ 项目在分配多余空间之前的初始大小,默认 `auto`。
278
+
279
+ ```css
280
+ .item {
281
+ flex-basis: 100px; /* 固定大小 */
282
+ flex-basis: auto; /* 根据内容大小 */
283
+ }
284
+ ```
285
+
286
+ ### order
287
+
288
+ 项目的排列顺序,默认 `0`。数值越小,排列越靠前。
289
+
290
+ ```css
291
+ .item:first-child {
292
+ order: -1; /* 排到最前面 */
293
+ }
294
+ ```
295
+
296
+ ### gap / row-gap / column-gap
297
+
298
+ 项目之间的间距。
299
+
300
+ ```css
301
+ .container {
302
+ gap: 16px; /* 行和列间距都是16px */
303
+ row-gap: 8px; /* 行间距8px */
304
+ column-gap: 12px; /* 列间距12px */
305
+ }
306
+ ```
307
+
308
+ ## 注意事项
309
+
310
+ 1. **min-content 不支持**: `flex-basis: min-content` 会被视为 0px
311
+
312
+ ```css
313
+ /* ❌ 不支持 */
314
+ .item {
315
+ flex-basis: min-content;
316
+ }
317
+
318
+ /* ✅ 替代方案 */
319
+ .item {
320
+ flex-basis: auto;
321
+ }
322
+ ```
323
+
324
+ 2. **Text 组件**: Flex 子元素如果是 Text,可能需要设置 `white-space: nowrap` 防止换行
325
+
326
+ ```css
327
+ .flex-item-text {
328
+ white-space: nowrap;
329
+ }
330
+ ```
331
+
332
+ 3. **内容不会自动形成 Web 式收缩下限**: Lynx 的 `flex-shrink` 不会套用 Web flex item 的 `min-content` / auto minimum size 保护。空间不足时,包含 Text、图片或嵌套子节点等内容的 flex item 也可能继续沿主轴被压缩;Web 则可能因为内容形成默认最小宽度或最小高度而不继续收缩。可以把 Lynx 的默认表现理解为 Web flex item 在主轴方向显式设置最小值为 `0`。需要固定尺寸或保护内容的项目请设置 `flex-shrink: 0`,或显式设置主轴方向的 `min-width` / `min-height`。需要 Web 预览页对齐 Lynx 压缩行为时,通常要在 Web 侧设置 `min-width: 0`(row 方向)或 `min-height: 0`(column 方向)。
333
+
334
+ 4. **justify-content 默认值**: Lynx 中 `justify-content` 默认值为 `stretch`(Web 中默认为 `flex-start`)