原生CSS扩展语言SASS的使用教程

这把我C 2020-12-07 16:50:17 7300
原生CSS的短板

原生的CSS不支持层级写法,导致在书写CSS样式时,会写很多冗余的代码,比如下面这段代码


.jumbotron {
    position: relative;
    padding: 40px 0;
    color: #fff;
    text-align: center;
    text-shadow: 0 1px 3px rgba(0,0,0,.4),0 0 30px rgba(0,0,0,.075);
    background: #020031;
    background: linear-gradient(45deg,#020031,#6d3353);
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr="#020031",endColorstr="#6d3353",GradientType=1);
    box-shadow: inset 0 3px 7px rgba(0,0,0,.2),inset 0 -3px 7px rgba(0,0,0,.2)
}

.jumbotron a {
    color: #fff;
    color: hsla(0,0%,100%,.5);
    transition: all .2s ease-in-out
}

.jumbotron aa:hover {
    color: #fff;
    text-shadow: 0 0 10px hsla(0,0%,100%,.25)
}

.jumbotron .container {
    position: relative;
    z-index: 2
}

.jumbotron:after {
    content: "";
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    background: url(../img/bs-docs-masthead-pattern.png) repeat 50%;
    opacity: .4
}

代码的实际做用就是为了为jumbotron下元素添加样式,但每一个样式的定义都需要使用父类.jumbotron开头,这是为了增加权重。原生的CSS是不支持定义变量的,如果你要定义一个主题色,合作和菜单栏的宽度,都是不行的。有人觉得原生的css在应对更加复杂的排版时,显得有些力不从心。于是就开发了很多工具库,这些工具库补起来了CSS的短板,使其可以定义变量,编写函数,使用更复杂的方程式来生成属性值。其中一个就是我们今天要讲的sass,一个基于Ruby语言开发而成的CSS扩展语言。

Sass的使用

Sass的安装有很多方法,在各个平台都可以,这里使用npm来介绍安装。

npm install -g sass

Sass有一下几个特征

  • 支持声明变量
  • 支持嵌套CSS规则
  • 导入Sass文件
  • 静默注释
  • 混合器
  • 使用选择器继承来精简CSS
    下面让我来一一解释其作用。
    sass的文件扩展名是 .scss,我们要使用sass的文件,就要遵照其语法来来编写sass文件

目前你可以直接在Vue项目里使用Sass,只需下载几个库即可。

声明变量

sass使用$符号来标识变量
下面就是定义了二个变量

$width: 200px;
$height:300px;

变量名使用$开头,并且以;结尾。
定义的变量可以直接在CSS属性中使用如

$width: 200px;
$height: 300px;
$cust-color: #ddd;
.test-wrap{
  margin: 0 auto;
  width: $width;
  height: $height;
  background: black;
  border: 1px solid $cust-color;
}

编译之后就会变成这个样子

.test-wrap{
  margin: 0 auto;
  width: 200px;
  height: 300px;
  background: black;
  border: 1px solid #ddd;
}

变量名可以使用中划线-也可以使用下划线_,两种方式sass都是兼容的。

嵌套的CSS规则

CSS嵌套就是为解决 为子元素设置属性时,必须要地带上父元素的诟病,
原生css的写法

.jumbotron {}
.jumbotron a {}
.jumbotron aa:hover {}
.jumbotron .container{}
.jumbotron:after{}

SASS的写法

.jumbotron{
  a{}
  aa{
    &:hover{}
  }
  .container{}
  &:after{}
}

是不是简单很多了,使用嵌套的方式来表明元素之间的包含关系。
二种方式可以达到同样的效果,此处需要注意的是 伪类,伪元素必须使用&符号

&:hover,&fouce
&::after,&::before
SASS的模块化导入

一个项目我们会使用很多的SASS文件,这些模块在CSS是可以进行分模块引入的,使用
@import。这种引入不同于原生CSS的引入,SASS中的@important是将一个SASS导入到另一个文件,相关的样式被归纳到了同一个CSS文件中。
如下图在项目中我们可以的sass可以包含这三个基本文件

@import 可以引入原生的CSS

sass的静默注释

这个特性是为了不让浏览网站源码的人看到注释

body {
  color: #333; // 这种注释内容不会出现在生成的css文件中
  padding: 0; /* 这种注释内容会出现在生成的css文件中 */
}
混合器

混合器是为增加css代码的公用性,减少代码的冗余
试想一下,目前有五个元素,他们都有着一个共同的CSS属性,border:1px solid #ddd,这是一个简单的例子,当然你可以编写一个类,这个类的规则就是border:1px solid #ddd,但实际开发中并不是只有这一条规则。对于复杂的情况我们可以使用封装,没错,就像vue中的组件封装一样,sass也可以封装一段代码,让你在任何地方调用。来看下具体的用法

@mixin rounded-corners {
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border-radius: 5px;
}

notice {
  background-color: green;
  border: 2px solid #00aa00;
  @include rounded-corners;
}

首先是定义一个混合器,使用@mixin关键词 其次在编写css是,使用@include关键词引入这个混合器。这样经过编译就就变成了这样

.notice {
  background-color: green;
  border: 2px solid #00aa00;
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border-radius: 5px;
}

如果还有其他元素需要使用border-radius: 5px 只需要在该类的css声明底部使用
@include rounded-corners;即可。

混入器的命名一定要具有语义,让人看到名称就知道该混入器有什么作用.

此外混入器还可以使用参数,

@mixin link-colors($normal, $hover, $visited) {
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}

a {
  @include link-colors(blue, red, green);
}

传入参数的混入器,很像一个函数。 而且混入器可以指定默认参数,这样就可以不用传入所有的参数了

@mixin link-colors(
    $normal,
    $hover: $normal,
    $visited: $normal
  )
{
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}
选择器继承来精简CSS

在编写CSS中我们最讨厌的就是编写重复的代码,除了使用混入器,sass还支持继承来减少代码的冗余

//通过选择器继承继承样式
.error {
  border: 1px solid red;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}

.seriousError 使用@extend来集成 .error

掌握了sass你不仅仅可以让你的css代码编写的更好,更精简,而且你能从sass的设计思想中得到很多精简工作的思路。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
红包 65 4 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
这把我C
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区