前言

本项目需要使用 SCSS 来编写页面样式。

Sass (Syntactically Awesome Stylesheets)是一个 css 预处理器,而 SCSS 是 Sass 的一种语法格式,它完全兼容 CSS,同时扩展了 CSS 的功能,使得样式编写更加高效、灵活和模块化。

对于初学者,SCSS 是完全和 CSS 兼容的,这意味着几乎为零的学习曲线。SCSS 语法即是:它只是加了一些功能的 CSS。当你和没经验的开发者一起工作时这很重要:他们可以很快开始编码而不需要首先去学习 Sass。

此外,SCSS 还是 易于阅读 的,因为它是有语义的,而不是用符号表示。当你读到 @mixin,你就会知道这是一个 mixin 声明;当你看到 @include ,你就是在引用一个 mixin。他并没有用任何缩写,当你大声读出来时所有的都很明了。

还有,现在几乎所有 Sass 的工具,插件和 demo 都是基于 SCSS 语法来开发的。随着时间过去,SCSS 会变成大家首选的选择。比如,你现在很难找到一个 Sass 缩进语法的高亮插件,通常都只有 SCSS 的可以用。

本文以编写 404 页面为例,介绍 SCSS 的使用。

关于 SCSS

SCSS 相比起 CSS 的优势

  • 模块化:通过变量、嵌套和导入(@import@use)组织样式文件。
  • 可维护性:减少重复代码,便于维护和修改。
  • 兼容性:SCSS 文件可以完全兼容 CSS 文件,允许渐进式过渡。
  • 功能强大:支持逻辑判断(@if)、循环(@for)、和函数(@function)等功能。

相关资源

SCSS 的主要功能

变量(Variables)

可以使用变量存储颜色、字体大小等值,方便复用和管理。

// SCSS
$primary-color: #3498db;
$font-size: 16px; body {
color: $primary-color;
font-size: $font-size;
}

转译后的 CSS:

body {
color: #3498db;
font-size: 16px;
}

嵌套(Nesting)

SCSS 支持嵌套语法,使样式层级结构更清晰,与 HTML 结构更接近。

// SCSS
nav {
ul {
margin: 0;
li {
display: inline-block;
a {
text-decoration: none;
color: $primary-color;
}
}
}
}

转译后的 CSS:

nav ul {
margin: 0;
}
nav ul li {
display: inline-block;
}
nav ul li a {
text-decoration: none;
color: #3498db;
}

混合(Mixins)

类似于函数,可以定义一段通用样式,并在多个地方调用。

// SCSS
@mixin flex-center {
display: flex;
justify-content: center;
align-items: center;
} .container {
@include flex-center;
height: 100vh;
}

转译后的 CSS:

.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
}

继承(Inheritance)

使用 @extend 来复用已有的样式。

// SCSS
.btn {
padding: 10px 20px;
border-radius: 5px;
} .btn-primary {
@extend .btn;
background-color: $primary-color;
color: white;
}

转译后的 CSS:

.btn {
padding: 10px 20px;
border-radius: 5px;
}
.btn-primary {
padding: 10px 20px;
border-radius: 5px;
background-color: #3498db;
color: white;
}

运算(Operations)

SCSS 支持基本的数学运算,例如加减乘除。

// SCSS
$base-padding: 10px; .box {
padding: $base-padding * 2;
margin: $base-padding / 2;
}

转译后的 CSS:

.box {
padding: 20px;
margin: 5px;
}

安装

多年来 node-sass 一直是 JavaScript 社区里的主流选择,它实际上只是 libsass 在 node 环境下的一个 wrapper, 编译 sass 文件的实际工作是 libsass 完成的。

在使用 node-sass 过程中遇到的很多问题实际上也是 libsass 引发的,libsass 是用 C/C++ 实现的,常见的问题是,在安装 node-sass 的过程中经常会出现安装失败的情况,又或者切换了 Node.js 版本发现 node-sass 需要重新安装才能用,如果你在 docker 中安装 node-sass 还会遇到由于缺少各种依赖导致 node-sass build 失败的情况,又或者在国内由于网络原因导致 node-sass 需要的二进制文件下载不下来而 build 失败。

现在,sass 官方已经使用 dart-sass 作为 sass 的主要实现:

Dart Sass is the primary implementation of Sass, which means it gets new features before any other implementation. It’s fast, easy to install, and it compiles to pure JavaScript which makes it easy to integrate into modern web development workflows.

所以安装命令如下:

yarn add sass --dev
yarn add sass-loader@7.1.0 --dev

注意 Vue2 使用的 webpack 版本是 3.6.0,所以这里的 sass-loader 必须使用 7.1.0 版本

(我被 TypeError: this.getOptions is not a function 这个报错折腾了大半天才搞定)

配置

编辑 build/webpack.base.conf.js 文件下 module 里的 rules 标签,添加以下配置

{
test: /\.scss$/,
loaders: ['style', 'css', 'sass']
}

使用方法

有 Webpack 的用法

本项目是基于 Vue 的 SPA(单页应用),编写代码之后经过 webpack 打包成 HTML、CSS、JavaScript,前面的步骤也配置好了 SASS,可以直接在 .vue 文件里写 SCSS。

在页面代码 style 标签中把 lang 设置成 scss 即可。

<style scoped lang="scss">

</style>

这里我改了一下 src/views/404.vue 页面

<template>
<div class="site-wrapper site-page--not-found">
<div class="site-content__wrapper">
<div class="site-content">
<h2 class="not-found-title">404</h2>
<p class="not-found-desc">抱歉!您访问的页面<em>失联</em>啦 ...</p>
<el-button @click="$router.go(-1)">返回上一页</el-button>
<el-button type="primary" class="not-found-btn-gohome" @click="$router.push('/')">进入首页</el-button>
</div>
</div>
</div>
</template>

样式代码如下

.site-wrapper.site-page--not-found {
position: absolute;
top: 60px;
right: 0;
bottom: 0;
left: 0;
overflow: hidden; .site-content__wrapper {
padding: 0;
margin: 0;
background-color: #fff;
} .site-content {
position: fixed;
top: 15%;
left: 50%;
z-index: 2;
padding: 30px;
text-align: center;
transform: translate(-50%, 0);
} .not-found-title {
margin: 20px 0 15px;
font-size: 8em;
font-weight: 500;
color: rgb(55, 71, 79);
} .not-found-desc {
margin: 0 0 30px;
font-size: 26px;
text-transform: uppercase;
color: rgb(118, 131, 143); > em {
font-style: normal;
color: #ee8145;
}
} .not-found-btn-gohome {
margin-left: 30px;
}
}

改完之后的页面效果

不错,可以收工了~

没有 Webpack 的用法

如果想单独使用 SCSS,可以直接调用 SASS 编译:

sass styles.scss styles.css

然后在 HTML 里引入

<link rel="stylesheet" href="styles.css">

参考资料

