|
|
@@ -2,27 +2,54 @@
|
|
|
display: block;
|
|
|
}
|
|
|
|
|
|
-/* 原生 range 输入框:外观由本文件统一控制(WebKit + Firefox) */
|
|
|
+/*
|
|
|
+ 滑块(2026-11-01 按参考稿定稿)
|
|
|
+
|
|
|
+ 视觉取向:**极简量尺**。
|
|
|
+ · 轨道 3px、已填充用深色、未填充用浅灰 —— 对比清晰但不厚重
|
|
|
+ · 手柄是小号圆角胶囊(8×20),而不是大圆点,贴近参考稿
|
|
|
+ · 6 个等距刻度短线,只有首/次/尾带文字
|
|
|
+ · 所有标签统一弱化色,不做选中态高亮 —— 参考稿里三处文字是同一种灰
|
|
|
+*/
|
|
|
+
|
|
|
+.ui-slider {
|
|
|
+ position: relative;
|
|
|
+ /* 左右留出半个标签宽度的呼吸位,首尾文字才不会被容器裁掉 */
|
|
|
+ padding: 0 16px 24px;
|
|
|
+}
|
|
|
+
|
|
|
+/* ---------------- 轨道与手柄 ---------------- */
|
|
|
+
|
|
|
.ui-slider-input {
|
|
|
-webkit-appearance: none;
|
|
|
appearance: none;
|
|
|
- height: 16px;
|
|
|
+ display: block;
|
|
|
+ width: 100%;
|
|
|
+ /* 高度 = 手柄高度,保证手柄不被上下裁切 */
|
|
|
+ height: 20px;
|
|
|
+ margin: 0;
|
|
|
background: transparent;
|
|
|
cursor: pointer;
|
|
|
|
|
|
&:disabled {
|
|
|
cursor: not-allowed;
|
|
|
- opacity: 0.5;
|
|
|
+ opacity: 0.45;
|
|
|
+ }
|
|
|
+
|
|
|
+ &:focus-visible {
|
|
|
+ outline: 2px solid var(--primary);
|
|
|
+ outline-offset: 4px;
|
|
|
+ border-radius: var(--r-sm);
|
|
|
}
|
|
|
|
|
|
/* ---- WebKit ---- */
|
|
|
&::-webkit-slider-runnable-track {
|
|
|
- height: 4px;
|
|
|
+ height: 3px;
|
|
|
border-radius: 9999px;
|
|
|
background: linear-gradient(
|
|
|
to right,
|
|
|
- var(--primary) 0%,
|
|
|
- var(--primary) var(--slider-percent, 0%),
|
|
|
+ var(--ink) 0%,
|
|
|
+ var(--ink) var(--slider-percent, 0%),
|
|
|
var(--edge-strong) var(--slider-percent, 0%)
|
|
|
);
|
|
|
}
|
|
|
@@ -30,39 +57,98 @@
|
|
|
&::-webkit-slider-thumb {
|
|
|
-webkit-appearance: none;
|
|
|
appearance: none;
|
|
|
- height: 16px;
|
|
|
- width: 16px;
|
|
|
- margin-top: -6px; /* (轨道 4px - 滑块 16px) / 2,垂直居中 */
|
|
|
+ /* 小号胶囊 8 × 20 */
|
|
|
+ height: 20px;
|
|
|
+ width: 8px;
|
|
|
+ /* (轨道 3px - 手柄 20px) / 2 = -8.5px */
|
|
|
+ margin-top: -8.5px;
|
|
|
border-radius: 9999px;
|
|
|
+ /*
|
|
|
+ 只手柄用 --surface 填充 + --ink 描边:
|
|
|
+ 纯填充(全黑/全白)在深色主题下会与轨道糊成一片,
|
|
|
+ 「浅芯 + 深边」在明暗两套主题里都能立刻定位。
|
|
|
+ */
|
|
|
background: var(--surface);
|
|
|
- border: 2px solid var(--primary);
|
|
|
- box-shadow: var(--shadow-soft);
|
|
|
- transition: transform 0.15s ease, border-color 0.15s ease;
|
|
|
+ border: 1.5px solid var(--ink);
|
|
|
+ box-sizing: border-box;
|
|
|
+ transition: transform 0.16s var(--ease-standard);
|
|
|
+ }
|
|
|
|
|
|
- &:active {
|
|
|
- transform: scale(1.15);
|
|
|
- }
|
|
|
+ &:active::-webkit-slider-thumb {
|
|
|
+ transform: scaleY(1.08);
|
|
|
}
|
|
|
|
|
|
/* ---- Firefox ---- */
|
|
|
&::-moz-range-track {
|
|
|
- height: 4px;
|
|
|
+ height: 3px;
|
|
|
border-radius: 9999px;
|
|
|
background: var(--edge-strong);
|
|
|
}
|
|
|
|
|
|
&::-moz-range-progress {
|
|
|
- height: 4px;
|
|
|
+ height: 3px;
|
|
|
border-radius: 9999px;
|
|
|
- background: var(--primary);
|
|
|
+ background: var(--ink);
|
|
|
}
|
|
|
|
|
|
&::-moz-range-thumb {
|
|
|
- height: 12px;
|
|
|
- width: 12px;
|
|
|
+ height: 20px;
|
|
|
+ width: 8px;
|
|
|
border-radius: 9999px;
|
|
|
background: var(--surface);
|
|
|
- border: 2px solid var(--primary);
|
|
|
- box-shadow: var(--shadow-soft);
|
|
|
+ border: 1.5px solid var(--ink);
|
|
|
+ box-sizing: border-box;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/* ---------------- 刻度短线 ---------------- */
|
|
|
+
|
|
|
+.ui-slider-ticks {
|
|
|
+ position: absolute;
|
|
|
+ /* 与轨道同坐标系:容器左右内边距即轨道起止 */
|
|
|
+ left: 16px;
|
|
|
+ right: 16px;
|
|
|
+ /*
|
|
|
+ 轨道下沿在 11.5px(input 高 20、轨道 3px 居中)。
|
|
|
+ 刻度从 13px 起 —— 只留 1.5px 间隙,视觉上像从轨道「长出来」的标尺,
|
|
|
+ 而不是飘在下方的一排独立符号。
|
|
|
+ */
|
|
|
+ top: 13px;
|
|
|
+ height: 8px;
|
|
|
+ pointer-events: none;
|
|
|
+}
|
|
|
+
|
|
|
+.tick {
|
|
|
+ position: absolute;
|
|
|
+ top: 0;
|
|
|
+ width: 1px;
|
|
|
+ height: 5px;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ background: var(--edge-strong);
|
|
|
+}
|
|
|
+
|
|
|
+/* ---------------- 刻度文字 ---------------- */
|
|
|
+
|
|
|
+.ui-slider-labels {
|
|
|
+ position: absolute;
|
|
|
+ left: 16px;
|
|
|
+ right: 16px;
|
|
|
+ top: 28px;
|
|
|
+ height: 18px;
|
|
|
+ pointer-events: none;
|
|
|
+}
|
|
|
+
|
|
|
+.label {
|
|
|
+ position: absolute;
|
|
|
+ transform: translateX(-50%);
|
|
|
+ font-size: var(--fs-12);
|
|
|
+ line-height: 18px;
|
|
|
+ color: var(--muted);
|
|
|
+ white-space: nowrap;
|
|
|
+}
|
|
|
+
|
|
|
+@media (prefers-reduced-motion: reduce) {
|
|
|
+ .ui-slider-input::-webkit-slider-thumb {
|
|
|
+ transition: none;
|
|
|
}
|
|
|
}
|