【问题标题】:Less mixins, variable colours specificity更少的混合,可变的颜色特异性
【发布时间】:2015-09-15 09:24:26
【问题描述】:

我有一个设计,我需要能够根据 cms 中的输入更改页面上的颜色。

为此,我将一个类添加到一个包含的 div 中,并且我将根据该周围的类更改颜色。

会有一定数量的颜色。 (8,我想。还没有决定。)

我的想法是使用 mixin 来实现这一点。例如。

示例 HTML

<div class="color-1>
    <h1 class="h1">My Title</h1>
</div>

LESS Mixin 示例

.color() {
    @color_1: red;
    .color-1 & {
        color: @color_1;
    }
    @color_2: blue;
    .color-2 & {
        color: @color_2;
    }
    //etc.....
    //I have a similar mixin for background-color -> .bg-color();
}

少例子

.h1 {
    .color();
    background-color: #fff;
    @media screen and (min-width: 960px) {
        color: #fff;
        .bg-color();
    }
}

问题

问题是移动版的特异性高于桌面版。

呈现的 CSS 示例

//Could be color-2, color-3 etc. depending on class, doesn't matter for this example
.color-1 .h1 { //This would override the media query below due to 2 classes
    color:red;
}
.h1 {
    @media screen and (min-width: 960px) {
        color: #fff;
        background:color: red;
    }
}

此问题将影响页面的其余部分。有没有更好的方法来完成我正在寻找的东西而不会到处粘贴重要的标签?

________________编辑________________

为了清楚起见,我正在构建的网站将允许特定级别的登录用户更改其个人页面的主颜色,我仍然需要客户决定有多少颜色,但我认为它会在 8 左右. 而不是写出每一个,或者为每一个都有一个单独的样式表(维护这将是可怕的),我决定为它创建一个 Mixin。将有多种背景颜色和文本颜色需要更改,并且由于设计原因,它们需要在移动桌面和平板电脑上更改为不同的颜色。

【问题讨论】:

  • 作为一个快速修复我正在使用.h1 { [class*=' color-'] &amp; { color: #fff; } } 但如果可能的话我想要一个更好的解决方案
  • 您也可以使用!important 覆盖特异性计算。
  • 系统发育,如问题中所述,如果完全可能,我想避免使用!important。我将在几个地方需要它,并且使用重要完全否定了 css 级联的想法。如果在另一个实例中需要再次更改任何内容,我需要用页面下方的另一个标记覆盖该重要标记。可能有更好的方法可以编写LESS mixin?不过,感谢您的贡献。

标签: css less less-mixins


【解决方案1】:

考虑到 CSS 的本质,您的代码一定有问题,因为浏览器总是会将您提供给特定选择器的最后一个值取走。

例如下面的 h1 会是红色的:

<h1 class="foo">Headline</h1>

.foo { color: blue; }
.foo { color: red; }

如果媒体查询匹配,当你在媒体查询中给它一个不同的值时,它会改变它的颜色。因此,在下面的示例中,当视口宽度超过 399 像素时,h1 将变为绿色:

<h1 class="foo">Headline</h1>

.foo { color: blue; }
.foo { color: red; }
@media all and (min-width: 400px) {
  .foo { color: green; }
}

让我感到困惑的是您的 LESS 代码与输出 CSS 中的内容之间的区别。我建议你再看看你的选择器和/或变量。缩进也可能很混乱,因此您可能应该选择移动优先的 LESS 文件,然后为媒体查询创建其他文件(并将这些文件导入主 less 文件中,保持顺序不变)。

【讨论】:

  • 嗨,马可。如果选择器具有相同的权重,浏览器将始终采用您给特定选择器的最后一个值。但是在我的示例中,您可以看到第一个选择器具有两个类选择器 .color-* .h1 {} 的权重,而最后一个选择器只有 1 个 .h1 {}。这是一个移动优先的例子,我不确定我在哪里建议它不是?这是一个codepen示例的链接,也许这会更清楚,因为您可以使用切换按钮codepen.io/ben_sterling/pen/BozqVJ看到编译后的CSS
猜你喜欢
  • 2015-10-07
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 2021-11-20
  • 2013-07-03
  • 2011-08-29
  • 2020-01-01
  • 1970-01-01
相关资源
最近更新 更多