html控件的CSS级联规则

kud*_*lur 1 html css

为什么CSS规则不会自动级联到HTML控件(如输入)或选择并设置文本显示样式?

对于Ex:我在body标签上应用了一个css类,它将文本呈现为红色.由于级联规则,该html文档中的所有文本都以红色呈现(除非被覆盖).但是如果我在该文档中有一个文本框控件,则该样式不会级联到文本框中以使其中的文本呈现为红色.

有人能指出我参考文件,谈论那个?

Nic*_*ole 5

原因是浏览器确定的默认CSS样式.

  • inputselect具有默认颜色/尺寸/填充等.
  • 大多数其他元素inherit用于颜色和大小.
  • 另一个例子是其字体大小table是固定的,默认情况下不会继承,并且必须由开发人员覆盖.

试试这个例子HTML:

<html>

<style type="text/css">
body { color:red; font-size:36px; }
</style>

<body>
Hello
<input type="text" value="test value"/>
<table><tr><td>cell value</td></tr></table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

你会看到font-size并且color没有继承input.此外,单元格值保持默认字体大小.现在将以下CSS添加到style块中:

input { color:inherit; font-size:inherit; }
table { font-size:inherit; }
Run Code Online (Sandbox Code Playgroud)

你会看到他们现在按照你的预期继承.

你真正想要做的是使用重置样式表.表只是一个附加了默认样式的元素,对于许多开发人员来说是不可取的,并且每个浏览器可能略有不同.这就是为什么许多人使用重置css样式表.这些样式表将大多数元素重置为统一大小和零边距,填充等.有些是比其他元素更极端.有关示例,请参见http://meyerweb.com/eric/tools/css/reset/Google.

由于大多数重置样式表不会生成颜色inputselect继承(大多数开发人员不希望它们继承而是希望显式设置大小/颜色),您应该在样式表中设置它们:

input, select { ... }
Run Code Online (Sandbox Code Playgroud)

小心* { ... }用于任何目的(如由其他答案的建议).这打破了CSS的"级联"部分,并且会导致规则不像嵌套元素中那样级联.如果您使用* { color:red; },然后使用以下HTML:

<h1 style="color:green;">Hello <i>world</i></h1>
Run Code Online (Sandbox Code Playgroud)

你最终会得到一个绿色的Hello和一个红色的 世界.(因为<i>匹配*.任何新元素都会将样式重置为红色,颜色不再级联!)