我可以将样式范围限定为动态 Svelte 组件吗?

Can I scope style to a dynamic Svelte component?

提问人:leactz 提问时间:11/17/2023 最后编辑:Mark Rotteveelleactz 更新时间:11/17/2023 访问量:24

问:

我在将作用域样式应用于动态纤细组件时遇到问题。我正在使用 mdsvex 在 +page.svelte 模板中呈现 markdown 内容。一些内容元(post.title、post.date)直接传送到 +page.svelte 模板,但内容是通过动态组件传送的:

// blog/[slug]/+page.svelte

<hgroup>
    <h1>{data.meta.title}<h1>
</hgroup>
<svelte:component this={data.content} />

我发现了如何将 Tailwind 类的范围限定为模板的内容,如下所示:

// blog/[slug]/+page.svelte

<style lang=postcss>
    h1 {
        @apply text-3xl font-bold text-primary-500
    }
</style>

如何让这些作用域内的类也应用于动态 Svelte 组件的内容?可能吗?

目前,作用域样式仅适用于 +page.svelte 中直接呈现的内容元。(这无关紧要,因为我可以简单地在这些元素上内联类,这是我无法在 markdown 内容上做的事情,这就是为什么包含 markdown 内容正文的动态组件的作用域样式很有用。

我希望这是有道理的,请为我指出正确的方向!

Tailwind-CSS svelte vite sveltekit postcss

评论


答:

0赞 brunnerh 11/17/2023 #1

您可以添加一个包装器,使用它来限定范围,然后 :global 将动态呈现内容中的元素作为目标:

<div class="wrapper">
  <svelte:component ... />
</div>
<style lang=postcss>
    .wrapper { display: contents; } /* if necessary for layout */
    .wrapper :global(.some-selector) {
        @apply font-bold
    }
</style>