SASS 中如何使用继承 (@extend) 和占位符 (%) 实现样式复用

AI 编程助手,豆包旗下的编程助手,提供智能补全、智能预测、智能问答等能力,节省开发时间,释放脑海中的创造力,支持 VSCode,点击体验 AI

SASS 是一种 CSS 预处理器,它允许我们使用变量、条件语句、函数等高级语言特性扩展 CSS,并且支持继承和占位符这两种特殊的样式复用方式。在本文中,我们将重点介绍如何使用 SASS 中的继承和占位符实现样式复用。

继承 (@extend)

继承是 SASS 中的一种样式复用方式,它允许我们从一个选择器中继承样式规则,并将其应用到另一个选择器中。使用继承可以大大减少样式表的大小,并使代码更易于维护。

使用 @extend 实现继承

在 SASS 中,我们可以使用 @extend 指令来实现继承。@extend 接受一个选择器作为参数,并将当前选择器继承该选择器中的样式规则。下面是一个使用 @extend 实现继承的例子:

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

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

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

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

在上面的例子中,我们定义了一个基本样式 .example ,然后分别从 .success 、.warning 和 .danger 中继承了该样式,并在继承的基础上修改了背景颜色。由于这些样式都是从同一个基本样式中继承而来,因此它们具有相同的宽度和高度,而只有背景颜色不同。

继承的注意事项

使用继承要注意以下几点:

  • 继承时只会复制选择器中的样式规则,并不会复制选择器本身。
  • 继承选择器中的伪类和伪元素可能会导致样式不生效。
  • 继承时要注意选择器优先级的问题,因为继承的样式会被插入到选择器的前面。

占位符 (%)

占位符是 SASS 中另一种样式复用方式,它与继承类似,但是占位符的样式规则不会直接产生 CSS 输出,在应用时需要使用 @extend 指令将占位符的样式规则转换成实际的 CSS 样式规则。

使用占位符实现样式复用

为了使用占位符来实现样式复用,我们需要在样式表中定义一个占位符,并在需要应用该样式时使用 @extend 指令将其应用到选择器中。下面是一个使用占位符实现样式复用的例子:

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

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

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

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

在上面的例子中,我们定义了一个占位符 %panel ,然后分别从 .success 、.warning 和 .danger 中应用该占位符,并在应用的基础上修改了背景颜色。由于占位符不会直接产生 CSS 输出,因此不会产生冗余的样式规则,样式表也会更加简洁。

占位符的好处

使用占位符实现样式复用有以下几个好处:

  • 占位符可以像类一样定义样式规则,但是不会产生冗余的样式规则,可以减少样式表的大小。
  • 占位符不会直接产生 CSS 输出,因此可以避免样式被重复输出的问题。
  • 占位符和继承类似,但是更加灵活和方便,可以实现多个组合样式的复用。

总结

在 SASS 中,我们可以使用继承和占位符这两种特殊的样式复用方式,来避免重复编写重复的 CSS 代码,并使样式表更加简洁和易于维护。使用继承时要注意选择器优先级的问题,使用占位符时可以减少样式表的大小,并避免样式被重复输出的问题。在实际的开发中,我们可以根据需要选择不同的样式复用方式,来优化我们的样式表和提高开发效率。

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


