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

       css预处理器赋予了css动态语言的特性,如变量、函数、运算、继承、嵌套等,有助于更好地组织管理样式文件,以及更高效地开发项目。css预处理器可以更方便的维护和管理css代码,让整个网页变得更加灵活可变。对于预处理器,广泛使用的有less和sass。在这不做对比,2者大同小异,sass基于Ruby语言编写,所以编译sass文件需要Ruby环境。我们使用sass并不需要过多了解Ruby语言,只需要安装Ruby环境即可,而less则主要是运行在node环境下,功能语法有类似之处。本文主要介绍Ruby下sass的使用。

Ruby下载与安装:

1、登录http://rubyinstaller.org/

  

2、点击download后到这个页面,64位windows电脑下载箭头所指的版本即可

3、完了直接安装

点击finish后,就算安装完了,我们还需要去命令行下检测是否安装成功,注意的是ruby的命令行而不是cmd下的命令行。

 打开后进入命令行:

紧接着在ruby下安装sass:输入指令gem install sass

输入sass -v,后出现版本号,就算安装成功了。

好了,下载安装完成,环境算是搭建好了,关于语法跟相关指令下面介绍。

 sass的使用。

为了让更多人能够真正学会使用sass,我从新建文件开始,一步一步演示。

1、我在桌面建了一个名叫sasstest的文件夹,里面新建了一个sass.scss后缀的文件。(新建文本文档后,把名字后缀改成sass.scss)

 

这里说明一下,为什么sass的后缀是scss?其实,sass有两种语法形式。

首先是scss,也就是我们这个后缀形式的语法。这种格式在 CSS3 语法的基础上进行扩展,这意味着每个CSS样式表是一个同等的SCSS文件。此外,SCSS 也支持大多数 CSS hacks 写法 以及浏览器专属前缀语法,这种语法的样式表文件需要以 .scss 作为拓展名。

另一种,也是最早的语法,被称为缩进语法。它提供了一种更加简介的方式来书写CSS。它使用缩进而不是花括号来表示选择器的嵌套,用换行而不是分号来分隔属性,一些人认为这样做比 SCSS 更容易阅读,书写也更快速。缩排语法具有 Sass 的所有特色功能, 虽然有些语法上稍有差异。 使用此种语法的样式表文件需要以 .sass 作为扩展名。

其实不管哪种语法,任何一种语法的文件可以直接导入 到另一种语法的文件中使用,同时还可以通过sass-convert 命令行工具,进行互相转换。

我感觉不用纠结这些差异,使用一种即可,我习惯第一种,所以本文一直使用scss的语法形式。

2、第二步当然就是打开sass.scss啦。用什么编辑器都行,本文使用sublime text。

要想运行sass,就要使用到指令了,好了,先别管语法,在sass.scss中敲上几行,看能不能编译成css,提前了解下指令。

 

敲上去之后呢,查看新建的文件夹,你会发现什么都没有,还是老样

当然啦,你还没监测运行你的sass代码怎么会有变化呢?还记得ruby的命令行窗口吗?是的,需要在那里敲上运行的指令,sass才能生成css代码。

运行sass文件:sass input.scss output.css (左边代表sass输入文件,右边是css输出文件)

sass监视sass文件的指令有:

所谓监视,就是每当sass文件发生改变时,css文件随之生成。这点与运行不同,运行时一次性的,监视是持续性的。

监视某一个sass文件:sass --watch input.scss:output.css(左边代表sass输入文件,右边是css输出文件)

监视整个文件夹:sass --watch sass:css(左边代表监视的文件夹路径,右边代表输出文件夹路径)

那么,跑一边我们的scss代码,看看生成的css,我想要的是在sasstest文件夹下面生成一个css文件夹,存放css文件,方便管理。

1)找到当前文件夹。由于是桌面,所以路径如下

注意,如果跨盘,直接这样进入某盘:

按照上面3种,写对应的指令。

2)运行:运行的时候,没能生成css文件夹,这时需要手动增加css文件夹。

本例子指令:

说明:首先进入sasstest文件夹,然后敲指令。

结果图:

第一个是生成的缓存文件,打开是css,会看到,

