css - LESS 在 Map/List 中的列表中缺少值失败
问题描述
这个想法是在列表中添加一个“默认”值,如果存在,则输出一个类。如果“默认”不存在,则编译器将失败。如何做到这一点?
我尝试了一些 Less Guards 的变体,但找不到解决问题的方法。
我还尝试为这些情况添加一个“默认”列表,但它们没有合并。
当前较少我正在测试:
// Map / List
@borderRadius: {
//default: .25rem;
none: 0;
small: .3rem;
medium: .5rem;
large: 1rem;
round: 9999px;
}
// Extract
.getKeyFromList(@list, @key, @fallback...) {
.-(length(@list));
.-(@i) when (@i > 0) {.-((@i - 1))}
.-(@i) when (@key = extract(extract(@list, @i), 1)) {
@value: extract(@list, @i);
}
.--() {@value: @fallback} .--;
}
// Generate the CSS
& when not (@borderRadius) {
.getKeyFromList(@borderRadius[default], @borderRadius[default]);
&radius {
border-radius: @value;
}
}
编辑:这是我的真实示例。我正在尝试从每个中提取“响应”键,@@component
以便为各个组件/变体动态生成响应修饰符类。我能够使 :hover 和 :focus 变体工作,但无法找到一种用于媒体查询的好方法(响应修饰符类)
@responsiveModifiers: true;
@breakpointOffset: 1;
@screens: {
small: 768px;
medium: 960px;
large: 1440px;
};
@opacity: {
0: 0;
25: .25;
50: .5;
75: .75;
100: 1;
}
@borderRadius: {
none: 0;
small: .3rem;
medium: .5rem;
large: 1rem;
round: 9999px;
}
@components: {
@opacity: {
enabled: false;
responsive: false;
hover: true;
focus: false;
}
@borderRadius: {
enabled: true;
responsive: false;
hover: true;
focus: false;
}
}
.config() {
// Create generators here
& when (@components[@opacity][enabled]) {
@component: opacity;
.generate(opacity, opacity, @opacity);
}
& when (@components[@borderRadius][enabled]) {
@component: opacity;
.generate(radius, border-radius, @borderRadius);
}
}
// Call the mixin for default, non media-query classes
// and prefix it with a period (.)
.groundwork-utility-classes() {
@period: .;
@{period} {
.config();
}
}
// Dynamically generate CSS responsive modifiers, per breakpoint,
// via the @screens list array
.groundwork-media-queries() when (@responsiveModifiers = true) {
each(@screens, {
@media screen and (min-width: (@value + @breakpointOffset)) {
.@{key}&\: {
.config();
}
}
})
}
// Main mixin to generate all CSS utility classes
.generate(@className; @property; @list) {
// Generate CSS classes from a @list array
// e.g `.generate(p, padding, @padding);`
each(@list, {
& when not (@key > 0) {
&@{className} {
@{property}: @value;
}
&hover\:@{className}:hover when (@components[@@component][hover] = true) {
@{property}: @value;
}
&focus\:@{className}:focus when (@components[@@component][focus] = true) {
@{property}: @value;
}
}
});
}
// Render non media-query classes together
.groundwork-utility-classes();
// Group and render media queries together,
.groundwork-media-queries();
解决方案
推荐阅读
- python - pandas 独特的价值观如何以迭代为起点
- keras - 运行 CNN 时出现不支持的操作数类型错误
- macos - 如何使用苹果脚本将消息标记为已读?
- java - AsyncTask 完成,但 Activity UI 超过 20 秒未更新
- python - 如何使用代理艺术家为 Matplotlib 中的轮廓图创建图例
- batch-file - 批处理 - 如果音频文件没有播放,它是否被认为是一项任务?
- spring - Spring LDAP 和 Spring Cloud Consul 可以一起工作吗?
- java - 使用 JPA 和 Hibernate 时如何避免超类查询中的多态性
- java - 使用 setcap 功能运行时 JLI_InitArgProcessing 的 Java“符号查找错误”
- html - 制作响应式广告页面 html bootstrap