【发布时间】:2012-12-04 00:46:24
【问题描述】:
我最近一直在将我的 CSS 重构为 SASS 样式表。我在 VS2012 中使用 Mindscape Web Workbench extension,每次保存 SCSS 时都会重新生成 CSS。我从类似这样的代码开始:
/* Starting point: */
h1 { font-size: 1.5em; /* 24px ÷ 16px */ }
然后我尝试先将其重构为:
/* Recfator: */
h1 { font-size: (24px / 16px)em; }
但不幸的是,这会产生:
/* Result: */
h1 { font-size: 1.5 em; } /* doesn't work, gives "1.5 em" */
注意额外的空间,我不想在那里。我已经尝试了几种替代方法,这里有一些:
h1 { font-size: (24/16)em; } /* doesn't work, gives "1.5 em" */
h2 { font-size: 24 / 16em; } /* doesn't work, gives "24/16em" */
h3 { font-size: (24px / 16px) * 1em; } /* works but "* 1 em" feels unnecessary */
h4 { font-size: (24em) / 16; } /* works, but without "px" it's not
really conveying what I mean to say */
我也尝试过这些带有变量的变体(因为无论如何我都想要这些变体),但这并没有太大改变这种情况。为了使这个问题中的示例保持流畅,我省略了变量。但是,我很乐意接受依赖于使用变量的解决方案(以干净的方式)。
我已经浏览了relevant SASS documenation on '/',并意识到这对于 SASS 来说是一个艰难的问题,因为“/”字符在基本 CSS 中已经有了意义。无论哪种方式,我都希望有一个干净的解决方案。我在这里遗漏了什么吗?
PS。 This blogpost 确实提供了一种解决方案,使用用户定义的函数。不过,这似乎有点重,所以如果有符合我上述尝试的“更清洁”的解决方案,我很感兴趣。如果有人可以解释“函数方法”是更好(甚至唯一)的解决方案,那么我也会接受它作为答案。
PS。 This related question 似乎是同一件事,尽管有人特别想做进一步的计算。 The accepted answer there 是我的第三个解决方法(乘以 1em),但如果我愿意放弃进行进一步计算的能力,我很想知道是否有不同的(更清洁的)方法。也许上述问题中提到的方法(“插值”)对我有用?
底线:如何将单位类型(例如 em)干净地附加到 SASS 中的计算结果中?
【问题讨论】:
-
做数学有什么好处(除了较慢的编译和可能较低的可读性)?并非每个浏览器都以 16px 字体大小开始(从历史上看,Opera 使用的基本字体大小比其他浏览器更小……而且众所周知,用户会故意增加或减少他们的字体大小)。
-
一旦我用变量替换数字,数学将显示意义和/或意图,使其自我记录而不是“魔术”。正如我在问题中提到的,我在示例中省略了变量以使其保持简单。
-
你还没有回答这个问题:做数学对你有什么好处?无论您最终使用什么(变量与硬编码值)
24px / 16px * 1em的可读性都低于1.5em。 -
你通过重新打开这个问题对世界各地的 Sass 作者造成了极大的伤害。它现在是谷歌上的最高结果。您的“首选方法”是将单位附加到数字的最糟糕的方法,并且只会在它不能按照他们期望的方式工作时引起混乱。
-
如果您不同意最受支持和接受的答案,您应该写一个更好的答案,而不是在 cmets 中大肆宣扬。 - 解释为什么/何时选择错误的工具和/或告诉人们我已经提到的一种方法是首选方法。