除了css,还有一个map文件,sass文件相当于源文件,css相当于编译后的文件,当检查到页面问题的时候,你看到的是css,但是需要修改的是sass文件,这个map就是两个文件的对应关系表。

分别打开2个文件:

  

可以看到css出来了,而那个文件只是对应关系表,不用管它。

3)监视文件。我们恢复文件夹初始状态,如图:

监视sass.scss一个文件sass --watch sass.scss:css\sass.css,监视会生成对应的文件夹,不用手动创建。(注意,这样只能监视一个文件,就是sass.scss,如果sasstest下还有其他sass文件,则监视不了)

效果是一样的:

我们有恢复文件夹初始状态,把生成的删去,试一下监视文件夹的指令,其实用的更多的还是监视文件夹

要监视文件夹,路径需要回到文件夹的上一级,本文中就是桌面了。

好了,关于运行就介绍到这里了。

关于css输出格式,sass提供了四种:nested、expanded、compact、compressed。

指令写法:

nested:nested(嵌套)格式是 Sass 默认的输出格式,因为它的格式反映CSS样式与HTML文档结构。每个属性都独占用一行,但缩排不是固定的。每个规则是基于它的何嵌套深度缩进。

expanded:expanded(扩展)格式更像是手写的CSS样式,每个属性和规则都独占用一行。在规则之内的属性缩进的,但规则没有任何特殊的缩进。

compact:compact(紧凑)格式比起nested(嵌套)或expanded(扩展)格式占据更小的空间。这种格式重点聚焦在选择器上,不是它们的属性。每个CSS规则独占用一行,该行还包括定义的每个属性。嵌套的规则都是另起一行,不嵌套的选择器会输出空白行作为分隔符。

compressed:compressed(压缩)格式占用尽可能小的空间,在该文件的末尾会有一个换行,并且除了必要的分隔选择器之外,基本没有多余空格,它还包括其他一些小的压缩,比如选择颜色最小的表示方式。这意味着可读性很差。

sass的语法:

时间有限,我贴一下我练习是使用到的语法代码:

 

