当前位置: 首页 > 面试题库 >

使用LESS构建选择器列表

阙奇思
2023-03-14
问题内容

我有媒体查询,可以在其中更改某些文本元素,例如:

body.single .entry-content p,
body.single .entry-content ul,
body.single .entry-content ol,
body.single .entry-content table {
    line-height: 1.8;
}

如何使用LESS仅构建选择器列表,而不构建相应的CSS值?

我的尝试

我不是在寻找这个答案或这个答案,它在功能中包括CSS。相反,我想象它像这样使用:

/* .selector-list() { ... } */

@text-elements: p, ul, ol, table;

.selector-list("body.single .entry-content", @text-elements);
@selector-list {
    line-height: 1.8;
}

它本质上是通过在父项(“ body.category”)之前添加逗号并将其添加到集合中的每个元素上来构建一个字符串化列表。这是我尝试测试输出的内容:

@text-elements: p, ul, ol, table;

.selector-list(@parent, @children, @i:1, @list:"") when (@i <= length(@children)) {
    @child: extract(@children, @i);
    @selector-list: "@{list} @{parent} @{child},";
    .selector-list(@parent, @children, (@i + 1), @selector-list);
}

.selector-list("body.single .entry-content", @text-elements);

section {
    content: @selector-list; // yields only " body.single .entry-content p,"
}

为什么@ selector-list不能建立在第一个元素之后?我不完全了解何时打印/退回某些内容,所以也许我会以所有错误的方式进行处理?


问题答案:

如前所述,您的尝试几乎就在那里,由于可见性规则可变,因此无法正常工作。请注意,每次.selector-list迭代都定义了新@selector- list变量,该变量在当前作用域中具有更高的优先级,但不会覆盖@selector-list外部作用域(即先前.selector-list迭代及
以上 迭代的作用域)中的变量。因此,当您@selector-list在首次.selector-list调用后使用时,您将获得“最高”
.selector-list迭代中设置的值 (即第一个带有的值@i = 1)。

“重返”从递归循环的最后一次迭代的值,你需要使用此值定义一个变量 内的最后一次迭代。通常,最简单的方法是提供“终端”
mixin(即,递归mixin的最后一次调用的特殊化)。实际上,无论如何,您都将需要这样的终端来处理列表的最终逗号。例如:

#1

.selector-list(@parent, @children, @i: 1, @list: "") when (@i < length(@children)) {
    @child: extract(@children, @i);
    .selector-list(@parent, @children, (@i + 1), "@{list} @{parent} @{child},");
}

.selector-list(@parent, @children, @i, @list) when (@i = length(@children)) {
    @child: extract(@children, @i);
    @selector-list: e("@{list} @{parent} @{child}");
}

// usage:

@text-elements: p, ul, ol, table;

.selector-list("body.single .entry-content", @text-elements);
@{selector-list} {
    line-height: 1.8;
}

--

#2 与上述相同,只是稍微“优化”:

.selector-list(@parent, @children, @i: length(@children), @list...) when (@i > 1) {
    .selector-list(@parent, @children, (@i - 1),
        e(", @{parent}") extract(@children, @i) @list);
}

.selector-list(@parent, @children, 1, @list) {
    @selector-list: e(@parent) extract(@children, 1) @list;
}

// usage:

@text-elements: p, ul, ol, table;

.selector-list("body.single .entry-content", @text-elements);
@{selector-list} {
    line-height: 1.9;
}

--

#3
一般而言,在Less上下文中,“基于字符串的选择器操作”并不总是一个好主意。主要的问题是少不把这样的字符串为“原生”选择和最先进的减配也不会与他们合作(如少也不会承认,&和类似的元素有那么这样的规则不能嵌套,extend也无法看到此类选择器等。)。另一种“较少友好”的方法是将这样的列表定义为混合而不是变量,例如:

.text-elements(@-) {p, ul, ol, table {@-();}}

body.single .entry-content { 
    .text-elements({
        line-height: 1.8;
    });
}

和(当您还需要重用时body.single .entry-content /.text-elements/):

.text-elements(@-) {
    p, ul, ol, table 
        {@-();}}

.selector-list(@-) {
    body.single .entry-content {
        .text-elements(@-);
    }
}

.selector-list({
    line-height: 1.9;
});

等等

--

PS另外,更笼统地说,请不要错过更少的媒体查询,可以将其放入选择器规则集中,因此,根据用例,编写一次选择器列表并设置依赖于媒体的样式通常也更容易在内部(例如,与标准CSS方法相反,您必须为每个媒体查询重复相同的选择器)。



 类似资料:
  • 问题内容: 无论如何,LESS是否在其输出中应用直接子选择器(>)? 以我的style.less,我想写一些类似的东西: 并让LESS生成如下内容: 问题答案: 更新 实际上,原始问题中的代码可以正常工作。您可以坚持使用子选择器。 找到了答案。 请注意“>”和“。”之间缺少空格,否则它将无法正常工作。

  • Select 列选择器 1.3.0 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 所有的配置模式中,都要求传入数组的元素(对象)中含有value和label属性(可以通过value-name和label-name参数自定义), value用于在回调时,区别选择了哪一个(针对开发者),label用于展示在选择器中,供用

  • 调用 gradle 命令时, 默认情况下总是会构建当前目录下的文件, 可以使用 -b 参数选择其他目录的构建文件, 并且当你使用此参数时 settings.gradle 将不会生效, 看下面的例子: 例 11.5. 选择文件构建 subdir/myproject.gradle task hello << { println "using build file '$buildFile.nam

  • 希望能澄清一下我什么时候应该使用和。这可能不是节奏问题,但也许我错过了一些关于Golang的知识。 对于我认为基本思想是等待通道的下一个输出。不完全确定什么是可以。 例如,在cadence示例中,< code>local_activity链接并粘贴在下面: 我们不使用任何 但是,在这里的例子中,它也使用信号通道:根据外部输入改变优步节奏睡眠时间 我还会将代码粘贴到这里 你可以看到有,我不完全确定它

  • 问题内容: 在该文档是 非常 简洁http://pandas.pydata.org/pandas- docs/stable/generated/pandas.DataFrame.query.html 。我也无法通过网络搜索找到投影的示例。 因此,我尝试仅提供列名:这给出了语法错误。同样地键入内容,然后键入列名称。那么..该怎么做? 问题答案: 玩弄了一会儿,并通过阅读后的源代码的,我不能想出一个办

  • 本文向大家介绍Jsoup 使用CSS选择器选择元素,包括了Jsoup 使用CSS选择器选择元素的使用技巧和注意事项,需要的朋友参考一下 示例 您可以在此处找到支持的选择器的详细概述。