Sass语法介绍高级篇

响应式布局: @media

响应式布局设计的目的是为移动设备提供更好的体验,并且整合从桌面到手机的各种屏幕尺寸和分辨率。

比如,当你缩小网页的时候,网页的布局会跟着改变,这主要使用的是CSS中的media query。

Sass中的@media跟CSS中的区别是:Sass中的media query可以内嵌到css规则中,在生成css的时候才会被提到样式的最高层级。这样做的好处是避免了重复书写选择器或者打乱样式表的流程。

//定义
@mixin col-sm($width:50%) {
  @media (min-width: 768px) {
    width: $width;
    float: left;
  }
}
//使用
.webdemo-sec {
  @include col-sm();
}

对应的css代码如下:

@media (min-width: 768px) {
  .webdemo-sec {
    width: 50%;
    float: left;
  }
}

嵌套问题:@at-root

虽然Sass提供了很棒的嵌套能力,但CSS最佳实践告诉我们,浏览器在解析CSS文件的时候是按从右往左的顺序进行的,也就是说嵌套的代码会从内往外解析,一步步向上查找,直到HTML一级,这样会导致渲染的低效。

而且通过嵌套也有一些副作用:增加了样式修饰的权重,制造了样式位置的依赖。

最佳实践是给每个元素命名,但这样又不如嵌套清晰,易维护。

解决方案,在嵌套的时候使用Sass的at-root指令,明确指定被嵌套的属性输出到样式表的底层。如下,变量里是字体的定义,看这里

.main-sec {
  font-family:$main-sec-ff;
  @at-root {
    .main-sec-headline {
      font: {
        family: $main-sec-ff;
        size: 16px;
      }
    }

    .main-sec-detail {
      font-size: 12px;
    }
  }
}

生成的css文件如下,各个样式之间不存在嵌套关系。

.main-sec {
  font-family: Arial, Verdana, Helvetica, sans-serif;
}
/* line 16, ../sass/screen.scss */
.main-sec-headline {
  font-family: Arial, Verdana, Helvetica, sans-serif;
  font-size: 16px;
}

/* line 23, ../sass/screen.scss */
.main-sec-detail {
  font-size: 12px;
}

参数校验

为了是col-sm代码块更具健壮性,我们给传入的宽度值增加校验代码如下,这里我们要求传入的width必须为百分值。

@mixin col-sm($width:50%) {
  @if type_of($width) != number {
    @error "$width必须是一个数值类型,你输入的width是: #{$width}.";
  }
  @if not unitless($width) { //非不带单位 == 带单位
    @if unit($width) != "%" { //$width的单位不是%(px和%都是单位)
      @error "$width应该是一个百分值,你输入的width是: #{$width}.";
    }
  } @else { //不带单位
    @warn "$width应该是一个百分值,你输入的width是: #{$width}.";
    $width: (percentage($width) / 100);
  }
  @media (min-width: 768px) {
    width: $width;
    float: left;
  }
}

如果使用compass watch观察这个代码,在输入的width值不是百分值的情况下,会输出相应的错误提示信息。

CSS输出样式

output_style = :expanded or :nested or :compact or :compressed

expanded是默认样式,输出的css是展开的,跟手动书写css没有区别。

nested输出的css文件根据嵌套关系相应的缩进。

compact所有属性写在一行,这种情况下,更多的是关注选择器之间的关系,而不是属性

compressed将样式表压缩以减少空间,不可读。

中文支持

如果你跟我的安装过程一样,然后发现代码中出现中文的时候会报错,即使是注释中的中文也会报错,那么可以参考这个步骤来解决

找到ruby的安装目录,里面也有sass模块,类似这样的路径:

C:\Ruby\lib\ruby\gems\2.2.0\gems\sass-3.4.22\lib\sass

在这里面有个文件叫engine.rb,添加一行代码

Encoding.default_external = Encoding.find('utf-8')

放在所有的require xxxxxx 之后即可。


文字资料来自慕课网课程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容

  • [toc] 前言 本文所有的演示都是基于Win10操作系统。 关于Sass 1.定义 Sass的学名叫“CSS预处...
    崔小叨阅读 18,251评论 0 78
  • 安装运行 1.下载ruby并安装 2.安装之后打开命令行执行gem命令,检查是否已经安装好 安装完ruby之后,在...
    wshining阅读 714评论 0 1
  • 再谈CSS 预处理器2016-09-09 Justineo JavaScript转自:http://efe.bai...
    抓住时间的尾巴吧阅读 1,568评论 0 2
  • 一群牛蛙们的家长转辗联系上我,才上了半个学期的初中一年级孩子,小学都来自长沙市各校的优秀生,因为各种艺术特长聚集在...
    悦和天使阅读 263评论 0 0
  • 休息的周末总是很忙碌的,搞两个孩子起床吃早餐,拾掇拾掇一上午就过去,今天决定给孩子做胡萝卜炒牛肉丝,第一次尝试,不...
    旭日晨曦升起阅读 218评论 0 0