LESS 预处理器与 CSS 选择器优化技巧分享

前言

在前端的开发中,我们经常需要写 CSS 样式来美化页面。但是,CSS 中有一些繁琐的重复代码,例如每个样式中都需要写 font-size、margin 等等,虽然我们可以通过提取公共样式的方式来避免这种情况,但是这样会增加代码的维护成本,并且很难从视觉上区分哪些是公共样式,哪些是特殊样式。

为了解决这个问题,诞生了一种 CSS 预处理器 —— LESS。通过 LESS 这个工具,我们可以轻松地定义变量、混合器、嵌套选择器等等,大大地减少了代码的冗余,并且提高了代码的可复用性和可维护性。

本篇文章将分享一些 LESS 预处理器的常用技巧,以及如何通过选择器的合理搭配来提高 CSS 的性能。

LESS 基础语法

LESS 的语法与 CSS 很类似,只是多了一些预处理器的特性。

变量

通过在变量名前加上@符号定义一个变量:

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

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

混合器

混合器是一段可以在多个样式中定义并且可以被重复使用的代码块,类似于函数的概念。

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

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

嵌套选择器

LESS 的嵌套选择器可以减少 CSS 中的重复代码,也更加直观。

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

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

运算

LESS 也支持一些运算符,如加减乘除等,可以用在数值、颜色、字符串等类型的值上。

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

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

CSS 选择器优化

CSS 选择器是 CSS 的基础,也是性能瓶颈所在。在书写 CSS 代码时,不合理的选择器的组合很容易导致性能下降。下面就来分享一些选择器的优化技巧。

少用后代选择器

后代选择器是指选择器中包含空格的情况,如:

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

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

这类选择器会先选择父元素,然后在遍历子元素进行匹配。当文档很大时,这种选择器会比较慢,因为每次都要逐级访问。

优化方法:

  • 减少层级嵌套,避免使用过度深的选择器;
  • 规范类的命名方式,减少选择器嵌套。

少用标签选择器

标签选择器是指以元素类型作为选择器,如:

-- -
  -- --- --
-

-- -
  -- --- --
-

这类选择器的匹配不仅考虑了类名和 ID,还包含标签类型,所以会比其他选择器慢。

优化方法:

  • 尽量少用标签选择器,而使用类名和 ID 等选择器;
  • 为什么这种优化方法有效?因为标签选择器越少,匹配的元素就越少,样式匹配速度就越快。

少用通配符选择器

通配符选择器是指以 * 作为选择器,如:

- -
  -- --- --
-

这种选择器虽然可以匹配所有元素,但是由于匹配的元素太多,导致样式匹配速度极慢。

优化方法:

  • 尽量少用通配符选择器;
  • 尽量不要在通配符选择器和其它选择器搭配使用,例如 * > ul

总结

本文介绍了 LESS 预处理器的使用和 CSS 选择器优化的方法。虽然选择器的优化与 LESS 的应用看起来没有太大的关系,但它们都是前端开发中不可忽略的一方面。

简单而言,尽量少的选择器,能解决问题就好,不要使用高级选择器。配合 LESS 的 mixins 及变量优化 CSS,可以让我们的 CSS 代码更加简洁、高效、可重用。

希望本文对你解决前端优化问题有所帮助!

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


