Sass 语法

文章目录

    • 编译
    • 变量 \$
    • 嵌套 {} > + \~
    • 导入 @import
    • 注释 // /*\* \**/
    • 混入 @mixin/@include
    • 继承 @extend
    • 数据类型
    • 运算
    • 控制 @if/@for/@each/@while
    • 函数 @function
    • 媒体查询 @media
    • 根发出 @at-root
    • 警告@warn/错误@error/调试@debug

编译

编译命令

  • 单文件转换命令 sass input.scss output.css
  • 单文件监听命令 sass --watch input.scss:output.css
  • 如果你有很多的sass文件的目录,你也可以告诉sass监听整个目录:sass --watch app/sass:public/stylesheets

编译配置项

  • –style 表示解析后的 css 是什么排版格式

    • :nested 默认

      #main {
        color: #fff;
        background-color: #000; }
        #main p {
          width: 10em; }
      
      .huge {
        font-size: 10em;
        font-weight: bold;
        text-decoration: underline; }
      
    • expanded

      #main {
        color: #fff;
        background-color: #000;
      }
      #main p {
        width: 10em;
      }
      
      .huge {
        font-size: 10em;
        font-weight: bold;
        text-decoration: underline;
      }
      
    • compact

      #main { color: #fff; background-color: #000; }
      #main p { width: 10em; }
      
      .huge { font-size: 10em; font-weight: bold; text-decoration: underline; }
      
    • compressed

      #main{color:#fff;background-color:#000}#main p{width:10em}.huge{font-size:10em;font-weight:bold;text-decoration:underline}
      
  • –sourcemap 表示开启 sourcemap 调试。开启 sourcemap 调试后,会生成一个后缀名为 .css.map 文件。

变量 $

  • 普通变量 $fontSize: 12px; 只在当层块以及以下块内有用,如果内部块有同名变量则以内部为准,类似于函数的块作用域

  • 默认变量 $fontSize: 12px !default;

    • 如果之前未定义过该变量,则给该变量赋初始值;如果之前已经定义过该变量且赋过不为 null 的值,则该默认赋值将被忽略。

    • 它可被其他同名普通变量覆盖。

  • 变量引用 只在当层块以及以下块内有用,如果内部块有同名变量则以内部为准,类似于函数的块作用域

  • 变量名 用中划线和下划线连接都可以,无论用中划线还是下划线等值

    $link-color: blue;
    a {
      color: $link_color;
    }
    //编译后
    a {
      color: blue;
    }
    
  • 插值语句 #{}

    对变量取值的一种特殊用法,通过 #{} 插值语句可以在选择器或属性名中使用变量:

    $name: foo;
    $attr: border;
    p.#{$name} {
      #{$attr}-color: blue;
    }
    
    p.foo {
      border-color: blue; }
    
    // #{} 插值语句也可以在属性值中插入 SassScript,大多数情况下,这样可能还不如使用变量方便,但是使用 #{} 可以避免 Sass 运行运算表达式,直接编译 CSS。
    p {
      $font-size: 12px;
      $line-height: 30px;
      font: #{$font-size}/#{$line-height};
    }
    

