我的编程空间,编程开发者的网络收藏夹
学习永远不晚

CSS的Sass框架中混合宏的使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

CSS的Sass框架中混合宏的使用

这篇文章主要讲解了“CSS的Sass框架中混合宏的使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS的Sass框架中混合宏的使用”吧!

我所探讨的焦点在 map 这种数据类型上,特别是使用 @content,@at-root 和 unique-id() 等指令合并 maps 所实现的奇妙方法。其中之一就是混合宏的设计模式,这一设计模式通过使用 @extend 指令和占位符选择器来解决 Sass 的一些实际问题:

由于常在代码开始部分引入占位符扩展,所以就应该将其置于代码顶部而不受其他因素所影响;
优先使用 @include 还是 @extend?这里给出的答案是 @include。
自意识混合宏的核心是通过创建或扩展占位符选择器,动态地生成相关样式。当它第一次被传参调用后,就会有一个 map 变量记录下相关的参数。随后,当再次使用相同的参数调用时,就会执行扩展同一占位符的操作,而不是生成重复代码。

在下面的代码中,有一些混合宏的参数是相同的,有一些参数是独有或特定的。那么在最终生成的 CSS 中,就会发现,具有相同参数的部分会使用扩展的方式,即合并选择器的方式;具有独特或特定参数的部分,则仍然会生成独立的选择器样式。

SCSS 源代码和测试数据:

CSS Code复制内容到剪贴板

  1. // 自意识混合宏示例   

  2.   

  3. // 定义全局 map,保存混合宏的相关信息   

  4. $my-mixin-info: ();   

  5.   

  6. // 使用任意形式的参数定义混合宏   

  7. @mixin my-mixin($pos1, $pos2, $map: (), $rest…) {   

  8.   

  9.   // 根据需要,捕获部分或全部参数   

  10.   $my-args: ($pos1, $pos2, $map);   

  11.   

  12.     // 在全局 map 中通过 key($my-args) 查找这些参数   

  13.   $id: map-get($my-mixin-info, $my-args);   

  14.   

  15.   // 如果找到了 id   

  16.   @if $id {    

  17.   

  18.     // 扩展该 id   

  19.     @extend %#{$id};    

  20.   

  21.     // 生成任意特定的样式   

  22.     specific: inspect($rest);   

  23.   }   

  24.   

  25.   // 否则   

  26.   @else {   

  27.   

  28.     // 新建一个 id   

  29.     $id: unique-id();   

  30.   

  31.         // 将该 id 整合入混合宏的 map 中   

  32.     $my-mixin-info: map-merge($my-mixin-info, ($my-args: $id)) !global;   

  33.   

  34.         // 在样式顶层生成占位符   

  35.     @at-root {   

  36.       %#{$id} {   

  37.   

  38.         // 生成共有样式   

  39.         common: inspect($my-args);   

  40.       }       

  41.     }   

  42.   

  43.     // 扩展该占位符   

  44.     @extend %#{$id};   

  45.   

  46.     // 生成任意特定的样式   

  47.     specific: inspect($rest);   

  48.   }   

  49. }   

  50.   

  51. .test {   

  52.   @include my-mixin(1, 2, (), 4, 5);   

  53. }   

  54.   

  55. .test2 {   

  56.   @include my-mixin(1, 2);   

  57. }   

  58.   

  59. .test3 {   

  60.   @include my-mixin(1, 2, (), 6, 7);   

  61. }  

生成的 CSS 代码:

CSS Code复制内容到剪贴板

  1. .test {   

  2.   specific: 4, 5;   

  3. }   

  4. .test, .test2, .test3 {   

  5.   common: 1, 2, ();   

  6. }   

  7.   

  8. .test2 {   

  9.   specific: ();   

  10. }   

  11.   

  12. .test3 {   

  13.   specific: 6, 7;   

  14. }  

混合宏灵活传参的秘技——Null

在 Sass 混合宏中,我们可以向其传递参数列表,便于快速地配置相关属性。就比如下面的这个混合宏,其中就包含了四个参数,用于定义元素的 display,padding 和 margin。

CSS Code复制内容到剪贴板

  1. @mixin display ($disp, $padding, $l-margin, $r-margin) {   

  2.   display: $disp;   

  3.   padding: $padding;   

  4.   margin-left: $l-margin;   

  5.   margin-right: $r-margin;   

  6. }  

当我们调用这个混合宏时,必须为每个参数传递一个合理的值,否则就会出现错误提示。

这往往强迫开发者为非必须的变量传值,甚至重置非必要的初始值。那么,怎样才能避免必须为每一个变量传值呢?

混合宏中的可选参数

如果我们为参数提供默认值,那么这个参数就成为了可选参数:

@mixin display ($disp, $padding:0, $l-margin:0, $r-margin:0) {
  …
}
如此一来,再次调用该混合宏时,$padding,$l-margin 和 r-margin 参数就成为了可选参数。但是,此时又会造成另一种问题:使用默认参数的混合宏有时生成的样式并不是精简的,和开发者的想法相比会有一些冗余,甚至是大量的重复性代码。

Null

好消息是,Sass 支持 null,这有助于大大改善混合宏中可选参数的使用体验。

通过使用 null,就可以排除掉某些样式,不会生成到最终的 CSS 样式中,除非我们调用混合宏时为其赋值。让我们使用 null 作为默认值来重写上面的混合宏:

