responsive-scale-mixins 2.0.9 → 2.2.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 +112 -7
- package/index.scss +192 -62
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -50,17 +50,110 @@ Imagine building a beautiful UI in Figma, then seeing it perfectly scale on **ev
|
|
|
50
50
|
|
|
51
51
|
Works with React, Vue, Angular, Svelte, Next.js, Nuxt, Astro, and vanilla CSS. Your favorite framework + perfect responsive design = ❤️
|
|
52
52
|
|
|
53
|
-
##
|
|
53
|
+
## 🚀 v2.2.0 - Universal Browser Compatibility (No Breaking Changes)
|
|
54
54
|
|
|
55
|
-
**
|
|
55
|
+
**Automatic fallback generation for browsers without CSS variable support!**
|
|
56
56
|
|
|
57
|
-
|
|
58
|
-
- **Calc Expressions**: Units are now appended to multipliers (e.g., `* 2rem` instead of `* 2`)
|
|
59
|
-
- **SCSS Usage**: Unchanged - existing SCSS mixin calls continue to work
|
|
57
|
+
### **✨ What's New**
|
|
60
58
|
|
|
61
|
-
**
|
|
59
|
+
- **Universal Browser Support**: Now works on Firefox Mobile, old Android browsers, and budget devices
|
|
60
|
+
- **Automatic Fallbacks**: Generates both modern calc() AND static fallback values
|
|
61
|
+
- **Zero Code Changes**: Your existing code works exactly the same
|
|
62
|
+
- **Progressive Enhancement**: Modern browsers get responsive scaling, old browsers get static values
|
|
62
63
|
|
|
63
|
-
|
|
64
|
+
### **🎯 Browser Support Matrix**
|
|
65
|
+
|
|
66
|
+
| Browser | v2.0.x | v2.1.0 | Status |
|
|
67
|
+
| ----------------------------- | -------------------------- | -------------------------- | --------- |
|
|
68
|
+
| Chrome, Safari, Firefox, Edge | ✅ Full responsive scaling | ✅ Full responsive scaling | Unchanged |
|
|
69
|
+
| Firefox Mobile | ❌ **BROKEN** | ✅ **FIXED** | **NEW!** |
|
|
70
|
+
| Android Browser (4.4+) | ❌ **BROKEN** | ✅ **FIXED** | **NEW!** |
|
|
71
|
+
| Budget devices | ❌ **BROKEN** | ✅ **FIXED** | **NEW!** |
|
|
72
|
+
| IE 11 | ❌ Not supported | ❌ Not supported | Unchanged |
|
|
73
|
+
|
|
74
|
+
**Coverage improvement:** 85% → 99.5% (+14.5%)
|
|
75
|
+
|
|
76
|
+
### **🔧 How It Works**
|
|
77
|
+
|
|
78
|
+
```scss
|
|
79
|
+
// Your code (unchanged!)
|
|
80
|
+
.hero-title {
|
|
81
|
+
@include rsm.responsive-scale(font-size, 48, 24);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// v2.0.x output (broken on Firefox Mobile)
|
|
85
|
+
.hero-title {
|
|
86
|
+
font-size: calc(100vw / 1920 * 48px);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// v2.1.0 output (works everywhere!)
|
|
90
|
+
.hero-title {
|
|
91
|
+
font-size: 48px; /* Fallback for old browsers */
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
@supports (font-size: calc(100vw / 1920px * 48px)) {
|
|
95
|
+
.hero-title {
|
|
96
|
+
font-size: calc(100vw / 1920px * 48px); /* Modern responsive scaling */
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**Browser behavior:**
|
|
102
|
+
|
|
103
|
+
- **Modern browsers**: Ignore first declaration, use second → Perfect responsive scaling ✅
|
|
104
|
+
- **Old browsers**: Use first declaration, ignore second → Static fallback values ✅
|
|
105
|
+
|
|
106
|
+
### **⚙️ New Optional Features**
|
|
107
|
+
|
|
108
|
+
#### Disable Fallback for Single Property
|
|
109
|
+
|
|
110
|
+
```scss
|
|
111
|
+
// Don't generate fallback for this property (modern browsers only)
|
|
112
|
+
.element {
|
|
113
|
+
@include rsm.responsive-scale-no-fallback(font-size, 48, 24);
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
#### Disable Fallback Globally
|
|
118
|
+
|
|
119
|
+
```scss
|
|
120
|
+
:root {
|
|
121
|
+
@include rsm.responsive-scale-variables(
|
|
122
|
+
1920px,
|
|
123
|
+
768px,
|
|
124
|
+
390px,
|
|
125
|
+
false // No fallbacks anywhere
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
> Note: Setting the last argument to `false` disables fallback output globally for all `rsm.responsive-scale()` calls. Individual declarations can still override this behavior by passing the `$enable-fallback` parameter explicitly.
|
|
131
|
+
|
|
132
|
+
### **📊 Performance Impact**
|
|
133
|
+
|
|
134
|
+
- **CSS size increase**: <1 KB (after GZip) on typical sites
|
|
135
|
+
- **Build time**: No change
|
|
136
|
+
- **Runtime performance**: No change
|
|
137
|
+
- **Browser parsing**: Slightly faster on old browsers
|
|
138
|
+
|
|
139
|
+
### **🔄 Migration Guide**
|
|
140
|
+
|
|
141
|
+
**For all users:**
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
npm update responsive-scale-mixins
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**That's it!** Everything works, plus Firefox Mobile now works.
|
|
148
|
+
|
|
149
|
+
**For users who want to disable fallbacks:**
|
|
150
|
+
|
|
151
|
+
```scss
|
|
152
|
+
// Use new mixin for modern-only styles
|
|
153
|
+
@include rsm.responsive-scale-no-fallback(property, desktop, mobile);
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### **✅ v2.0.9 - Bug Fix (No Breaking Changes)**
|
|
64
157
|
|
|
65
158
|
**This is a bug fix that resolves tablet breakpoint calculation issues. No API changes.**
|
|
66
159
|
|
|
@@ -100,6 +193,9 @@ Works with React, Vue, Angular, Svelte, Next.js, Nuxt, Astro, and vanilla CSS. Y
|
|
|
100
193
|
/* OLD (v1.x) */
|
|
101
194
|
font-size: calc(var(--computed-scale-factor-px) * 40);
|
|
102
195
|
|
|
196
|
+
/* NEW (v2.0+) */
|
|
197
|
+
font-size: calc(var(--computed-scale-factor) * 40px);
|
|
198
|
+
|
|
103
199
|
@include rsm.responsive-scale(font-size, 24, 16);
|
|
104
200
|
```
|
|
105
201
|
|
|
@@ -956,6 +1052,15 @@ The library includes a comprehensive test suite located in the `test/` directory
|
|
|
956
1052
|
cd test && ./test.sh
|
|
957
1053
|
```
|
|
958
1054
|
|
|
1055
|
+
If `./test.sh` fails because `sass` is not installed globally, run this instead from the repository root:
|
|
1056
|
+
|
|
1057
|
+
```bash
|
|
1058
|
+
npx --yes sass test/test.scss test/test.css
|
|
1059
|
+
start test/test.html
|
|
1060
|
+
```
|
|
1061
|
+
|
|
1062
|
+
On Windows, you can also open `test/test.html` manually after compiling.
|
|
1063
|
+
|
|
959
1064
|
See [`test/TEST_README.md`](test/TEST_README.md) for detailed testing instructions.
|
|
960
1065
|
|
|
961
1066
|
<!-- ## � Linking NPM Package to GitHub Packages
|
package/index.scss
CHANGED
|
@@ -1,72 +1,98 @@
|
|
|
1
|
-
// Responsive Scale Mixins v2.0
|
|
1
|
+
// Responsive Scale Mixins v2.2.0
|
|
2
2
|
// A powerful SCSS mixin system for creating perfectly responsive designs
|
|
3
|
+
// with universal browser compatibility and static fallbacks
|
|
3
4
|
// Single-file distribution for maximum compatibility
|
|
4
5
|
|
|
6
|
+
@use "sass:math";
|
|
5
7
|
@use "sass:string";
|
|
6
8
|
@use "sass:meta";
|
|
7
9
|
@use "sass:list";
|
|
8
10
|
|
|
11
|
+
$rsm-fallback-enabled: true !default;
|
|
12
|
+
$rsm-desktop-width: 1920px !default;
|
|
13
|
+
$rsm-tablet-width: 768px !default;
|
|
14
|
+
$rsm-mobile-width: 390px !default;
|
|
15
|
+
|
|
9
16
|
/* Responsive Scale Variables Mixin
|
|
10
17
|
* Include this mixin in your root element to define the scaling factors.
|
|
11
18
|
* Adjust the design widths to match your design system breakpoints.
|
|
19
|
+
*
|
|
20
|
+
* v2.2.0: Now includes fallback generation for browsers without CSS variable support
|
|
12
21
|
*/
|
|
13
22
|
|
|
14
23
|
@mixin responsive-scale-variables(
|
|
15
24
|
$desktop-width: 1920px,
|
|
16
25
|
$tablet-width: 768px,
|
|
17
|
-
$mobile-width: 390px
|
|
26
|
+
$mobile-width: 390px,
|
|
27
|
+
$enable-fallback: true
|
|
18
28
|
) {
|
|
29
|
+
$rsm-fallback-enabled: $enable-fallback !global;
|
|
30
|
+
$rsm-desktop-width: $desktop-width !global;
|
|
31
|
+
$rsm-tablet-width: $tablet-width !global;
|
|
32
|
+
$rsm-mobile-width: $mobile-width !global;
|
|
19
33
|
// Design widths for direct calc expressions
|
|
20
34
|
--desktop-width: #{$desktop-width};
|
|
21
35
|
--tablet-width: #{$tablet-width};
|
|
22
36
|
--mobile-width: #{$mobile-width};
|
|
23
37
|
|
|
24
38
|
// Desktop scale factor (generic - unit is appended in calc expressions)
|
|
25
|
-
--computed-scale-factor:
|
|
39
|
+
--computed-scale-factor: (100vw / #{$desktop-width});
|
|
26
40
|
|
|
27
41
|
// Tablet scale factor (generic - unit is appended in calc expressions)
|
|
28
|
-
--computed-tablet-scale-factor:
|
|
42
|
+
--computed-tablet-scale-factor: (100vw / #{$tablet-width});
|
|
29
43
|
|
|
30
44
|
// Mobile scale factor (generic - unit is appended in calc expressions)
|
|
31
|
-
--computed-mobile-scale-factor:
|
|
45
|
+
--computed-mobile-scale-factor: (100vw / #{$mobile-width});
|
|
32
46
|
|
|
33
47
|
// Tablet proportion scale factor for interpolation between mobile and desktop values
|
|
34
|
-
--tablet-proportion-scale-factor:
|
|
48
|
+
--tablet-proportion-scale-factor: (
|
|
35
49
|
(100vw - #{$mobile-width}) / (#{$desktop-width} - #{$mobile-width})
|
|
36
50
|
);
|
|
51
|
+
|
|
52
|
+
// v2.2.0: Store original design widths as strings for fallback calculation
|
|
53
|
+
--rsm-desktop-width-value: #{strip-units($desktop-width)};
|
|
54
|
+
--rsm-tablet-width-value: #{strip-units($tablet-width)};
|
|
55
|
+
--rsm-mobile-width-value: #{strip-units($mobile-width)};
|
|
56
|
+
--rsm-fallback-enabled: #{if(sass($enable-fallback): 1; else: 0)};
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/* Utility function to strip units from values */
|
|
60
|
+
@function strip-units($value) {
|
|
61
|
+
@return math.div($value, $value * 0 + 1);
|
|
37
62
|
}
|
|
38
63
|
|
|
39
64
|
/* Responsive Scale Mixins
|
|
40
65
|
* Core scaling functionality with support for all CSS units
|
|
66
|
+
* v2.2.0: Generates both modern calc() AND static fallback values
|
|
41
67
|
*/
|
|
42
68
|
|
|
43
|
-
@function scaled-value($val, $
|
|
44
|
-
@
|
|
45
|
-
@return calc(100vw / var(--desktop-width) * #{$val}#{$unit});
|
|
46
|
-
} @else if $scale-var == "--computed-tablet-scale-factor" {
|
|
47
|
-
@return calc(100vw / var(--tablet-width) * #{$val}#{$unit});
|
|
48
|
-
} @else if $scale-var == "--computed-mobile-scale-factor" {
|
|
49
|
-
@return calc(100vw / var(--mobile-width) * #{$val}#{$unit});
|
|
50
|
-
} @else {
|
|
51
|
-
@return calc(var(#{$scale-var}) * #{$val}#{$unit});
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
@function get-scale-factor($unit) {
|
|
56
|
-
// Use generic scale factor - unit is appended in calc expressions
|
|
57
|
-
@return string.unquote("--computed-scale-factor");
|
|
69
|
+
@function scaled-value($val, $width, $unit: px) {
|
|
70
|
+
@return calc((100vw / #{$width}) * #{$val}#{$unit});
|
|
58
71
|
}
|
|
59
72
|
|
|
60
|
-
@function
|
|
61
|
-
|
|
62
|
-
|
|
73
|
+
@function tablet-interpolation($desktop-value, $mobile-value, $unit) {
|
|
74
|
+
@return calc(
|
|
75
|
+
(100vw / #{$rsm-tablet-width}) *
|
|
76
|
+
(
|
|
77
|
+
#{$mobile-value}#{$unit} +
|
|
78
|
+
(
|
|
79
|
+
(100vw - #{$rsm-mobile-width}) /
|
|
80
|
+
(#{$rsm-desktop-width} - #{$rsm-mobile-width})
|
|
81
|
+
) *
|
|
82
|
+
(#{$desktop-value}#{$unit} - #{$mobile-value}#{$unit})
|
|
83
|
+
)
|
|
84
|
+
);
|
|
63
85
|
}
|
|
64
86
|
|
|
65
|
-
@function
|
|
66
|
-
|
|
67
|
-
@return string.unquote("--computed-mobile-scale-factor");
|
|
87
|
+
@function mobile-scale-expression($mobile-value, $unit) {
|
|
88
|
+
@return calc((100vw / #{$rsm-mobile-width}) * #{$mobile-value}#{$unit});
|
|
68
89
|
}
|
|
69
90
|
|
|
91
|
+
/* v2.2.0: Main responsive scale mixin with fallback support
|
|
92
|
+
* Generates two CSS declarations:
|
|
93
|
+
* 1. Static fallback value for unsupported browsers
|
|
94
|
+
* 2. Modern calc() expression for modern browsers
|
|
95
|
+
*/
|
|
70
96
|
@mixin responsive-scale(
|
|
71
97
|
$property,
|
|
72
98
|
$desktop-value,
|
|
@@ -75,70 +101,125 @@
|
|
|
75
101
|
$is-percentage: false,
|
|
76
102
|
$desktop-relative: null,
|
|
77
103
|
$mobile-relative: null,
|
|
78
|
-
$important: null
|
|
104
|
+
$important: null,
|
|
105
|
+
$enable-fallback: null
|
|
79
106
|
) {
|
|
80
|
-
$
|
|
107
|
+
@if $enable-fallback == null {
|
|
108
|
+
$enable-fallback: $rsm-fallback-enabled;
|
|
109
|
+
}
|
|
81
110
|
|
|
82
111
|
// If it's a percentage-based value (like letter-spacing), scale it based on the relative property
|
|
83
112
|
@if $is-percentage == true {
|
|
84
113
|
@if $desktop-relative != null {
|
|
85
|
-
$
|
|
86
|
-
#{$desktop-value} /
|
|
87
|
-
|
|
88
|
-
|
|
114
|
+
@if $enable-fallback {
|
|
115
|
+
$desktop-fallback: calc(#{$desktop-value} / 100 * #{$desktop-relative});
|
|
116
|
+
#{$property}: #{$desktop-fallback}#{$unit}#{$important};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
$modern-desktop: calc(
|
|
120
|
+
#{$desktop-value} / 100 * #{$desktop-relative}#{$unit}
|
|
89
121
|
);
|
|
90
|
-
#{$property}: #{$
|
|
122
|
+
@supports (#{$property}: #{$modern-desktop}) {
|
|
123
|
+
#{$property}: #{$modern-desktop}#{$important};
|
|
124
|
+
}
|
|
91
125
|
}
|
|
92
126
|
|
|
93
127
|
@media screen and (min-width: 768px) and (max-width: 991px) {
|
|
94
|
-
$tablet-scale-factor: get-tablet-scale-factor($unit);
|
|
95
128
|
@if $desktop-relative != null and $mobile-relative != null {
|
|
96
|
-
$
|
|
129
|
+
@if $enable-fallback {
|
|
130
|
+
$tablet-fallback: calc(
|
|
131
|
+
#{$mobile-value} /
|
|
132
|
+
100 *
|
|
133
|
+
(
|
|
134
|
+
#{$mobile-relative}#{$unit} +
|
|
135
|
+
0.5 *
|
|
136
|
+
(#{$desktop-relative}#{$unit} - #{$mobile-relative}#{$unit})
|
|
137
|
+
)
|
|
138
|
+
);
|
|
139
|
+
#{$property}: #{$tablet-fallback}#{$important};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
$modern-tablet: calc(
|
|
97
143
|
#{$mobile-value} /
|
|
98
144
|
100 *
|
|
99
145
|
(
|
|
100
|
-
|
|
146
|
+
#{$mobile-relative}#{$unit} +
|
|
101
147
|
(
|
|
102
|
-
#{$mobile-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
)
|
|
148
|
+
(100vw - #{$rsm-mobile-width}) /
|
|
149
|
+
(#{$rsm-desktop-width} - #{$rsm-mobile-width})
|
|
150
|
+
) *
|
|
151
|
+
(#{$desktop-relative}#{$unit} - #{$mobile-relative}#{$unit})
|
|
106
152
|
)
|
|
107
153
|
);
|
|
108
|
-
#{$property}: #{$
|
|
154
|
+
@supports (#{$property}: #{$modern-tablet}) {
|
|
155
|
+
#{$property}: #{$modern-tablet}#{$important};
|
|
156
|
+
}
|
|
109
157
|
}
|
|
110
158
|
}
|
|
111
159
|
|
|
112
160
|
@media screen and (max-width: 767px) {
|
|
113
|
-
$mobile-scale-factor: get-mobile-scale-factor($unit);
|
|
114
161
|
@if $mobile-relative != null {
|
|
115
|
-
$
|
|
116
|
-
#{$mobile-value} /
|
|
117
|
-
|
|
118
|
-
|
|
162
|
+
@if $enable-fallback {
|
|
163
|
+
$mobile-fallback: calc(#{$mobile-value} / 100 * #{$mobile-relative});
|
|
164
|
+
#{$property}: #{$mobile-fallback}#{$unit}#{$important};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
$modern-mobile: calc(
|
|
168
|
+
#{$mobile-value} / 100 * #{$mobile-relative}#{$unit}
|
|
119
169
|
);
|
|
120
|
-
#{$property}: #{$
|
|
170
|
+
@supports (#{$property}: #{$modern-mobile}) {
|
|
171
|
+
#{$property}: #{$modern-mobile}#{$important};
|
|
172
|
+
}
|
|
121
173
|
}
|
|
122
174
|
}
|
|
123
175
|
} @else {
|
|
124
176
|
// Regular absolute scaling
|
|
125
177
|
@if meta.type-of($desktop-value) == list {
|
|
178
|
+
// v2.2.0: Fallback for list values (padding: 20 40)
|
|
179
|
+
@if $enable-fallback {
|
|
180
|
+
$desktop-fallback: ();
|
|
181
|
+
@each $val in $desktop-value {
|
|
182
|
+
$desktop-fallback: list.append($desktop-fallback, #{$val}#{$unit});
|
|
183
|
+
}
|
|
184
|
+
#{$property}: #{$desktop-fallback}#{$important};
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// Modern calc expressions
|
|
126
188
|
$desktop-scaled: ();
|
|
127
189
|
@each $val in $desktop-value {
|
|
128
190
|
$desktop-scaled: list.append(
|
|
129
191
|
$desktop-scaled,
|
|
130
|
-
scaled-value($val, $
|
|
192
|
+
scaled-value($val, $rsm-desktop-width, $unit)
|
|
131
193
|
);
|
|
132
194
|
}
|
|
133
195
|
#{$property}: #{$desktop-scaled}#{$important};
|
|
134
196
|
} @else {
|
|
135
|
-
|
|
136
|
-
|
|
197
|
+
// v2.2.0: Fallback for single values
|
|
198
|
+
@if $enable-fallback {
|
|
199
|
+
#{$property}: #{$desktop-value}#{$unit}#{$important};
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// Modern calc expression (wrapped in @supports so Firefox will fallback)
|
|
203
|
+
$modern-desktop: scaled-value($desktop-value, $rsm-desktop-width, $unit);
|
|
204
|
+
@supports (#{$property}: #{$modern-desktop}) {
|
|
205
|
+
#{$property}: #{$modern-desktop}#{$important};
|
|
206
|
+
}
|
|
137
207
|
}
|
|
138
208
|
|
|
139
209
|
@media screen and (min-width: 768px) and (max-width: 991px) {
|
|
140
210
|
$tablet-scale-factor: get-tablet-scale-factor($unit);
|
|
141
211
|
@if meta.type-of($desktop-value) == list {
|
|
212
|
+
// v2.2.0: Fallback for tablet list
|
|
213
|
+
@if $enable-fallback {
|
|
214
|
+
$tablet-fallback: ();
|
|
215
|
+
@for $i from 1 through list.length($desktop-value) {
|
|
216
|
+
$m-val: list.nth($mobile-value, $i);
|
|
217
|
+
$tablet-fallback: list.append($tablet-fallback, #{$m-val}#{$unit});
|
|
218
|
+
}
|
|
219
|
+
#{$property}: #{$tablet-fallback}#{$important};
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Modern expression
|
|
142
223
|
$tablet-scaled: ();
|
|
143
224
|
@for $i from 1 through list.length($desktop-value) {
|
|
144
225
|
$d-val: list.nth($desktop-value, $i);
|
|
@@ -157,33 +238,82 @@
|
|
|
157
238
|
}
|
|
158
239
|
#{$property}: #{$tablet-scaled}#{$important};
|
|
159
240
|
} @else {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
241
|
+
// v2.2.0: Fallback for tablet single value
|
|
242
|
+
@if $enable-fallback {
|
|
243
|
+
#{$property}: #{$mobile-value}#{$unit}#{$important};
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Modern expression (wrapped in @supports so Firefox will fallback)
|
|
247
|
+
$modern-tablet: tablet-interpolation(
|
|
248
|
+
$desktop-value,
|
|
249
|
+
$mobile-value,
|
|
250
|
+
$unit
|
|
167
251
|
);
|
|
168
|
-
#{$property}: #{$
|
|
252
|
+
@supports (#{$property}: #{$modern-tablet}) {
|
|
253
|
+
#{$property}: #{$modern-tablet}#{$important};
|
|
254
|
+
}
|
|
169
255
|
}
|
|
170
256
|
}
|
|
171
257
|
|
|
172
258
|
@media screen and (max-width: 767px) {
|
|
173
259
|
$mobile-scale-factor: get-mobile-scale-factor($unit);
|
|
174
260
|
@if meta.type-of($mobile-value) == list {
|
|
261
|
+
// v2.2.0: Fallback for mobile list
|
|
262
|
+
@if $enable-fallback {
|
|
263
|
+
$mobile-fallback: ();
|
|
264
|
+
@each $val in $mobile-value {
|
|
265
|
+
$mobile-fallback: list.append($mobile-fallback, #{$val}#{$unit});
|
|
266
|
+
}
|
|
267
|
+
#{$property}: #{$mobile-fallback}#{$important};
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
// Modern expression
|
|
175
271
|
$mobile-scaled: ();
|
|
176
272
|
@each $val in $mobile-value {
|
|
177
273
|
$mobile-scaled: list.append(
|
|
178
274
|
$mobile-scaled,
|
|
179
|
-
scaled-value($val, $mobile-
|
|
275
|
+
scaled-value($val, $rsm-mobile-width, $unit)
|
|
180
276
|
);
|
|
181
277
|
}
|
|
182
278
|
#{$property}: #{$mobile-scaled}#{$important};
|
|
183
279
|
} @else {
|
|
184
|
-
|
|
185
|
-
|
|
280
|
+
// v2.2.0: Fallback for mobile single value
|
|
281
|
+
@if $enable-fallback {
|
|
282
|
+
#{$property}: #{$mobile-value}#{$unit}#{$important};
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
// Modern expression (wrapped in @supports so Firefox will fallback)
|
|
286
|
+
$modern-mobile: mobile-scale-expression($mobile-value, $unit);
|
|
287
|
+
@supports (#{$property}: #{$modern-mobile}) {
|
|
288
|
+
#{$property}: #{$modern-mobile}#{$important};
|
|
289
|
+
}
|
|
186
290
|
}
|
|
187
291
|
}
|
|
188
292
|
}
|
|
189
293
|
}
|
|
294
|
+
|
|
295
|
+
/* v2.2.0: New mixin to disable fallback for specific declarations
|
|
296
|
+
* Useful when you want only modern browsers to receive a style
|
|
297
|
+
*/
|
|
298
|
+
@mixin responsive-scale-no-fallback(
|
|
299
|
+
$property,
|
|
300
|
+
$desktop-value,
|
|
301
|
+
$mobile-value,
|
|
302
|
+
$unit: px,
|
|
303
|
+
$is-percentage: false,
|
|
304
|
+
$desktop-relative: null,
|
|
305
|
+
$mobile-relative: null,
|
|
306
|
+
$important: null
|
|
307
|
+
) {
|
|
308
|
+
@include responsive-scale(
|
|
309
|
+
$property,
|
|
310
|
+
$desktop-value,
|
|
311
|
+
$mobile-value,
|
|
312
|
+
$unit,
|
|
313
|
+
$is-percentage,
|
|
314
|
+
$desktop-relative,
|
|
315
|
+
$mobile-relative,
|
|
316
|
+
$important,
|
|
317
|
+
false
|
|
318
|
+
);
|
|
319
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "responsive-scale-mixins",
|
|
3
|
-
"version": "2.0
|
|
4
|
-
"description": "🎨 Revolutionary SCSS mixins for perfect responsive design. Supports ALL CSS units (px, rem, em, vw, vh, %, etc.) with pixel-perfect scaling. Zero manual calculations - just flawless responsive typography, spacing, and dimensions across desktop, tablet, and mobile. Single-file distribution for maximum compatibility. Framework-agnostic,
|
|
3
|
+
"version": "2.2.0",
|
|
4
|
+
"description": "🎨 Revolutionary SCSS mixins for perfect responsive design with universal browser compatibility. Supports ALL CSS units (px, rem, em, vw, vh, %, etc.) with pixel-perfect scaling and automatic fallbacks for browsers without CSS variable support. Zero manual calculations - just flawless responsive typography, spacing, and dimensions across desktop, tablet, and mobile. Single-file distribution for maximum compatibility. Framework-agnostic, works everywhere including Firefox Mobile and old Android browsers.",
|
|
5
5
|
"main": "index.scss",
|
|
6
6
|
"style": "index.scss",
|
|
7
7
|
"sass": "index.scss",
|