@mr.slonn/my-scss-theme 1.0.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/README.md +182 -0
- package/index.scss +1 -0
- package/package.json +10 -0
- package/scss/.sassdocrc +85 -0
- package/scss/_font-vars.scss +25 -0
- package/scss/_fonts.scss +139 -0
- package/scss/abstracts/_animations.scss +819 -0
- package/scss/abstracts/_breakpoints.scss +865 -0
- package/scss/abstracts/_colors.scss +256 -0
- package/scss/abstracts/_functions.scss +3 -0
- package/scss/abstracts/_grid.scss +816 -0
- package/scss/abstracts/_index.scss +134 -0
- package/scss/abstracts/_mixins.scss +1142 -0
- package/scss/abstracts/_patterns.scss +657 -0
- package/scss/abstracts/_radius.scss +279 -0
- package/scss/abstracts/_search-form.scss +271 -0
- package/scss/abstracts/_spacing.scss +158 -0
- package/scss/abstracts/_typography.scss +477 -0
- package/scss/abstracts/_utilities.scss +0 -0
- package/scss/abstracts/_variables.scss +3 -0
- package/scss/abstracts/breadcrumb/_base.scss +194 -0
- package/scss/abstracts/breadcrumb/_index.scss +12 -0
- package/scss/abstracts/breadcrumb/_variables.scss +54 -0
- package/scss/abstracts/buttons/_base.scss +92 -0
- package/scss/abstracts/buttons/_index.scss +31 -0
- package/scss/abstracts/buttons/_modifiers.scss +114 -0
- package/scss/abstracts/buttons/_variables.scss +98 -0
- package/scss/abstracts/buttons/_variants.scss +295 -0
- package/scss/abstracts/callout/_base.scss +142 -0
- package/scss/abstracts/callout/_index.scss +23 -0
- package/scss/abstracts/callout/_variables.scss +27 -0
- package/scss/abstracts/cards/_base.scss +74 -0
- package/scss/abstracts/cards/_blur.scss +65 -0
- package/scss/abstracts/cards/_featured.scss +363 -0
- package/scss/abstracts/cards/_hover.scss +99 -0
- package/scss/abstracts/cards/_index.scss +51 -0
- package/scss/abstracts/cards/_parts.scss +135 -0
- package/scss/abstracts/cards/_sizes.scss +52 -0
- package/scss/abstracts/cards/_variables.scss +72 -0
- package/scss/abstracts/cards/_variants.scss +143 -0
- package/scss/abstracts/cards/_vertical.scss +218 -0
- package/scss/abstracts/chip/_base.scss +99 -0
- package/scss/abstracts/chip/_icon.scss +73 -0
- package/scss/abstracts/chip/_index.scss +21 -0
- package/scss/abstracts/chip/_variables.scss +57 -0
- package/scss/abstracts/chip/_variants.scss +98 -0
- package/scss/abstracts/file-card/_base.scss +326 -0
- package/scss/abstracts/file-card/_index.scss +12 -0
- package/scss/abstracts/file-card/_variables.scss +79 -0
- package/scss/abstracts/hero/_base.scss +182 -0
- package/scss/abstracts/hero/_index.scss +23 -0
- package/scss/abstracts/hero/_variables.scss +59 -0
- package/scss/abstracts/info-card/_base.scss +152 -0
- package/scss/abstracts/info-card/_index.scss +12 -0
- package/scss/abstracts/info-card/_variables.scss +44 -0
- package/scss/abstracts/news-card/_base.scss +143 -0
- package/scss/abstracts/news-card/_compact.scss +24 -0
- package/scss/abstracts/news-card/_featured.scss +83 -0
- package/scss/abstracts/news-card/_index.scss +31 -0
- package/scss/abstracts/news-card/_variables.scss +44 -0
- package/scss/abstracts/project-card/_base.scss +109 -0
- package/scss/abstracts/project-card/_index.scss +23 -0
- package/scss/abstracts/project-card/_variables.scss +20 -0
- package/scss/abstracts/search-form/_base.scss +132 -0
- package/scss/abstracts/search-form/_composite.scss +54 -0
- package/scss/abstracts/search-form/_index.scss +31 -0
- package/scss/abstracts/search-form/_theme.scss +89 -0
- package/scss/abstracts/search-form/_variables.scss +39 -0
- package/scss/abstracts/section-title/_base.scss +127 -0
- package/scss/abstracts/section-title/_index.scss +23 -0
- package/scss/abstracts/section-title/_variables.scss +27 -0
- package/scss/abstracts/service-card/_base.scss +77 -0
- package/scss/abstracts/service-card/_index.scss +23 -0
- package/scss/abstracts/service-card/_variables.scss +23 -0
- package/scss/abstracts/sidebar-menu/_base.scss +148 -0
- package/scss/abstracts/sidebar-menu/_index.scss +12 -0
- package/scss/abstracts/sidebar-menu/_variables.scss +55 -0
- package/scss/abstracts/stats-card/_base.scss +99 -0
- package/scss/abstracts/stats-card/_index.scss +23 -0
- package/scss/abstracts/stats-card/_variables.scss +32 -0
- package/scss/api.scss +12 -0
- package/scss/components/_breadcrumb.scss +140 -0
- package/scss/components/_buttons.scss +226 -0
- package/scss/components/_callout.scss +118 -0
- package/scss/components/_chip.scss +56 -0
- package/scss/components/_file-card.scss +182 -0
- package/scss/components/_hero.scss +103 -0
- package/scss/components/_index.scss +110 -0
- package/scss/components/_info-card.scss +103 -0
- package/scss/components/_news-card-compact.scss +33 -0
- package/scss/components/_news-card-featured.scss +49 -0
- package/scss/components/_news-card.scss +303 -0
- package/scss/components/_project-card.scss +93 -0
- package/scss/components/_search-form.scss +181 -0
- package/scss/components/_section-title.scss +94 -0
- package/scss/components/_service-card.scss +83 -0
- package/scss/components/_sidebar-menu.scss +82 -0
- package/scss/components/_stats-card.scss +92 -0
- package/scss/components/_tag.scss +144 -0
- package/scss/components/_top-nav.scss +537 -0
- package/scss/main.scss +73 -0
- package/scss/utilities/_index.scss +40 -0
- package/scss/utilities/_visibility.scss +224 -0
|
@@ -0,0 +1,865 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// BREAKPOINTS
|
|
3
|
+
// local\common\theme-moexp\src\scss\abstracts\_breakpoints.scss
|
|
4
|
+
// ============================================
|
|
5
|
+
|
|
6
|
+
////
|
|
7
|
+
/// Система брейкпоинтов для адаптивной вёрстки
|
|
8
|
+
/// @group breakpoints
|
|
9
|
+
/// @author Theme Developer
|
|
10
|
+
////
|
|
11
|
+
|
|
12
|
+
@use "sass:map";
|
|
13
|
+
@use "sass:meta";
|
|
14
|
+
|
|
15
|
+
// ─────────────────────────────────────────
|
|
16
|
+
// БРЕЙКПОИНТЫ НА ОСНОВЕ СТАТИСТИКИ
|
|
17
|
+
// ─────────────────────────────────────────
|
|
18
|
+
//
|
|
19
|
+
// Визуальная карта устройств:
|
|
20
|
+
//
|
|
21
|
+
// 0 360 414 480 640 768 1024 1280 1440 1536 1920 2560
|
|
22
|
+
// │─────────│────│────│──────│──────│───────────│───────────│───────────│──────│───────────│─────────────│
|
|
23
|
+
// │ xs │ sm │ md │ lg │ xl │ 2xl │ 3xl │ 4xl │
|
|
24
|
+
// │ │ │ │ │ │ │ │ │
|
|
25
|
+
// │ Старые │ Смартфоны │Табл. │ Ноутбуки │ Ноутбуки │ MacBook │ Full HD (36% трафика) │ 2K/4K │
|
|
26
|
+
// │ телефоны│ iPhone 12-14 │ │ бюджетные │ средние │ 1536×864 │ 1920×1080 │ 2560×1440│
|
|
27
|
+
// │ 360×800 │ 390-414px │768px │ 1366×768 │ 1280×720 │ │ │ │
|
|
28
|
+
// └─────────┴────────────────┴──────┴───────────┴───────────┴───────────┴───────────────────────┴──────────┘
|
|
29
|
+
|
|
30
|
+
/// Карта брейкпоинтов (mobile-first)
|
|
31
|
+
/// @type Map
|
|
32
|
+
/// @prop {Length} xs [360px] - Минимальный смартфон (~0.07% трафика)
|
|
33
|
+
/// @prop {Length} sm [480px] - Большие смартфоны, iPhone XR/XS (~0.05%)
|
|
34
|
+
/// @prop {Length} md [768px] - Планшеты, iPad (~0.3%)
|
|
35
|
+
/// @prop {Length} lg [1024px] - Маленькие ноутбуки, iPad Pro landscape
|
|
36
|
+
/// @prop {Length} xl [1280px] - Ноутбуки (~0.9%)
|
|
37
|
+
/// @prop {Length} xxl [1536px] - MacBook, HiDPI ноутбуки (~3.3%)
|
|
38
|
+
/// @prop {Length} xxxl [1920px] - Full HD мониторы (~36% трафика)
|
|
39
|
+
/// @prop {Length} xxxxl [2560px] - 2K/4K мониторы (~2.5%)
|
|
40
|
+
/// @example scss - Использование в миксине media
|
|
41
|
+
/// @include media(md) { ... }
|
|
42
|
+
/// @include media(lg, max) { ... }
|
|
43
|
+
/// @group breakpoints
|
|
44
|
+
$breakpoints: (
|
|
45
|
+
xs: 360px,
|
|
46
|
+
sm: 480px,
|
|
47
|
+
md: 768px,
|
|
48
|
+
lg: 1024px,
|
|
49
|
+
xl: 1280px,
|
|
50
|
+
xxl: 1536px,
|
|
51
|
+
xxxl: 1920px,
|
|
52
|
+
xxxxl: 2560px,
|
|
53
|
+
) !default;
|
|
54
|
+
|
|
55
|
+
// ─────────────────────────────────────────
|
|
56
|
+
// Контейнеры (max-width для .container)
|
|
57
|
+
// ─────────────────────────────────────────
|
|
58
|
+
|
|
59
|
+
/// Карта ширин контейнеров для каждого брейкпоинта
|
|
60
|
+
/// @type Map
|
|
61
|
+
/// @prop {Length} xs [100%] - Мобильные: полная ширина
|
|
62
|
+
/// @prop {Length} sm [100%] - Большие мобильные: полная ширина
|
|
63
|
+
/// @prop {Length} md [720px] - Планшеты
|
|
64
|
+
/// @prop {Length} lg [960px] - Ноутбуки
|
|
65
|
+
/// @prop {Length} xl [1140px] - Большие ноутбуки
|
|
66
|
+
/// @prop {Length} 2xl [1320px] - MacBook
|
|
67
|
+
/// @prop {Length} 3xl [1440px] - Full HD (комфортная ширина)
|
|
68
|
+
/// @prop {Length} 4xl [1600px] - Ultrawide
|
|
69
|
+
/// @group breakpoints
|
|
70
|
+
$containers: (
|
|
71
|
+
xs: 100%,
|
|
72
|
+
sm: 100%,
|
|
73
|
+
md: 720px,
|
|
74
|
+
lg: 960px,
|
|
75
|
+
xl: 1140px,
|
|
76
|
+
2xl: 1320px,
|
|
77
|
+
3xl: 1440px,
|
|
78
|
+
4xl: 1600px,
|
|
79
|
+
) !default;
|
|
80
|
+
|
|
81
|
+
// ─────────────────────────────────────────
|
|
82
|
+
// Переменные для прямого доступа
|
|
83
|
+
// ─────────────────────────────────────────
|
|
84
|
+
|
|
85
|
+
/// Брейкпоинт XS (минимальный смартфон)
|
|
86
|
+
/// @type Length
|
|
87
|
+
/// @group breakpoints
|
|
88
|
+
$breakpoint-xs: 360px !default;
|
|
89
|
+
|
|
90
|
+
/// Брейкпоинт SM (большие смартфоны)
|
|
91
|
+
/// @type Length
|
|
92
|
+
/// @group breakpoints
|
|
93
|
+
$breakpoint-sm: 480px !default;
|
|
94
|
+
|
|
95
|
+
/// Брейкпоинт MD (планшеты)
|
|
96
|
+
/// @type Length
|
|
97
|
+
/// @group breakpoints
|
|
98
|
+
$breakpoint-md: 768px !default;
|
|
99
|
+
|
|
100
|
+
/// Брейкпоинт LG (ноутбуки)
|
|
101
|
+
/// @type Length
|
|
102
|
+
/// @group breakpoints
|
|
103
|
+
$breakpoint-lg: 1024px !default;
|
|
104
|
+
|
|
105
|
+
/// Брейкпоинт XL (большие ноутбуки)
|
|
106
|
+
/// @type Length
|
|
107
|
+
/// @group breakpoints
|
|
108
|
+
$breakpoint-xl: 1280px !default;
|
|
109
|
+
|
|
110
|
+
/// Брейкпоинт XXL (MacBook, HiDPI)
|
|
111
|
+
/// @type Length
|
|
112
|
+
/// @group breakpoints
|
|
113
|
+
$breakpoint-xxl: 1536px !default;
|
|
114
|
+
|
|
115
|
+
/// Брейкпоинт XXXL (Full HD)
|
|
116
|
+
/// @type Length
|
|
117
|
+
/// @group breakpoints
|
|
118
|
+
$breakpoint-xxxl: 1920px !default;
|
|
119
|
+
|
|
120
|
+
/// Брейкпоинт XXXXL (2K/4K)
|
|
121
|
+
/// @type Length
|
|
122
|
+
/// @group breakpoints
|
|
123
|
+
$breakpoint-xxxxl: 2560px !default;
|
|
124
|
+
|
|
125
|
+
// ============================================
|
|
126
|
+
// УНИВЕРСАЛЬНЫЙ MEDIA МИКСИН
|
|
127
|
+
// ============================================
|
|
128
|
+
|
|
129
|
+
/// Универсальный media query миксин
|
|
130
|
+
/// @param {String|Length} $breakpoint - Имя брейкпоинта (xs, sm, md...) или число в px
|
|
131
|
+
/// @param {String} $type [min] - Тип запроса: min, max, min-max
|
|
132
|
+
/// @param {String|Length} $breakpoint-end [null] - Конечный брейкпоинт для диапазона
|
|
133
|
+
/// @output Media query с переданным контентом
|
|
134
|
+
/// @example scss - min-width (mobile-first)
|
|
135
|
+
/// .element {
|
|
136
|
+
/// @include media(md) {
|
|
137
|
+
/// display: flex;
|
|
138
|
+
/// }
|
|
139
|
+
/// }
|
|
140
|
+
/// @example scss - max-width
|
|
141
|
+
/// .element {
|
|
142
|
+
/// @include media(lg, max) {
|
|
143
|
+
/// display: block;
|
|
144
|
+
/// }
|
|
145
|
+
/// }
|
|
146
|
+
/// @example scss - диапазон
|
|
147
|
+
/// .element {
|
|
148
|
+
/// @include media(md, min-max, lg) {
|
|
149
|
+
/// padding: 1rem;
|
|
150
|
+
/// }
|
|
151
|
+
/// }
|
|
152
|
+
/// @example scss - произвольное значение
|
|
153
|
+
/// .element {
|
|
154
|
+
/// @include media(600px) {
|
|
155
|
+
/// font-size: 1.2rem;
|
|
156
|
+
/// }
|
|
157
|
+
/// }
|
|
158
|
+
/// @group breakpoints
|
|
159
|
+
@mixin media($breakpoint, $type: min, $breakpoint-end: null) {
|
|
160
|
+
$value: _get-breakpoint-value($breakpoint);
|
|
161
|
+
|
|
162
|
+
@if $type == min {
|
|
163
|
+
@media (min-width: $value) {
|
|
164
|
+
@content;
|
|
165
|
+
}
|
|
166
|
+
} @else if $type == max {
|
|
167
|
+
@media (max-width: ($value - 1px)) {
|
|
168
|
+
@content;
|
|
169
|
+
}
|
|
170
|
+
} @else if $type == min-max {
|
|
171
|
+
@if not $breakpoint-end {
|
|
172
|
+
@error "Для `min-max` укажите второй брейкпоинт";
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
$value-end: _get-breakpoint-value($breakpoint-end);
|
|
176
|
+
|
|
177
|
+
@media (min-width: $value) and (max-width: ($value-end - 1px)) {
|
|
178
|
+
@content;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/// Получает значение брейкпоинта из карты или возвращает число
|
|
184
|
+
/// @access private
|
|
185
|
+
/// @param {String|Length} $breakpoint - Имя или значение брейкпоинта
|
|
186
|
+
/// @return {Length} - Значение в px
|
|
187
|
+
/// @throw Ошибка если брейкпоинт не найден
|
|
188
|
+
/// @group breakpoints
|
|
189
|
+
@function _get-breakpoint-value($breakpoint) {
|
|
190
|
+
@if meta.type-of($breakpoint) == number {
|
|
191
|
+
@return $breakpoint;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
$value: map.get($breakpoints, $breakpoint);
|
|
195
|
+
|
|
196
|
+
@if not $value {
|
|
197
|
+
@error "Брейкпоинт `#{$breakpoint}` не найден. Доступные: #{map.keys($breakpoints)}";
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
@return $value;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// ============================================
|
|
204
|
+
// UP (min-width) — mobile-first
|
|
205
|
+
// ============================================
|
|
206
|
+
|
|
207
|
+
/// Media query от XS (360px) и выше
|
|
208
|
+
/// @content Стили для XS+
|
|
209
|
+
/// @output @media (min-width: 360px)
|
|
210
|
+
/// @group breakpoints
|
|
211
|
+
@mixin xs-up {
|
|
212
|
+
@include media(xs) {
|
|
213
|
+
@content;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/// Media query от SM (480px) и выше
|
|
218
|
+
/// @content Стили для SM+
|
|
219
|
+
/// @output @media (min-width: 480px)
|
|
220
|
+
/// @group breakpoints
|
|
221
|
+
@mixin sm-up {
|
|
222
|
+
@include media(sm) {
|
|
223
|
+
@content;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/// Media query от MD (768px) и выше
|
|
228
|
+
/// @content Стили для MD+
|
|
229
|
+
/// @output @media (min-width: 768px)
|
|
230
|
+
/// @group breakpoints
|
|
231
|
+
@mixin md-up {
|
|
232
|
+
@include media(md) {
|
|
233
|
+
@content;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/// Media query от LG (1024px) и выше
|
|
238
|
+
/// @content Стили для LG+
|
|
239
|
+
/// @output @media (min-width: 1024px)
|
|
240
|
+
/// @group breakpoints
|
|
241
|
+
@mixin lg-up {
|
|
242
|
+
@include media(lg) {
|
|
243
|
+
@content;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/// Media query от XL (1280px) и выше
|
|
248
|
+
/// @content Стили для XL+
|
|
249
|
+
/// @output @media (min-width: 1280px)
|
|
250
|
+
/// @group breakpoints
|
|
251
|
+
@mixin xl-up {
|
|
252
|
+
@include media(xl) {
|
|
253
|
+
@content;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/// Media query от XXL (1536px) и выше
|
|
258
|
+
/// @content Стили для XXL+
|
|
259
|
+
/// @output @media (min-width: 1536px)
|
|
260
|
+
/// @group breakpoints
|
|
261
|
+
@mixin xxl-up {
|
|
262
|
+
@include media(xxl) {
|
|
263
|
+
@content;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/// Media query от XXXL (1920px) и выше
|
|
268
|
+
/// @content Стили для XXXL+
|
|
269
|
+
/// @output @media (min-width: 1920px)
|
|
270
|
+
/// @group breakpoints
|
|
271
|
+
@mixin xxxl-up {
|
|
272
|
+
@include media(xxxl) {
|
|
273
|
+
@content;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/// Media query от XXXXL (2560px) и выше
|
|
278
|
+
/// @content Стили для XXXXL+
|
|
279
|
+
/// @output @media (min-width: 2560px)
|
|
280
|
+
/// @group breakpoints
|
|
281
|
+
@mixin xxxxl-up {
|
|
282
|
+
@include media(xxxxl) {
|
|
283
|
+
@content;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// ─────────────────────────────────────────
|
|
288
|
+
// Короткие алиасы (без суффикса -up)
|
|
289
|
+
// ─────────────────────────────────────────
|
|
290
|
+
|
|
291
|
+
/// Алиас для xs-up
|
|
292
|
+
/// @content Стили для XS+
|
|
293
|
+
/// @see {mixin} xs-up
|
|
294
|
+
/// @group breakpoints
|
|
295
|
+
@mixin xs {
|
|
296
|
+
@include media(xs) {
|
|
297
|
+
@content;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/// Алиас для sm-up
|
|
302
|
+
/// @content Стили для SM+
|
|
303
|
+
/// @see {mixin} sm-up
|
|
304
|
+
/// @group breakpoints
|
|
305
|
+
@mixin sm {
|
|
306
|
+
@include media(sm) {
|
|
307
|
+
@content;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/// Алиас для md-up
|
|
312
|
+
/// @content Стили для MD+
|
|
313
|
+
/// @see {mixin} md-up
|
|
314
|
+
/// @group breakpoints
|
|
315
|
+
@mixin md {
|
|
316
|
+
@include media(md) {
|
|
317
|
+
@content;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/// Алиас для lg-up
|
|
322
|
+
/// @content Стили для LG+
|
|
323
|
+
/// @see {mixin} lg-up
|
|
324
|
+
/// @group breakpoints
|
|
325
|
+
@mixin lg {
|
|
326
|
+
@include media(lg) {
|
|
327
|
+
@content;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/// Алиас для xl-up
|
|
332
|
+
/// @content Стили для XL+
|
|
333
|
+
/// @see {mixin} xl-up
|
|
334
|
+
/// @group breakpoints
|
|
335
|
+
@mixin xl {
|
|
336
|
+
@include media(xl) {
|
|
337
|
+
@content;
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
/// Алиас для xxl-up
|
|
342
|
+
/// @content Стили для XXL+
|
|
343
|
+
/// @see {mixin} xxl-up
|
|
344
|
+
/// @group breakpoints
|
|
345
|
+
@mixin xxl {
|
|
346
|
+
@include media(xxl) {
|
|
347
|
+
@content;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/// Алиас для xxxl-up
|
|
352
|
+
/// @content Стили для XXXL+
|
|
353
|
+
/// @see {mixin} xxxl-up
|
|
354
|
+
/// @group breakpoints
|
|
355
|
+
@mixin xxxl {
|
|
356
|
+
@include media(xxxl) {
|
|
357
|
+
@content;
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/// Алиас для xxxxl-up
|
|
362
|
+
/// @content Стили для XXXXL+
|
|
363
|
+
/// @see {mixin} xxxxl-up
|
|
364
|
+
/// @group breakpoints
|
|
365
|
+
@mixin xxxxl {
|
|
366
|
+
@include media(xxxxl) {
|
|
367
|
+
@content;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// ─────────────────────────────────────────
|
|
372
|
+
// Семантические алиасы
|
|
373
|
+
// ─────────────────────────────────────────
|
|
374
|
+
|
|
375
|
+
/// Мобильные устройства (от 360px)
|
|
376
|
+
/// @content Стили для мобильных+
|
|
377
|
+
/// @see {mixin} xs
|
|
378
|
+
/// @group breakpoints
|
|
379
|
+
@mixin mobile {
|
|
380
|
+
@include media(xs) {
|
|
381
|
+
@content;
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
/// Большие мобильные (от 480px)
|
|
386
|
+
/// @content Стили для больших мобильных+
|
|
387
|
+
/// @see {mixin} sm
|
|
388
|
+
/// @group breakpoints
|
|
389
|
+
@mixin mobile-lg {
|
|
390
|
+
@include media(sm) {
|
|
391
|
+
@content;
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
/// Планшеты (от 768px)
|
|
396
|
+
/// @content Стили для планшетов+
|
|
397
|
+
/// @see {mixin} md
|
|
398
|
+
/// @group breakpoints
|
|
399
|
+
@mixin tablet {
|
|
400
|
+
@include media(md) {
|
|
401
|
+
@content;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
/// Ноутбуки (от 1024px)
|
|
406
|
+
/// @content Стили для ноутбуков+
|
|
407
|
+
/// @see {mixin} lg
|
|
408
|
+
/// @group breakpoints
|
|
409
|
+
@mixin laptop {
|
|
410
|
+
@include media(lg) {
|
|
411
|
+
@content;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
/// Большие ноутбуки (от 1280px)
|
|
416
|
+
/// @content Стили для больших ноутбуков+
|
|
417
|
+
/// @see {mixin} xl
|
|
418
|
+
/// @group breakpoints
|
|
419
|
+
@mixin laptop-lg {
|
|
420
|
+
@include media(xl) {
|
|
421
|
+
@content;
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
/// Десктопы (от 1536px)
|
|
426
|
+
/// @content Стили для десктопов+
|
|
427
|
+
/// @see {mixin} xxl
|
|
428
|
+
/// @group breakpoints
|
|
429
|
+
@mixin desktop {
|
|
430
|
+
@include media(xxl) {
|
|
431
|
+
@content;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
/// Full HD десктопы (от 1920px)
|
|
436
|
+
/// @content Стили для Full HD+
|
|
437
|
+
/// @see {mixin} xxxl
|
|
438
|
+
/// @group breakpoints
|
|
439
|
+
@mixin desktop-fhd {
|
|
440
|
+
@include media(xxxl) {
|
|
441
|
+
@content;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/// 2K/4K десктопы (от 2560px)
|
|
446
|
+
/// @content Стили для 2K/4K+
|
|
447
|
+
/// @see {mixin} xxxxl
|
|
448
|
+
/// @group breakpoints
|
|
449
|
+
@mixin desktop-2k {
|
|
450
|
+
@include media(xxxxl) {
|
|
451
|
+
@content;
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
// ============================================
|
|
456
|
+
// DOWN (max-width)
|
|
457
|
+
// ============================================
|
|
458
|
+
|
|
459
|
+
/// Media query до XS (менее 360px)
|
|
460
|
+
/// @content Стили для <360px
|
|
461
|
+
/// @output @media (max-width: 359px)
|
|
462
|
+
/// @group breakpoints
|
|
463
|
+
@mixin xs-down {
|
|
464
|
+
@include media(xs, max) {
|
|
465
|
+
@content;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/// Media query до SM (менее 480px)
|
|
470
|
+
/// @content Стили для <480px
|
|
471
|
+
/// @output @media (max-width: 479px)
|
|
472
|
+
/// @group breakpoints
|
|
473
|
+
@mixin sm-down {
|
|
474
|
+
@include media(sm, max) {
|
|
475
|
+
@content;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
/// Media query до MD (менее 768px)
|
|
480
|
+
/// @content Стили для <768px
|
|
481
|
+
/// @output @media (max-width: 767px)
|
|
482
|
+
/// @group breakpoints
|
|
483
|
+
@mixin md-down {
|
|
484
|
+
@include media(md, max) {
|
|
485
|
+
@content;
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
/// Media query до LG (менее 1024px)
|
|
490
|
+
/// @content Стили для <1024px
|
|
491
|
+
/// @output @media (max-width: 1023px)
|
|
492
|
+
/// @group breakpoints
|
|
493
|
+
@mixin lg-down {
|
|
494
|
+
@include media(lg, max) {
|
|
495
|
+
@content;
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/// Media query до XL (менее 1280px)
|
|
500
|
+
/// @content Стили для <1280px
|
|
501
|
+
/// @output @media (max-width: 1279px)
|
|
502
|
+
/// @group breakpoints
|
|
503
|
+
@mixin xl-down {
|
|
504
|
+
@include media(xl, max) {
|
|
505
|
+
@content;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
/// Media query до XXL (менее 1536px)
|
|
510
|
+
/// @content Стили для <1536px
|
|
511
|
+
/// @output @media (max-width: 1535px)
|
|
512
|
+
/// @group breakpoints
|
|
513
|
+
@mixin xxl-down {
|
|
514
|
+
@include media(xxl, max) {
|
|
515
|
+
@content;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
/// Media query до XXXL (менее 1920px)
|
|
520
|
+
/// @content Стили для <1920px
|
|
521
|
+
/// @output @media (max-width: 1919px)
|
|
522
|
+
/// @group breakpoints
|
|
523
|
+
@mixin xxxl-down {
|
|
524
|
+
@include media(xxxl, max) {
|
|
525
|
+
@content;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
/// Media query до XXXXL (менее 2560px)
|
|
530
|
+
/// @content Стили для <2560px
|
|
531
|
+
/// @output @media (max-width: 2559px)
|
|
532
|
+
/// @group breakpoints
|
|
533
|
+
@mixin xxxxl-down {
|
|
534
|
+
@include media(xxxxl, max) {
|
|
535
|
+
@content;
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
// ============================================
|
|
540
|
+
// ONLY (диапазоны)
|
|
541
|
+
// ============================================
|
|
542
|
+
|
|
543
|
+
/// Только XS (360px - 479px)
|
|
544
|
+
/// @content Стили только для XS
|
|
545
|
+
/// @output @media (min-width: 360px) and (max-width: 479px)
|
|
546
|
+
/// @group breakpoints
|
|
547
|
+
@mixin xs-only {
|
|
548
|
+
@include media(xs, min-max, sm) {
|
|
549
|
+
@content;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/// Только SM (480px - 767px)
|
|
554
|
+
/// @content Стили только для SM
|
|
555
|
+
/// @output @media (min-width: 480px) and (max-width: 767px)
|
|
556
|
+
/// @group breakpoints
|
|
557
|
+
@mixin sm-only {
|
|
558
|
+
@include media(sm, min-max, md) {
|
|
559
|
+
@content;
|
|
560
|
+
}
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
/// Только MD (768px - 1023px)
|
|
564
|
+
/// @content Стили только для MD
|
|
565
|
+
/// @output @media (min-width: 768px) and (max-width: 1023px)
|
|
566
|
+
/// @group breakpoints
|
|
567
|
+
@mixin md-only {
|
|
568
|
+
@include media(md, min-max, lg) {
|
|
569
|
+
@content;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/// Только LG (1024px - 1279px)
|
|
574
|
+
/// @content Стили только для LG
|
|
575
|
+
/// @output @media (min-width: 1024px) and (max-width: 1279px)
|
|
576
|
+
/// @group breakpoints
|
|
577
|
+
@mixin lg-only {
|
|
578
|
+
@include media(lg, min-max, xl) {
|
|
579
|
+
@content;
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
/// Только XL (1280px - 1535px)
|
|
584
|
+
/// @content Стили только для XL
|
|
585
|
+
/// @output @media (min-width: 1280px) and (max-width: 1535px)
|
|
586
|
+
/// @group breakpoints
|
|
587
|
+
@mixin xl-only {
|
|
588
|
+
@include media(xl, min-max, xxl) {
|
|
589
|
+
@content;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
/// Только XXL (1536px - 1919px)
|
|
594
|
+
/// @content Стили только для XXL
|
|
595
|
+
/// @output @media (min-width: 1536px) and (max-width: 1919px)
|
|
596
|
+
/// @group breakpoints
|
|
597
|
+
@mixin xxl-only {
|
|
598
|
+
@include media(xxl, min-max, xxxl) {
|
|
599
|
+
@content;
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
/// Только XXXL (1920px - 2559px)
|
|
604
|
+
/// @content Стили только для XXXL
|
|
605
|
+
/// @output @media (min-width: 1920px) and (max-width: 2559px)
|
|
606
|
+
/// @group breakpoints
|
|
607
|
+
@mixin xxxl-only {
|
|
608
|
+
@include media(xxxl, min-max, xxxxl) {
|
|
609
|
+
@content;
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// ============================================
|
|
614
|
+
// HIDE / SHOW
|
|
615
|
+
// ============================================
|
|
616
|
+
|
|
617
|
+
/// Скрыть элемент от указанного брейкпоинта и выше
|
|
618
|
+
/// @param {String|Length} $breakpoint - Брейкпоинт от которого скрывать
|
|
619
|
+
/// @output display: none с !important
|
|
620
|
+
/// @example scss
|
|
621
|
+
/// .mobile-menu {
|
|
622
|
+
/// @include hide-up(lg); // Скрыть на десктопе
|
|
623
|
+
/// }
|
|
624
|
+
/// @group breakpoints
|
|
625
|
+
@mixin hide-up($breakpoint) {
|
|
626
|
+
@include media($breakpoint) {
|
|
627
|
+
display: none !important;
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/// Скрыть элемент до указанного брейкпоинта
|
|
632
|
+
/// @param {String|Length} $breakpoint - Брейкпоинт до которого скрывать
|
|
633
|
+
/// @output display: none с !important
|
|
634
|
+
/// @example scss
|
|
635
|
+
/// .sidebar {
|
|
636
|
+
/// @include hide-down(lg); // Скрыть на мобильных
|
|
637
|
+
/// }
|
|
638
|
+
/// @group breakpoints
|
|
639
|
+
@mixin hide-down($breakpoint) {
|
|
640
|
+
@include media($breakpoint, max) {
|
|
641
|
+
display: none !important;
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/// Скрыть элемент в диапазоне брейкпоинтов
|
|
646
|
+
/// @param {String|Length} $from - Начальный брейкпоинт
|
|
647
|
+
/// @param {String|Length} $to - Конечный брейкпоинт
|
|
648
|
+
/// @output display: none с !important
|
|
649
|
+
/// @example scss
|
|
650
|
+
/// .promo {
|
|
651
|
+
/// @include hide-between(sm, lg); // Скрыть только на планшетах
|
|
652
|
+
/// }
|
|
653
|
+
/// @group breakpoints
|
|
654
|
+
@mixin hide-between($from, $to) {
|
|
655
|
+
@include media($from, min-max, $to) {
|
|
656
|
+
display: none !important;
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
/// Показать элемент от указанного брейкпоинта и выше (скрыт по умолчанию)
|
|
661
|
+
/// @param {String|Length} $breakpoint - Брейкпоинт от которого показывать
|
|
662
|
+
/// @output display: none → display: revert
|
|
663
|
+
/// @example scss
|
|
664
|
+
/// .desktop-widget {
|
|
665
|
+
/// @include show-up(lg); // Показать только на десктопе
|
|
666
|
+
/// }
|
|
667
|
+
/// @group breakpoints
|
|
668
|
+
@mixin show-up($breakpoint) {
|
|
669
|
+
display: none !important;
|
|
670
|
+
|
|
671
|
+
@include media($breakpoint) {
|
|
672
|
+
display: revert !important;
|
|
673
|
+
}
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
/// Показать элемент до указанного брейкпоинта (скрыт по умолчанию)
|
|
677
|
+
/// @param {String|Length} $breakpoint - Брейкпоинт до которого показывать
|
|
678
|
+
/// @output display: none → display: revert
|
|
679
|
+
/// @example scss
|
|
680
|
+
/// .mobile-widget {
|
|
681
|
+
/// @include show-down(lg); // Показать только на мобильных
|
|
682
|
+
/// }
|
|
683
|
+
/// @group breakpoints
|
|
684
|
+
@mixin show-down($breakpoint) {
|
|
685
|
+
display: none !important;
|
|
686
|
+
|
|
687
|
+
@include media($breakpoint, max) {
|
|
688
|
+
display: revert !important;
|
|
689
|
+
}
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
/// Показать элемент в диапазоне брейкпоинтов (скрыт по умолчанию)
|
|
693
|
+
/// @param {String|Length} $from - Начальный брейкпоинт
|
|
694
|
+
/// @param {String|Length} $to - Конечный брейкпоинт
|
|
695
|
+
/// @output display: none → display: revert
|
|
696
|
+
/// @example scss
|
|
697
|
+
/// .tablet-banner {
|
|
698
|
+
/// @include show-between(sm, lg); // Показать только на планшетах
|
|
699
|
+
/// }
|
|
700
|
+
/// @group breakpoints
|
|
701
|
+
@mixin show-between($from, $to) {
|
|
702
|
+
display: none !important;
|
|
703
|
+
|
|
704
|
+
@include media($from, min-max, $to) {
|
|
705
|
+
display: revert !important;
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
|
|
709
|
+
// ─────────────────────────────────────────
|
|
710
|
+
// Семантические hide/show
|
|
711
|
+
// ─────────────────────────────────────────
|
|
712
|
+
|
|
713
|
+
/// Скрыть на мобильных (до LG)
|
|
714
|
+
/// @content Не требует контента
|
|
715
|
+
/// @see {mixin} hide-down
|
|
716
|
+
/// @group breakpoints
|
|
717
|
+
@mixin hide-mobile {
|
|
718
|
+
@include hide-down(lg);
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
/// Скрыть на десктопе (от LG)
|
|
722
|
+
/// @content Не требует контента
|
|
723
|
+
/// @see {mixin} hide-up
|
|
724
|
+
/// @group breakpoints
|
|
725
|
+
@mixin hide-desktop {
|
|
726
|
+
@include hide-up(lg);
|
|
727
|
+
}
|
|
728
|
+
|
|
729
|
+
/// Показать только на мобильных (до LG)
|
|
730
|
+
/// @content Не требует контента
|
|
731
|
+
/// @see {mixin} hide-up
|
|
732
|
+
/// @group breakpoints
|
|
733
|
+
@mixin mobile-only {
|
|
734
|
+
@include hide-up(lg);
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
/// Показать только на десктопе (от LG)
|
|
738
|
+
/// @content Не требует контента
|
|
739
|
+
/// @see {mixin} hide-down
|
|
740
|
+
/// @group breakpoints
|
|
741
|
+
@mixin desktop-only {
|
|
742
|
+
@include hide-down(lg);
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
// ============================================
|
|
746
|
+
// ДОПОЛНИТЕЛЬНЫЕ МЕДИА-ЗАПРОСЫ
|
|
747
|
+
// ============================================
|
|
748
|
+
|
|
749
|
+
/// Стили только для устройств с hover (мышь)
|
|
750
|
+
/// @content Стили для hover-устройств
|
|
751
|
+
/// @output @media (hover: hover) and (pointer: fine)
|
|
752
|
+
/// @example scss
|
|
753
|
+
/// .button {
|
|
754
|
+
/// @include hover {
|
|
755
|
+
/// transform: scale(1.05);
|
|
756
|
+
/// }
|
|
757
|
+
/// }
|
|
758
|
+
/// @group breakpoints
|
|
759
|
+
@mixin hover {
|
|
760
|
+
@media (hover: hover) and (pointer: fine) {
|
|
761
|
+
&:hover {
|
|
762
|
+
@content;
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
/// Стили для тач-устройств
|
|
768
|
+
/// @content Стили для тач-устройств
|
|
769
|
+
/// @output @media (hover: none) and (pointer: coarse)
|
|
770
|
+
/// @example scss
|
|
771
|
+
/// .slider {
|
|
772
|
+
/// @include touch {
|
|
773
|
+
/// scroll-snap-type: x mandatory;
|
|
774
|
+
/// }
|
|
775
|
+
/// }
|
|
776
|
+
/// @group breakpoints
|
|
777
|
+
@mixin touch {
|
|
778
|
+
@media (hover: none) and (pointer: coarse) {
|
|
779
|
+
@content;
|
|
780
|
+
}
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
/// Стили для пользователей с настройкой "уменьшить движение"
|
|
784
|
+
/// @content Стили для reduced-motion
|
|
785
|
+
/// @output @media (prefers-reduced-motion: reduce)
|
|
786
|
+
/// @example scss
|
|
787
|
+
/// .animated {
|
|
788
|
+
/// @include reduced-motion {
|
|
789
|
+
/// animation: none;
|
|
790
|
+
/// }
|
|
791
|
+
/// }
|
|
792
|
+
/// @group breakpoints
|
|
793
|
+
@mixin reduced-motion {
|
|
794
|
+
@media (prefers-reduced-motion: reduce) {
|
|
795
|
+
@content;
|
|
796
|
+
}
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
/// Стили для тёмной системной темы
|
|
800
|
+
/// @content Стили для тёмной темы
|
|
801
|
+
/// @output @media (prefers-color-scheme: dark)
|
|
802
|
+
/// @example scss
|
|
803
|
+
/// body {
|
|
804
|
+
/// @include prefers-dark {
|
|
805
|
+
/// background: #000;
|
|
806
|
+
/// }
|
|
807
|
+
/// }
|
|
808
|
+
/// @group breakpoints
|
|
809
|
+
@mixin prefers-dark {
|
|
810
|
+
@media (prefers-color-scheme: dark) {
|
|
811
|
+
@content;
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
/// Стили для печати
|
|
816
|
+
/// @content Стили для печати
|
|
817
|
+
/// @output @media print
|
|
818
|
+
/// @example scss
|
|
819
|
+
/// .no-print {
|
|
820
|
+
/// @include print {
|
|
821
|
+
/// display: none;
|
|
822
|
+
/// }
|
|
823
|
+
/// }
|
|
824
|
+
/// @group breakpoints
|
|
825
|
+
@mixin print {
|
|
826
|
+
@media print {
|
|
827
|
+
@content;
|
|
828
|
+
}
|
|
829
|
+
}
|
|
830
|
+
|
|
831
|
+
/// Стили для альбомной ориентации
|
|
832
|
+
/// @content Стили для landscape
|
|
833
|
+
/// @output @media (orientation: landscape)
|
|
834
|
+
/// @group breakpoints
|
|
835
|
+
@mixin landscape {
|
|
836
|
+
@media (orientation: landscape) {
|
|
837
|
+
@content;
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
|
|
841
|
+
/// Стили для портретной ориентации
|
|
842
|
+
/// @content Стили для portrait
|
|
843
|
+
/// @output @media (orientation: portrait)
|
|
844
|
+
/// @group breakpoints
|
|
845
|
+
@mixin portrait {
|
|
846
|
+
@media (orientation: portrait) {
|
|
847
|
+
@content;
|
|
848
|
+
}
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
/// Стили для Retina / HiDPI экранов
|
|
852
|
+
/// @content Стили для 2x+ плотности
|
|
853
|
+
/// @output @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi)
|
|
854
|
+
/// @example scss
|
|
855
|
+
/// .logo {
|
|
856
|
+
/// @include retina {
|
|
857
|
+
/// background-image: url('logo@2x.png');
|
|
858
|
+
/// }
|
|
859
|
+
/// }
|
|
860
|
+
/// @group breakpoints
|
|
861
|
+
@mixin retina {
|
|
862
|
+
@media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
|
|
863
|
+
@content;
|
|
864
|
+
}
|
|
865
|
+
}
|