Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

<!DOCTYPE html>
<html>
<head>
<title>CSS Shadow Parts - Interaction with pseudo-elements</title>
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
<link href="http://www.google.com/" rel="author" title="Google">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="support/shadow-helper.js"></script>
</head>
<body>
<style>
#c-e::part(before-p)::before { color: green; }
#c-e::part(after-p)::after { color: green; }
#c-e::part(placeholder-p)::placeholder { color: green; }
#c-e::part(selection-p)::selection { color: green; }
#c-e::part(first-line-p)::first-line { color: green; }
#c-e::part(first-letter-p)::first-letter { color: green; }
</style>
<script>installCustomElement("custom-element", "custom-element-template");</script>
<template id="custom-element-template">
<style>
#before-i::before { content: "this text"; color: red; }
#after-i::after { content: "this text"; color: red; }
#placeholder-i::placeholder { color: red; }
#selection-i::selection { color: red; }
#first-line-i::first-line { color: red; }
#first-letter-i::first-letter { color: red; }
</style>
<div>
The following text should be green:
<span id="before-i" part="before-p"></span>
</div>
<div>
The following text should be green:
<span id="after-i" part="after-p"></span>
</div>
<div>
The following text should be green:
<input id="placeholder-i" part="placeholder-p" placeholder="this text"></input>
</div>
<div>
The selected text should be green:
<div id="selection-i" part="selection-p">select some text</div>
</div>
<div>
The following text should be green:
<div id="first-line-i" part="first-line-p">this text<br>Not this</div>
</div>
<div>
The first letter should be green:
<div id="first-letter-i" part="first-letter-p"><p>this text</p></div>
</div>
</template>
<custom-element id="c-e"></custom-element>
<script>
"use strict";
const colorGreen = "rgb(0, 128, 0)";
test(function() {
const el = getElementByShadowIds(document, ["c-e", "before-i"]);
assert_equals(window.getComputedStyle(el, '::before').color, colorGreen);
}, "::before in selected host is styled");
test(function() {
const el = getElementByShadowIds(document, ["c-e", "after-i"]);
assert_equals(window.getComputedStyle(el, '::after').color, colorGreen);
}, "::after in selected host is styled");
test(function() {
const el = getElementByShadowIds(document, ["c-e", "placeholder-i"]);
assert_equals(window.getComputedStyle(el, '::placeholder').color, colorGreen);
}, "::placeholder in selected host is styled");
test(function() {
const el = getElementByShadowIds(document, ["c-e", "selection-i"]);
assert_equals(window.getComputedStyle(el, '::selection').color, colorGreen);
}, "::selection in selected host is styled");
test(function() {
const el = getElementByShadowIds(document, ["c-e", "first-line-i"]);
assert_equals(window.getComputedStyle(el, '::first-line').color, colorGreen);
}, "::first-line in selected host is styled");
test(function() {
const el = getElementByShadowIds(document, ["c-e", "first-letter-i"]);
assert_equals(window.getComputedStyle(el, '::first-letter').color, colorGreen);
}, "::first-letter in selected host is styled");
</script>
</body>
</html>