【问题标题】:Can I make a custom colour definitions that I can share between CSS, JS and HTML?我可以自定义颜色定义,以便在 CSS、JS 和 HTML 之间共享吗?
【发布时间】:2010-01-18 17:02:20
【问题描述】:

我有一个蓝色的颜色,我想在我的应用程序的许多地方使用它,目前我正在我的 CSS 中的样式之间复制和粘贴它。有没有一种方法可以定义我可以在我的 CSS、我的 HTML 和我的 JS 之间共享的标准颜色、“蓝色”、“红色”等常量?

我想说(在某个地方,最好是 CSS)

myblue = #33CC99

在 CSS 中说...

background-color:myblue;

在 HTML 中说...

<td color="myblue"/>

在 JavaScript 中

tag.style.backgroundColor = myblue;

我猜这是不可能的,谷歌什么也没找到,所以有人有什么想法吗?我怀疑我是唯一遇到这种情况的人。

【问题讨论】:

    标签: javascript html css color-scheme


    【解决方案1】:

    LESS 是一个非常有前途的产品,可以将变量等高级表达式“编译”成 CSS。它需要红宝石。我还没用过,但绝对值得一看。

    更原始的方法是使用像 PHP 这样的服务器端脚本语言。

    你可以像这样在 PHP 中定义常量:

    define ("MYBLUE", "#33CC99");
    

    然后在需要的地方使用&lt;?=MYBLUE;?&gt;输出值

    最大的缺点:要在外部 css 和 js 文件中执行此操作,显然必须让 PHP 解释器解析它们,如果您有很多访问者,这在性能方面并不好。对于低流量的网站,这可能无关紧要。

    【讨论】:

      【解决方案2】:

      是的,这是不可能的。但是,您可以编写自己的 CSS 预处理器(或使用现有的预处理器之一),例如使用 PHP。最大的缺点是您必须使用 PHP 在整个站点上输出颜色代码,并且您的脚本看起来像

      tag.style.backgroundColor = <? echo $myblue; ?>
      

      在 CSS 中也是如此

      .someClass {
        background-color: <? echo $myblue ?>
      }
      

      或类似的东西。这也不是很好。当然,您可以使用您选择的任何服务器端脚本语言。据我判断,这是在整个网站中使用颜色常数的唯一可能性。

      你可以看看一些处理器:

      【讨论】:

        【解决方案3】:

        你可以看看HAML+SASS。虽然您不能同时为所有三种语言定义变量,但这两种语言可以让编写 HTML+CSS 变得更加容易。

        【讨论】:

          【解决方案4】:

          我将如何解决这个问题是在我的 CSS 中创建一个类。

          .color_class {color: #33CC99;}
          

          然后在我的 HTML 中调用它

          <td class="color_class" />
          

          您可以为一个 HTML 元素分配多个类。

          在 JS 中,只需命名类

          document.getElementById('id').className = 'color_class';
          

          当然,您可以随意选择元素。一个 JS 库可能有更简单的方法来分配 CSS 类。

          【讨论】:

          • 我可以通过JS连接类吗?如果是,那么这就是答案。
          • 我不明白为什么不这样做。我没有尝试过,但是使用上面的代码(未测试)来获取类并在最后连接你的类名。确保类名之间有空格。祝你好运!
          • 我稍后会去告诉你我的进展情况。
          【解决方案5】:

          要在不使用任何动态 CSS 的情况下实现这一点(例如,提供内容类型为 text/css 的 PHP 文件),最好的办法是将定义“主题”的位置分开。

          <script type="text/javascript">
             var theme = '#003366';
           </script>
          

          然后你可以使用一个 JavaScript 文件来写出基于主题的样式。

          但是,如果您能够使用 CSS 预处理器,请使用它。您将拥有更大的灵活性,并且代码将更易于维护。我几乎总是为 CSS 使用 PHP 或 JSP 页面。

          【讨论】:

            【解决方案6】:

            正如其他用户所指出的,除非您通过 CGI/PHP/ASP 脚本传递所有 HTML、JS 和 CSS 内容,否则您无法在直接的 HTML、JS 或 CSS 中执行此操作 - 这实际上并不是一个坏方法,因为它是易于维护。

            如果您在对包含的 CSS / JS 文件的引用中使用查询字符串 - 例如'/css/stylesheet.php?timestamp=2010-01-01+00:00:00',那么几乎所有客户端都会积极缓存您的 CSS/JS 文件,从而消除对使用脚本语言解析它们的负载可能产生的任何影响(虽然除非该网站可能特别繁忙,否则我不会对此过于关注)。

            如果您使用的是 Apache(很可能),另一种方法是使用 mod_set 之类的东西为您即时重写所有 HTML、JS 和 CSS 文件。如果您不熟悉配置 Apache(或正在使用其他 Web 服务器),这可能更难以支持。

            关于标签命名:

            无论使用哪种方法,我强烈建议使用清晰的标记系统来表示您的动态变量(例如 %MyBlue%)并考虑让变量名称具有代表性(例如 %HeadingBackgroundColor%、%FontColor%,即使两者都设置为 % MyBlue%),因为这可以防止事情在以后变得棘手(当您发现更改一个值具有预期的后果时)。

            使用更具代表性的名称乍一看似乎不必要地冗长,但在许多情况下会导致问题,因为当颜色与原始方案显着不同时,颜色最终会以意想不到的方式发生冲突(许多主流软件都是如此,是可换肤的——因为作者假设 %value1% 和 %value2% 总是一起出现,%value1% 和 %value3% 也是如此——这意味着主题化选项实际上受到了意外依赖的严重限制)。

            【讨论】:

              【解决方案7】:

              我在构建时通过 Freemarker 运行我的 CSS 文件来执行此操作。

              【讨论】:

                【解决方案8】:

                我不确定你的最终目标。如果要允许为网页选择多个主题之一,您可以简单地拥有多个 CSS 文件,以及用户首选样式表的 cookie/会话变量/数据库存储。那你就可以了

                 <link rel=<? echo stylepref; ?> type='text/css'>
                

                或者类似的东西

                如果您希望能够完全自定义网站,则需要上述答案之一。

                【讨论】:

                • 你离题了,再读一遍问题。我没有重新剥皮,我只是不想用幻数在代码周围重复一百万次颜色。这是除 HTML 之外的所有语言的基本良好编程习惯。
                【解决方案9】:

                CSS 中没有“变量”的概念,但我强烈建议不要做你正在做的事情。没有充分的理由不能将 CSS 表中的所有样式信息定义为 CSS 类。如果您这样做,然后仅在 html 和 javascript 中应用所述类,那么就复制和粘贴而言,这是一个主要的负担。

                其次,请记住,您可以为一个元素定义多个 CSS 类,例如

                <div class='blue-text white-background'>my content</div>
                

                然后您可以在 CSS 中独立定义它们,例如:

                .blue-text { color : Blue; }
                .white-background { background-color: white;}
                

                您甚至可以创建仅在两者都应用时生效的规则:

                .blue-text.white-background { color : AliceBlue; }
                

                如果您想动态生成颜色选择,唯一真正的方法是按照其他人的建议,即在部署之前预处理您的文件,或者让 CSS 动态生成并由您选择的语言提供服务。

                【讨论】:

                • 如何在 JS 中连接类?
                • JS 将整个类字符串视为文字。因此,您可以进行字符串解析并查找类的一部分(例如,使用 indexOf 或正则表达式),或者如果您想按顺序匹配所有类,然后直接比较它们。
                【解决方案10】:

                在纯客户端 CSS 分组选择器中,您可以在许多不同的元素上放置相同的颜色:

                p, .red, #sub, div a:link { color: #f00; }
                

                【讨论】:

                  猜你喜欢
                  • 2023-01-20
                  • 2021-04-26
                  • 2013-02-03
                  • 2018-12-01
                  • 2021-09-21
                  • 2022-11-27
                  • 2015-12-04
                  • 2021-01-13
                  • 2011-07-17
                  相关资源
                  最近更新 更多