autoprefixer 9.4.10 → 9.6.1
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 +17 -0
- package/README.md +210 -225
- package/data/prefixes.js +14 -2
- package/lib/autoprefixer.js +19 -3
- package/lib/hacks/backdrop-filter.js +37 -0
- package/lib/hacks/background-clip.js +1 -5
- package/lib/hacks/border-radius.js +2 -5
- package/lib/hacks/cross-fade.js +2 -2
- package/lib/hacks/flex.js +2 -2
- package/lib/hacks/gradient.js +6 -6
- package/lib/hacks/mask-composite.js +106 -0
- package/lib/prefixer.js +4 -6
- package/lib/prefixes.js +4 -2
- package/lib/processor.js +10 -0
- package/lib/resolution.js +4 -4
- package/lib/supports.js +4 -4
- package/lib/value.js +2 -2
- package/package.json +9 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
|
3
3
|
|
|
4
|
+
## 9.6.1
|
|
5
|
+
* Fix `-webkit-line-clamp` truncating multi-line text support.
|
|
6
|
+
|
|
7
|
+
## 9.6 “Nunc id vides, nunc ne vides”
|
|
8
|
+
* Show warning about Browserslist config on `browser` option.
|
|
9
|
+
* Add warning-less `overrideBrowserslist` option.
|
|
10
|
+
* Add `text-orientation` support.
|
|
11
|
+
* Add `min-resolution: 2x` alias support.
|
|
12
|
+
* Add `.github/CONTRIBUTING.md` (by Juan Martin Marco).
|
|
13
|
+
|
|
14
|
+
## 9.5.1
|
|
15
|
+
* Fix `backdrop-filter` for Edge (by Oleh Aloshkin).
|
|
16
|
+
* Fix `min-resolution` media query support in Firefox < 16.
|
|
17
|
+
|
|
18
|
+
## 9.5 “Draco dormiens nunquam titillandus”
|
|
19
|
+
* Add `mask-composite` support (by Semen Levenson).
|
|
20
|
+
|
|
4
21
|
## 9.4.10
|
|
5
22
|
* Add warning for named Grid rows.
|
|
6
23
|
|
package/README.md
CHANGED
|
@@ -14,6 +14,15 @@ entirely):
|
|
|
14
14
|
::placeholder {
|
|
15
15
|
color: gray;
|
|
16
16
|
}
|
|
17
|
+
|
|
18
|
+
.image {
|
|
19
|
+
background-image: url(image@1x.png);
|
|
20
|
+
}
|
|
21
|
+
@media (min-resolution: 2dppx) {
|
|
22
|
+
.image {
|
|
23
|
+
background-image: url(image@2x.png);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
17
26
|
```
|
|
18
27
|
|
|
19
28
|
Autoprefixer will use the data based on current browser popularity and property
|
|
@@ -24,6 +33,9 @@ of Autoprefixer.
|
|
|
24
33
|
::-webkit-input-placeholder {
|
|
25
34
|
color: gray;
|
|
26
35
|
}
|
|
36
|
+
::-moz-placeholder {
|
|
37
|
+
color: gray;
|
|
38
|
+
}
|
|
27
39
|
:-ms-input-placeholder {
|
|
28
40
|
color: gray;
|
|
29
41
|
}
|
|
@@ -33,6 +45,17 @@ of Autoprefixer.
|
|
|
33
45
|
::placeholder {
|
|
34
46
|
color: gray;
|
|
35
47
|
}
|
|
48
|
+
|
|
49
|
+
.image {
|
|
50
|
+
background-image: url(image@1x.png);
|
|
51
|
+
}
|
|
52
|
+
@media (-webkit-min-device-pixel-ratio: 2),
|
|
53
|
+
(-o-min-device-pixel-ratio: 2/1),
|
|
54
|
+
(min-resolution: 2dppx) {
|
|
55
|
+
.image {
|
|
56
|
+
background-image: url(image@2x.png);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
36
59
|
```
|
|
37
60
|
|
|
38
61
|
Twitter account for news and releases: [@autoprefixer].
|
|
@@ -55,8 +78,6 @@ Twitter account for news and releases: [@autoprefixer].
|
|
|
55
78
|
- [Browsers](#browsers)
|
|
56
79
|
- [FAQ](#faq)
|
|
57
80
|
- [Does Autoprefixer polyfill Grid Layout for IE?](#does-autoprefixer-polyfill-grid-layout-for-ie)
|
|
58
|
-
- [No prefixes in production](#no-prefixes-in-production)
|
|
59
|
-
- [What is the unprefixed version of `-webkit-min-device-pixel-ratio`?](#what-is-the-unprefixed-version-of--webkit-min-device-pixel-ratio)
|
|
60
81
|
- [Does it add polyfills?](#does-it-add-polyfills)
|
|
61
82
|
- [Why doesn’t Autoprefixer add prefixes to `border-radius`?](#why-doesnt-autoprefixer-add-prefixes-to-border-radius)
|
|
62
83
|
- [Why does Autoprefixer use unprefixed properties in `@-webkit-keyframes`?](#why-does-autoprefixer-use-unprefixed-properties-in--webkit-keyframes)
|
|
@@ -123,25 +144,25 @@ to use Autoprefixer is by using `grid-template` or `grid-template-areas`.
|
|
|
123
144
|
|
|
124
145
|
```css
|
|
125
146
|
.page {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
147
|
+
display: grid;
|
|
148
|
+
grid-gap: 33px;
|
|
149
|
+
grid-template:
|
|
150
|
+
"head head head" 1fr
|
|
151
|
+
"nav main main" minmax(100px, 1fr)
|
|
152
|
+
"nav foot foot" 2fr /
|
|
153
|
+
1fr 100px 1fr;
|
|
133
154
|
}
|
|
134
155
|
.page__head {
|
|
135
|
-
|
|
156
|
+
grid-area: head;
|
|
136
157
|
}
|
|
137
158
|
.page__nav {
|
|
138
|
-
|
|
159
|
+
grid-area: nav;
|
|
139
160
|
}
|
|
140
161
|
.page__main {
|
|
141
|
-
|
|
162
|
+
grid-area: main;
|
|
142
163
|
}
|
|
143
164
|
.page__footer {
|
|
144
|
-
|
|
165
|
+
grid-area: foot;
|
|
145
166
|
}
|
|
146
167
|
```
|
|
147
168
|
|
|
@@ -157,44 +178,6 @@ See also:
|
|
|
157
178
|
[`postcss-gap-properties`]: https://github.com/jonathantneal/postcss-gap-properties
|
|
158
179
|
[`postcss-grid-kiss`]: https://github.com/sylvainpolletvillard/postcss-grid-kiss
|
|
159
180
|
|
|
160
|
-
### No prefixes in production
|
|
161
|
-
|
|
162
|
-
Many other tools contain Autoprefixer. For example, webpack uses Autoprefixer
|
|
163
|
-
to minify CSS by cleaning unnecessary prefixes.
|
|
164
|
-
|
|
165
|
-
If you pass your browsers to Autoprefixer using its `browsers` option, the other
|
|
166
|
-
tools will use their own config, leading webpack to remove the prefixes that
|
|
167
|
-
the first Autoprefixer added.
|
|
168
|
-
|
|
169
|
-
To avoid this, ensure you use either the [browserslist config file] or
|
|
170
|
-
`browsers` key in your `package.json`, so that all tools (Autoprefixer,
|
|
171
|
-
cssnano, doiuse, cssnext, etc) use the same browsers list.
|
|
172
|
-
|
|
173
|
-
[browserslist config file]: https://github.com/ai/browserslist#config-file
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
### What is the unprefixed version of `-webkit-min-device-pixel-ratio`?
|
|
177
|
-
|
|
178
|
-
```css
|
|
179
|
-
@media (min-resolution: 2dppx) {
|
|
180
|
-
.image {
|
|
181
|
-
background-image: url(image@2x.png);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
Will be compiled to:
|
|
187
|
-
|
|
188
|
-
```css
|
|
189
|
-
@media (-webkit-min-device-pixel-ratio: 2),
|
|
190
|
-
(-o-min-device-pixel-ratio: 2/1),
|
|
191
|
-
(min-resolution: 2dppx) {
|
|
192
|
-
.image {
|
|
193
|
-
background-image: url(image@2x.png);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
```
|
|
197
|
-
|
|
198
181
|
|
|
199
182
|
### Does it add polyfills?
|
|
200
183
|
|
|
@@ -247,8 +230,7 @@ Use [postcss-unprefix] before Autoprefixer.
|
|
|
247
230
|
### Does Autoprefixer add `-epub-` prefix?
|
|
248
231
|
|
|
249
232
|
No, Autoprefixer works only with browsers prefixes from Can I Use.
|
|
250
|
-
But you can use [postcss-epub]
|
|
251
|
-
for prefixing ePub3 properties.
|
|
233
|
+
But you can use [postcss-epub] for prefixing ePub3 properties.
|
|
252
234
|
|
|
253
235
|
[postcss-epub]: https://github.com/Rycochet/postcss-epub
|
|
254
236
|
|
|
@@ -269,17 +251,17 @@ future-proof. You can use [postcss-font-family-system-ui] to transform
|
|
|
269
251
|
In Gulp you can use [gulp-postcss] with `autoprefixer` npm package.
|
|
270
252
|
|
|
271
253
|
```js
|
|
272
|
-
gulp.task('autoprefixer',
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
})
|
|
254
|
+
gulp.task('autoprefixer', () => {
|
|
255
|
+
const autoprefixer = require('autoprefixer')
|
|
256
|
+
const sourcemaps = require('gulp-sourcemaps')
|
|
257
|
+
const postcss = require('gulp-postcss')
|
|
258
|
+
|
|
259
|
+
return gulp.src('./src/*.css')
|
|
260
|
+
.pipe(sourcemaps.init())
|
|
261
|
+
.pipe(postcss([ autoprefixer() ]))
|
|
262
|
+
.pipe(sourcemaps.write('.'))
|
|
263
|
+
.pipe(gulp.dest('./dest'))
|
|
264
|
+
})
|
|
283
265
|
```
|
|
284
266
|
|
|
285
267
|
With `gulp-postcss` you also can combine Autoprefixer
|
|
@@ -296,14 +278,14 @@ and [other PostCSS plugins].
|
|
|
296
278
|
|
|
297
279
|
```js
|
|
298
280
|
module.exports = {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
281
|
+
module: {
|
|
282
|
+
rules: [
|
|
283
|
+
{
|
|
284
|
+
test: /\.css$/,
|
|
285
|
+
use: ["style-loader", "css-loader", "postcss-loader"]
|
|
286
|
+
}
|
|
287
|
+
]
|
|
288
|
+
}
|
|
307
289
|
}
|
|
308
290
|
```
|
|
309
291
|
|
|
@@ -414,15 +396,15 @@ You can use Autoprefixer with [PostCSS] in your Node.js application
|
|
|
414
396
|
or if you want to develop an Autoprefixer plugin for a new environment.
|
|
415
397
|
|
|
416
398
|
```js
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
postcss([ autoprefixer ]).process(css).then(
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
})
|
|
399
|
+
const autoprefixer = require('autoprefixer')
|
|
400
|
+
const postcss = require('postcss')
|
|
401
|
+
|
|
402
|
+
postcss([ autoprefixer ]).process(css).then(result => {
|
|
403
|
+
result.warnings().forEach(warn => {
|
|
404
|
+
console.warn(warn.toString())
|
|
405
|
+
})
|
|
406
|
+
console.log(result.css)
|
|
407
|
+
})
|
|
426
408
|
```
|
|
427
409
|
|
|
428
410
|
There is also a [standalone build] for the browser or for a non-Node.js runtime.
|
|
@@ -467,9 +449,9 @@ problems in your CSS:
|
|
|
467
449
|
You can get warnings from `result.warnings()`:
|
|
468
450
|
|
|
469
451
|
```js
|
|
470
|
-
result.warnings().forEach(
|
|
471
|
-
|
|
472
|
-
})
|
|
452
|
+
result.warnings().forEach(warn => {
|
|
453
|
+
console.warn(warn.toString())
|
|
454
|
+
})
|
|
473
455
|
```
|
|
474
456
|
|
|
475
457
|
Every Autoprefixer runner should display these warnings.
|
|
@@ -487,8 +469,8 @@ after the unprefixed one.
|
|
|
487
469
|
|
|
488
470
|
```css
|
|
489
471
|
a {
|
|
490
|
-
|
|
491
|
-
|
|
472
|
+
transform: scale(0.5);
|
|
473
|
+
-moz-transform: scale(0.6);
|
|
492
474
|
}
|
|
493
475
|
```
|
|
494
476
|
|
|
@@ -512,7 +494,7 @@ You can use these plugin options to control some of Autoprefixer’s features.
|
|
|
512
494
|
You should set them inside the plugin like so:
|
|
513
495
|
|
|
514
496
|
```js
|
|
515
|
-
autoprefixer({ grid:
|
|
497
|
+
autoprefixer({ grid: 'autoplace' })
|
|
516
498
|
```
|
|
517
499
|
|
|
518
500
|
|
|
@@ -523,18 +505,18 @@ you can use control comments to disable Autoprefixer.
|
|
|
523
505
|
|
|
524
506
|
```css
|
|
525
507
|
.a {
|
|
526
|
-
|
|
508
|
+
transition: 1s; /* will be prefixed */
|
|
527
509
|
}
|
|
528
510
|
|
|
529
511
|
.b {
|
|
530
|
-
|
|
531
|
-
|
|
512
|
+
/* autoprefixer: off */
|
|
513
|
+
transition: 1s; /* will not be prefixed */
|
|
532
514
|
}
|
|
533
515
|
|
|
534
516
|
.c {
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
517
|
+
/* autoprefixer: ignore next */
|
|
518
|
+
transition: 1s; /* will not be prefixed */
|
|
519
|
+
mask: url(image.png); /* will be prefixed */
|
|
538
520
|
}
|
|
539
521
|
```
|
|
540
522
|
|
|
@@ -546,20 +528,20 @@ There are three types of control comments:
|
|
|
546
528
|
or next rule selector or at-rule parameters (but not rule/at‑rule body).
|
|
547
529
|
* `/* autoprefixer grid: (autoplace|no-autoplace|off) */`: control how Autoprefixer handles
|
|
548
530
|
grid translations for the whole block:
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
531
|
+
* `autoplace`: enable grid translations with autoplacement support.
|
|
532
|
+
* `no-autoplace`: enable grid translations with autoplacement
|
|
533
|
+
support *disabled* (alias for deprecated value `on`).
|
|
534
|
+
* `off`: disable all grid translations.
|
|
553
535
|
|
|
554
536
|
You can also use comments recursively:
|
|
555
537
|
|
|
556
538
|
```css
|
|
557
539
|
/* autoprefixer: off */
|
|
558
540
|
@supports (transition: all) {
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
541
|
+
/* autoprefixer: on */
|
|
542
|
+
a {
|
|
543
|
+
/* autoprefixer: off */
|
|
544
|
+
}
|
|
563
545
|
}
|
|
564
546
|
```
|
|
565
547
|
|
|
@@ -570,10 +552,10 @@ block twice:
|
|
|
570
552
|
/* How not to use block level control comments */
|
|
571
553
|
|
|
572
554
|
.do-not-do-this {
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
555
|
+
/* autoprefixer: off */
|
|
556
|
+
transition: 1s;
|
|
557
|
+
/* autoprefixer: on */
|
|
558
|
+
transform: rotate(20deg);
|
|
577
559
|
}
|
|
578
560
|
```
|
|
579
561
|
|
|
@@ -613,13 +595,13 @@ Available options are:
|
|
|
613
595
|
(alias for the deprecated `true` value)
|
|
614
596
|
* `stats` (object): custom [usage statistics] for `> 10% in my stats`
|
|
615
597
|
browsers query.
|
|
616
|
-
* `
|
|
617
|
-
|
|
598
|
+
* `overrideBrowserslist` (array): list of queries for target browsers.
|
|
599
|
+
Try to not use it. The best practice is to use `.browserslistrc` config
|
|
618
600
|
or `browserslist` key in `package.json` to share target browsers
|
|
619
601
|
with Babel, ESLint and Stylelint. See [Browserslist docs]
|
|
620
602
|
for available queries and default value.
|
|
621
603
|
* `ignoreUnknownVersions` (boolean): do not raise error on unknown browser
|
|
622
|
-
version in Browserslist config
|
|
604
|
+
version in Browserslist config. Default is `false`.
|
|
623
605
|
|
|
624
606
|
Plugin object has `info()` method for debugging purpose.
|
|
625
607
|
|
|
@@ -643,10 +625,10 @@ Autoprefixer supports autoplacement by using `nth-child` CSS selectors. It creat
|
|
|
643
625
|
/* autoprefixer grid: autoplace */
|
|
644
626
|
|
|
645
627
|
.autoplacement-example {
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
628
|
+
display: grid;
|
|
629
|
+
grid-template-columns: 1fr 1fr;
|
|
630
|
+
grid-template-rows: auto auto;
|
|
631
|
+
grid-gap: 20px;
|
|
650
632
|
}
|
|
651
633
|
```
|
|
652
634
|
|
|
@@ -656,33 +638,33 @@ Autoprefixer supports autoplacement by using `nth-child` CSS selectors. It creat
|
|
|
656
638
|
/* autoprefixer grid: autoplace */
|
|
657
639
|
|
|
658
640
|
.autoplacement-example {
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
641
|
+
display: -ms-grid;
|
|
642
|
+
display: grid;
|
|
643
|
+
-ms-grid-columns: 1fr 20px 1fr;
|
|
644
|
+
grid-template-columns: 1fr 1fr;
|
|
645
|
+
-ms-grid-rows: auto 20px auto;
|
|
646
|
+
grid-template-rows: auto auto;
|
|
647
|
+
grid-gap: 20px;
|
|
666
648
|
}
|
|
667
649
|
|
|
668
650
|
.autoplacement-example > *:nth-child(1) {
|
|
669
|
-
|
|
670
|
-
|
|
651
|
+
-ms-grid-row: 1;
|
|
652
|
+
-ms-grid-column: 1;
|
|
671
653
|
}
|
|
672
654
|
|
|
673
655
|
.autoplacement-example > *:nth-child(2) {
|
|
674
|
-
|
|
675
|
-
|
|
656
|
+
-ms-grid-row: 1;
|
|
657
|
+
-ms-grid-column: 3;
|
|
676
658
|
}
|
|
677
659
|
|
|
678
660
|
.autoplacement-example > *:nth-child(3) {
|
|
679
|
-
|
|
680
|
-
|
|
661
|
+
-ms-grid-row: 3;
|
|
662
|
+
-ms-grid-column: 1;
|
|
681
663
|
}
|
|
682
664
|
|
|
683
665
|
.autoplacement-example > *:nth-child(4) {
|
|
684
|
-
|
|
685
|
-
|
|
666
|
+
-ms-grid-row: 3;
|
|
667
|
+
-ms-grid-column: 3;
|
|
686
668
|
}
|
|
687
669
|
```
|
|
688
670
|
|
|
@@ -705,14 +687,14 @@ The following CSS will not work as expected with the autoplacement feature enabl
|
|
|
705
687
|
/* Unsafe CSS when Autoplacement is enabled */
|
|
706
688
|
|
|
707
689
|
.grid-cell {
|
|
708
|
-
|
|
709
|
-
|
|
690
|
+
grid-column: 2;
|
|
691
|
+
grid-row: 2;
|
|
710
692
|
}
|
|
711
693
|
|
|
712
694
|
.grid {
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
695
|
+
display: grid;
|
|
696
|
+
grid-template-columns: repeat(3, 1fr);
|
|
697
|
+
grid-template-rows: repeat(3, 1fr);
|
|
716
698
|
}
|
|
717
699
|
```
|
|
718
700
|
|
|
@@ -722,14 +704,14 @@ Swapping the rules around will not fix the issue either:
|
|
|
722
704
|
/* Also unsafe to use this CSS */
|
|
723
705
|
|
|
724
706
|
.grid {
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
707
|
+
display: grid;
|
|
708
|
+
grid-template-columns: repeat(3, 1fr);
|
|
709
|
+
grid-template-rows: repeat(3, 1fr);
|
|
728
710
|
}
|
|
729
711
|
|
|
730
712
|
.grid-cell {
|
|
731
|
-
|
|
732
|
-
|
|
713
|
+
grid-column: 2;
|
|
714
|
+
grid-row: 2;
|
|
733
715
|
}
|
|
734
716
|
```
|
|
735
717
|
|
|
@@ -740,15 +722,15 @@ grid-declaration rule:
|
|
|
740
722
|
/* Disable autoplacement to fix the issue */
|
|
741
723
|
|
|
742
724
|
.grid {
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
725
|
+
/* autoprefixer grid: no-autoplace */
|
|
726
|
+
display: grid;
|
|
727
|
+
grid-template-columns: repeat(3, 1fr);
|
|
728
|
+
grid-template-rows: repeat(3, 1fr);
|
|
747
729
|
}
|
|
748
730
|
|
|
749
731
|
.grid-cell {
|
|
750
|
-
|
|
751
|
-
|
|
732
|
+
grid-column: 2;
|
|
733
|
+
grid-row: 2;
|
|
752
734
|
}
|
|
753
735
|
```
|
|
754
736
|
|
|
@@ -762,21 +744,21 @@ when needed. This method is far less likely to cause something on the site to br
|
|
|
762
744
|
|
|
763
745
|
/* Old code will function the same way it always has */
|
|
764
746
|
.old-grid {
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
747
|
+
display: grid;
|
|
748
|
+
grid-template-columns: repeat(3, 1fr);
|
|
749
|
+
grid-template-rows: repeat(3, 1fr);
|
|
768
750
|
}
|
|
769
751
|
.old-grid-cell {
|
|
770
|
-
|
|
771
|
-
|
|
752
|
+
grid-column: 2;
|
|
753
|
+
grid-row: 2;
|
|
772
754
|
}
|
|
773
755
|
|
|
774
756
|
/* Enable autoplacement when you want to use it in new code */
|
|
775
757
|
.new-autoplace-friendly-grid {
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
758
|
+
/* autoprefixer grid: autoplace */
|
|
759
|
+
display: grid;
|
|
760
|
+
grid-template-columns: repeat(3, 1fr);
|
|
761
|
+
grid-template-rows: repeat(3, auto);
|
|
780
762
|
}
|
|
781
763
|
```
|
|
782
764
|
|
|
@@ -795,14 +777,14 @@ so that Autoprefixer knows how many `nth-child` selectors to generate.
|
|
|
795
777
|
|
|
796
778
|
```css
|
|
797
779
|
.not-allowed {
|
|
798
|
-
|
|
799
|
-
|
|
780
|
+
display: grid;
|
|
781
|
+
grid-template-columns: repeat(3, 1fr);
|
|
800
782
|
}
|
|
801
783
|
|
|
802
784
|
.is-allowed {
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
785
|
+
display: grid;
|
|
786
|
+
grid-template-columns: repeat(3, 1fr);
|
|
787
|
+
grid-template-rows: repeat(10, auto);
|
|
806
788
|
}
|
|
807
789
|
```
|
|
808
790
|
|
|
@@ -815,8 +797,8 @@ so unfortunately this little snippet will _never_ be IE friendly.
|
|
|
815
797
|
|
|
816
798
|
```css
|
|
817
799
|
.grid {
|
|
818
|
-
|
|
819
|
-
|
|
800
|
+
/* This will never be IE friendly */
|
|
801
|
+
grid-template-columns: repeat(auto-fit, min-max(200px, 1fr))
|
|
820
802
|
}
|
|
821
803
|
```
|
|
822
804
|
|
|
@@ -830,27 +812,23 @@ autoplacement grid is planned for a future release.
|
|
|
830
812
|
|
|
831
813
|
```css
|
|
832
814
|
.autoplacement-grid {
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
815
|
+
display: grid;
|
|
816
|
+
grid-template-columns: repeat(3, 1fr);
|
|
817
|
+
grid-template-rows: repeat(3, auto);
|
|
836
818
|
}
|
|
837
819
|
|
|
838
|
-
/*
|
|
839
|
-
|
|
840
|
-
will break the layout in IE
|
|
841
|
-
*/
|
|
820
|
+
/* Grid cells placed inside the explicit grid
|
|
821
|
+
will break the layout in IE */
|
|
842
822
|
.not-permitted-grid-cell {
|
|
843
|
-
|
|
844
|
-
|
|
823
|
+
grid-column: 1;
|
|
824
|
+
grid-row: 1;
|
|
845
825
|
}
|
|
846
826
|
|
|
847
|
-
/*
|
|
848
|
-
|
|
849
|
-
explicit grid will work in IE
|
|
850
|
-
*/
|
|
827
|
+
/* Grid cells placed outside the
|
|
828
|
+
explicit grid will work in IE */
|
|
851
829
|
.permitted-grid-cell {
|
|
852
|
-
|
|
853
|
-
|
|
830
|
+
grid-column: 1 / span 2;
|
|
831
|
+
grid-row: 4;
|
|
854
832
|
}
|
|
855
833
|
```
|
|
856
834
|
|
|
@@ -859,25 +837,25 @@ If manual cell placement is required, we recommend using `grid-template` or
|
|
|
859
837
|
|
|
860
838
|
```css
|
|
861
839
|
.page {
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
840
|
+
display: grid;
|
|
841
|
+
grid-gap: 30px;
|
|
842
|
+
grid-template:
|
|
843
|
+
"head head"
|
|
844
|
+
"nav main" minmax(100px, 1fr)
|
|
845
|
+
"foot foot" /
|
|
846
|
+
200px 1fr;
|
|
869
847
|
}
|
|
870
848
|
.page__head {
|
|
871
|
-
|
|
849
|
+
grid-area: head;
|
|
872
850
|
}
|
|
873
851
|
.page__nav {
|
|
874
|
-
|
|
852
|
+
grid-area: nav;
|
|
875
853
|
}
|
|
876
854
|
.page__main {
|
|
877
|
-
|
|
855
|
+
grid-area: main;
|
|
878
856
|
}
|
|
879
857
|
.page__footer {
|
|
880
|
-
|
|
858
|
+
grid-area: foot;
|
|
881
859
|
}
|
|
882
860
|
```
|
|
883
861
|
|
|
@@ -887,7 +865,7 @@ Let's say you have this HTML:
|
|
|
887
865
|
|
|
888
866
|
```html
|
|
889
867
|
<div class="grid">
|
|
890
|
-
|
|
868
|
+
<div class="grid-cell"></div>
|
|
891
869
|
</div>
|
|
892
870
|
```
|
|
893
871
|
|
|
@@ -895,17 +873,17 @@ And you write this CSS:
|
|
|
895
873
|
|
|
896
874
|
```css
|
|
897
875
|
.grid {
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
876
|
+
display: grid;
|
|
877
|
+
grid-template-columns: 1fr 1fr;
|
|
878
|
+
grid-template-rows: auto;
|
|
901
879
|
}
|
|
902
880
|
|
|
903
881
|
.grid::before {
|
|
904
|
-
|
|
882
|
+
content: 'before';
|
|
905
883
|
}
|
|
906
884
|
|
|
907
885
|
.grid::after {
|
|
908
|
-
|
|
886
|
+
content: 'after';
|
|
909
887
|
}
|
|
910
888
|
```
|
|
911
889
|
|
|
@@ -913,31 +891,31 @@ This will be the output:
|
|
|
913
891
|
|
|
914
892
|
```css
|
|
915
893
|
.grid {
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
894
|
+
display: -ms-grid;
|
|
895
|
+
display: grid;
|
|
896
|
+
-ms-grid-columns: 1fr 1fr;
|
|
897
|
+
grid-template-columns: 1fr 1fr;
|
|
898
|
+
-ms-grid-rows: auto;
|
|
899
|
+
grid-template-rows: auto;
|
|
922
900
|
}
|
|
923
901
|
|
|
924
902
|
.grid > *:nth-child(1) {
|
|
925
|
-
|
|
926
|
-
|
|
903
|
+
-ms-grid-row: 1;
|
|
904
|
+
-ms-grid-column: 1;
|
|
927
905
|
}
|
|
928
906
|
|
|
929
907
|
|
|
930
908
|
.grid > *:nth-child(2) {
|
|
931
|
-
|
|
932
|
-
|
|
909
|
+
-ms-grid-row: 1;
|
|
910
|
+
-ms-grid-column: 2;
|
|
933
911
|
}
|
|
934
912
|
|
|
935
913
|
.grid::before {
|
|
936
|
-
|
|
914
|
+
content: 'before';
|
|
937
915
|
}
|
|
938
916
|
|
|
939
917
|
.grid::after {
|
|
940
|
-
|
|
918
|
+
content: 'after';
|
|
941
919
|
}
|
|
942
920
|
```
|
|
943
921
|
|
|
@@ -957,47 +935,47 @@ If you wish to change the size of a `grid-gap`, you will need to redeclare the g
|
|
|
957
935
|
|
|
958
936
|
```css
|
|
959
937
|
.grid {
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
938
|
+
display: grid;
|
|
939
|
+
grid-template-columns: 1fr 1fr;
|
|
940
|
+
grid-template-rows: auto;
|
|
941
|
+
grid-gap: 50px;
|
|
964
942
|
}
|
|
965
943
|
|
|
966
944
|
/* This will *NOT* work in IE */
|
|
967
945
|
@media (max-width: 600px) {
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
946
|
+
.grid {
|
|
947
|
+
grid-gap: 20px;
|
|
948
|
+
}
|
|
971
949
|
}
|
|
972
950
|
|
|
973
951
|
/* This will *NOT* work in IE */
|
|
974
952
|
.grid.small-gap {
|
|
975
|
-
|
|
953
|
+
grid-gap: 20px;
|
|
976
954
|
}
|
|
977
955
|
```
|
|
978
956
|
|
|
979
957
|
```css
|
|
980
958
|
.grid {
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
959
|
+
display: grid;
|
|
960
|
+
grid-template-columns: 1fr 1fr;
|
|
961
|
+
grid-template-rows: auto;
|
|
962
|
+
grid-gap: 50px;
|
|
985
963
|
}
|
|
986
964
|
|
|
987
965
|
/* This *WILL* work in IE */
|
|
988
966
|
@media (max-width: 600px) {
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
967
|
+
.grid {
|
|
968
|
+
grid-template-columns: 1fr 1fr;
|
|
969
|
+
grid-template-rows: auto;
|
|
970
|
+
grid-gap: 20px;
|
|
971
|
+
}
|
|
994
972
|
}
|
|
995
973
|
|
|
996
974
|
/* This *WILL* work in IE */
|
|
997
975
|
.grid.small-gap {
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
976
|
+
grid-template-columns: 1fr 1fr;
|
|
977
|
+
grid-template-rows: auto;
|
|
978
|
+
grid-gap: 20px;
|
|
1001
979
|
}
|
|
1002
980
|
```
|
|
1003
981
|
|
|
@@ -1039,6 +1017,13 @@ Properties:
|
|
|
1039
1017
|
JS API is also available:
|
|
1040
1018
|
|
|
1041
1019
|
```js
|
|
1042
|
-
|
|
1043
|
-
console.log(info);
|
|
1020
|
+
console.log(autoprefixer().info())
|
|
1044
1021
|
```
|
|
1022
|
+
|
|
1023
|
+
|
|
1024
|
+
## Security Contact
|
|
1025
|
+
|
|
1026
|
+
To report a security vulnerability, please use the [Tidelift security contact].
|
|
1027
|
+
Tidelift will coordinate the fix and disclosure.
|
|
1028
|
+
|
|
1029
|
+
[Tidelift security contact]: https://tidelift.com/security
|
package/data/prefixes.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
/* eslint-disable import-helpers/order-imports */
|
|
3
4
|
var unpack = require('caniuse-lite').feature;
|
|
4
5
|
|
|
5
6
|
function browsersSort(a, b) {
|
|
@@ -196,7 +197,11 @@ f(require('caniuse-lite/data/features/css-filter-function'), function (browsers)
|
|
|
196
197
|
});
|
|
197
198
|
}); // Backdrop-filter
|
|
198
199
|
|
|
199
|
-
|
|
200
|
+
var backdrop = require('caniuse-lite/data/features/css-backdrop-filter');
|
|
201
|
+
|
|
202
|
+
f(backdrop, {
|
|
203
|
+
match: /y\sx|y\s#2/
|
|
204
|
+
}, function (browsers) {
|
|
200
205
|
return prefix(['backdrop-filter'], {
|
|
201
206
|
feature: 'css-backdrop-filter',
|
|
202
207
|
browsers: browsers
|
|
@@ -498,7 +503,7 @@ f(require('caniuse-lite/data/features/css-deviceadaptation'), function (browsers
|
|
|
498
503
|
var resolut = require('caniuse-lite/data/features/css-media-resolution');
|
|
499
504
|
|
|
500
505
|
f(resolut, {
|
|
501
|
-
match: /( x($| )|a #
|
|
506
|
+
match: /( x($| )|a #2)/
|
|
502
507
|
}, function (browsers) {
|
|
503
508
|
return prefix(['@resolution'], {
|
|
504
509
|
feature: 'css-media-resolution',
|
|
@@ -698,4 +703,11 @@ f(require('caniuse-lite/data/features/css-color-adjust'), function (browsers) {
|
|
|
698
703
|
feature: 'css-color-adjust',
|
|
699
704
|
browsers: browsers
|
|
700
705
|
});
|
|
706
|
+
}); // text-orientation
|
|
707
|
+
|
|
708
|
+
f(require('caniuse-lite/data/features/css-text-orientation'), function (browsers) {
|
|
709
|
+
return prefix(['text-orientation'], {
|
|
710
|
+
feature: 'css-text-orientation',
|
|
711
|
+
browsers: browsers
|
|
712
|
+
});
|
|
701
713
|
});
|
package/lib/autoprefixer.js
CHANGED
|
@@ -6,6 +6,8 @@ var postcss = require('postcss');
|
|
|
6
6
|
|
|
7
7
|
var agents = require('caniuse-lite').agents;
|
|
8
8
|
|
|
9
|
+
var chalk = require('chalk');
|
|
10
|
+
|
|
9
11
|
var Browsers = require('./browsers');
|
|
10
12
|
|
|
11
13
|
var Prefixes = require('./prefixes');
|
|
@@ -14,6 +16,8 @@ var data = require('../data/prefixes');
|
|
|
14
16
|
|
|
15
17
|
var info = require('./info');
|
|
16
18
|
|
|
19
|
+
var WARNING = '\n' + ' Replace Autoprefixer `browsers` option to Browserslist config.\n' + ' Use `browserslist` key in `package.json` or `.browserslistrc` file.\n' + '\n' + ' Using `browsers` option cause some error. Browserslist config \n' + ' can be used for Babel, Autoprefixer, postcss-normalize and other tools.\n' + '\n' + ' If you really need to use option, rename it to `overrideBrowserslist`.\n' + '\n' + ' Learn more at:\n' + ' https://github.com/browserslist/browserslist#readme\n' + ' https://twitter.com/browserslist\n' + '\n';
|
|
20
|
+
|
|
17
21
|
function isPlainObject(obj) {
|
|
18
22
|
return Object.prototype.toString.apply(obj) === '[object Object]';
|
|
19
23
|
}
|
|
@@ -62,12 +66,24 @@ module.exports = postcss.plugin('autoprefixer', function () {
|
|
|
62
66
|
}
|
|
63
67
|
|
|
64
68
|
if (options.browser) {
|
|
65
|
-
throw new Error('Change `browser` option to `
|
|
69
|
+
throw new Error('Change `browser` option to `overrideBrowserslist` in Autoprefixer');
|
|
66
70
|
} else if (options.browserslist) {
|
|
67
|
-
throw new Error('Change `browserslist` option to `
|
|
71
|
+
throw new Error('Change `browserslist` option to `overrideBrowserslist` in Autoprefixer');
|
|
68
72
|
}
|
|
69
73
|
|
|
70
|
-
if (options.
|
|
74
|
+
if (options.overrideBrowserslist) {
|
|
75
|
+
reqs = options.overrideBrowserslist;
|
|
76
|
+
} else if (options.browsers) {
|
|
77
|
+
if (typeof console !== 'undefined' && console.warn) {
|
|
78
|
+
if (chalk && chalk.red) {
|
|
79
|
+
console.warn(chalk.red(WARNING.replace(/`[^`]+`/g, function (i) {
|
|
80
|
+
return chalk.yellow(i.slice(1, -1));
|
|
81
|
+
})));
|
|
82
|
+
} else {
|
|
83
|
+
console.warn(WARNING);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
71
87
|
reqs = options.browsers;
|
|
72
88
|
}
|
|
73
89
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
|
|
4
|
+
|
|
5
|
+
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _defaults(subClass, superClass); }
|
|
6
|
+
|
|
7
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
+
|
|
9
|
+
var Declaration = require('../declaration');
|
|
10
|
+
|
|
11
|
+
var utils = require('../utils');
|
|
12
|
+
|
|
13
|
+
var BackdropFilter =
|
|
14
|
+
/*#__PURE__*/
|
|
15
|
+
function (_Declaration) {
|
|
16
|
+
_inheritsLoose(BackdropFilter, _Declaration);
|
|
17
|
+
|
|
18
|
+
function BackdropFilter(name, prefixes, all) {
|
|
19
|
+
var _this;
|
|
20
|
+
|
|
21
|
+
_this = _Declaration.call(this, name, prefixes, all) || this;
|
|
22
|
+
|
|
23
|
+
if (_this.prefixes) {
|
|
24
|
+
_this.prefixes = utils.uniq(_this.prefixes.map(function (i) {
|
|
25
|
+
return i === '-ms-' ? '-webkit-' : i;
|
|
26
|
+
}));
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return _this;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return BackdropFilter;
|
|
33
|
+
}(Declaration);
|
|
34
|
+
|
|
35
|
+
_defineProperty(BackdropFilter, "names", ['backdrop-filter']);
|
|
36
|
+
|
|
37
|
+
module.exports = BackdropFilter;
|
|
@@ -47,13 +47,10 @@ _defineProperty(BorderRadius, "toMozilla", {});
|
|
|
47
47
|
|
|
48
48
|
_defineProperty(BorderRadius, "toNormal", {});
|
|
49
49
|
|
|
50
|
-
var _arr = ['top', 'bottom'];
|
|
51
|
-
|
|
52
|
-
for (var _i = 0; _i < _arr.length; _i++) {
|
|
50
|
+
for (var _i = 0, _arr = ['top', 'bottom']; _i < _arr.length; _i++) {
|
|
53
51
|
var ver = _arr[_i];
|
|
54
|
-
var _arr2 = ['left', 'right'];
|
|
55
52
|
|
|
56
|
-
for (var _i2 = 0; _i2 < _arr2.length; _i2++) {
|
|
53
|
+
for (var _i2 = 0, _arr2 = ['left', 'right']; _i2 < _arr2.length; _i2++) {
|
|
57
54
|
var hor = _arr2[_i2];
|
|
58
55
|
var normal = "border-" + ver + "-" + hor + "-radius";
|
|
59
56
|
var mozilla = "border-radius-" + ver + hor;
|
package/lib/hacks/cross-fade.js
CHANGED
|
@@ -6,10 +6,10 @@ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.crea
|
|
|
6
6
|
|
|
7
7
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
8
|
|
|
9
|
-
var Value = require('../value');
|
|
10
|
-
|
|
11
9
|
var list = require('postcss').list;
|
|
12
10
|
|
|
11
|
+
var Value = require('../value');
|
|
12
|
+
|
|
13
13
|
var CrossFade =
|
|
14
14
|
/*#__PURE__*/
|
|
15
15
|
function (_Value) {
|
package/lib/hacks/flex.js
CHANGED
|
@@ -6,12 +6,12 @@ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.crea
|
|
|
6
6
|
|
|
7
7
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
8
|
|
|
9
|
+
var list = require('postcss').list;
|
|
10
|
+
|
|
9
11
|
var flexSpec = require('./flex-spec');
|
|
10
12
|
|
|
11
13
|
var Declaration = require('../declaration');
|
|
12
14
|
|
|
13
|
-
var list = require('postcss').list;
|
|
14
|
-
|
|
15
15
|
var Flex =
|
|
16
16
|
/*#__PURE__*/
|
|
17
17
|
function (_Declaration) {
|
package/lib/hacks/gradient.js
CHANGED
|
@@ -8,16 +8,16 @@ function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.crea
|
|
|
8
8
|
|
|
9
9
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
10
10
|
|
|
11
|
+
var parser = require('postcss-value-parser');
|
|
12
|
+
|
|
13
|
+
var range = require('normalize-range');
|
|
14
|
+
|
|
11
15
|
var OldValue = require('../old-value');
|
|
12
16
|
|
|
13
17
|
var Value = require('../value');
|
|
14
18
|
|
|
15
19
|
var utils = require('../utils');
|
|
16
20
|
|
|
17
|
-
var parser = require('postcss-value-parser');
|
|
18
|
-
|
|
19
|
-
var range = require('normalize-range');
|
|
20
|
-
|
|
21
21
|
var IS_DIRECTION = /top|left|right|bottom/gi;
|
|
22
22
|
|
|
23
23
|
var Gradient =
|
|
@@ -398,8 +398,8 @@ function (_Value) {
|
|
|
398
398
|
this.colorStops(params);
|
|
399
399
|
node.nodes = [];
|
|
400
400
|
|
|
401
|
-
for (var _i5 = 0; _i5 <
|
|
402
|
-
var param =
|
|
401
|
+
for (var _i5 = 0, _params = params; _i5 < _params.length; _i5++) {
|
|
402
|
+
var param = _params[_i5];
|
|
403
403
|
node.nodes = node.nodes.concat(param);
|
|
404
404
|
}
|
|
405
405
|
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; }
|
|
4
|
+
|
|
5
|
+
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _defaults(subClass, superClass); }
|
|
6
|
+
|
|
7
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
8
|
+
|
|
9
|
+
var Declaration = require('../declaration');
|
|
10
|
+
|
|
11
|
+
var MaskComposite =
|
|
12
|
+
/*#__PURE__*/
|
|
13
|
+
function (_Declaration) {
|
|
14
|
+
_inheritsLoose(MaskComposite, _Declaration);
|
|
15
|
+
|
|
16
|
+
function MaskComposite() {
|
|
17
|
+
return _Declaration.apply(this, arguments) || this;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
var _proto = MaskComposite.prototype;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Prefix mask-composite for webkit
|
|
24
|
+
*/
|
|
25
|
+
_proto.insert = function insert(decl, prefix, prefixes) {
|
|
26
|
+
var isCompositeProp = decl.prop === 'mask-composite';
|
|
27
|
+
var compositeValues;
|
|
28
|
+
|
|
29
|
+
if (isCompositeProp) {
|
|
30
|
+
compositeValues = decl.value.split(',');
|
|
31
|
+
} else {
|
|
32
|
+
compositeValues = decl.value.match(MaskComposite.regexp) || [];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
compositeValues = compositeValues.map(function (el) {
|
|
36
|
+
return el.trim();
|
|
37
|
+
}).filter(function (el) {
|
|
38
|
+
return el;
|
|
39
|
+
});
|
|
40
|
+
var hasCompositeValues = compositeValues.length;
|
|
41
|
+
var compositeDecl;
|
|
42
|
+
|
|
43
|
+
if (hasCompositeValues) {
|
|
44
|
+
compositeDecl = this.clone(decl);
|
|
45
|
+
compositeDecl.value = compositeValues.map(function (value) {
|
|
46
|
+
return MaskComposite.oldValues[value] || value;
|
|
47
|
+
}).join(', ');
|
|
48
|
+
|
|
49
|
+
if (compositeValues.includes('intersect')) {
|
|
50
|
+
compositeDecl.value += ', xor';
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
compositeDecl.prop = prefix + 'mask-composite';
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (isCompositeProp) {
|
|
57
|
+
if (!hasCompositeValues) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (this.needCascade(decl)) {
|
|
62
|
+
compositeDecl.raws.before = this.calcBefore(prefixes, decl, prefix);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return decl.parent.insertBefore(decl, compositeDecl);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
var cloned = this.clone(decl);
|
|
69
|
+
cloned.prop = prefix + cloned.prop;
|
|
70
|
+
|
|
71
|
+
if (hasCompositeValues) {
|
|
72
|
+
cloned.value = cloned.value.replace(MaskComposite.regexp, '');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (this.needCascade(decl)) {
|
|
76
|
+
cloned.raws.before = this.calcBefore(prefixes, decl, prefix);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
decl.parent.insertBefore(decl, cloned);
|
|
80
|
+
|
|
81
|
+
if (!hasCompositeValues) {
|
|
82
|
+
return decl;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (this.needCascade(decl)) {
|
|
86
|
+
compositeDecl.raws.before = this.calcBefore(prefixes, decl, prefix);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return decl.parent.insertBefore(decl, compositeDecl);
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
return MaskComposite;
|
|
93
|
+
}(Declaration);
|
|
94
|
+
|
|
95
|
+
_defineProperty(MaskComposite, "names", ['mask', 'mask-composite']);
|
|
96
|
+
|
|
97
|
+
_defineProperty(MaskComposite, "oldValues", {
|
|
98
|
+
add: 'source-over',
|
|
99
|
+
substract: 'source-out',
|
|
100
|
+
intersect: 'source-in',
|
|
101
|
+
exclude: 'xor'
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
_defineProperty(MaskComposite, "regexp", new RegExp("\\s+(" + Object.keys(MaskComposite.oldValues).join('|') + ")\\b(?!\\))\\s*(?=[,])", 'ig'));
|
|
105
|
+
|
|
106
|
+
module.exports = MaskComposite;
|
package/lib/prefixer.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var vendor = require('postcss').vendor;
|
|
4
|
+
|
|
3
5
|
var Browsers = require('./browsers');
|
|
4
6
|
|
|
5
7
|
var utils = require('./utils');
|
|
6
|
-
|
|
7
|
-
var vendor = require('postcss').vendor;
|
|
8
8
|
/**
|
|
9
9
|
* Recursively clone objects
|
|
10
10
|
*/
|
|
@@ -13,10 +13,8 @@ var vendor = require('postcss').vendor;
|
|
|
13
13
|
function _clone(obj, parent) {
|
|
14
14
|
var cloned = new obj.constructor();
|
|
15
15
|
|
|
16
|
-
var
|
|
17
|
-
|
|
18
|
-
for (var _i = 0; _i < _arr.length; _i++) {
|
|
19
|
-
var i = _arr[_i];
|
|
16
|
+
for (var _i = 0, _Object$keys = Object.keys(obj || {}); _i < _Object$keys.length; _i++) {
|
|
17
|
+
var i = _Object$keys[_i];
|
|
20
18
|
var value = obj[i];
|
|
21
19
|
|
|
22
20
|
if (i === 'parent' && typeof value === 'object') {
|
package/lib/prefixes.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var vendor = require('postcss').vendor;
|
|
4
|
+
|
|
3
5
|
var Declaration = require('./declaration');
|
|
4
6
|
|
|
5
7
|
var Resolution = require('./resolution');
|
|
@@ -20,8 +22,6 @@ var Value = require('./value');
|
|
|
20
22
|
|
|
21
23
|
var utils = require('./utils');
|
|
22
24
|
|
|
23
|
-
var vendor = require('postcss').vendor;
|
|
24
|
-
|
|
25
25
|
Selector.hack(require('./hacks/fullscreen'));
|
|
26
26
|
Selector.hack(require('./hacks/placeholder'));
|
|
27
27
|
Declaration.hack(require('./hacks/flex'));
|
|
@@ -39,6 +39,7 @@ Declaration.hack(require('./hacks/align-self'));
|
|
|
39
39
|
Declaration.hack(require('./hacks/appearance'));
|
|
40
40
|
Declaration.hack(require('./hacks/flex-basis'));
|
|
41
41
|
Declaration.hack(require('./hacks/mask-border'));
|
|
42
|
+
Declaration.hack(require('./hacks/mask-composite'));
|
|
42
43
|
Declaration.hack(require('./hacks/align-items'));
|
|
43
44
|
Declaration.hack(require('./hacks/flex-shrink'));
|
|
44
45
|
Declaration.hack(require('./hacks/break-props'));
|
|
@@ -54,6 +55,7 @@ Declaration.hack(require('./hacks/grid-row-align'));
|
|
|
54
55
|
Declaration.hack(require('./hacks/transform-decl'));
|
|
55
56
|
Declaration.hack(require('./hacks/flex-direction'));
|
|
56
57
|
Declaration.hack(require('./hacks/image-rendering'));
|
|
58
|
+
Declaration.hack(require('./hacks/backdrop-filter'));
|
|
57
59
|
Declaration.hack(require('./hacks/background-clip'));
|
|
58
60
|
Declaration.hack(require('./hacks/text-decoration'));
|
|
59
61
|
Declaration.hack(require('./hacks/justify-content'));
|
package/lib/processor.js
CHANGED
|
@@ -441,6 +441,16 @@ function () {
|
|
|
441
441
|
notHack = true;
|
|
442
442
|
}
|
|
443
443
|
|
|
444
|
+
if (decl.prop === '-webkit-box-orient') {
|
|
445
|
+
var hacks = {
|
|
446
|
+
'flex-direction': true,
|
|
447
|
+
'flex-flow': true
|
|
448
|
+
};
|
|
449
|
+
if (!decl.parent.some(function (j) {
|
|
450
|
+
return hacks[j.prop];
|
|
451
|
+
})) return;
|
|
452
|
+
}
|
|
453
|
+
|
|
444
454
|
if (notHack && !_this2.withHackValue(decl)) {
|
|
445
455
|
if (decl.raw('before').indexOf('\n') > -1) {
|
|
446
456
|
_this2.reduceSpaces(decl);
|
package/lib/resolution.js
CHANGED
|
@@ -4,14 +4,14 @@ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaul
|
|
|
4
4
|
|
|
5
5
|
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _defaults(subClass, superClass); }
|
|
6
6
|
|
|
7
|
+
var n2f = require('num2fraction');
|
|
8
|
+
|
|
7
9
|
var Prefixer = require('./prefixer');
|
|
8
10
|
|
|
9
11
|
var utils = require('./utils');
|
|
10
12
|
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
var REGEXP = /(min|max)-resolution\s*:\s*\d*\.?\d+(dppx|dpi)/gi;
|
|
14
|
-
var SPLIT = /(min|max)-resolution(\s*:\s*)(\d*\.?\d+)(dppx|dpi)/i;
|
|
13
|
+
var REGEXP = /(min|max)-resolution\s*:\s*\d*\.?\d+(dppx|dpi|x)/gi;
|
|
14
|
+
var SPLIT = /(min|max)-resolution(\s*:\s*)(\d*\.?\d+)(dppx|dpi|x)/i;
|
|
15
15
|
|
|
16
16
|
var Resolution =
|
|
17
17
|
/*#__PURE__*/
|
package/lib/supports.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var postcss = require('postcss');
|
|
4
|
+
|
|
5
|
+
var data = require('caniuse-lite').feature(require('caniuse-lite/data/features/css-featurequeries.js'));
|
|
6
|
+
|
|
3
7
|
var Browsers = require('./browsers');
|
|
4
8
|
|
|
5
9
|
var brackets = require('./brackets');
|
|
@@ -8,12 +12,8 @@ var Value = require('./value');
|
|
|
8
12
|
|
|
9
13
|
var utils = require('./utils');
|
|
10
14
|
|
|
11
|
-
var postcss = require('postcss');
|
|
12
|
-
|
|
13
15
|
var supported = [];
|
|
14
16
|
|
|
15
|
-
var data = require('caniuse-lite').feature(require('caniuse-lite/data/features/css-featurequeries.js'));
|
|
16
|
-
|
|
17
17
|
for (var browser in data.stats) {
|
|
18
18
|
var versions = data.stats[browser];
|
|
19
19
|
|
package/lib/value.js
CHANGED
|
@@ -4,14 +4,14 @@ function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaul
|
|
|
4
4
|
|
|
5
5
|
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _defaults(subClass, superClass); }
|
|
6
6
|
|
|
7
|
+
var vendor = require('postcss').vendor;
|
|
8
|
+
|
|
7
9
|
var Prefixer = require('./prefixer');
|
|
8
10
|
|
|
9
11
|
var OldValue = require('./old-value');
|
|
10
12
|
|
|
11
13
|
var utils = require('./utils');
|
|
12
14
|
|
|
13
|
-
var vendor = require('postcss').vendor;
|
|
14
|
-
|
|
15
15
|
var Value =
|
|
16
16
|
/*#__PURE__*/
|
|
17
17
|
function (_Prefixer) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "autoprefixer",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.6.1",
|
|
4
4
|
"description": "Parse CSS and add vendor prefixes to CSS rules using values from the Can I Use website",
|
|
5
5
|
"keywords": ["autoprefixer", "css", "prefix", "postcss", "postcss-plugin"],
|
|
6
6
|
"author": "Andrey Sitnik <andrey@sitnik.ru>",
|
|
@@ -10,15 +10,19 @@
|
|
|
10
10
|
"node": ">=6.0.0"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"browserslist": "^4.
|
|
14
|
-
"caniuse-lite": "^1.0.
|
|
13
|
+
"browserslist": "^4.6.3",
|
|
14
|
+
"caniuse-lite": "^1.0.30000980",
|
|
15
|
+
"chalk": "^2.4.2",
|
|
15
16
|
"normalize-range": "^0.1.2",
|
|
16
17
|
"num2fraction": "^1.2.2",
|
|
17
|
-
"postcss": "^7.0.
|
|
18
|
-
"postcss-value-parser": "^
|
|
18
|
+
"postcss": "^7.0.17",
|
|
19
|
+
"postcss-value-parser": "^4.0.0"
|
|
19
20
|
},
|
|
20
21
|
"bin": {
|
|
21
22
|
"autoprefixer": "./bin/autoprefixer"
|
|
22
23
|
},
|
|
24
|
+
"browser": {
|
|
25
|
+
"chalk": false
|
|
26
|
+
},
|
|
23
27
|
"main": "lib/autoprefixer"
|
|
24
28
|
}
|