简化重复的 LESS

2023-12-05

我正在为 WordPress 网络创建一个主题系统,该系统支持多种布局主题,可以支持各种大学的配色方案。为此,我定期编译一个带有学校特定变量的 LESS 文件(使用 lessphp),并实质上将其用作主题中的辅助类库。

每所学校都有 3 种颜色,在 LESS 中定义为:@primary, @secondary and @tertiary。该方法简单且实用,但需要大量重复代码。例如:

//Modifier Classes
  .primary-lighter-text {
      color: lighten(@primary,20);
  }
  .sec-lighter-text {
      color: lighten(@secondary,20);
  }
  .tert-lighter-text {
      color: lighten(@tertiary,20);
  }
//Backgrounds
  .primary-bg {
      background-color: @primary;
  }

  .sec-bg {
      background-color: @secondary;
  }

  .tert-bg {
      background-color: @tertiary;  
  }

//Borders
  .primary-border{
      border-color: @primary;
  }
  .sec-border {
      border-color: @secondary;
  }
  .tert-border {
      border-color: @tertiary;      
  }

从 LESS 的角度来看,没什么复杂的,但如果我想添加一个新的帮助器类,我必须创建 3 个。有没有更简洁的方法来实现这一点?


您可以通过使用数组循环来简化它。如果有新添加,您需要修改的就是修改末尾的数组变量。

.loop-column(@index) when (@index > 0) { /* Recursive Mixin with Guard condition. Mixin is processed only when the condition is satisfied */
  .loop-column(@index - 1); /* Call the mixin again with a decremented counter */
  @ctype:  extract(@type, @index); /* Extract the type value corresponding to the index from the array */
  @color:  extract(@colors, @index); /* Extract the color value corresponding to the index from the array */

  /* Form and Output the necessary classes and properties */
  .@{ctype}-lighter-text { /* Selector interpolation to dynamically form the selector */
    color: lighten(@color,20);
  }
  .@{ctype}-bg {
    background-color: @color;
  }
  .@{ctype}-border{
    border-color: @color;
  }  
}

.loop-column(length(@type));

@type: primary, sec, tert; /* The color types array */
@colors:#fff, #777, #000; /* The color value array for each type */
/* If required the colors can be kept as separate variables also. Refer 2nd demo. */

Demo | Demo 2

Update:(根据评论安德鲁·卡弗雷克 and 最多七相)

由于 LessPHP 已过时,因此应添加以下行并length(@type)应替换为实际计数。

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

简化重复的 LESS 的相关文章