@charset "utf-8";
/*
* CSS扩展
*/
/*嵌套规则*/
#main{width:100px;p, div{font-size:2em;a{font-weight: bold;}}
}
/*引用父选择器*/
a{text-decoration: none;font-weight: lighter;&:hover{text-decoration:underline;font-weight: bolder;}body.firefox &{color:red;}
}
#main{color:red;a{font-size: 20px;&:hover{color:blue;}}
}
/*嵌套属性*/
.fun{font:{family:"微软雅黑";size:16px;weight:bolder;}
}
/* 占位符选择器: %foo 
Sass 支持一种特殊类型的选择器,叫做"占位符选择器" 
](placeholder selector)。这些看起来像 class 和 id 
选择器,除了# 或.用%替换。他们需要在@extend 指令中使用;
*/
/*
*  Sassscript
*/
/* 交互式 shell */
/*
Interactive Shell 可以在命令行中测试 SassScript 的功能。
在命令行中输入 sass -i,然后输入想要测试的 SassScript 
查看输出结果:
sass -i
>> "Hello, Sassy World!"
"Hello, Sassy World!"
>> 1px + 1px + 1px
3px
>> #777 + #777
#eeeeee
>> #777 + #888
white
*/
/*变量:变量仅在它定义的选择器嵌套层级的范围内可用(愚人码头注:可以理解为块级作用域)。不在任何嵌套选择器内定义的变量则在可任何地方使用(愚人码头注:可以理解为全局变量)。定义变量的时候可以后面带上!global标志,在这种情况下,变量在任何地方可见(愚人码头注:可以理解为全局变量)*/#bod{$width:100px !global;width:$width;}#ref{width:$width;}
/*
数据类型:SassScript 支持 7 种主要的数据类型
数字、文本字符串、颜色、布尔值、空值、值列表 (list)、maps
*/
@mixin firefox-message($select){body #{$select}:before{color:red;content: "hi";}
}
@include firefox-message(".header");
/* 插值 */
$name : son;
$color :blue;
p.#{$name}{color:#{color};
}
/* SassScript中的& 
就像当它在选择器中使用一样,SassScript中的&指向
当前父选择器。下面是一个逗号分隔的列表(list)
中包含一个空格的分隔列表(list)
*/
@mixin does-parent-exist {@if & {&:hover {color: red;}} @else {a {color: red;}}
}
@include does-parent-exist;
/* 变量默认: !default 如果分配给变量的值后面添加了!default标志 ,这意味着该变量如果已经赋值,那么它不会被重新赋值,但是,如果它尚未赋值,那么它会被赋予新的给定值。
*/
$content: "Second content?" !default;
$content: "First content";
$new_content: "First time reference" !default;#main {content: $content;new-content: $new_content;
}
/* @media */
.silder{width: 300px;@media screen  and (max-width: 500px) {width:500px;}
}
$media: screen;
$feature: -webkit-min-device-pixel-ratio;
$value: 1.5;@media #{$media} and ($feature: $value) {.sidebar {width: 500px;}
}
/* @extend */
.error{border: 1px #f00;background-color: #fdd;
}
.seriousError{@extend .error;border-width: 3px;
}
#fake-links .link {@extend a.class;font-size: 18px;
}
a.class{color:blue;&:hover{color:red;}
}
/*
@extend-Only 选择器
占位选择器看起来很像普通的 class 和 id 选择器,
只是 # 或 . 被替换成了 %。他可以像 class 或者id 选择器那样使用,而它本身的规则,不会被编译到 CSS 文件中,如下
*/
#context a%extreme {color: blue;font-weight: bold;font-size: 2em;
}
/*
占位符选择器,就像class和id选择器那样可以用于扩展。
扩展选择器,将会编译成CSS,占位符选择器本身不会被
编译。例如:
*/
.notice {@extend %extreme;
}
/*
!optional 标记:主要是避免扩展时如果没有某个选择器,会报错
*/
a.important {@extend .noticeqq !optional;
}
/*
*
*控制指令和表达式
*
*/
/*@if 语法*/
$type : monster;
p{@if $type == ocean {color: red;} @else if $type == matator{color: blue;} @else if $type == monster{color: green;} @else {color: black;}
}
/*@for 语法*/
/*
@for指令重复输出一组样式。对于每次重复,计数器变量用于
调整输出结果。该指令有两种形式:@for $var from <start> 
through <end> 和 @for $var from <start> to <end>。注意
关键字through 和 to的区别。$var可以是任何变量名,比如$i;
<start> 和 <end>是应该返回整数的SassScript表达式。当
<start>比<end>大的时候,计数器将递减,而不是增量。@for语句将设置$var为指定的范围内每个连续的数值,并且每
一次输出的嵌套样式中使用$var的值。对于from ... through
的形式,范围包括<start>和<end>的值,但from ... to的形式
从<start>开始运行,但不包括<end>的值。
*/
@for $i from 1 through 3 {.item-#{$i} { width: 2em * $i; }
}
@for $i from 5 to 3 {.item-#{$i} { width: 2em * $i; }
}
/*@each
@each指令通常格式是@each $var in <list or map>。$var可以
是任何变量名,像$length 或者 $name,和<list or map>是一
个返回列表(list)或 map 的 SassScript 表达式。@each 规则将$var设置为列表(list)或 map 中的每个项目,
输出样式中包含使用$var的值
*/
@each $animal in puma, sea-slug, egret, salamander {.#{$animal}-icon {background-image: url('/images/#{$animal}.png');}
}
/*多重赋值*/
@each $animal, $color, $cursor in (puma, black, default),(sea-slug, blue, pointer),(egret, white, move) {.#{$animal}-icon {background-image: url('/images/#{$animal}.png');border: 2px solid $color;cursor: $cursor;}
}
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) {#{$header} {font-size: $size;}
}
/*
@while 指令重复输出嵌套样式,直到SassScript表达式返回结果
为false。这可用于实现比@for语句更复杂的循环
*/
$i: 6;@while $i > 0 {.item-#{$i} { width: 2em * $i; }$i: $i - 2;
}
/*
*
*混入指令
*
*/
/*
混入(mixin)允许定义可以在整个样式表中重复使用的样式,
而避免了使用无语意的类(class),比如 .float-left。
混入(mixin)还可以包含所有的CSS规则,以及任何其他在Sass
文档中被允许使用的东西。他们甚至可以带arguments,引入变
量,只需少量的混入(mixin)代码就能输出多样化的样式。
*/
/*1、定义一个混入(mixin):@mixin*/
@mixin large-text {font: {family: Arial;size: 20px;weight: bold;}color: #ff0000;
}
/*2、引入混合样式:@include*/
.page-title {@include large-text;padding: 4px;margin-top: 10px;
}
/*
混入(mixin)也可以包含在任何规则的外(即,在文档的根),
只要它们不直接定义的任何属性或使用任何父选择器引用
*/
@mixin silly-links {a {color: blue;background-color: red;}
}
@include silly-links;
/*带参数*/
@mixin sexy-border($color, $width: 1in) {border: {color: $color;width: $width;style: dashed;}
}
p { @include sexy-border(blue); }
h1 { @include sexy-border(blue, 2in); }

 下面是一个按钮样式制作例子:

