CSS(层叠样式表)是一门非程序式语言,入门学习使用非常直观方便,但是对于一些比较复杂或者重用性比较强的项目来说,因为CSS没有变量、函数、SCOPE(作用域),需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤其对于非前端开发工程师来讲,往往会因为缺少 CSS 编写经验而很难写出组织良好且易于维护的 CSS 代码。
为了方便前端开发的工作量,出现了sass和less。
SASS(英文全称:Syntactically Awesome Stylesheets)Sass 诞生于 2007 年,使用Ruby 编写,是一种对css的一种扩展提升,增加了规则、变量、混入、选择器、继承等等特性。
可以理解为用js的方式去书写,然后编译成css。比如说,sass中可以把反复使用的css属性值定义成变量,然后通过变量名来引用它们,而无需重复书写这一属性值。
LESS(2009年开源的一个项目,受Sass的影响较大,但又使用CSS的语法,让大部分开发者和设计师更容易上手。
LESS保留了css的任何功能,同时提供了多种方式能平滑的将写好的代码转化成标准的CSS代码,可以在任何使用随时切换到css的语法进行书写。
传统的css可以直接被html引用,但是sass和less由于使用了类似JavaScript的方式去书写,所以必须要经过编译生成css,而html引用只能引用编译之后的css文件,虽然过程多了一层,但是毕竟sass/less在书写的时候就方便很多,所以在我们使用sass/less之前,只要我们提前设置好,就可以直接生成对应的css文件,而我们只需要关心我们的sass/less文件即可。
Sass的语法规则,可以参考下SASS中文网:https://www.sass.hk/。
SASS技术的文件的后缀名有两种形式:.sass和.scss。其实两者都是同一种东西,两种均可以可以通过编译生成浏览器能识别的css文件。这两种的区别:
Sass 语法
$font-stack: Helvetica, sans-serif //定义变量
$primary-color: #333 //定义变量
body
font: 100% $font-stack
color: $primary-color
SCSS 语法
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack;
color: $primary-color;
}
编译出来的 CSS
body {
font: 100% Helvetica, sans-serif;
color: #333;
}
LESS技术的后缀名只有一种,就是.less,语法规则和sass大同小异,详细可以参考less中文网http://lesscss.cn/。
LESS使用分为两种:
/* Less */
@color: #999;
@bgColor: skyblue;//不要添加引号
@width: 50%;
#wrap {
color: @color;
width: @width;
}CSS 是开发人员用于网页开发的样式语言。它用于设置网页样式并使其具有吸引力。它是 Web 开发的三个基本部分之一,另外两个是 JavaScript 和 HTML。
CSS 旨在实现表示和内容的分离,包括布局、颜色和字体。这种分离可以提高内容的可访问性,提供更多的灵活性和对表示特性规范的控制,通过在单独的 .css 文件中指定相关的 CSS 使多个网页能够共享格式,并减少结构上下文中的复杂性和重复性。
网页上的每个项目或元素都是以标记语言编写的文档的一部分。在大多数情况下,使用 HTML(超文本标记语言),但也使用其他语言,例如 XML 和 XHTML。
CSS 的语法非常简单,包含大量用于各种样式属性的英文关键字。它包括选择器、属性、值、声明、声明块、规则集、at 规则和语句。
CSS的优点
1.一致性——CSS 有助于构建一个一致的框架,设计师可以使用它来构建其他网站。因此,网页设计师的效率也会提高。
2.易于使用——CSS 非常容易学习并简化了网站开发。所有代码都放在一页上,这意味着对行的改进或编辑不会涉及到几页。
3.网站速度——通常,用于网站的代码最多可以达到 2 页或更多。但是对于 CSS,这不是问题。它只需要 2-3 行代码,因此网站数据库保持整洁,消除了任何网站加载问题。
4.设备兼容性——CSS 更改对设备友好。由于人们使用不同类型的智能设备来访问互联网,因此需要或响应式网页设计。CSS 通过使网页更具响应性来达到这里的目的,以便它们最终在所有设备中以相同的方式显示。
5.多浏览器支持——CSS 享有多浏览器的支持。它与所有主要的互联网浏览器兼容。
6.重新定位 – CSS 允许你定义页面上存在的 Web 元素位置的变化。通过它的实现,开发人员可以将 HTML 元素放置在他们喜欢的位置,以便与页面的美感或其他考虑因素保持一致。
7.网页抓取 – CSS 有助于为你的网站启用 SEO。通过将 CSS 合并到你的网页中,搜索引擎可以更轻松地在搜索结果中找到你的页面。
8.传输大小 - 它减少了文件传输大小。这导致更快的文件传输。
SCSS 是一种被中断或编译成 CSS 的预处理器语言。它是一种特殊类型的 SASS(Syntactically Awesome Style Sheets)。SCSS 的脚本是在 Saasscript 中完成的。SCSS 包含 CSS 的所有功能,还添加了一些额外的特殊功能。
使用 SCSS,我们可以向 CSS 添加许多附加功能,例如变量、嵌套等。与编写传统 CSS 相比,所有这些附加功能可以使编写 CSS 变得更加容易和快捷。
SCSS 生成浏览器可以通过在运行 Web 应用程序的服务器上运行 SCSS 文件来理解的传统 CSS。在 SASS 或 SCSS 中阅读代码比在 CSS 中阅读要快。
SASS 和 SCSS 在语法方面的唯一区别是缩进 { } 的使用。换句话说,SCSS 只不过是带有缩进的 SASS。
SCSS的优势
1.它有助于你在程序结构中编写干净、简单且更少的 CSS。
2.它包含的代码更少,因此你可以更快地编写 CSS。
3.它有很好的文档,这意味着你可以在线获取所有必需的信息。
4.它提供嵌套,因此你可以使用嵌套语法和有用的函数,如颜色操作、数学函数和其他值。
5.它与所有版本的 CSS 兼容。因此,你可以使用任何可用的 CSS 库。
6.它由变量组成,这些变量有助于在整个 CSS 中根据需要多次重用这些值。
7.语法高亮是一种广泛使用的 CSS 工具,在 SCSS 中得到支持。SCSS 允许你使用现有代码,并在不改变代码的外部行为的情况下帮助改进其内部结构。
CSS和SCSS的比较
1.SCSS 更具表现力——SCSS 在其代码中使用的行数比 CSS 少,这使得代码加载速度更快。
2.它鼓励规则的正确嵌套——标准 CSS 不支持嵌套。我们不能在另一个类中编写一个类。随着项目变得越来越大,这带来了可读性问题,并且结构看起来不太好。
3.语法 – SCSS 的语法包含 CSS 中缺少的缩进。
4.SCSS 允许用户编写更好的内联文档——SASS 可以灵活地添加注释,但任何优秀的开发人员都会更喜欢 SCSS 中提供的内联文档。内联文档使代码行不言自明。
5.更好的功能——在 SCSS 的帮助下,我们可以以 CSS 中不存在的变量、选择器和嵌套的形式向代码添加更多功能。
6.自定义 Bootstrap – 了解 SCSS 有助于自定义 Bootstrap 4。
7.数学运算——SCSS 允许我们使用运算符进行数学运算。我们可以在代码中执行简单的计算以获得更好的输出。
尽管CSS提供了所有的工具,但有时很难掌握您控制的内容。
scss是sass的另一种语法,Sass是一种CSS预处理器,允许开发者编写更具结构性、可维护性和动态性的样式表
scss保持了css的语法结构,同时具备sass的强大功能,可以简单理解为一种增强版的css,除css含有功能外,还包含但不限于更优的变量、嵌套规则、混合、函数、动态运算等,文件后缀名为scss
在浏览器前端中,正常是不能直接使用scss的,其是一种CSS预处理器,即需要通过编译,生成对应的css文件,再进行使用
SCSS整体语法与CSS基本类似,其是CSS的一个超集,在SCSS内写CSS也是完全可以的
SCSS的注释主要有两种形式,一种为//,另一种为/**/,与Js类似
SCSS的变量用$来声明,使用时直接通过$ + 名称调用即可,变量数据可以是数字、字符串、颜色、布尔值、null,甚至还可以是List和Map
变量可以使用在几乎任何需要的地方,如属性值,属性名合成、复杂运算、函数调用等
与CSS变量相比:
声明规则:$name: value;
形式与样式属性类似,$后接名称即为变量名,冒号后面跟变量值
变量声明后,在其之后的位置依旧可以重新声明赋值
举个栗子
编译后的CSS如下:
了解一下即可,我们在定义值为字符串的变量时,有两种写法,带引号和不带引号,两者都能正常使用
带引号的可用于表达式计算
不带引号的一般不用于表达式计算(容易报错),而是直接使用
除了自己定义的变量外,SCSS还包含一些内置变量,其分布在不同模块内,使用时需另行导入
示例如下
需注意的是,内置变量是不支持重新自定义赋值的
在使用CSS写一些子元素样式时,很多时候都需要带上其父元素,以使选择器更精准或提高其优先级,但当大量书写类似属性时,每次都需要带上其父元素选择器,这其实的重复的工作
SCSS则可以规避这种情况,其支持嵌套使用
选择器嵌套
编译后的CSS如下:
属性嵌套
嵌套除了用在选择器外,其还可以用在样式属性中,如下:
编译后如下:
SCSS支持对变量或值进行运算,支持 +、-、*、/、%、==、!=、>、< 等运算符,对于不同单位之间的运算,运算结果取第一个值的单位,如果值之间只有一个有单位,则运算结果就取该单位
在介绍运算前,先介绍一个新的规则@debug,其用于帮助在开发过程中查看一些变量值或表达式值,SCSS运行后会将@debug后面的内容输出到控制台,类似Js的输出语句
需要注意的是,除法/比较特殊,其只在以下三种情况会进行除法运算:
但是,如果你的SCSS版本较高,可能会收到一个warning警告,官方团队不推荐直接使用/的形式进行除法运算,这是由于在CSS在/也作为分隔符使用
官方更推荐使用sass:math模块的math.div函数或calc函数来执行除法运算,如下:
除了普通值运算外,SCSS还支持颜色值之间的运算
需注意的是,这在高版本的SCSS中已经弃用,高版本如需计算颜色,推荐使用sass:color模块内的颜色函数
插值,即将SCSS表达式用#{}包围,作用是将SCSS表达式结果嵌入到CSS中
插值几乎可以使用在SCSS样式表的所有位置,如:选择器名、属性名、属性值、变量值、动画名等
编译后的CSS为:
在插值内使用带引号的字符串时,解析时会将引号去掉
编译后为:
使用时需思考是否要带引号,否则可能导致超乎预期的结果
一个项目的样式往往是很多的,而我们一般不会将其完全放在一个文件内,一般会按某种规则区分,存放于多个文件内,不同文件需共享时就导入
SCSS与CSS具有类似的导入语法@import,其允许多个导入用逗号分隔,导入文件后缀sass/scss可省略,如下:
但是,官方团队不鼓励继续使用该规则,其将在未来几年内逐步淘汰它,并最终从语言中删除
原因是:
官方更推荐使用@use来导入模块,以这种方式加载的任何样式都将在编译的 CSS 输出中只包含一次,无论这些样式被加载了多少次
@use具有和@import同样的功能,并且它还具有命名空间,以避免命名冲突,默认其命名空间即为文件名,也可以用as设置
对于自己编写的文件,如果不在意命名冲突,也可完全导入,此时即可直接使用
除了一些常见功能外,SCSS还具备一些高级功能,如:控制语句、函数等
条件语句主要使用@if和@else、@else if,效果于常见编程语言类似,如下:
以上SCSS会根据$pos变量值动态选择生成的justify-content
编译后CSS为:
循环语句主要有三个:@each、@for和@while
与Js类似,函数用于封装、定义一些复杂操作
一些示例如下:
有趣的事实
与所有Scss标识符一样,函数名称将连字符和下划线视为相同,这意味着is-center和is_center两者都引用相同的函数,这是早期的历史遗留物,当时它只允许在标识符名称中使用下划线
使用@mixin定义,使用@include引用,用于定义一些可以在整个样式表中重复使用的样式,其与函数类似,也可执行复杂操作、传入参数等,主要用于定义一些复杂的、规则的通用样式
语法如下:
引用如下:
一些示例
@content用于表示自定义内容,使用时会将{}内的内容注入到@content所占位置
继承是基于选择器的,其实现一个选择器可以继承另一个选择器的所有样式,包括组合样式(如伪类选择器样式)
默认浏览器样式不可继承,因为其不属于样式表样式
示例
编译后的CSS如下:
SCSS是一款CSS预处理器,其具备部分高级编程语言的特性,因此其需要经过编译使用,其也可以进行调试
SCSS是需要经过编译,变成CSS才可以正常使用的,这在上面已经提到
编译单个文件比较简单,在命令行输入sass空格后接文件名即可,如需生成对应CSS文件,则在原有命令后再接空格加生成文件名即可
不想每次都运行命令重新编译,也可以通过添加命令参数--watch以监听编译,此时不必关闭控制台,系统会监听所编译SCSS文件的变化,但内容改变则重新编译,具体如下
如需停止监听,只需在控制台按Ctrl + C即可
SCSS提供了几个命令用于开发调试
参考资料
SCSS模块文档:https://sass.bootcss.com/documentation/modules.html
SCSS官网:https://sass.bootcss.com
*请认真填写需求信息,我们会在24小时内与您取得联系。