sass基本语法

1.定义一个变量,变量定义以$开头,以冒号分隔开。

$blue:#1875e7;
div{
color:$blue;
} 编译之后的css代码:
div {
color: #1875e7;
}

定义一个带默认值的变量。默认变量只需要在普通变量后面加上 !default

$baseLineHeight:1.5 !default;
$baseLineHeight:3;
body{
line-height:$baseLineHeight;
} 编译后的css代码:
body {
line-height:;
}

line-height的默认值是1.5,然后被3覆盖了,所以值是3. 和赋值的先后顺序无关,即使把默认值放到赋值的后面,结果也还是3.

此外,sass局部变量和全局变量(sass 3.4之后的版本才会有局部变量,3.4之前的都是全局变量)。变量值后面加上!global 变成全局变量。

/* sass3.4之后的版本 */
$fontSize:16px;
body{
$fontSize:20px;
font-size:$fontSize;
}
p{
font-size:$fontSize;
} 编译之后的css代码:
body {
font-size: 20px; } p {
font-size: 16px; }//3.4之前的版本值是20px,因为都是全局变量

使用全局变量之后,sass 3.4之后才能转换成功

$fontSize:16px;
body{
$fontSize:20px !global;
font-size:$fontSize;
}
p{
font-size:$fontSize;
} 转换之后css代码:
body {
font-size: 20px; }
p {
font-size: 20px; }

变量作为属性名来使用(一般我们定义的变量都是属性值),要以#{$variableName}形式。

$side:left;
div{
border-#{$side}-radius:5px;
}
//转化之后的css代码:
div {
border-left-radius: 5px; }

2.变量复杂一点的用法,多值变量。多值变量分为list类型和map类型,list类似js数组,map类似js中的对象。list数据可以通过空格,逗号,小括号分隔多个值,常用的函数,nth($list,$index), length($list), append($list, $value, [$separator]).

$pxs:5px 10px 15px 20px;
h8{
margin-left:nth($pxs,1);
&:hover{
margin-top:nth($pxs,2);
}
}
//转换之后的css代码:
h8 {
margin-left: 5px;
}
h8:hover {
margin-top: 10px;
}

list另外一个栗子,

$pxs:5px,10px,15px,20px;
h9{
$len:length($pxs);
margin-right:nth($pxs,$len);
}
//转换之后的css:
h15 {
margin-right: 20px;
}

map类型的例子。。。map数据以key和value成对出现。看看w3cplus上的一个例子。开始的时候,总是转换失败,后面发现是sass版本的问题,我sass用的是3.4.21版本,之前用的是3.2.13老是转换失败,还以为是语法写的有错误呢。。。

$headings: (h1: 2em, h2: 1.5em, h3: 1.2em);
@each $header, $size in $headings {
#{$header} {
font-size: $size;
}
}
//转化过后的css
h1 {
font-size: 2em;
}
h2 {
font-size: 1.5em;
}
h3 {
font-size: 1.2em;
}

3.嵌套,嵌套包括两种:选择器嵌套 和 属性嵌套。

选择器嵌套,在一个选择器中嵌套另一个选择器,通过&引用外层选择器。

$blue:#1875e7;
a{
color:red;
&:hover{
color:$blue;
}
}
//转换后的css
a {
color: red;
}
a:hover {
color: #1875e7;
}

属性嵌套,有些属性拥有相同的前缀,可以提取出来,书写更方便。

/*属性嵌套*/
h16{
margin:{
left:5px;
right:15px;
}
}
//转换之后的css
/*属性嵌套*/
h16 {
margin-left: 5px;
margin-right: 15px;
}

4.继承, 选择器的继承可以让选择器继承另一个选择器的所有样式,要使用关键词@extend ,后面紧跟要继承的选择器。

/*选择器的继承*/
.class1{
border:1px;
}
.class2{
@extend .class1;
font-size:120%;
}
//转换之后的css
.class1, .class2 {
border: 1px;
}
.class2 {
font-size: 120%;
}

占位选择器% ,占位选择器的优势是,对于预先定义的基础样式,需要的时候使用@extend去继承它,不需要的时候,不会继承到。

