ChatGPT解决这个技术问题 Extra ChatGPT

Normalize.css 和 Reset CSS 有什么区别?

我知道 CSS Reset 是什么,但最近我听说了一个叫做 Normalize.css 的新东西

Normalize.cssReset CSS 有什么区别?

规范化 CSS 和重置 CSS 有什么区别?

它只是 CSS 重置的一个新流行词吗?


n
necolas

我在 normalize.css 上工作。

主要区别在于:

Normalize.css 保留有用的默认值,而不是“取消样式化”所有内容。例如,像 sup 或 sub 这样的元素在包含 normalize.css 后“正常工作”(实际上变得更加健壮),而在包含 reset.css 后它们在视觉上与普通文本没有区别。因此, normalize.css 不会强加给您一个视觉起点(同质性)。这可能不符合每个人的口味。最好的办法是对两者都进行试验,看看哪种凝胶符合您的喜好。 Normalize.css 更正了一些超出 reset.css 范围的常见错误。它比 reset.css 范围更广,并且还为常见问题提供了错误修复,例如:HTML5 元素的显示设置、表单元素缺少字体继承、更正 pre 的字体大小呈现、IE9 中的 SVG 溢出以及iOS 中的按钮样式错误。 Normalize.css 不会弄乱您的开发工具。使用 reset.css 时的一个常见问题是浏览器 CSS 调试工具中显示的大型继承链。由于有针对性的样式,这不是 normalize.css 的问题。 Normalize.css 更加模块化。该项目被分解为相对独立的部分,如果您知道您的网站永远不需要它们,则可以轻松地删除部分(如表单规范化)。 Normalize.css 有更好的文档。 normalize.css 代码在 GitHub Wiki 中以内联方式和更全面的方式记录。这意味着您可以了解每行代码的作用、包含它的原因、浏览器之间的差异,并更轻松地运行您自己的测试。该项目旨在帮助人们了解浏览器默认如何呈现元素,并使他们更容易参与提交改进。

我在一篇文章 about normalize.css 中对此进行了更详细的描述


很多时候,您不会将它们保持为零(使用重置时),因此您实际上编写的代码更少。如果您确实想将某些值归零,那么该样式将与它所针对的元素耦合,并且应该易于调试。
这是许多重置的一个重大问题,包括将所有内容归零也会减慢浏览器速度的事实。
这也是重置的优势 - 标准化未命中大小问题,如下所示:github.com/yahoo/pure/issues/395
当我认为,是的,通常你不希望填充和边距为零但不,你也不希望默认值时,我是否错过了这一点?
就我个人而言,我已经关闭了 Normalize,尽管我仍然使用它。这里的很多观点都被夸大了(更好的文档......?)。 Normalize 是固执己见的,所以它确实给你强加了一个视觉起点(尽管这个答案说了什么)。它也可能变得过时。 Reset.css 使用后永远不会过时。与您能想到的任何其他数字相比,您更可能希望边距和填充为 0,因此在开发时重置所有内容实际上很有帮助。然而,Normalize 对浏览器问题有好处,这也是我使用它的主要原因。
J
Jesper M

主要区别在于:

CSS 重置旨在删除所有内置的浏览器样式。 H1-6、p、strong、em 等标准元素最终看起来完全一样,根本没有任何装饰。然后你应该自己添加所有装饰。

规范化 CSS 旨在使内置浏览器样式在浏览器之间保持一致。像 H1-6 这样的元素将在浏览器中以一致的方式显示为粗体、更大等等。然后,您应该只添加设计所需的装饰差异。

如果您的设计 a) 遵循排版等的通用约定,并且 b) Normalize.css 适用于您的目标受众,那么使用 Normalize.CSS 而不是 CSS 重置将使您自己的 CSS 更小更快编写。


@Jitendra Vyas:——实际上只有一种方法:阅读评论良好的 Normalize.CSS 代码,并确定它是否适合您的需求。 github.com/necolas/normalize.css/blob/master/normalize.css
另一个注意事项:Normalize.css 旨在尽可能不显眼,这允许开发人员更轻松地编写代码,而不必与特定性冲突作斗争。
所以可以说我想在开发时使用重置。一旦完成,我想要 normalize.css 或一些 JS 来获取我没有改变的所有东西,并且在浏览器中是相同的。或者我已经改变并且在改变之后它们已经变得与浏览器中的相同并为客户端删除它们。因此,在更快的客户端开发该“程序”时,重置将有所帮助。双方皆大欢喜。还有更聪明的生活方式。
在实践中,无论如何你最终都会覆盖所有 Normalize 的样式。理论很棒,但在这个 OOCSS 世界中,它在实践中从未如此运作。
d
danronmoon

