feat(css/prefixer): Avoid prefixing general functions (#5319)

This commit is contained in:
Alexander Akait 2022-08-01 06:26:29 +03:00 committed by GitHub
parent 5186211472
commit 07732d6a0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 469 additions and 293 deletions

View File

@ -3242,5 +3242,203 @@
{
"opera": "15"
}
],
"-webkit-filter()": [
{
"ios": "9.0",
"safari": "9"
},
{
"ios": "9.3",
"safari": "9"
}
],
"-webkit-calc()": [
{
"chrome": "19",
"ios": "6.0",
"safari": "6"
},
{
"chrome": "25",
"ios": "6.1",
"safari": "6"
}
],
"-moz-calc": [
{
"firefox": "4"
},
{
"firefox": "15"
}
],
"-webkit-image-set()": [
{
"android": "4.4",
"chrome": "21",
"edge": "79",
"ios": "6.0",
"opera": "15",
"safari": "6",
"samsung": "4"
},
{
"android": "4.4.4",
"ios": "9.3",
"safari": "9.1"
}
],
"-webkit-cross-fade()": [
{
"android": "4.4",
"chrome": "17",
"edge": "79",
"ios": "5.0",
"op_mob": "64",
"opera": "15",
"safari": "5.1",
"samsung": "4"
},
{
"android": "4.4.4",
"ios": "9.3",
"safari": "9.1"
}
],
"-moz-element()": [
{
"firefox": "4"
},
{}
],
"-webkit-linear-gradient()": [
{
"android": "4.0",
"chrome": "10",
"safari": "5.1"
},
{
"android": "4.3",
"chrome": "25",
"safari": "6"
}
],
"-moz-linear-gradient()": [
{
"firefox": "3.6"
},
{
"firefox": "15"
}
],
"-o-linear-gradient()": [
{
"opera": "11.1",
"op_mob": "11.1"
},
{
"opera": "11.5",
"op_mob": "11.5"
}
],
"-webkit-repeating-linear-gradient()": [
{
"android": "4",
"chrome": "13",
"safari": "5.1",
"ios": "5.0"
},
{
"android": "4.3",
"chrome": "25",
"safari": "6",
"ios": "6.1"
}
],
"-moz-repeating-linear-gradient()": [
{
"firefox": "3.6"
},
{
"firefox": "15"
}
],
"-o-repeating-linear-gradient()": [
{
"opera": "11.5"
},
{
"opera": "15"
}
],
"-webkit-radial-gradient()": [
{
"android": "4.0",
"chrome": "13",
"safari": "5.1",
"ios": "6.1"
},
{
"android": "4.3",
"chrome": "25",
"safari": "6.1",
"ios": "6.1"
}
],
"-moz-radial-gradient()": [
{
"firefox": "3.6"
},
{
"firefox": "15"
}
],
"-o-radial-gradient()": [
{
"opera": "11.6"
},
{
"opera": "15"
}
],
"-webkit-repeating-radial-gradient()": [
{
"android": "4",
"chrome": "13",
"safari": "5.1",
"ios": "5.0"
},
{
"android": "4.3",
"chrome": "25",
"safari": "6",
"ios": "6.1"
}
],
"-moz-repeating-radial-gradient()": [
{
"firefox": "3.6"
},
{
"firefox": "15"
}
],
"-o-repeating-radial-gradient()": [
{
"opera": "11.5"
},
{
"opera": "15"
}
]
}

View File

