SASS 控制指令详解@for、@if、@each、@while

news2024/11/14 20:04:31

SASS 控制指令详解

SASS 提供了多种控制指令,如 @for@if 和 @each,这些指令可以让你在样式表中编写更复杂和动态的逻辑。下面分别详细介绍这些指令的使用方法和示例。


1. @for 循环

@for 循环用于生成一系列重复的样式规则。它可以有两种形式:from ... through 和 from ... to

@for $variable from <start> through <end> {
  // 循环体
}

@for $variable from <start> to <end> {
  // 循环体
}
/* 
$variable:循环变量。
<start>:循环的起始值。
<end>:循环的结束值(包含在内)。
 */
  • from ... through:包含结束值。
  • from ... to:不包含结束值。

示例

// 生成一系列边框半径类
@for $i from 2 through 20 {
  .br-#{$i*2} {
    border-radius: 2rpx * $i;
  }
}

// 生成一系列宽度类
@for $i from 1 to 11 {
  .w-#{$i*10} {
    width: 10% * $i;
  }
}

 编译后的 CSS

/* 圆角 */
.br-4 {
  border-radius: 4rpx;
}

.br-6 {
  border-radius: 6rpx;
}

/* ...省略中间部分... */

.br-40 {
  border-radius: 40rpx;
}

/*宽*/

.w-10 {
  width: 10%;
}

.w-20 {
  width: 20%;
}

/* ...省略中间部分... */

.w-100 {
  width: 100%;
}

2. @if 条件语句

@if 语句用于根据条件生成不同的样式规则。可以与 @else if 和 @else 一起使用。

@if <condition> {
  // 条件为真时的样式
}
@else if <condition> {
  // 条件为真时的样式
}
@else {
  // 所有条件都不为真时的样式
}

示例

$theme: light;

body {
  @if $theme == light {
    background-color: white;
    color: black;
  } @else if $theme == dark {
    background-color: black;
    color: white;
  } @else {
    background-color: gray;
    color: black;
  }
}

编译后的 CSS

body {
  background-color: white;
  color: black;
}

3. @each 循环

@each 循环用于遍历列表或映射(map),并为每个项生成样式规则。

@each $variable in <list-or-map> {
  // 循环体
}

示例

// 遍历颜色列表
$colors: red, green, blue;

@each $color in $colors {
  .bg-#{$color} {
    background-color: $color;
  }
}

// 遍历映射
$breakpoints: (
  small: 480px,
  medium: 768px,
  large: 1024px
);

@each $name, $width in $breakpoints {
  @media (min-width: $width) {
    .#{$name}-screen {
      width: 100%;
    }
  }
}

编译后的 CSS

.bg-red {
  background-color: red;
}

.bg-green {
  background-color: green;
}

.bg-blue {
  background-color: blue;
}

@media (min-width: 480px) {
  .small-screen {
    width: 100%;
  }
}

@media (min-width: 768px) {
  .medium-screen {
    width: 100%;
  }
}

@media (min-width: 1024px) {
  .large-screen {
    width: 100%;
  }
}

4. @while 指令

@while 指令在 SASS 中用于创建基于条件的循环。与 @for 不同,@while 循环会一直执行,直到指定的条件不再满足为止。这使得 @while 在某些情况下非常有用,尤其是在需要动态生成不确定数量的样式规则时。

$variable: initial-value;

@while <condition> {
  // 循环体
  // 更新变量
}
  • $variable:初始化变量(就是个变量名,可以是任何名字,例如 aa,bb,cc)。
  • <condition>:循环条件,当条件为真时继续执行循环体。
  • 更新变量:在循环体中更新变量的值,以确保最终能够退出循环。

 示例

生成一系列背景颜色

假设我们想生成一系列带有不同背景颜色的类,每种颜色的透明度逐渐增加。

$i: 1;
$opacity-step: 0.1;
/* 声明两个变量 */

@while $i <= 10 {
  .bg-#{$i} {
                                 /* 让$1 * $opacity-step */
    background-color: rgba(0, 0, 255, $i * $opacity-step);
  }
  $i: $i + 1;
  /* 让$1 每次循环 +1 */
}

 编译后的 CSS

.bg-1 {
  background-color: rgba(0, 0, 255, 0.1);
}

.bg-2 {
  background-color: rgba(0, 0, 255, 0.2);
}

.bg-3 {
  background-color: rgba(0, 0, 255, 0.3);
}

/* ... */

.bg-10 {
  background-color: rgba(0, 0, 255, 1);
}

