【发布时间】:2018-11-06 23:02:22
【问题描述】:
我正在编写一个 Vue 组件,它接受 2 个插槽:
<template>
<div class="Component">
<div class="Component-Label">
<slot
name="label"
class="Component-LabelInner"
/>
</div>
<div class="Component-Input">
<slot
name="input"
class="Component-InputInner"
/>
</div>
</div>
</template>
<style scoped>
.Component { ... }
.Component-Label { ... }
.Component-LabelInner { ... }
.Component-Input { ... }
.Component-InputInner { width: 100%; ... }
</style>
出于布局目的,我绝对需要对 <slot> 元素应用一些样式 - 具有 Component-LabelInner 和 Component-InputInner 类的样式。
(准确地说,我需要将规则width: 100% 应用到Component-InputInner,因为通常我会传递到<input> 元素,并且我希望传递到那里的所有内容都延伸到容器。)
问题是<slot> 元素被提供给插槽的内容替换后,class 属性没有被继承(似乎没有在插槽上继承属性)和 .Component-LabelInner 和 @987654331 的 CSS 选择器@不工作。
你能以某种方式将 CSS 类添加到 <slot> 被替换的元素吗?
【问题讨论】:
-
<div class="Component"缺少> -
真 ;)。已更正。
-
您没有尝试将
class="bla"分配给<slot>,而是尝试将该类添加到包含元素引用中?另外,你确定你需要width: 100%- 我的意思是你确定它与display属性值不是block或类似的无关吗? -
@RokoC.Buljan:我当然可以这样做,但这会破坏组件隔离的想法——我必须记住每次使用组件时都在组件外部添加该类。我正在寻找一个干净的解决方案,将所有内容都封装在组件中。
-
@RokoC.Buljan:我需要
width: 100%,因为通常我会将<input>传递给input插槽。<input>s 默认情况下没有display: block,因此除非您明确告诉它们(我正在尝试这样做),否则它们不会调整大小以适应容器。
标签: javascript html css vue.js vue-component