当前位置: 首页 > 面试题库 >

为什么不能将特定于供应商的伪元素/类组合到一个规则集中?

明正德
2023-03-14
问题内容

在CSS中,可以placeholder使用供应商特定的伪类和伪元素的组合为输入中的文本设置样式(以获得最佳的跨浏览器覆盖)。

这些都具有相同的基本属性(即:文本样式和颜色声明)。

但是,尽管我不可避免地希望使用相同的样式,而与浏览器供应商无关,但似乎无法将它们组合成一个逗号分隔的选择器(就像您想要两个选择器共享的其他CSS一样)相同的样式)。

例如,我倾向于使用以下四个选择器来定位占位符样式:

  • input:-moz-placeholder
  • input::-moz-placeholder
  • input:-ms-input-placeholder
  • input::-webkit-input-placeholder

(尽管:-moz-placeholder 不赞成这样做,::-moz-placeholder但仅在FireFox
19发行时才发生,因此目前都需要两者都可以提供更好的浏览器支持)。

令人沮丧的是,声明和赋予每种(相同)样式会导致CSS内的大量重复。

因此,为确保占位符文本右对齐和斜体,我将得出以下结论:

input:-moz-placeholder{
    font-style: italic;
    text-align: right;
}
input::-moz-placeholder{
    font-style: italic;
    text-align: right;
}
input:-ms-input-placeholder{
    font-style: italic;
    text-align: right;
}
input::-webkit-input-placeholder{
    font-style: italic;
    text-align: right;
}

我真正想做的是将它们组合为一个逗号分隔的规则集,如下所示:

input:-moz-placeholder,
input::-moz-placeholder,
input:-ms-input-placeholder,
input::-webkit-input-placeholder{
    font-style: italic;
    text-align: right;
}

但是,尽管在少数情况下尝试过此操作,但这似乎从未奏效。这让我担心,CSS的某些基本部分我不了解。

谁能阐明为什么会这样?


问题答案:

CSS2.1 指出:

选择器(也见部分选择)包括了一切的(但不包括)第一个左花括号({)。选择器始终与声明块一起使用。当用户代理无法html" target="_blank">解析选择器时(即,它不是有效的CSS2.1),它必须忽略选择器以及随后的声明块(如果有)。

请注意,由于CSS2.1早于CSS3,因此在假设用户代理完全符合CSS2.1且理论上不存在CSS3的前提下编写“它不是有效的CSS
2.1”。在实践中,无论规范说“它不是有效的CSS”还是类似的含义,都应理解为“用户代理不理解”。

即,由于一个供应商的浏览器无法理解其他供应商的前缀,因此必须在伪类和伪元素选择器中删除任何包含那些无法识别的前缀的规则。1个

1 请注意,WebKit因部分违反此规则而臭名昭著:解析规则的选择器具有无法识别的前缀伪元素(在本例中为::-moz- placeholder)的规则没有问题。也就是说,:-moz-placeholder您的组合规则中的伪类将导致它无论如何都被破坏。



 类似资料:
  • 这是一个算法问题。如果我错过了Python中任何有帮助的现有函数,请大喊一声。 给定一组元素的,我们可以在Python中使用函数来找到所有唯一的k元素子集。让我们调用包含所有这些子集的集合。请注意,每个这样的子集都有不同的元素。 问题是两步走。首先,给定这些k-不同元素子集,我想组合(其中的一些),这样(组合只是一些子集的超集): > 构图中任意两个子集之间的交集为空 构图中所有子集的并集给出的正

  • 问题内容: 我正在尝试将伪元素与元素一起使用。 考虑一下HTML和CSS … HTML CSS 这不会产生预期的效果(已在Chrome 13和Firefox 6中测试)。但是,它可以使用或元素。 为什么不? 有没有一种方法可以使伪元素与元素一起使用? 问题答案: 规范说 … 注意。该规范并未完全定义替换元素(例如HTML中的IMG)以及与替换元素的交互。这将在以后的规范中更详细地定义。 我猜这意味

  • 我正在开发big Java enterpriseware(如果您介意的话,MatrixOne/EnoviaV6)。维护者提供了某种Javadoc,看起来非常普通的Javadoc,我可以在浏览器中以HTML的形式阅读。 在了解到Javadoc可以在project和级别定义之后,我尝试同时进行这两种定义,知道: javadoc文件夹包含一个文件,该文件似乎正确地定义了文档包 javadoc文件夹包含典

  • 我试图找到这个按钮并点击它。但我得到了这个错误: 我注意到它正在寻找不同的字符串bc它在类名前面添加了这个点。这是问题吗? 非常感谢。

  • 问题内容: 谁能解释为什么在Python中将单个元素元组解释为该元素? 和 他们为什么不只是将元组打印为? 请参阅以下示例: 问题答案: 单个元素元组永远不会被视为包含的元素。括号对分组最有用,而不是对元组的创建。逗号会这样做。 他们为什么不只将(1,)打印为(1)? 可能是因为打印内置容器类型提供了一种表示形式,可用于通过表示重新创建容器对象,例如: 的docs在此方面提供了一些清晰度: 如果可