简单体验一下scss重构我们的代码

简介: # 引言今天我们一起来学习一下如何使用Scss精简一下我们平时开发的css代码。# 什么是ScssSCSS 是 Sass 3 引入新的语法,其语法完全兼容 CSS3,并且继承了 Sass 的强大功能。也就是说,任何标准的 CSS3 样式表都是具有相同语义的有效的 SCSS 文件,[官方解释](https://link.juejin.cn/?target=http%3A%2F%2Fsass.bootcss.com%2Fdocs%2Fscss-for-sass-users%2F "http://sass.bootcss.com/docs/scss-for-sass-users/")。

引言

今天我们一起来学习一下如何使用Scss精简一下我们平时开发的css代码。

什么是Scss

SCSS 是 Sass 3 引入新的语法,其语法完全兼容 CSS3,并且继承了 Sass 的强大功能。也就是说,任何标准的 CSS3 样式表都是具有相同语义的有效的 SCSS 文件,官方解释

SCSS 语法使用  .scss 文件扩展名。除了极少部分的例外, 它是 CSS 的超集,也就是说  所有有效的 CSS 也同样都是有效的 SCSS 。 由于其与 CSS 的相似性,它是最容易上手的语法, 也是最流行的语法。

scss的优势

SCSS (Sass) 有以下几个主要优势:

  • 可维护性:SCSS 允许使用变量、嵌套、混合、继承等特性,从而使样式表变得更加清晰、可读性增强。
  • 更高效:SCSS 允许使用函数、循环等高级特性,使得样式定义更加高效。
  • 更易扩展:SCSS 提供了组件化和模块化的技巧,可以更方便地扩展和维护代码。
  • 更简单:SCSS 的语法比 CSS 更简洁易懂,允许编写更加简洁的样式表。
  • 兼容性:SCSS 可以完全兼容 CSS,可以无缝地使用

再来看一下scss和其他对比

Scss/Less Atomic CSS css-in-js
完全支持样式覆盖 需要使用className支持
支持rem布局 大部分库支持
可读性 稍弱
上手成本 较低
是否支持SSR 天然支持 天然支持 需要额外支持
是否支持流式渲染 天然支持 天然支持 需要额外支持
支持postcss 有自己的插件生态

先看个使用原生写css的场景

想象一下下面的场景,我们需要定义三个方块,分别是红色,蓝色,和黄色,大小并不相同,同时每个方块鼠标移过后都会有一个暗淡的效果,我们应该如何去书写呢?

先来看一下原生的css

<template>
  <div class="class_A">

  </div>
  <div class="class_B">

  </div>
  <div class="class_C">

  </div>
</template>

<script setup lang="ts"></script>

<style scoped lang="scss">
.class_A {
  margin: 10px;
  width: 100px;
  height: 60px;
  background-color: red;
}
.class_A:hover {
  opacity: 0.6;
  transition: all 0.6s;
}

.class_B {
  margin: 10px;
  width: 80px;
  height: 48px;
  background-color: blue;
}
.class_B:hover {
  opacity: 0.6;
  transition: all 0.6s;
}

.class_C {
  margin: 10px;
  width: 60px;
  height: 36px;
  background-color: yellow;
}
.class_C:hover {
  opacity: 0.6;
  transition: all 0.6s;
}
</style>

三种方块不同大小,颜色,同时鼠标移动会有一个特效

image.png

我们来先介绍一下scss函数的用法

我们通过@mixin声明一个函数,然后通过@include来使用

@mixin fun($w) {
      // 定义了一个函数fun,接受一个参数
}

好了,我们正式开始重构我们的代码

<template>
  <div class="class_A">

  </div>
  <div class="class_B">

  </div>
  <div class="class_C">

  </div>
</template>

<script setup lang="ts"></script>

<style scoped lang="scss">
@mixin fun($w,$h,$bg) {
  margin: 10px;
  width: $w;
  height: $h;
  background-color: $bg;
  &:hover {
    opacity: 0.6;
    transition: all 0.6s;
  }
}
.class_A {
  @include fun(100px,60px,red);
}
.class_B {
  @include fun(80px,48px,blue);
}
.class_C {
  @include fun(60px,36px,yellow);
}
</style>

同样的效果,更少的代码,更优雅的写法,更简洁的代码风格,更高的可读性和可维护性。

看下效果还是一样的。不过代码高级,优雅了很多

image.png

而在很多耦合度更高的情况下,这种写法能更大的提升代码的可维护性和可读性。

最后

在工程化的项目中使用scss而不是传统的css,可以大幅度提高我们的开发效率,精简我们的代码量,提高了我们的代码的可读性,使其语法上更工整更优雅,同时后续无论修改或是排查或是协同开发上,都简单了很多。

相关文章
|
8月前
|
数据采集 前端开发 JavaScript
我是如何使用 Next.js14 + Tailwindcss 重构个人项目的
这篇文章介绍了作者在学习React和Nest时受到大佬imsyy项目DailyHot的启发,基于React开发了一个项目,并因为这个项目获得了少量流量而进行了优化。作者随后因为想要优化SEO和深入学习Next.js14,决定重构这个项目。文章详细介绍了项目的信息、特性、演示图、运行环境、Vercel本地部署步骤以及责任声明。作者还感谢了为本项目提供支持与灵感的项目,并承诺会记录下开发过程中遇到的问题及解决方法以帮助他人。
我是如何使用 Next.js14 + Tailwindcss 重构个人项目的
|
8月前
|
JavaScript 前端开发
如何用JS实现团队功能
如何用JS实现团队功能
58 0
|
2月前
|
JavaScript 前端开发 Java
[JS]细节与使用经验
本文总结了 JavaScript 中的一些重要细节,包括相等与全等的区别、驼峰命名的原因、函数作用域、数据类型、数组特性、特殊指令和语句、事件处理等。文章还特别介绍了如何阻止默认行为和冒泡行为,并提供了相关示例。适合初学者和进阶开发者参考。
36 0
|
6月前
|
JavaScript 前端开发
JS编码标准掌握后让你的代码更整洁
JS编码标准掌握后让你的代码更整洁
57 8
|
5月前
|
Dart 前端开发 编译器
Less和SCSS,哪个更好用?
Less和SCSS,哪个更好用?
|
7月前
|
存储 JavaScript 前端开发
带你论证JS基础的一段代码
在学习乏味难啃的理论基础知识时,我觉得应该创造自己的想象力,多去实践多去思考为什么会有这样的结果呢?
33 2
|
前端开发 JavaScript Serverless
前端工程化的前端性能的性能优化方案的渲染层面优化之CSS/JS优化
渲染是一种非常重要的前端性能优化方案,因为它可以在不同的环境中提高网页的响应速度和可接受性。
97 2
|
前端开发
前端学习笔记202305学习笔记第二十三天-main.js重构完善
前端学习笔记202305学习笔记第二十三天-main.js重构完善
57 0
|
自然语言处理 JavaScript 前端开发
js难点(初学者)
js难点(初学者)
71 0
|
Web App开发 缓存 前端开发
Facebook 重构:抛弃 Sass / Less ,迎接原子化 CSS 时代
随着 Facebook 和 Twitter 最近的产品部署,我认为一个新的趋势正在缓慢增长:Atomic CSS-in-JS。