假设我们想生成一系列宽度类,每个类的宽度逐渐增加。

$i: 1;
$width-step: 10%;

@while $i <= 10 {
  .w-#{$i} {
    width: $i * $width-step;
  }
  $i: $i + 1;
}

编译后的 CSS

.w-1 {
  width: 10%;
}

.w-2 {
  width: 20%;
}

.w-3 {
  width: 30%;
}

/* ... */

.w-10 {
  width: 100%;
}

注意事项

  • 更新变量:在 @while 循环中,必须确保在每次迭代中更新条件变量,否则可能会导致无限循环。
  • 条件表达式:条件表达式必须返回一个布尔值(真或假),通常使用比较运算符(如 <=>=== 等)。
总结
  • @for 循环:用于生成一系列重复的样式规则,支持 from ... through 和 from ... to 两种形式。
  • @if 条件语句:根据条件生成不同的样式规则,可以与 @else if 和 @else 一起使用。
  • @each 循环:用于遍历列表或映射,并为每个项生成样式规则。
  • @while 循环:用于创建基于条件的循环,直到条件不再满足为止。
  • 语法@while <condition> { ... }
  • 示例:生成一系列背景颜色和宽度类。
  • 注意事项:确保在每次迭代中更新条件变量,避免无限循环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2239526.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

requests库如何处理 - POST请求常见的两种请求体格式:表单格式JSON格式

目录&#xff1a; 每篇前言&#xff1a;一、POST请求的两种常见请求体格式详解1. 表单格式&#xff08;form-encoded&#xff09; - 举例&#xff1a;福州搜索示例代码&#xff08;表单数据&#xff09;&#xff1a; 2. JSON格式 - 举例&#xff1a;CSDN搜索示例代码&#xff0…

HCIP-HarmonyOS Application Developer 习题(二十二)

1、用户将手机导航迁移至智能手表之后&#xff0c;智能手表如果需要获取手机传过来的数据&#xff0c;从下列哪个方法中获取? A、onCompleteContinuation() B、onStartContinuation() C、onRestoreData() D、onSaveData() 答案&#xff1a;C 分析&#xff1a;FA发起迁移后&am…

LLMs之Code:Github Spark的简介、安装和使用方法、案例应用之详细攻略

LLMs之Code&#xff1a;Github Spark的简介、安装和使用方法、案例应用之详细攻略 目录 Github Spark的简介 Github Spark的安装和使用方法 1、安装 2、使用方法 Github Spark的案例应用 Github Spark的简介 2024年10月30日&#xff0c;GitHub 重磅发布GitHub Spark 是一…

会议直击|美格智能受邀出席第三届无锡智能网联汽车生态大会,共筑汽车产业新质生产力

11月10日&#xff0c;2024世界物联网博览会分论坛——第三届无锡智能网联汽车生态大会在无锡举行&#xff0c;美格智能CEO杜国彬受邀出席&#xff0c;并参与“中央域控&#xff1a;重塑汽车智能架构的未来”主题圆桌论坛讨论&#xff0c;与行业伙伴共同探讨智能网联汽车产业领域…

HMSC联合物种分布模型在群落生态学中的贝叶斯统计分析

联合物种分布模型&#xff08;Joint Species Distribution Modelling&#xff0c;JSDM&#xff09;在生态学领域&#xff0c;特别是群落生态学中发展最为迅速&#xff0c;它在分析和解读群落生态数据的革命性和独特视角使其受到广大国内外学者的关注。在学界不同研究团队研发出…

【AI技术对电商的影响】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Python酷库之旅-第三方库Pandas(211)

目录 一、用法精讲 986、pandas.MultiIndex.get_loc方法 986-1、语法 986-2、参数 986-3、功能 986-4、返回值 986-5、说明 986-6、用法 986-6-1、数据准备 986-6-2、代码示例 986-6-3、结果输出 987、pandas.MultiIndex.get_locs方法 987-1、语法 987-2、参数 …

【go从零单排】通道select、通道timeout、Non-Blocking Channel Operations非阻塞通道操作

&#x1f308;Don’t worry , just coding! 内耗与overthinking只会削弱你的精力&#xff0c;虚度你的光阴&#xff0c;每天迈出一小步&#xff0c;回头时发现已经走了很远。 &#x1f4d7;概念 select 语句是 Go 的一种控制结构&#xff0c;用于等待多个通道操作。它类似于 s…

Java基于SpringBoot+Vue的宠物共享平台的设计与实现(附源码,文档)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

