【问题标题】:Proper CSS syntax for assigning style attributes to a pseudo-class for multiple classes'?将样式属性分配给多个类的伪类的正确 CSS 语法?
【发布时间】:2015-04-26 12:55:54
【问题描述】:

我正在尝试为多个输入类的 placholder 伪类设置 color(字体颜色)属性。

(所以我希望所有具有 .red-va 或 .blue-va 类的输入都具有给定颜色的占位符文本)

我可以(并且已经)这样做了:

.red-va::-webkit-input-placeholder {
   color: white;
}

.red-va:-moz-placeholder { /* Firefox 18- */
   color: white;
}

.red-va::-moz-placeholder {  /* Firefox 19+ */
    color: white;
}

.red-va:-ms-input-placeholder {  
    color: white; 
}

.blue-va::-webkit-input-placeholder {
   color: white;
}

.blue-va:-moz-placeholder { /* Firefox 18- */
   color: white;
}

.blue-va::-moz-placeholder {  /* Firefox 19+ */
    color: white;
}

.blue-va:-ms-input-placeholder {  
    color: white; 
}

每个输入类基本上有两组 CSS,浏览器支持需要四种不同的方法。

有没有更优雅/更精简的方式来做到这一点?

【问题讨论】:

  • 为什么会有这么多变化?它们只是颜色;浏览器真的以不同的方式处理它们吗?还是您想对浏览器进行颜色编码?
  • @Robert Harvey:不是颜色,而是占位符选择器。欢迎使用 CSS。
  • 有可能(尽管没有必要)使用像 Sass 或 LESS 这样的 CSS 预处理器来减少这种情况(尽管最终它会在被浏览器解释时反编译成相同的东西)。
  • @TylerH 可以使用预处理器缩短编写的代码

标签: css css-selectors placeholder pseudo-class


【解决方案1】:

不幸的是,在不使用预处理器(因为这是 CSS)的情况下,您能做的最好的事情就是将 .red-va.blue-va 的每组供应商前缀分组,但不能将它们全部分组到一个规则集中:

.red-va::-webkit-input-placeholder, .blue-va::-webkit-input-placeholder {
   color: white;
}

.red-va:-moz-placeholder, .blue-va:-moz-placeholder {   /* Firefox 18- */
   color: white;
}

.red-va::-moz-placeholder, .blue-va::-moz-placeholder { /* Firefox 19+ */
    color: white;
}

.red-va:-ms-input-placeholder, .blue-va:-ms-input-placeholder {
    color: white; 
}

或者,如果您有能力更改标记,则可以通过向 .red-va.blue-va 添加一个公共类来进一步改进,这样您就不必为两者复制您的选择器 - 有效地将您当前的 CSS 减半有。

here 涵盖了您无法将它们全部归为一个规则集的原因。简而言之,这是因为如果浏览器无法识别选择器列表的任何部分,则需要删除整个规则集,这将由供应商前缀引起(在 Firefox 的情况下,还因为版本早于19 不识别伪元素语法)。

值得庆幸的是,带前缀的伪代码很快就会成为过去。

【讨论】:

  • 非常感谢 - 对这里异常行为的有趣解释。现在完全有道理。我已经按照你的建议做了:)
猜你喜欢
  • 2015-12-23
  • 1970-01-01
  • 2017-05-15
  • 2018-12-07
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
相关资源
最近更新 更多