猜你喜欢

  • 常见 GraphQL 问题及解决方案 - 初学者须知

    常见 GraphQL 问题及解决方案 - 初学者须知 什么是 GraphQL GraphQL 是一种用于 API 的查询语言,由 Facebook 开发并开源。它的出现解决了 RESTful API ...

    1 年前
  • ECMAScript 2015 中的默认参数的解析和用法

    ECMAScript 2015 中的默认参数的解析和用法 ECMAScript 2015(以下简称ES6)引入了默认参数的概念。这就意味着,我们在定义一个函数时,就可以给一些参数提供默认值,如果函数调...

    1 年前
  • ES9 中!(not) 和?(optional chaining) 运算法的优雅应用

    随着 Javascript 语言的不断发展和更新,ES9 新增了两种运算符,! 和 ?,它们的语义和应用使得代码更加优雅和简洁。 not 运算符 ! 运算符在 Javascript 中一直都存在,其作...

    1 年前
  • Mongoose 引用查询详解

    如果你使用 Node.js 构建应用程序,很可能需要使用到 Mongoose。Mongoose 是一个优秀的 Node.js ORM(对象关系映射)库,可以帮助我们更方便地与 MongoDB 数据库进...

    1 年前
  • TypeScript 中如何使用类型守卫

    在 TypeScript 中,类型守卫是一种类型检查的方式,能够以一种安全的方式来处理不同的类型。类型守卫可以用来处理特殊的类型,如联合类型、枚举类型,以及自定义类型等。

    1 年前
  • SASS 中如何使用占位符(Placeholder)提高代码性能

    在前端开发中,使用预处理器可以提高代码的可维护性和可读性,同时也可以提高开发效率。SASS(Syntactically Awesome Style Sheets)作为一款流行的 CSS 预处理器,提供...

    1 年前
  • Jest 中 Mock 的实现原理分析

    在前端开发中,单元测试是一项重要的工作。而在单元测试中,Mock 数据是一个必不可少的环节。对于 Jest 这样的单元测试框架,Mock 功能是其核心特性之一。在本文中,我们将分析 Jest 中 Mo...

    1 年前
  • 使用 ES6,7,8 来放大 JavaScript 的能力

    JavaScript 是现代 Web 开发中必不可少的一环,而随着 ES6,7,8 发布,JavaScript 的能力不断被放大。这篇文章将介绍如何使用 ES6,7,8 技术来借助其新的功能,从而为前...

    1 年前
  • PWA 中的 Web Workers 有哪些使用技巧?

    什么是 PWA? PWA(Progressive Web App,渐进式 Web 应用)是一种新兴的 Web 应用程序,可以像移动应用程序一样使用,并具有许多优点。

    1 年前
  • 解决 ECMAScript 2016 中的 Promise 链条问题的技巧

    前端开发中,Promise 已经成为了一个比较常用的工具。在 ECMAScript 2015 中,ES6 引入了 Promise,可以让异步操作更加清晰可读。但是在实际项目中使用 Promise 时,...

    1 年前
  • 如何使用 Sequelize 实现多数据源切换

    如果你是一个前端工程师,在开发过程中可能会遇到要连接不同的数据库来存储不同项目的数据的情况。这时候,你就需要使用 Sequelize 来实现多数据源的切换,来帮助你快速地连接和切换不同的数据库源。

    1 年前
  • Material Design 中的 Snackbar 使用及注意事项

    Material Design 是谷歌推出的一套用户界面设计规范,在多个平台上被广泛使用。其中,Snackbar 是一个常用的设计元素,用于向用户显示简短、即时的消息。

    1 年前
  • webpack 中如何使用场景匹配

    随着前端项目越来越复杂,前端构建和打包工具也越来越重要。webpack 已经成为了前端工程化的必备工具之一。而在使用 webpack 进行项目构建时,我们有时会需要针对不同的场景进行不同的配置。

    1 年前
  • ES11 中迭代器对象的新属性详解

    ES11 增加了一些迭代器对象的新属性,这些属性可以让我们更加高效地操作迭代器对象。本文将详细介绍这些新属性,并提供示例代码以帮助您学习和了解如何使用它们。 迭代器对象简介 在介绍 ES11 新的迭代...

    1 年前
  • 使用 Express.js 构建一个全栈 JavaScript 应用程序

    Express.js 是一个基于 Node.js 快速开发 Web 应用程序的 Web 框架,它提供了各种功能丰富的中间件,可以帮助我们快速搭建一个全栈 JavaScript 应用程序。

    1 年前
  • Docker 安装报错 “Error starting daemon: Error initializing network controller: Error creating default network: could not find an available, non-overlapping IPv4 address pool"

    在使用 Docker 安装时,有时会遇到上面的错误提示。这个错误的原因在于 Docker 在安装时需要一个可用的 IP 地址池,但是没有找到一个可用的非重叠 IPv4 地址池。

    1 年前
  • Next.js 中如何处理 API 请求

    随着现代 Web 应用程序的不断发展,仅仅展示静态内容的网站已经无法满足用户的需求。为了提高用户的交互体验,我们需要使用后端 API 来与前端进行交互。 在 Next.js 中,我们可以使用内置的 A...

    1 年前
  • Kubernetes 的 ServiceMesh 解决方案

    前言 随着微服务架构的流行,管理和监控微服务的复杂度也不断增加。为了解决这一问题,ServiceMesh 应运而生。Kubernetes 作为目前最流行的容器编排工具,也提供了 ServiceMesh...

    1 年前
  • ESLint 合作式的 JS 代码校验工具

    在前端开发中,JavaScript 是一种强大而灵活的语言,但也经常容易写出不规范的代码。这不仅会影响程序的性能,也会影响代码的可读性和可维护性。ESLint 是一种合作式的 JS 代码校验工具,能够...

    1 年前
  • Web Components 架构解析:从 Custom Elements 到 Shadow DOM

    Web Components 是一种构建可重用的、自定义的 Web 应用程序组件的标准。它包括三项技术:Custom Elements、Shadow DOM 和 HTML Templates。

    1 年前

相关推荐

    暂无文章