/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ /* eslint-disable dot-notation */ /* vim: set ts=2 sw=2 sts=2 et: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// Utility function. Returns true if the given boolean pref... // (a) exists and (b) is set to true. // Otherwise, returns false. // // This function also reports a test failure if the pref isn't set at all. This // ensures that we remove pref-checks from mochitests (instead of accidentally // disabling the tests that are controlled by that check) when we remove a // mature feature's pref from the rest of the codebase. function IsCSSPropertyPrefEnabled(prefName) { try { if (SpecialPowers.getBoolPref(prefName)) { returntrue;
}
} catch (ex) {
ok( false, "Failed to look up property-controlling pref '" +
prefName + "' (" +
ex + ")"
);
}
// Properties that we handle as shorthands but were longhands either in // the current spec or earlier versions of the spec. const CSS_TYPE_SHORTHAND_AND_LONGHAND = 2;
// Legacy shorthand properties, that behave mostly like an alias // (CSS_TYPE_SHORTHAND_AND_LONGHAND) but not quite because their syntax may not // match, plus they shouldn't serialize in cssText. const CSS_TYPE_LEGACY_SHORTHAND = 3;
// Each property has the following fields: // domProp: The name of the relevant member of nsIDOM[NS]CSS2Properties // inherited: Whether the property is inherited by default (stated as // yes or no in the property header in all CSS specs) // type: see above // alias_for: optional, indicates that the property is an alias for // some other property that is the preferred serialization. (Type // must not be CSS_TYPE_LONGHAND.) // logical: optional, indicates that the property is a logical directional // property. (Type must be CSS_TYPE_LONGHAND.) // axis: optional, indicates that the property is an axis-related logical // directional property. (Type must be CSS_TYPE_LONGHAND and 'logical' // must be true.) // initial_values: Values whose computed value should be the same as the // computed value for the property's initial value. // other_values: Values whose computed value should be different from the // computed value for the property's initial value. // XXX Should have a third field for values whose computed value may or // may not be the same as for the property's initial value. // invalid_values: Things that are not values for the property and // should be rejected, but which are balanced and should not absorb // what follows // quirks_values: Values that should be accepted in quirks mode only, // mapped to the values they are equivalent to. // unbalanced_values: Things that are not values for the property and // should be rejected, and which also contain unbalanced constructs // that should absorb what follows // // Note: By default, an alias is assumed to accept/reject the same values as // the property that it aliases, and to have the same prerequisites. So, if // "alias_for" is set, the "*_values" and "prerequisites" fields can simply // be omitted, and they'll be populated automatically to match the aliased // property's fields.
// Helper functions used to construct gCSSProperties.
function initial_font_family_is_sans_serif() { // The initial value of 'font-family' might be 'serif' or // 'sans-serif'. const meta = document.createElement("meta");
meta.setAttribute("style", "font: initial;");
document.documentElement.appendChild(meta); const family = getComputedStyle(meta).fontFamily;
meta.remove(); return family == "sans-serif";
}
var gInitialFontFamilyIsSansSerif = initial_font_family_is_sans_serif();
// shared by background-image and border-image-source var validNonUrlImageValues = [ "-moz-element(#a)", "-moz-element( #a )", "-moz-element(#a-1)", "-moz-element(#a\\:1)", /* gradient torture test */ "linear-gradient(red, blue)", "linear-gradient(red, yellow, blue)", "linear-gradient(red 1px, yellow 20%, blue 24em, green)", "linear-gradient(red, yellow, green, blue 50%)", "linear-gradient(red -50%, yellow -25%, green, blue)", "linear-gradient(red -99px, yellow, green, blue 120%)", "linear-gradient(#ffff00, #ef3, rgba(10, 20, 30, 0.4))", "linear-gradient(rgba(10, 20, 30, 0.4), #ffff00, #ef3)", "linear-gradient(red, green calc(50% + 20px), blue)", "linear-gradient(180deg, red, blue)",
"linear-gradient(to top, red, blue)", "linear-gradient(to bottom, red, blue)", "linear-gradient(to left, red, blue)", "linear-gradient(to right, red, blue)", "linear-gradient(to top left, red, blue)", "linear-gradient(to top right, red, blue)", "linear-gradient(to bottom left, red, blue)", "linear-gradient(to bottom right, red, blue)", "linear-gradient(to left top, red, blue)", "linear-gradient(to left bottom, red, blue)", "linear-gradient(to right top, red, blue)", "linear-gradient(to right bottom, red, blue)",
"linear-gradient(.414rad, red 50%, 50%, blue 50%)", "linear-gradient(.414rad, red 50%, 20%, blue 50%)", "linear-gradient(.414rad, red 50%, 30%, blue 10%)", "linear-gradient(to right bottom, red, 20%, green 50%, 65%, blue)", "linear-gradient(to right bottom, red, 20%, green 10%, blue)", "linear-gradient(to right bottom, red, 50%, green 50%, 50%, blue)", "linear-gradient(to right bottom, red, 0%, green 50%, 100%, blue)",
"linear-gradient(red 0% 100%)", "linear-gradient(red 0% 50%, blue 50%)", "linear-gradient(red 0% 50%, blue 50% 100%)", "linear-gradient(red 0% 50%, 0%, blue 50%)", "linear-gradient(red 0% 50%, 0%, blue 50% 100%)",
/* Unitless 0 is valid as an <angle> */ "linear-gradient(0, red, blue)",
"radial-gradient(farthest-corner at top left, red, blue)", "radial-gradient(ellipse closest-corner at 45px, red, blue)", "radial-gradient(circle farthest-side at 45px, red, blue)", "radial-gradient(closest-side ellipse at 50%, red, blue)", "radial-gradient(farthest-corner circle at 4em, red, blue)",
"radial-gradient(30% 40% at top left, red, blue)", "radial-gradient(50px 60px at 15% 20%, red, blue)", "radial-gradient(7em 8em at 45px, red, blue)",
"radial-gradient(circle at 15% 20%, red, blue)",
"radial-gradient(red 0% 100%)", "radial-gradient(red 0% 50%, blue 50%)", "radial-gradient(red 0% 50%, blue 50% 100%)", "radial-gradient(red 0% 50%, 0%, blue 50%)", "radial-gradient(red 0% 50%, 0%, blue 50% 100%)",
"repeating-radial-gradient(farthest-corner at top left, red, blue)", "repeating-radial-gradient(closest-corner ellipse at 45px, red, blue)", "repeating-radial-gradient(farthest-side circle at 45px, red, blue)", "repeating-radial-gradient(ellipse closest-side at 50%, red, blue)", "repeating-radial-gradient(circle farthest-corner at 4em, red, blue)",
"repeating-radial-gradient(30% 40% at top left, red, blue)", "repeating-radial-gradient(50px 60px at 15% 20%, red, blue)", "repeating-radial-gradient(7em 8em at 45px, red, blue)",
// When that happens this should be moved to the `invalid` list. "repeating-radial-gradient(circle closest-side at left 0px bottom 7in, hsl(2,2%,5%), rgb(1,6,0))",
...(IsCSSPropertyPrefEnabled("layout.css.cross-fade.enabled")
? [ "cross-fade(red, blue)", "cross-fade(red)", "cross-fade(red 50%)", // see: <https://github.com/w3c/csswg-drafts/issues/5333>. This // may become invalid depending on how discussion on that issue // goes. "cross-fade(red -50%, blue 150%)", "cross-fade(red -50%, url(www.example.com))",
"repeating-conic-gradient(from 0 at 0 0, red, blue)", "repeating-conic-gradient(from 40deg at 50%, red, blue)", "repeating-conic-gradient(from 0.4turn at left 30%, red, blue)", "repeating-conic-gradient(from 200grad at calc(100px + -25%) top, red, blue)", "repeating-conic-gradient(from 5rad at 10px, red, blue)",
// 2008 GRADIENTS: -webkit-gradient() // ---------------------------------- // linear w/ no color stops (valid) and a variety of position values: "-webkit-gradient(linear, 1 2, 3 4)", "-webkit-gradient(linear,1 2,3 4)", // (no extra space) "-webkit-gradient(linear , 1 2 , 3 4 )", // (lots of extra space) "-webkit-gradient(linear, 1 10% , 0% 4)", // percentages "-webkit-gradient(linear, +1.0 -2%, +5.3% -0)", // (+/- & decimals are valid) "-webkit-gradient(linear, left top, right bottom)", // keywords "-webkit-gradient(linear, right center, center top)", "-webkit-gradient(linear, center center, center center)", "-webkit-gradient(linear, center 5%, 30 top)", // keywords mixed w/ nums
// radial w/ no color stops (valid) and a several different radius values: "-webkit-gradient(radial, 1 2, 8, 3 4, 9)", "-webkit-gradient(radial, 0 0, 10, 0 0, 5)",
// radial w/ color stops // (mostly leaning on more-robust 'linear' tests above; just testing a few // examples w/ radial as a sanity-check): "-webkit-gradient(radial, 1 2, 8, 3 4, 9, from(lime))", "-webkit-gradient(radial, 1 2, 8, 3 4, 9, to(blue))", "-webkit-gradient(radial, 1 2, 8, 3 4, 9, color-stop(0.5, #00f), color-stop(0.8, rgba(100, 200, 0, 0.5)))",
// 2011 GRADIENTS: -webkit-linear-gradient(), -webkit-radial -gradient() // --------------------------------------------------------------------- // Basic linear-gradient syntax (valid when prefixed or unprefixed): "-webkit-linear-gradient(red, green, blue)",
// Angled linear-gradients (valid when prefixed or unprefixed): "-webkit-linear-gradient(135deg, red, blue)", "-webkit-linear-gradient( 135deg , red , blue )", "-webkit-linear-gradient(280deg, red 60%, blue)",
// Linear-gradient with unitless-0 <angle> (normally invalid for <angle> // but accepted here for better webkit emulation): "-webkit-linear-gradient(0, red, blue)",
/* don't allow more than two positions with multi-position syntax */ "linear-gradient(red 0% 50% 100%)", "linear-gradient(red 0% 50% 75%, blue 75%)", "linear-gradient(to bottom, red 0% 50% 100%)", "linear-gradient(to bottom, red 0% 50% 75%, blue 75%)", "radial-gradient(red 0% 50% 100%)", "radial-gradient(red 0% 50% 75%, blue 75%)", "radial-gradient(center, red 0% 50% 100%)", "radial-gradient(center, red 0% 50% 75%, blue 75%)", "conic-gradient(red 0% 50% 100%)", "conic-gradient(red 0% 50% 75%, blue 75%)", "conic-gradient(center, red 0% 50% 100%)", "conic-gradient(center, red 0% 50% 75%, blue 75%)",
// missing color in color stop "conic-gradient(red 50deg, blue 0.3turn, yellow 200grad, orange 60%, 5rad)",
"-moz-linear-gradient(unset, 10px 10px, from(blue))", "-moz-linear-gradient(unset, 10px 10px, blue 0)", "-moz-repeating-linear-gradient(unset, 10px 10px, blue 0)",
// linear w/ invalid units in <point> expression "-webkit-gradient(linear, 1px 2, 3 4)", "-webkit-gradient(linear, 1 2, 3 4px)", "-webkit-gradient(linear, 1px 2px, 3px 4px)", "-webkit-gradient(linear, 1 2em, 3 4)",
// linear w/ <radius> (only valid for radial) "-webkit-gradient(linear, 1 2, 8, 3 4, 9)",
// linear w/ out-of-order position keywords in <point> expression // (horizontal keyword is supposed to come first, for "x" coord) "-webkit-gradient(linear, 0 0, top right)", "-webkit-gradient(linear, bottom center, 0 0)", "-webkit-gradient(linear, top bottom, 0 0)", "-webkit-gradient(linear, bottom top, 0 0)", "-webkit-gradient(linear, bottom top, 0 0)",
// Linear syntax that's invalid for both -webkit & unprefixed, but valid // for -moz: // * initial <legacy-gradient-line> which includes a length: "-webkit-linear-gradient(10px, red, blue)", "-webkit-linear-gradient(10px top, red, blue)", // * initial <legacy-gradient-line> which includes a side *and* an angle: "-webkit-linear-gradient(bottom 30deg, red, blue)", "-webkit-linear-gradient(30deg bottom, red, blue)", "-webkit-linear-gradient(10px top 50deg, red, blue)", "-webkit-linear-gradient(50deg 10px top, red, blue)", // * initial <legacy-gradient-line> which includes explicit "center": "-webkit-linear-gradient(center, red, blue)", "-webkit-linear-gradient(left center, red, blue)", "-webkit-linear-gradient(top center, red, blue)", "-webkit-linear-gradient(center top, red, blue)",
// Linear syntax that's invalid for -webkit, but valid for -moz & unprefixed: // * "to" syntax: "-webkit-linear-gradient(to top, red, blue)",
// * <shape> followed by angle: "-webkit-radial-gradient(circle 10deg, red, blue)",
// Radial syntax that's invalid for both -webkit & -moz, but valid for // unprefixed: // * "<shape> at <position>" syntax: "-webkit-radial-gradient(circle at left bottom, red, blue)", // * explicitly-sized shape: "-webkit-radial-gradient(circle 10px, red, blue)", "-webkit-radial-gradient(ellipse 40px 20px, red, blue)",
// Radial syntax that's invalid for both -webkit & unprefixed, but valid // for -moz: // * initial angle "-webkit-radial-gradient(30deg, red, blue)", // * initial angle/position combo "-webkit-radial-gradient(top 30deg, red, blue)", "-webkit-radial-gradient(left top 30deg, red, blue)", "-webkit-radial-gradient(10px 20px 30deg, red, blue)",
// Conic gradients should not support prefixed syntax "-webkit-gradient(conic, 1 2, 3 4, color-stop(0, lime))", "-webkit-conic-gradient(red, blue)", "-moz-conic-gradient(red, blue)", "-webkit-repeating-conic-gradient(red, blue)", "-moz-repeating-conic-gradient(red, blue)",
...(IsCSSPropertyPrefEnabled("layout.css.cross-fade.enabled")
? [ "cross-fade(red blue)", "cross-fade()", "cross-fade(50%, blue 50%)", // Old syntax "cross-fade(red, white, 50%)", // see: <https://github.com/w3c/csswg-drafts/issues/5333>. This // may become invalid depending on how discussion on that issue // goes. "cross-fade(red, 150%, blue)", "cross-fade(red auto, blue 10%)",
"circle()", "circle(at center)", "circle(at top 0px left 20px)", "circle(at bottom right)", "circle(20%)", "circle(300px)", "circle(calc(20px + 30px))", "circle(farthest-side)", "circle(closest-side)", "circle(closest-side at center)", "circle(farthest-side at top)", "circle(20px at top right)", "circle(40% at 50% 100%)", "circle(calc(20% + 20%) at right bottom)", "circle() padding-box",
"ellipse()", "ellipse(at center)", "ellipse(at top 0px left 20px)", "ellipse(at bottom right)", "ellipse(20% 20%)", "ellipse(300px 50%)", "ellipse(calc(20px + 30px) 10%)", "ellipse(farthest-side closest-side)", "ellipse(closest-side farthest-side)", "ellipse(farthest-side farthest-side)", "ellipse(closest-side closest-side)", "ellipse(closest-side closest-side at center)", "ellipse(20% farthest-side at top)", "ellipse(20px 50% at top right)", "ellipse(closest-side 40% at 50% 100%)", "ellipse(calc(20% + 20%) calc(20px + 20cm) at right bottom)",
"circle(at)", "circle(at 20% 20% 30%)", "circle(20px 2px at center)", "circle(2at center)", "circle(closest-corner)", "circle(at center top closest-side)", "circle(-20px)", "circle(farthest-side closest-side)", "circle(20% 20%)", "circle(at farthest-side)", "circle(calc(20px + rubbish))", "circle(at top left 20px)",
"ellipse(at)", "ellipse(at 20% 20% 30%)", "ellipse(20px at center)", "ellipse(-20px 20px)", "ellipse(closest-corner farthest-corner)", "ellipse(20px -20px)", "ellipse(-20px -20px)", "ellipse(farthest-side)", "ellipse(20%)", "ellipse(at farthest-side farthest-side)", "ellipse(at top left calc(20px + rubbish))", "ellipse(at top left 20px)",
"polygon(at)", "polygon(at 20% 20% 30%)", "polygon(20px at center)", "polygon(2px 2at center)", "polygon(closest-corner farthest-corner)", "polygon(at center top closest-side closest-side)", "polygon(40% at 50% 100%)", "polygon(40% farthest-side 20px at 50% 100%)",
if (IsCSSPropertyPrefEnabled("layout.css.basic-shape-rect.enabled")) {
basicShapeXywhRectValues.push( "rect(auto auto auto auto)", "rect(1px 2% auto 4em)", "rect(1px 2% auto 4em round 0px)", "rect(1px 2% auto 4em round 0px 1%)", "rect(1px 2% auto 4em round 0px 1% 2px)", "rect(1px 2% auto 4em round 0px 1% 2px 3em)"
);
}
var basicShapeShapeValues = []; var basicShapeShapeValuesWithFillRule = []; if (IsCSSPropertyPrefEnabled("layout.css.basic-shape-shape.enabled")) {
basicShapeShapeValuesWithFillRule.push( "shape(evenodd from 0px 0px, line to 10px 10px)", "shape(nonzero from 0px 0px, line to 10px 10px)"
);
basicShapeShapeValues.push( "shape(from 0px 0%, line to 10px 10%)", "shape(from 10px 10px, move by 10px 5px, line by 20px 40%, close)", "shape(from 10px 10px, hline by 10px, vline to 5rem)", "shape(from 10px 10px, vline by 5%, hline to 1vw)", "shape(from 10px 10px, curve to 50px 20px via 10rem 1%)", "shape(from 10px 10px, smooth to 50px 20px via 10rem 1%)", "shape(from 10% 1rem, arc to 50px 1pt of 20% cw large rotate 25deg)"
);
// It's fine to include this for properties which don't support shape(), // e.g. shape-outside, because they must reject these values.
basicShapeInvalidValues.push( "shape()", "shape(evenodd, from 0px 0px)", "shape(from 0px 0px line to 10px 10px)", "shape(from 0px 0px)", "shape(close)", "shape(nonzero, close)"
);
}
if (/* mozGradientsEnabled */ true) { // Maybe one day :( // Extend gradient lists with valid/invalid moz-prefixed expressions:
validNonUrlImageValues.push( "-moz-linear-gradient(red, blue)", "-moz-linear-gradient(red, yellow, blue)", "-moz-linear-gradient(red 1px, yellow 20%, blue 24em, green)", "-moz-linear-gradient(red, yellow, green, blue 50%)", "-moz-linear-gradient(red -50%, yellow -25%, green, blue)", "-moz-linear-gradient(red -99px, yellow, green, blue 120%)", "-moz-linear-gradient(#ffff00, #ef3, rgba(10, 20, 30, 0.4))", "-moz-linear-gradient(rgba(10, 20, 30, 0.4), #ffff00, #ef3)",
"-moz-linear-gradient(top, red, blue)",
"-moz-linear-gradient(to top, red, blue)", "-moz-linear-gradient(to bottom, red, blue)", "-moz-linear-gradient(to left, red, blue)", "-moz-linear-gradient(to right, red, blue)", "-moz-linear-gradient(to top left, red, blue)", "-moz-linear-gradient(to top right, red, blue)", "-moz-linear-gradient(to bottom left, red, blue)", "-moz-linear-gradient(to bottom right, red, blue)", "-moz-linear-gradient(to left top, red, blue)", "-moz-linear-gradient(to left bottom, red, blue)", "-moz-linear-gradient(to right top, red, blue)", "-moz-linear-gradient(to right bottom, red, blue)",
"-moz-radial-gradient(99deg to farthest-corner, red, blue)", "-moz-radial-gradient(-1.2345rad circle, red, blue)", "-moz-radial-gradient(ellipse 399grad to closest-corner, red, blue)", "-moz-radial-gradient(circle 399grad to farthest-side, red, blue)",
"-moz-radial-gradient(at top left 99deg, to farthest-corner, red, blue)", "-moz-radial-gradient(circle at 15% 20% -1.2345rad, red, blue)", "-moz-radial-gradient(to top left at 30% 40%, red, blue)", "-moz-radial-gradient(ellipse at 45px 399grad, to closest-corner, red, blue)", "-moz-radial-gradient(at 45px 399grad to farthest-side circle, red, blue)",
"-moz-radial-gradient(to 50%, red, blue)", "-moz-radial-gradient(circle to 50%, red, blue)", "-moz-radial-gradient(circle to 43px 43px, red, blue)", "-moz-radial-gradient(circle to 50% 50%, red, blue)", "-moz-radial-gradient(circle to 43px 50%, red, blue)", "-moz-radial-gradient(circle to 50% 43px, red, blue)", "-moz-radial-gradient(ellipse to 43px, red, blue)", "-moz-radial-gradient(ellipse to 50%, red, blue)",
"-moz-linear-gradient(to 0 0, red, blue)", "-moz-linear-gradient(to 20% bottom, red, blue)", "-moz-linear-gradient(to center 20%, red, blue)", "-moz-linear-gradient(to left 35px, red, blue)", "-moz-linear-gradient(to 10% 10em, red, blue)", "-moz-linear-gradient(to 44px top, red, blue)", "-moz-linear-gradient(to top left 45deg, red, blue)", "-moz-linear-gradient(to 20% bottom -300deg, red, blue)", "-moz-linear-gradient(to center 20% 1.95929rad, red, blue)", "-moz-linear-gradient(to left 35px 30grad, red, blue)", "-moz-linear-gradient(to 10% 10em 99999deg, red, blue)", "-moz-linear-gradient(to 44px top -33deg, red, blue)", "-moz-linear-gradient(to -33deg, red, blue)", "-moz-linear-gradient(to 30grad left 35px, red, blue)", "-moz-linear-gradient(to 10deg 20px, red, blue)", "-moz-linear-gradient(to .414rad bottom, red, blue)",
"-moz-linear-gradient(to top top, red, blue)", "-moz-linear-gradient(to bottom bottom, red, blue)", "-moz-linear-gradient(to left left, red, blue)", "-moz-linear-gradient(to right right, red, blue)",
"-moz-repeating-linear-gradient(10px 10px, 20px, 30px 30px, 40px, blue 0, red 100%)", "-moz-repeating-radial-gradient(20px 20px, 10px 10px, from(green), to(#ff00ff))", "-moz-repeating-radial-gradient(10px 10px, 20%, 40px 40px, 10px, from(green), to(#ff00ff))", "-moz-repeating-linear-gradient(10px, 20px, 30px, 40px, #00ccff 50%)", "-moz-repeating-linear-gradient(40px 40px, 10px 10px, blue 0 fuchsia 10% red 100%)", "-moz-repeating-linear-gradient(20px 20px 30px, 10px 10px, red 0, #ff0000 100%)", "-moz-repeating-radial-gradient(left top, center, 20px 20px, 10px, from(blue), to(red))", "-moz-repeating-linear-gradient(left left, top top, blue 0)", "-moz-repeating-linear-gradient(inherit, 10px 10px, blue 0)", "-moz-repeating-linear-gradient(left left blue red)", "-moz-repeating-linear-gradient()",
"-moz-repeating-linear-gradient(to 0 0, red, blue)", "-moz-repeating-linear-gradient(to 20% bottom, red, blue)", "-moz-repeating-linear-gradient(to center 20%, red, blue)", "-moz-repeating-linear-gradient(to left 35px, red, blue)", "-moz-repeating-linear-gradient(to 10% 10em, red, blue)", "-moz-repeating-linear-gradient(to 44px top, red, blue)", "-moz-repeating-linear-gradient(to top left 45deg, red, blue)", "-moz-repeating-linear-gradient(to 20% bottom -300deg, red, blue)", "-moz-repeating-linear-gradient(to center 20% 1.95929rad, red, blue)", "-moz-repeating-linear-gradient(to left 35px 30grad, red, blue)", "-moz-repeating-linear-gradient(to 10% 10em 99999deg, red, blue)", "-moz-repeating-linear-gradient(to 44px top -33deg, red, blue)", "-moz-repeating-linear-gradient(to -33deg, red, blue)", "-moz-repeating-linear-gradient(to 30grad left 35px, red, blue)", "-moz-repeating-linear-gradient(to 10deg 20px, red, blue)", "-moz-repeating-linear-gradient(to .414rad bottom, red, blue)",
"-moz-repeating-linear-gradient(to top top, red, blue)", "-moz-repeating-linear-gradient(to bottom bottom, red, blue)", "-moz-repeating-linear-gradient(to left left, red, blue)", "-moz-repeating-linear-gradient(to right right, red, blue)",
"-moz-repeating-radial-gradient(to top left at 30% 40%, red, blue)", "-moz-repeating-radial-gradient(ellipse at 45px closest-corner, red, blue)", "-moz-repeating-radial-gradient(circle at 45px farthest-side, red, blue)",
/* Valid only when unprefixed */ "-moz-radial-gradient(at top left, red, blue)", "-moz-radial-gradient(at 20% bottom, red, blue)", "-moz-radial-gradient(at center 20%, red, blue)", "-moz-radial-gradient(at left 35px, red, blue)", "-moz-radial-gradient(at 10% 10em, red, blue)", "-moz-radial-gradient(at 44px top, red, blue)", "-moz-radial-gradient(at 0 0, red, blue)",
"-moz-radial-gradient(farthest-corner at top left, red, blue)", "-moz-radial-gradient(ellipse closest-corner at 45px, red, blue)", "-moz-radial-gradient(circle farthest-side at 45px, red, blue)", "-moz-radial-gradient(closest-side ellipse at 50%, red, blue)", "-moz-radial-gradient(farthest-corner circle at 4em, red, blue)",
"-moz-radial-gradient(30% 40% at top left, red, blue)", "-moz-radial-gradient(50px 60px at 15% 20%, red, blue)", "-moz-radial-gradient(7em 8em at 45px, red, blue)"
);
}
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.41Bemerkung:
(vorverarbeitet)
¤