使用 LESS 构建选择器列表

2023-12-27

一般问题

我有媒体查询,我在其中更改某些文本元素,如下所示:

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 值?

我的尝试

我不是在寻找这个答案 https://stackoverflow.com/a/17699537/738672 or 这个答案 https://stackoverflow.com/a/20256708/738672,其中在函数中包含 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迭代和above)。所以当你使用@selector-list在最初的之后.selector-list调用你获取“最高”中设置的值.selector-list迭代(即第一个迭代@i = 1).

要“返回”递归循环的最后一次迭代的值,您需要使用该值定义一个变量only在最后一次迭代中。通常,最简单的方法是提供一个“终端”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 上下文中并不总是一个好主意。主要问题是 Less 不会将此类字符串视为“本机”选择器,并且大多数高级 Less 功能无法与它们一起使用(例如,Less 无法识别,, &和类似的元素,所以这样的规则不能嵌套,extend也看不到这样的选择器等)。 另一种更“不太友好”的方法是将此类列表定义为 mixin 而不是变量,例如:

.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;
});

etc.

-

附:另外,更一般地说,不要错过在 Less 中媒体查询可能会放入选择器规则集中,因此根据用例,一次编写选择器列表并在其中设置媒体相关样式通常也更容易(即,与标准 CSS 方法相反,您必须为每个媒体查询重复相同的选择器)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 LESS 构建选择器列表 的相关文章

  • CSS - 让div继承高度

    我正在尝试制作一个带有圆角的盒子 其中 div 的高度和宽度取决于内容 因此它会自动调整 您可以在此处查看示例 http pastehtml com view 1duizyf html http pastehtml com view 1du
  • 如何正确使用 z-index?

    请在此处查看此页面 http www blakearchive org blake public exhibits canterburySpecial html http www blakearchive org blake public
  • 更改 Angular 对话框的背景颜色

    我正在尝试更改对话框背景 无需触摸style css file 正如其他一些答案所说 有很多方法可以设置对话框样式 1 此解决方案适用于宽度和高度 但透明背景被 忽略 this dialog open DialogComponent dis
  • 使用 HTML 和 CSS 创建横向和纵向布局

    我有一个要求 我需要编写一个 HTML CSS 它应该显示横向和纵向 具体取决于 iPad 的方向 最初我想使用 HTML 和 CSS 编写这个 然后将其用于 iPad发展 我的问题是实现这一目标的最佳方法是什么 拥有两个不同的 html
  • 如何使用 Angular 创建 n 个可打印页面?

    嗯 我搜索了一下 没有找到类似的东西 我想知道如何使用 Angular 创建可打印内容 跳转到页面末尾并打印更多内容 如何强制内容始终适合特定尺寸 例如 PDF 我需要 Angular 来执行此操作吗 如果不是 HTML 我可以迭代 PDF
  • 如何为平板电脑和 iPhone 制作样式表

    我认为样式表上的链接目标将使我的 css 文件仅在平板电脑或 iPhone 上加载时加载 但我试图隐藏的元素仍然存在 我目前正在使用 media handheld 有太多的移动设备型号需要为其编写样式表 你最好根据以下内容调整你的CSS屏幕
  • 如何在索引视图中打印关联数据

    subjects this gt Subjects gt find all contain gt Users fields gt Users username Users email gt hydrate false gt toArray
  • 如何在绝对定位的 div 内用 CSS 创建粘性页脚?

    我想创建一个粘性页脚inside绝对定位的 div 元素 我的方法是将页脚 div 也绝对定位 在另一个相对定位的 页面 div 内 其中包含页面的实际内容 div class content div class page Some Lor
  • Ace Editor 自动完成和多种语言

    如何为 Ace 编辑器创建自动完成功能以及如何突出显示 php 中的 html javascript 和 csshttp ace ajax org http ace ajax org
  • 如何使弹出窗口溢出:在溢出内可见:自动上下文

    我有一个 div 列表 如果超过父框 overflow x 应该滚动 并且在悬停时 我想看到一个弹出窗口 我的问题是 如果我将鼠标悬停在任何子 div 上 弹出窗口将被考虑用于溢出计算 但我只想让它在所有内容之上可见 而不是使其扩展滚动区域
  • IE10 中的弹性盒

    我试图让弹性框在 IE10 中工作 但它不起作用 Safari Chrome 和 Firefox 工作正常 但 IE10 不工作 有人知道答案吗 代码笔 http codepen io anon pen vcEGH http codepen
  • 使用 flex 将项目与底部对齐

    我正在尝试使用 flex 将父级内部的项目与父级底部对齐 但由于某种原因它不起作用 我究竟做错了什么 login border 1px solid red height 50px display flex login border radi
  • 使用最后一个子选择器减少 CSS

    我在用less并试图得到last输入有一个边距底部 of 10px 这是我所拥有的 但它不起作用 并且没有在最后一个输入上应用 margin bottom 有什么想法吗 input margin bottom 0px last child
  • 如何居中对齐数据表标题

    我是数据表新手 当我制作表格标题时 它总是左对齐 如何将标题设置为居中对齐 我已阅读 datatables net manual styling classes 和 datatables net reference option colum
  • 固定 Div 与静态 div 的滚动条重叠

    我无法按照我想要的方式设计布局 我有一个内容区 content 您可以在示例图像中看到的灰色 里面有一个黄色元素 这个div是position static height 100 现在我有一个 left paneldiv 也 与positi
  • Ionic 2:隐藏滚动条并继续滚动

    我只想hide滚动条 在需要滚动的页面中 我正在使用离子2 My 不工作解决方案 scroll content bar overflow hidden 此解决方案隐藏滚动条but使屏幕不可滚动 首先 改变浏览器的自然行为和预期的用户体验是一
  • Twitter Typeahead 上使用 Bootstrap 3 的 CSS 问题

    随着 Bootstrap 3 的发布 Typeahead 已被删除 取而代之的是 https github com twitter typeahead js https github com twitter typeahead js 我已经
  • Chrome 版 Firebug Lite 会破坏悬停效果和鼠标悬停事件

    我有一个奇怪的问题 使用时适用于 Chrome 的 Firebug Lite https chrome google com webstore detail firebug lite for google c bmagokdooijbeeh
  • AngularJS + jQuery 移动

    是否还有其他可能性来设计AngularJS以移动友好的方式应用程序CSS 我正在计划一个移动应用程序 并希望使用 AngularJS 进行逻辑和数据绑定 但我不想自己设计所有内容CSS The AngularJSFAQ说它使用jQuery
  • 选择子元素但不选择孙元素

    我有以下简化的代码 div p text p div div p text p div div p text p div div p text p div 每当我设置一些值时 content pCSS 文件中的元素 更改也适用于 col1