%ir{
color: transparent;
border:;
}
#header{
h1{
@extend %ir;
width:300px;
}
h2{
width:500px;
}
}
.ir{
@extend %ir;
}
//转换之后的css
#header h1, .ir {
color: transparent;
border:;
}
#header h1 {
width: 300px;
}
#header h2 {
width: 500px;
}

5.函数,sass已经定义好了很多函数,可以直接使用,如:length($list) ,nth($list,$n) .也可以自己定义一个函数使用@function。

下面是把px转换成rem的例子。

$baseFontSize:16px!default;
@function pxToRem($px){
@return $px/$baseFontSize*1rem;
}
body{
font-size:pxToRem(10px);
}
//转换之后的css
body {
font-size: 0.625rem;
}

6.混合(mixin),混合定义可重用的代码块,sass中通过@mixin来声明混合,@include来调用。

@mixin left($value:10px){
float:left;
margin-right:$value;
}
h16{
@include left(5px);
}
h17{
@include left();
}
//转换后的css
h16 {
float: left;
margin-right: 5px;
}
h17 {
float: left;
margin-right: 10px;
}

@content 用来解决css3的@media问题。。。。。。。。。。。。

@mixin 可以接受一整块样式,接受的样式从@content开始。

@mixin max-screen($res){
@media only screen and (max-width:$res){
@content;
}
}
@include max-screen(480px){
body{color:red;}
}
//转换后的css
@media only screen and (max-width: 480px) {
body { color: red; }
}

7.条件判断及循环。

a.@if{}@else{}

b.@if($condition,$if_true,$if_else)

c.@for($i from <start> through <end>) 包含end

d.@for($i from <start> to <end>) 不包含end

e.@each $item in <list or map>

之前在写@each 的时候碰到个问题。我之前使用的是sass3.2.13版本 对于对字段循环不支持,sass3.3.0之后的版本才会支持哦。不然转换时一直会报错,不能成功。

$headings: (h1: 2em, h2: 1.5em, h3: 1.2em);
@each $header, $size in $headings {
#{$header} {
font-size: $size;
}
}
//转换成css
h1 {
font-size: 2em;
}
h2 {
font-size: 1.5em;
}
h3 {
font-size: 1.2em;
}

把px转换成rem,支持同时输入多个值,以及一些特殊值如0的输入。

@function rem($values...) {
$all_rem: ();
$separator: list-separator($values);
@each $value in $values {
$rem: null;
@if type-of($value) == list {
// List: process each value on its own
$rem: rem($value...);
} @else if is_zero($value) {
// Zero: enforce no units
$rem: 0;
} @else if need_convert($value) {
// if need convert we will convert it to rem depend on the base font size.
$base_font_value: strip_units($rem_font_size);
$rem: (strip_units($value / $base_font_value) * 1rem);
} @else {
$rem: $value;
}
$all_rem: append($all_rem, $rem, $separator);
}
@return $all_rem;
} @function strip_units($num) {
@return $num / (($num * 0) + 1);
}
@function is_zero($value) {
@return
type-of($value) == number
and strip_units($value) == 0;
}
@function need_convert($value) {
$px_units: 'px', 'pt';
@return
type-of($value) == number
and not unitless($value)
and index($px_units, unit($value));
}

px convert to rem

测试一下

div{
padding:rem(0 5px 0 10px);
}
//转换之后的css
div {
padding: 0rem 0.3125rem 0rem 0.625rem;
}