Normalize.css 主要是一组样式,基于其作者认为看起来不错的样式,并使其在浏览器中看起来一致。重置基本上从元素中剥离样式,因此您可以更好地控制所有内容的样式。

我两个都用。

一些样式来自 Reset,一些来自 Normalize.css。例如,在 Normalize.css 中,有一种样式可以确保所有输入元素都具有相同的字体,这不会发生(在文本输入和文本区域之间)。重置没有这样的样式,所以输入有不同的字体,这通常是不需要的。

因此,基本上,使用这两个 CSS 文件可以更好地“均衡”所有内容;)

问候!


这是一个很好的、务实的答案。它不一定是其中之一。各取所需。我喜欢完全重置,但 Normalizer 提供了一些可以很好地在上面运行的不错的点点滴滴。
@ricmetalster,那么您是否必须重新编写自己的 css 才能结合 reset.css 和 normalize.css 的功能?
如果您想同时使用两者,您可以先列出“重置”然后“标准化”然后在顶部添加您的样式吗?
我采用“不要过度思考”的方法并使用两者并将它们作为我的 SASS 导入中的包含调用 @import '_normalize' && '_reset'
d
dbb

从它的描述来看,它似乎试图使用户代理的默认样式在所有浏览器中保持一致,而不是像重置那样剥离所有默认样式。

与许多 CSS 重置不同,保留有用的默认值。


那么使用 Normalize css over Reset 更好吗?
@Jitendra Vyas - 不。这些工具是不同的,没有比彼此更好或更差。选择最能帮助您解决问题的那个。
我不得不争辩说,标准化比重置要好。这将减少通过网络传输的 CSS,更好地使用 UA 默认值,以及更好地理解元素的显示方式。
B
Bono

第一个 reset.css 是您可以使用的最糟糕的库,因为在将边距填充和其他属性的值分配给 0 之后,它删除了 HTML 的标准结构并将您编写的所有内容都显示为文本。例如,您会发现 <H1><H6> 相同。

另一方面,Normalize.css 使用标准结构,并且还修复了其中存在的几乎所有错误。例如,它解决了将表单从一个浏览器显示到另一个浏览器的问题。 Normalize 通过修改此功能来解决此问题,因此您的元素将在所有浏览器上显示相同。


取决于您的用例。考虑到您的示例,如果我需要为我的项目修改所有标题标签的字体样式,我真的不会使用默认值,对吗?一个人不应该仅仅因为一个图书馆在自己的项目中找不到用途而将其标记为“最差”。
重置的主要目的之一是解决非常有用的浏览器应用样式引起的问题。我也认为它不应该被视为图书馆。
@gdebojyoti 有一些用例,但我很少希望所有标题的大小相同,无论它们各自的字体样式如何。
u
user3170099

重置似乎是满足定制设计规范的必要条件,尤其是在复杂的非样板类型设计项目中。听起来好像规范化是进行纯 Web 编程的好方法,但网站通常是 Web 编程和 UI/UX 设计规则之间的结合。


99% 的用例都太过分了。
@Michael 哪一个?重置或正常化? (只是想了解人们对这个问题的想法)
@Bren 重置和规范化。了解每个元素的默认 CSS 值是成为优秀前端开发人员的一部分。我认为它们是不必要的蛮力方法。
@迈克尔> Knowing the default CSS values for each element is part of being a good front end developer - 这类似于说您宁愿使用电子而不是编程语言,因为这才是优秀的开发人员。有效地使用工具使某人成为优秀的开发人员,反之则通常属于浪费时间的狂热者
S
Sean Tank Garvey

有时,最好的解决方案是同时使用两者。有时,两者都不使用。有时,它是使用一个或另一个。如果你想在所有浏览器中重置所有样式,包括边距和填充,请使用 reset.css。然后自己应用所有装饰和样式。如果您只是喜欢内置样式但想要更多的跨浏览器同步性,即规范化,那么请使用 normalize.css。但是,如果您选择同时使用 reset.css 和 normalize.css,请先链接 reset.css 样式表,然后(立即)链接 normalize.css 样式表。有时并不总是哪个更好的问题,而是什么时候使用哪个更好,什么时候同时使用,什么时候都不使用。恕我直言。


