有效的CSS还是Hack?

3
将以下内容放置在您的CSS文件顶部:
* { margin: 0; padding: 0; }  
还是有效的CSS?它是用来做什么的?在不同的浏览器/版本上可移植吗?

4
我认为你在这种情况下指的是“修补补丁”(kludge),而不是“黑客攻击”(hack)。是的,我知道我很迂腐。 - Beska
我认为所谓的“hack”是指某些浏览器对某个字符或一组字符无法处理,而其他浏览器可以。但从回复中看来,“*”是“通配符”的有效字符... 所以我认为这不算是“hack”。 - BuddyJoe
自从 * 选择器被引入以专门影响所有元素,我认为它并不是一种hack。然而,在CSS顶部使用它以避免跨浏览器问题的意图可能被视为“CSS黑客工具箱”的一种工具,其定义比“黑客”本身更加宽泛。 - Treb
7个回答

25

这是有效的CSS。它选择每个元素并重置默认的边距和内边距。人们使用这样做的原因是为了使他们的网站布局在不同的浏览器/版本中更加一致,因为每个浏览器都有自己的默认样式表。如果您不使用此声明或为每个元素指定边距/填充,则每个浏览器将为该元素使用自己的默认边距/填充,并且页面将在不同的浏览器中呈现不一致。


在我看来,这是一个非常清晰准确的描述。我最喜欢的例子是一个只有几行几列且没有其他样式标签的表格。在IE和FF中查看并比较它们之间的差异。 - Nate

6
根据“CSS Reset”理论,这是其中的一部分。它消除了不同浏览器之间的所有填充和边距差异。对于渲染代理来说,在整个文档中应用规则到每个元素非常耗费资源,特别是对于大型网页,这也可能破坏很多良好的默认样式,尤其是当你想要默认样式的提交按钮时。请参考http://css-tricks.com/margin-0-padding-0-no-longer-cool/

我真的不知道。我最好的猜测是,人们认为“重置”应该在不增加工作量的情况下起作用。如果渲染引擎设计得很好的话,引擎应该对每个元素应用一条规则——否则,它怎么能进行渲染呢? - Treb
1
我曾经一直使用这种方法,但后来停止了,因为我讨厌在列表、段落和标题等上重置所有边距和填充。现在我更喜欢将它们设置为默认值,因为尽管在不同的浏览器中略有不同,但默认值并不那么糟糕。 - Matthew James Taylor

2
这颗星星被称为通用选择器,是有效的CSS。它的作用是将样式应用于页面中的所有元素。然而,它应该谨慎使用。个人而言,我并没有发现它有很大的用处。重置所有元素的边距和填充可以更具体地(在我看来更好地)使用其他元素、元素组和类来完成。
有关浏览器支持的详细信息,请参见此页面。请注意,它已经严重过时,因为它是在2000年编写的;我想你现在可以期望在所有流行的浏览器中都得到完全支持。

通用选择器在Internet Explorer 5.x的Windows和Macintosh版本中得到支持,以及IE 4.5的Mac版本中也得到支持,还在Opera 3.6中得到支持。它也在Netscape 6预览版1上得到支持,在Preview Release 3 of Opera 4 for Windows中也得到支持。


“Opera 4 的预览版 3”——实在是太过时了!(但我们可以假设提到的浏览器当前版本仍然支持它;-) - Treb

1

有时候你会看到:

html * { margin: 0; padding: 0; }

或者

body * { margin: 0; padding: 0; }

在各种浏览器中结果略有不同,这是需要注意的。

此外,还有一些选择性的重置,并不包括每个 HTML 元素 - 请参阅这篇文章 比较 CSS 重置的种类

它不能算作一个黑客技巧,因为它是有效的标准 CSS。


1

这是:

  • 有效的CSS
  • 不算是“hack”
  • 有点笨拙
  • 可能也不是你想要的

* 是通用选择器。在CSS规范中,通用选择器的特异性为0000,这意味着每个其他选择器都具有更高的优先级。因此,这是一种“重置”所有边距的方法,以便任何其他规则都能够覆盖。

请记住,这种方法会使您的列表变得混乱。没有边距和填充,列表项不再缩进。有些规则确实很有益处,因为它们可以为通常不需要样式的东西添加样式。

通用选择器选择页面上的每个元素。每个小的div,每个小的li等等。事实上,它甚至选择了不是块级元素的东西,如aspanhead。在许多情况下,这是过度的,在大型页面上可能效率低下。

如果你正在寻找一种重置 HTML 默认样式的方法,最好使用像 Eric Meyer 的 Reset CSS 这样的东西。虽然 Reset CSS 样式表更加复杂,但它不会过度选择每个单独的元素。否则,只需将困扰你的每个单独元素的边距和填充设置为零即可。(我总是在开始页面时将 bodyh1 的填充和边距设置为零。)

0

这是有效的CSS,但从技术上讲,它可能被视为一种hack。

基本上,它用于重置HTML中每个元素的边距和填充,因为不同的浏览器有时具有不同的默认值。使用此重置将确保所有元素从一个共同点开始。


0

这既是有效的,也是一种技巧。然而,它不是特定于浏览器的。这个术语叫做“CSS重置”

正如tf111所解释的那样,这个想法是为了摆脱所有浏览器中不同的边距和填充的特定设置。


我想在我的想法中这不是黑客行为,可能只是一个技巧。请参见根问题级别的评论。 - BuddyJoe
考虑到你的评论,我确实能理解你的观点。我使用“hack”这个术语时可能有点太宽泛了。 - NotMe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接