性能测试|JMeter接口与性能测试项目

前言 在软件开发和运维过程中&#xff0c;接口性能测试是一项至关重要的工作。JMeter作为一款开源的Java应用&#xff0c;被广泛用于进行各种性能测试&#xff0c;包括接口性能测试。本文将详细介绍如何使用JMeter进行接口性能测试的过程和步骤。 JMeter是Apache组织开发的基…

2025年使用 AI 识别解决 reCAPTCHA

人工智能无处不在。它是推动许多技术进步的动力&#xff0c;不断改变我们与网络的互动方式。从聊天机器人到个性化推荐&#xff0c;人工智能不再是遥远的未来概念&#xff0c;而是深深融入我们的日常生活。那么&#xff0c;当人工智能遇到 reCAPTCHA&#xff0c;一种最常见的在…

Axure PR 9 多级下拉选择器 设计交互

​ 大家好&#xff0c;我是大明同学。 Axure选择器是一种在交互设计中常用的组件&#xff0c;这期内容&#xff0c;我们来探讨Axure中多级下拉选择器设计与交互技巧。 下拉列表选择输入框元件 创建选择输入框所需的元件 1.在元件库中拖出一个矩形元件。 2.选中矩形元件&…

基础网络安全知识

1.ctfhub技能树 1.1 Web-SQL注入 Web-SQL注入-整数型 && 字符型 && MySQL结构 参考&#xff1a;5.9.6MySql注入 Web-SQL注入-报错注入 step1: 查库名 ?id1 and extractvalue(1,concat(0x7e,database(),0x7e))-- step2: 查看表名 ?id1 and extractvalue(1…

斯坦福泡茶机器人DexCap源码解析:涵盖收集数据、处理数据、模型训练三大阶段

前言 因为我司「七月在线」关于dexcap的复现/优化接近尾声了(每月逐步提高复现的效果)&#xff0c;故准备把dexcap的源码也分析下&#xff0c;11月​下旬则分析下iDP3的源码——为队伍「iDP3人形的复现/优化」助力 最开始&#xff0c;dexcap的源码分析属于此文《DexCap——斯…

【软件工程】ATAM架构权衡评估方法

ATAM架构权衡评估方法 概述质量属性有哪些&#xff1f;质量属性的效用树怎么构建&#xff1f;如何确定质量属性的优先级&#xff1f; 概述 ATAM&#xff08;Architecture Tradeoff Analysis Method&#xff09;是一种系统架构评估方法&#xff0c;由卡梅隆大学软件工程协会提出…

BPMNJS设计器开发核心功能分析

系统功能 在开发一个前端工作流设计器&#xff0c;尤其是基于BPMN&#xff08;业务流程建模与标注&#xff09;或类似于钉钉的设计器时&#xff0c;主要需求可以总结为以下几个关键点&#xff1a; 1. 流程节点与边的设计 节点类型多样化&#xff1a;支持基础节点&#xff08…

快递100 物流查询API全面解析

一.基础准备 1.物流查询痛点 如何通过物流单号实时查询物流信息?如何实时查看物流地图轨迹? 使用快递 100&#xff0c;用户可以通过简单地输入快递单号来获取快递的详细物流状态&#xff0c;不仅能看到包裹目前的位置信息&#xff0c;还可以了解它的运输进展。 快递 100API…

多角度审视推荐系统

参考自《深度学习推荐系统》——王喆&#xff0c;用于学习和记录 介绍 推荐工程师需要从不同的维度审视推荐系统&#xff0c;不仅抓住问题的核心&#xff0c;更要从整体上思考推荐问题。 具体包括以下内容&#xff1a; &#xff08;1&#xff09;推荐系统如何选取和处理特征…

网络自动化04:python实现ACL匹配信息(主机与主机信息)

目录 背景分析代码代码解读代码总体结构1. load_pattern_from_excel 函数2. match_and_append_pattern 函数3. main 函数总结 最终的效果&#xff1a; 今天不分享netmiko&#xff0c;今天分享一个用python提升工作效率的小案例&#xff1a;acl梳理时的信息匹配。 背景 最近同事…

如何查看电脑关机时间

要查看电脑的关机时间&#xff0c;可以按照以下步骤进行操作&#xff1a; 1. 打开事件查看器&#xff1a;按下键盘上的Windows键R键&#xff0c;然后在弹出的运行对话框中输入"eventvwr.msc"&#xff0c;并按下Enter键。 2. 在事件查看器窗口中&#xff0c;单击左侧窗…