StarBlog博客Vue前端开发笔记:(2)SASS与SCSS的更多相关文章

  1. Android请求网络共通类——Hi_博客 Android App 开发笔记

    今天 ,来分享一下 ,一个博客App的开发过程,以前也没开发过这种类型App 的经验,求大神们轻点喷. 首先我们要创建一个Andriod 项目 因为要从网络请求数据所以我们先来一个请求网络的共通类. ...

  2. Android SwipeRefreshLayout 下拉刷新——Hi_博客 Android App 开发笔记

    以前写下拉刷新 感觉好费劲,要判断ListView是否滚到顶部,还要加载头布局,还要控制 头布局的状态,等等一大堆.感觉麻烦死了.今天学习了SwipeRefreshLayout 的用法,来分享一下,有 ...

  3. Android Studio配置 AndroidAnnotations——Hi_博客 Android App 开发笔记

    以前用Eclicps 用习惯了现在 想学学 用Android Studio 两天的钻研终于 在我电脑上装了一个Android Studio 并完成了AndroidAnnotations 的配置. An ...

  4. Web前端,HTML5开发,前端资源,前端网址,前端博客,前端框架整理 - 转改

    Web前端/H5开发,前端资源,前端网址,前端博客,前端框架整理 综合类 前端知识体系 前端知识结构 Web前端开发大系概览 Web前端开发大系概览-中文版 Web Front-end Stack v ...

  5. 极客Web前端开发资源大荟萃

    前端开发已经成为当前炙手可热的技术之中的一个.本周我们除了给大家带技术相关资讯,另一些技术人员经常使用的站点.希望大家不要错过我们本周的内容.原文来自:极客标签 为神马说敲代码是非常艰难的 程序猿 做 ...

  6. SpringBoot技术栈搭建个人博客【前台开发/项目总结】

    前言:写前台真的是我不擅长的东西...所以学习和写了很久很久...前台页面大概开发了两天半就开发好了,采用的静态的html和bootstrap来写,写后台的时候纠结住了...怎么说呢,写页面真的是头疼 ...

  7. 前端开发笔记(1)html基础

    HTML介绍 HTML是HyperTextMarkupLanguage超文本标记语言的缩写 HTML是标记语意的语言 编辑器 任何纯文本编辑器都能够编辑html,比如记事本,editplus,note ...

  8. web前端开发笔记(2)

    一.什么是作用域. 所有变量都存在于一个执行环境中(也称作用域),这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量.总结: 执行环境有全局执行环境和函数执行环境. 每次进入一个新执 ...

  9. web前端开发笔记(1)

     一.HTML标签书写有哪些规范? 页面编码. 文档声明. 关键字与描述. 行内元素不能包含块级元素. a标签不能嵌套a标签. 标签名和属性必须用小写字母书写,属性必须加引号,标签必须闭合,单标签页必 ...

  10. 极客Web前端开发资源大荟萃#001

    每周极客都将总结本周最精彩的素材提供给大家,希望可以带给你更多地灵感和帮助!极客#GB课程库#现已上线,无论你是初级.中级.还是正在进修的高级前端工程师.这里都将帮助你得到更多更高效的学习.原文:极客 ...

随机推荐

  1. Tabby,一款老外都在用的 SSH工具,竟然还支持网页操作

    会编程的蜗牛 主要分享java编程,也会涉及其他方向的技术分享. 1篇原创内容 公众号 序言各位好啊,我是会编程的蜗牛,作为java开发者,或者说编程人员,程序员的我们,Linux服务器总是我们一个绕 ...

  2. [TK] 理想的正方形

    题目描述 有一个整数组成的矩阵,现请你从中找出一个指定边长的正方形区域,使得该区域所有数中的最大值和最小值的差最小. 题目分析 其实这道题和滑动窗口很像,而滑动窗口使用优先队列解决. 我们都知道优先队 ...

  3. 【赵渝强老师】什么是Oracle的数据字典?

    数据字典是oracle存放有关数据库信息的地方,几乎所有的系统信息和对象信息都可在数据字典中进行查询.数据字典是oracle数据库系统的信息核心,它是一组提供有关数据库信息的表和视图的集合,这些表和视 ...

  4. Transformer原理+代码详解

    简介 Transformer是一种深度学习模型,它在自然语言处理(NLP)领域中非常流行和有效.它最初由Vaswani等人在2017年的论文<Attention is All You Need& ...

  5. SaaS架构:开放平台架构设计

    大家好,我是汤师爷~ 今天聊聊开放平台架构设计. 为什么需要搭建开放平台 增强产品能力 开放平台能够让三方开发者和合作伙伴开发新的应用或服务,增加原有SaaS产品能力.这样就可以满足更多用户需求,从而 ...

  6. Redis实现幂等、防抖、限流等功能

    本文章主要讲述如何使用Redis实现幂等.防抖.限流等功能. 幂等组件 import lombok.RequiredArgsConstructor; import org.springframewor ...

  7. mysql进阶-索引篇

    索引(SQL主要的优化方式) 介绍: 索引(index)是帮助MySQL高效获取数据的数据结构(有序).在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据 ...

  8. HarmonyOS NEXT开发之ArkTS自定义组件学习笔记

    在HarmonyOS中,ArkTS提供了创建自定义组件的能力,允许开发者封装和复用UI代码.以下是关于自定义组件的详细介绍,包括创建自定义组件.页面和自定义组件的生命周期.自定义组件的自定义布局.冻结 ...

  9. 【多图】2022年7月的WSA安装教程

    wsa是微软推出的一款的安卓虚拟机,尚在测试中. 首先翻看微软文档,安装wsa只需要在微软商店里安装 Amazon Store 即可,打开商店搜索,根本搜不到: 这是因为 Amazon Store 仅 ...

  10. bresenham算法(贝汉明算法)