CSS Code复制内容到剪贴板

  1. @mixin display (   

  2.   $disp,    

  3.   $padding: null,    

  4.   $r-margin: null,   

  5.   $l-margin: null) {   

  6.     display: $disp;   

  7.     padding: $padding;   

  8.     margin-left: $l-margin;   

  9.     margin-right: $r-margin;   

  10. }  

这种使用方式太完美了!我们现在仍然可以定义任意的可选参数,而又不会生成冗余的 CSS 代码。如果你传递给混合宏两个参数,那么它就只会生成相应的 CSS 样式。

CSS Code复制内容到剪贴板

  1. .nav__item {   

  2.   @include display(inline-block, $l-margin: 20px);   

  3. }  

运算中的 null

一定要牢记,在运算中使用 null 将会抛出错误。举例如下:

CSS Code复制内容到剪贴板

  1. @mixin display (   

  2.   $disp,    

  3.   $padding: null,    

  4.   $l-margin: null) {   

  5.     display: $disp;   

  6.     padding: $padding;   

  7.     margin-left: $l-margin;   

  8.     margin-bottom: $l-margin * 2;   

  9. }   

  10.   

  11. .nav__link {   

  12.   @include display(inline-block, 10px);   

  13. }  

这将返回一条错误提示:Invalid null operation: “null times 2“。原因就是因为 $l-margin 未定义,继而无法进行一切数值运算。

由此可见,Sass 的 null 对混合宏的冗余输出具有强大的疗效。

感谢各位的阅读,以上就是“CSS的Sass框架中混合宏的使用”的内容了,经过本文的学习后,相信大家对CSS的Sass框架中混合宏的使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

CSS的Sass框架中混合宏的使用

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

CSS中float和margin混合使用的案例

小编给大家分享一下CSS中float和margin混合使用的案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!float属性float: left | right
2023-06-08

选择最适合您的HTML中的CSS框架的方法是什么?

随着互联网的快速发展,网站的设计和开发变得越来越重要。而在网站页面的开发中,CSS框架扮演着至关重要的角色。CSS框架可以帮助开发者更快速、高效地创建和管理网页布局和样式,同时还可以提供一致性和响应式设计,以满足不同设备和浏览器的需求。然而
选择最适合您的HTML中的CSS框架的方法是什么?
2023-12-27

最优的Yii框架中CSS引用实践

Yii框架中引用CSS的最佳实践,需要具体代码示例在Web开发中,引用CSS对于页面的样式定义至关重要。而在Yii框架中,我们可以灵活地引用CSS文件来实现页面的样式定制。本文将介绍Yii框架中引用CSS的最佳实践,并提供具体的代码示例。
最优的Yii框架中CSS引用实践
2024-01-16

学习CSS框架必不可少:从基础开始掌握CSS框架的使用方法

初学者必备:从零开始学习CSS框架的使用方法,需要具体代码示例引言:随着Web设计和开发的快速发展,CSS框架已经成为每个前端工程师必备的工具。使用CSS框架可以大大提高开发效率,简化页面布局和样式的编写,同时还能够让网站呈现出更加统一和
学习CSS框架必不可少:从基础开始掌握CSS框架的使用方法
2024-01-16

Java集合框架中如何掌握Map和Set 的使用

这篇文章将为大家详细讲解有关Java集合框架中如何掌握Map和Set 的使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1. 搜索1.1 场景引入在学习编程时,我们常见的搜索方式有:直接遍
2023-06-22

java集合框架的使用场景有哪些

本篇内容介绍了“java集合框架的使用场景有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、集合框架的认识对于集合框架的认识,为了防止
2023-06-19

java中的集合框架有什么作用

本篇内容介绍了“java中的集合框架有什么作用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!集合框架是为表示和操作集合而规定的一种统一的标准
2023-06-17

Python中的Scrapy框架怎么使用

这篇文章主要讲解了“Python中的Scrapy框架怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中的Scrapy框架怎么使用”吧!安装Scrapy首先,您需要在您的计算
2023-07-05

PHP中的CodeIgniter框架如何使用

要使用CodeIgniter框架,您需要按照以下步骤进行操作:1. 下载CodeIgniter框架:您可以从CodeIgniter官方网站(https://codeigniter.com/)下载最新版本的CodeIgniter框架。2. 解
2023-08-25

C#中的WinForm框架如何使用

这篇“C#中的WinForm框架如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C#中的WinForm框架如何使用”文
2023-07-05

php中Libevent框架的使用方法

这篇文章主要介绍php中Libevent框架的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及php自
2023-06-14

Python中的flask框架怎么使用

使用Flask框架来构建Web应用程序需要以下几个步骤:1. 安装Flask框架:可以在命令行中使用pip命令进行安装,例如`pip install flask`。2. 创建一个Flask应用程序对象:在Python代码中导入Flask类,
2023-08-12

unity中的mvc框架怎么使用

在Unity中使用MVC框架有多种方法,以下是一种常见的方式:1. 创建Model:在代码中创建一个数据模型类,用于存储游戏的数据和状态。2. 创建View:创建一个或多个游戏对象作为视图,用于显示游戏中的内容。可以使用Unity的UI系统
2023-09-29

详解CI框架中引用CSS样式的步骤

教程:CI框架中引入CSS样式的详细步骤,需要具体代码示例引言:在开发网页应用程序中,样式是至关重要的一部分。使用CSS(层叠样式表)可以美化网页并提供更好的用户体验。而在使用CodeIgniter(CI)框架进行开发时,如何正确引入CS
详解CI框架中引用CSS样式的步骤
2024-01-16

编程热搜

目录