写在前面的乱七八糟的前言:

emmm,不得不说,早上七点是个好时间,公园里跳广场舞的大妈,街边卖菜刀看报的大爷,又不得不说,广州图书馆是个好地方,该有的安静,该有的人气,听着楼下小孩子的声音,看着周围各色各样的人,emmm比如:无视请勿饮食的标识语正在吃东西的小姐姐,好像是个三明治- -,我不会承认,我也饿了的TAT,老生常谈那么几句,一直秉承着不仅要学会用也要知道用的这些从何处而来,所构成的逻辑及背后的故事,总不能哪天面试官问你,谈谈你对CSS预处理器的看法,或问,你觉得Sass方便在哪,然后一脸懵逼的双目对视?真是像极了爱情?emmmm,好的,我皮够了,下面依旧是从"是什么/有什么/为什么"切入。

目录

1、她从何处来——CSS预处理器的产生

2、她长什么样——什么是CSS预处理器

3、她家几姐妹——CSS预处理器分类(Sass、Less、Stylus)

4、如何攻略她——CSS预处理器优缺点

5、如何使用她——CSS预处理器的使用

5.1变量

5.2运算

5.3嵌套

5.4注释

5.5代码的重用:混合、扩展、函数、插入文件

5.6高级用法:条件语句、循环语句、自定义函数

内容

1、她从何处来——CSS预处理器的产生

既然叫CSS预处理器,肯定跟CSS有某些不可描述的故事,CSS是一门非程序式的语言,变量×,函数×,SCOPE(作用域)×,条件语句×,在前期进行界面设计时,需要书写大量的、无逻辑、不易维护、不易扩展、不易重复调用的代码,诚然,经验老道的大佬们都会采用公共类名、各类选择器等,但对于老夫这种小白emmm,CSS预处理器就是福音呐——

2、她长什么样——什么是CSS预处理器

CSS预处理器的基本思想是:用一种专门的编程语言,为CSS加入一些编程特性,将CSS作为目标生成文件,然后开发者只需要使用这种语言进行编码。在无需考虑浏览器兼容性问题的前提下,使用变量/简单的逻辑程序/函数等在编程语言中的一些基本特性。

3、她家几姐妹——CSS预处理器分类

目前使用最多的三款CSS预处理器:Sass、Less、Stylus,讲真,最后一款,可能因为我还太小白,孤陋寡闻,以致听都没听过,没使用过没有发言权,就不种草了。

3.1Sass

Sass产生:2007年,目前为止,最早最成熟的CSS预处理器,拥有ruby社区与compass框架的支持,受Less影响,已进化到了全面兼容CSS的SCSS

Sass中文网

3.2Less

Less产生:2009年,受Sass影响较大,但又使用CSS语法,简单易上手,在ruby社区外支持者远超过Sass,但与Sass相比,编程功能不够,优点仅简单与兼容CSS,但神奇的是:Twitter Bookstrap采用Less做底层语言的。

Less中文网

3.3Stylus

Stylus产生:2010年,来自Node.js社区,主要用于给Node项目进行CSS预处理支持。

4、如何攻略她——CSS预处理器优缺点

4.1优点

↑开发速度

↑代码优化效率

代码更通俗易懂》》维护简单便捷

通俗一句旁白:Sass与Less就是CSS里的jQuery

4.2缺点

↓用户体验

↓网页打开速度

需要一定的学习过程

5、如何使用她——CSS预处理器的使用

5.1变量(Variables)

无需重复书写:将反复使用的css属性定义为变量,然后通过变量名来引用它们

赋予易懂的变量名:让人一眼看出属性值用途

5.2运算(Operations)

5.2.1数字运算(Number Operations)

支持数字的加减乘除,取整等(+;-;×;/;%),若必要时会在不同单位间转换值

关系运算(<;>;<=;>=;==;!=)

ps:除法运算与分割符(/)

/ 在 CSS 中通常起到分隔数字的用途,SassScript 作为 CSS 语言的拓展当然也支持这个功能,同时也赋予了 / 除法运算的功能

以下三种情况 / 将被视为除法运算符号:

  • 如果值,或值的一部分,是变量或者函数的返回值
  • 如果值被圆括号包裹
  • 如果值是算数表达式的一部分
p {
font: 10px/8px; // Plain CSS, no division
$width: 1000px;
width: $width/2; // Uses a variable, does division
width: round(1.5)/2; // Uses a function, does division
height: (500px/2); // Uses parentheses, does division
margin-left: 5px + 8px/2px; // Uses +, does division
}

编译为

p {
font: 10px/8px;
width: 500px;
height: 250px;
margin-left: 9px;
}

如果需要使用变量,同时又要确保 / 不做除法运算而是完整地编译到 CSS 文件中,只需要用#{}插值语句将变量包裹

p {
$font-size: 12px;
$line-height: 30px;
font: #{$font-size}/#{$line-height};
}

编译为

p {font: 12px/30px; }

5.2.2颜色运算(Color Operations)

颜色值的运算是分段计算进行的,也就是分别计算红色,绿色,以及蓝色的值

