Josh Comeau 自定义 CSS 重置笔记

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您的旅程各个阶段提供云产品。立即开始使用 价值 200 美元的免费积分!

我们最近与 Elad Shechter 谈论了 他的新 CSS 重置,此后不久,Josh Comeau 发表了他的博客

我们正处于 CSS 重置的新时代,在这个时代……你实际上并不需要重置?浏览器在默认样式方面的差异并不那么大,而且当你开始使用样式时,你可能已经将样式覆盖掉了。因此,也许“现代”CSS 重置更像是一组有见地的默认样式,这些样式可以做一些有用的事情,而你希望这些事情在你的所有新项目中都能使用,因为,嗯,这就是你的做法。

浏览 Josh 的选择,这似乎就是它对我的意义:一个并非特别有见地的设计集合,但可以通过提供几乎所有项目都会需要的功能来辅助设计。

我将 浏览它 并抛出 🔥 火辣辣的观点。

*, *::before, *::after {
  box-sizing: border-box;
}

当然可以。我们过去认为这是 全球性节日。不过,随着越来越多的布局由网格和 flexbox 处理,我觉得它在当今变得没那么有用。当你使用 fr 单位和 flex 布局设置布局时,即使涉及 paddingborderbox-sizing 模型也并没有那么起作用。但是,嘿,我仍然更喜欢它。我认为,如果将其添加到 CSS 重置中,应该 使用继承模型,因为这样更容易在组件上撤消它。

* {
  margin: 0;
}

这基本上是 CSS-Tricks 徽标“星形”存在的原因。我过去很喜欢在我的 CSS 重置中使用这段小代码。有一段时间,它开始感觉过于强势,但我认为我又开始喜欢它了。我喜欢你必须在应用任何边距时必须明确地指定它。就我个人而言,我也会使用 padding: 0;,因为列表元素往往会有一些填充将它们推来推去。如果你要清除间距,最好全部清除。

html, body {
  height: 100%;
}

可能是个好主意。Josh 说“允许在应用程序中使用基于百分比的高度”,我不能说这在我的日常工作中经常出现,但这会导致诸如主体背景无法按预期填充空间的情况。

太可惜 body { height: 100vh; } 在这里不够用,但我感觉它并不像预期的那样可靠,我现在想不起来原因了。也许与 iOS Safari 中的页脚导航有关?

body {
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}

我无法接受 -webkit-font-smoothing: antialiased;。我认为它会使字体变得过薄,我不喜欢它。我不反对它作为一个工具,但我不会在我的所有项目中全局应用它。

我通常也喜欢在 html 选择器上放置全局的字形大小样式,因为 rem 的“根”部分暗示了 <html> 元素,而不是 <body> 元素,我喜欢用 rem 设置大小,然后在媒体查询中调整根 font-size 的大小。

1.5 的值感觉是一个不错的默认 line-height(我自己更喜欢 1.4,但我宁愿向上调整,而不是向下调整)。但一旦设置它,我感觉自己被磁力吸引,要去减少标题元素的 line-height,因为它们总是过大。这可以通过 h1, h2, h3 类型的选择器来实现(也许 h4h6 不需要它),但 Josh 使用了 一些 CSS 技巧,这段代码没有包含在最终的重置中。

* {
  line-height: calc(1em + 0.5rem);
}

对于小型字体,0.5rem 的效果非常明显,但对于大型字体,影响就不那么大了。我可以在新的项目中尝试使用它。以前在 “使用 calc 计算最佳行高” 中,Jesús Ricarte 也有类似的先例。

img, picture, video, canvas, svg {
  display: block;
  max-width: 100%;
}

对于 CSS 重置来说,这是个好主意。那里的 block 显示类型可以防止那些让我头疼的烦人的 line-height 间隙。而且你几乎不希望任何这些媒体块比父元素更宽。不过,我不认为 picture 是必需的,因为它并不是一个可样式化的块?可能错了。我可能会将 iframeobject 也添加到其中。

p, h1, h2, h3, h4, h5, h6 {
  overflow-wrap: break-word;
}

这是一个很好的做法。当一个长单词(例如一个 URL)强制一个元素变宽并破坏布局时,就会出现问题。我倾向于将它放在某些地方,比如 article.text-content 等等,并让它级联到整个区域(这也会捕获可能包含在不适当元素中的文本),但我并不介意把它放在特定的文本元素上。

如果你这样做,你可能想把 li, dl, dt, blockquote 添加到那个链中。尽管我已经尝试了几次研究这个问题(这里有一个游乐场),但我仍然不能百分百确定哪种行换行属性的组合最适合使用。我认为 word-break: break-word; 基本上是相同的东西。我认为一般来说最好使用 hyphens: auto;,对吧?

#root, #__next {
  isolation: isolate;
}

我不太理解这里发生了什么。我明白这是一个 React/Next 东西,你将应用程序挂载到这些根节点,而且我明白它创建了一个堆叠上下文,但我就是不明白为什么在该级别拥有该堆叠上下文有什么特别的用处。同时,我也没有发现任何问题。

总的来说,非常酷!我总是喜欢看其他人使用什么(以及建议使用什么)来进行 CSS 重置。