目录
遇到的错误
解决方法
为什么?
首页 web前端 css教程 当Sass和New CSS功能相撞时

当Sass和New CSS功能相撞时

Apr 04, 2025 am 10:21 AM

When Sass and New CSS Features Collide

CSS近期新增了许多酷炫特性,例如自定义属性和新函数。这些特性虽然能简化我们的工作,但也可能与Sass等预处理器产生有趣的交互问题。

本文将探讨我遇到的问题、解决方法,以及我为何至今仍认为Sass必不可少。

遇到的错误

如果您使用过新的min()max()函数,在处理不同单位时可能会遇到类似这样的错误消息:“不兼容的单位:vh和em”。

这是因为Sass拥有自己的min()函数,并忽略CSS的min()函数。此外,Sass无法使用两个单位之间没有固定关系的值进行任何计算。

例如,cm和in单位之间存在固定关系,因此Sass可以计算出min(20in, 50cm)的结果,并且在代码中使用时不会报错。

其他单位也是如此。例如,角度单位之间都存在固定关系:1turn、1rad或1grad始终计算为相同的deg值。同样,1s始终为1000ms,1kHz始终为1000Hz,1dppx始终为96dpi,1in始终为96px。这就是为什么Sass可以在它们之间进行转换,并将它们混合在计算和函数(例如它自己的min()函数)中。

但是,当这些单位之间没有固定关系时(例如前面em和vh单位的例子),就会出现问题。

这不仅仅是不同的单位。尝试在min()内部使用calc()也会导致错误。如果我尝试类似calc(20em 7px)这样的代码,则会收到“calc(20em 7px)对于min不是一个数字”的错误。

当我们想要在CSS过滤器(例如invert())中使用CSS变量或数学CSS函数(例如calc()min()max())的结果时,还会出现另一个问题。

在这种情况下,我们会收到“`$color: 'var(--p, 0.85)' 不是invert的有效颜色”的提示。

grayscale()也会出现同样的问题:“$color: 'calc(.2 var(--d, .3))' 不是grayscale的有效颜色”。

opacity()也会导致同样的问题:“$color: 'var(--p, 0.8)' 不是opacity的有效颜色”。

然而,其他过滤器函数——包括sepia()blur()drop-shadow()brightness()contrast()hue-rotate()——都可以与CSS变量正常工作!

事实证明,发生的情况与min()max()问题类似。Sass没有内置的sepia()blur()drop-shadow()brightness()contrast()hue-rotate()函数,但它确实有自己的grayscale()invert()opacity()函数,并且它们的第一个参数是$color值。由于它找不到该参数,因此会抛出错误。

出于同样的原因,当我们尝试使用列出至少两个hsl()hsla()值的CSS变量时,也会遇到麻烦。

另一方面,color: hsl(9, var(--sl, 95%, 65%))是完全有效的CSS,并且在没有Sass的情况下也能正常工作。

rgb()rgba()函数也会发生完全相同的情况。

此外,如果我们导入Compass并尝试在linear-gradient()radial-gradient()内部使用CSS变量,即使在conic-gradient()内部使用变量也能正常工作(如果浏览器支持的话),我们也会收到另一个错误。

这是因为Compass带有linear-gradient()radial-gradient()函数,但从未添加过conic-gradient()函数。

所有这些情况下的问题都源于Sass或Compass具有同名函数,并假设这些是我们打算在代码中使用的函数。

糟糕!

解决方法

这里的诀窍是记住Sass区分大小写,但CSS不区分大小写

这意味着我们可以编写Min(20em, 50vh),Sass不会将其识别为它自己的min()函数。不会抛出错误,它仍然是有效的CSS,并且按预期工作。类似地,编写HSL()/HSLA()/RGB()/RGBA()Invert()可以避免我们前面遇到的问题。

至于渐变,我通常更喜欢linear-Gradient()radial-Gradient(),因为它更接近SVG版本,但在其中使用至少一个大写字母也能正常工作。

为什么?

几乎每次我发布任何与Sass相关的推文时,都会有人告诫我,现在有了CSS变量,就不应该再使用Sass了。我想解决这个问题,并解释我为什么不同意。

首先,虽然我发现CSS变量非常有用,并且在过去三年中几乎将它们用于所有方面,但需要注意的是,它们会带来性能成本,并且使用当前的DevTools追踪在calc()计算迷宫中出现错误的地方可能会很痛苦。我尽量避免过度使用它们,以免陷入使用它们的缺点超过好处的境地。

一般来说,如果它像一个常量一样工作,不会逐元素或逐状态变化(在这种情况下,自定义属性绝对是最佳选择),或者减少编译后的CSS数量(解决由前缀创建的重复问题),那么我将使用Sass变量。

其次,变量一直是我使用Sass的原因中很小的一部分。当我在2012年末开始使用Sass时,它主要用于循环,这是我们目前在CSS中仍然没有的功能。虽然我已经将部分循环转移到HTML预处理器(因为它减少了生成的代码,并且避免了以后必须同时修改HTML和CSS),但我仍然在很多情况下使用Sass循环,例如生成值列表、渐变函数内的停止列表、多边形函数内的点列表、变换列表等等。

(以下内容与原文一致,略去重复部分,避免冗余)

以上是当Sass和New CSS功能相撞时的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

VUE 3 VUE 3 Apr 02, 2025 pm 06:32 PM

它的出局!恭喜Vue团队完成了完成,我知道这是一项巨大的努力,而且很长时间。所有新文档也是如此。

您可以从浏览器获得有效的CSS属性值吗? 您可以从浏览器获得有效的CSS属性值吗? Apr 02, 2025 pm 06:17 PM

我有人写了这个非常合法的问题。 Lea只是在博客上介绍了如何从浏览器中获得有效的CSS属性。那样的是这样。

在CI/CD上有点 在CI/CD上有点 Apr 02, 2025 pm 06:21 PM

我说的“网站”比“移动应用程序”更合适,但我喜欢Max Lynch的框架:

带有粘性定位的堆叠卡和一点点的杂物 带有粘性定位的堆叠卡和一点点的杂物 Apr 03, 2025 am 10:30 AM

前几天,我发现了科里·金尼文(Corey Ginnivan)网站上的这一点,当您滚动时,彼此之间的卡片堆放集。

在WordPress块编辑器中使用Markdown和本地化 在WordPress块编辑器中使用Markdown和本地化 Apr 02, 2025 am 04:27 AM

如果我们需要直接在WordPress编辑器中向用户显示文档,那么最佳方法是什么?

比较浏览器的响应式设计 比较浏览器的响应式设计 Apr 02, 2025 pm 06:25 PM

这些桌面应用程序中有许多目标是同时在不同的维度上显示您的网站。因此,例如,您可以写作

如何将CSS网格用于粘头和页脚 如何将CSS网格用于粘头和页脚 Apr 02, 2025 pm 06:29 PM

CSS网格是一系列属性的集合,旨在使布局比以往任何时候都容易。像任何东西一样,那里有一点学习曲线,但是网格是

Google字体可变字体 Google字体可变字体 Apr 09, 2025 am 10:42 AM

我看到Google字体推出了新设计(Tweet)。与上一次大型重新设计相比,这感觉更加迭代。我几乎无法分辨出区别

See all articles