LESS中@extend 的坑,如何避免?

LESS 是一种 CSS 预处理器,它可以让我们编写更优雅、更方便的 CSS。其中 @extend 是 LESS 中最常用的一种样式继承方式,它可以让我们无需重复编写相同的 CSS 样式,实现代码复用。但是,@extend 也有一些潜在的问题,我们需要注意并避免。

@extend 的基本使用方法

在 LESS 中,我们可以使用 @extend 关键字来继承已存在的 CSS 类。假设我们有两个 CSS 类:

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

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

我们可以通过 @extend 来实现样式继承:

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

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

这样,.btn-primary-small 类就拥有了 .btn-primary 和 .btn-small 两个类的样式。

@extend 的潜在问题

虽然 @extend 在编写 CSS 时会让我们变得更加高效,但是它也存在潜在的问题。假设我们有以下三个 CSS 类:

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

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

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

如果我们想让一个按钮拥有 .btn-primary 和 .btn-small 样式,在 LESS 中,我们可以这样写:

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

在生成的 CSS 中,.btn-primary-small 类将继承 .btn-primary 和 .btn-small 类的样式。但是,如果我们有以下代码:

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

这时,.btn-primary-small 类同时继承了 .btn-primary 类和 .btn-secondary 类的样式,这可能会导致样式不符合预期。

如何避免@extend 的问题

为了避免上述问题,在 LESS 中,我们可以利用@{&}语法来限制继承:

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

这样,即使有新的 .btn 类被添加进来,在使用 @extend 继承时也不会影响到其他样式类。同时,我们在添加新的样式时也需要注意避免对外部样式造成影响。

总结

LESS 中的 @extend 关键字可以让我们在编写 CSS 时变得更加高效。但是,当我们使用@extend 时,也需要留意其潜在问题。通过 @extend 的限制,我们可以更好地避免潜在问题的出现。最后,我们在编写 CSS 时,需要注意 CSS 的可维护性和可读性,不要让 @extend 带来的便利成为不可维护的负担。

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