随机推荐

  • Excel VBA 循环遍历可见的筛选行

    我有一个带有自动过滤器的 Excel 表格 在过滤表中 我只过滤了几行 我的目标是迭代所有可见行以收集数据以复制到另一张工作表 我想要一种方法来收集具有第一个可见行号的变量 我的草稿代码是 Dim cnp As String Dim nom
  • 我们是否应该在 React 功能组件的每个函数处理程序中使用 useCallback

    假设我们有这样的组件 const Example gt const counter setCounter useState 0 const increment gt setCounter counter gt counter 1 retur
  • 使用具有 PhoneStateListener 功能的 BroadcastReceiver

    我正在尝试制作一个 MissCall 应用程序 当收到未接来电时 该应用程序会自动发送消息 我已经完成了我的应用程序并且运行良好 这是完整的场景 问题 该应用程序运行良好但是当我重新启动设备时 应用程序无法运行 它仅在我启动我的应用程序至少
  • 是否可以将占位符文本从头到尾转换?

    我想在已知宽度的文本输入中从头到尾转换单行动态占位符文本 隐藏溢出 现在我知道对于常规容器 div 我可以利用转换来转换正确的长度 因此 对于长度为 100px 的容器 我可以使用以下命令过渡到文本末尾 transform translat
  • Swift 2 - 将数组分成带有从 A 到 Z 的键的字典

    例如 我有一个数组 Apple Banana Blueberry Eggplant 我想将其转换为字典 如下所示 A Apple B Banana Blueberry C D E Eggplant 我在 Xcode 7 beta 4 上使用
  • ArrayList并发访问

    我知道ArrayList不是线程安全的 但我不确定这的确切含义 如果是ThreadA and ThreadB两者都使用ArrayList 哪些情况会导致问题并需要同步 两个线程同时读取相同的索引 ThreadA替换一个元素ThreadB正在
  • 如何将 plone 的内容块插入到重氮主题中

    我在 Plone 4 1 中使用重氮 当前为 plone app theming 1 0b1 r48205 我想完全使用 Plone 的 html 作为搜索小部件 除了我想替换
  • 当函数返回由模板类型和另一个类型组成的类型时,模板参数推导

    标题很难用文字表达 但这是我试图在不可编译的代码中实现的目标 template
  • 如何在服务器上设置 SvelteKit 存储并保持反应性?

    我正在尝试构建一台使用 setInterval 回调更改服务器上数据的机器 在理想的情况下 服务器间歇性地检查数据并将其保存在缓存中 前端组件使用该缓存将其呈现在浏览器中 现在我的 server ts 文件says它会定期更改数据并将其添加
  • 使用 Gluon ShareService 共享多个文件(图像和 txt)

    我们想知道如何使用 Gluon ShareService 共享多个文件 图像和 txt 文件 特别是如何与 PictureService 共享先前拍摄并存储 在图库中 的图像 但我们需要先创建一个包含路径和图像名称的文件 不幸的是 Pict
  • 如何关闭由邮件合并启动的 Excel 实例

    如何关闭由邮件合并启动的 Excel 实例 在启动器内运行的此代码无法访问通过 DDE 运行的 Excel For i 1 To Workbooks Count MsgBox here Workbooks i Name If Workboo
  • 为什么父类的受保护变量为空?

    我有一个受保护的变量Father类中 该变量的内容将发生变化Father类 但我需要在子类中使用这个变量 即 class Father protected body function construct this gt body test
  • 使用 urllib 删除 python 中的换行符

    我正在使用Python 3 x 使用时urllib request要下载网页 我得到了很多 n之间 我正在尝试使用论坛其他线程中给出的方法删除它 但我无法这样做 我用过strip 函数和replace 功能 但没有运气 我在 eclipse
  • 如何创建以当前时间命名的文件?

    我想在 log 目录下创建一系列文件 每个文件根据执行时间命名 在每个文件中 我想为我的程序存储一些日志信息 例如起作用的函数原型等 通常我使用 fopen log a 的硬方法 这不是为了这个目的 我只是写了一个时间戳函数 char ti
  • 无法将文件 .mdf 作为数据库附加

    我是 MVC 技术的新手 正在阅读培训材料 并遇到了以下实体框架错误消息 在这里 我尝试从 SQL Server Compact 数据库获取一条记录 但出现错误EmployeeController步骤中的类 Employee employe
  • Java 8 使用Optional 避免空指针检查

    是否可以编写这样的内容并避免检查元素是否不为空并且集合是否不为空 response getBody getRequestInformation getRequestParameters get 0 getProductInstances g
  • 计算数据框列中的单词数

    我有一个数据框 第一列中有句子 我想计算其中的单词数 Input Foo bar bar example lalala foo example sentence foo Output foo 3 bar 2 example 2 lalala
  • 使用 Thread.sleep 让 UI 线程等待

    我用 C 为 WP7 编写了这段代码 public void btn handler object sender EventArgs args Button btn Pressed Button sender ImageBrush br n
  • SQLite 片段函数实现不会将 TextView 中的文本格式化为 HTML

    我正在使用 SQLite 全文搜索实现搜索功能 我想像 Google 搜索一样用粗体查询文本显示结果 我已经实现了类似下面的代码 但它显示没有任何 HTML 格式的纯文本虽然将视图绑定到光标适配器并设置文本格式TextView 我无法弄清楚
  • 简化重复的 LESS

    我正在为 WordPress 网络创建一个主题系统 该系统支持多种布局主题 可以支持各种大学的配色方案 为此 我定期编译一个带有学校特定变量的 LESS 文件 使用 lessphp 并实质上将其用作主题中的辅助类库 每所学校都有 3 种颜色