javascript - 以编程方式更改 CSS 中多个位置使用的原色

标签 javascript css sass

我的单页应用程序的主要颜色是以编程方式在客户端定义的。问题是它在我的代码中的许多地方都使用过。

例如。在加载时,我有(在 SCSS 中):

body {
  background-color: #XXXXXX;
}

.btn-primary {
  background-color: #XXXXXX;
}

.content ul li a {
  color: #XXXXXX;
  border: thin solid #XXXXXX;
  &:hover {
    background-color: #XXXXX;
    color: white;
  }
}

而且我需要在客户端的所有位置将#XXXXXX 替换为#YYYYYY

我看到的不同选项是:

1。隔离与颜色相关的 CSS,并用类包装

类似于:

body {
  background-color: #XXXXXX;
  .btn-primary {
    background-color: #XXXXXX;
  }

  .content ul li a {
    color: #XXXXXX;
    border-color: #XXXXXX;
    &:hover {
      background-color: #XXXXX;
    }
  }

  &.other-color {
    background-color: #YYYYYY;
    .btn-primary {
      background-color: #YYYYYY;
    }

    .content ul li a {
      color: #YYYYYY;
      border-color: #YYYYYY;
      &:hover {
        background-color: #YYYYYY;
      }
    }
  }
}

+ Pro 它最终会起作用

- 缺点 一点都不干!

2。使用一个肮脏的 JS,它会检查 #XXXXXX 的每一次出现,并在 DOM 中替换为 #YYYYYY

+ Pro 我觉得很干净

- 缺点 不确定是否可行

3。使用一个肮脏的 JS,它会检查 #XXXXXX 的每次出现,并在 CSS 文件中替换为 #YYYYYY

+ Pro 应该能胜任

- Con 不确定是否可行。而且感觉这不是正确的方法。

4。将 application.css 多次编译为 application-other-color.css 并相应地使用它。

+ Pro 非常容易实现(与其他解决方案相比)

- 缺点 用户需要加载不同的 Assets ,这对于 SPA 来说不是最佳选择

有没有人遇到过这个问题?有没有比这两个更好的解决方案?如果没有,你会推荐哪一个?我错过了一些优点/缺点吗?

最佳答案

基本上,#1,但我会以不同的方式构建它。如果它们确实是不同的状态/类,最好将它们分开,并按语义命名它们。

这样,如果您决定,例如,.body-content--error 也需要有绿色文本,或者其他什么,您可以轻松地编辑它。现在您只需要设置javascript切换类,很简单。

这实际上是非常枯燥的代码,因为 .body-content.body-content--error 是同一元素的不同状态。事实上,通过下面的代码,您可以将 body 的类设置为 class="body-content body-content--error" 并继承所有的 .body-content CSS,只需将 background-color 更改为 .body-content--error

$primary-color: #XXXXXX;
$error-color: #YYYYYY;

// Body content
.body-content {
  background-color: $primary-color;
  margin: 10px;
  padding: 10px;
}
.body-content--error {
  background-color: $error-color;
}

//Button (primary)
.btn-primary {
  background-color: $primary-color;
}
.btn-primary--error {
  background-color: $error-color;
}

// Links in the .content list
.content-list-link {
  color: $primary-color;
  border-color: $primary-color;
  &:hover {
    background-color: $primary-color;
  }
}
.content-list-link--error {
  color: $error-color;
  border-color: $error-color;
  &:hover {
    background-color: $error-color;
  }
}

关于javascript - 以编程方式更改 CSS 中多个位置使用的原色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31971253/

相关文章:

javascript - 如何在 Vuex 中存储非 react 性数据?

html - 如何使只读输入的行为像带有 css 的 div?

javascript - 删除类后 CSS 转换不起作用

css - 无法理解 Sass 中的 @extend ...

javascript - 如何将 typescript 类型添加到 ES6 箭头函数?

javascript - 如何使用 Pepper 机器人应用程序作为启动默认应用程序?

javascript - 无法加载配置 "prettier"以从

html - 如何去除行内li元素的默认外边距?

css - 变量在 SASS 中是全局的,但在 SCSS 中不是

css - Foundation 5 和页面打印