您现在的位置是:网站首页> 编程资料编程资料
Css预编语言及区别详解CSS Transition通过改变Height实现展开收起元素从QQtabBar看css命名规范BEM的详细介绍css实现两栏布局,左侧固定宽,右侧自适应的多种方法CSS 实现Chrome标签栏的技巧CSS实现两列布局的N种方法CSS实现隐藏搜索框功能(动画正反向序列)CSS3中Animation实现简单的手指点击动画的示例详解CSS中的特指度和层叠问题详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)关于CSS浮动与取消浮动的问题
2021-09-02
986人已围观
简介 这篇文章主要介绍了Css预编语言及区别详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
一、是什么

Css 作为一门标记性语言,语法相对简单,对使用者的要求较低,但同时也带来一些问题
需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤其对于非前端开发工程师来讲,往往会因为缺少 Css 编写经验而很难写出组织良好且易于维护的 Css 代码
Css 预处理器便是针对上述问题的解决方案
预处理语言
扩充了 Css 语言,增加了诸如变量、混合(mixin)、函数等功能,让 Css 更易维护、方便
本质上,预处理是 Css 的超集
包含一套自定义的语法及一个解析器,根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 Css 文件
二、有哪些
Css 预编译语言在前端里面有三大优秀的预编处理器,分别是:
- sass
- less
- stylus
sass
2007 年诞生,最早也是最成熟的 Css 预处理器,拥有 Ruby 社区的支持和 Compass 这一最强大的 Css 框架,目前受 LESS 影响,已经进化到了全面兼容 Css 的 Scss
文件后缀名为 .sass 与 scss ,可以严格按照 sass 的缩进方式省去大括号和分号
less
2009年出现,受 SASS 的影响较大,但又使用 Css 的语法,让大部分开发者和设计师更容易上手,在 Ruby 社区之外支持者远超过 SASS
其缺点是比起 SASS 来,可编程功能不够,不过优点是简单和兼容 Css ,反过来也影响了 SASS 演变到了 Scss 的时代
stylus
Stylus 是一个 Css 的预处理框架,2010 年产生,来自 Node.js 社区,主要用来给 Node 项目进行 Css 预处理支持
所以 Stylus 是一种新型语言,可以创建健壮的、动态的、富有表现力的 Css 。比较年轻,其本质上做的事情与 SASS/LESS 等类似
三、区别
虽然各种预处理器功能强大,但使用最多的,还是以下特性:
- 变量(variables)
- 作用域(scope)
- 代码混合( mixins)
- 嵌套(nested rules)
- 代码模块化(Modules)
因此,下面就展开这些方面的区别
基本使用
less和scss
.box { display: block; }sass
.box display: block
stylus
.box display: block
嵌套
三者的嵌套语法都是一致的,甚至连引用父级选择器的标记 & 也相同
区别只是 Sass 和 Stylus 可以用没有大括号的方式书写
less
.a { &.b { color: red; } }变量
变量无疑为 Css 增加了一种有效的复用方式,减少了原来在 Css 中无法避免的重复「硬编码」
less 声明的变量必须以 @ 开头,后面紧跟变量名和变量值,而且变量名和变量值需要使用冒号 : 分隔开
@red: #c00;
strong { color: @red; }sass 声明的变量跟 less 十分的相似,只是变量名前面使用 @ 开头
$red: #c00;
strong { color: $red; }stylus 声明的变量没有任何的限定,可以使用 $ 开头,结尾的分号 ; 可有可无,但变量与变量值之间需要使用 =
在 stylus 中我们不建议使用 @ 符号开头声明变量
red = #c00
strong color: red
作用域
Css 预编译器把变量赋予作用域,也就是存在生命周期。就像 js 一样,它会先从局部作用域查找变量,依次向上级作用域查找
sass 中不存在全局变量
$color: black; .scoped { $bg: blue; $color: white; color: $color; background-color:$bg; } .unscoped { color:$color; } 编译后
.scoped { color:white;/*是白色*/ background-color:blue; } .unscoped { color:white;/*白色(无全局变量概念)*/ } 所以,在 sass 中最好不要定义相同的变量名
less 与 stylus 的作用域跟 javascript 十分的相似,首先会查找局部定义的变量,如果没有找到,会像冒泡一样,一级一级往下查找,直到根为止
@color: black; .scoped { @bg: blue; @color: white; color: @color; background-color:@bg; } .unscoped { color:@color; } 编译后:
.scoped { color:white;/*白色(调用了局部变量)*/ background-color:blue; } .unscoped { color:black;/*黑色(调用了全局变量)*/ } 混入
混入(mixin)应该说是预处理器最精髓的功能之一了,简单点来说, Mixins 可以将一部分样式抽出,作为单独定义的模块,被很多选择器重复使用
可以在 Mixins 中定义变量或者默认参数
在 less 中,混合的用法是指将定义好的 ClassA 中引入另一个已经定义的 Class ,也能够传递参数,参数变量为 @ 声明
.alert { font-weight: 700; } .highlight(@color: red) { font-size: 1.2em; color: @color; } .heads-up { .alert; .highlight(red); }编译后
.alert { font-weight: 700; } .heads-up { font-weight: 700; font-size: 1.2em; color: red; }Sass 声明 mixins 时需要使用 @mixinn ,后面紧跟 mixin 的名,也可以设置参数,参数名为变量 $ 声明的形式
@mixin large-text { font: { family: Arial; size: 20px; weight: bold; } color: #ff0000; } .page-title { @include large-text; padding: 4px; margin-top: 10px; }stylus 中的混合和前两款 Css 预处理器语言的混合略有不同,他可以不使用任何符号,就是直接声明 Mixins 名,然后在定义参数和默认值之间用等号(=)来连接
error(borderWidth= 2px) { border: borderWidth solid #F00; color: #F00; } .generic-error { padding: 20px; margin: 4px; error(); /* 调用error mixins */ } .login-error { left: 12px; position: absolute; top: 20px; error(5px); /* 调用error mixins,并将参数$borderWidth的值指定为5px */ } 代码模块化
模块化就是将 Css 代码分成一个个模块
scss 、 less 、 stylus 三者的使用方法都如下所示
@import './common'; @import './github-markdown'; @import './mixin'; @import './variables';
参考文献
https://mp.weixin.qq.com/s/HUEnnJKJDTp8Vlvu2NfUzA
到此这篇关于Css预编语言及区别详解的文章就介绍到这了,更多相关Css预编语言内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!
相关内容
- 用position:sticky完美解决小程序吸顶问题的实现方法position:sticky 粘性定位的几种巧妙应用详解CSS使用position:sticky 实现粘性布局的方法position:sticky用法介绍及浏览器兼容性
- position:sticky 粘性定位的几种巧妙应用详解CSS使用position:sticky 实现粘性布局的方法position:sticky用法介绍及浏览器兼容性
- 六种css3实现的边框过渡效果css 中多种边框的实现小窍门html+css合并表格边框的示例代码一文教你玩转CSS border(边框)CSS 奇思妙想边框动画效果的实现CSS border边框一半或者部分可见的实现代码CSS3 按钮边框动画的实现CSS3 实现发光边框特效
- CSS3 实现的动态星空背景css3实现背景图片半透明内容不透明的方法示例css3实现背景图片颜色修改的多种方式css3制作的背景渐变动画效果CSS3实现模糊背景的三种效果示例CSS3 菱形拼图实现只旋转div 背景图片不旋转功能CSS3只让背景图片旋转180度的实现示例基于css3制作的圆形透明画中画视频播放特效JS+CSS3文章内容背景黑白切换特效代码css3实现简单的白云飘动背景特效
- 用CSS实现图片的3D凹凸感(凸出镜框外或凹陷镜框里)CSS3 3D酷炫立方体变换动画的实现CSS3之2D与3D变换的实现方法简单几步用纯CSS3实现3D翻转效果css3实现3D文本悬停改变效果的示例代码CSS实现卡片3D翻转效果的示例代码使用纯CSS实现书籍3D翻页效果的示例纯css实现照片墙3D效果的示例代码CSS3系列之3D制作方法案例
- 巧用 -webkit-box-reflect 倒影实现各类动效(小结)CSS3 Notes: -webkit-box-reflect实现倒影的实例
- 在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)html+css+javascript实现跟随鼠标移动显示选中效果 利用HTML+CSS实现跟踪鼠标移动功能CSS实现鼠标移动到图片或按钮上改变大小的方法示例纯CSS实现鼠标移动切换图片示例
- 基于CSS3画一个iPhoneCSS3 实现NES游戏机的示例代码CSS3鼠标悬浮过渡缩放效果CSS3实现的文字弹出特效纯 CSS3实现的霓虹灯特效CSS3 实现的图片悬停的切换按钮CSS3实现三角形不断放大效果css3实现背景图片颜色修改的多种方式CSS3 制作的悬停缩放特效
- CSS3 实现NES游戏机的示例代码CSS3鼠标悬浮过渡缩放效果CSS3实现的文字弹出特效纯 CSS3实现的霓虹灯特效CSS3 制作的图片滚动效果CSS3常见动画的实现方式CSS3实现的水平标题菜单CSS3 制作的悬停缩放特效CSS3 制作的书本翻页特效
- css实现文章分割线样式的多种方法总结CSS巧妙实现自适应分隔线的N种方法