.button-narmol{position: relative;margin-left: auto;margin-right: auto;box-sizing: border-box;text-align: center;text-decoration: none;color: #FFFFFF;border-radius: 3px;-webkit-tap-highlight-color: rgba(0, 0, 0, 0);overflow: hidden;cursor:pointer;&:after{content: " ";width: 200%;height: 200%;position: absolute;top: 0;left: 0;border: 1px solid rgba(0, 0, 0, 0.2);-webkit-transform: scale(0.5);transform: scale(0.5);-webkit-transform-origin: 0 0;transform-origin: 0 0;box-sizing: border-box;border-radius: 10px;}
}
@mixin button-style-block($select,$color,$darken){#{$select}{display: block;padding-left: 14px;padding-right: 14px;font-size: 16px;line-height: 2.55555556;background-color: darken($color,$darken);@extend .button-narmol;&:active{background-color: darken($color,$darken+10%);}}
}
@mixin button-style-inline-block($select,$color,$darken){#{$select}{background-color: darken($color,$darken);display: inline-block;padding: 0 1.32em;line-height: 2.3;font-size: 13px;@extend .button-narmol;&:active{background-color: darken($color,$darken+10%);}}
}
@include button-style-block(".krui-btn_primary",#1AAD19,10%);
@include button-style-block(".krui-btn_error",#E64340,0%);
@include button-style-inline-block(".krui-btn_primary-small",#1AAD19,0%);

只要在html中调用即可。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>button</title><link rel="stylesheet" href="css/button.css"><style type="text/css">span{margin-bottom: 20px;}</style>
</head>
<body><span class="krui-btn_primary">登录</span><span class="krui-btn_primary-small">登录</span><span class="krui-btn_primary-small">登录</span><span class="krui-btn_primary-small">登录</span><span class="krui-btn_primary-small">登录</span><span class="krui-btn_error">登录</span><span class="krui-btn_primary">登录</span><span class="krui-btn_primary">登录</span>
</body>
</html> 

 

补充:1、不生成缓存

2、编译中文出现类似Syntax error: Invalid GBK character “\xE5″的错误解决方法:

找到这个文件,在require.XXX后面添加一行代码:Encoding.default_external = Encoding.find('utf-8')

如果还不行,检查一下文件夹名和文件名是否用了中文,改英文试试?

上班期间偷偷花了好多时间写了本文,希望对大家有用,另外也请尊重下原创,转载写明出处。-------博客园.我是水鱼

sass中文文档:http://www.css88.com/doc/sass/

后续补充:

最近换系统,换了win10,需要重装sass,待我装完ruby,安装sass时出现问题,如下:

原因:ruby证书不对。

解决方法:

1、打开http://curl.haxx.se/cs/cscert.pem,下载证书并保存为cscert.pem文件(Ctrl+s保存为即可)。

2、将cscert.pem放在Ruby23-x64目录下(其实放哪都无所谓)

3、设置环境变量中的系统变量(修改环境变量的方法不了解的可以百度一下)

4、重开一次ruby,再次下载,成功如下

转载于:https://www.cnblogs.com/wuzhiquan/p/5912146.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260466.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Sharepoint学习笔记—Site Definition系列-- 2、创建Content Type

Sharepoint本身就是一个丰富的大容器&#xff0c;里面存储的所有信息我们可以称其为“内容(Content)”&#xff0c;为了便于管理这些Conent&#xff0c;按照人类的正常逻辑就必然想到的是对此进行“分类”。分类所涉及到的层面又必然包括: 1、分类的标准或特征描述{即&#xf…

arduino byte转string_Java数组转List集合的三驾马车

点击上方 蓝字关注我们来源&#xff1a;blog.csdn.net/x541211190/article/details/79597236前言本文中的代码命名有的可能不太规范&#xff0c;是因为没法排版的问题&#xff0c;小仙已经很努力去解决了&#xff0c;希望各位能多多点赞、分享。好了&#xff0c;不多bb了(不要让…

ES6笔记(4)-- Symbol类型

系列文章 -- ES6笔记系列 Symbol是什么&#xff1f;中文意思是标志、记号&#xff0c;顾名思义&#xff0c;它可以用了做记号。 是的&#xff0c;它是一种标记的方法&#xff0c;被ES6引入作为一种新的数据类型&#xff0c;表示独一无二的值。 由此&#xff0c;JS的数据类型多了…

手把手教你如下在Linux下如何写一个C语言代码,编译并运行

文章目录手把手教你如下在Linux下如何写一个C语言代码&#xff0c;编译并运行打开Ubuntu终端创建 helloworld.c编译C文件手把手教你如下在Linux下如何写一个C语言代码&#xff0c;编译并运行 打开Ubuntu终端 我这里的终端是Windows下的WSL&#xff0c;如果有疑问&#xff0c;…

邮件群发工具的编写(二)数据的保存

数据的保存与读取 人类是在不断探索与改进中进步的 上一篇&#xff0c;邮件群发工具的编写&#xff08;一&#xff09;邮件地址提取&#xff0c;我们讲到了邮箱的提取。 那么这一篇&#xff0c;讲一下提取完的邮箱信息的保存和读取。 首先&#xff0c;我希望对上一篇邮箱提取类…

c++ lambda函数_C++11 之 lambda函数的详细使用

1. lambda 函数概述lambda 表达式是一种匿名函数&#xff0c;即没有函数名的函数&#xff1b;该匿名函数是由数学中的λ演算而来的。通常情况下&#xff0c;lambda函数的语法定义为&#xff1a;[capture] (parameters) mutable ->return-type {statement}其中&#xff1a;[c…

pytorch 正向与反向传播的过程 获取模型的梯度(gradient),并绘制梯度的直方图

记录一下怎样pytorch框架下怎样获得模型的梯度 文章目录引入所需要的库一个简单的函数模型梯度获取先定义一个model如下定义两个获取梯度的函数定义一些过程与调用上述函数的方法可视化一下梯度的histogram引入所需要的库 import os import torch import torch.nn as nn impor…

ubuntu升级python_Ubuntu 升级python3为更高版本【已实测】

2020-04-13 更新安装步骤&#xff1a; 1. 先update一下 sudo apt update 2. 安装依赖库 sudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-d…

Framework打包

2019独角兽企业重金招聘Python工程师标准>>> iOS app需要在许多不同的CPU架构下运行&#xff1a; arm7: 在最老的支持iOS7的设备上使用 arm7s: 在iPhone5和5C上使用 arm64: 运行于iPhone5S的64位 ARM 处理器 上 i386: 32位模拟器上使用 x86_64: 64为模拟器上使用…

windows 10 下利用WSL的Linux环境实现vscode C/C++环境的配置

本文主要结合二个工具&#xff0c;介绍如何在windows搭建Linux开发环境&#xff1a; WSL(Windows Subsystem for Linux)VSCode(Visual Studio Code) 文章目录WSL安装VSCode安装配置Linux下的C/C环境1. 打开WSL的控制台2. 更新ubuntu软件3. 安装GCC和GDB4. 配置VSCode(1). 打开…

Windows 11下 WSL使用 jupyter notebook

这里写目录标题前言在WSL下的配置测试运行更优雅的启动方法配置jupyter生成默认配置文件生成秘钥修改配置文件nohup启动前言 一直都使用jupyter notebook&#xff0c;不管做数据分析&#xff0c;还是调试代码&#xff0c;还有写文章都是。但是好像在WSL下又不好使。看了网上有…

sql2000导出mysql_如何将sql2000的数据库导入到mysql中?

展开全部先用SQl2000导出e68a843231313335323631343130323136353331333262373366文本文件&#xff0c;把后缀名改为CSv&#xff0c;再从Mysql中一导入OK参考&#xff1a;第一种是安装mysql ODBC&#xff0c;利用sql server的导出功能&#xff0c;选择mysql数据源&#xff0c;进…

实现日、周、月排行统计 sql

在如今很多系统中&#xff0c;都需要进行日、周、月排行统计&#xff0c;但是在网上寻找 了一番&#xff0c;发现很多都是相对的周、月排行&#xff0c;即周排行则用当前时间减去7天。这样我个人认为并不恰当。如月排行中&#xff0c;假设今天是4月22日,则从3月22日至4月22日之…

产品运行所需的信息检索失败_为服务业注入新活力,华北工控推出服务机器人专用计算机产品方案...

近年来&#xff0c;随着人口老龄化趋势加快和信息科技革命的持续推进&#xff0c;服务机器人已经被当作社会劳动力的一部分在医疗、教育、餐饮等行业广泛应用&#xff0c;市场潜力巨大。01、需求带动消费&#xff0c;科技改变服务服务机器人是国内智能机器人产业发展最快的分支…

Windows更新没有更新提示:从windows 10升级到Windows 11,并WSL下配置cuda

文章目录从windows 10 升级到Windows 11安装WSL的安装配置cuda从windows 10 升级到Windows 11 升级的方法有很多种&#xff0c;各大网站都有。有更新提示的按更新提示操作即可。我的是一直都没有更新提示&#xff0c;也搜索过网上的一些方法&#xff0c;但都不行。还是没法更新…

js修改css样式属性_这个笔记《CSS样式的常见属性及值》,让菜鸟轻松学会包粽子...

常见样式属性及值字体:font-family-size-style: normal(正常)|italic(倾斜)|oblique-weight: normal|bold(粗体)如果组合起来编写: font: style weight size family字体大小的单位可以是 px, em, rem, pt, cm, mm, in, pc文本:colortext-align(水平对齐方式): left|center|righ…

在 VirtualBox 中 CentOS 网络设置

转自&#xff1a;本文发表于水景一页。永久链接&#xff1a;<http://cnzhx.net/blog/minimal-centos-in-virtualbox/>。转载请保留此信息及相应链接。 4. 设置 按照上面的方法安装之后&#xff0c;还需要一些简单的设置&#xff0c;比如网络访问。然后既然是做网页服务器…

vscode C++ 分文件、文件夹编译配置与错误解决

文章目录问题includesourceout配置过程遇到的问题与解决遇到的问题1解决步骤1. ctrl shift p2. 配置json文件修改task.json文件修改launch.json可能遇到的错误1. collect2: error: ld returned 1 exit status2. /mnt/d/tmp/c/source/add.cpp:3:10: fatal error: add.h: No su…

淘淘商城项目mysql服务器_SpringMVC+Spring+Mybatis+Mysql+Maven+Svn[ 淘淘商城项目环境搭建 ]...

背景&#xff1a;淘淘商城项目的环境搭建说明&#xff1a;采用SpringMVCSpringMybatisMysqlMavenSvn结构搭建&#xff0c;在开发之中可以参考其结构和搭建步骤去搭建实际的工程项目工程结构简图&#xff1a;项目结构&#xff1a;---------------------------------------------…

bean validation校验方法参数_项目启动时首先校验Spring Boot配置参数

1. 概述在项目实际开发过程中&#xff0c;为了更好的复用&#xff0c;我们参考Spring Boot Starters&#xff0c;封装了许多企业内部中间件的starter。这些中间件的接入都需要申请并在项目中配置一些特定的参数。我们通过ConfigurationProperties注解&#xff0c;增加了在配置过…