@ -3,7 +3,10 @@ use std::mem::take;
use once_cell::sync::Lazy;
use preset_env_base::{query::targets_to_versions, version::Version, BrowserData, Versions};
use swc_common::{collections::AHashMap, EqIgnoreSpan, DUMMY_SP};
use swc_common::{
collections::{AHashMap, AHashSet},
EqIgnoreSpan, DUMMY_SP,
};
use swc_css_ast::*;
use swc_css_utils::{
replace_function_name, replace_ident, replace_pseudo_class_selector_name,
@ -565,43 +568,46 @@ impl Prefixer {
}
impl VisitMut for Prefixer {
fn visit_mut_stylesheet(&mut self, n: &mut Stylesheet) {
let mut new = vec![];
fn visit_mut_stylesheet(&mut self, stylesheet: &mut Stylesheet) {
let mut new_rules = Vec::with_capacity(stylesheet.rules.len());
let original_rules = stylesheet.rules.clone();
for mut n in take(&mut n.rules) {
n.visit_mut_children_with(self);
for mut rule in take(&mut stylesheet.rules) {
rule.visit_mut_children_with(self);
for mut added_rule in take(&mut self.added_top_rules) {
let need_skip = original_rules
.iter()
.any(|existing_rule| added_rule.1.eq_ignore_span(existing_rule));
if need_skip {
continue;
}
for mut n in take(&mut self.added_top_rules) {
let old_rule_prefix = self.rule_prefix.take();
self.rule_prefix = Some(n.0);
self.rule_prefix = Some(added_rule.0);
n.1.visit_mut_children_with(self);
added_rule.1.visit_mut_children_with(self);
new.push(n.1);
new_rules.push(added_rule.1);
self.rule_prefix = old_rule_prefix;
}
new.push(n);
new_rules.push(rule);
}
// Avoid duplicate prefixed at-rules
new.dedup_by(|a, b| match (a, b) {
(Rule::AtRule(a), Rule::AtRule(b)) => a.eq_ignore_span(b),
_ => false,
});
n.rules = new;
stylesheet.rules = new_rules;
}
// TODO handle declarations in `@media`/`@support`
fn visit_mut_at_rule(&mut self, n: &mut AtRule) {
let original_simple_block = n.block.clone();
fn visit_mut_at_rule(&mut self, at_rule: &mut AtRule) {
let original_simple_block = at_rule.block.clone();
n.visit_mut_children_with(self);
at_rule.visit_mut_children_with(self);
match &n.name {
match &at_rule.name {
AtRuleName::Ident(Ident { value, .. })
if value.as_ref().eq_ignore_ascii_case("viewport") =>
{
@ -615,7 +621,7 @@ impl VisitMut for Prefixer {
value: "-ms-viewport".into(),
raw: None,
}),
prelude: n.prelude.clone(),
prelude: at_rule.prelude.clone(),
block: original_simple_block.clone(),
},
);
@ -631,7 +637,7 @@ impl VisitMut for Prefixer {
value: "-o-viewport".into(),
raw: None,
}),
prelude: n.prelude.clone(),
prelude: at_rule.prelude.clone(),
block: original_simple_block,
},
);
@ -650,7 +656,7 @@ impl VisitMut for Prefixer {
value: "-webkit-keyframes".into(),
raw: None,
}),
prelude: n.prelude.clone(),
prelude: at_rule.prelude.clone(),
block: original_simple_block.clone(),
},
);
@ -666,7 +672,7 @@ impl VisitMut for Prefixer {
value: "-moz-keyframes".into(),
raw: None,
}),
prelude: n.prelude.clone(),
prelude: at_rule.prelude.clone(),
block: original_simple_block.clone(),
},
);
@ -682,7 +688,7 @@ impl VisitMut for Prefixer {
value: "-o-keyframes".into(),
raw: None,
}),
prelude: n.prelude.clone(),
prelude: at_rule.prelude.clone(),
block: original_simple_block,
},
);
@ -695,7 +701,7 @@ impl VisitMut for Prefixer {
fn visit_mut_media_query_list(&mut self, media_query_list: &mut MediaQueryList) {
media_query_list.visit_mut_children_with(self);
let mut new = Vec::with_capacity(media_query_list.queries.len());
let mut new_queries = Vec::with_capacity(media_query_list.queries.len());
for n in take(&mut media_query_list.queries) {
// TODO avoid duplicates
@ -713,8 +719,8 @@ impl VisitMut for Prefixer {
"-webkit-max-device-pixel-ratio",
);
if !n.eq_ignore_span(&new_webkit_value) {
new.push(new_webkit_value);
if n != new_webkit_value {
new_queries.push(new_webkit_value);
}
}
@ -732,17 +738,17 @@ impl VisitMut for Prefixer {
"max--moz-device-pixel-ratio",
);
if !n.eq_ignore_span(&new_moz_value) {
new.push(new_moz_value);
if n != new_moz_value {
new_queries.push(new_moz_value);
}
}
// TODO opera support
new.push(n);
new_queries.push(n);
}
media_query_list.queries = new;
media_query_list.queries = new_queries;
}
fn visit_mut_qualified_rule(&mut self, n: &mut QualifiedRule) {
@ -1139,100 +1145,150 @@ impl VisitMut for Prefixer {
let mut webkit_value = n.value.clone();
if self.rule_prefix == Some(Prefix::Webkit) || self.rule_prefix.is_none() {
replace_function_name(&mut webkit_value, "filter", "-webkit-filter");
replace_image_set_function_on_legacy_variant(
&mut webkit_value,
"image-set",
"-webkit-image-set",
);
replace_function_name(&mut webkit_value, "calc", "-webkit-calc");
replace_cross_fade_function_on_legacy_variant(
&mut webkit_value,
"cross-fade",
"-webkit-cross-fade",
);
if should_prefix("-webkit-filter()", self.env, false) {
replace_function_name(&mut webkit_value, "filter", "-webkit-filter");
}
replace_gradient_function_on_legacy_variant(
&mut webkit_value,
"linear-gradient",
"-webkit-linear-gradient",
);
replace_gradient_function_on_legacy_variant(
&mut webkit_value,
"repeating-linear-gradient",
"-webkit-repeating-linear-gradient",
);
replace_gradient_function_on_legacy_variant(
&mut webkit_value,
"radial-gradient",
"-webkit-radial-gradient",
);
replace_gradient_function_on_legacy_variant(
&mut webkit_value,
"repeating-radial-gradient",
"-webkit-repeating-radial-gradient",
);
if should_prefix("-webkit-image-set()", self.env, false) {
replace_image_set_function_on_legacy_variant(
&mut webkit_value,
"image-set",
"-webkit-image-set",
);
}
if should_prefix("-webkit-calc()", self.env, false) {
replace_function_name(&mut webkit_value, "calc", "-webkit-calc");
}
if should_prefix("-webkit-cross-fade()", self.env, false) {
replace_cross_fade_function_on_legacy_variant(
&mut webkit_value,
"cross-fade",
"-webkit-cross-fade",
);
}
if should_prefix("-webkit-linear-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut webkit_value,
"linear-gradient",
"-webkit-linear-gradient",
);
}
if should_prefix("-webkit-repeating-linear-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut webkit_value,
"repeating-linear-gradient",
"-webkit-repeating-linear-gradient",
);
}
if should_prefix("-webkit-radial-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut webkit_value,
"radial-gradient",
"-webkit-radial-gradient",
);
}
if should_prefix("-webkit-repeating-radial-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut webkit_value,
"repeating-radial-gradient",
"-webkit-repeating-radial-gradient",
);
}
}
let mut moz_value = n.value.clone();
if self.rule_prefix == Some(Prefix::Moz) || self.rule_prefix.is_none() {
replace_function_name(&mut moz_value, "element", "-moz-element");
replace_function_name(&mut moz_value, "calc", "-moz-calc");
replace_gradient_function_on_legacy_variant(
&mut moz_value,
"linear-gradient",
"-moz-linear-gradient",
);
replace_gradient_function_on_legacy_variant(
&mut moz_value,
"repeating-linear-gradient",
"-moz-repeating-linear-gradient",
);
replace_gradient_function_on_legacy_variant(
&mut moz_value,
"radial-gradient",
"-moz-radial-gradient",
);
replace_gradient_function_on_legacy_variant(
&mut moz_value,
"repeating-radial-gradient",
"-moz-repeating-linear-gradient",
);
if should_prefix("-moz-element()", self.env, false) {
replace_function_name(&mut moz_value, "element", "-moz-element");
}
if should_prefix("-moz-calc()", self.env, false) {
replace_function_name(&mut moz_value, "calc", "-moz-calc");
}
if should_prefix("-moz-linear-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut moz_value,
"linear-gradient",
"-moz-linear-gradient",
);
}
if should_prefix("-moz-repeating-linear-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut moz_value,
"repeating-linear-gradient",
"-moz-repeating-linear-gradient",
);
}
if should_prefix("-moz-radial-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut moz_value,
"radial-gradient",
"-moz-radial-gradient",
);
}
if should_prefix("-moz-repeating-radial-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut moz_value,
"repeating-radial-gradient",
"-moz-repeating-radial-gradient",
);
}
}
let mut o_value = n.value.clone();
if self.rule_prefix == Some(Prefix::O) || self.rule_prefix.is_none() {
replace_gradient_function_on_legacy_variant(
&mut o_value,
"linear-gradient",
"-o-linear-gradient",
);
replace_gradient_function_on_legacy_variant(
&mut o_value,
"repeating-linear-gradient",
"-o-repeating-linear-gradient",
);
replace_gradient_function_on_legacy_variant(
&mut o_value,
"radial-gradient",
"-o-radial-gradient",
);
replace_gradient_function_on_legacy_variant(
&mut o_value,
"repeating-radial-gradient",
"-o-repeating-radial-gradient",
);
if should_prefix("-o-repeating-linear-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut o_value,
"linear-gradient",
"-o-linear-gradient",
);
}
if should_prefix("-o-repeating-linear-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut o_value,
"repeating-linear-gradient",
"-o-repeating-linear-gradient",
);
}
if should_prefix("-o-radial-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut o_value,
"radial-gradient",
"-o-radial-gradient",
);
}
if should_prefix("-o-repeating-radial-gradient()", self.env, false) {
replace_gradient_function_on_legacy_variant(
&mut o_value,
"repeating-radial-gradient",
"-o-repeating-radial-gradient",
);
}
}
let mut ms_value = n.value.clone();
// TODO lazy
let mut declarations = vec![];
let declarations = Lazy::new(|| {
let simple_block = self.simple_block.as_ref().unwrap();
let mut declarations = Vec::with_capacity(simple_block.value.len());
if let Some(SimpleBlock { value, .. }) = &self.simple_block {
for n in value.iter() {
for n in simple_block.value.iter() {
match n {
ComponentValue::DeclarationOrAtRule(DeclarationOrAtRule::Declaration(
declaration,
@ -1243,30 +1299,21 @@ impl VisitMut for Prefixer {
_ => {}
}
}
}
// TODO lazy
let property_names: Vec<&str> = declarations
.iter()
.filter(|declaration| {
!matches!(
declaration,
Declaration {
name: DeclarationName::DashedIdent(_),
..
}
)
})
.map(|declaration| match declaration {
Declaration {
name: DeclarationName::Ident(ident),
..
} => &*ident.value,
_ => {
unreachable!();
declarations
});
let properties = Lazy::new(|| {
let mut properties: AHashSet<&str> = AHashSet::default();
for declaration in declarations.iter() {
if let DeclarationName::Ident(ident) = &declaration.name {
properties.insert(&ident.value);
}
})
.collect();
}
properties
});
// TODO avoid insert moz/etc prefixes for `appearance: -webkit-button;`
// TODO avoid duplication insert
@ -1277,7 +1324,7 @@ impl VisitMut for Prefixer {
// don't use `-moz` prefix for properties in `@-webkit-keyframes` at-rule
if self.rule_prefix == Some($prefix) || self.rule_prefix.is_none() {
// Check we don't have prefixed property
if !property_names.contains(&$property) {
if !properties.contains(&$property) {
let name = DeclarationName::Ident(Ident {
span: DUMMY_SP,
value: $property.into(),
@ -2294,7 +2341,7 @@ impl VisitMut for Prefixer {
}
"writing-mode" if n.value.len() == 1 => {
let direction = match declarations.into_iter().rev().find(|declaration| {
let direction = match declarations.iter().rev().find(|declaration| {
matches!(declaration, Declaration {
name: DeclarationName::Ident(Ident { value, .. }),
..

View File

@ -3,10 +3,8 @@ div {
backdrop-filter: blur(2px);
}
div {
background: -webkit-filter(url('image.jpg'), blur(2px));
background: filter(url('image.jpg'), blur(2px));
}
div {
background: url(image.jpg), -webkit-filter(url('image.jpg'), blur(2px));
background: url(image.jpg), filter(url('image.jpg'), blur(2px));
}

View File

@ -10,14 +10,11 @@
background-image: image-set(url(foo.jpg) 2x);
}
.class {
background: -webkit-filter(url('image.jpg'), blur(2px));
background: filter(url('image.jpg'), blur(2px));
}
.class {
background: -webkit-filter(url('image.jpg'), blur(2px));
background: filter(url('image.jpg'), blur(2px));
}
.class {
background: url(image.jpg), -webkit-filter(url('image.jpg'), blur(2px));
background: url(image.jpg), filter(url('image.jpg'), blur(2px));
}

View File

@ -1,6 +1,3 @@
.class {
border-image: -webkit-linear-gradient(black, white) 20% fill stretch stretch;
border-image: -moz-linear-gradient(black, white) 20% fill stretch stretch;
border-image: -o-linear-gradient(black, white) 20% fill stretch stretch;
border-image: linear-gradient(black, white) 20% fill stretch stretch;
}

View File

@ -1,15 +1,9 @@
.class {
width: -webkit-calc(20px + 40px);
width: -moz-calc(20px + 40px);
width: calc(20px + 40px);
}
.class {
margin: -webkit-calc(5% + 5px) -webkit-calc(10% + 10px);
margin: -moz-calc(5% + 5px) -moz-calc(10% + 10px);
margin: calc(5% + 5px) calc(10% + 10px);
}
div {
background-size: -webkit-calc(20px);
background-size: -moz-calc(20px);
background-size: calc(20px);
}

View File

@ -19,9 +19,7 @@ h3 {
background-image: cross-fade(.59 url(foo.png), url(bar.png));
}
.foo {
background-image: -webkit-cross-fade(-webkit-linear-gradient(white, black), -webkit-radial-gradient(circle closest-corner, white, black), 0.59);
background-image: cross-fade(.59 -moz-linear-gradient(white, black), -moz-radial-gradient(circle closest-corner, white, black));
background-image: cross-fade(.59 -o-linear-gradient(white, black), -o-radial-gradient(circle closest-corner, white, black));
background-image: -webkit-cross-fade(linear-gradient(white, black), radial-gradient(circle closest-corner, white, black), 0.59);
background-image: cross-fade(.59 linear-gradient(white, black), radial-gradient(circle closest-corner, white, black));
}
.class {

View File

@ -0,0 +1,18 @@
@font-face {}
@-webkit-keyframes anim {}
@font-face {}
@keyframes anim {}
@font-face {}
@font-face {}
@-webkit-keyframes anim {
0% {
color: red
}
}
@font-face {}
@keyframes anim {
0% {
color: red
}
}
@font-face {}

View File

@ -0,0 +1,30 @@
@font-face{}
@-webkit-keyframes anim {}
@font-face{}
@-moz-keyframes anim {}
@-o-keyframes anim {}
@keyframes anim {}
@font-face{}
@font-face{}
@-webkit-keyframes anim {
0% {
color: red;
}
}
@font-face{}
@-moz-keyframes anim {
0% {
color: red;
}
}
@-o-keyframes anim {
0% {
color: red;
}
}
@keyframes anim {
0% {
color: red;
}
}
@font-face{}

View File

@ -0,0 +1,18 @@
@font-face{}
@-webkit-keyframes anim {}
@font-face{}
@keyframes anim {}
@font-face{}
@font-face{}
@-webkit-keyframes anim {
0% {
color: red;
}
}
@font-face{}
@keyframes anim {
0% {
color: red;
}
}
@font-face{}

View File

@ -0,0 +1,2 @@
@-webkit-keyframes anim {}
@keyframes anim {}

View File

@ -0,0 +1,4 @@
@-webkit-keyframes anim {}
@-moz-keyframes anim {}
@-o-keyframes anim {}
@keyframes anim {}

View File

@ -0,0 +1,2 @@
@-webkit-keyframes anim {}
@keyframes anim {}

View File

@ -0,0 +1,2 @@
@keyframes anim {}
@-webkit-keyframes anim {}

View File

@ -0,0 +1,4 @@
@-moz-keyframes anim {}
@-o-keyframes anim {}
@keyframes anim {}
@-webkit-keyframes anim {}

View File

@ -0,0 +1,2 @@
@keyframes anim {}
@-webkit-keyframes anim {}

View File

@ -91,8 +91,6 @@ a {
display: -moz-box;
display: -ms-flexbox;
display: flex;
flex: -webkit-calc(1em + 1px) 0 0;
flex: -moz-calc(1em + 1px) 0 0;
flex: calc(1em + 1px) 0 0;
}
.h {

View File

@ -18,7 +18,7 @@ strong {
}
div {
background-image: -webkit-radial-gradient(right, white, black), -webkit-repeating-linear-gradient(top left, black, white), -webkit-repeating-radial-gradient(bottom, aqua, red);
background-image: -moz-radial-gradient(right, white, black), -moz-repeating-linear-gradient(top left, black, white), -moz-repeating-linear-gradient(bottom, aqua, red);
background-image: -moz-radial-gradient(right, white, black), -moz-repeating-linear-gradient(top left, black, white), -moz-repeating-radial-gradient(bottom, aqua, red);
background-image: -o-radial-gradient(right, white, black), -o-repeating-linear-gradient(top left, black, white), -o-repeating-radial-gradient(bottom, aqua, red);
background-image: radial-gradient(to left, white, black), repeating-linear-gradient(to bottom right, black, white), repeating-radial-gradient(to top, aqua, red);
}

View File

@ -1,231 +1,111 @@
a {
background: -webkit-linear-gradient(99.5deg, white, black), -webkit-linear-gradient(220deg, black, white), -webkit-linear-gradient(45deg, black, white);
background: -moz-linear-gradient(99.5deg, white, black), -moz-linear-gradient(220deg, black, white), -moz-linear-gradient(45deg, black, white);
background: -o-linear-gradient(99.5deg, white, black), -o-linear-gradient(220deg, black, white), -o-linear-gradient(45deg, black, white);
background: linear-gradient(350.5deg, white, black), linear-gradient(-130deg, black, white), linear-gradient(45deg, black, white);
}
b {
background-image: -webkit-linear-gradient(rgba(0, 0, 0, 1), white), -webkit-linear-gradient(white, black);
background-image: -moz-linear-gradient(rgba(0, 0, 0, 1), white), -moz-linear-gradient(white, black);
background-image: -o-linear-gradient(rgba(0, 0, 0, 1), white), -o-linear-gradient(white, black);
background-image: linear-gradient(rgba(0, 0, 0, 1), white), linear-gradient(white, black);
}
strong {
background: -webkit-linear-gradient(bottom, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -moz-linear-gradient(bottom, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -o-linear-gradient(bottom, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: linear-gradient(to top, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
}
div {
background-image: -webkit-radial-gradient(right, white, black), -webkit-repeating-linear-gradient(top left, black, white), -webkit-repeating-radial-gradient(bottom, aqua, red);
background-image: -moz-radial-gradient(right, white, black), -moz-repeating-linear-gradient(top left, black, white), -moz-repeating-linear-gradient(bottom, aqua, red);
background-image: -o-radial-gradient(right, white, black), -o-repeating-linear-gradient(top left, black, white), -o-repeating-radial-gradient(bottom, aqua, red);
background-image: radial-gradient(to left, white, black), repeating-linear-gradient(to bottom right, black, white), repeating-radial-gradient(to top, aqua, red);
}
.old-radial {
background: -webkit-radial-gradient(0 50%, ellipse farthest-corner, black, white);
background: -moz-radial-gradient(0 50%, ellipse farthest-corner, black, white);
background: -o-radial-gradient(0 50%, ellipse farthest-corner, black, white);
background: radial-gradient(0 50%, ellipse farthest-corner, black, white);
}
.simple1 {
background: -webkit-linear-gradient(black, white);
background: -moz-linear-gradient(black, white);
background: -o-linear-gradient(black, white);
background: linear-gradient(black, white);
}
.simple2 {
background: -webkit-linear-gradient(right, black 0%, rgba(0, 0, 0, 0.5) 50%, white 100%);
background: -moz-linear-gradient(right, black 0%, rgba(0, 0, 0, 0.5) 50%, white 100%);
background: -o-linear-gradient(right, black 0%, rgba(0, 0, 0, 0.5) 50%, white 100%);
background: linear-gradient(to left, black 0%, rgba(0, 0, 0, 0.5) 50%, white 100%);
}
.simple3 {
background: -webkit-linear-gradient(right, black 50%, white 100%);
background: -moz-linear-gradient(right, black 50%, white 100%);
background: -o-linear-gradient(right, black 50%, white 100%);
background: linear-gradient(to left, black 50%, white 100%);
}
.simple4 {
background: -webkit-linear-gradient(left bottom, black, white);
background: -moz-linear-gradient(left bottom, black, white);
background: -o-linear-gradient(left bottom, black, white);
background: linear-gradient(to right top, black, white);
}
.direction {
background: -webkit-linear-gradient(top left, black, rgba(0, 0, 0, 0.5), white);
background: -moz-linear-gradient(top left, black, rgba(0, 0, 0, 0.5), white);
background: -o-linear-gradient(top left, black, rgba(0, 0, 0, 0.5), white);
background: linear-gradient(top left, black, rgba(0, 0, 0, 0.5), white);
}
.silent {
background: -webkit-linear-gradient(top left, black, white);
}
.radial {
background: -webkit-radial-gradient(0 50%, farthest-side, white, black);
background: -moz-radial-gradient(0 50%, farthest-side, white, black);
background: -o-radial-gradient(0 50%, farthest-side, white, black);
background: radial-gradient(farthest-side at 0 50%, white, black);
}
.second {
background: red -webkit-linear-gradient(red, blue);
background: red -moz-linear-gradient(red, blue);
background: red -o-linear-gradient(red, blue);
background: red linear-gradient(red, blue);
background: url('logo.png'), -webkit-linear-gradient(#fff, #000);
background: url('logo.png'), -moz-linear-gradient(#fff, #000);
background: url('logo.png'), -o-linear-gradient(#fff, #000);
background: url('logo.png'), linear-gradient(#fff, #000);
}
.px {
background: -webkit-linear-gradient(black 0, white 100px);
background: -moz-linear-gradient(black 0, white 100px);
background: -o-linear-gradient(black 0, white 100px);
background: linear-gradient(black 0, white 100px);
}
.list {
list-style-image: -webkit-linear-gradient(white, black);
list-style-image: -moz-linear-gradient(white, black);
list-style-image: -o-linear-gradient(white, black);
list-style-image: linear-gradient(white, black);
}
.mask {
-webkit-mask: -webkit-linear-gradient(white, black);
mask: -webkit-linear-gradient(white, black);
mask: -moz-linear-gradient(white, black);
mask: -o-linear-gradient(white, black);
-webkit-mask: linear-gradient(white, black);
mask: linear-gradient(white, black);
}
.newline {
background-image: -webkit-linear-gradient(white, black), -webkit-linear-gradient(black, white);
background-image: -moz-linear-gradient(white, black), -moz-linear-gradient(black, white);
background-image: -o-linear-gradient(white, black), -o-linear-gradient(black, white);
background-image: linear-gradient(white, black), linear-gradient(black, white);
}
.convert {
background: -webkit-linear-gradient(bottom, white, black);
background: -moz-linear-gradient(bottom, white, black);
background: -o-linear-gradient(bottom, white, black);
background: linear-gradient(0deg, white, black);
background: -webkit-linear-gradient(left, white, black);
background: -moz-linear-gradient(left, white, black);
background: -o-linear-gradient(left, white, black);
background: linear-gradient(90deg, white, black);
background: -webkit-linear-gradient(top, white, black);
background: -moz-linear-gradient(top, white, black);
background: -o-linear-gradient(top, white, black);
background: linear-gradient(180deg, white, black);
background: -webkit-linear-gradient(right, white, black);
background: -moz-linear-gradient(right, white, black);
background: -o-linear-gradient(right, white, black);
background: linear-gradient(270deg, white, black);
}
.grad {
background: -webkit-linear-gradient(89.1deg, white, black);
background: -moz-linear-gradient(89.1deg, white, black);
background: -o-linear-gradient(89.1deg, white, black);
background: linear-gradient(1grad, white, black);
}
.rad {
background: -webkit-linear-gradient(32.704deg, white, black);
background: -moz-linear-gradient(32.704deg, white, black);
background: -o-linear-gradient(32.704deg, white, black);
background: linear-gradient(1rad, white, black);
}
.turn {
background: -webkit-linear-gradient(342deg, white, black);
background: -moz-linear-gradient(342deg, white, black);
background: -o-linear-gradient(342deg, white, black);
background: linear-gradient(0.3turn, white, black);
}
.norm {
background: -webkit-linear-gradient(right, white, black);
background: -moz-linear-gradient(right, white, black);
background: -o-linear-gradient(right, white, black);
background: linear-gradient(-90deg, white, black);
}
.mask {
-webkit-mask-image: -webkit-radial-gradient(86% 86%, circle, transparent 8px, black 8px);
mask-image: -webkit-radial-gradient(86% 86%, circle, transparent 8px, black 8px);
mask-image: -moz-radial-gradient(86% 86%, circle, transparent 8px, black 8px);
mask-image: -o-radial-gradient(86% 86%, circle, transparent 8px, black 8px);
-webkit-mask-image: radial-gradient(circle at 86% 86%, transparent 8px, black 8px);
mask-image: radial-gradient(circle at 86% 86%, transparent 8px, black 8px);
}
.cover {
background: -webkit-radial-gradient(center, ellipse cover, white, black);
background: -moz-radial-gradient(center, ellipse cover, white, black);
background: -o-radial-gradient(center, ellipse cover, white, black);
background: radial-gradient(ellipse cover at center, white, black);
}
.contain {
background: -webkit-radial-gradient(center, contain, white, black);
background: -moz-radial-gradient(center, contain, white, black);
background: -o-radial-gradient(center, contain, white, black);
background: radial-gradient(contain at center, white, black);
}
.no-div {
background: -webkit-linear-gradient(black);
background: -moz-linear-gradient(black);
background: -o-linear-gradient(black);
background: linear-gradient(black);
}
.background-shorthand {
background: -webkit-radial-gradient(#FFF, transparent) 0 0/ cover no-repeat #F0F;
background: -moz-radial-gradient(#FFF, transparent) 0 0/ cover no-repeat #F0F;
background: -o-radial-gradient(#FFF, transparent) 0 0/ cover no-repeat #F0F;
background: radial-gradient(#FFF, transparent) 0 0/ cover no-repeat #F0F;
}
.background-advanced {
background: -webkit-radial-gradient(5px 15px, ellipse farthest-corner, rgba(214, 168, 18, 0.7) 0%, rgba(255, 21, 177, 0.7) 50%, rgba(210, 7, 148, 0.7) 95%), -webkit-radial-gradient(#FFF, transparent), url(path/to/image.jpg) 50% / cover;
background: -moz-radial-gradient(5px 15px, ellipse farthest-corner, rgba(214, 168, 18, 0.7) 0%, rgba(255, 21, 177, 0.7) 50%, rgba(210, 7, 148, 0.7) 95%), -moz-radial-gradient(#FFF, transparent), url(path/to/image.jpg) 50% / cover;
background: -o-radial-gradient(5px 15px, ellipse farthest-corner, rgba(214, 168, 18, 0.7) 0%, rgba(255, 21, 177, 0.7) 50%, rgba(210, 7, 148, 0.7) 95%), -o-radial-gradient(#FFF, transparent), url(path/to/image.jpg) 50% / cover;
background: radial-gradient(ellipse farthest-corner at 5px 15px, rgba(214, 168, 18, 0.7) 0%, rgba(255, 21, 177, 0.7) 50%, rgba(210, 7, 148, 0.7) 95%), radial-gradient(#FFF, transparent), url(path/to/image.jpg) 50% / cover;
}
.multiradial {
-webkit-mask-image: -webkit-radial-gradient(100% 50%, circle closest-corner, #000, transparent);
mask-image: -webkit-radial-gradient(100% 50%, circle closest-corner, #000, transparent);
mask-image: -moz-radial-gradient(100% 50%, circle closest-corner, #000, transparent);
mask-image: -o-radial-gradient(100% 50%, circle closest-corner, #000, transparent);
-webkit-mask-image: radial-gradient(circle closest-corner at 100% 50%, #000, transparent);
mask-image: radial-gradient(circle closest-corner at 100% 50%, #000, transparent);
}
.broken {
-webkit-mask-image: -webkit-radial-gradient(white, black);
mask-image: -webkit-radial-gradient(white, black);
mask-image: -moz-radial-gradient(white, black);
mask-image: -o-radial-gradient(white, black);
-webkit-mask-image: radial-gradient(white, black);
mask-image: radial-gradient(white, black);
}
.loop {
background-image: url("https://test.com/lol(test.png"), -webkit-radial-gradient(yellow, black, yellow);
background-image: url("https://test.com/lol(test.png"), -moz-radial-gradient(yellow, black, yellow);
background-image: url("https://test.com/lol(test.png"), -o-radial-gradient(yellow, black, yellow);
background-image: url("https://test.com/lol(test.png"), radial-gradient(yellow, black, yellow);
}
.more {
background: -webkit-linear-gradient(bottom, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -moz-linear-gradient(bottom, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -o-linear-gradient(bottom, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: linear-gradient(to top, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -webkit-linear-gradient(right, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -moz-linear-gradient(right, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -o-linear-gradient(right, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: linear-gradient(to left, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -moz-linear-gradient(top, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -o-linear-gradient(top, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -webkit-linear-gradient(left, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -moz-linear-gradient(left, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -o-linear-gradient(left, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: linear-gradient(to right, transparent, rgba(0, 0, 0, 0.8) 20px, #000 30px, #000) no-repeat;
background: -webkit-linear-gradient(56.667deg, white, black), -webkit-linear-gradient(220deg, black, white), -webkit-linear-gradient(45deg, black, white);
background: -moz-linear-gradient(56.667deg, white, black), -moz-linear-gradient(220deg, black, white), -moz-linear-gradient(45deg, black, white);
background: -o-linear-gradient(56.667deg, white, black), -o-linear-gradient(220deg, black, white), -o-linear-gradient(45deg, black, white);
background: linear-gradient(33.333deg, white, black), linear-gradient(-130deg, black, white), linear-gradient(45deg, black, white);
}
.broken {
background-image: -webkit-linear-gradient(to, red 50%);
background-image: -moz-linear-gradient(to, red 50%);
background-image: -o-linear-gradient(to, red 50%);
background-image: linear-gradient(to, red 50%);
}

View File

@ -1,7 +1,5 @@
@keyframes anim {
from {
top: -webkit-calc(10% + 10px);
top: -moz-calc(10% + 10px);
top: calc(10% + 10px);
transform: rotate(10deg);
}
@ -14,8 +12,6 @@
display: flex;
}
to {
top: -webkit-calc(10%);
top: -moz-calc(10%);
top: calc(10%);
transform: rotate(0);
}

View File

@ -7,10 +7,7 @@
mask-image: none;
}
.class {
-webkit-mask-image: -webkit-linear-gradient(#fff);
mask-image: -webkit-linear-gradient(#fff);
mask-image: -moz-linear-gradient(#fff);
mask-image: -o-linear-gradient(#fff);
-webkit-mask-image: linear-gradient(#fff);
mask-image: linear-gradient(#fff);
}
.class {

View File

@ -10,8 +10,6 @@ main {
}
div {
width: 100%;
max-width: -webkit-calc(100% - __styled-jsx-placeholderpx - var(--geist-gap-double));
max-width: -moz-calc(100% - __styled-jsx-placeholderpx - var(--geist-gap-double));
max-width: calc(100% - __styled-jsx-placeholderpx - var(--geist-gap-double));
}
@media (max-width: __styled-jsx-placeholderpx) {

View File

@ -120,7 +120,5 @@ div {
transform: rotate(10deg);
}
div {
transition: -webkit-calc(1s);
transition: -moz-calc(1s);
transition: calc(1s);
}

View File

@ -82,8 +82,6 @@ p {
width: fill-available;
}
.ok {
width: -webkit-calc(100% - var(--jqx-circular-progress-bar-fill-size));
width: -moz-calc(100% - var(--jqx-circular-progress-bar-fill-size));
width: calc(100% - var(--jqx-circular-progress-bar-fill-size));
}
.grid {