SASS 继承的实现原理及使用技巧

一、SASS 继承的实现原理

SASS 的继承是基于 CSS 的选择器继承实现的。在 SASS 中,使用 @extend 进行继承,可以将一个选择器的样式继承到另一个选择器上,从而实现样式的复用。

继承的实现原理是通过生成一个新的选择器来实现的,这个新的选择器包含了继承的样式和被继承的选择器的样式,同时也继承了被继承的选择器的特性,比如伪类和伪元素。

例如:

---- -
  -------- -------------
  -------- ---- -----
  ------- --- ----- -----
  -------------- ----
-

------------ -
  ------- -----
  ----------------- --------
  ------ -----
-

在上面的代码中,.btn-primary 继承了 .btn 的样式,并且添加了自己的样式。在编译后的 CSS 中,.btn-primary 的样式就包含了 .btn.btn-primary 的样式。

----- ------------ -
  -------- -------------
  -------- ---- -----
  ------- --- ----- -----
  -------------- ----
-

------------ -
  ----------------- --------
  ------ -----
-

二、SASS 继承的使用技巧

1. 继承公共样式

在编写 CSS 样式时,经常会出现多个选择器具有相同的样式,这时可以使用继承来实现样式的复用。

例如:

------ -
  ------ ----
  ---------- -----
-

-------- -
  ------ -------
  ---------- -----
-

-------- -
  ------ ------
  ---------- -----
-

上面的代码中,.error.warning.success 三个选择器都具有相同的 font-size 样式,可以使用继承来避免重复的样式。

-------- -
  ---------- -----

  ------- -
    ------- ---------
    ------ ----
  -

  --------- -
    ------- ---------
    ------ -------
  -

  --------- -
    ------- ---------
    ------ ------
  -
-

在上面的代码中,.message 选择器包含了 font-size 样式,.error.warning.success 选择器继承了 .message 的样式,并添加了自己的颜色样式。

2. 继承伪类和伪元素

在 SASS 中,继承也可以继承伪类和伪元素。

例如:

---- -
  -------- -------------
  -------- ---- -----
  ------- --- ----- -----
  -------------- ----

  ------- -
    ----------------- -----
  -

  --------- -
    -------- ---
    -------- ------
    ------ -----
    ------- -----
    ----------------- -----
  -
-

------------ -
  ------- -----
  ----------------- --------
  ------ -----

  ------- -
    ----------------- --------
  -
-

在上面的代码中,.btn 选择器包含了 :hover::before 伪类和伪元素的样式,.btn-primary 继承了 .btn 的样式,并添加了自己的样式。

3. 继承多个选择器

在 SASS 中,一个选择器可以继承多个选择器的样式,只需要在 @extend 中使用逗号分隔多个选择器即可。

例如:

---- -
  -------- -------------
  -------- ---- -----
  ------- --- ----- -----
  -------------- ----
-

------------ -
  ------- ----- -----------
  ----------------- --------
  ------ -----
-

---------- -
  ---------- -----
-

在上面的代码中,.btn-primary 继承了 .btn.btn-large 两个选择器的样式,并添加了自己的样式。

三、总结

SASS 的继承是基于 CSS 的选择器继承实现的,可以将一个选择器的样式继承到另一个选择器上,从而实现样式的复用。在使用继承时,需要注意继承的选择器和被继承的选择器之间的关系,以及继承公共样式、继承伪类和伪元素、继承多个选择器等技巧。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6506729195b1f8cacd252a5c


