这是 Kevin Powell 发布的一条 精彩帖子,正在被广泛传播。他认为很多人认为 CSS 是一种令人沮丧且恼人的语言。
为什么人们会尊重 JavaScript 或其他语言,并深入学习它们,却不断贬低 CSS?好吧,所有这些都让我想起了 Jeremy Keith 之前写过的一篇文章,他在文章中认为 CSS 虽然简单,但并不容易
与需要了解循环、变量和其他概念的编程语言不同,CSS 非常容易上手。也许正是因为这一点,它才获得了简单的声誉。它在“不复杂”的意义上是简单的,但这并不意味着它很容易。将“简单”误认为“容易”只会导致伤心。
我认为这就是一些第一次接触 CSS 的程序员所遇到的情况。他们听说它很简单,所以他们认为它很容易。但当他们尝试使用它时,它却不起作用。一定是语言的错,因为他们知道自己很聪明,而且这应该很容易。因此,他们责怪这种语言。他们说它坏了。因此,他们试图通过使其符合更具编程性的思维方式来“修复”它。
有时我会和工程师坐在一起,与他们一起解决棘手的布局问题,而 CSS 被视为低于他们——就好像这种语言不可预测到不值得学习和掌握一样。也许这与过去有关,在过去,我们花了数年时间与浏览器以不同的方式呈现内容作斗争。但这主要是一个已经解决的问题。我不记得上次像那样与浏览器作斗争是什么时候了。
相反,我认为工程师面临的最大问题——以及他们为什么发现它如此令人沮丧的原因——是 CSS 强制你面对网络的网络特性。事情需要回退。您需要考虑不同的设备,以及查看网站的所有不同方式:移动设备、桌面电脑、无鼠标、无键盘等。当然,在编写 JavaScript 时也必须处理这些问题,但更容易忽略。你不能忽视你的网站在手机上完全崩溃的布局。
旁注:我们有 一篇关于 CSS 中居中的指南,不是因为 CSS 坏了且很蠢,而是因为变量太多了,以至于像“如何居中文字?”这样简单的问题实际上比看起来复杂得多。很多上下文都被忽略了。
这让我想起了我最喜欢的博文之一,其中 Brandon Smith 认为 CSS 很棒,我们应该尊重这种语言并学习它的底层工作原理。
CSS 很困难,因为它的属性会交互,而且经常以意想不到的方式交互。因为当您设置其中一个属性时,您永远不仅仅是在设置那个属性。那个属性会与其他十几个属性组合、反弹和冲突,包括您从未实际设置的默认属性。
缓解此问题的一条经验法则是,永远不要比需要更明确。网页默认情况下是响应式的。编写良好的 CSS 意味着利用这一事实而不是覆盖它。如果可能,使用百分比或视口单位而不是媒体查询。在您可以使用的地方使用
min-width
而不是width
。以规则为导向,以您真正想表达的意思为导向,而不是仅仅添加属性直到看起来正确为止。尝试了解浏览器如何解决布局和大小调整问题,并谨慎地在顶部进行更改和添加。与 CSS 合作,而不是与它对抗。
“CSS 很困难,因为它的属性会交互,而且经常以意想不到的方式交互。” 这就是复杂性的定义。良好的语言限制了不同方面状态相互干扰的容易程度。优秀的语言使得这一点非常困难。
CSS 很困难,因为它过于强大,并且没有很好地限制副作用,这使得几乎不可能进行推理。
作为一个能够理解 CSS 的人,它实际上归结为大量的反复试验。不断遇到新的布局需求、新的内容用例、新的设备/平台场景和组合等,可以帮助您形成一种关于 CSS 背后精神和理念的心智模型,从而使它变得更加可预测和易于管理。使用架构指南和预处理器当然会有所帮助。
我在学习 JS 之前就学习了 CSS,所以也许这更容易一些?CSS 看起来并不太难。
仍然从命令式编程的角度来评判 CSS……这行不通。
我们可以整天讨论 CSS 是否是一种编程语言,但归根结底,它更像是一种语言而不是编程。它主要依赖于言语-语言智能,而传统意义上的编程则更多地依赖于逻辑-数学智能。
CSS 需要不同的思维方式,甚至可能需要不同的思维。
CSS 就像 JavaScript 一样,是为浏览器理解更具体的 DOM 而构建的。
并不是说人类不重要,但我们理解它是我们的责任。
只需将 CSS 样式块与 JavaScript 对象字面量进行比较::如果您应用理解 JavaScript 基础知识所需的内容,您的生活将会变得更容易。
`
body, .header {
background: #788;
font-family: ‘Verdana’, sans-serif;
margin: 0;
padding: 0;
display: flex;
}
let address = {
owner: “Bradleys”,
lotNumber: “1313”,
street: “Big Pine Lane”,
city: “My Town”,
country: “USA”,
zip code: “12345”
}
`
这是一篇非常深入的文章,阅读时间大约为 30 到 45 分钟。如果您是初学者或正在/现在与遇到困难的人一起工作。它具有启发性,并提供了许多额外的链接来帮助您进一步理解。浏览器引擎和 DOM 的工作原理。如果您了解这一点,您将更好地理解为什么必须这样。
“网络开发
浏览器如何呈现网页?——DOM、CSSOM 和渲染
在本文中,我们将深入探讨 DOM 和 CSSOM,以了解浏览器如何呈现网页。”
https://medium.com/jspoint/how-the-browser-renders-a-web-page-dom-cssom-and-rendering-df10531c9969
我从未理解过这种说法。CSS 并不难。它就是它,你学会与它一起工作。
从 0 开始计数(索引)是直观的。
“永远不要比需要更明确”。
这通常也是很好的生活建议!
在大多数编程语言中,隔离是一种特性,它是事物工作的方式。但在 CSS 中,泄漏是一种特性。C 代表“层叠”,这意味着在某处定义某件事使其在其他地方可用,但不是任何随机位置,而是一些特定位置。如果有人不知道会发生什么,可能是因为这个人实际上没有掌握这门语言……
CSS 的实现也包含用户代理样式表的概念。因此,您永远不会从头开始,而总是必须与其他人编写的代码相关联。
在开始之前,最好阅读并理解您要添加到的代码库。现代网络开发工具使这比以前更容易了。
只是我一个人还是其他人也必须提醒自己 CSS 元素被视为盒子?
在编写任何 CSS 代码之前,我都会牢记这一点。
如果您习惯使用任何具有内置错误消息的编程语言,CSS 可能会非常烦人,因为您不知道错误在哪里或为什么事情没有按您希望的方式工作。语法本身也具有容错性,因此这无助于故障排除。
CSS 很难,因为这门语言没有任何意义,它简直是一堆乱七八糟的东西。
如果您有一个 div,它是 flex 1,这意味着它占用所有可用空间,为什么编写 width 100% 和 height 100% 不会使子元素大小相同?我知道为什么,因为 CSS 没有任何意义。
为什么我们必须在 img 图像的 div 容器中设置 `min-height: 0` 和 `height: 100%` 来防止图片撑爆?这根本说不通,而且没人知道为什么,他们只是在所有 CSS 中重复同样的逻辑。但当我坐下来问他们背后的逻辑时,所有人都会说“我不知道,我只是这么做因为有用”。所以是的,CSS 不直观。
这就是为什么编程语言很容易理解,因为它们是有意义的。