@brandup/ui-kit 1.0.48 → 1.0.50
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 +15 -2
- package/package.json +1 -1
- package/source/common.less +60 -3
- package/vars.less +4 -1
package/README.md
CHANGED
|
@@ -126,7 +126,7 @@ modal.onClosed(() => {
|
|
|
126
126
|
|
|
127
127
|
## Прокручиваемые области
|
|
128
128
|
|
|
129
|
-
Класс `ui-scrollable` оформляет полосу прокрутки одинаково во всех компонентах кита — тонкая, без стрелок, со скруглённым
|
|
129
|
+
Класс `ui-scrollable` оформляет полосу прокрутки одинаково во всех компонентах кита — тонкая, без стрелок, со скруглённым ползунком, «парящая»: не касается краёв коробки. Над полосой курсор всегда обычная стрелка, а не курсор элемента (над полем ввода это была бы текстовая каретка).
|
|
130
130
|
|
|
131
131
|
```typescript
|
|
132
132
|
import { SCROLLABLE_CLASS } from "@brandup/ui-kit";
|
|
@@ -134,7 +134,20 @@ import { SCROLLABLE_CLASS } from "@brandup/ui-kit";
|
|
|
134
134
|
const list = DOM.tag("div", { class: SCROLLABLE_CLASS });
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
-
|
|
137
|
+
Настраивается CSS-переменными прямо на элементе:
|
|
138
|
+
|
|
139
|
+
| Переменная | По умолчанию | Что задаёт |
|
|
140
|
+
| --- | --- | --- |
|
|
141
|
+
| `--scrollbar-size` | `6px` | Толщина видимой полосы (место под неё — толщина плюс `--scrollbar-edge-inset` с обеих сторон) |
|
|
142
|
+
| `--scrollbar-thumb` | `#8696a0` | Цвет ползунка |
|
|
143
|
+
| `--scrollbar-thumb-radius` | `3px` | Скругление ползунка |
|
|
144
|
+
| `--scrollbar-thumb-min` | `30px` | Минимальная длина ползунка — на длинном содержимом он не вырождается в точку |
|
|
145
|
+
| `--scrollbar-track-inset` | `6px` | Отступ вдоль полосы: её концы не доходят до углов коробки |
|
|
146
|
+
| `--scrollbar-edge-inset` | `6px` | Отступ поперёк: полоса отходит от края коробки |
|
|
147
|
+
|
|
148
|
+
Оформление держится на `::-webkit-scrollbar`: стандартные `scrollbar-width`/`scrollbar-color` не задаются намеренно — Blink при них отдаёт системную полосу со стрелками. Браузерам без `::-webkit-scrollbar` (Firefox) стандартные свойства выдаются отдельным правилом; отступы и минимальная длина там не действуют — Firefox ими не управляется.
|
|
149
|
+
|
|
150
|
+
У элемента со скруглением полосу лучше уводить внутрь — на вложенный прокручиваемый элемент, иначе угол выглядит срезанным (так сделаны `TextBox` и `MessageEditor`).
|
|
138
151
|
|
|
139
152
|
### Полоса прокрутки страницы
|
|
140
153
|
|
package/package.json
CHANGED
package/source/common.less
CHANGED
|
@@ -42,6 +42,9 @@
|
|
|
42
42
|
--scrollbar-size: @scrollbar-size;
|
|
43
43
|
--scrollbar-thumb: @scrollbar-thumb;
|
|
44
44
|
--scrollbar-thumb-radius: @scrollbar-thumb-radius;
|
|
45
|
+
--scrollbar-thumb-min: @scrollbar-thumb-min;
|
|
46
|
+
--scrollbar-track-inset: @scrollbar-track-inset;
|
|
47
|
+
--scrollbar-edge-inset: @scrollbar-edge-inset;
|
|
45
48
|
--scrollbar-gutter: @scrollbar-gutter;
|
|
46
49
|
}
|
|
47
50
|
|
|
@@ -136,10 +139,30 @@ svg {
|
|
|
136
139
|
//
|
|
137
140
|
// Полоса рисуется по краю коробки, поэтому у элемента со скруглением её лучше уводить внутрь —
|
|
138
141
|
// на вложенный прокручиваемый элемент, иначе угол выглядит срезанным.
|
|
142
|
+
//
|
|
143
|
+
// Отступы полосы задаются по двум осям отдельно — настраивать их приходится порознь:
|
|
144
|
+
//
|
|
145
|
+
// --scrollbar-track-inset — вдоль полосы: её концы не доходят до краёв коробки (см. трек ниже).
|
|
146
|
+
// --scrollbar-edge-inset — поперёк: полоса отходит от края коробки (см. бегунок ниже).
|
|
147
|
+
//
|
|
148
|
+
// Толщина --scrollbar-size — у видимой полосы, а не у отведённого ей места: поперечный отступ
|
|
149
|
+
// прибавляется к нему с обеих сторон.
|
|
139
150
|
.ui-scrollable {
|
|
151
|
+
// Курсор — обычная стрелка, а не тот, что задан коробке. Своя полоса рисуется движком как
|
|
152
|
+
// часть элемента и курсор берёт от него: над полосой поля ввода стояла бы «печатная» каретка
|
|
153
|
+
// (cursor: text у .editor в textbox и у плашки в messageeditor), хотя писать по ней нельзя.
|
|
154
|
+
// Ставим каждой части отдельно: части наследуют от прокручиваемого элемента, а не друг от друга.
|
|
155
|
+
&::-webkit-scrollbar,
|
|
156
|
+
&::-webkit-scrollbar-track,
|
|
157
|
+
&::-webkit-scrollbar-thumb {
|
|
158
|
+
cursor: default;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Место под полосу — её толщина плюс поперечный отступ с обеих сторон: отступ вычитается
|
|
162
|
+
// из него рамкой бегунка (см. ниже), а не отъедает саму полосу.
|
|
140
163
|
&::-webkit-scrollbar {
|
|
141
|
-
width: var(--scrollbar-size);
|
|
142
|
-
height: var(--scrollbar-size);
|
|
164
|
+
width: calc(var(--scrollbar-size) + var(--scrollbar-edge-inset) * 2);
|
|
165
|
+
height: calc(var(--scrollbar-size) + var(--scrollbar-edge-inset) * 2);
|
|
143
166
|
background: none;
|
|
144
167
|
}
|
|
145
168
|
|
|
@@ -147,9 +170,43 @@ svg {
|
|
|
147
170
|
background-color: transparent;
|
|
148
171
|
}
|
|
149
172
|
|
|
173
|
+
// «Парящая» полоса: отступ задаётся треку, а не прокручиваемому элементу — полоса рисуется
|
|
174
|
+
// по всему padding-box, и padding её концы не отодвинет. Ужатый трек не пускает бегунок
|
|
175
|
+
// в отступ, поэтому тот не упирается в края коробки. Отступ идёт вдоль полосы, поэтому
|
|
176
|
+
// вертикальной и горизонтальной он назначается по разным осям.
|
|
177
|
+
&::-webkit-scrollbar-track:vertical {
|
|
178
|
+
margin-block: var(--scrollbar-track-inset);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
&::-webkit-scrollbar-track:horizontal {
|
|
182
|
+
margin-inline: var(--scrollbar-track-inset);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// Поперечный отступ — прозрачной рамкой бегунка: заливка обрезается по её внутреннему краю,
|
|
186
|
+
// поэтому видимая полоса отходит от края коробки, а раскладка не трогается вовсе. Отступом
|
|
187
|
+
// самого прокручиваемого элемента (margin) этого добиваться не нужно — он сдвинул бы и текст.
|
|
150
188
|
&::-webkit-scrollbar-thumb {
|
|
189
|
+
// размеры ниже — вместе с рамкой, иначе её пришлось бы держать в уме в каждом из них
|
|
190
|
+
box-sizing: border-box;
|
|
151
191
|
background-color: var(--scrollbar-thumb);
|
|
152
|
-
|
|
192
|
+
// Радиус задаётся по внешнему краю, а внутренний получается на ширину рамки меньше
|
|
193
|
+
// и при отрицательном значении обрезается до нуля. Заливка идёт по внутреннему краю,
|
|
194
|
+
// поэтому к нужному радиусу прибавляем рамку — иначе у полосы пропали бы скругления.
|
|
195
|
+
border-radius: calc(var(--scrollbar-thumb-radius) + var(--scrollbar-edge-inset));
|
|
196
|
+
border: var(--scrollbar-edge-inset) solid transparent;
|
|
197
|
+
background-clip: padding-box;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Пол по длине: движок считает бегунок пропорционально содержимому, и на длинном тексте
|
|
201
|
+
// тот вырождается в точку — попасть в него мышью становится нечем. Отступ прибавляем,
|
|
202
|
+
// потому что видимая длина на рамку короче (см. выше). Задаётся по длине полосы, поэтому
|
|
203
|
+
// вертикальной и горизонтальной — по разным осям.
|
|
204
|
+
&::-webkit-scrollbar-thumb:vertical {
|
|
205
|
+
min-height: calc(var(--scrollbar-thumb-min) + var(--scrollbar-edge-inset) * 2);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
&::-webkit-scrollbar-thumb:horizontal {
|
|
209
|
+
min-width: calc(var(--scrollbar-thumb-min) + var(--scrollbar-edge-inset) * 2);
|
|
153
210
|
}
|
|
154
211
|
|
|
155
212
|
// кнопки-стрелки по концам полосы: полоса и так узкая, а нажимать их всё равно некому
|
package/vars.less
CHANGED
|
@@ -51,6 +51,9 @@
|
|
|
51
51
|
@scrollbar-size: 6px;
|
|
52
52
|
@scrollbar-thumb: #8696a0;
|
|
53
53
|
@scrollbar-thumb-radius: 3px;
|
|
54
|
+
@scrollbar-thumb-min: 30px; // бегунок не короче этого — иначе на длинном содержимом в него не попасть
|
|
55
|
+
@scrollbar-track-inset: 6px; // вдоль полосы — её концы не доходят до краёв коробки
|
|
56
|
+
@scrollbar-edge-inset: 6px; // поперёк полосы — она сама отходит от края коробки
|
|
54
57
|
@scrollbar-gutter: stable;
|
|
55
58
|
|
|
56
59
|
// inputs
|
|
@@ -72,7 +75,7 @@
|
|
|
72
75
|
|
|
73
76
|
@input-color: @text-color;
|
|
74
77
|
@input-font-size: 14px;
|
|
75
|
-
@input-line-height: 1.
|
|
78
|
+
@input-line-height: 1.4rem;
|
|
76
79
|
@input-font-weight: inherit;
|
|
77
80
|
@input-font-style: inherit;
|
|
78
81
|
|