【问题标题】:Getting the default state color (currentColor) in a different state such as hovered获取不同状态的默认状态颜色(currentColor),例如悬停
【发布时间】:2016-05-19 19:51:07
【问题描述】:

是否有像currentcolor 这样的关键字可以让我们在默认状态下获取类的颜色?

例如,我正在尝试创建可重复使用的按钮样式,而在我尝试创建 :hovered 状态之前,currentcolor 关键字有很大帮助。

.outline-btn {
  background-color: transparent;
  border: 1px solid currentColor;
  padding: 0.5em 1.5em;
}

.rounded-btn {
  border-radius: 50px;
}

默认状态看起来是我们想要的方式,更改 colorfont-size 也会调整其余属性。

但我们希望 :hovered 状态反转颜色(在本例中为白色文本和橙色背景)

.outline-btn:hover, .outline-btn:active, .outline-btn:focus {
  background-color: currentcolor;
  color: white;
}

但由于在这种状态下color 变为白色,其他所有内容也变为白色。

有没有一种方法可以实现我们想要的行为,而无需为我们想要的不同按钮样式创建多个类?

悬停效果:

另外我忘了提到我正在使用SCSS,如果有帮助的话。

感谢您的宝贵时间 :)

【问题讨论】:

  • 这听起来有点像您想使用LESSSASS 来构建您的CSS
  • @Andrew 我正在使用SCSS,但不是很熟悉。 SCSS 中是否有可以解决此问题的功能?
  • 这里有没有反转背景颜色的关键字...没有。 currentcolor 正是它所说的...... 当前颜色。
  • 如果有一些额外的包装元素,或者更确切地说是按钮标签的内部跨度,这将相当容易,但当然,我们真的不喜欢使用额外的标记。使用 SCSS,您实际上所做的只是将一些硬编码的值移动到预处理器变量中,这也很好,但这取决于您当前声明这些颜色值的位置。
  • @Paulie_D 是的,我并没有完全试图反转颜色。就在:hover 中,它应该使用之前的颜色作为背景颜色和白色文本。

标签: css sass


【解决方案1】:

如果您考虑一下,您实际上是希望 currentColor 充当一个变量——以保持一个恒定值。即将推出的 CSS variables 将对此有所帮助,但在它们得到更好的支持之前,我们有 Sass 变量。

通过将颜色定义为变量,您可以非常详细而具体地写出它们,但只需要在需要时在一处更改颜色。

$btn-color: red;
$btn-bg: transparent;

.outline-btn {
  background-color: $btn-bg;
  border: 1px solid $btn-color;
  padding: 0.5em 1.5em;
  color: $btn-outline-color;

  &:hover,
  &:active,
  &:focus {
    background-color: $btn-outline-color;
    color: $btn-outline-bg;
  }
}

您可以更进一步,将这些变量设置为与之前设置的用于 body/html 颜色背景的变量相同,例如 $bg-bg: $body-bg; $btn-color: $text-color;。我也喜欢currentColor,虽然没有那么干净,但在这种情况下可能更合适。

然后您可以按照 user6292372 的说明将其构建为 mixin。比如:

@mixin buttonBuilder($color, $bg) {
  background-color: $bg;
  border: 1px solid $color;
  color: $color;

  &:hover {
    background-color: $color;
    color: $bg;  
  }
}

...

.outline-btn {
  @include button-builder($btn-color, $btn-bg);
}

然后您可以轻松地制作多个变体。

【讨论】:

  • 感谢您的回答,我主要是想看看我可以从 CSS 中获得多少可重用性。我最终为不同的颜色创建了不同的类,但我将尝试您的解决方案,它看起来非常有趣。
  • 不客气,@SoroushMirzaei。我的方法也是为不同颜色的按钮创建类,尽管我在示例中没有明确说明。我更新了最后的代码块,展示了如何使用 mixin 创建.outline-btn 类。祝你好运!
【解决方案2】:

这不能仅使用 css 完成

如果你使用像 SCSS 或 Less 这样的辅助函数,你可以让自己成为一个 mixin,你只插入你想要的颜色作为参数。

但是你仍然需要创建几个类(只要你需要不同的颜色),但可以像这样重用你的 mixin(scss 示例):

@mixin invertHover($color) {
  background-color: transparent;
  border: 1px solid $color;
  color: transparent;

  &:hover {
    background-color: $color;
    border: 1px solid transparent;
    color: $color;  
  }
}

.blue-box { @include invertHover('blue'); }
.black-box { @include invertHover('#000000'); }

【讨论】:

  • 我认为在代码块的第 4 行,您的意思是将 color: $color; 设置为 transparent,然后在悬停时将 color 设置为 transparent
猜你喜欢
  • 2017-02-02
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-15
  • 1970-01-01
  • 2022-01-24
  • 2011-06-18
相关资源
最近更新 更多