如何设置Web组件中最后一个插入的元素的样式

时间:2019-12-27 21:19:30

标签: css web-component

我有一个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;
}

但是没有用。如何设置最后一个插槽对象的样式?

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/