| <!DOCTYPE html> | |
| <title>CSS Test: Properties allowed on ::first-line pseudo elements</title> | |
| <link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#first-line-styling"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <style> | |
| #target::first-line {} | |
| #target { visibility: hidden; } | |
| </style> | |
| <div id="target">text</div> | |
| <script> | |
| let style; | |
| const target = document.querySelector("#target"); | |
| const defaultComputedStyle = getComputedStyle(target); | |
| test(() => { | |
| var styleRule = document.styleSheets[0].cssRules[0]; | |
| assert_equals(styleRule.selectorText, "#target::first-line", "make sure we have the correct style rule"); | |
| style = styleRule.style; | |
| }, "retrieve style rule"); | |
| const validProperties = { | |
| backgroundAttachment: "fixed", | |
| backgroundBlendMode: "hue", | |
| backgroundClip: "padding-box", | |
| backgroundColor: "rgb(10, 20, 30)", | |
| backgroundImage: "linear-gradient(rgb(0, 0, 0), rgb(255, 255, 255))", | |
| backgroundOrigin: "border-box", | |
| backgroundPosition: "50% 50%", | |
| backgroundRepeat: "no-repeat", | |
| backgroundSize: "10px 20px", | |
| color: "rgba(10, 20, 30, 0.4)", | |
| fontFamily: "sans-serif", | |
| fontFeatureSettings: '"vert" 2', | |
| fontKerning: "none", | |
| fontSize: "30px", | |
| fontSizeAdjust: "0.5", | |
| fontStyle: "italic", | |
| fontVariant: "small-caps", | |
| fontWeight: "900", | |
| fontVariationSettings: '"XHGT" 0.7', | |
| letterSpacing: "12px", | |
| opacity: "0.5", | |
| textDecoration: "overline wavy rgb(10, 20, 30)", | |
| textJustify: "none", | |
| textShadow: "rgb(10, 20, 30) 10px 20px 30px", | |
| textTransform: "capitalize", | |
| textUnderlinePosition: "under", | |
| verticalAlign: "12%", | |
| wordSpacing: "12px" | |
| }; | |
| const invalidProperties = { | |
| border: "40px dotted rgb(10, 20, 30)", | |
| borderImage: "linear-gradient(rgb(0, 0, 0), rgb(255, 255, 255)) 10% / 20 / 30px repeat", | |
| borderRadius: "10px 20px", | |
| margin: "10px 20px 30px 40px", | |
| padding: "10px 20px 30px 40px", | |
| position: "absolute", | |
| transition: "transform 1s", | |
| transform: "rotate(45deg)", | |
| wordBreak: "break-all" | |
| }; | |
| function testFirstLineProperty(property, rule, expected, reason) { | |
| test(function() { | |
| style[property] = ""; | |
| style[property] = rule; | |
| assert_equals(getComputedStyle(target, "::first-line")[property], expected); | |
| style[property] = ""; | |
| }, reason); | |
| } | |
| for (let property in validProperties) { | |
| testFirstLineProperty(property, validProperties[property], validProperties[property], | |
| property + " should be applied to first-line pseudo elements."); | |
| } | |
| for (let property in invalidProperties) { | |
| testFirstLineProperty(property, invalidProperties[property], defaultComputedStyle[property], | |
| property + " should not be applied to first-line pseudo elements."); | |
| } | |
| </script> |