@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.
- package/README.md +10 -2
- package/dist/147.js +9 -0
- package/dist/assets.d.ts +5 -0
- package/dist/assets.js +4 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.js +1378 -0
- package/dist/plugin.d.ts +102 -0
- package/dist/plugin.js +4995 -0
- package/dist/preview.js +16 -0
- package/dist/rslib-runtime.js +33 -0
- package/dist/skills/doubao-plugin-app/SKILL.md +21 -0
- package/dist/skills/doubao-plugin-app/references/app-development.md +85 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/container-overlay.md +131 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/form-controls.md +146 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/interactive-controls.md +120 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/map-canvas.md +107 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/overview.md +43 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/scroll-list.md +149 -0
- package/dist/skills/doubao-plugin-app/references/frontend/components/text-media.md +209 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/01-/345/237/272/347/241/200.md +1389 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/02-/347/263/273/347/273/237.md +1376 -0
- 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
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/04-/345/256/232/344/275/215.md +784 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/05-/345/255/230/345/202/250.md +1176 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/06-/350/267/257/347/224/261.md +839 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/07-/347/225/214/351/235/242.md +376 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/08-/344/272/244/344/272/222.md +1319 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/09-/350/276/223/345/205/245.md +192 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/10-/347/275/221/347/273/234.md +900 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/11-/345/252/222/344/275/223.md +1496 -0
- 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
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/13-/347/231/273/345/275/225.md +511 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/14-/346/224/257/344/273/230.md +943 -0
- 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
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/16-/350/223/235/347/211/231.md +3364 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/17-wi-fi.md +1028 -0
- 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
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/19-ibeacon.md +508 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/20-/347/275/227/347/233/230.md +320 -0
- 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
- 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
- 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
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/24-/347/237/255/344/277/241.md +155 -0
- 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
- 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
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/27-/347/224/265/346/261/240.md +235 -0
- 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
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/29-/345/212/240/345/257/206.md +126 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/30-/346/227/245/345/216/206.md +417 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/31-/347/224/265/350/257/235.md +144 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/32-/346/211/253/347/240/201.md +236 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/33-/345/261/217/345/271/225.md +747 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/34-/351/234/207/345/212/250.md +277 -0
- 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
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/common-errors.md +69 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/groups.md +43 -0
- package/dist/skills/doubao-plugin-app/references/frontend/doubao-agentic-service-api/quick-reference.md +436 -0
- package/dist/skills/doubao-plugin-app/references/frontend/examples/common-patterns.md +590 -0
- package/dist/skills/doubao-plugin-app/references/frontend/examples/doubao-agentic-service-api-recipes.md +209 -0
- package/dist/skills/doubao-plugin-app/references/frontend/examples/page-widget-basics.md +368 -0
- package/dist/skills/doubao-plugin-app/references/frontend/examples/page-widget-recipes.md +65 -0
- package/dist/skills/doubao-plugin-app/references/frontend/framework/core.md +283 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/auth.md +277 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/best-practices.md +574 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/client-tools-and-events.md +209 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/component-development.md +832 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/debugger-mcp.md +537 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/expired-widget.md +101 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/performance-optimization.md +417 -0
- package/dist/skills/doubao-plugin-app/references/frontend/guides/troubleshooting.md +278 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/best-practices.md +720 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/pseudo-classes.md +149 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/selectors.md +224 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/supported-properties.md +269 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/css/values-and-units.md +314 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/flex-layout.md +334 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/grid-layout.md +408 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/linear-layout.md +355 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/layout/relative-layout.md +189 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/css-differences.md +737 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/migration-guide.md +669 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/lynx-vs-web/unsupported-features.md +290 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/overview.md +60 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/animation.md +243 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/responsive.md +194 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/patterns/theming.md +143 -0
- package/dist/skills/doubao-plugin-app/references/frontend/lynx/quick-reference.md +229 -0
- package/dist/skills/doubao-plugin-app/references/frontend/rules/dos-and-donts.md +479 -0
- package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/design-boundary.md +46 -0
- package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/overview.md +118 -0
- package/dist/skills/doubao-plugin-app/references/frontend/widget-templates/props.md +301 -0
- package/dist/skills/doubao-plugin-app/references/mcp-and-cards.md +38 -0
- package/dist/templates/README.md.template +11 -0
- package/dist/templates/com.doubao/app/manifest.yaml +41 -0
- package/dist/templates/com.doubao/app/package.json.template +13 -0
- package/dist/templates/com.doubao/app/src/app.config.ts.template +5 -0
- package/dist/templates/com.doubao/app/src/app.ts.template +3 -0
- package/dist/templates/com.doubao/app/src/pages/home/index.css +14 -0
- package/dist/templates/com.doubao/app/src/pages/home/index.tsx.template +14 -0
- package/dist/templates/com.doubao/app/src/widgets/example/index.tsx.template +29 -0
- package/dist/templates/com.doubao/app/tsconfig.json +19 -0
- package/dist/templates/mcp.json +9 -0
- package/dist/templates/plugin.json.template +29 -0
- package/dist/templates/skills/example/SKILL.md.template +14 -0
- package/dist/upload.d.ts +44 -0
- package/dist/upload.js +38 -0
- package/package.json +60 -3
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# 响应式设计
|
|
2
|
+
|
|
3
|
+
在 Lynx 中实现响应式布局。
|
|
4
|
+
|
|
5
|
+
## 使用 rem + vw 自动适配(推荐)
|
|
6
|
+
|
|
7
|
+
> **推荐方案**:使用 `rem` 配合 `vw` 设置根字体大小。`rpx` 是 Lynx 特有单位,功能完整但缺乏 Web 兼容性。
|
|
8
|
+
|
|
9
|
+
```css
|
|
10
|
+
/* 在根元素设置基准字体大小 */
|
|
11
|
+
page {
|
|
12
|
+
font-size: calc(100vw / 23.4375); /* 1rem = 16px @ 375px 宽度 */
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* 使用 rem 进行屏幕适配 */
|
|
16
|
+
.container {
|
|
17
|
+
width: 100%; /* 全宽 */
|
|
18
|
+
padding: 2rem; /* 左右各 2rem ≈ 32px @ 375px */
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.card {
|
|
22
|
+
width: 21.4rem; /* 约一半宽度,减去间距 */
|
|
23
|
+
margin-bottom: 1.5rem;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* 字体大小 */
|
|
27
|
+
.title {
|
|
28
|
+
font-size: 2.25rem; /* 约 18px @ 375px 屏幕 */
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.body {
|
|
32
|
+
font-size: 1.75rem; /* 约 14px @ 375px 屏幕 */
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## 使用视口单位(vw/vh)
|
|
37
|
+
|
|
38
|
+
⚠️ **注意**:Lynx **不支持** CSS `@media` 媒体查询。请使用视口单位实现流式布局。
|
|
39
|
+
|
|
40
|
+
```css
|
|
41
|
+
/* 使用 vw 代替 @media */
|
|
42
|
+
.container {
|
|
43
|
+
display: flex;
|
|
44
|
+
flex-direction: column;
|
|
45
|
+
padding: 4vw; /* 随视口宽度自动调整 */
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* 大屏幕优化 */
|
|
49
|
+
.sidebar {
|
|
50
|
+
width: 26vw; /* 约 200px @ 768px 宽度 */
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.main {
|
|
54
|
+
flex: 1;
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 响应式网格
|
|
59
|
+
|
|
60
|
+
使用 Grid 布局配合百分比或 vw 单位:
|
|
61
|
+
|
|
62
|
+
```css
|
|
63
|
+
.grid {
|
|
64
|
+
display: grid;
|
|
65
|
+
gap: 16px;
|
|
66
|
+
grid-template-columns: 1fr; /* 移动端:1列 */
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* 使用 CSS 变量 + 容器查询思路(如果支持) */
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Flex 响应式布局
|
|
73
|
+
|
|
74
|
+
```css
|
|
75
|
+
.flex-container {
|
|
76
|
+
display: flex;
|
|
77
|
+
flex-wrap: wrap;
|
|
78
|
+
gap: 16px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.flex-item {
|
|
82
|
+
flex: 1 1 40vw; /* 随视口宽度自动调整 */
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## 安全区域适配
|
|
87
|
+
|
|
88
|
+
```css
|
|
89
|
+
/* iPhone 刘海屏适配 */
|
|
90
|
+
.safe-area {
|
|
91
|
+
padding-top: env(safe-area-inset-top);
|
|
92
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
93
|
+
padding-left: env(safe-area-inset-left);
|
|
94
|
+
padding-right: env(safe-area-inset-right);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* 底部固定按钮 */
|
|
98
|
+
.fixed-bottom {
|
|
99
|
+
position: fixed;
|
|
100
|
+
bottom: 0;
|
|
101
|
+
left: 0;
|
|
102
|
+
right: 0;
|
|
103
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
104
|
+
background-color: #fff;
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## JavaScript 动态响应式
|
|
109
|
+
|
|
110
|
+
使用 JavaScript 监听视口变化并动态调整样式:
|
|
111
|
+
|
|
112
|
+
```javascript
|
|
113
|
+
// 获取视口尺寸
|
|
114
|
+
const viewportWidth = window.screen.width || 375;
|
|
115
|
+
const viewportHeight = window.screen.height || 667;
|
|
116
|
+
|
|
117
|
+
// 根据视口宽度决定布局
|
|
118
|
+
function getLayoutClass(width) {
|
|
119
|
+
if (width >= 1024) return 'desktop-layout';
|
|
120
|
+
if (width >= 768) return 'tablet-layout';
|
|
121
|
+
return 'mobile-layout';
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// 应用到组件
|
|
125
|
+
const layoutClass = getLayoutClass(viewportWidth);
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
配合条件渲染:
|
|
129
|
+
|
|
130
|
+
```jsx
|
|
131
|
+
<view className={isTablet ? 'tablet-layout' : 'mobile-layout'}>
|
|
132
|
+
{isTablet ? <Sidebar /> : null}
|
|
133
|
+
<MainContent />
|
|
134
|
+
</view>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
```css
|
|
138
|
+
.tablet-layout {
|
|
139
|
+
display: flex;
|
|
140
|
+
flex-direction: row;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.mobile-layout {
|
|
144
|
+
display: flex;
|
|
145
|
+
flex-direction: column;
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 响应式最佳实践
|
|
150
|
+
|
|
151
|
+
1. **移动优先**: 先写移动端样式,再用 JavaScript 动态调整
|
|
152
|
+
2. **使用 rem**: 优先使用 rem 进行屏幕适配(配合 vw 设置根字体大小)
|
|
153
|
+
3. **使用视口单位**: 使用 vw/vh 实现流式布局
|
|
154
|
+
4. **断点选择**(JavaScript 中处理):
|
|
155
|
+
- 320px - 小屏手机
|
|
156
|
+
- 375px - iPhone 标准
|
|
157
|
+
- 414px - iPhone Plus
|
|
158
|
+
- 768px - iPad 竖屏
|
|
159
|
+
- 1024px - iPad 横屏
|
|
160
|
+
5. **测试**: 在多种设备上测试
|
|
161
|
+
|
|
162
|
+
## 常见陷阱
|
|
163
|
+
|
|
164
|
+
### ❌ 不要使用 @media
|
|
165
|
+
|
|
166
|
+
```css
|
|
167
|
+
/* ❌ 不支持 - 不会生效 */
|
|
168
|
+
@media (min-width: 768px) {
|
|
169
|
+
.container {
|
|
170
|
+
flex-direction: row;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### ✅ 使用替代方案
|
|
176
|
+
|
|
177
|
+
```css
|
|
178
|
+
/* ✅ 使用 rem 和视口单位 */
|
|
179
|
+
.container {
|
|
180
|
+
display: flex;
|
|
181
|
+
flex-direction: column;
|
|
182
|
+
padding: 4vw;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/* 在根元素设置基准字体大小 */
|
|
186
|
+
page {
|
|
187
|
+
font-size: calc(100vw / 23.4375); /* 1rem = 16px @ 375px 宽度 */
|
|
188
|
+
}
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
```javascript
|
|
192
|
+
// ✅ 使用 JavaScript 动态调整
|
|
193
|
+
const isWide = viewportWidth >= 768;
|
|
194
|
+
```
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
# 主题和 CSS 变量
|
|
2
|
+
|
|
3
|
+
使用 CSS 变量实现主题切换。
|
|
4
|
+
|
|
5
|
+
## 定义 CSS 变量
|
|
6
|
+
|
|
7
|
+
```css
|
|
8
|
+
/* 默认主题(亮色) */
|
|
9
|
+
:root {
|
|
10
|
+
/* 颜色 */
|
|
11
|
+
--color-primary: #ff351a;
|
|
12
|
+
--color-secondary: #00ebeb;
|
|
13
|
+
--color-background: #ffffff;
|
|
14
|
+
--color-surface: #f5f5f5;
|
|
15
|
+
--color-text: #333333;
|
|
16
|
+
--color-text-secondary: #666666;
|
|
17
|
+
--color-border: #e0e0e0;
|
|
18
|
+
|
|
19
|
+
/* 间距 */
|
|
20
|
+
--spacing-xs: 4px;
|
|
21
|
+
--spacing-sm: 8px;
|
|
22
|
+
--spacing-md: 16px;
|
|
23
|
+
--spacing-lg: 24px;
|
|
24
|
+
--spacing-xl: 32px;
|
|
25
|
+
|
|
26
|
+
/* 字体 */
|
|
27
|
+
--font-size-xs: 10px;
|
|
28
|
+
--font-size-sm: 12px;
|
|
29
|
+
--font-size-md: 14px;
|
|
30
|
+
--font-size-lg: 16px;
|
|
31
|
+
--font-size-xl: 18px;
|
|
32
|
+
--font-size-xxl: 24px;
|
|
33
|
+
|
|
34
|
+
/* 圆角 */
|
|
35
|
+
--radius-sm: 4px;
|
|
36
|
+
--radius-md: 8px;
|
|
37
|
+
--radius-lg: 12px;
|
|
38
|
+
--radius-round: 50%;
|
|
39
|
+
|
|
40
|
+
/* 阴影 */
|
|
41
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
42
|
+
--shadow-md: 0 2px 4px rgba(0, 0, 0, 0.1);
|
|
43
|
+
--shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.15);
|
|
44
|
+
}
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## 暗色主题
|
|
48
|
+
|
|
49
|
+
```css
|
|
50
|
+
/* 暗色主题 */
|
|
51
|
+
[data-theme='dark'] {
|
|
52
|
+
--color-primary: #ff5c45;
|
|
53
|
+
--color-secondary: #33eeee;
|
|
54
|
+
--color-background: #1a1a2e;
|
|
55
|
+
--color-surface: #252540;
|
|
56
|
+
--color-text: #ffffff;
|
|
57
|
+
--color-text-secondary: #a0a0a0;
|
|
58
|
+
--color-border: #33334d;
|
|
59
|
+
|
|
60
|
+
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
|
|
61
|
+
--shadow-md: 0 2px 4px rgba(0, 0, 0, 0.4);
|
|
62
|
+
--shadow-lg: 0 4px 8px rgba(0, 0, 0, 0.5);
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 使用 CSS 变量
|
|
67
|
+
|
|
68
|
+
```css
|
|
69
|
+
/* 组件样式 */
|
|
70
|
+
.button {
|
|
71
|
+
padding: var(--spacing-sm) var(--spacing-md);
|
|
72
|
+
background-color: var(--color-primary);
|
|
73
|
+
color: #ffffff;
|
|
74
|
+
border-radius: var(--radius-md);
|
|
75
|
+
font-size: var(--font-size-md);
|
|
76
|
+
box-shadow: var(--shadow-sm);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.button-secondary {
|
|
80
|
+
background-color: var(--color-secondary);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.card {
|
|
84
|
+
background-color: var(--color-surface);
|
|
85
|
+
border: 1px solid var(--color-border);
|
|
86
|
+
border-radius: var(--radius-lg);
|
|
87
|
+
padding: var(--spacing-md);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.title {
|
|
91
|
+
color: var(--color-text);
|
|
92
|
+
font-size: var(--font-size-xl);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.description {
|
|
96
|
+
color: var(--color-text-secondary);
|
|
97
|
+
font-size: var(--font-size-md);
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## 在 Lynx 中切换主题
|
|
102
|
+
|
|
103
|
+
```jsx
|
|
104
|
+
// ThemeProvider.jsx
|
|
105
|
+
import { useState, useEffect } from '@lynx-js/react';
|
|
106
|
+
|
|
107
|
+
export function ThemeProvider({ children }) {
|
|
108
|
+
const [theme, setTheme] = useState('light');
|
|
109
|
+
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
// 设置主题属性
|
|
112
|
+
document.documentElement.setAttribute('data-theme', theme);
|
|
113
|
+
}, [theme]);
|
|
114
|
+
|
|
115
|
+
const toggleTheme = () => {
|
|
116
|
+
setTheme((prev) => (prev === 'light' ? 'dark' : 'light'));
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
return (
|
|
120
|
+
<view className={`theme-wrapper ${theme}`}>
|
|
121
|
+
{children}
|
|
122
|
+
<view className="theme-toggle" bindtap={toggleTheme}>
|
|
123
|
+
<text>{theme === 'light' ? '🌙' : '☀️'}</text>
|
|
124
|
+
</view>
|
|
125
|
+
</view>
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## 最佳实践
|
|
131
|
+
|
|
132
|
+
1. **命名规范**: 使用 `--category-property` 格式
|
|
133
|
+
2. **分层定义**: 颜色、间距、字体分开定义
|
|
134
|
+
3. **语义化**: 使用 `--color-primary` 而非 `--color-red`
|
|
135
|
+
4. **默认值**: 始终提供默认值 `var(--prop, default)`
|
|
136
|
+
|
|
137
|
+
```css
|
|
138
|
+
.button {
|
|
139
|
+
/* 提供默认值 */
|
|
140
|
+
color: var(--button-color, var(--color-primary));
|
|
141
|
+
padding: var(--button-padding, var(--spacing-md));
|
|
142
|
+
}
|
|
143
|
+
```
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Lynx CSS Quick Reference
|
|
2
|
+
|
|
3
|
+
Quick reference for the most commonly used Lynx CSS and layout system features.
|
|
4
|
+
|
|
5
|
+
## Layout System Cheat Sheet
|
|
6
|
+
|
|
7
|
+
| Scenario | Recommended Display | Description |
|
|
8
|
+
| ---------------------------------- | ------------------- | -------------------------------------- |
|
|
9
|
+
| Simple list (performance priority) | `linear` | Default layout, similar to Flex Column |
|
|
10
|
+
| Flexible layout | `flex` | Standard CSS Flexbox |
|
|
11
|
+
| 2D grid | `grid` | CSS Grid subset |
|
|
12
|
+
| Relative positioning | `relative` | Android-style relative positioning |
|
|
13
|
+
|
|
14
|
+
## Display Types
|
|
15
|
+
|
|
16
|
+
| Value | Description | Version |
|
|
17
|
+
| ---------- | --------------------------------- | ------- |
|
|
18
|
+
| `none` | Hide element | 1.0 |
|
|
19
|
+
| `flex` | Flexbox layout | 1.0 |
|
|
20
|
+
| `grid` | Grid layout | 1.0 |
|
|
21
|
+
| `linear` | Linear layout (default) | 1.0 |
|
|
22
|
+
| `relative` | Relative layout | 2.0 |
|
|
23
|
+
| `block` | Block layout (falls back to Flex) | 2.0 |
|
|
24
|
+
| `auto` | Automatic selection | 2.0 |
|
|
25
|
+
|
|
26
|
+
## Supported CSS Properties (Common)
|
|
27
|
+
|
|
28
|
+
### Box Model
|
|
29
|
+
|
|
30
|
+
```css
|
|
31
|
+
width, height, min-width, min-height, max-width, max-height
|
|
32
|
+
margin, margin-top, margin-right, margin-bottom, margin-left
|
|
33
|
+
padding, padding-top, padding-right, padding-bottom, padding-left
|
|
34
|
+
border, border-radius
|
|
35
|
+
box-sizing (default: auto)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Flex Layout
|
|
39
|
+
|
|
40
|
+
```css
|
|
41
|
+
display: flex
|
|
42
|
+
flex-direction: row | column | row-reverse | column-reverse
|
|
43
|
+
flex-wrap: wrap | nowrap | wrap-reverse
|
|
44
|
+
flex-flow: <direction> <wrap> /* shorthand */
|
|
45
|
+
justify-content: flex-start | center | flex-end | space-between | space-around | space-evenly | stretch /* stretch: 2.1+ */
|
|
46
|
+
align-items: flex-start | center | flex-end | stretch | baseline
|
|
47
|
+
align-self: auto | flex-start | center | flex-end | stretch | baseline
|
|
48
|
+
flex-grow, flex-shrink, flex-basis
|
|
49
|
+
flex: <grow> <shrink> <basis> /* shorthand */
|
|
50
|
+
order
|
|
51
|
+
gap, row-gap, column-gap
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Grid Layout (Subset)
|
|
55
|
+
|
|
56
|
+
```css
|
|
57
|
+
display: grid
|
|
58
|
+
grid-template-columns, grid-template-rows
|
|
59
|
+
grid-auto-columns, grid-auto-rows
|
|
60
|
+
grid-column-start, grid-column-end
|
|
61
|
+
grid-row-start, grid-row-end
|
|
62
|
+
grid-column-span, grid-row-span
|
|
63
|
+
gap, row-gap, column-gap
|
|
64
|
+
grid-auto-flow: row | column | dense | row dense | column dense
|
|
65
|
+
justify-items, justify-self
|
|
66
|
+
align-items, align-self /* 注意:使用 flex-start/flex-end 而非 start/end */
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
> ⚠️ **注意**: Lynx 不支持 `grid-column`、`grid-row`、`grid-area` 简写属性。请使用 `*-start/*-end` 替代。
|
|
70
|
+
|
|
71
|
+
### Linear Layout (Lynx-Specific)
|
|
72
|
+
|
|
73
|
+
```css
|
|
74
|
+
display: linear
|
|
75
|
+
linear-orientation: horizontal | vertical | row | column | row-reverse | column-reverse
|
|
76
|
+
linear-direction: row | column | row-reverse | column-reverse /* 2.2+ */
|
|
77
|
+
linear-gravity: top | bottom | left | right | center | center-vertical | center-horizontal | start | end | space-between
|
|
78
|
+
linear-layout-gravity: none | top | bottom | left | right | center | fill-vertical | fill-horizontal | stretch
|
|
79
|
+
linear-cross-gravity: none | start | end | center | stretch
|
|
80
|
+
linear-weight: <number>
|
|
81
|
+
linear-weight-sum: <number>
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Relative Layout (Lynx-Specific)
|
|
85
|
+
|
|
86
|
+
```css
|
|
87
|
+
display: relative
|
|
88
|
+
relative-id: <number>
|
|
89
|
+
relative-align-top: <id> | parent
|
|
90
|
+
relative-align-bottom: <id> | parent
|
|
91
|
+
relative-align-left: <id> | parent
|
|
92
|
+
relative-align-right: <id> | parent
|
|
93
|
+
relative-align-inline-start: <id> | parent /* RTL support */
|
|
94
|
+
relative-align-inline-end: <id> | parent /* RTL support */
|
|
95
|
+
relative-top-of: <id>
|
|
96
|
+
relative-bottom-of: <id>
|
|
97
|
+
relative-left-of: <id>
|
|
98
|
+
relative-right-of: <id>
|
|
99
|
+
relative-inline-start-of: <id> /* RTL support */
|
|
100
|
+
relative-inline-end-of: <id> /* RTL support */
|
|
101
|
+
relative-center: none | vertical | horizontal | both
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Positioning
|
|
105
|
+
|
|
106
|
+
```css
|
|
107
|
+
position: relative | absolute | fixed | sticky top, right, bottom, left
|
|
108
|
+
inset-inline-start, inset-inline-end /* RTL support */ z-index;
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
> **⚠️ z-index Note**: In scrollable containers like `scroll-view` and `fold-view`, child elements with `z-index` may not follow scroll. **Solution**: Add `z-index: 0` to the parent container to establish the same stacking context.
|
|
112
|
+
|
|
113
|
+
### Visual
|
|
114
|
+
|
|
115
|
+
```css
|
|
116
|
+
background, background-color, background-image
|
|
117
|
+
background-size, background-position, background-repeat
|
|
118
|
+
opacity
|
|
119
|
+
transform: translate, scale, rotate
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Text
|
|
123
|
+
|
|
124
|
+
```css
|
|
125
|
+
color, font-size, font-weight, font-family, font-style
|
|
126
|
+
line-height, text-align, text-decoration
|
|
127
|
+
white-space: normal | nowrap
|
|
128
|
+
text-overflow: clip | ellipsis
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Lynx vs Web CSS Key Differences
|
|
132
|
+
|
|
133
|
+
| Web CSS | Lynx Support | Notes |
|
|
134
|
+
| ------------------------- | -------------------------------- | ---------------------------------------------------- |
|
|
135
|
+
| `display: block` | ✅ Supported (2.0+) | Falls back to Flex/Linear |
|
|
136
|
+
| `display: inline` | ❌ Not supported | Use `<text>` component |
|
|
137
|
+
| `display: inline-block` | ❌ Not supported | Use Flex/Grid |
|
|
138
|
+
| `float` | ❌ Not supported | Use Flex/Grid |
|
|
139
|
+
| `position: static` | ❌ Not supported | Use `position: relative` |
|
|
140
|
+
| `box-sizing: content-box` | ⚠️ Supported but not default | Default is `border-box` (Web default is `content-box`) |
|
|
141
|
+
| `min-content` | ⚠️ Partial support | Treated as 0px in flex-basis |
|
|
142
|
+
| `max-content` | ✅ Supported | Available |
|
|
143
|
+
| `fit-content` | ✅ Supported | Available |
|
|
144
|
+
| Margin collapsing | ❌ Not supported | Margins do not collapse |
|
|
145
|
+
|
|
146
|
+
## Selector Support
|
|
147
|
+
|
|
148
|
+
### Fully Supported (Parsed + Matched)
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
✅ Tag selectors: view, text, image
|
|
152
|
+
✅ Class selectors: .class-name
|
|
153
|
+
✅ ID selectors: #id-name
|
|
154
|
+
✅ Descendant selectors: .parent .child
|
|
155
|
+
✅ Child selectors: .parent > .child
|
|
156
|
+
✅ Adjacent sibling: .prev + .next
|
|
157
|
+
✅ General sibling: .prev ~ .sibling
|
|
158
|
+
✅ Attribute selectors: [type="text"]
|
|
159
|
+
✅ Pseudo-classes: :hover, :active, :focus, :not(), :root
|
|
160
|
+
✅ Pseudo-elements: ::placeholder, ::selection
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Not Supported (Parsed but NOT Matched)
|
|
164
|
+
|
|
165
|
+
```
|
|
166
|
+
❌ Structural pseudo-classes: :first-child, :last-child, :nth-child()
|
|
167
|
+
❌ Pseudo-elements: ::before, ::after
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
> **Note:** These selectors are recognized by the CSS parser but lack matching implementation in the selector engine. They will not apply styles.
|
|
171
|
+
|
|
172
|
+
## Unit Support
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
✅ px - Pixels
|
|
176
|
+
✅ % - Percentage
|
|
177
|
+
✅ vw, vh - Viewport units
|
|
178
|
+
✅ rem - Root element font size (recommended for responsive)
|
|
179
|
+
✅ em - Relative font units
|
|
180
|
+
⚠️ rpx - Responsive pixels (Lynx-specific, lacks web compatibility)
|
|
181
|
+
❌ cm, mm, in, pt, pc - Physical units not supported
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Responsive Adaptation (Recommended)**:
|
|
185
|
+
|
|
186
|
+
```css
|
|
187
|
+
/* Set base font size on root element */
|
|
188
|
+
page {
|
|
189
|
+
font-size: calc(100vw / 23.4375); /* 1rem = 16px @ 375px */
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/* Use rem for responsive sizing */
|
|
193
|
+
.container {
|
|
194
|
+
padding: 2rem;
|
|
195
|
+
font-size: 1rem;
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## CSS Function Support
|
|
200
|
+
|
|
201
|
+
### calc() - Partial Support
|
|
202
|
+
|
|
203
|
+
- ✅ **Supported in:** Length properties (width, height, margin, padding, flex-basis, etc.)
|
|
204
|
+
- ❌ **Not supported in:** Enum properties (flex-direction, justify-content, align-items, etc.), colors, or numbers
|
|
205
|
+
|
|
206
|
+
Example:
|
|
207
|
+
|
|
208
|
+
```css
|
|
209
|
+
/* ✅ Works */
|
|
210
|
+
width: calc(100% - 20px);
|
|
211
|
+
margin: calc(var(--spacing) * 2);
|
|
212
|
+
|
|
213
|
+
/* ❌ Does NOT work */
|
|
214
|
+
flex-direction: calc(row); /* Enum property */
|
|
215
|
+
color: calc(#ff0000); /* Color property */
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### var() - Full Support
|
|
219
|
+
|
|
220
|
+
```css
|
|
221
|
+
/* Works in all properties */
|
|
222
|
+
color: var(--primary-color);
|
|
223
|
+
width: var(--sidebar-width);
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### env() - Partial Support
|
|
227
|
+
|
|
228
|
+
- ✅ **Supported:** `safe-area-inset-*` for notched devices
|
|
229
|
+
- ❌ **Not supported:** Other environment variables
|