@xihan-ui/styles 2.1.0 → 3.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 +1261 -0
- package/README.md +6 -1
- package/component-tokens.d.ts +533 -96
- package/components.tokens.json +35461 -26045
- package/css/accordion.css +34 -8
- package/css/alert.css +59 -1
- package/css/anchor.css +46 -8
- package/css/approval.css +116 -76
- package/css/avatar-group.css +1 -1
- package/css/avatar.css +13 -5
- package/css/back-top.css +61 -42
- package/css/badge.css +62 -12
- package/css/bar-code.css +1 -1
- package/css/breadcrumb.css +62 -3
- package/css/button-group.css +4 -4
- package/css/button.css +67 -19
- package/css/calendar-picker.css +19 -0
- package/css/calendar-range-picker.css +39 -2
- package/css/card.css +115 -1
- package/css/carousel.css +148 -43
- package/css/cartesian-chart.css +830 -0
- package/css/cascader.css +181 -65
- package/css/checkbox-group.css +59 -89
- package/css/checkbox.css +16 -49
- package/css/citation.css +470 -0
- package/css/clipboard.css +20 -63
- package/css/code-view.css +101 -6
- package/css/collapsible.css +34 -8
- package/css/color-field.css +18 -0
- package/css/color-picker.css +128 -50
- package/css/color-slider.css +22 -15
- package/css/color-swatch-picker.css +3 -1
- package/css/combobox.css +80 -33
- package/css/command.css +45 -43
- package/css/context-menu.css +39 -22
- package/css/date-field.css +56 -0
- package/css/date-picker.css +132 -26
- package/css/date-range-picker.css +337 -14
- package/css/description.css +17 -1
- package/css/descriptions.css +42 -0
- package/css/dialog.css +94 -36
- package/css/diff-view.css +97 -12
- package/css/download-trigger.css +44 -78
- package/css/drawer.css +160 -119
- package/css/editable.css +19 -0
- package/css/empty-state.css +7 -6
- package/css/field-array.css +36 -0
- package/css/field.css +20 -18
- package/css/file-upload.css +125 -135
- package/css/flex.css +324 -8
- package/css/float-button.css +263 -38
- package/css/floating-panel.css +53 -19
- package/css/form.css +31 -17
- package/css/funnel-chart.css +106 -0
- package/css/graph-chart.css +205 -0
- package/css/grid-list.css +235 -0
- package/css/grid.css +252 -1
- package/css/heatmap.css +119 -36
- package/css/hierarchy-chart.css +298 -0
- package/css/hover-card.css +31 -14
- package/css/icon.css +100 -0
- package/css/image-cropper.css +33 -7
- package/css/image-viewer.css +167 -22
- package/css/image.css +23 -4
- package/css/input-group.css +11 -13
- package/css/json-viewer.css +50 -2
- package/css/layout.css +68 -18
- package/css/liquid.css +106 -0
- package/css/list.css +1 -1
- package/css/listbox.css +46 -6
- package/css/loading-bar.css +27 -13
- package/css/log.css +129 -33
- package/css/markdown-stream.css +1 -1
- package/css/marquee.css +163 -7
- package/css/matrix-code.css +1 -1
- package/css/mention.css +35 -19
- package/css/menu.css +35 -21
- package/css/menubar.css +36 -20
- package/css/message-feed.css +172 -51
- package/css/navigation-menu.css +172 -11
- package/css/notification.css +435 -108
- package/css/number-field.css +22 -0
- package/css/page-header.css +3 -1
- package/css/pagination.css +126 -24
- package/css/password-input.css +40 -8
- package/css/pie-chart.css +247 -0
- package/css/popconfirm.css +44 -50
- package/css/popover.css +50 -14
- package/css/progress.css +308 -10
- package/css/prompt-input.css +36 -0
- package/css/question-flow.css +97 -57
- package/css/radar-chart.css +233 -0
- package/css/radio-group.css +363 -5
- package/css/rating.css +21 -23
- package/css/reasoning.css +61 -54
- package/css/resizable.css +6 -1
- package/css/sankey-chart.css +174 -0
- package/css/scroll-area.css +32 -0
- package/css/scrollbar.css +1 -1
- package/css/select.css +74 -55
- package/css/side-nav.css +173 -24
- package/css/signature-pad.css +16 -1
- package/css/skeleton.css +13 -14
- package/css/slider.css +35 -13
- package/css/sortable.css +37 -7
- package/css/sparkline.css +164 -0
- package/css/spinner.css +50 -22
- package/css/splitter.css +7 -1
- package/css/statistic.css +10 -0
- package/css/steps.css +248 -29
- package/css/switch.css +23 -48
- package/css/table.css +175 -118
- package/css/tabs.css +231 -19
- package/css/tag-group.css +27 -3
- package/css/tag.css +53 -12
- package/css/tags-input.css +40 -3
- package/css/text-field.css +19 -0
- package/css/time-field.css +20 -1
- package/css/time-picker.css +103 -17
- package/css/time-range-picker.css +45 -16
- package/css/timeline.css +1 -1
- package/css/toggle-group.css +4 -4
- package/css/toggle.css +4 -3
- package/css/tool-call.css +59 -51
- package/css/toolbar.css +101 -3
- package/css/tooltip.css +15 -2
- package/css/tour.css +42 -12
- package/css/transfer.css +98 -75
- package/css/tree-select.css +232 -53
- package/css/tree.css +271 -55
- package/css/truncate.css +55 -12
- package/css/typography.css +93 -0
- package/css/virtualizer.css +56 -0
- package/css/watermark.css +23 -0
- package/family/action-control.css +14 -5
- package/family/chart.css +480 -0
- package/family/check-mark.css +94 -0
- package/family/choice-card.css +97 -0
- package/family/collection-item.css +9 -15
- package/family/field-chrome.css +1 -12
- package/family/loading-ring.css +95 -0
- package/family/material.css +72 -0
- package/family/menu-choice.css +56 -0
- package/family/motion.css +207 -10
- package/family/tag-list.css +59 -0
- package/index.css +13824 -4030
- package/index.unlayered.css +13403 -3605
- package/package.json +20 -8
- package/css/gradient-text.css +0 -91
- package/css/icon-wrapper.css +0 -81
- package/css/segmented.css +0 -280
- package/css/toast.css +0 -499
package/css/radio-group.css
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
/* 定义 radio group 样式。 */
|
|
7
7
|
|
|
8
8
|
@import '../family/action-control.css';
|
|
9
|
+
@import '../family/choice-card.css';
|
|
9
10
|
|
|
10
11
|
@layer xihan.components {
|
|
11
12
|
/* 皮肤在场的标记:开发模式下按 scope 探一次,取不到就说明这份皮肤没被引入。 */
|
|
@@ -14,10 +15,15 @@
|
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
[data-scope='radio-group'][data-part='root'] {
|
|
17
|
-
/*
|
|
18
|
+
/* 尺寸档只换这几个私有槽,标题与条目都从 root 继承它们,换档不必给每个部件各写一条选择器;
|
|
19
|
+
segment-h / segment-px 只给 segmented 形态的段用 */
|
|
18
20
|
--xh-_radio-group-item-gap: var(--xh-control-gap-md);
|
|
19
21
|
--xh-_radio-group-font-size: var(--xh-control-font-md);
|
|
20
22
|
--xh-_radio-group-indicator: var(--xh-control-indicator-md);
|
|
23
|
+
--xh-_radio-group-segment-h: var(--xh-control-h-md);
|
|
24
|
+
--xh-_radio-group-segment-px: var(--xh-control-px-md);
|
|
25
|
+
/* 条目图标跟着尺寸档换直径,放进来的图标组件与裸 svg 都从这一支取 */
|
|
26
|
+
--xh-icon-size: var(--xh-radio-group-icon-size, var(--xh-glyph-size-md));
|
|
21
27
|
/* 选中色随语气走。没写 data-tone 时 --xh-_tone 没被声明,退回原来的品牌色 */
|
|
22
28
|
--xh-_radio-group-accent: var(--xh-_tone, var(--xh-bg-brand));
|
|
23
29
|
/* 条目是圆圈的承载面:行自己坐画布走 100 → 200,行面上的圆圈按淡底容器阶梯再上一档(200 → 300)。
|
|
@@ -44,17 +50,34 @@
|
|
|
44
50
|
align-items: center;
|
|
45
51
|
}
|
|
46
52
|
|
|
53
|
+
/* card 形态:卡片撑满竖排的一列;横排时各卡等分一行、按内容等高,窄到放不下两张就折到下一行 */
|
|
54
|
+
[data-scope='radio-group'][data-part='root'][data-variant='card'] {
|
|
55
|
+
align-items: stretch;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
[data-scope='radio-group'][data-part='root'][data-variant='card'][data-orientation='horizontal']
|
|
59
|
+
> [data-scope='radio-group'][data-part='item'] {
|
|
60
|
+
flex: 1 1 0;
|
|
61
|
+
min-inline-size: min(var(--xh-control-min-w), 100%);
|
|
62
|
+
}
|
|
63
|
+
|
|
47
64
|
/* —— 尺寸 —— */
|
|
48
65
|
[data-scope='radio-group'][data-part='root'][data-size='sm'] {
|
|
49
66
|
--xh-_radio-group-item-gap: var(--xh-control-gap-sm);
|
|
50
67
|
--xh-_radio-group-font-size: var(--xh-control-font-sm);
|
|
51
68
|
--xh-_radio-group-indicator: var(--xh-control-indicator-sm);
|
|
69
|
+
--xh-_radio-group-segment-h: var(--xh-control-h-sm);
|
|
70
|
+
--xh-_radio-group-segment-px: var(--xh-control-px-sm);
|
|
71
|
+
--xh-icon-size: var(--xh-radio-group-icon-size, var(--xh-glyph-size-sm));
|
|
52
72
|
}
|
|
53
73
|
|
|
54
74
|
[data-scope='radio-group'][data-part='root'][data-size='lg'] {
|
|
55
75
|
--xh-_radio-group-item-gap: var(--xh-control-gap-lg);
|
|
56
76
|
--xh-_radio-group-font-size: var(--xh-control-font-lg);
|
|
57
77
|
--xh-_radio-group-indicator: var(--xh-control-indicator-lg);
|
|
78
|
+
--xh-_radio-group-segment-h: var(--xh-control-h-lg);
|
|
79
|
+
--xh-_radio-group-segment-px: var(--xh-control-px-lg);
|
|
80
|
+
--xh-icon-size: var(--xh-radio-group-icon-size, var(--xh-glyph-size-lg));
|
|
58
81
|
}
|
|
59
82
|
|
|
60
83
|
/* 集合标题:14 / 500 / fg-muted,字号不随 size 档——随档的是条目文字 */
|
|
@@ -105,7 +128,7 @@
|
|
|
105
128
|
/* 只读整组都改不动,但不是禁用:颜色照常,把整行的悬停 / 按下面与"可点"这个暗示一起收回来。
|
|
106
129
|
家族的 :hover / 按压块不排 readonly,只能从槽上收回;排掉禁用项是因为这条选择器权重高过家族的禁用块,
|
|
107
130
|
不排就会把 not-allowed 覆盖回 default */
|
|
108
|
-
[data-scope='radio-group'][data-part='item'][data-readonly]:not([data-disabled]) {
|
|
131
|
+
[data-scope='radio-group'][data-part='item'][data-readonly]:not([data-disabled]):not([data-xh-choice-card]) {
|
|
109
132
|
--xh-action-bg-hover: transparent;
|
|
110
133
|
--xh-action-bg-pressed: transparent;
|
|
111
134
|
--xh-action-cursor-rest: default;
|
|
@@ -162,7 +185,7 @@
|
|
|
162
185
|
|
|
163
186
|
/* 圆点用 scale 收放,选中态切换不引起布局抖动。
|
|
164
187
|
直径取指示器的一半:换尺寸档时圈与点一起走,比例不散。
|
|
165
|
-
|
|
188
|
+
收起走强减速、不过冲:过冲曲线收到 0 会冲成负缩放,闪出一个极小的镜像点;换色走 micro */
|
|
166
189
|
[data-scope='radio-group'][data-part='indicator']::before {
|
|
167
190
|
content: '';
|
|
168
191
|
inline-size: calc(var(--xh-radio-group-indicator-size, var(--xh-_radio-group-indicator)) / 2);
|
|
@@ -170,18 +193,27 @@
|
|
|
170
193
|
border-radius: var(--xh-shape-circle);
|
|
171
194
|
background: var(--xh-radio-group-indicator-dot, var(--xh-_radio-group-accent));
|
|
172
195
|
scale: 0;
|
|
173
|
-
transition:
|
|
196
|
+
transition:
|
|
197
|
+
scale var(--xh-motion-duration-nudge) var(--xh-motion-ease-enter-strong),
|
|
198
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
174
199
|
}
|
|
175
200
|
|
|
201
|
+
/* 出现时略微涨过 1 再收回,过冲量落在圈内不碰描边 */
|
|
176
202
|
[data-scope='radio-group'][data-part='indicator'][data-state='checked']::before {
|
|
177
203
|
scale: 1;
|
|
204
|
+
transition:
|
|
205
|
+
scale var(--xh-motion-duration-nudge) var(--xh-motion-ease-settle),
|
|
206
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
178
207
|
}
|
|
179
208
|
|
|
180
209
|
/* 选中的圆点是这颗圈的「填色」:按下随行换到语气的 active 档(与 checkbox-group 勾中方框按下同档),
|
|
181
|
-
|
|
210
|
+
换色走按压时间线(按下 press、释放回到 micro);选中圈的描边保住不换 */
|
|
182
211
|
[data-scope='radio-group'][data-part='item']:not([data-disabled]):not([data-readonly]):is(:active, [data-pressed])
|
|
183
212
|
> [data-scope='radio-group'][data-part='indicator'][data-state='checked']::before {
|
|
184
213
|
background: var(--xh-radio-group-indicator-dot-pressed, var(--xh-_tone-active, var(--xh-bg-brand-active)));
|
|
214
|
+
transition:
|
|
215
|
+
scale var(--xh-motion-duration-nudge) var(--xh-motion-ease-settle),
|
|
216
|
+
background-color var(--xh-motion-duration-press) var(--xh-motion-ease-press);
|
|
185
217
|
}
|
|
186
218
|
|
|
187
219
|
/* 禁用:--xh-border-default 描边 + --xh-bg-subtle 底 + --xh-fg-disabled 圆点,不靠 opacity;
|
|
@@ -200,18 +232,330 @@
|
|
|
200
232
|
user-select: none;
|
|
201
233
|
}
|
|
202
234
|
|
|
235
|
+
/* 卡片的文案是卡的标题:取标签字重,与说明拉开层级 */
|
|
236
|
+
[data-scope='radio-group'][data-part='item'][data-xh-choice-card] > [data-scope='radio-group'][data-part='item-text'] {
|
|
237
|
+
font-weight: var(--xh-radio-group-card-title-font-weight, var(--xh-text-label-weight));
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* 说明是次级文字:13 / fg-muted / 正文行高,不随选中与语气换色;落在文案下方同一列。
|
|
241
|
+
列表形态的条目带了说明时同样排成两行,行首的圆圈对齐第一行 */
|
|
242
|
+
[data-scope='radio-group'][data-part='item-description'] {
|
|
243
|
+
grid-column: 2;
|
|
244
|
+
color: var(--xh-radio-group-item-description-fg, var(--xh-fg-muted));
|
|
245
|
+
font-size: var(--xh-radio-group-item-description-font-size, var(--xh-text-secondary-size));
|
|
246
|
+
font-weight: var(--xh-font-weight-regular);
|
|
247
|
+
line-height: var(--xh-leading-normal);
|
|
248
|
+
user-select: none;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
[data-scope='radio-group'][data-part='item']:not([data-xh-choice-card]):has(> [data-scope='radio-group'][data-part='item-description']) {
|
|
252
|
+
display: grid;
|
|
253
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
254
|
+
align-items: center;
|
|
255
|
+
row-gap: var(--xh-radio-group-item-row-gap, var(--xh-space-1));
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
[data-scope='radio-group'][data-part='item'][data-disabled] > [data-scope='radio-group'][data-part='item-description'] {
|
|
259
|
+
color: var(--xh-radio-group-item-description-fg-disabled, var(--xh-fg-disabled));
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/* 条目图标:纯装饰,可及名全在文字上。直径取根上按尺寸档下发的 --xh-icon-size,
|
|
263
|
+
放进来的图标组件与裸 svg 取同一直径;颜色随条目的前景色,选中、悬停、禁用一并跟着换 */
|
|
264
|
+
[data-scope='radio-group'][data-part='item-icon'] {
|
|
265
|
+
display: inline-flex;
|
|
266
|
+
flex: none;
|
|
267
|
+
align-items: center;
|
|
268
|
+
justify-content: center;
|
|
269
|
+
inline-size: var(--xh-icon-size);
|
|
270
|
+
block-size: var(--xh-icon-size);
|
|
271
|
+
color: inherit;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
[data-scope='radio-group'][data-part='item-icon'] > svg {
|
|
275
|
+
inline-size: 100%;
|
|
276
|
+
block-size: 100%;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/* 两行排版(卡片、带说明的列表行)里图标自成一列,排在圆圈与文案之间;说明仍落在文案下方同一列 */
|
|
280
|
+
[data-scope='radio-group'][data-part='item']:has(> [data-scope='radio-group'][data-part='item-icon']):is(
|
|
281
|
+
[data-xh-choice-card],
|
|
282
|
+
:has(> [data-scope='radio-group'][data-part='item-description'])
|
|
283
|
+
) {
|
|
284
|
+
grid-template-columns: auto auto minmax(0, 1fr);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
[data-scope='radio-group'][data-part='item']:has(> [data-scope='radio-group'][data-part='item-icon'])
|
|
288
|
+
> [data-scope='radio-group'][data-part='item-description'] {
|
|
289
|
+
grid-column: 3;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/* —— segmented 形态 ——
|
|
293
|
+
一条淡底轨道装着首尾相接的若干段,选中段由 thumb 部件标出:一块白色抬起的滑块,换段时滑过去。
|
|
294
|
+
轨道就是 root:滑块绝对定位于它,段与段之间不留缝,所以 gap 归零。
|
|
295
|
+
轨道是一块淡底面:--xh-bg-subtle 底 + 同宽透明占位边 + 无影,边界由滑块的描边与轨道底色的落差承担。
|
|
296
|
+
一行排不下就折行:每个选项都必须看得见、点得到;不改成横向滚动是因为段离轨道内沿只有一格衬距,
|
|
297
|
+
轨道一旦成为滚动容器,段的焦点环(画在段外侧 2px 处)会被裁掉 */
|
|
298
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'] {
|
|
299
|
+
/* 滑块(有滑块开关的白色抬起面)的底与选中段的文字色;没写 data-tone 时就是这里的取值 */
|
|
300
|
+
--xh-_radio-group-thumb-bg: var(--xh-bg-surface-raised);
|
|
301
|
+
--xh-_radio-group-segment-fg-checked: var(--xh-fg-default);
|
|
302
|
+
/* 轨道是淡底承载面:段坐在它上面,悬停 200 → 按下 300,host 槽向内下发同一副阶梯 */
|
|
303
|
+
--xh-action-host-bg-hover: var(--xh-bg-subtle-hover);
|
|
304
|
+
--xh-action-host-bg-pressed: var(--xh-bg-subtle-active);
|
|
305
|
+
|
|
306
|
+
position: relative;
|
|
307
|
+
display: inline-flex;
|
|
308
|
+
flex-wrap: wrap;
|
|
309
|
+
gap: 0;
|
|
310
|
+
padding: var(--xh-radio-group-track-padding, var(--xh-space-0_5));
|
|
311
|
+
border: var(--xh-stroke-thin) solid var(--xh-radio-group-track-border, transparent);
|
|
312
|
+
border-radius: var(--xh-radio-group-track-radius, var(--xh-shape-surface));
|
|
313
|
+
background: var(--xh-radio-group-track-bg, var(--xh-bg-subtle));
|
|
314
|
+
font-size: var(--xh-radio-group-item-font-size, var(--xh-_radio-group-font-size));
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/* 横排时外盒整体就是一档控件高:段被 align-items: stretch 撑满轨道内侧,与同行控件齐平。
|
|
318
|
+
写下限而非定值:排得下时两者逐值相同,排不下折了行才让轨道往下长 */
|
|
319
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-orientation='horizontal'] {
|
|
320
|
+
align-items: stretch;
|
|
321
|
+
min-block-size: var(--xh-radio-group-segment-h, var(--xh-_radio-group-segment-h));
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-orientation='vertical'] {
|
|
325
|
+
flex-wrap: nowrap;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/* 撑满行宽:各段等分剩余空间,长短不一的文字也排得齐 */
|
|
329
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-block] {
|
|
330
|
+
display: flex;
|
|
331
|
+
inline-size: 100%;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/* 等分只在横排成立:竖排的主轴是块轴,flex-basis: 0 会顶掉段自己的高度档,
|
|
335
|
+
竖排下段本来就靠上面那条 inline-size: 100% 与 align-items: stretch 撑满宽度 */
|
|
336
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-block][data-orientation='horizontal']
|
|
337
|
+
> [data-scope='radio-group'][data-part='item'] {
|
|
338
|
+
flex: 1 1 0;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/* 轨道里不排标题:组标题在这一形态下视觉隐藏,只作可及名(aria-labelledby 的目标仍在)。
|
|
342
|
+
要可见标题放进表单字段。刻意不写 display:display:none 的节点读屏取不到名字 */
|
|
343
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'] > [data-scope='radio-group'][data-part='label'] {
|
|
344
|
+
position: absolute;
|
|
345
|
+
inline-size: 1px;
|
|
346
|
+
block-size: 1px;
|
|
347
|
+
padding: 0;
|
|
348
|
+
margin: -1px;
|
|
349
|
+
border: 0;
|
|
350
|
+
overflow: hidden;
|
|
351
|
+
clip-path: inset(50%);
|
|
352
|
+
white-space: nowrap;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/* root 会短暂拿到 tabindex=0,但它的 onFocus 立刻把焦点转投给段,在它身上画环只会闪一下就跳走 */
|
|
356
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']:focus-visible {
|
|
357
|
+
outline: none;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-invalid] {
|
|
361
|
+
border-color: var(--xh-radio-group-track-border-invalid, var(--xh-border-invalid));
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-disabled] {
|
|
365
|
+
background: var(--xh-radio-group-track-bg-disabled, var(--xh-bg-muted));
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
/* 语气:选择器带 [data-tone] 限定,不限定的话放在语气容器里的分段会跟着改色。
|
|
369
|
+
语气档的滑块是实心语气面,选中段的字取语气面上的前景 */
|
|
370
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-tone] {
|
|
371
|
+
--xh-_radio-group-thumb-bg: var(--xh-_tone, var(--xh-bg-surface-raised));
|
|
372
|
+
--xh-_radio-group-segment-fg-checked: var(--xh-_tone-on, var(--xh-fg-default));
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
/* 段:轨道里铺开的一格,不投影 Action Control 家族(与 Tabs segment 档同),面与字写在段自己身上。
|
|
376
|
+
段自己也定位,于是与绝对定位的滑块按文档序比高低:滑块写在段之前,段与它的焦点环便压在滑块上面 */
|
|
377
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'] > [data-scope='radio-group'][data-part='item'] {
|
|
378
|
+
position: relative;
|
|
379
|
+
display: inline-flex;
|
|
380
|
+
align-items: center;
|
|
381
|
+
justify-content: center;
|
|
382
|
+
gap: var(--xh-radio-group-item-gap, var(--xh-_radio-group-item-gap));
|
|
383
|
+
block-size: var(--xh-radio-group-segment-h, var(--xh-_radio-group-segment-h));
|
|
384
|
+
padding-inline: var(--xh-radio-group-segment-px, var(--xh-_radio-group-segment-px));
|
|
385
|
+
border: 0;
|
|
386
|
+
border-radius: var(--xh-radio-group-segment-radius, var(--xh-shape-control));
|
|
387
|
+
background: transparent;
|
|
388
|
+
color: var(--xh-radio-group-segment-fg, var(--xh-fg-muted));
|
|
389
|
+
font-weight: var(--xh-radio-group-segment-font-weight, var(--xh-text-label-weight));
|
|
390
|
+
line-height: var(--xh-leading-none);
|
|
391
|
+
white-space: nowrap;
|
|
392
|
+
cursor: pointer;
|
|
393
|
+
user-select: none;
|
|
394
|
+
/* 段归行级:按下只换面不缩放,transition 里没有 scale */
|
|
395
|
+
transition:
|
|
396
|
+
color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter),
|
|
397
|
+
background-color var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
/* 段的高度交给轨道:一行时被 stretch 撑满轨道内侧。下限按「一档控件高减掉轨道上下的衬距与描边」算,
|
|
401
|
+
折了行每一行仍是这个高度,不写的话多行会被 align-content 均分成一叠扁条 */
|
|
402
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-orientation='horizontal']
|
|
403
|
+
> [data-scope='radio-group'][data-part='item'] {
|
|
404
|
+
block-size: auto;
|
|
405
|
+
min-block-size: calc(
|
|
406
|
+
var(--xh-radio-group-segment-h, var(--xh-_radio-group-segment-h)) - 2 *
|
|
407
|
+
var(--xh-radio-group-track-padding, var(--xh-space-0_5)) - 2 * var(--xh-stroke-thin)
|
|
408
|
+
);
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
/* 这一形态的选中由滑块标出,不画行首圆圈 */
|
|
412
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
413
|
+
> [data-scope='radio-group'][data-part='item']
|
|
414
|
+
> [data-scope='radio-group'][data-part='indicator'] {
|
|
415
|
+
display: none;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/* 选中态读 data-state,不读 ARIA。文字色也要跟着变——滑块是可选部件,作者不渲染它时"当前是哪一段"仍然要看得出来 */
|
|
419
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
420
|
+
> [data-scope='radio-group'][data-part='item'][data-state='checked'] {
|
|
421
|
+
color: var(--xh-radio-group-segment-fg-checked, var(--xh-_radio-group-segment-fg-checked));
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
/* 滑块在场时选中段自己透空,环紧挨着的是压在它底下、与它同一块矩形的滑块实心底;
|
|
425
|
+
环色与那块底同族就看不出来,改取选中段自己的前景色——那一支本来就配着这块底定的 */
|
|
426
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']:has(> [data-scope='radio-group'][data-part='thumb']:not([hidden]))
|
|
427
|
+
> [data-scope='radio-group'][data-part='item'][data-state='checked']:focus-visible {
|
|
428
|
+
--xh-_ring-color: currentColor;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/* 悬停只提亮未选中的那几段:选中段的底下压着滑块,再变色就成了两套强调。
|
|
432
|
+
底色用中性的悬停档:段坐在淡底轨道里,悬停取 200;只读收回悬停,与列表形态同一个决定 */
|
|
433
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
434
|
+
> [data-scope='radio-group'][data-part='item']:not([data-disabled]):not([data-readonly]):not([data-state='checked']):hover {
|
|
435
|
+
background-color: var(--xh-radio-group-segment-bg-hover, var(--xh-bg-subtle-hover));
|
|
436
|
+
color: var(--xh-radio-group-segment-fg-hover, var(--xh-fg-default));
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/* 按下去要有回应:未选中段换到按下面(淡底承载 300),几何不动。
|
|
440
|
+
选中段不叠按下面:它压着的白色滑块本身就是选中身份(有滑块开关无叠加态) */
|
|
441
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
442
|
+
> [data-scope='radio-group'][data-part='item']:not([data-disabled]):not([data-readonly]):not([data-state='checked']):is(:active, [data-pressed]) {
|
|
443
|
+
background-color: var(--xh-radio-group-segment-bg-pressed, var(--xh-bg-subtle-active));
|
|
444
|
+
transition-duration: var(--xh-motion-duration-press);
|
|
445
|
+
transition-timing-function: var(--xh-motion-ease-press);
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/* 只读:值改不动,但对比度不降,光标也不摆出"禁止"的样子 */
|
|
449
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
450
|
+
> [data-scope='radio-group'][data-part='item'][data-readonly]:not([data-disabled]) {
|
|
451
|
+
cursor: default;
|
|
452
|
+
}
|
|
453
|
+
|
|
454
|
+
/* 条目一律 aria-disabled 而非原生 disabled(禁用段仍要能当方向键的起点),这里读 data-disabled。
|
|
455
|
+
用了 fg-disabled 就不再叠 opacity:半透明会把底下的滑块透出来 */
|
|
456
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
457
|
+
> [data-scope='radio-group'][data-part='item'][data-disabled] {
|
|
458
|
+
color: var(--xh-fg-disabled);
|
|
459
|
+
cursor: not-allowed;
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
/* 禁用且选中的那一段不换文字色:它压着的是滑块的实心底,换成 fg-disabled 后六族语气只剩 1.04–3.01 的对比度,
|
|
463
|
+
「当前选的是哪一段」当场看不见。禁用由轨道底色、未选中段的文字色与光标表达,选中段保持可读 */
|
|
464
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
465
|
+
> [data-scope='radio-group'][data-part='item'][data-disabled][data-state='checked'] {
|
|
466
|
+
color: var(--xh-radio-group-segment-fg-checked-disabled, var(--xh-_radio-group-segment-fg-checked));
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
[data-scope='radio-group'][data-part='thumb'] {
|
|
470
|
+
/* 位置与尺寸由机器量好、连接层写成私有槽(它量得到,样式表量不到);
|
|
471
|
+
这几个是还没量到时的落点,量到即被内联的私有槽盖过 */
|
|
472
|
+
--xh-_radio-group-thumb-x: 0;
|
|
473
|
+
--xh-_radio-group-thumb-y: 0;
|
|
474
|
+
--xh-_radio-group-thumb-w: 0;
|
|
475
|
+
--xh-_radio-group-thumb-h: 0;
|
|
476
|
+
--xh-_radio-group-thumb-stretch: 0;
|
|
477
|
+
|
|
478
|
+
/* 摆在行首块首,位置交给 translate(只走合成),尺寸跟着段宽走。起始缘是按书写方向量的,
|
|
479
|
+
translate 只认物理方向:乘上 --xh-direction-sign,RTL 下从右缘往左推 */
|
|
480
|
+
position: absolute;
|
|
481
|
+
display: block;
|
|
482
|
+
inset-inline-start: 0;
|
|
483
|
+
inset-block-start: 0;
|
|
484
|
+
inline-size: var(--xh-_radio-group-thumb-w);
|
|
485
|
+
block-size: var(--xh-_radio-group-thumb-h);
|
|
486
|
+
translate: calc(var(--xh-_radio-group-thumb-x) * var(--xh-direction-sign)) var(--xh-_radio-group-thumb-y);
|
|
487
|
+
/* 白色抬起面三件(有滑块开关):surface-raised 底 + border-default 描边 + raised 影,描边必须在,影只是加成。
|
|
488
|
+
尺寸由连接层按段的盒量出,描边吃进盒里(border-box),滑块与段仍是同一块矩形 */
|
|
489
|
+
border: var(--xh-stroke-thin) solid var(--xh-radio-group-thumb-border, var(--xh-border-default));
|
|
490
|
+
border-radius: var(--xh-radio-group-thumb-radius, var(--xh-shape-inset));
|
|
491
|
+
background: var(--xh-radio-group-thumb-bg, var(--xh-_radio-group-thumb-bg));
|
|
492
|
+
box-shadow: var(--xh-radio-group-thumb-shadow, var(--xh-elevation-raised));
|
|
493
|
+
/* 段压在它上面,点击一律交给段;作者把它写在段之后时也不至于吞掉点击 */
|
|
494
|
+
pointer-events: none;
|
|
495
|
+
/* 用连续档而不是进场那条:滑块是被推过去的,起步就该有速度,纯减速曲线看着像自己飘过去。
|
|
496
|
+
四个几何量同时走,段宽不等时才不会先变形再挪位。投影单列一项:整组禁用时滑块落回轨道平面,那层投影跟着收 */
|
|
497
|
+
transition:
|
|
498
|
+
translate var(--xh-motion-duration-move) var(--xh-motion-ease-continuous),
|
|
499
|
+
inline-size var(--xh-motion-duration-move) var(--xh-motion-ease-continuous),
|
|
500
|
+
block-size var(--xh-motion-duration-move) var(--xh-motion-ease-continuous),
|
|
501
|
+
box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
/* 语气档的滑块是实心语气面,描边与底同色:raised 面必带描边,这里的描边只是把边位补齐,不另画一圈 */
|
|
505
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'][data-tone] > [data-scope='radio-group'][data-part='thumb'] {
|
|
506
|
+
border-color: var(--xh-radio-group-thumb-border, var(--xh-_tone, var(--xh-border-default)));
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
/* 整组禁用时滑块落回轨道平面(不再浮起),但底色一点不兑淡:
|
|
510
|
+
它上面压着选中段的文字,往 muted 兑哪怕一成,brand 的对比度就从 5.08 掉到 4.24 */
|
|
511
|
+
[data-scope='radio-group'][data-part='root'][data-disabled] > [data-scope='radio-group'][data-part='thumb'] {
|
|
512
|
+
box-shadow: var(--xh-radio-group-thumb-shadow-disabled, none);
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
/* 首次落位与同一项的重量(窗口缩放、换上正式字体)直接到位,只有换项才滑:连接层在这一落点投影
|
|
516
|
+
data-instant。投影的淡变照留,整组禁用时滑块落回轨道平面仍是淡变 */
|
|
517
|
+
[data-scope='radio-group'][data-part='thumb'][data-instant] {
|
|
518
|
+
transition: box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
/* 液态档:两沿由弹簧逐帧推着走(连接层每一帧写好盒子),几何量不再补过渡;
|
|
522
|
+
被拉长时在另一个方向上压扁,表达体积守恒,拉长到目标的两倍时压到 --xh-motion-scale-squash */
|
|
523
|
+
:where([data-material='liquid']) [data-scope='radio-group'][data-part='thumb'] {
|
|
524
|
+
--xh-_radio-group-thumb-squash: max(var(--xh-motion-scale-squash), calc(1 - var(--xh-_radio-group-thumb-stretch) * (1 - var(--xh-motion-scale-squash))));
|
|
525
|
+
|
|
526
|
+
scale: 1 var(--xh-_radio-group-thumb-squash);
|
|
527
|
+
transition: box-shadow var(--xh-motion-duration-micro) var(--xh-motion-ease-enter);
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
:where([data-material='liquid']) [data-scope='radio-group'][data-part='root'][data-orientation='vertical']
|
|
531
|
+
> [data-scope='radio-group'][data-part='thumb'] {
|
|
532
|
+
scale: var(--xh-_radio-group-thumb-squash) 1;
|
|
533
|
+
}
|
|
534
|
+
|
|
203
535
|
/* 家族 row 档在粗指针下用 ::after 把热区扩到 44px 高:条目按 24px 行 + 8px 间距密排,热区会压进相邻条目、
|
|
204
536
|
指针落错行,A 档 24px 由 xs 地板保住(同 checkbox-group 条目) */
|
|
205
537
|
@media (pointer: coarse) {
|
|
206
538
|
[data-scope='radio-group'][data-part='item']::after {
|
|
207
539
|
min-block-size: 0;
|
|
208
540
|
}
|
|
541
|
+
|
|
542
|
+
/* segmented 的段不归家族:手指的落点比一段高,命中区由伪元素向块轴两侧外扩,段的盒与轨道内的分格一点不动。
|
|
543
|
+
只扩块轴——段与段在行内轴上首尾相接,往两侧扩会与相邻段的命中区叠上。
|
|
544
|
+
外扩一格 space-2 是按最矮的 sm 档算的(28 + 8 × 2 = 44),md 与 lg 档更宽裕 */
|
|
545
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented'] > [data-scope='radio-group'][data-part='item']::before {
|
|
546
|
+
content: '';
|
|
547
|
+
position: absolute;
|
|
548
|
+
inset-block: calc(-1 * var(--xh-space-2));
|
|
549
|
+
inset-inline: 0;
|
|
550
|
+
}
|
|
209
551
|
}
|
|
210
552
|
|
|
211
553
|
/* 声明过任何 display 就盖掉了 UA 的 [hidden]{display:none},收起态得自己还回去。
|
|
212
554
|
写在文件末尾:兜底必须排在该部件所有 display 声明之后 */
|
|
213
555
|
[data-scope='radio-group'][data-part='root'][hidden],
|
|
556
|
+
[data-scope='radio-group'][data-part='thumb'][hidden],
|
|
214
557
|
[data-scope='radio-group'][data-part='item'][hidden],
|
|
558
|
+
[data-scope='radio-group'][data-part='item-icon'][hidden],
|
|
215
559
|
[data-scope='radio-group'][data-part='indicator'][hidden] {
|
|
216
560
|
display: none;
|
|
217
561
|
}
|
|
@@ -228,6 +572,13 @@
|
|
|
228
572
|
> [data-scope='radio-group'][data-part='indicator'][data-state='checked']::before {
|
|
229
573
|
background: GrayText;
|
|
230
574
|
}
|
|
575
|
+
|
|
576
|
+
/* segmented 的段按下:常态靠底色深一档表出,这一档里底色被统一换成 Canvas;按住那一下用系统高亮反色画回来 */
|
|
577
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
578
|
+
> [data-scope='radio-group'][data-part='item']:not([data-disabled]):not([data-readonly]):not([data-state='checked']):is(:active, [data-pressed]) {
|
|
579
|
+
background-color: Highlight;
|
|
580
|
+
color: HighlightText;
|
|
581
|
+
}
|
|
231
582
|
}
|
|
232
583
|
|
|
233
584
|
@media print {
|
|
@@ -236,5 +587,12 @@
|
|
|
236
587
|
[data-scope='radio-group'][data-part='indicator'][data-state='checked']::before {
|
|
237
588
|
border: var(--xh-stroke-thick) solid currentColor;
|
|
238
589
|
}
|
|
590
|
+
|
|
591
|
+
/* segmented 的滑块那块底与它的落影都不画,「当前选的是哪一段」在纸上没了:选中段改画一圈实边、字加粗 */
|
|
592
|
+
[data-scope='radio-group'][data-part='root'][data-variant='segmented']
|
|
593
|
+
> [data-scope='radio-group'][data-part='item'][data-state='checked'] {
|
|
594
|
+
border: var(--xh-stroke-thin) solid currentColor;
|
|
595
|
+
font-weight: var(--xh-font-weight-bold);
|
|
596
|
+
}
|
|
239
597
|
}
|
|
240
598
|
}
|
package/css/rating.css
CHANGED
|
@@ -141,16 +141,23 @@
|
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
-
/* 空条目使用两层同源星形:底层保持中性轮廓,上层按完整或半档裁出强调色。
|
|
144
|
+
/* 空条目使用两层同源星形:底层保持中性轮廓,上层按完整或半档裁出强调色。
|
|
145
|
+
两层都铺满格子、四边外边距 auto 回中:定宽定高的定位盒在四边 inset 为 0 时由自动外边距平分余量,
|
|
146
|
+
与书写方向无关,不用物理平移回拉(粗指针下家族在同一个 ::after 上铺的热区平移一并钉回)。
|
|
147
|
+
裁切只认物理左右:行首那一侧留着、从行尾那一侧裁,--xh-_rating-end / -start 是行尾 / 行首
|
|
148
|
+
落在物理右侧的份数(ltr 为 1 / 0,rtl 为 0 / 1),整幅与半档都乘它换边 */
|
|
145
149
|
[data-scope='rating'][data-part='item']:empty::before,
|
|
146
150
|
[data-scope='rating'][data-part='item']:empty::after {
|
|
151
|
+
--xh-_rating-end: calc((1 + var(--xh-direction-sign)) / 2);
|
|
152
|
+
--xh-_rating-start: calc((1 - var(--xh-direction-sign)) / 2);
|
|
153
|
+
|
|
147
154
|
content: '';
|
|
148
155
|
position: absolute;
|
|
149
|
-
inset
|
|
150
|
-
inset-inline-start: 50%;
|
|
156
|
+
inset: 0;
|
|
151
157
|
inline-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
152
158
|
block-size: var(--xh-icon-size, var(--xh-glyph-size-text));
|
|
153
|
-
|
|
159
|
+
margin: auto;
|
|
160
|
+
translate: none;
|
|
154
161
|
background-color: var(--xh-rating-item-fg, var(--xh-fg-subtle));
|
|
155
162
|
-webkit-mask: var(--xh-glyph-mark-star) center / contain no-repeat;
|
|
156
163
|
mask: var(--xh-glyph-mark-star) center / contain no-repeat;
|
|
@@ -159,8 +166,8 @@
|
|
|
159
166
|
|
|
160
167
|
[data-scope='rating'][data-part='item']:empty::after {
|
|
161
168
|
background-color: var(--xh-rating-item-fg-highlighted, var(--xh-_rating-accent));
|
|
162
|
-
clip-path: inset(0 100% 0
|
|
163
|
-
transition: clip-path var(--xh-motion-duration-
|
|
169
|
+
clip-path: inset(0 calc(100% * var(--xh-_rating-end)) 0 calc(100% * var(--xh-_rating-start)));
|
|
170
|
+
transition: clip-path var(--xh-motion-duration-nudge) var(--xh-motion-ease-continuous);
|
|
164
171
|
}
|
|
165
172
|
|
|
166
173
|
/* 点亮的判据是 data-highlighted,不是 aria-checked:
|
|
@@ -178,12 +185,14 @@
|
|
|
178
185
|
clip-path: inset(0);
|
|
179
186
|
}
|
|
180
187
|
|
|
181
|
-
/* 半颗:一道 50%
|
|
188
|
+
/* 半颗:一道 50% 硬边渐变裁到字形上,行首那半亮、行尾那半灰。
|
|
189
|
+
rtl 下"半颗"落在星的右半边(连接层按 1 - offsetX/width 判),亮的那半跟着掉头:渐变方向没有逻辑
|
|
190
|
+
关键字可用,角度乘书写方向的符号换向(90deg 朝右、-90deg 朝左)。
|
|
182
191
|
必须排在 data-highlighted 之后:半颗那颗星同时带着 data-highlighted,两条选择器特异度相同,
|
|
183
192
|
顺序一反 color 就把 transparent 覆盖回实色,渐变整个看不见。 */
|
|
184
193
|
[data-scope='rating'][data-part='item'][data-half]:not(:empty) {
|
|
185
194
|
background-image: linear-gradient(
|
|
186
|
-
|
|
195
|
+
calc(90deg * var(--xh-direction-sign)),
|
|
187
196
|
var(--xh-rating-item-fg-highlighted, var(--xh-_rating-accent)) 50%,
|
|
188
197
|
var(--xh-rating-item-fg, var(--xh-fg-subtle)) 50%
|
|
189
198
|
);
|
|
@@ -192,22 +201,8 @@
|
|
|
192
201
|
color: transparent;
|
|
193
202
|
}
|
|
194
203
|
|
|
195
|
-
/* rtl 下"半颗"落在星的右半边(连接层按 1 - offsetX/width 判),亮的那半得跟着掉头。
|
|
196
|
-
渐变方向没有逻辑关键字可用,只能靠 :dir() 分流,不能指望逻辑属性自动换向。 */
|
|
197
|
-
[data-scope='rating'][data-part='item'][data-half]:not(:empty):dir(rtl) {
|
|
198
|
-
background-image: linear-gradient(
|
|
199
|
-
to left,
|
|
200
|
-
var(--xh-rating-item-fg-highlighted, var(--xh-_rating-accent)) 50%,
|
|
201
|
-
var(--xh-rating-item-fg, var(--xh-fg-subtle)) 50%
|
|
202
|
-
);
|
|
203
|
-
}
|
|
204
|
-
|
|
205
204
|
[data-scope='rating'][data-part='item'][data-half]:empty::after {
|
|
206
|
-
clip-path: inset(0 50% 0
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
[data-scope='rating'][data-part='item'][data-half]:empty:dir(rtl)::after {
|
|
210
|
-
clip-path: inset(0 0 0 50%);
|
|
205
|
+
clip-path: inset(0 calc(50% * var(--xh-_rating-end)) 0 calc(50% * var(--xh-_rating-start)));
|
|
211
206
|
}
|
|
212
207
|
|
|
213
208
|
/* 只读仍进得了 Tab 序列、读屏也念得出,只是改不动:收掉手型,别暗示"点这儿能改";
|
|
@@ -245,11 +240,14 @@
|
|
|
245
240
|
color: GrayText;
|
|
246
241
|
}
|
|
247
242
|
|
|
243
|
+
/* 两层星形都是 mask 挖出来的底色:退出强制换色、直接写系统色,空星 GrayText、点亮的那层 Highlight */
|
|
248
244
|
[data-scope='rating'][data-part='item']:empty::before {
|
|
245
|
+
forced-color-adjust: none;
|
|
249
246
|
background-color: GrayText;
|
|
250
247
|
}
|
|
251
248
|
|
|
252
249
|
[data-scope='rating'][data-part='item']:empty::after {
|
|
250
|
+
forced-color-adjust: none;
|
|
253
251
|
background-color: Highlight;
|
|
254
252
|
}
|
|
255
253
|
|