D
Daniel Danielecki

这个问题已经回答了好几次了,我将为每个人做一个简短的总结,一个例子和截至 2019 年 9 月的见解:

Normalize.css - 顾名思义,它为他们的用户代理规范化浏览器中的样式,也就是说,由于默认情况下它们略有不同,所以它们在所有浏览器中都相同。

示例:默认情况下,<section> 内的 <h1> 标记 Google Chrome 会缩小 <h1> 标记的“预期”大小。另一方面,Microsoft Edge 正在制作 <h1> 标记的“预期”大小。 Normalize.css 将使其保持一致。

当前状态:npm 存储库显示 normalize.css package 目前每周的下载量超过 500k。 project of the repository 中的 GitHub 星数超过 36k。

重置 CSS - 顾名思义,它重置所有样式,即删除所有浏览器的用户代理样式。

示例:它会执行以下操作:

html, body, div, span, ..., audio, video {  
   margin: 0;  
   padding: 0;  
   border: 0;  
   font-size: 100%;  
   font: inherit;  
   vertical-align: baseline; 
}

当前状态:它远不如 Normalize.css 受欢迎,reset-css 包显示它每周的下载量约为 26k。 GitHub 星数只有 200,从项目的 repository 可以看出。


S
Shujaat Khanzada

规范化.css

Normalize.css 是一个小的 CSS 文件,它在 HTML 元素的默认样式中提供跨浏览器的一致性。

这意味着,如果我们查看浏览器应用的样式的 W3C 标准,并且其中一个浏览器存在不一致,normalize.css 样式将修复存在差异的浏览器样式。

但在某些情况下,我们无法按照标准修复有问题的浏览器,通常是因为 IE 或 EDGE。在这些情况下,Normalize 中的修复程序会将 IE 或 EDGE 样式应用于其余浏览器。

现实生活中的例子

Chrome、Safari 和 Firefox 呈现 <article>/ <aside>/ <nav>/ <section> 标记内的 <h1> 标记,其字体大小小于独立标记,并且具有不同的边距大小。对于 <article>/ <aside>/ <nav>/ <section> 中的 <h1> 标记,这些是 Chrome、Safari 和 Firefox 中的用户代理样式

标签

:-webkit-any(article,aside,nav,section) h1 {
  font-size: 1.5em;
   margin-block-start: 0.83em;
   margin-block-end: 0.83em;
   }

例子:

/* 
 Correct the font size and margin on `h1` elements within `section`  and `article` 
 contexts in Chrome, Firefox, and Safari.
 */
  h1 {  font-size: 2em;  margin: 0.67em 0;}

重置 CSS

重置 CSS 采用了不同的方法,并表示我们根本不需要浏览器的默认样式。无论我们需要什么样式,我们都会根据自己的需要在项目中定义。所以“CSS Reset”会重置浏览器用户代理附带的所有样式。

这种方法在上面的示例中效果很好,具有 <h1><h6> 的默认样式:大多数情况下,我们既不需要浏览器的默认 font-size,也不需要浏览器的默认 margin

这是 CSS 重置的一小部分的示例

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, 
pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, 
samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, 
li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, 
article, aside, canvas, details, embed,  figure, figcaption, footer, header, hgroup,  
menu, nav, output, ruby, section, summary, time, mark, audio, video {  
margin: 0;  
padding: 0;  
border: 0;  
font-size: 100%;  
font: inherit;  
vertical-align: baseline; 
}

在 CSS 重置方式中,我们将所有 HTML 标记定义为没有填充、没有边距、没有边框、相同的字体大小和相同的对齐方式。

CSS 重置的问题在于它们很丑:它们有一大串选择器,并且会进行很多不必要的覆盖。更糟糕的是,它们在调试时是不可读的。

但仍有一些我们更喜欢重置的样式,例如 <h1><h6><ul><li> 等。


H
Hamdy Saady

Normalize.css :每个浏览器都带有一些默认的 CSS 样式,例如,在段落或标题周围添加填充。如果您添加规范化样式表,所有这些浏览器默认规则都将被重置,因此对于这个例子,标签上的 0px 填充。这里有几个链接了解更多详细信息:https://necolas.github.io/normalize.css/ http://nicolasgallagher.com/about-normalize-css/