@xihan-ui/styles 2.0.0 → 2.1.0
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/CHANGELOG.md +101 -0
- package/component-tokens.d.ts +0 -15
- package/components.tokens.json +65 -396
- package/css/accordion.css +6 -6
- package/css/alert.css +2 -2
- package/css/anchor.css +3 -3
- package/css/approval.css +8 -8
- package/css/back-top.css +2 -2
- package/css/badge.css +1 -1
- package/css/breadcrumb.css +1 -1
- package/css/button-group.css +1 -1
- package/css/button.css +2 -2
- package/css/calendar-picker.css +8 -8
- package/css/calendar-range-picker.css +9 -9
- package/css/card.css +1 -1
- package/css/carousel.css +6 -6
- package/css/cascader.css +3 -5
- package/css/checkbox-group.css +10 -10
- package/css/checkbox.css +5 -5
- package/css/clipboard.css +4 -4
- package/css/code-view.css +2 -2
- package/css/collapsible.css +4 -4
- package/css/color-picker.css +2 -4
- package/css/color-slider.css +4 -4
- package/css/color-swatch-picker.css +5 -5
- package/css/combobox.css +2 -4
- package/css/command.css +3 -5
- package/css/context-menu.css +4 -6
- package/css/date-picker.css +0 -2
- package/css/date-range-picker.css +0 -2
- package/css/descriptions.css +1 -1
- package/css/dialog.css +5 -7
- package/css/diff-view.css +4 -4
- package/css/download-trigger.css +3 -3
- package/css/drawer.css +9 -15
- package/css/empty-state.css +1 -1
- package/css/field.css +1 -1
- package/css/fieldset.css +1 -1
- package/css/file-upload.css +1 -1
- package/css/float-button.css +3 -3
- package/css/floating-panel.css +6 -8
- package/css/form.css +3 -3
- package/css/heatmap.css +1 -1
- package/css/hover-card.css +2 -4
- package/css/image-cropper.css +2 -2
- package/css/image-viewer.css +2 -4
- package/css/infinite-scroll.css +2 -2
- package/css/input-group.css +2 -2
- package/css/json-viewer.css +5 -5
- package/css/kbd.css +1 -1
- package/css/layout.css +3 -3
- package/css/list.css +1 -1
- package/css/listbox.css +26 -17
- package/css/log.css +2 -2
- package/css/mention.css +0 -2
- package/css/menu.css +5 -7
- package/css/menubar.css +6 -8
- package/css/message-feed.css +2 -2
- package/css/navigation-menu.css +5 -7
- package/css/notification.css +3 -3
- package/css/page-header.css +1 -1
- package/css/pagination.css +5 -7
- package/css/popconfirm.css +6 -8
- package/css/popover.css +5 -7
- package/css/prompt-input.css +1 -1
- package/css/question-flow.css +7 -7
- package/css/radio-group.css +9 -9
- package/css/rating.css +4 -4
- package/css/reasoning.css +5 -5
- package/css/reset.css +1 -1
- package/css/segmented.css +7 -7
- package/css/select.css +2 -4
- package/css/side-nav.css +4 -6
- package/css/signature-pad.css +7 -7
- package/css/slider.css +5 -5
- package/css/sortable.css +1 -1
- package/css/splitter.css +1 -1
- package/css/steps.css +10 -10
- package/css/switch.css +8 -8
- package/css/table.css +11 -11
- package/css/tabs.css +12 -12
- package/css/tag-group.css +39 -35
- package/css/tag.css +2 -2
- package/css/time-picker.css +0 -2
- package/css/time-range-picker.css +0 -2
- package/css/toast.css +3 -3
- package/css/toggle-group.css +4 -4
- package/css/toggle.css +2 -2
- package/css/tool-call.css +5 -5
- package/css/toolbar.css +4 -4
- package/css/tooltip.css +4 -6
- package/css/tour.css +7 -9
- package/css/transfer.css +6 -6
- package/css/tree-select.css +3 -5
- package/css/tree.css +46 -99
- package/css/virtualizer.css +1 -1
- package/family/collection-item.css +61 -12
- package/family/motion.css +1 -1
- package/index.css +506 -553
- package/index.unlayered.css +506 -553
- package/package.json +2 -2
package/css/toggle.css
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
/* 未按下的四档形态由家族形态矩阵按 data-xh-action-variant 给出(缺省 subtle 由连接层显式投影;solid 未按下时
|
|
16
16
|
投 ghost,只在按下时才是品牌实心);公开槽桥接到矩阵之前:使用者槽 → 形态矩阵 → 家族缺省。
|
|
17
|
-
按下(on
|
|
17
|
+
按下(on)是无滑块开关的选中面:品牌淡底 12 → 悬停 20 → 按压 28,前景 fg-on-brand-subtle,
|
|
18
18
|
私有槽在下面的 data-state='on' 块里接到桥接槽上。 */
|
|
19
19
|
[data-scope='toggle'][data-part='root'] {
|
|
20
20
|
--xh-_toggle-bg-on: var(--xh-toggle-bg-on, var(--xh-_tone-subtle, var(--xh-bg-brand-subtle)));
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
--xh-action-border-disabled: var(--xh-_toggle-border-on);
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
/* 使用者的 --xh-toggle-shadow
|
|
100
|
+
/* 使用者的 --xh-toggle-shadow 只落在按下面上:矩阵各态无影,淡底与阴影互斥 */
|
|
101
101
|
[data-scope='toggle'][data-part='root'][data-state='on'] {
|
|
102
102
|
--xh-action-shadow-rest: var(--xh-toggle-shadow, none);
|
|
103
103
|
--xh-action-shadow-hover: var(--xh-toggle-shadow, none);
|
package/css/tool-call.css
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
--xh-tool-call-skin: 1;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
/* 一张静态内容面:--xh-border-default 描边 + surface 底 +
|
|
19
|
+
/* 一张静态内容面:--xh-border-default 描边 + surface 底 + 无影(边界只由描边承担);
|
|
20
20
|
审批位与详情区的内部分隔线走另一支 --xh-tool-call-divider(subtle)。
|
|
21
21
|
卡片建出来时淡入并向上收一段,一屏若干张的错峰交给外层容器排 */
|
|
22
22
|
[data-scope='tool-call'][data-part='root'] {
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
/* 影另落一份进私有槽给语气档:它要把影与左侧色条叠成一条 box-shadow,缺省无影写成零影占位 */
|
|
30
30
|
--xh-_tool-call-shadow: var(--xh-tool-call-shadow, 0 0 0 transparent);
|
|
31
31
|
|
|
32
|
-
/* 作者塞进指示符里的图标与皮肤画的兜底字形同一把尺:md
|
|
32
|
+
/* 作者塞进指示符里的图标与皮肤画的兜底字形同一把尺:md 档,开关上另按家族档取值 */
|
|
33
33
|
--xh-icon-size: var(--xh-tool-call-icon-size, var(--xh-glyph-size-md));
|
|
34
34
|
|
|
35
35
|
display: block;
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
/* —— 形态 —— */
|
|
50
50
|
/* 缺省档即 outline,写在上面那条基础规则里 */
|
|
51
51
|
/* 底色分区:描边让位给底色,嵌在别人的面里时不再多一圈线;
|
|
52
|
-
淡底承载面向开关下发 hover 200 → pressed 300
|
|
52
|
+
淡底承载面向开关下发 hover 200 → pressed 300 */
|
|
53
53
|
[data-scope='tool-call'][data-part='root'][data-variant='subtle'] {
|
|
54
54
|
--xh-action-host-bg-hover: var(--xh-bg-subtle-hover);
|
|
55
55
|
--xh-action-host-bg-pressed: var(--xh-bg-subtle-active);
|
|
@@ -84,7 +84,7 @@
|
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
/* 开关铺满一行,盒型、悬停 / 按下 / 禁用面由 Action Control 的 disclosure-trigger 档给(ghost 形态:
|
|
87
|
-
白底承载 hover 100 → pressed 200
|
|
87
|
+
白底承载 hover 100 → pressed 200,按下只换面不缩放);这里只把使用者槽映射到桥接槽:
|
|
88
88
|
圆角归零贴住卡边,内衬与字号沿用卡片的档位(不取 profile 的 md 档内衬,几何不变),
|
|
89
89
|
字形按开关自己的档位取 --xh-_action-profile-glyph-size */
|
|
90
90
|
[data-scope='tool-call'][data-part='trigger'] {
|
|
@@ -309,7 +309,7 @@
|
|
|
309
309
|
animation: xh-disclosure-expand var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
310
310
|
}
|
|
311
311
|
|
|
312
|
-
/* 退场走 exit
|
|
312
|
+
/* 退场走 exit 档曲线 */
|
|
313
313
|
[data-scope='tool-call'][data-part='content'][data-state='closed'] {
|
|
314
314
|
animation: xh-disclosure-collapse var(--xh-motion-duration-exit) var(--xh-motion-ease-exit) forwards;
|
|
315
315
|
}
|
package/css/toolbar.css
CHANGED
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
/* 淡底档:带内距、换成 subtle 底,描边让位给底色但留住 1px 边位(与 outline 几何一致),无影;
|
|
72
|
-
淡底承载面向条目下发 hover 200 → pressed 300
|
|
72
|
+
淡底承载面向条目下发 hover 200 → pressed 300 */
|
|
73
73
|
[data-scope='toolbar'][data-part='root'][data-variant='subtle'] {
|
|
74
74
|
--xh-_toolbar-root-p: var(--xh-_toolbar-p);
|
|
75
75
|
--xh-_toolbar-root-border-width: var(--xh-stroke-thin);
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
--xh-action-host-bg-pressed: var(--xh-bg-subtle-active);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
/* 附着式工具面:一张静态内容面,--xh-border-default 描边 + surface 底 +
|
|
81
|
+
/* 附着式工具面:一张静态内容面,--xh-border-default 描边 + surface 底 + 无影(边界只由描边承担)。 */
|
|
82
82
|
[data-scope='toolbar'][data-part='root'][data-variant='outline'] {
|
|
83
83
|
--xh-_toolbar-root-p: var(--xh-_toolbar-p);
|
|
84
84
|
--xh-_toolbar-root-border-width: var(--xh-stroke-thin);
|
|
@@ -145,7 +145,7 @@
|
|
|
145
145
|
|
|
146
146
|
/* 默认条目是一枚无描边工具按钮:盒型、三档几何、悬停 / 按下 / 禁用面与按压缩放由 Action Control 的
|
|
147
147
|
text 档给(ghost 形态:ghost 根按画布承载 hover 100 → pressed 200,subtle 根与分组由 host 槽下发
|
|
148
|
-
200 → 300
|
|
148
|
+
200 → 300);这里只把使用者槽映射到桥接槽(-gap / -h / -px / -radius / -bg / -bg-hover /
|
|
149
149
|
-bg-active / -bg-disabled / -fg / -font-size 保留为第一参数)。作者仍可用类名或内联样式完整覆盖。 */
|
|
150
150
|
[data-scope='toolbar'][data-part='item'] {
|
|
151
151
|
--xh-action-gap: var(--xh-toolbar-item-gap, var(--xh-control-gap-sm));
|
|
@@ -165,7 +165,7 @@
|
|
|
165
165
|
touch-action: manipulation;
|
|
166
166
|
}
|
|
167
167
|
|
|
168
|
-
/*
|
|
168
|
+
/* 无滑块开关的按下态:品牌淡底 + 淡底前景,hover / 按下沿 12% → 20% → 28% 三档走;
|
|
169
169
|
三态都经桥接槽交给家族画,禁用面仍由家族按 data-disabled 给 */
|
|
170
170
|
[data-scope='toolbar'][data-part='item'][aria-pressed='true'] {
|
|
171
171
|
--xh-action-bg-rest: var(--xh-toolbar-item-bg-pressed, var(--xh-bg-brand-subtle));
|
package/css/tooltip.css
CHANGED
|
@@ -75,10 +75,10 @@
|
|
|
75
75
|
--xh-_tooltip-py: var(--xh-space-1);
|
|
76
76
|
--xh-_tooltip-px: var(--xh-space-2);
|
|
77
77
|
--xh-_tooltip-font-size: var(--xh-control-caption-md);
|
|
78
|
-
/* Tooltip
|
|
78
|
+
/* Tooltip 保留反白身份(登记的反白 compact frosted):短提示要与可交互的普通主题浮层一眼分开。
|
|
79
79
|
94% 是六种 tone 在纯黑/纯白最坏底色上仍托住 4.5:1 正文的首个安全档。
|
|
80
80
|
边不取 --xh-material-frosted-border:那是深色 14% 的透明边,压在反白深底上看不见,
|
|
81
|
-
|
|
81
|
+
浮层要的 1px 可见边界由 on 色 20% 拼色承担;浮层不用玻璃高光,顶光缺省不画 */
|
|
82
82
|
--xh-_tooltip-solid: var(--xh-_tone, var(--xh-fg-default));
|
|
83
83
|
--xh-_tooltip-on: var(--xh-_tone-on, var(--xh-bg-surface));
|
|
84
84
|
--xh-_tooltip-border: color-mix(in oklab, var(--xh-_tooltip-on) 20%, transparent);
|
|
@@ -106,7 +106,7 @@
|
|
|
106
106
|
text-wrap: pretty;
|
|
107
107
|
--xh-_tooltip-elevation-shadow: var(--xh-tooltip-shadow, var(--xh-material-frosted-compact-shadow));
|
|
108
108
|
|
|
109
|
-
/*
|
|
109
|
+
/* 顶光槽缺省透明(不用顶部高光),使用者要加自行灌色 */
|
|
110
110
|
box-shadow:
|
|
111
111
|
inset 0 var(--xh-stroke-thin) 0 var(--xh-tooltip-highlight, transparent),
|
|
112
112
|
var(--xh-_tooltip-elevation-shadow);
|
|
@@ -126,11 +126,9 @@
|
|
|
126
126
|
pointer-events: none;
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
/* 入场走 enter
|
|
129
|
+
/* 入场走 enter 档(锚定列表族的 tooltip 入场 --xh-motion-duration-enter),退场仍是 exit */
|
|
130
130
|
[data-scope='tooltip'][data-part='content'][data-state='open'] {
|
|
131
131
|
animation: xh-overlay-slide-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
132
|
-
/* 只在开着的这一档挂:合成层随 data-state 一起收走,收起后不再占着 */
|
|
133
|
-
will-change: opacity, translate;
|
|
134
132
|
}
|
|
135
133
|
|
|
136
134
|
/* 退场:收起那一帧 hidden 由退场闸门押后,这里才播得出来。forwards 把末态钉住,
|
package/css/tour.css
CHANGED
|
@@ -191,7 +191,7 @@
|
|
|
191
191
|
padding-inline: var(--xh-tour-px, var(--xh-surface-px-md));
|
|
192
192
|
/* 引导步骤的正文长度由作者定,矮视口下不限高气泡会整块伸出视口 */
|
|
193
193
|
max-block-size: min(var(--xh-tour-max-h, var(--xh-overlay-max-h)), var(--xh-_tour-available-h));
|
|
194
|
-
/* M4 sheet
|
|
194
|
+
/* M4 sheet 三件套,与 dialog 同源:1px 描边是它的边界,不透明底,影只是加成 */
|
|
195
195
|
border: var(--xh-stroke-thin) solid var(--xh-tour-border, var(--xh-material-elevated-border));
|
|
196
196
|
border-radius: var(--xh-tour-radius, var(--xh-shape-overlay));
|
|
197
197
|
background: var(--xh-tour-bg, var(--xh-material-elevated-bg));
|
|
@@ -211,8 +211,6 @@
|
|
|
211
211
|
|
|
212
212
|
[data-scope='tour'][data-part='content'][data-state='open'] {
|
|
213
213
|
animation: xh-overlay-pop-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
214
|
-
/* 只在开着的这一档挂:合成层随 data-state 一起收走,收起后不再占着 */
|
|
215
|
-
will-change: opacity, scale, translate;
|
|
216
214
|
}
|
|
217
215
|
|
|
218
216
|
/* 退场:收起那一帧 hidden 由退场闸门押后,这里才播得出来。forwards 把末态钉住,
|
|
@@ -235,7 +233,7 @@
|
|
|
235
233
|
padding-inline-end: calc(var(--xh-tour-close-size, var(--xh-control-h-sm)) + var(--xh-surface-action-inset));
|
|
236
234
|
}
|
|
237
235
|
|
|
238
|
-
/*
|
|
236
|
+
/* 说明文字走说明档:13px + fg-muted */
|
|
239
237
|
[data-scope='tour'][data-part='description'] {
|
|
240
238
|
margin: 0;
|
|
241
239
|
font-size: var(--xh-text-secondary-size);
|
|
@@ -260,7 +258,7 @@
|
|
|
260
258
|
display: none;
|
|
261
259
|
}
|
|
262
260
|
|
|
263
|
-
/* 圆点:8px 正圆取 circle
|
|
261
|
+
/* 圆点:8px 正圆取 circle(分页点统一款),未走到的一档取中性描边色。
|
|
264
262
|
宽度与底色都随状态换,换步那一下能看出进度在推进 */
|
|
265
263
|
[data-scope='tour'][data-part='progress-dot'] {
|
|
266
264
|
inline-size: var(--xh-space-2);
|
|
@@ -286,7 +284,7 @@
|
|
|
286
284
|
|
|
287
285
|
/*
|
|
288
286
|
* —— 末行三颗按钮 ——
|
|
289
|
-
* 上一步 / 下一步 /
|
|
287
|
+
* 上一步 / 下一步 / 跳过都是气泡末行的文字按钮:盒型、sm 档几何、四态面、0.97 按压并换底、粗指针命中区与
|
|
290
288
|
* 强制色由家族配方按连接层投影的 data-xh-action-variant / -size 给出。这里只把公开槽桥接到矩阵之前
|
|
291
289
|
* (使用者槽 → 形态矩阵 → 家族缺省)与几何映射;内衬与圆角槽三颗共用。
|
|
292
290
|
*/
|
|
@@ -305,7 +303,7 @@
|
|
|
305
303
|
display: none;
|
|
306
304
|
}
|
|
307
305
|
|
|
308
|
-
/* 下一步是整条引导的主线动作,显式 solid
|
|
306
|
+
/* 下一步是整条引导的主线动作,显式 solid:底、字与影三组使用者槽桥到配方 solid 列之前 */
|
|
309
307
|
[data-scope='tour'][data-part='next-trigger'] {
|
|
310
308
|
--xh-action-bg-rest: var(--xh-tour-next-bg, var(--xh-_action-variant-bg-rest));
|
|
311
309
|
--xh-action-bg-hover: var(--xh-tour-next-bg-hover, var(--xh-_action-variant-bg-hover));
|
|
@@ -324,7 +322,7 @@
|
|
|
324
322
|
}
|
|
325
323
|
|
|
326
324
|
/*
|
|
327
|
-
*
|
|
325
|
+
* 关闭钮是气泡角落的单图标钮:正方盒、sm 档几何、ghost 四态面、0.97 按压并换底与粗指针命中区
|
|
328
326
|
* 由家族配方给出——白面上走画布承载阶梯悬停 --xh-bg-subtle(100)→ 按下 --xh-bg-subtle-hover(200),
|
|
329
327
|
* 焦点面透明吃库环。这里只把公开槽桥接到矩阵之前(使用者槽 → 形态矩阵 → 家族缺省)与摆放;
|
|
330
328
|
* 静息前景取 muted 字色,悬停 / 按下 / 聚焦回到 fg-default。
|
|
@@ -383,7 +381,7 @@
|
|
|
383
381
|
|
|
384
382
|
@layer xihan.components {
|
|
385
383
|
/* 气泡限高之后只让正文让步:标题与上下步按钮滚出视线就点不到了。
|
|
386
|
-
|
|
384
|
+
模态气泡里的原生细条滚动面:细条由 reset 层统一给,滚到头不把页面一起带走;内容高度不动态变化,不写 gutter */
|
|
387
385
|
[data-scope='tour'][data-part='description'] {
|
|
388
386
|
flex: 1 1 auto;
|
|
389
387
|
min-block-size: 0;
|
package/css/transfer.css
CHANGED
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
所以只能按位置显式安放,不能靠自动流——自动流会把"往回搬"甩到目标面板的位置上 */
|
|
23
23
|
[data-scope='transfer'][data-part='root'] {
|
|
24
24
|
/* 条目外的字形(空态占位里作者塞的图标)按档取尺,缺省 md;条目内的字形由家族随 data-xh-collection-size
|
|
25
|
-
下发,搬运钮内的按 Action Control icon
|
|
25
|
+
下发,搬运钮内的按 Action Control icon 档取,勾选格里的勾按边长比例取 */
|
|
26
26
|
--xh-icon-size: var(--xh-transfer-icon-size, var(--xh-glyph-size-md));
|
|
27
|
-
/*
|
|
27
|
+
/* 两侧定高小列表的自绘条挂在根上:根是条子的定位盒(面板不定位),轨道底色关掉才不会在列表边缘糊出一条灰带 */
|
|
28
28
|
--xh-scrollbar-track-bg: transparent;
|
|
29
29
|
|
|
30
30
|
/* 尺寸档只换这五个私有槽,面板头、搜索框、条目与勾选格都从 root 继承它们,
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
min-inline-size: 0;
|
|
141
141
|
overflow: hidden;
|
|
142
142
|
color: var(--xh-transfer-panel-title-fg, var(--xh-fg-default));
|
|
143
|
-
/* 面板标头是 Surface 内的标题:14 / 600
|
|
143
|
+
/* 面板标头是 Surface 内的标题:14 / 600 */
|
|
144
144
|
font-size: var(--xh-transfer-panel-title-font-size, var(--xh-text-label-size));
|
|
145
145
|
font-weight: var(--xh-transfer-panel-title-font-weight, var(--xh-font-weight-semibold));
|
|
146
146
|
line-height: var(--xh-leading-none);
|
|
@@ -285,7 +285,7 @@
|
|
|
285
285
|
color: var(--xh-fg-disabled);
|
|
286
286
|
}
|
|
287
287
|
|
|
288
|
-
/* 条目走 Collection Item 的 page
|
|
288
|
+
/* 条目走 Collection Item 的 page 语境(页内持久集合):悬停 / 高亮 / 按下面(白底承载 hover 100 →
|
|
289
289
|
pressed 200)与勾选行的选中面(品牌淡底 + 淡底前景,selected+hover 20% / +pressed 28%)都由家族按
|
|
290
290
|
aria-selected / aria-disabled 给出,标记由行首的勾选方框承担;禁用面(字色降级、not-allowed、不换面)
|
|
291
291
|
也归家族。这里只把公开槽映射到桥接槽。
|
|
@@ -448,7 +448,7 @@
|
|
|
448
448
|
}
|
|
449
449
|
|
|
450
450
|
/* 全选格是原生按钮(三态经 aria-checked 上报,激活由平台负责),禁用同时打原生 disabled 与 data-disabled。
|
|
451
|
-
它是「方框 +
|
|
451
|
+
它是「方框 + 文案」的整行命中区:接 Action Control text 档、ghost 形态,悬停 / 按下 / 禁用面与过渡由家族给
|
|
452
452
|
(白底承载 hover 100 → pressed 200),按下只换面不缩放(--xh-action-scale-pressed: none),勾选回执落在方框上;
|
|
453
453
|
盒随内容收宽、高度取 xs 档的 24px 命中地板(方框 16px 居中其间),text 档的内距与最小宽度归零。
|
|
454
454
|
position 是给叠在方框上的那颗字形 ::after 当定位基准 */
|
|
@@ -486,7 +486,7 @@
|
|
|
486
486
|
|
|
487
487
|
/* 两颗搬运钮是只有字形的离散动作钮:接 Action Control 的 icon 档、outline 形态(中性描边、透明底,
|
|
488
488
|
白底承载 hover 100 → pressed 200,按下 0.97 并同时换底),盒、焦点环、粗指针热区与禁用面由家族给;
|
|
489
|
-
此前的 raised
|
|
489
|
+
此前的 raised 悬停抬升退役(边界只由描边承担)。这里只把使用者槽映射到桥接槽;
|
|
490
490
|
钮是正方盒,按 sm 档取一个控件高 */
|
|
491
491
|
[data-scope='transfer'][data-part='to-target-trigger'],
|
|
492
492
|
[data-scope='transfer'][data-part='to-source-trigger'] {
|
package/css/tree-select.css
CHANGED
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
[data-scope='tree-select']:is([data-part='root'], [data-part='positioner']) {
|
|
70
70
|
/* 作者塞进触发器指示符槽 / 清除钮的图标跟着尺寸档走,与皮肤画的兜底字形同一把尺。这支只管作者放进
|
|
71
71
|
盒与行里的图标:面板里自绘的状态字形(展开方向、行尾对号与半选杠)是指示符,各部件在自己身上
|
|
72
|
-
把 --xh-icon-size 改接到 --xh-control-indicator-*
|
|
72
|
+
把 --xh-icon-size 改接到 --xh-control-indicator-* 一族的盒尺 */
|
|
73
73
|
--xh-icon-size: var(--xh-tree-select-icon-size, var(--xh-glyph-size-md));
|
|
74
74
|
|
|
75
75
|
/* 尺寸档只换这几个私有槽,盒与树里的行都从这两处继承它们,换档不必给每个部件各写一条选择器;
|
|
@@ -327,8 +327,6 @@
|
|
|
327
327
|
|
|
328
328
|
[data-scope='tree-select'][data-part='content'][data-state='open'] {
|
|
329
329
|
animation: xh-overlay-slide-in var(--xh-motion-duration-enter) var(--xh-motion-ease-enter-strong);
|
|
330
|
-
/* 只在开着的这一档挂:合成层随 data-state 一起收走,收起后不再占着 */
|
|
331
|
-
will-change: opacity, translate;
|
|
332
330
|
}
|
|
333
331
|
|
|
334
332
|
/* 退场:收起那一帧 hidden 由退场闸门押后,这里才播得出来。forwards 把末态钉住,
|
|
@@ -552,7 +550,7 @@
|
|
|
552
550
|
/* 勾选标记落在家族网格的 indicator 列;未选中时占位不塌,切换选中不引起行宽抖动。
|
|
553
551
|
尺寸槽按各自部件取名:行内的勾与展开箭头分别是 item- 与 branch- 段,
|
|
554
552
|
触发器上那枚箭头是 --xh-tree-select-indicator-*,三处各调各的。
|
|
555
|
-
盒里的对号 /
|
|
553
|
+
盒里的对号 / 半选杠是指示符:在自己身上把 --xh-icon-size 改接到盒的尺,兜底字形与作者
|
|
556
554
|
塞进盒里的 XhIcon 读同一把尺、与盒同边长;不读家族按档下发到行的 --xh-icon-size——那支只管
|
|
557
555
|
作者放进行里的图标,按图标档取的 20px 会比 16 / 14 的盒还大 */
|
|
558
556
|
[data-scope='tree-select'][data-part='item-indicator'] {
|
|
@@ -582,7 +580,7 @@
|
|
|
582
580
|
|
|
583
581
|
/* 展开箭头与方向指示符:两者都可能被作者用作「点这里展开」的把手,
|
|
584
582
|
所以尺寸与叶子的勾选标记一致,两种行的文字起点才对得齐。
|
|
585
|
-
盒里的 chevron
|
|
583
|
+
盒里的 chevron 是指示符:与盒同边长,--xh-icon-size 在自己身上改接到盒的尺 */
|
|
586
584
|
[data-scope='tree-select'][data-part='branch-trigger'],
|
|
587
585
|
[data-scope='tree-select'][data-part='branch-indicator'] {
|
|
588
586
|
--xh-icon-size: var(--xh-tree-select-branch-indicator-size, var(--xh-control-indicator-size));
|
package/css/tree.css
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
|
|
16
16
|
[data-scope='tree'][data-part='root'] {
|
|
17
17
|
/* 行外的字形(空态 / 在途占位里作者塞的图标)按档取尺,树没有 size 轴、固定 md;
|
|
18
|
-
行内的由家族随 data-xh-collection-size
|
|
19
|
-
|
|
18
|
+
行内的由家族随 data-xh-collection-size 下发。这支只管作者放进行里的图标:
|
|
19
|
+
树自绘的状态字形(展开方向、行尾对号与半选杠)是指示符,各部件在自己身上
|
|
20
20
|
把 --xh-icon-size 改接到 --xh-control-indicator-* 一族的盒尺 */
|
|
21
21
|
--xh-icon-size: var(--xh-tree-icon-size, var(--xh-glyph-size-md));
|
|
22
22
|
|
|
@@ -146,10 +146,10 @@
|
|
|
146
146
|
}
|
|
147
147
|
|
|
148
148
|
/* 行:叶子与分支共用同一套盒子,两种行在视觉上必须齐平。
|
|
149
|
-
行走 Collection Item 的
|
|
150
|
-
|
|
151
|
-
aria-selected / data-selected 与 aria-disabled / data-disabled
|
|
152
|
-
布局保持 flex
|
|
149
|
+
行走 Collection Item 的 overlay 语境,与树选择同一种选中读法:悬停 / 高亮 / 按下面(白底承载
|
|
150
|
+
hover 100 → pressed 200)由家族给,选中不换面、不换字色,只在行尾亮对号,选中叠悬停 / 按下沿用同一条阶梯;
|
|
151
|
+
家族按 aria-selected / data-selected 与 aria-disabled / data-disabled 给出,这里只把公开槽映射到桥接槽。
|
|
152
|
+
布局保持 flex 而不用家族网格:一行里可以并排多个前导部件(箭头、拖拽把手)与作者自己的图标、
|
|
153
153
|
按钮,单列的 prefix 放不下;间距统一由行的 gap 给,家族按槽下发的外边距(--xh-collection-gap)归零 */
|
|
154
154
|
[data-scope='tree'][data-part='item'],
|
|
155
155
|
[data-scope='tree'][data-part='branch-control'] {
|
|
@@ -160,18 +160,18 @@
|
|
|
160
160
|
--xh-collection-radius: var(--xh-tree-row-radius, var(--xh-shape-control));
|
|
161
161
|
/* 作者的图标尺槽经桥接槽下发到行,家族缺省按 md 档 */
|
|
162
162
|
--xh-collection-glyph-size: var(--xh-tree-icon-size, var(--xh-_collection-glyph-size));
|
|
163
|
-
/* 箭头 /
|
|
163
|
+
/* 箭头 / 对号盒与叶子的占位同一把尺:指示符档,与同一行里的拖拽把手同走
|
|
164
164
|
--xh-control-indicator-size(comfortable 16 / compact 14)。不读家族按档下发的 --xh-icon-size——
|
|
165
|
-
那支只管作者放进行里的图标,按图标档取的 20px 会比 16px
|
|
165
|
+
那支只管作者放进行里的图标,按图标档取的 20px 会比 16px 的指示符盒大一圈 */
|
|
166
166
|
--xh-_tree-indicator-size: var(--xh-tree-indicator-size, var(--xh-control-indicator-size));
|
|
167
167
|
--xh-collection-fg-rest: var(--xh-tree-row-fg, var(--xh-fg-default));
|
|
168
168
|
--xh-collection-fg-hover: var(--xh-tree-row-fg, var(--xh-fg-default));
|
|
169
169
|
--xh-collection-fg-keyboard-highlight: var(--xh-tree-row-fg, var(--xh-fg-default));
|
|
170
170
|
--xh-collection-fg-pressed: var(--xh-tree-row-fg, var(--xh-fg-default));
|
|
171
|
-
--xh-collection-fg-selected: var(--xh-tree-row-fg-selected, var(--xh-fg-
|
|
172
|
-
--xh-collection-fg-selected-hover: var(--xh-tree-row-fg-selected, var(--xh-fg-
|
|
173
|
-
--xh-collection-fg-selected-highlight: var(--xh-tree-row-fg-selected, var(--xh-fg-
|
|
174
|
-
--xh-collection-fg-selected-pressed: var(--xh-tree-row-fg-selected, var(--xh-fg-
|
|
171
|
+
--xh-collection-fg-selected: var(--xh-tree-row-fg-selected, var(--xh-tree-row-fg, var(--xh-fg-default)));
|
|
172
|
+
--xh-collection-fg-selected-hover: var(--xh-tree-row-fg-selected, var(--xh-tree-row-fg, var(--xh-fg-default)));
|
|
173
|
+
--xh-collection-fg-selected-highlight: var(--xh-tree-row-fg-selected, var(--xh-tree-row-fg, var(--xh-fg-default)));
|
|
174
|
+
--xh-collection-fg-selected-pressed: var(--xh-tree-row-fg-selected, var(--xh-tree-row-fg, var(--xh-fg-default)));
|
|
175
175
|
--xh-collection-font-weight-selected: var(--xh-tree-row-selected-font-weight, var(--xh-font-weight-regular));
|
|
176
176
|
--xh-collection-font-weight-selected-hover: var(--xh-tree-row-selected-font-weight, var(--xh-font-weight-regular));
|
|
177
177
|
--xh-collection-font-weight-selected-highlight: var(--xh-tree-row-selected-font-weight, var(--xh-font-weight-regular));
|
|
@@ -179,11 +179,13 @@
|
|
|
179
179
|
--xh-collection-bg-hover: var(--xh-tree-row-bg-hover, var(--xh-bg-subtle));
|
|
180
180
|
--xh-collection-bg-keyboard-highlight: var(--xh-tree-row-bg-hover, var(--xh-bg-subtle));
|
|
181
181
|
--xh-collection-bg-pressed: var(--xh-tree-row-bg-pressed, var(--xh-bg-subtle-hover));
|
|
182
|
-
--xh-collection-bg-selected: var(--xh-tree-row-bg-
|
|
182
|
+
--xh-collection-bg-selected-hover: var(--xh-tree-row-bg-hover, var(--xh-bg-subtle));
|
|
183
|
+
--xh-collection-bg-selected-highlight: var(--xh-tree-row-bg-hover, var(--xh-bg-subtle));
|
|
184
|
+
--xh-collection-bg-selected-pressed: var(--xh-tree-row-bg-pressed, var(--xh-bg-subtle-hover));
|
|
183
185
|
/* data-highlighted 跟的是连接层记的焦点行(指针点选也会落焦):只换面,焦点环在 :focus-visible 下再接回 */
|
|
184
186
|
--xh-collection-outline-keyboard-highlight: transparent;
|
|
185
187
|
--xh-collection-outline-selected-highlight: transparent;
|
|
186
|
-
/*
|
|
188
|
+
/* 行尾对号:槽按本部件取名(item-check-fg),标记部件的旧槽留在兜底位 */
|
|
187
189
|
--xh-collection-indicator-fg-rest: var(--xh-tree-item-check-fg, var(--xh-tree-item-indicator-fg, var(--xh-fg-brand)));
|
|
188
190
|
--xh-collection-indicator-fg-checked: var(--xh-tree-item-check-fg, var(--xh-tree-item-indicator-fg, var(--xh-fg-brand)));
|
|
189
191
|
--xh-collection-indicator-fg-selected: var(--xh-tree-item-check-fg, var(--xh-tree-item-indicator-fg, var(--xh-fg-brand)));
|
|
@@ -206,12 +208,9 @@
|
|
|
206
208
|
box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
207
209
|
}
|
|
208
210
|
|
|
209
|
-
/*
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
[data-orientation='vertical'] > [data-scope='tree'][data-part='item']:not(
|
|
213
|
-
:has(> [data-scope='tree'][data-part='item-indicator'])
|
|
214
|
-
) {
|
|
211
|
+
/* 分支行的首格是展开箭头,叶子行没有这一格,由行盒自己补出来(对号在行尾,不再替叶子顶这一格),
|
|
212
|
+
否则叶子会比同级分支往行首缩一格,层级关系读不出来。占位宽度与箭头盒同一把尺 */
|
|
213
|
+
[data-orientation='vertical'] > [data-scope='tree'][data-part='item'] {
|
|
215
214
|
padding-inline-start: calc(
|
|
216
215
|
var(--xh-tree-row-px, var(--xh-control-px-md)) +
|
|
217
216
|
var(--xh-_tree-indicator-size) +
|
|
@@ -242,76 +241,6 @@
|
|
|
242
241
|
--xh-collection-cursor-rest: not-allowed;
|
|
243
242
|
}
|
|
244
243
|
|
|
245
|
-
/* 勾选把手:勾选态只画在它身上,不碰行底色——底色那条通道归高亮 */
|
|
246
|
-
[data-scope='tree'][data-part='item-checkbox'],
|
|
247
|
-
[data-scope='tree'][data-part='branch-checkbox'] {
|
|
248
|
-
/* 方框里的勾按边长的比例取尺(与 Checkbox 同一比例),不吃家族按档下发的行内字形尺 */
|
|
249
|
-
--xh-icon-size: calc(var(--xh-tree-checkbox-size, var(--xh-control-indicator-size)) * 0.75);
|
|
250
|
-
|
|
251
|
-
display: inline-grid;
|
|
252
|
-
place-items: center;
|
|
253
|
-
flex: none;
|
|
254
|
-
inline-size: var(--xh-tree-checkbox-size, var(--xh-control-indicator-size));
|
|
255
|
-
block-size: var(--xh-tree-checkbox-size, var(--xh-control-indicator-size));
|
|
256
|
-
border: var(--xh-stroke-thin) solid var(--xh-tree-checkbox-border, var(--xh-border-control));
|
|
257
|
-
border-radius: var(--xh-tree-checkbox-radius, var(--xh-shape-inset));
|
|
258
|
-
background: var(--xh-tree-checkbox-bg, transparent);
|
|
259
|
-
color: var(--xh-tree-checkbox-fg, var(--xh-fg-on-brand));
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
[data-scope='tree'][data-part='item-checkbox'][data-selected],
|
|
263
|
-
[data-scope='tree'][data-part='branch-checkbox'][data-selected] {
|
|
264
|
-
border-color: var(--xh-tree-checkbox-border-checked, var(--xh-bg-brand));
|
|
265
|
-
background: var(--xh-tree-checkbox-bg-checked, var(--xh-bg-brand));
|
|
266
|
-
}
|
|
267
|
-
|
|
268
|
-
/* 面是实心的,环色与面同族,画在面里就看不出来;环改取面自己的前景色——
|
|
269
|
-
那一族色本来就要在这块面上把字读清楚,与面的对比是按可读性定的。
|
|
270
|
-
勾满与半选铺的是同一块实心底,两态一起收 */
|
|
271
|
-
[data-scope='tree'][data-part='item-checkbox'][data-selected]:focus-visible,
|
|
272
|
-
[data-scope='tree'][data-part='item-checkbox'][data-indeterminate]:focus-visible,
|
|
273
|
-
[data-scope='tree'][data-part='branch-checkbox'][data-selected]:focus-visible,
|
|
274
|
-
[data-scope='tree'][data-part='branch-checkbox'][data-indeterminate]:focus-visible {
|
|
275
|
-
--xh-_ring-color: currentColor;
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/* 半选:级联勾选下「子树勾了一部分」的第三态,此前发了 data-indeterminate 却没人画 */
|
|
279
|
-
[data-scope='tree'][data-part='item-checkbox'][data-indeterminate]:not([data-selected]),
|
|
280
|
-
[data-scope='tree'][data-part='branch-checkbox'][data-indeterminate]:not([data-selected]) {
|
|
281
|
-
border-color: var(--xh-tree-checkbox-border-checked, var(--xh-bg-brand));
|
|
282
|
-
background: var(--xh-tree-checkbox-bg-checked, var(--xh-bg-brand));
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/* 没写内容就由皮肤画;作者往把手里塞了自己的图形,这条规则即不命中 */
|
|
286
|
-
[data-scope='tree'][data-part='item-checkbox'][data-selected]:empty::before,
|
|
287
|
-
[data-scope='tree'][data-part='branch-checkbox'][data-selected]:empty::before {
|
|
288
|
-
content: '';
|
|
289
|
-
display: inline-block;
|
|
290
|
-
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
291
|
-
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
292
|
-
vertical-align: var(--xh-glyph-baseline-shift);
|
|
293
|
-
background-color: currentColor;
|
|
294
|
-
-webkit-mask: var(--xh-glyph-mark-check) center / contain no-repeat;
|
|
295
|
-
mask: var(--xh-glyph-mark-check) center / contain no-repeat;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
[data-scope='tree'][data-part='item-checkbox'][data-indeterminate]:not([data-selected]):empty::before,
|
|
299
|
-
[data-scope='tree'][data-part='branch-checkbox'][data-indeterminate]:not([data-selected]):empty::before {
|
|
300
|
-
content: '';
|
|
301
|
-
display: inline-block;
|
|
302
|
-
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
303
|
-
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
304
|
-
vertical-align: var(--xh-glyph-baseline-shift);
|
|
305
|
-
background-color: currentColor;
|
|
306
|
-
-webkit-mask: var(--xh-glyph-mark-minus) center / contain no-repeat;
|
|
307
|
-
mask: var(--xh-glyph-mark-minus) center / contain no-repeat;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
[data-scope='tree'][data-part='item-checkbox'][data-disabled],
|
|
311
|
-
[data-scope='tree'][data-part='branch-checkbox'][data-disabled] {
|
|
312
|
-
border-color: var(--xh-tree-checkbox-border-disabled, var(--xh-border-default));
|
|
313
|
-
}
|
|
314
|
-
|
|
315
244
|
[data-scope='tree'][data-part='item-text'],
|
|
316
245
|
[data-scope='tree'][data-part='branch-text'] {
|
|
317
246
|
flex: 1;
|
|
@@ -322,14 +251,16 @@
|
|
|
322
251
|
text-overflow: ellipsis;
|
|
323
252
|
}
|
|
324
253
|
|
|
325
|
-
/*
|
|
326
|
-
|
|
254
|
+
/* 选中对号落在行尾,与树选择同位:作者在行里摆在哪儿都排到最后,
|
|
255
|
+
行尾那一格(item-suffix)在它之前;正文吃满剩余宽度,对号因此贴着行的末端。
|
|
256
|
+
未选中时占位不塌,切换选中不引起行宽抖动。盒尺取指示符档;盒里的对号是指示符,
|
|
327
257
|
在自己身上把 --xh-icon-size 改接到盒的尺,兜底对号与作者塞进盒里的 XhIcon 读同一把尺、与盒同边长 */
|
|
328
258
|
[data-scope='tree'][data-part='item-indicator'] {
|
|
329
259
|
--xh-icon-size: var(--xh-_tree-indicator-size);
|
|
330
260
|
|
|
331
261
|
display: inline-flex;
|
|
332
262
|
flex: none;
|
|
263
|
+
order: 1;
|
|
333
264
|
align-items: center;
|
|
334
265
|
justify-content: center;
|
|
335
266
|
inline-size: var(--xh-_tree-indicator-size);
|
|
@@ -339,9 +270,20 @@
|
|
|
339
270
|
display: none;
|
|
340
271
|
}
|
|
341
272
|
|
|
273
|
+
/* 家族只按行的 aria-selected 显示对号:分支行的 aria-selected 在 branch 上、半选没有选中语义,
|
|
274
|
+
这两档按标记自身的 data-selected / data-indeterminate 显形 */
|
|
275
|
+
[data-scope='tree'][data-part='item-indicator']:is([data-selected], [data-indeterminate]) {
|
|
276
|
+
visibility: visible;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/* 分支行的禁用不在行的 aria-disabled 上(那在 branch 上),标记按自身的 data-disabled 降级 */
|
|
280
|
+
[data-scope='tree'][data-part='item-indicator'][data-disabled] {
|
|
281
|
+
color: var(--xh-fg-disabled);
|
|
282
|
+
}
|
|
283
|
+
|
|
342
284
|
/* 展开箭头与方向指示符:两者都可能被作者用作"点这里展开"的把手,
|
|
343
285
|
所以尺寸与叶子的勾选标记一致,两种行的文字起点才对得齐。
|
|
344
|
-
盒里的 chevron
|
|
286
|
+
盒里的 chevron 是指示符:与盒同边长,--xh-icon-size 在自己身上改接到盒的尺 */
|
|
345
287
|
[data-scope='tree'][data-part='branch-trigger'],
|
|
346
288
|
[data-scope='tree'][data-part='branch-indicator'] {
|
|
347
289
|
--xh-icon-size: var(--xh-_tree-indicator-size);
|
|
@@ -437,6 +379,11 @@
|
|
|
437
379
|
mask: var(--xh-glyph-mark-check) center / contain no-repeat;
|
|
438
380
|
}
|
|
439
381
|
|
|
382
|
+
[data-scope='tree'][data-part='item-indicator'][data-indeterminate]:not([data-selected]):empty::before {
|
|
383
|
+
-webkit-mask-image: var(--xh-glyph-mark-minus);
|
|
384
|
+
mask-image: var(--xh-glyph-mark-minus);
|
|
385
|
+
}
|
|
386
|
+
|
|
440
387
|
/* —— 节点拖拽搬家 —— */
|
|
441
388
|
/* 整行都是拖动源,光标换成抓手告诉人这一行按得动。
|
|
442
389
|
这条不写 touch-action:整行关掉纵向手势,树容器自己就滚不动了;
|
|
@@ -542,7 +489,7 @@
|
|
|
542
489
|
禁用的节点从来不做落点,这一段因此不会漏画任何一处高亮 */
|
|
543
490
|
[data-scope='tree'][data-part='item'][data-drop='inside']:not([data-disabled]),
|
|
544
491
|
[data-scope='tree'][data-part='branch-control'][data-drop='inside']:not([data-disabled]) {
|
|
545
|
-
/* 落点不是选中:品牌淡底专属选中 /
|
|
492
|
+
/* 落点不是选中:品牌淡底专属选中 / 当前,落点面取悬停之上一档的中性面 */
|
|
546
493
|
background: var(--xh-tree-drop-inside-bg, var(--xh-bg-subtle-hover));
|
|
547
494
|
box-shadow: inset 0 0 0 var(--xh-tree-drop-line, var(--xh-stroke-thick))
|
|
548
495
|
var(--xh-tree-drop-fg, var(--xh-border-control-focus));
|
|
@@ -561,10 +508,10 @@
|
|
|
561
508
|
border: 0;
|
|
562
509
|
}
|
|
563
510
|
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
511
|
+
@media print {
|
|
512
|
+
/* 打印默认丢底色,而对号与半选杠是遮罩出来的一块底色:行本就不换面,丢了它选中在纸上就没了踪影 */
|
|
513
|
+
[data-scope='tree'][data-part='item-indicator'] {
|
|
514
|
+
print-color-adjust: exact;
|
|
515
|
+
}
|
|
569
516
|
}
|
|
570
517
|
}
|
package/css/virtualizer.css
CHANGED
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
overflow-x: auto;
|
|
43
43
|
overflow-y: auto;
|
|
44
44
|
/* 页内结构容器,滚到尽头把剩余的滚动交给外层(overscroll-behavior 保持 auto):
|
|
45
|
-
contain 只给浮层、模态 body
|
|
45
|
+
contain 只给浮层、模态 body 与粘底视口。滚动条走 reset 层的原生细条 */
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
/* 单向列表把另一条轴关掉:那一向既没有内容也没有位移,能滚就成了滚不回来的暗格 */
|