使用主题覆盖 border-radius 变量

你好,

我尝试通过远程主题覆盖新的边框半径变量,但似乎核心的 :root 变量总是优先。如果我在管理后台创建一个主题组件,我可以覆盖这些变量。有没有办法通过主题来覆盖它们?我错过了什么? :slightly_smiling_face:

这个微小的改动非常有用,非常感谢!:heart:


好的,它按预期工作,只是我的测试站点在开玩笑。:slightly_smiling_face:

3 个赞

呃,这似乎不是个玩笑 :grinning_face_with_smiling_eyes: 使用远程主题时,我只能通过使用 !important 来覆盖它。

如果我像这样使用 :arrow_down_small:

$border-radius: 2em !important;

:root {
   --d-button-border-radius: #{$border-radius};
   --d-input-border-radius: #{$border-radius};
 }

否则,如果我像这样尝试 :arrow_down_small:

:root {
   --d-button-border-radius: 2em;
   --d-input-border-radius: 2em;
 }

那么核心的 :root 变量会被优先考虑。

我错过了什么?:thinking: 谢谢!:slightly_smiling_face:

2 个赞

在主题中测试时,它正在工作……核心根被主题根覆盖,正如预期的那样。

你能提供更多信息吗?你在哪里定义你的根?你的检查器看起来怎么样?

3 个赞

你好 Charlie,

谢谢你的检查 :slightly_smiling_face:

我尝试将其添加到 scss/custom-variables.scss 并将其导入到 common.scss。我也尝试直接将其添加到 common.scss

我刚注意到,如果没有为主题分配其他组件(在 admin 中创建),它就可以工作。如果我在 admin 中创建一个带有一些 CSS 的组件,那么它就无法覆盖我核心的 root 变量。

如果主题没有组件或组件 Common / CSS 为空,它就可以工作。

Screenshot 2022-11-24 at 18.22.24


如果我创建一个带有 Common / CSS 的组件并将其激活到主题。

那么它对我来说就无效了。

d-default-border-radiusd-select-body-border-radius 是自定义的。

感谢你的帮助! :slightly_smiling_face:

3 个赞

明白了。非常有趣。感谢您提供的清晰步骤。

我会看看我能做出什么。目前我怀疑是否会有比您已经使用的 !important 更好的解决方案,但了解它的工作原理以及原因将很有帮助。

2 个赞

嗯,是的,我可以重现这个问题……有点奇怪。

我有一个远程主题,其中 common.scss 只包含:

:root {
  --d-border-radius: 100px;
}

这有效,我得到了圆形的按钮和其他元素:

一旦我添加了一个包含 CSS 的本地主题组件,它就会中断。我创建了一个本地主题组件,其中 common.scss 只包含:

body {
  background: red;
}

我得到了红色的背景,但 border-radius 消失了:

同样的组件远程工作正常。我同时获得了红色背景和圆角边框。

@david/@pmusaraj 这与远程和本地主题的编译顺序有关吗?

5 个赞

我认为这与我们将 variables.scss 注入每个主题 CSS 文件有关。现在,我们在 variables.scss 中有这个:


:root {
  --topic-body-width: #{$topic-body-width};
  --topic-body-width-padding: #{$topic-body-width-padding};
  --topic-avatar-width: #{$topic-avatar-width};
  --d-border-radius: initial;
  --d-nav-pill-border-radius: var(--d-border-radius);
  --d-button-border-radius: var(--d-border-radius);
  --d-input-border-radius: var(--d-border-radius);
}

因为我们将该 SCSS 文件注入到每个主题和插件的 SCSS 文件中,所以它会被一遍又一遍地重复:

目前唯一可以覆盖它的方法是将覆盖添加到最后一个主题样式表中,只有这样它才会被最后输出。

我认为我们需要将这个 :root 声明移到核心中 variables.scss 之外的某个全局位置。

6 个赞

啊哈!非常感谢,我之前从未真正理解过它们为何重复,只是完全忽略了。

我已经将它们移到另一个文件中,这样就不会重复了,并且我已确认这解决了问题。

6 个赞