【项目实战】sass使用基础篇(上)
Sass是一种CSS预处理语言。CSS预处理语言是一种新的专门的编程语言,编译后形成正常的css文件,为css增加一些编程特性,无需考虑浏览器的兼容性(完全兼容css3),让css更加简洁、适应性更强,可读性更佳,更易于代码的维护等诸多好处。
CSS预处理语言有Scss(Sass) 和Less、Postcss。
Scss和Sass
sass一开始用的是一种缩进式的语法格式
采用这种格式文件的后缀名是.sass
在sass3.0版本后我们常用的是sassy css语法,扩展名是.scss,更接近与css语法
区别:
- 后缀名不同 .sass和.scss
 - 语法不同,请看下面
 
新版:
/*新版本
多行文本注释*/
//新版本
//单行文本注释
@import "base";
@mixin alert{
	color:red;
	background:blue;
}
.alert-warning{
	@include alert;
}
ul{
	font-size:15px;
	li{
		list-style:none;
	}
}
老版本:
/*新版本
多行文本注释
//新版本
  单行文本注释
@import "base"
=alert
	color:red
	background:blue
.alert-warning
	+alert
ul
	font-size:15px
	li
		list-style:none
变量
变量的意义
在sass里我们可以定义多个变量来存放颜色、边框等等的样式,这样就可以在下面想要使用样式的时候使用变量了
这样的优点就是便于维护,更改方便
变量的使用
可以通过$来定义变量,在变量名字中可以使用-和_来作为连接,并且-和_是可以互通的,就是用起来一模一样。
变量的值可以是字符串、数字、颜色等等,在变量里还可以使用其他变量,使用的时候直接写变量名就好了
例如
$primary-color:#ff6600;
$primary-border:1px solid $primary_color;
div.box{
	background:$primary-color;
}
h1.page-header{
	border:$primary-border;
}
css写法---》
div.box {
  background: #ff6600;
}
h1.page-header {
  border: 1px solid #ff6600;
}
嵌套的使用
合理的使用嵌套语法,可以使我们编写代码更为快捷
假设我们想写这样的css:
.nav {
  height: 100px;
}
.nav ul {
  margin: 0;
}
.nav ul li {
  float: left;
  list-style: none;
  padding: 5px;
}
在sass里我们可以这样写
.nav{
	height:100px;
	ul{
		margin:0;
		li {
			float:left;
			list-style:none;
			padding:5px;
		}
	}
}
大家会发现,写出来的代码父和子之间都有空格隔开,如果我们需要给a加上伪类的话我们这样写
.nav{
    height:100px;
    a{
        color:#fff;
        :hover{
            color:#ff6600;
        }
    }
}
在里面就会出现这样的情况
.nav a :hover {
  color: #ff6600;
}
我们发现在a和:hover之间有了空格,这样是不好的,所以我们需要在写的时候在:hover之前把a加上,这样就需要用到在之类里引用父类选择器的方式,我们可以用&符号代替父类
例如:
.nav{
    height:100px;
    a{
        color:#fff;
        &:hover{
            color:#ff6600;
        }
    }
}
这样就好了,下面来个完整的代码:
.nav{
    height:100px;
    ul{
    	margin:0;
    	li{
    		float:left;
    		list-style:none;
    		padding:5px;
    	}
    	a{
    		display:block;
    		color:#000;
    		&:hover{
    			color:#f60;
    			background:red;
    		}
    	}
    }
    & &-text{
    	font-size:15px;
    }
}
css写法-----》
.nav {
  height: 100px;
}
.nav ul {
  margin: 0;
}
.nav ul li {
  float: left;
  list-style: none;
  padding: 5px;
}
.nav ul a {
  display: block;
  color: #000;
}
.nav ul a:hover {
  color: #f60;
  background: red;
}
.nav .nav-text {
  font-size: 15px;
}
嵌套属性
我们可以把一些复合属性的子属性来嵌套编写,加快编写速度,例如
body{
	font:{
		family:Helvitica;
		size:15px;
		weight:bold;
	}
}
.nav{
	border:1px solid red{
		left:none;
		right:none;
	}
}
.page-next{
	transition:{
		property:all;
		delay:2s;
	}
}
css写法-----》
body {
  font-family: Helvitica;
  font-size: 15px;
  font-weight: bold;
}
.nav {
  border: 1px solid red;
  border-left: none;
  border-right: none;
}
.page-next {
  transition-property: all;
  transition-delay: 2s;
}
mixin 混合
你可以把它想象成一个有名字的定义好的样式
每一个mixin都有自己的名字,类似于js里的函数定义方法如下
@mixin 名字(参数1,参数2...){
    ...
}
使用方法是在其他选择器css样式里通过@include引入,其实就相当于将mixin里的代码写入到这个选择器的css里,如下:
@mixin alert {
	color:#f60;
	background-color:#f60;
	a{
		color:pink;
	}
	&-a{
		color:red;
	}
}
.alert-warning{
	@include alert;
}
css写法-----》
.alert-warning {
  color: #f60;
  background-color: #f60;
}
.alert-warning a {
  color: pink;
}
.alert-warning-a {
  color: red;
}
刚才是没有参数的mixin,mixin也可以拥有参数,需要注意的是:
- 形参的名字前要加$
 - 传参的时候只写值的话要按顺序传
 - 传参的时候不想按顺序的话需要加上形参名字
 
例如:
@mixin alert($color,$background) {
	color:$color;
	background-color:$background;
	a{
		color:darken($color,10%);//把颜色加深百分之十
	}
}
.alert-warning{
	@include alert(red,blue);
}
.alert-info{
	@include alert($background:red,$color:blue);
}
css写法------》
.alert-warning {
  color: red;
  background-color: blue;
}
.alert-warning a {
  color: #cc0000;
}
.alert-info {
  color: blue;
  background-color: red;
}
.alert-info a {
  color: #0000cc;
}
继承拓展 extend
如果我们有一个选择器想要拥有另一个选择所有的东西,不管是样式还是子元素等等,可以使用@extend来继承
大家需要注意的是,++b继承a的时候,a的子元素设置了样式,也会给b的子元素设置样式++,达到完全一样的情况,例如:
.alert {
	padding:5px;
}
.alert a {
	font:{
		weight:bold;
		size:15px;
	}
}
.alert-info {
	@extend .alert;
	backgournd:skyblue;
}
css写法----》
.alert, .alert-info {
  padding: 5px;
}
.alert a, .alert-info a {
  font-weight: bold;
  font-size: 15px;
}
.alert-info {
  backgournd: skyblue;
}
partials
在以前咱们编写css的时候,一个css引入另一个css需要使用@import,其实这是不好的,会多发一次http请求,影响咱们站点的响应速度。
在sass里,咱们可以把小的sass文件分出去,叫做partials,在某个sass里通过@import ‘partials名’去引入,注意路径哟,这样的话就可以把partials里的代码引到咱们大的sass里一起编译
- 需要注意的是 partials的文件名前要加_
 
_base.scss :
body{
	margin:0;
	padding:0;
}
style.scss :
@import "base";
.alert {
	padding:5px;
}
.alert a {
	font:{
		weight:bold;
		size:15px;
	}
}
.alert-info {
	@extend .alert;
	backgournd:skyblue;
}
css写法----------->
body {
  margin: 0;
  padding: 0;
}
.alert, .alert-info {
  padding: 5px;
}
.alert a, .alert-info a {
  font-weight: bold;
  font-size: 15px;
}
.alert-info {
  backgournd: skyblue;
}
这样的话我们就可以把模块化的思想引入到sass里了
comment注释
sass里的注释有三种
- 多行注释
 - 单行注释
 - 强制注释
 
多行注释:压缩后不会出现在css里 /* */
单行注释: 不会出现在css里 //
强制注释:压缩后也会出现在css里 /*! */
sass的基础使用方法就介绍到这里,文章持续更新,后续更新sass高阶用法,关注公众号第一时间阅读。
【项目实战】sass使用基础篇(上)的更多相关文章
- SpringBoot图文教程「概念+案例 思维导图」「基础篇上」
		
