css - 如何将 Flexbox 与 Web 组件和影子 DOM 一起使用

标签 css flexbox web-component shadow-dom stenciljs

我正在开发一个网络应用程序,该应用程序使用由 StencilJS 构建的网络组件。所有组件都启用了 Shadow DOM。许多组件使用“插槽”来接受子内容。

我在使用 Flexbox 布置此应用程序时遇到了一些问题。我经常遇到的一个场景是,我希望一个组件充当 Flexbox 容器,而它的子组件是 Flex 元素。

我怀疑 Shadow DOM 阻塞了我的 Flexbox。有没有办法让 Flexbox 与 Web 组件和 Shadow DOM 一起工作?

例子:

<web-component-a>
  <web-component-b></web-component-b>
  <web-component-b></web-component-b>
  <web-component-b></web-component-b>
</web-component-a>

最佳答案

您可以简单地设置 slot 元素的样式,如下所示:

class WebComponentA extends HTMLElement {
  constructor() {
    super();

    const shadowRoot = this.attachShadow({mode: 'open'});


    shadowRoot.innerHTML = `
      <style>
        slot {
          display: flex;
          flex-direction: row;
        }
      </style>
      <div>
        <slot></slot>
      </div>
    `;
  }

}

window.customElements.define('web-component-a', WebComponentA);

如果您有多个槽元素(命名槽),您可以使用基于 CSS 属性的选择器,例如:

slot[name=title] {}

如果您想从 Web 组件中覆盖开槽内容的样式,您可以使用 ::slotted()选择器:

slot::slotted(*) {
  font-size: 2rem;
}

关于css - 如何将 Flexbox 与 Web 组件和影子 DOM 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66511157/

相关文章:

javascript - 带有 window.open 的垂直滚动条

html - 将一个 div 的价格放在另一个 div 之上

javascript - D3 将鼠标悬停在圆环图切片上时突出显示相应的表格条目

css - 如何使 flexbox 元素大小相等?

html - 将列表对齐到 flexbox 中容器的左侧

html - 规范中不允许在自定义元素中使用自关闭标签的原因是什么?

angularjs - angular 1.5 组件/@binding 的默认值

html - 如何获得悬停时显示的 div,而不是将内容向下推到页面上?

html - Bootstrap 将按钮对齐到 flexbox 列的底部

polymer - state 和 setState 点亮元素在哪里?