sass 语法实例的更多相关文章

  1. SASS语法备忘

    sass语法 关于sass 3.3.0更新说明——3.3.0 sublime相关插件为:scss语法高亮,sass语法高亮,编译,保存即编译,格式化 文件后缀名 sass有两种后缀名文件:一种后缀名为 ...

  2. Esfog_UnityShader教程_UnityShader语法实例浅析

    距离上次首篇前言已经有一段时间了,一直比较忙,今天是周末不可以再拖了,经过我一段时间的考虑,我决定这一系列的教程会避免过于深入细节,一来可以避免一些同学被误导,二来会避免文章过于冗长难读, 三来可以让 ...

  3. 为sublime text2 添加SASS语法高亮

    以前写CSS时,都是直接写样式,没有任何的第三方工具,后面发现越是面向大网站,越难管理,上次参加完携程UED大会后,发现SASS对于前端团队多人协作和站点代码维护上很有帮助,很多同学都开始用了,我还是 ...

  4. jQuery的基础语法实例

    jQuery 基础语法 jQuery 语法是为 HTML 元素的选取编制的,可以对元素执行某些操作. 基础语法是:$(selector).action() 美元符号定义 jQuery 选择符(sele ...

  5. JSON.stringify 语法实例讲解+easyui data-options属性+expires【申明:来源于网络】

    JSON.stringify 语法实例讲解+easyui data-options属性+expires[申明:来源于网络] JSON.stringify 语法实例讲解:http://www.jb51. ...

  6. (转)Esfog_UnityShader教程_UnityShader语法实例浅析

    距离上次首篇前言已经有一段时间了,一直比较忙,今天是周末不可以再拖了,经过我一段时间的考虑,我决定这一系列的教程会避免过于深入细节,一来可以避免一些同学被误导,二来会避免文章过于冗长难读, 三来可以让 ...

  7. 1-3 Sass 语法、编译、调试

    Sass 语法格式 这里说的 Sass 语法是 Sass 的最初语法格式,他是通过 tab 键控制缩进的一种语法规则,而且这种缩进要求非常严格.另外其不带有任何的分号和大括号.常常把这种格式称为 Sa ...

  8. Sass 语法格式及编译

    一.sass语法格式 这里说的 Sass 语法是 Sass 的最初语法格式,他是通过 tab 键控制缩进的一种语法规则,而且这种缩进要求非常严格.另外其不带有任何的分号和大括号.常常把这种格式称为 S ...

  9. SQLSERVER存储过程的基本语法实例

    SQLSERVER存储过程的基本语法实例 SQLSERVER存储过程的基本语法实例 一.定义变量--简单赋值 declare @a intset @a=5 print @a --使用select语句赋 ...

随机推荐

  1. ecshop后台添加菜单项,权限问题

    ecshop后台自定义菜单涉及到几个重要的权限控制的文件,先做如下总结: 后台添加菜单项,并设置权限的步骤.:(以在系统模块添加申请友链菜单为例)commn.php       : \language ...

  2. 正式生产环境下hadoop集群的DNS+NFS+ssh免password登陆配置

    博客地址:http://www.loveweir.com/ 环境虚拟机centos6.5 主机名h1  IP 192.168.137.11  作为DNS FNS的server 主机名h2  IP 19 ...

  3. checkbox和radio的样式美化问题

    如果你下定决心要改变现有的默认的checkbox和radio的样式,那么我目前有两种办法: 1.自己动手写一个,也就是自己写代码实现将input的checkbox和radio默认的样式隐藏掉,使用绝对 ...

  4. asp.net中自定义验证控件

    在windows2003中,可能iis版本太底,不支持TextBox的类型设为Number类型,所以会报错,所以去掉后直接用验证控件来控制必须输入数字好了. <asp:RegularExpres ...

  5. input type=button设置高度不管用

    <input type="button" name="calRate" id="calRate" value="查询&quo ...

  6. C# 创建数组的几种方法

    第一种 string[] myArray=new string[10]; 第二种 string[] myArray={"1","2"}; 第三种 string[ ...

  7. tomcat的catalina

    Tomcat的核心分为3个部分: (1)Web容器---处理静态页面: (2)catalina --- 一个servlet容器-----处理servlet; (3)还有就是JSP容器,它就是把jsp页 ...

  8. html combobox select控件设置默认选项

    就想找个设置html combobox或者select默认选项的代码,百度搜了半小时不知所云的内容,其实很简单,代码如下 js的方式: var index = 你的下标 getElementById( ...

  9. Android中Dialog对话框

    布局文件xml: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...

  10. javascript自定义日期函数

    1.格式化日期(YYYY-MM-DD) 代码: var DateFormat = function (date) { if (!(date instanceof Date)) { date = dat ...