嵌套 {} > + ~

  • 父级选择器 &
    // 一般用法
    article a {
      color: blue;
      &:hover { color: red }
    }
    /*编译后*/
    article a { color: blue }
    article a:hover { color: red }
    
    // 你想不到但也有用处的用法
    #content aside {
      color: red;
      body.ie & { color: green }
    }
    /*编译后*/
    #content aside {color: red};
    body.ie #content aside { color: green }
    
  • 选择器嵌套
    • 群组选择器
    • 子组合选择器:>
    • 同层相邻选择器:+
    • 同层选择器:~
    article {
      ~ article { border-top: 1px dashed #ccc }
      > section { background: #eee }
      dl > {
        dt { color: #333 }
        dd { color: #555 }
      }
      nav + & { margin-top: 0 }
    }
    /*编译后*/
    article ~ article { border-top: 1px dashed #ccc }
    article > footer { background: #eee }
    article dl > dt { color: #333 }
    article dl > dd { color: #555 }
    nav + article { margin-top: 0 }
    
  • 属性嵌套 属性前缀相同可以将属性提取出来进行属性嵌套
    // 一般属性嵌套
    nav {
      border: {
      style: solid;
      width: 1px;
      color: #ccc;
      }
    }
    /*编译后*/
    nav {
      border-style: solid;
      border-width: 1px;
      border-color: #ccc;
    }
    
    // 你想不到但又很实用的用法——属性嵌套+属性缩写
    nav {
      border: 1px solid #ccc {
      left: 0px;
      right: 0px;
      }
    }
    /*编译后*/
    nav {
      border: 1px solid #ccc;
      border-left: 0px;
      border-right: 0px;
    }
    

导入 @import

  • css @import VS sass @import

    原生 css 的@import 可以导入外部 .css 样式文件,但只有执行到 @import时,浏览器才会去下载其他 css 文件,这导致页面加载起来特别慢。所以用 sass 的 @import 去导入外部样式文件,在生成 css 文件时就把相关文件导入进来。

    如何区分 @import 是 css 还是 sass 的导入功能呢?只有以下三种情况,sass 文件中的 @import 是以原生 css 的行为做导入操作。

    • 被导入文件的名字以 .css 结尾;
    • 被导入文件的名字是一个 URL 地址(比如 http://www.sass.hk/css/css.css),由此可用谷歌字体 API 提供的相应服务;
    • 被导入文件的名字是 CSS 的 url() 值。
  • 单文件导入 @import "test2.scss";

    可省略后缀,即支持 .scss、.sass 格式,但不能用 @import 导入 .css 文件,它会认为是想用原生 css @import 导入。但因为 sass 兼容原生 css,我们可以将 .css 改为 .scss,这样就以 sass 的方式导入样式文件。

  • 多文件导入 @import "test2.scss", "test3.scss";

  • 部分文件 Partials 导入,不希望被编译为 css,Partials 文件命名需要 _ 开头,但引入的时候不需要 _。

  • 嵌套导入

    #main {
        // 生成的结果跟你直接在 #main 选择器内写_test2.scss文件的内容完全一样。
        // 注意部分导入的样式文件命名要以 _ 开头,但引入的时候可以省略 _ 符号
    	@import "test2.scss";
    }
    

注释 // /* */

  • 多行注释 /* */,编译到 css 文件

    如果写在原生 css 不支持的地方,识别不了,也不会编译到 css 文件中。

  • 单行注释 // 不会被编译到 css 文件

混入 @mixin/@include

如果你的整个网站中有几处小小的样式类似(例如一致的颜色和字体),那么使用变量来统一处理这种情况是非常不错的选择。但是当你的样式变得越来越复杂,你需要大段大段的重用样式的代码,独立的变量就没办法应付这种情况了。你可以通过 sass 的混合器实现大段样式的重用。

  • 定义混入

    • 无参 @mixin large-tex{...}

    • 有参 @mixin large-text($color, $width:10px) {...}

  • 使用混入

    • 无参@include large-text
    • 有参 只传 value,要和形参位置严格对应 @include large-text('red', 20px) ;使用name:value形式传参不限制传参位置@include large-text($width:20px);可以给参数设置默认值

继承 @extend

@extend 类名继承其他样式类

//通过选择器继承继承样式
.error {
  border: 1px solid red;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}

// 一般你以为继承到的
.seriousError {
  border: 1px solid red;
  background-color: #fdd;
  border-width: 3px;
}

// 除了以上从 .error 自身继承到的,其它与 .error 相关联的组合样式都被 .seriousError 继承
.error a{  // 应用到 .seriousError a
  color: red;
  font-weight: 100;
}
h1.error { // 应用到 hl.seriousError
  font-size: 1.2rem;
}

关于 @extend 有两个要点你应该知道。

  • 跟混合器相比,继承生成的 css 代码相对更少。因为继承仅仅是重复选择器,而不会重复属性,所以使用继承往往比混合器生成的 css 体积更小。如果你非常关心你站点的速度,请牢记这一点。

    所以最佳实践是你完全可以放心地继承有后代选择器修饰规则的选择器,不管后代选择器多长,但有一个前提就是,不要用后代选择器去继承。因为如果用后代选择器去继承有后代选择器的 css 规则,会让情况变得很复杂。

  • 继承遵从 css 层叠的规则。当两个不同的 css 规则应用到同一个 html 元素上时,并且这两个不同的 css 规则对同一属性的修饰存在不同的值,css 层叠规则会决定应用哪个样式。相当直观:通常权重更高的选择器胜出,如果权重相同,定义在后边的规则胜出。

数据类型

  • 字符串,有引号字符串与无引号字符串,“foo”, ‘bar’, baz

    // 需要注意的是索引从 1 开始
    // https://www.runoob.com/sass/sass-string-func.html
    quote(string) - 给字符串添加引号。
    unquote(string)	- 移除字符串的引号
    str-index(string, substring) - 返回 substring 子字符串第一次在 string 中出现的位置。如果没有匹配到子字符串,则返回 null。
    str-insert(string, insert, index) - 在字符串 string 中 index 位置插入 insert。
    str-length(string) - 返回字符串的长度。
    str-slice(string, start, end) - 从 string 中截取子字符串,通过 start-at 和 end-at 设置始末位置,未指定结束索引值则默认截取到字符串末尾。包含起始和截止索引位置字符。
    to-lower-case(string) - 将字符串转成小写
    to-upper-case(string) - 将字符串转成大写
    unique-id()	- 返回一个无引号的随机字符串作为 id。不过也只能保证在单次的 Sass 编译中确保这个 id 的唯一性。
    
  • 数字,1, 2, 13, 10px

    abs(number)	- 返回一个数值的绝对值。
    ceil(number) - 向上取整
    floor(number) - 向下取整
    comparable(num1, num2) - 返回一个布尔值,判断 num1 与 num2 是否可以进行比较
    max(number...) - 返回最大值
    min(number...) - 返回最小值
    percentage(number) - 将数字转化为百分比的表达形式。
    random() - 返回 0-1 区间内的小数,
    random(number) - 返回 1 至 number 之间的整数,包括 1 和 limit。
    round(number) - 返回最接近该数的一个整数,四舍五入。
    
  • 列表 ,list,用空格或逗号作分隔符,1.5em 1em 0 2em, Helvetica, Arial, sans-serif

    // Sass 列表是不可变的,因此在处理列表时,返回的是一个新的列表,而不是在原有的列表上进行修改。
    // 列表的起始索引值为 1,记住不是 0。
    append($list, $value, [$separator]) - 将单个值 $value 添加到列表尾部。$separator 是分隔符,默认会自动侦测,或者指定为逗号或空格。(space-空格,comma-逗号,slash-斜杠)
    index($list, $val) - 元素的索引位置,从1开始
    is-bracketed($list) - 判断列表中是否有中括号
    join($list1, $list2, [$separator, $bracketed]) - 合并两列表,将列表 list2 添加到列表 list1 的末尾。$separator 是分隔符,默认会自动侦测,或者指定为逗号或空格。 $bracketed 默认会自动侦测是否有中括号,可以设置为 true 或 false。
    length($list) - 数组长度
    list-separator($list) - 返回一列表的分隔符类型。可以是空格或逗号。
    nth($list, $index) - 获取指定索引位置的值
    set-nth($list, $index, $val) - 设置指定位置的值
    zip($lists) - 将多个列表按照以相同索引值为一组,重新组成一个新的多维度列表。
    
  • 映射,maps, 相当于 JavaScript 的 object,(key1: value1, key2: value2)

    // Sass Map 是不可变的,因此在处理 Map 对象时,返回的是一个新的 Map 对象,而不是在原有的 Map 对象上进行修改。
    map-get($map, $key, [$keys...]) - 通过key值获取value;支持传入多个key值获取深层的值
    map-has-key($map, $key, [$keys...]) - 判断是否包含某个键;支持深层key
    map-keys($map) - 获取所有键的列表
    map-values($map) - 获取所有值的列表
    map-remove($map, $keys...) - 移除一个或多个key
    map-merge($map1, $map2) - 浅层次合并两个map,相同的属性取$map2的值
    
  • 颜色,blue, #04a3f9, rgba(255,0,0,0.5)

    rgb(red, green, blue) - 创建一个 Red-Green-Blue (RGB) 色。
    rgba(red, green, blue, alpha) - 根据红、绿、蓝和透明度值创建一个颜色。
    hsl(hue, saturation, lightness) - 通过色相(hue)、饱和度(saturation)和亮度(lightness)的值创建一个颜色。
    hsla(hue, saturation, lightness, alpha) - 通过色相(hue)、饱和度(saturation)、亮度(lightness)和透明(alpha)的值创建一个颜色。
    grayscale(color) - 将一个颜色变成灰色,相当于 desaturate( color,100%)complement(color) - 返回一个补充色,相当于adjust-hue($color,180deg)invert(color, weight) - 返回一个反相色,红、绿、蓝色值倒过来,而透明度不变。
    
    red(color) - 从一个颜色中获取其中红色值(0-255)。
    green(color) - 从一个颜色中获取其中绿色值(0-255)。
    blue(color) - 从一个颜色中获取其中蓝色值(0-255)。
    hue(color) - 返回颜色在 HSL 色值中的角度值 (0deg - 255deg)saturation(color) - 获取一个颜色的饱和度值(0% - 100%)lightness(color) - 获取一个颜色的亮度值(0% - 100%)alpha(color)	
    opacity(color) - 获取颜色透明度值(0-1)
  • 空值,null

  • 选择器函数 selector

    is-superselector(super, sub) - 比较两个选择器匹配的范围,即判断 super 选择器是否包含了 sub 选择器所匹配的范围,是的话返回 true,否则返回 false。
    selector-append(selectors) - 将第二个 (也可以有多个) 添加到第一个选择器的后面。 selector.
    selector-extend(selector, extendee, extender)	
    selector-nest(selectors) - 返回一个新的选择器,该选择器通过提供的列表选择器生成一个嵌套的列表。
    selector-parse(selector) - 将字符串的选择符 selector 转换成选择器队列。
    selector-replace(selector, original, replacement) - 给定一个选择器,用replacement 替换 original 后返回一个新的选择器队列。
    selector-unify(selector1, selector2) - 将两组选择器合成一个复合选择器。如两个选择器无法合成,则返回 null 值。
    simple-selectors(selectors) - 将合成选择器拆为单个选择器。	
    
  • Introspection 函数

    // Sass Introspection 函数比较少用于构建样式表,一般用于代码的调试上。
    call(function, arguments...) - 函数的动态调用,即调用函数 function 参数为 arguments,并返回结果。
    content-exists() - 查看当前的混入是否传递 @content 块。
    feature-exists(feature) - 检查当前的 Sass 实现是否支持该特性。
    function-exists(functionname) - 检测指定的函数是否存在
    get-function(functionname, css: false) - 返回指定函数。如果 css 为 true,则返回纯 CSS 函数。
    global-variable-exists(variablename) - 检测某个全局变量是否定义。
    inspect(value) - 返回一个字符串的表示形式,value 是一个 sass 表达式。
    mixin-exists(mixinname) - 检测指定混入 (mixinname) 是否存在。
    type-of(value) - 返回值类型。返回值可以是 number, string, color, list, map, bool, null, function, arglist。
    unit(number) - 返回传入数字的单位(或复合单位)。
    unitless(number) - 返回一个布尔值,判断传入的数字是否带有单位。
    variable-exists(variablename) - 判断变量是否在当前的作用域下。
    

运算

  • 字符串运算 +
  • 数字运算 +, -, *, /, %
  • 比较运算 <, >, <=, >=
  • 逻辑运算 and or 以及 not
  • 颜色值运算 #010203 + #040506,则计算 01 + 04 = 05、02 + 05 = 07、03 + 06 = 09,结果为#050709
  • 圆括号 ()

控制 @if/@for/@each/@while

  • @if:条件控制指令
  • @for:循环指令 包含 end @for $var from <start> through <end>,或者 不包含 end @for $var from <start> to <end>
  • @each:循环指令 @each $var in <list>
  • @while:循环指令

函数 @function

  • 内置函数

  • 自定义函数

    @function 函数名称(参数列表){
     // 数据处理
    }
    

媒体查询 @media

@media支持嵌套,编译到最外层

根发出 @at-root

@at-root 将样式编译到根层级。

警告@warn/错误@error/调试@debug

  • 警告 @warn message;

    警告信息,警告信息一般会在执行 scss 程序生成 css 时触发,所以出现在命令行中。

  • 错误 @error message;

    错误信息,错误信息直接显示在编译的 css 文件中。

  • 调试@debug 语句

    将 SassScript 表达式的值打印到标准错误输出流

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML5使用<mark>标签:高亮显示文本

1、<mark>标签的使用 mark 标签用于表示页面中需要突出显示或高亮的一段文本&#xff0c;这段文本对于当前用户具有参考作用。它通常在引用原文以引起读者注意时使用。<mark>标签的作用相当于使用一支荧光笔在打印的纸张上标出一些文字。它与强调不同&#xff0c;…

自闭症在生活中的典型表现

自闭症&#xff0c;这个看似遥远却又悄然存在于我们周围的疾病&#xff0c;其影响深远且复杂。在日常生活中&#xff0c;自闭症患者的典型表现往往让人印象深刻&#xff0c;这些表现不仅揭示了他们内心的世界&#xff0c;也提醒我们要以更加包容和理解的心态去面对他们。 首先…

UEC++ 虚幻5第三人称射击游戏(二)

UEC++ 虚幻5第三人称射击游戏(二) 派生榴弹类武器 新建一个继承自Weapon的子类作为派生榴弹类武器 将Weapon类中的Fire函数添加virtual关键字变为虚函数让榴弹类继承重写 在ProjectileWeapon中重写Fire函数,新建生成投射物的模版变量 Fire函数重写逻辑 代码//生成的投射物U…

MySQL中mycat与mha应用

目录 一.Mycat代理服务器 1.Mycat应用场景 2.mycat安装目录结构说明 3.Mycat的常用配置文件 4.Mycat日志 5.mycat 实现读写分离 二.MySQL高可用 1.原理过程 2.MHA软件 3.实现MHA 一.Mycat代理服务器 1.Mycat应用场景 Mycat适用的场景很丰富&#xff0c;以下是几个典型…

大模型的实践应用25-LLama3模型模型的架构原理,以及手把手教你搭建LLama3模型

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用25-LLama3模型模型的架构原理,以及手把手教你搭建LLama3模型。LLaMA 3 是Meta公司开发的最新一代大规模语言模型,其架构在很大程度上继承了LLaMA 2的设计,但对某些关键组件进行了改进和优化。 文章目录 一、LLama3模…

Vue通过Key管理状态

Vue通过Key管理状态 Vue 默认按照“就地更新”的策略来更新&#xff0c;通过 v-for 渲染的元素列表。当数据项的顺序改变时&#xff0c;Vue 不会随之移动 DOM 元素的顺序&#xff0c;而是就地更新每个元素&#xff0c;确保它们在原本指定的索引位置上渲染。为了给 Vue 一个提示…

mupdf加载PDF显示中文乱码

现象 加载PDF显示乱码,提示非嵌入字体 non-embedded font using identity encoding调式 在pdf-font.c中加载字体 调试源码发现pdf文档的字体名字居然是GBK&#xff0c;估计又是哪个windows下写的pdf生成工具生成pdf 字体方法&#xff1a; static pdf_font_desc * load_cid…

STM32利用FreeRTOS实现4个led灯同时以不同的频率闪烁

在没有接触到FreeRTOS时&#xff0c;也没有想过同时叫两个或两个以上的led灯闪烁的想法&#xff0c;接触后&#xff0c;发现如果想叫两个灯同时以不同的频率闪烁&#xff0c;不能说是不可能&#xff0c;就算是做到了也要非常的麻烦。但是学习了FreeRTOS后&#xff0c;发现要想同…

Qt 网络编程实战

一.获取主机的网络信息 需要添加network模块 QT core gui network主要涉及的类分析 QHostInfo类 QHostInfo::localHostName() 获取本地的主机名QHostInfo::fromName(const QString &) 获取指定主机的主机信息 addresses接口 QNetworkInterface类 QNetworkInterfac…

Redis---9---集群(cluster)

将新增的6387节点&#xff08;空槽号&#xff09;作为master节点加入原集群 Redis—9—集群&#xff08;cluster&#xff09; 是什么 定义 ​ 由于数据量过大&#xff0c;单个Master复制集难以承担&#xff0c;因此需要对多个复制集进行集群&#xff0c;形成水平扩展每个复…

电脑f盘的数据回收站清空了能恢复吗

随着信息技术的飞速发展&#xff0c;电脑已成为我们日常生活和工作中不可或缺的设备。然而&#xff0c;数据的丢失或误删往往会给人们带来极大的困扰。尤其是当F盘的数据在回收站被清空后&#xff0c;许多人会陷入绝望&#xff0c;认为这些数据已无法挽回。但事实真的如此吗&am…

【C语言】自定义类型:联合和枚举

前言 前面我们学习了一种自定义类型&#xff0c;结构体&#xff0c;现在我们学习另外两种自定义类型&#xff0c;联合 和 枚举。 目录 一、联合体 1. 联合体类型的声明 2. 联合体的特点 3. 相同成员联合体和结构体对比 4. 联合体大小的计算 5. 用联合体判断当前机…

AI Earth应用—— 在线使用sentinel数据VV和VH波段进行水体提取分析(昆明抚仙湖、滇池为例)

AI Earth 本文的主要目的就是对水体进行提取,这里,具体的操作步骤很简单基本上是通过,首页的数据检索,选择需要研究的区域,然后选择工具箱种的水体提取分析即可,剩下的就交给阿里云去处理,结果如下: 这是我所选取的一景影像: 详情 卫星: Sentinel-1 级别: 1 …

利用redis数据库管理代理库爬取cosplay网站-cnblog

爬取cos猎人 数据库管理主要分为4个模块&#xff0c;代理获取模块&#xff0c;代理储存模块&#xff0c;代理测试模块&#xff0c;爬取模块 cos猎人已经倒闭&#xff0c;所以放出爬虫源码 api.py 为爬虫评分提供接口支持 import requests import concurrent.futures import …

dependencyManagement的作用、nacos的学习

使用SpringCloudAlibaba注意各组件的版本适配 SpringCloudAlibaba已经包含了适配的各组件&#xff08;nacos、MQ等&#xff09;的版本号&#xff0c;也是一个版本仲裁者&#xff0c;但是可能已经有了父项目Spring-Boot-Starter-Parent这个版本仲裁者&#xff0c;又不能加多个父…

Mongodb oplog的作用及如何评估和更改保留时间

作者介绍&#xff1a;老苏&#xff0c;10余年DBA工作运维经验&#xff0c;擅长Oracle、MySQL、PG数据库运维&#xff08;如安装迁移&#xff0c;性能优化、故障应急处理等&#xff09; 公众号&#xff1a;老苏畅谈运维 欢迎关注本人公众号&#xff0c;更多精彩与您分享。oplog …

硅纪元视角 | 国内首款鸿蒙人形机器人“夸父”开启应用新篇章

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

景区气象站:守护旅行安全的智能向导

在繁忙的现代社会&#xff0c;人们越来越渴望逃离城市的喧嚣&#xff0c;寻找一处宁静的自然之地放松身心。景区&#xff0c;作为大自然与人类文明交织的瑰宝&#xff0c;吸引了无数游客前来探访。然而&#xff0c;多变的天气往往给游客的旅行带来不确定性。 景区气象站&#x…

Java跳出循环的四种方式

1、continue,break,return continue&#xff1a;跳出当前层循环的当前语句&#xff0c;执行当前层循环的下一条语句。   continue标签 break&#xff1a;跳出当前层循环。 break标签&#xff1a;多层循环时&#xff0c;跳到具体某层循环。 return&#xff1a;结束所有循环…

微观特征轮廓尺寸测量:光学3D轮廓仪、共焦显微镜与台阶仪的应用

随着科技进步&#xff0c;显微测量仪器以满足日益增长的微观尺寸测量需求而不断发展进步。多种高精度测量仪器被用于微观尺寸的测量&#xff0c;其中包括光学3D表面轮廓仪&#xff08;白光干涉仪&#xff09;、共聚焦显微镜和台阶仪。有效评估材料表面的微观结构和形貌&#xf…