虽然使用SCSS拥有上面的众多好处,但是我们在项目中选择使用SCSS还是CSS,是根据项目的需求、性质和个人偏好来决定的。如果我们在一个样式需求较小的小项目上工作,普通CSS可能就已经能够满足了我们的项目需求了。但是如果是遇见更大、更复杂的项目,使用SCSS可以为我们提供更多优势,有助于更高效和可维护的样式工作流程。
SCSS(Sassy CSS)是一种CSS预处理器,它扩展了标准CSS的功能并引入了许多有用的特性,使得编写和维护样式表更加高效和灵活。SCSS允许你在样式表中使用变量、嵌套规则、混合(mixins)、函数、继承等功能,从而提供了更好的组织性、模块化和可读性。
SCSS最早是在2006年由Hampton Catlin开发的,后来在2009年由Natalie Weizenbaum维护。这种语言的设计是为了解决编写复杂和可维护CSS时的一些限制和挑战。SCSS也被称为“SASS”,即Syntactically Awesome Stylesheets的缩写。
可以通过在 VS Code Editor 中下载Live Sass Compiler扩展来安装SCSS。
还可以按照以下步骤安装扩展:
Ctrl + P
ext install glenn2223.live-sass
<p align=center><img src="https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6c676634f3d240ceb44cdf46998b35a0~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=2490&h=1409&e=png&b=1a1a1a" alt="image.png" /></p>
因为我们的Sass使用.scss作为文件后缀名,不能直接在< link >标签里使用,所以我们要需要把.scss文件编译为 .css文件。这时我们之前安装的Live Sass Compiler插件就派上用场了
我们可以通过点击状态栏上的“Watch Sass”,就可以进行对我们SCSS文件的编译。你也可以点击状态栏上的“Stop Watching Sass”来关闭编译。
<p align=center><img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/dc1dce7119144e8eac3940f33de95c52~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=713&h=75&e=png&b=191919" alt="image.png" /></p>
在main.scss文件中编写的所有SCSS代码将会被编译到/dist/css文件夹中的main.css文件中。
<p align=center><img src="https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d6a05e45a24c491c84dd000663156eed~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=198&h=141&e=png&b=181818" alt="image.png" /></p>
<p align=center><img src="https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e3c15ecc007245b990b6e9f70b2b0656~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=313&h=246&e=png&b=1f1f1f" alt="image.png" /></p>
<p align=center><img src="https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e6b842c761c84fb3905186ca89543510~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=540&h=429&e=png&b=1f1f1f" alt="image.png" /></p>
大多数网页开发者使用SCSS的一个原因是因为它具有嵌套特性。SCSS允许我们将CSS规则嵌套在父选择器内部。这有助于提高样式的可读性和组织性,特别是对于复杂的结构。
例如,我们创建一个带有两个元素的简单HTML页面;一个父元素和一个子元素。
<body>
<div class="parent">
<div class="child"></div>
</div>
</body>
我们为这两个元素添加一些样式,并将它们嵌套在一起:
.parent {
padding: 2rem;
background-color: red;
.child {
background-color: blue;
padding: 1rem;
}
}
结果如下所示:
<p align=center><img src="https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/7a3e3c3a83804e07b2e8b5be68727ad3~tplv-k3u1fbpfcp-watermark.image?" alt="image.png" /></p>
我们为父元素添加一个悬停状态的样式:(当我鼠标经过时父元素背景色变为黄色)
.parent {
padding: 2rem;
background-color: red;
.child {
background-color: blue;
padding: 1rem;
}
&:hover {
background-color: yellow;
}
}
SCSS提供了一个选择器可以选中当前元素的父元素,使用&表示。
在SCSS中声明变量
在SCSS中,我们可以使用美元符号($)来声明变量。参考上面的HTML页面,以下是在SCSS中使用变量的简单方法:
$color-primary: red;
$color-secondary: blue;
$padding-large: 2rem;
$padding-small: 1rem;
.parent {
padding: $padding-large;
background-color: $color-primary;
.child {
background-color: $color-secondary;
padding: $padding-small;
}
}
在SCSS中声明变量是非常简单的,这些变量可以保存为局部文件,可以在任何地方使用。我们稍后会在文章中更详细地介绍局部文件。
混合(Mixin)是一种用于将一组CSS属性和规则封装在一个可重用的代码块中的特性。混合类似于函数,它允许你在样式表中定义一段代码,然后在需要的地方进行调用。这有助于减少代码的重复性,提高代码的可维护性。
下面是在SCSS中使用混合的方式:
可以使用@mixin指令定义混合,如何在后面跟着一个名称和一组CSS属性和规则。以下是一个简单混合的示例:
@mixin box-shadow($x, $y, $blur, $color) {
box-shadow: $x $y $blur $color;
}
可以通过使用@include指令将上面定义的混合在css样式中使用,后面跟着混合的名称和它所需的任何参数。以下是一个示例:
.parent {
@include box-shadow(2px, 2px, 5px, rgba(0, 0, 0, 0.2));
}
在上面的示例中,box-shadow混合被包含在.parent类中,应用了指定的box-shadow属性。
SCSS函数是另一个强大的特性,它使你能够执行计算、操作值和创建动态样式。SCSS提供了内置函数,同时还允许你创建自定义函数。SCSS中的函数的工作方式类似于编程语言中的函数,它们接受输入(参数)并返回值。
以下是SCSS中函数工作的示例;
内置函数:SCSS提供了许多内置函数,你可以使用它们来操作值、执行计算和修改样式。一些内置函数的示例包括:lighten()
、darken()
、rgba()
、round()
、percentage()
、mix()
等等。
$color: #3498db;
.lighter-color {
background-color: lighten($color, 20%);
}
自定义函数: SCSS还允许你使用 @function
指令创建自定义函数。自定义函数可以接受参数,执行计算或逻辑,并返回值。以下是一个将像素值转换为rem单位的自定义函数示例:
@function px-to-rem($pxValue, $baseFontSize: 16px) {
@return ($pxValue / $baseFontSize) * 1rem;
}
.text {
font-size: px-to-rem(18px);
}
在SCSS中,局部文件是一种用于将样式代码模块化和组织化的技术。局部文件允许你将一个大的样式表分割成多个小的文件,以便更好地管理和维护代码。局部文件的文件名通常以一个下划线开头(例如 _partial.scss
),并具有.scss扩展名。它们包含了可以使用 @import 指令包含和组合到主SCSS文件中的CSS代码段。
scss。// _variables.scss
$base-font-size: 16px;
$color-primary: red;
$color-secondary: blue;
$padding-large: 2rem;
$padding-small: 1rem;
body {
font-family: Arial, sans-serif;
font-size: $base-font-size;
}
@import 'variables';
.parent {
padding: $padding-large;
background-color: $color-primary;
.child {
background-color: $color-secondary;
padding: $padding-small;
}
}
SCSS还可以通过使用 @extend 指令后跟元素选择器,实现属性从父元素继承到子元素。以下是SCSS中继承的工作方式:
.parent {
display: flex;
justify-content: center;
align-items: center;
.child {
@extend .parent;
flex-wrap: wrap;
}
}
在上面的代码中,.child 元素将继承 .parent 元素的所有属性,这类似于混合(mixins),但有一些细微的差别,因为混合更加灵活。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。