0

0

三言两语之简单上手sass

php中文网

php中文网

发布时间:2016-09-05 08:45:32

|

1236人浏览过

|

来源于php中文网

原创

背景:

  初次接手公司的项目,虽然之前草草的看过一些sass的基础知识,但是因为久未征战,知识也早已随风飘散,现在小复习一下记下一些常识中的重点。。sass是使用ruby写的,所以使用前请先确保自己的机子中有了ruby的开发环境,在cmd下使用 ruby -v 命令可以查看当前的ruby版本。

简介及概述:

  sass是css的 预处理工具,当我们的css代码量很大的时候可以简化我们的开发方便后续的维护。什么是预处理工具,简单的理解就是在产生真正css代码 之前 要做的工作,他融入了一些高级语言的特性,提高了我们css的书写效率,且sass也支持css3。

 

  还记得c语言中的预处理嘛?c语言中预处理的类型包括很多,其中最鲜为人知的是“宏定义”,宏定义的作用就是定义一个预设好的常量,然后将代码中出现这个常量的部分,全部使用这个常量预设好的值替换,例如 #define A 5 ,他的意思就是将下文代码中出现的所有A直接替换为5,而这些工作都是在代码编译以前就要进行的,所以宏定义为预处理的一种。

 

      回到我们的上文,我们知道css的代码都要写在文件后缀为css的文件中才能进行编译解析,既然sass是预编译工具,可想而知sass的使用一定就会在产生css之前了,嗯,确实是这样的,sass最常用的书写方式有两种,他们分别对应着不同的后缀名 sass、scss,前者沿袭了ruby、python之类语言的语法,使用空格作为语言语法的一部分,而后者更加贴近于广大的前端爱好者,使用我们css中最常见到的花括号作为语法支持,对于同一段代码区别如下

sass写法: 使用空格作为语法的一部分,本应该是一个空格的地方若出现两个空格则语法报错,且不需要分号结尾    
div     
 width:100px   
 height:100px

scss写法:一如我们写css一般
div{
    width:100px;   
    height:100px;
}   

需要注意的是两种语法不可在同一文件中混写,但是可以利用工具进行相互的转换。

 

 

常用技巧:

 

1.类名嵌套

css代码:   
.div1 .div2{
    background-color:red;
}

sass代码:
.div1{
    .div2{
        background-color:red;
    }
}   
可以看到sass使类名的嵌套更加清晰,类名的权重也会一目了然    

 

2.变量

使用$定义一个变量
$mainColor:red;

css写法:  
.div1 .div2{
    background-color:red;
}

sass写法:
 .div1{
    .div2{
        background-color:$mainColor;
    }
} 
更加方便维护和修改

 

3.伪类/伪元素写法

这个写法我当时猛的一看,确实不知道,还纳闷为什么这样用,后来一查资料,原来只是伪元素的写法而已   

css写法:   
.clearfix::before{
    content:"";
    ...
}

sass写法:
.clearfix{
    &:before{  //&称为父元素选择器,如果不加则代表选中.clearfix类下所有的元素
        content:"";
        ...
    }
}

这里有个小的注意点就是伪类和伪元素的区别:伪元素是css3中才出现的概念,用两个::来表示,伪类意为向某些选择器添加特殊的效果,而伪元素意为将某些特殊的效果添加到某些选择器上,常见的伪类如link、visited、hover、active这里值得一提的是大家一定要注意我的书写顺序,当这四个伪类要同时出现并使用的时候,他的书写顺序必须与我这个保持一致,否则无效,怎么记呢?lv包听过吗?他好不好?嗯!lvha。。开头字母记住整个单词也就差不多了。常用的伪元素就不用说了如after、before、first-letter、first-line等,所以大家一定要知道两点,第一何时写几个分号,第二当同时使用多个伪类时的顺序问题。

 