猜你喜欢

  • 如何在别名文件中使用 Tailwind CSS 变量

    Tailwind CSS 是一种快速而灵活的 CSS 框架,它通过使用原子类实现了样式的拆分和组合。它还提供了许多有用的工具类和颜色系统,使您可以轻松地创建出色的 UI。

    1 年前
  • SSE 实现全局广播服务器通知的方法与实践

    前言 在现代化的 Web 开发中,我们常常需要实现实时通信。而 SSE(Server-Sent Events)技术则可以轻松地实现服务端向客户端推送消息,从而实现全局广播的效果。

    1 年前
  • 一些常见响应式设计的 bug 及解决方法

    前言 随着移动端设备的普及,响应式设计日益重要。但是,开发响应式设计的过程中往往会遇到一些问题。本文将介绍一些常见的响应式设计的 bug,以及解决方法和示例代码。这些内容既有深度和学习意义,又具有指导...

    1 年前
  • 在 Express.js 中使用 MongoDB 进行全文搜索的方法

    随着互联网的发展,全文搜索越来越成为用户使用产品的必需功能。在网站、APP 中,全文搜索已成为标配功能,能够快速定位到用户需要的内容。然而,对于网站开发者来说,如何在后端实现高效的全文搜索并不是一件容...

    1 年前
  • 基于 Chai 和 HTML 官方测试工具实现 GUI 自动化测试

    在前端开发中,GUI 自动化测试是保证产品质量和稳定性的一种重要方式。本文将介绍如何使用 Chai 和 HTML 官方测试工具来实现 GUI 自动化测试。 Chai 简介 Chai 是一个流行的 Ja...

    1 年前
  • TypeScript 中如何使用命名空间管理代码组织结构

    在实际开发过程中,代码的组织结构是十分重要的。TypeScript 中,我们可以使用命名空间来帮助我们更好地管理代码的组织结构。本文将详细介绍 TypeScript 中如何使用命名空间,并提供示例代码...

    1 年前
  • 如何在 Jest 中使用 JSDOM 模拟 DOM

    在前端开发中,测试是非常必要的。而随着前端技术的不断发展,测试框架也越来越多。其中,Jest 是一个非常流行的测试框架,它支持多种前端项目的测试。在 Jest 中,使用 JSDOM 模拟 DOM 是非...

    1 年前
  • CSS Grid 布局:如何解决内容溢出问题

    简介 随着 Web 应用程序的复杂性日益增加,前端开发人员越来越需要一种有效的方法来管理页面上的布局。CSS Grid 布局是一种面向二维布局的 CSS 布局系统,它为设计师和开发人员提供了更强大的布...

    1 年前
  • RxJS 实战:如何处理 WebSocket 事件?

    RxJS 是一种基于可观察对象概念的编程模式,可以在前端开发中起到非常重要的作用。当使用 WebSocket 进行通信时,RxJS 可以帮助我们处理 WebSocket 的事件,提高代码的可读性、可维...

    1 年前
  • Sequelize 实现批量插入、更新、删除的技巧说明

    前言 Sequelize 是一个非常流行的 Node.js ORM 框架,它支持 MySQL、PostgreSQL、SQLite 和 MSSQL 等多种数据库,实现了对象关系映射,简化了 SQL 操作...

    1 年前
  • Hapi 框架中使用 async/await 异步处理:详细示例

    前言 Hapi 是一款 Node.js Web 应用开发框架,它以插件化的形式提供了强大的路由、请求处理、输入验证和错误处理等功能。在实际开发中,我们经常需要使用异步编程来处理复杂的业务逻辑。

    1 年前
  • Angular 中的生命周期钩子(Hooks)浅析

    Angular 是现代的前端框架之一,它具备很多优秀的特性,如高效稳定、容易维护和优秀的交互体验等。在 Angular 中,每个组件和指令都有它们的生命周期,生命周期钩子是一种方便开发者维护应用程序的...

    1 年前
  • 使用 Fastify 和 ElasticSearch 开发搜索引擎功能

    前言 随着互联网的发展,搜索引擎已经成为了人们获取信息的主要途径之一。如今,开发一个高效、精准的搜索引擎已经成为了许多互联网公司和团队的追求目标。 在本文中,我们将介绍如何使用 Fastify 和 E...

    1 年前
  • Sass 和 Less 相比有哪些优势?

    在前端开发中,CSS 是不可或缺的一部分,但写 CSS 往往比较繁琐,尤其是对于大型项目来说。为了解决这个问题,出现了一些 CSS 预处理器,其中 Sass 和 Less 是最为流行的两个。

    1 年前
  • 了解 ES9 新特性:正则表达式 Lookbehind 前瞻零宽断言、后顾零宽断言

    了解 ES9 新特性:正则表达式 Lookbehind 前瞻零宽断言、后顾零宽断言 前言 正则表达式是前端开发中常用的一项技术,也是一种强大的文本匹配工具。而 ES9 引入的正则表达式 Lookbeh...

    1 年前
  • 解决在 ES6 中使用 Babel 编译带标签模板字符串的问题

    前言 ES6 中带标签的模板字符串非常便捷,可以让我们更加简洁地书写字符串拼接代码。然而,当使用 Babel 编译这种代码时,会出现一些问题。本文将会详细介绍这些问题,并提出解决方案及示例代码。

    1 年前
  • Headless CMS 如何应对全球化多语言问题

    什么是 Headless CMS? Headless CMS(头部分离式内容管理系统)是一种现代化的内容管理系统,它允许开发人员通过 API 将内容传递到各种渠道和设备上,这些渠道和设备可能是 iOS...

    1 年前
  • 如何使用 Mocha 和 Chai 测试 React Native 应用?

    React Native 是一种流行的 JavaScript 框架,能够开发跨平台的移动应用程序。而 Mocha 和 Chai 是两个流行的 JavaScript 测试库,能够帮助开发者测试代码的正确...

    1 年前
  • LESS 中如何实现清除浮动(clearfix)技巧总结

    LESS 中如何实现清除浮动(clearfix)技巧总结 在前端开发中,浮动元素是非常常见的一种布局方式,但其会对后续元素造成影响,从而导致布局出现异常问题。因此,清除浮动(clearfix)就变得十...

    1 年前
  • Vue.js 中使用 computed 计算属性的原理及应用场景

    1. 什么是 computed 计算属性 computed 计算属性是 Vue.js 中一种特殊的方法,它可以通过对传入的数据进行计算,生成对应的计算结果,并将计算结果绑定到视图中。

    1 年前

相关推荐

    暂无文章