p {
color: #010203 + #040506;
}
//01 + 04 = 05 02 + 05 = 07 03 + 06 = 09

编译为

p {color: #050709; }

但使用color functions比计算颜色值更方便一些

p {color: #010203 * 2;}
//01 * 2 = 02 02 * 2 = 04 03 * 2 = 06

编译为:

p {color: #020406; }

ps:若颜色值包含 alpha channel(rgba 或 hsla 两种颜色值),必须拥有相等的 alpha 值才能进行运算,因为算术运算不会作用于 alpha 值

颜色值的 alpha channel 可以通过opacify或 transparentize两个函数进行调整

$translucent-red: rgba(255, 0, 0, 0.5);
p {
color: opacify($translucent-red, 0.3);
background-color: transparentize($translucent-red, 0.25);
}

编译为

p {
color: rgba(255, 0, 0, 0.8);
background-color: rgba(255, 0, 0, 0.25);
}

IE 滤镜要求所有的颜色值包含 alpha 层,而且格式必须固定 #AABBCCDD,使用 ie_hex_str 函数可以很容易地将颜色转化为 IE 滤镜要求的格式

$translucent-red: rgba(255, 0, 0, 0.5);
$green: #00ff00;
div {
filter: progid:DXImageTransform.Microsoft.gradient(enabled='false', startColorstr='#{ie-hex-str($green)}', endColorstr='#{ie-hex-str($translucent-red)}');
}

编译为:

div {
filter: progid:DXImageTransform.Microsoft.gradient(enabled='false', startColorstr=#FF00FF00, endColorstr=#80FF0000);
}

5.2.3字符串运算(String Operations)

5.2.4布尔值运算(Boolean Operations)

5.2.5数组运算(List Operations)

使用list functions控制

5.3嵌套(Nested)

5.3.1选择器嵌套

保留Html中的代码结构,默认后代选择器

需子代选择器,则在子代前加>

&表示上一层

5.3.2属性嵌套(Nested Properties)

5.3.3伪类嵌套

5.4注释(Comment)

5.4.1多行注释/*  */:完整输出到编译后文件

5.4.2单行注释/     /:在非compressed压缩模式下会被编译到CSS文件中

5.4.3强调注释/*! */:在/*后面加一个感叹号,表示这是"重要注释",即使是压缩模式编译,也会保留这行注释,通常可以用于声明版权信息

ps:插值语句 (interpolation) 也可写进多行注释中输出变量值:

$version: "1.2.3";
/* This CSS is generated by My Snazzy Framework version #{$version}. */

编译为

/* This CSS is generated by My Snazzy Framework version 1.2.3. */

5.5代码的重用:混合、扩展、函数、插入文件

5.5.1混合(Mixins)

将部分样式抽出,作为单独定义的模板,被多选择器调用,如某段样式经常用到多个元素时,需重复写多次,则可使用

5.5.1.1无参混合:声明:.name{ };调用:调用选择器

5.5.1.2带参混合:

5.5.1.2.1无默认值声明:.name(@param){ }  调用:name(parValue); parValue不可省

5.5.1.2.2有默认值声明:.name(param:value( )){ }  调用:name(parValue); parValue可省

ps:无参混合会在CSS中编译同名的class选择器,带参的不会。

5.5.2扩展(Extand)

5.5.3函数(Function)

5.5.4导入文件(@import)

在CSS中,并不喜欢用@import来导入样式,因为这样的做法会增加http的请求。但是在CSS预处理器中的导入(@import)规则和CSS的有所不同,它只是在语义上导入不同的文件,但最终结果是生成一个CSS文件。如果你是通赤“@import ‘file.css’”导入“file.css”样式文件,那效果跟普通CSS导入样式文件一样。注意:导入文件中定义了变量、混合等信息也将会被引入到主样式文件中,因此需要避免他们的相互冲突

5.6高级用法:条件语句、循环语句、自定义函数

5.6.1条件语句:@if @else

5.6.2循环语句:@for  @while

5.6.3自定义函数

参考文献:

【前端】CSS预处理语言总结比较

详说css与预处理器(以及less、sass、stylus的区别)

阮一峰Sass用法指南

我是无处安放的小结:

现在是16:17分,除去中间吃掉的一个半小时,有点困了,emmm,但是,但是,刚刚手贱的认识了Sass的toolkit——Compass,停不下来了,艾玛真香,我快哭了。请容我休息一会,再整理补充~

现在是18:04分,本文最重点的部分还是打算另开一篇,好好盘一番,emmm最重要还是在怎么使用它,但是Sass的用法确实比Less高级那么一丢丢。希望不要太难搞啊~

20190421-那些年使用过的CSS预处理器(CSS Preprocessor)的更多相关文章

  1. 前端CSS预处理器Sass

    前面的话   "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...

  2. 关于前端CSS预处理器Sass的小知识!

    前面的话   "CSS预处理器"(css preprocessor)的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件.SASS是一种CSS的开发工 ...

  3. CSS预处理器——Sass、LESS和Stylus实践

    CSS(Cascading Style Sheet)被译为级联样式表,做为一名前端从业人员来说,这个专业名词并不陌生,在行业中通常称之为“风格样式表(Style Sheet)”,它主要是用来进行网页风 ...

  4. CSS预处理器 Less Sass,Scss 编译 Sourcemap调试

    sass.less和stylus的安装使用和入门实践     SASS用法指南    Sass Basics CSS预处理器 css preprocessor 预处理器即preprocessor,预处 ...

  5. 初识css预处理器:Sass、LESS

    这篇文章是初步介绍css预处理的,详细学习请移步官网~ 什么是css预处理器 CSS 预处理器是一种语言, 通俗易懂的话来说就是“用一种专门的编程语言,进行 Web 页面样式编写,再通过编译器转化为正 ...

  6. css预处理器sass使用教程(多图预警)

    css预处理器赋予了css动态语言的特性,如变量.函数.运算.继承.嵌套等,有助于更好地组织管理样式文件,以及更高效地开发项目.css预处理器可以更方便的维护和管理css代码,让整个网页变得更加灵活可 ...

  7. CSS预处理器Sass、LESS 和 Stylus

    CSS 预处理器技术已经非常的成熟,而且也涌现出了越来越多的 CSS 的预处理器框架.本文向你介绍使用最为普遍的三款 CSS 预处理器框架,分别是 Sass.Less CSS.Stylus. 首先我们 ...

  8. Myth – 支持变量和数学函数的 CSS 预处理器

    Myth 是一个预处理器,有点类似于 CSS polyfill .Myth 让你写纯粹的 CSS,同时还让你可以使用类似 LESS 和 Sass 的工具.您仍然可以使用变量和数学函数,就像你在其它预处 ...

  9. CSS 预处理器(框架)初探:Sass、LESS 和 Stylus

    现在最为普遍的三款 CSS 预处理器框架,分别是 Sass.Less CSS.Stylus. 拿less来说,可以在页面上直接使用less文件,但要引用less.js进行解析:同时也可以直接将less ...

随机推荐

  1. Python爬虫入门教程 58-100 python爬虫高级技术之验证码篇4-极验证识别技术之一

    目录 验证码类型 官网最新效果 找个用极验证的网站 拼接验证码图片 编写自动化代码 核心run方法 模拟拖动方法 图片处理方法 初步运行结果 拼接图 图片存储到本地 @ 验证码类型 今天要搞定的验证码 ...

  2. TensorFlow从1到2(一)续讲从锅炉工到AI专家

    引言 原来引用过一个段子,这里还要再引用一次.是关于苹果的.大意是,苹果发布了新的开发语言Swift,有非常多优秀的特征,于是很多时髦的程序员入坑学习.不料,经过一段头脑体操一般的勤学苦练,发现使用S ...

  3. FreeSql 过滤器使用介绍

    FreeSql.Repository 实现了过滤器,它不仅是查询时过滤,连删除/修改/插入时都会进行验证,避免数据安全问题. 过滤器 目前过滤器依附在仓储层实现,每个仓储实例都有 IDataFilte ...

  4. Nginx的“远方表哥”—Tengine

    本文收录在Linux运维企业架构实战系列 今天想起当初研究nginx反向代理负载均衡时,nginx自身的upstream后端配置用着非常不舒服: 当时使用的淘宝基于nginx二次开发的Tengine, ...

  5. java监听器简述

    监听器的概念 所谓监听器就是对内置对象的状态或者属性变化进行监听并且做出反应的特殊servlet,并且也需要在web.xml文件中进行相关配置. 内置对象的状态变化:初始化和销毁,也就是说当内置对象初 ...

  6. wow.js让css3动画变动更有趣(滚动页面动画模拟懒加载特效)

    CSS3的出现给网站页面增加了活力,网站增色不少,有这么小小的一款插件就能做出很多动画效果. 最重要的是它:简单易用.轻量级.无需 jQuery......他就是wow.js 地址:https://d ...

  7. 总结微信公众平台网页开发中遇到的ios的兼容问题

    1. ios中音频不自动播放: 原因:出于节省流量的初衷,ios系统禁止音视频自动播放. 解决方案:使用微信的JS-SDK. DEMO: 先引入微信的JS-SDK, <script src=&q ...

  8. 【原】Oracle EBS 11无法打开Form及Form显示乱码的解决

    问题:Oracle EBS 11无法打开Form及Form显示乱码 解决: 1.尝试使用jre1.5或1.6安装目录下jre/bin/server目录里的jvm.dll替换JInitiator安装目录 ...

  9. 关于OSError: [WinError 10038] 在一个非套接字上尝试了一个操作。

    在使用socket的时候,写了一个while循环,就报错了.结果如下: OSError: [WinError 10038] 在一个非套接字上尝试了一个操作. 代码 import socket impo ...

  10. 自学python的日记分享

    2019.4.22登记 课堂笔记 2019.4.8 在windows环境下,用python写出第一个程序“hello world” print("Hello World!!!") ...