Less - 如何将 @variable 插入属性(而不是值)

发布于 2024-10-19 19:04:49 字数 266 浏览 5 评论 0原文

在 less.js 中,我可以毫无问题地用变量替换值。

@gutter: 20px;
margin-left:e(%("-%d"), @gutter);

当尝试用变量替换属性时,我收到错误。我将如何在 Less 中执行以下操作?

@gutter: 20px;
@direction: left;
e(%("margin-%d"), @direction):e(%("-%d"), @gutter);

In less.js, I'm able to replace values with variables with no problems.

@gutter: 20px;
margin-left:e(%("-%d"), @gutter);

When trying to replace properties with variables, I get errors. How would I perform the following in Less?

@gutter: 20px;
@direction: left;
e(%("margin-%d"), @direction):e(%("-%d"), @gutter);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

所有深爱都是秘密 2024-10-26 19:04:49

感谢 Alvivi 提供的解决方案和研究(您将因此获得奖励)。我决定添加以下内容作为实际答案,因为这是设置它的真正方法,而不是查看 .blah() 伪代码。

这是设置它的真正策略:

@gutter: 20px;
@dir: left;
@dirOp: right;

然后创建混合来增强边距和填充,例如所以:

.margin(left, @dist:@gutter) {
    margin-left:@dist;
}
.margin(right, @dist:@gutter) {
    margin-right:@dist;
}
.padding(left, @dist:@gutter) {
    padding-left:@dist;
}
.padding(right, @dist:@gutter) {
    padding-right:@dist;
}
.lr(left, @dist: 0) {
    left: @dist;
}
.lr(right, @dist: 0) {
    right: @dist;
}

..然后你可以只是

#selector {
    .margin(@dir);
} 

#selector {
    .margin(@dirOp, 10px);
}

一起:

#selector {
    .margin(@dir);
    .margin(@dirOp, 50px);
    .padding(@dir, 10px);
    .padding(@dirOp);
    float:@dir;
    text-align:@dirOp;
    position:absolute;
    .lr(@dir);
}

轻松轻松的LTR/RTL,少用!哇!

Thanks to Alvivi for the solution and research (you get the reward for that). I decided to add the following as the actual answer since this is a real way to set it up instead of looking at .blah() pseudo code..

Here's a real strategy for setting it up:

@gutter: 20px;
@dir: left;
@dirOp: right;

then create mixins to enhance margin and padding like so:

.margin(left, @dist:@gutter) {
    margin-left:@dist;
}
.margin(right, @dist:@gutter) {
    margin-right:@dist;
}
.padding(left, @dist:@gutter) {
    padding-left:@dist;
}
.padding(right, @dist:@gutter) {
    padding-right:@dist;
}
.lr(left, @dist: 0) {
    left: @dist;
}
.lr(right, @dist: 0) {
    right: @dist;
}

.. then you can just

#selector {
    .margin(@dir);
} 

or

#selector {
    .margin(@dirOp, 10px);
}

all together:

#selector {
    .margin(@dir);
    .margin(@dirOp, 50px);
    .padding(@dir, 10px);
    .padding(@dirOp);
    float:@dir;
    text-align:@dirOp;
    position:absolute;
    .lr(@dir);
}

Easy breezy LTR/RTL with LESS! Woot!

怎言笑 2024-10-26 19:04:49

正如文档所述,转义用于创建 CSS 值(而不是属性)。

此处讨论了一些解决方法。一种是使用参数混合。例如:

.g ()       { /* Common properties */ }
.g (right)  { margin-right: e(...) } 
.g (left)   { margin-left: e(...) }

Escaping, as says the documentation, is used to create CSS values (not properties).

There is a discussion with some workarounds here. One would be using parametric mixins. For example:

.g ()       { /* Common properties */ }
.g (right)  { margin-right: e(...) } 
.g (left)   { margin-left: e(...) }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文