4.代码重用之继承

  看到这里,大家一定要想到上面写到的第2点,变量的定义是为了某个值的复用,想要复用一大段的代码该怎么做呢?可以使用现在要介绍的继承咯。sass中的继承有两对关键字 @mixin/@include和@extend,两者的工作原理也大不相同,@mixin为定义一个代码快,@include是将定义好的代码快引入,而@extend则是将现定义好的的类样式引入,熟悉c语言的同学都知道,include是c语言中宏定义的一种,在这里可以理解为同义,相当于代码拷贝, 所以当我们的sass解析到这个关键字会直接将@mixin中的代码进行拷贝,而@extend若出现在某个类中则是将当前类名并列到了要继承的类名中去也就是事例中的b的名字会出现在a中,最终的效果是.a,.b即类a类b都会有这个属性。继承是面向对象中的概念,sass中使用@extned关键字,意为拿来主义,简单的理解为你父亲的有的你就可以不要自己再有了,直接拿过来用就好,在我们sass中常用于重复代码引用,前天产品给我提了个需求,他说点击搜索框跳转到新的搜索页面进行搜索,新的页面的搜索框和主页的搜索框大部分相同只有字体的颜色不一致, 此刻难道我要将两部分css都重写一遍?聪明的童鞋想到了,把第一部分写好的继承过来,重写不同的即可。

万知
万知

万知: 你的个人AI工作站

下载
css代码:
.a{
    background-color:red
    ....
}
.b{
    //假设b也需要背景为红色等
    @extend .a;
    font-size:24px;
}

在php中也有include等关键字,前端同学可以查阅相关资料补充自己的知识,如include和require在php中的不同

 

5.注释

  sass中的注释有两种,一种是我们在css中使用的/**/,一种是//注释,前者在编码阶段和编译后的阶段都会被保留,而后者只存在于编码阶段,也就是给程序看的咯~

 

6.文件定义

  sass中的文件定义也很简单,我们只需要知道一点就可以,以_开头的文件名不会被sass编译器编译成css文件,所以他有个见名知意的名字叫 局部文件 而以_下开头的文件中通常会被用作定义一些全部变量,如字体大小颜色等,至少我这个项目是这样做的,如_var.scss文件他的存在形式只会有一种,就是scss后缀结尾的文件,而aa.scss这样的文件,经过sass编译器就会被编译为css文件,我们知道浏览器的渲染引擎只认css文件。不过此刻问题又来了,那_var.scss该怎么使用呢?

 

7.sass中的import和css中import的区别

  _var.scss文件既然不会被编译为css文件,那就意味着他没有办法被浏览器解析,上文也提到过通常使用他来声明一些变量,那么这些变量将怎么被主文件引用呢?这里我们依旧使用的是css中就有的一个关键字@import指令,只是sass中的对这个指令进行的了一定的增强,这里需要大家明确一点,在sass中 *_var和var代表同一个文件* ,所以当引入_var这个文件的时候,只需要写var即可,sass中使用@import引入sass文件的时候只需要写上文件名而不需要后缀,这点就和node中使用require引入一个模块是类似的,例如@import "var",这里大家可能会有疑问怎么使用这个指令来引入曾经的css文件,其实我们上边已经说过@import是sass对css中同名指令的增强,所以当sass判断到@import指令后面出现后缀名、url函数、http等关键字时就会认为你使用的是css中原生的@import指令。

 

关于css中@import的最佳实践,在性能优化方面并不提倡大家在css中经常使用@import指令,我们知道当浏览器引擎拿到一个网页文件的时候是先生成dom树,其次构建渲染树进行渲染,而@import是内嵌在css中的,也就是他会比link标签中的css代码晚一步执行,所以使用这个指令会造成页面的卡顿留白。

 

8.属性的连写拆分

  在css中有个称之为属性连写的概念,如padding:5px,其实我们也可以分写成padding-left、padding-right等,可见这样分写冗余了一个padding关键字,那在sass中要怎样等价替换呢?

css代码
.a{
    padding-left:2px;
    padding-right:2px;
}

sass代码
.a{
    padding{
        left:2px;
        right:2px;
    }
}

 

9.其他

  以上知识sass中最为简单常用的一部分,也是作为一个刚入门的新手必然要掌握的一部分内容,关于sass的其他技巧如可以进行带单位的计算、@if、@at-root等指令如若需要大家可以查阅相关的资料加以补充。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

9

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

8

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

3

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

17

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
JavaScript—极速入门
JavaScript—极速入门

共23课时 | 3.9万人学习

PHP开发基础之语法篇
PHP开发基础之语法篇

共14课时 | 2.2万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时 | 73.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号