猜你喜欢

  • Serverless 框架下如何实现微信公众号的开发

    前言 微信公众号是非常流行的社交媒体平台,许多企业和个人都很喜欢在上面开设自己的账号,用于宣传、推广和交流。然而,开发一个微信公众号需要依赖服务器,而传统的服务器架构需要购买、配置、维护服务器等繁琐的...

    1 年前
  • Koa2 源码解析:从源码层面理解 Koa 的异常处理机制

    前言 Koa 是一个轻量级、灵活的 Node.js Web 开发框架,它的设计哲学是让开发者更加自由地编写代码,它的代码非常简洁,只有 550 行。其中包含了许多前端工程师所熟知的 ES6 特性,可...

    1 年前
  • ECMAScript 2021 中的 globalThis 为 JavaScript 提供了全局对象的统一访问方式

    ECMAScript 2021 中的 globalThis 为 JavaScript 提供了全局对象的统一访问方式 JavaScript 中的全局对象是指在整个程序运行生命周期内都是存在的、可以被任何...

    1 年前
  • ES2020 的 Nullish coalescing 操作符解决了 undefined 和 null 的问题

    ES2020 的 Nullish Coalescing 操作符解决了 Undefined 和 Null 的问题 在开发的过程中,许多前端工程师经常需要处理 Undefined 或 Null 的情况。

    1 年前
  • RxJS 快要被抛弃了?!Angular 官方发布新能替代 RxJS 的技术

    RxJS 是一个强大的响应式编程库,它被广泛应用于前端开发的各个方面。然而,最近 Angular 官方发布了一个新的技术,这个新技术被称为 Observables。

    1 年前
  • Mocha 测试框架中的异步测试

    Mocha 是一个在 Node.js 和浏览器中运行的 JavaScript 测试框架,可提供简单、灵活和可读性高的测试结果。在开发过程中,异步测试是必不可少的,因为它可以更好地反映应用程序的实际性能...

    1 年前
  • 利用 aria-label 为 App 开发提供无障碍性

    在当今数字时代,无障碍性已经成为 Web 开发中不可忽视的关键点。随着移动设备普及和老年人口逐渐增加,越来越多的用户需要使用辅助功能来访问网站。因此,在设计和开发网站时,我们需要考虑这些用户的需要,并...

    1 年前
  • 在 Custom Elements 中使用 Shadow DOM 实现隔离

    在前端开发中,隔离和封装是非常重要的概念,它们可以帮助我们实现更灵活、可重用的代码,并且可以防止组件之间的耦合。在 Custom Elements 里,使用 Shadow DOM 可以实现一种非常强大...

    1 年前
  • Vue.js 开发者必看:ES10 新特性

    对于前端开发者来说,ES10 的新特性无疑是一次非常值得关注的更新。作为一名 Vue.js 开发者,更是需要及时了解并掌握这些新特性,以便能够更加高效和便捷地开发出优质的应用。

    1 年前
  • 使用 StatefulSet 在 Kubernetes 中管理有状态应用程序

    在 Kubernetes 中,StatefulSet 是一种用于管理有状态应用程序的控制器。它能够为每个 Pod 分配独一无二的标识符,并按顺序启动这些 Pod。这使得 StatefulSet 成为管...

    1 年前
  • 响应式设计实现中如何利用 @media 实现网页适配?

    在今天的互联网时代,越来越多的人使用各种设备来访问网站,如电脑、平板电脑、智能手机等。因此,我们需要做出适配各种设备的网站,这就是响应式设计。 在响应式设计中,我们可以利用 CSS3 中的 @medi...

    1 年前
  • Redux 中使用 Action Creator 的优势及其实现方式

    前言 React 已经成为了主流的前端开发框架,而 Redux 作为一个专注于状态管理的库,也是 React 应用中不可或缺的一环。在 Redux 中,Action Creator 起到了非常重要的作...

    1 年前
  • 如何使用 Headless CMS 和 Vue.js 构建动态 Web 应用

    如何使用 Headless CMS 和 Vue.js 构建动态 Web 应用 随着互联网营销和数字化服务的发展,人们对于 Web 应用的要求也越来越高,需要能够及时、动态地呈现信息,这就对于 Web ...

    1 年前
  • MongoDB 数据库备份与还原的方法总结

    前言 在日常开发中,我们经常需要对 MongoDB 数据库进行备份和还原操作。这篇文章就介绍一下 MongoDB 数据库备份与还原的方法。 MongoDB 数据库备份 备份方式一:mongodump ...

    1 年前
  • 在 ES8 中使用 Object.freeze 方法冻结对象属性

    在 ES8 中使用 Object.freeze 方法冻结对象属性 随着前端技术的不断发展,JavaScript 语言也在不断地更新迭代。其中,ES8 的出现带来了一些非常有用的新特性和功能,其中就包括...

    1 年前
  • Chai 如何对 XML 进行断言?

    Chai 如何对 XML 进行断言? 前言 在前端开发中,我们经常需要处理 XML 数据格式。而在测试阶段,我们也需要对 XML 数据进行断言以保证代码的正确性。这时,Chai 库可以帮助我们进行 X...

    1 年前
  • Docker 启动过程中出现 “Failed to connect to daemon” 错误解决方法

    在使用 Docker 进行前端开发和部署时,我们有时会遇到 Docker 启动时出现 “Failed to connect to daemon” 错误的情况。这种错误导致我们无法正常使用 Docker...

    1 年前
  • Node.js 中如何集成 Socket.io 实现实时通信?

    随着网站和 Web 应用的发展,实时通信已经成为许多应用中必不可少的一个功能。Socket.io 是一个基于 Node.js 实现的实时通信库,它可以让你轻松地在浏览器和服务器之间实现双向通信。

    1 年前
  • PWA 应用在 Chrome 浏览器上出现打开后无法加载的解决方法

    前言 随着移动互联网的发展,PWA(Progressive Web Applications)技术逐渐成为前端开发的热门话题。PWA 应用具有本地应用程序的体验和功能,但是它们可以通过普通的Web应用...

    1 年前
  • 基于 Web Components 实现全屏滚动组件的设计思路

    Web Components 是一种用于创建可重用的组件的技术,允许我们将组件封装在一个分类的 API 后面,从而使它们更容易维护和重用。在本文中,我们将介绍如何使用 Web Components 技...

    1 年前

相关推荐

    暂无文章