oae*_*oae 8 svelte tailwind-css svelte-3
我想让这样的事情成为可能:
<div
class="overflow-scroll h-screen antialiased ..."
class:whiteTheme="bg-gray-100 text-gray-800 ..."
class:darkTheme="bg-blue-900 ..."
>
...
</div>
Run Code Online (Sandbox Code Playgroud)
因此,将始终应用一组类。一组仅当whiteTheme
为真时,另一组仅当darkTheme
为真时。
我知道我可以定义一个whiteTheme
和一个darkTheme
css 类并让它像那样工作
<div
class="overflow-scroll h-screen antialiased ..."
class:whiteTheme
class:darkTheme
>
Run Code Online (Sandbox Code Playgroud)
但关键是我想单独设计每个元素(尤其是在我的应用程序的开始阶段)。并且必须为不同类中的每个元素定义我的一组类......对我来说,使用 Tailwind.css 和对特定元素进行试验的目的(无需在 css 定义和元素定义之间来回跳转)。
我可以选择的另一种方式是:
<div
class="overflow-scroll h-screen antialiased ... {whiteTheme?'bg-gray-100 text-gray-800 ...':'bg-blue-900 ...'}">
Run Code Online (Sandbox Code Playgroud)
这没什么,但我很想通过在单独的属性中定义事物来提高可读性和可维护性......
所以我想知道是否有办法让它按照我想要的方式工作......例如,我可以轻松扩展 Svelte 编译器吗?
最好的约翰内斯
你很接近你的一个建议,但它与你想要的相反:
class:something={condition}
这将在满足条件时应用something类。
所以在你的情况下,你必须做
class:bg-gray-100={whiteTheme}
class:text-gray-800={whiteTheme}
Run Code Online (Sandbox Code Playgroud)
作为替代方案,你可以做
<script>
$: whiteThemeClasses = whiteTheme ? "gray text..." : "";
...
...class=" fixedclasses {whiteThemeClasses} {blackThemeClasses}
Run Code Online (Sandbox Code Playgroud)
您可以将 light 和 dark 的类列表放入字符串变量中,并根据商店中变量 darkTheme 的真实性在具有三元组的变量之间切换,以便它在更改时更新所有组件。
它允许您单独为浅色和深色主题设置每个组件的样式,由于空格分隔的字符串类似于我们使用 css 看到的字符串,因此大大提高了可读性,并且您可以将类列表放在顶部每个组件以保持可见性/易于访问。
<script>
let light = 'bg-gray-100 text-gray-800 shadow-xl';
let dark = 'bg-blue-900 text-white';
import { darkTheme } from './store.js';
</script>
<div class="overflow-scroll h-screen p-3 {$darkTheme? dark : light}" >
...
</div>
Run Code Online (Sandbox Code Playgroud)
编辑:
**这仅适用于 Tailwind 用户,不适用于您仍在尝试有条件地应用多个类的情况。
Tailwind 2 现在通过暗类为我们处理这个问题。
首先,您需要在文件中手动切换暗模式tailwind.config.js
。
然后您可以有条件地将深色类应用于单个顶级容器,并且嵌套在其中的所有组件都可以使用 dark:class-name 并且它将应用深色主题。无需传递状态或将带有暗变量的商店导入到每个组件中。
这是使用固定样式表的REPL,因为 Tailwind 2 CDN 不darkMode
作为类提供。
好吧,经过更多的挖掘,我决定采用以下模式:
<div
class="overflow-scroll
h-screen
antialiased
...
bg-gray-100
text-gray-800
...
dark:bg-blue-900
dark:text-yellow-200
..."
>
...
</div>
Run Code Online (Sandbox Code Playgroud)
active/selected
,我决定使用样式:import { darkTheme } from '../stores.js';
...
<div
class:selected
class:$darkTheme
...
<style>
.selected {
// all common styles
@apply cursor-default;
// all light styles
@apply text-blue-600;
@apply border-blue-600;
}
.selected.\$darkTheme {
// all dark styles
@apply text-yellow-700;
@apply border-yellow-700;
}
</style>
Run Code Online (Sandbox Code Playgroud)
我认为使用样式对于较小的组件来说还不错。然而,我仍然会发现在 Svelte 中定义自定义任务的可能性很有趣......或者更改语法,例如class:true/false={my classes ...}
一些附加说明:
与插件https://github.com/ChanceArthur/tailwindcss-dark-mode类似,我发现了一篇不错的博客文章,只需使用自定义定义即可产生相同的结果screen
: https: //stefanzweifel.io/posts/support -mojave-dark-mode-with-tailwind-css/。
然而,这仅仅依赖于媒体查询,所以如果你想在你的应用程序中有一个自定义的明/暗开关......我发现没有办法。
然而,使用这种方法的好处是您可以@apply
与它结合使用,而您目前无法使用该插件...(https://github.com/ChanceArthur/tailwindcss-dark-mode/issues/3)。
归档时间: |
|
查看次数: |
5608 次 |
最近记录: |