LitElement использует Shadow DOM для визуализации своего содержимого.Shadow DOM изолирует стиль CSS, определенный внутри, и предотвращает выбор внутреннего содержимого из внешнего источника с помощью селекторов CSS.По этой причине псевдокласс :target
не будет работать.
Вместо этого вы можете использовать стандартный (ванильный) пользовательский элемент вместо LitElement.
Без Shadow DOM:
class TargetTest extends HTMLElement {
connectedCallback() {
this.innerHTML = `
<div>
<span class="test" id="target-test">Hello from test</span>
</div>`
}
}
customElements.define('target-test-element', TargetTest)
.test { background: yellow }
.test:target { background: blue }
<target-test-element></target-test-element>
<a href="#target-test">Link</a>
В качестве альтернативы, если вы все еще хотите использовать Shadow DOM, вам следует установить свойство id
для самого пользовательского элемента.Это предполагает, что в пользовательском элементе есть только одна цель.
class TargetTest extends HTMLElement {
connectedCallback() {
this.attachShadow( { mode: 'open' } ).innerHTML = `
<style>
:host( :target ) .test { background-color: lightgreen }
</style>
<div>
<span class="test">Hello from test</span>
</div>`
}
}
customElements.define('target-test-element', TargetTest)
<target-test-element id="target-test"></target-test-element>
<a href="#target-test">Link</a>