我有一个Web组件,它的模板看起来像这样...
<template>
<div class="jrg-app-header">
<slot name="jrg-app-header-1"></slot>
<slot name="jrg-app-header-2"></slot>
<slot name="jrg-app-header-3"></slot>
</div>
</template>
我基本上是在尝试将最后一个广告位的内容设置为flex:1;
样式。是否有CSS查询可以做到这一点?我尝试了一些清单
::slotted(*):last-child{
flex:1;
}
但是没有用。如何设置最后一个插槽对象的样式?
答案 0 :(得分:1)
从语法文档中:https://developer.mozilla.org/en-US/docs/Web/CSS/::slotted
:: slotted(
)
伪选择器放在方括号内: :: slotted(*:last-child)
customElements.define('my-table', class extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' })
.appendChild(document.importNode(document.querySelector('#t1').content, true));
}
})
<template id="t1">
<style>
:host {
display: flex;
padding:1em;
}
::slotted(*:first-child) {
background: green;
}
::slotted(*:last-child) {
background: yellow;
flex:1;
}
::slotted(*:first-of-type) {
border: 2px solid red;
}
::slotted(*:last-of-type) {
border: 2px dashed red;
}
</style>
<slot name="column"></slot>
</template>
<my-table>
<div slot="column">Alpha</div><div slot="column">Bravo</div><div slot="column">Charlie</div>
</my-table>
<my-table>
<div slot="column">Delta</div><div slot="column">Echo</div>
</my-table>
JSFiddle游乐场:https://jsfiddle.net/CustomElementsExamples/1fh08wgz/