样式化 Vue 插槽

Posted

技术标签:

【中文标题】样式化 Vue 插槽【英文标题】:Styling Vue Slot 【发布时间】:2018-04-29 06:32:31 【问题描述】:

有没有办法在 Vue 组件中设置插槽的样式?

<slot style="position: absolute"></slot>

<slot class="slot"></slot>

不工作。

【问题讨论】:

【参考方案1】:

将插槽包装在 &lt;div&gt; 中,并改为设置 &lt;div&gt; 的样式:

<div style="...">
  <slot></slot>
</div>

如果你真的需要设置 slot 元素的样式,你可以像这样使用 CSS 选择器:

<div class="wrapper">
  <slot></slot>
</div>
.wrapper > * 
  color: red;

【讨论】:

感谢您的回答。但是,如果将多个元素传递到插槽中,则该解决方案将不起作用。 .wrapper &gt; * 将针对每个插槽元素。如果您只需要定位特定的槽元素,则可以使用.wrapper &gt; *:nth-child(2).wrapper &gt; .child。你具体想做什么?您希望能够绑定每个插槽元素的动态style,还是使用外部 CSS 就足够了? 使用 div 或其他元素进行包装可以而且经常会破坏内容流......你突然有一个随机的 它不应该在,它可能没有表现得像插槽内容的必要样式。不幸的是,display: contents 没有得到很好的支持。 【参考方案2】:

您可以像这样从父级传递一个类:

在组件模板中:

<slot name="quoteText"></slot>

而当传递到插槽时:

<p slot="quoteText" class="mb-md-100">Text</p>

【讨论】:

【参考方案3】:

我找到了这样的出路。

    computed: 
        isAppBoxSlotActive() 
            return Boolean(this.$slots['app-box']);
        
    ,

    <div v-if="isAppBoxActive"
         :class="$style['app-box']">
        <slot name="app-box">...</slot>
    </div>

【讨论】:

以上是关于样式化 Vue 插槽的主要内容,如果未能解决你的问题,请参考以下文章

来自子组件的 Vue 3 插槽样式

如何正确使用 vue js Web 组件内部的插槽并应用样式

vue+elementUi自定义select标签样式图标左侧右侧插槽背景图片大小selectoption/deep/::v-deeppositionabsolute

Vue3样式引入和使用

vue slot插槽的使用

在Element表格中插入步骤条,并实现样式定制化