猜你喜欢

  • PWA 技术探索:Reactive Programming 和 RxJS

    前言 PWA (Progressive Web Apps) 是一种新型的 Web 应用,它能够像原生应用一样进行一些功能,比如离线可访问、推送通知等。而 Reactive Programming(响应...

    1 年前
  • MongoDB 文档过期处理方案及实践

    在使用 MongoDB 数据库时,我们经常需要对文档进行过期处理。比如说,我们可能希望在一定时间后自动删除一些数据,或者标记一些数据为无效数据。MongoDB 提供了 TTL(Time-To-Live...

    1 年前
  • 服务器端需要做的准备工作 —— HTML5 Server-sent Events

    简介 HTML5中的Server-sent Events提供了一种在服务端推送数据到客户端的实时通信方式。相较于传统的轮询或者WebSocket技术,SSE有诸多优势,比如易于实现、无需借助第三方库等...

    1 年前
  • 如何在 Kubernetes 中使用 Sidecar 容器来扩展功能

    在 Kubernetes 中,使用 Sidecar 容器是一种常见的方式来扩展应用程序的能力。Sidecar 容器是指一个与主应用容器并列运行的小型容器,其任务通常是为主应用提供补充功能或服务,比如日...

    1 年前
  • Deno 运行前如何进行代码热更新?

    Deno 是一个新兴的 JavaScript 运行时环境,和 Node.js 一样,可以在服务器和客户端上运行 JavaScript 代码。但是 Deno 有一个非常酷的功能,就是支持代码热更新。

    1 年前
  • 如何使用 ES12 中的 Number.format 方法格式化数字

    在前端开发中,我们时常需要对数字进行格式化以符合我们的需求。ES12 中新增了一个 Number.format 方法来方便地处理数字格式化,本文将介绍如何使用这个方法以及其与其他数字格式化方法的比较。

    1 年前
  • ES9 新增的正则表达式方法 matchAll,让匹配更加强大

    ES9(ECMAScript 2018)为我们带来了许多新的语言特性和 API,其中一项值得关注的更新就是正则表达式方法的新功能 - matchAll。虽然 match( ) 方法已经足够强大,但是 ...

    1 年前
  • [ES10 实践] JS 开发者必读:利用 ES10 中新增的 BigInt 解决数值计算问题

    如果在 JavaScript 中进行大数据运算,你可能会遇到精度丢失、溢出等问题。这在科学计算和财务领域中非常常见。幸运的是,在 ES10 中,BigInt 数据类型被正式纳入标准中,为我们提供了一种...

    1 年前
  • Cypress 测试框架:如何处理动态生成的元素?

    Cypress 是一个现代化的 JavaScript 测试框架,它能够帮助前端开发人员进行端到端的自动化测试,其中包括 UI 测试和 API 测试。在实际的项目中,我们经常会遇到动态生成的元素,例如通...

    1 年前
  • RxJS 中使用 publish() 和 connect() 函数处理多个订阅者

    RxJS 是前端开发中常用的一个响应式编程库。在 RxJS 中,我们可以使用多种方式来处理多个订阅者的情况。其中,publish() 和 connect() 这两个函数是特别重要的。

    1 年前
  • 分享我的 Dockerfile 文件配置

    介绍 Docker 是一个开源的应用容器引擎,可以让开发者将应用封装在一个可移植的容器中,从而快速部署到不同的环境中。Dockerfile 是 Docker 容器的构建文件,它可以指导 Docker ...

    1 年前
  • ECMAScript 2017 中 Promise 的链式调用详解

    ECMAScript 2017 中 Promise 的链式调用详解 在前端开发中,异步操作是非常常见的。在处理异步操作时,我们经常用到 Promise。而 ECMAScript 2017 中对 Pro...

    1 年前
  • Webpack 性能优化实战之(二)减少 Loader 的使用

    在前端开发中,Webpack 已成为一个不可或缺的工具。然而,当项目越来越大时,Webpack 的构建速度可能会变得异常缓慢。这时我们需要尝试一些手段,对其进行性能优化。

    1 年前
  • 如何使用 Chai 的 expect 接口进行 JavaScript 单元测试

    概述 在开发一个软件或网站时,单元测试是非常重要的一环。通过单元测试,可以确保代码的质量和稳定性。本文将介绍如何使用 Chai 的 expect 接口进行 JavaScript 单元测试。

    1 年前
  • Custom Elements 实现表单验证的最佳实践

    在前端开发中,表单验证是一个非常重要的问题。表单是与用户交互的主要方式之一,而验证能够保证用户输入的数据的正确性和安全性,从而提升用户体验。 本文将介绍如何使用Web Components的核心功能—...

    1 年前
  • 使用 CSS Grid 和 Media Query 实现灵活的响应式设计

    随着越来越多人使用各种设备访问网页,开发者需要考虑如何实现响应式设计以面对不同屏幕尺寸和设备。在这篇教程中我将介绍如何使用CSS Grid 和Media Query实现一个灵活的响应式设计。

    1 年前
  • Next.js:如何从头开始使用 Framer Motion

    Next.js:如何从头开始使用 Framer Motion Framer Motion 是一个功能强大的动画库,为 Web 开发者提供了许多动画解决方案,可以帮助我们在无需编写复杂的 CSS 或 J...

    1 年前
  • PWA 在线调试工具推荐:Remote Debugging 和 Weinre

    PWA(渐进式 Web 应用程序)是目前 Web 开发中的热点技术之一,它可以实现离线访问、快速加载、类似原生应用体验等特点。在开发 PWA 时,我们经常需要进行在线调试来更好地改善性能和用户体验。

    1 年前
  • Enzyme 中使用 children 方法获取组件的直接子元素的方法与技巧

    Enzyme 中使用 children 方法获取组件的直接子元素的方法与技巧 在 React 前端开发中,我们经常需要对组件进行单元测试,以确保它们按预期运作。Enzyme 是一个流行的用于 Reac...

    1 年前
  • Sequelize 实现数据加密的方法与实践

    在今天的互联网世界中,数据加密变得非常重要,它可以帮助我们保护敏感数据,并防止黑客攻击和信息泄露。在前端开发中,我们通常使用加密算法来对数据进行加密,而 Sequelize 则提供了一种简单而有效的方...

    1 年前

相关推荐

    暂无文章