随机推荐

  • Django 模型字段。自定义字段值设置器

    有没有办法在 django 自定义属性设置器中执行这样的操作 class MyModel models Model myfield models CharField length 250 myfield setter def set pas
  • 读取 COBOL 中的 STDIN (SYSIN)

    我想从 COBOL 中的 STDIN 又名 SYSIN 中读取行 现在我只想把它们打印出来 这样我就知道我已经拿到了它们 从我读到的所有内容看来 这应该有效 IDENTIFICATION DIVISION PROGRAM ID APP EN
  • 无法解析 ApplicationModule 的参数:(?)

    对 Angular 来说还很陌生 我的应用程序包含 1 个服务和 3 个组件 编译成功 我收到此错误 但不知道出了什么问题 未捕获的错误 无法解析 ApplicationModule 的所有参数 Debugging gave me very
  • 使用 oembed 端点获取 Instagram 的视频媒体源

    上下文 我有一段 jQuery ajax 代码 直到最近几周左右 它已经愉快地工作了大约 9 个月 此代码使用 Instagram 的嵌入端点 http instagram com developer embedding 这使我能够从正常的
  • 在python中生成IMEI

    你好 我正在尝试在 python 中创建一个函数来生成有效的 IMEI 号码 所以这是我的函数 IMEI 验证使用 Luhn 算法 所以我尝试在我的脚本中实现它 def getImei num suma 0 for i in range 0
  • 关于C++ 11中头的几个问题

    我有几个关于新的问题
  • 引擎“节点”与该模块不兼容

    部署到 AWS 时出现以下纱线错误 error email protected cdn cgi l email protection The engine node is incompatible with this module Expe
  • 使用 class.isEnum() 还是 instanceof Enum 更好?

    我有一个对象 我想检查它是否是枚举类型 有两种方法可以做到这一点 object getClass isEnum or object instanceof Enum 有一个更好吗 在我看来object instanceof Enum更好有几个
  • Centos7 docker-py 好像没有安装

    我安装了 Centos7 最小版本 然后 ansible docker pip 并使用 pip 安装了 docker py 版本 Docker 版本 1 6 0 内部版本 8aae715 1 6 0 安塞波1 9 1 docker py 1
  • Play 框架依赖注入

    我一直在 Google 上寻找一些关于如何在 Play Framework 2 1 中使用 Guice Spring DI 的有用信息 我想要做的是在一些 DAO 中注入多个服务 反之亦然 只需要对此进行一些澄清 在 play 2 1 中
  • 如何创建指定的typescript RN版本?

    我输入命令以使用 typescript 创建 React Native 项目 npx react native init MyApp template react native template typescript 包 json reac
  • 指向不同返回类型和签名的函数的指针映射

    我正在寻找一种通过字符串输入调用不同函数的方法 我有一个映射 它将每个唯一的字符串与一个函数指针联系起来 还有一个查找函数来搜索映射并在找到时返回一个指针 现在的技巧是 我需要一种方法来存储和返回指向至少具有不同返回类型的函数的指针 如果可
  • JavaScript new Array(n) 声明的使用

    基本的 JavaScript 问题 因为数组没有像 Java 那样的硬性限制 即索引越界异常 https docs oracle com javase 8 docs api java lang IndexOutOfBoundsExcepti
  • git fetch 未获取最新提交

    运行 Jenkins 服务器的 Windows 7 机器在使用 git 时遇到一些问题 我们的代码托管在 GitHub 上 并且每晚都会运行构建 该作业要做的第一件事是从 GitHub 签出分支 X 然后运行构建脚本 不幸的是 我们注意到构
  • Java - 根据条件将 for 循环计数器转回原处

    以下是我的大学作业代码的一部分 else if codeList contains userCode i i is the counter for the for loop else if userQuantity i 0 i 第一部分确保
  • 如何在 Entity Framework Core 中构建多个左连接查询

    考虑我有以下实体 public class Root public long Id get set public class School Root public long StudentId get set public Student
  • 如何从跨站弹窗访问window.opener?

    我正在制作一个小部件 我需要在弹出窗口中的特定事件之后将父窗口重定向到特定的网址 该网址基于另一个域 怎么能做到这一点 window opener location replace url 你就是不能那样做 大多数浏览器不允许跨站点脚本编写
  • Entity Framework Core SelectMany 然后包含

    我似乎无法弄清楚如何让 EF Core 在使用 SelectMany 时包含 加载相关对象 context MyObject Where w gt w Id Id SelectMany m gt m SubObject Include i
  • 失败 - 无法在上下文路径部署应用程序

    在解释问题之前 我只想指出我对 NetBeans 和 Tomcat 完全陌生 而且我正在做一个学校项目 话虽这么说 问题正是标题所说的 以下是我尝试运行简单的 Hello World jsp 时的输出 就地部署于 C Users lostl
  • 使用 LESS 构建选择器列表

    一般问题 我有媒体查询 我在其中更改某些文本元素 如下所示 body single entry content p body single entry content ul body single entry content ol body