有天上飞的概念,就要有落地的实现 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例 每个知识点配套自测面试题,学完技术自我测试 本文初学向,所以希望文中所有的代码案例都能敲一遍 大哥大姐 ...
 - Sass/Scss 基础篇
		
Sass/Scss 基础篇 总结Sass学习到的内容 应用Sass/Scss前,环境配置 首先下载Ruby (http://rubyinstaller.org/downloads) 通过命令下载sas ...
 - 【转】Shell编程基础篇-上
		
[转]Shell编程基础篇-上 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应 ...
 - 前端开发工程师 - 03.DOM编程艺术 - 第1章.基础篇(上)
		
第1章.基础篇(上) Abstract:文档树.节点操作.属性操作.样式操作.事件 DOM (Document Object Model) - 文档对象模型 以对象的方式来表示对应的html,它有一系 ...
 - .net 开源模板引擎jntemplate 实战演习:基础篇之入门
		
一.简介 模板引擎是Web开发中非常重要的一环,它负责将页面上的动态内容呈现出最终的结果展现给前端用户,在asp.net mvc中,我们最熟悉的就是Razor了,作为官方的视图引擎(视图引擎不等同于模 ...
 - Redis项目实战---应用及理论(上)---redis基础知识介绍
		
redis(Remote Dictionary Server) 一.原理及特性层面: 1.优势: 1)数据加载在内存中,执行速度快, 数据结构类似于HashMap,HashM ...
 - Sass之一(基础篇)
		
源码链接:http://pan.baidu.com/s/1o8M51hCSass 学习Sass之前,应该要知道css预处理器这个东西,css预处理器是什么呢? Css预处理器定义了一种新的语言将Css ...
 - 新一代分布式实时流处理引擎Flink入门实战之先导理论篇-上
		
@ 目录 概述 定义 为什么使用Flink 应用行业和场景 应用行业 应用场景 实时数仓演变 Flink VS Spark 架构 系统架构 术语 无界和有界数据 流式分析基础 分层API 运行模式 作 ...
 - Shell编程基础篇-上
		
1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚 ...
 
随机推荐
- linux专题(八):用户组管理
			
http://dwz.date/UDf 每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理.不同Linux 系统对用户组的规定有所不同,如Linux下的用户属于与它同名的用户组,这个 ...
 - Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass
			
Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...
 - linux专题(四):常用的基本命令(二)基本属性
			
看懂文件属性 Linux系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限.为了保护系统的安全性,Linux系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定. 在Li ...
 - A Great Alchemist 最详细的解题报告
			
题目来源:A Great Alchemist A Great Alchemist Time limit : 2sec / Stack limit : 256MB / Memory limit : 25 ...
 - redis入门指南(三)——  事务、过期时间、SORT命令、消息通知与管道
			
写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 事务 1.redis中的事务由一组命令的集合组成,要么都执行,要么都不执行,同时redis的事务 ...
 - maven 将jar包添加本地仓库源
			
有如下jar包 zxing3.2.1.jar zxingcore.jar QRCode.jar 存在于本机目录 D:\Program Files\eclipse_workspace\webapp\We ...
 - 关于git,无论是命令使用还是深入学习,看我总结就够了
			
周五了,又是划水的一下午,无意中在某号上发现了这样一张图,说的内容很简单,就是我们日常离不开的git,可能因为最近github宕机,网传服务器被盗的新闻把,让我瞬间产生了兴趣,就点进去看一下 大家能看 ...
 - javascript原型:写一个合并后数组去掉同类项的方法
			
<!DOCTYPE html> <html> <head> <title>test013_Array_prototype_unique()</ti ...
 - C++语法小记---少见的语法之一
			
很少用,列出来,便于理解和熟悉!!! // 1.单独使用位域限定符 ::xxx() //调用全局函数xxx // 2.全局重载new和delete T* tmp = (T*)(::operator n ...
 - 微软如何绑定二次验证码_虚拟MFA_两步验证_身份验证?
			
1.登陆Microsoft账户,找到二次验证绑定界面 进入Microsoft,点右上角用户头像进行登陆.之后点“安全性”. 之后点击[更多安全选项] 找到“身份验证应用”(注意不是“双重验证”).点击 ...