Sass学习 整理
1 /*!
2 ©CopyRight
3 */
4 //*********注释*********
5 //SASS共有两种注释风格。
6 //标准的CSS注释 /* comment */ ,会保留到编译后的文件。
7 //单行注释 // comment,只保留在SASS源文件中,编译后被省略。
8 //在/*后面加一个感叹号,表示这是"重要注释"。即使是压缩模式编译,也会保留这行注释,通常可以用于声明版权信息。
9
10 //*********数据类型*********
11 //numbers (e.g. 1.2, 13, 10px)
12 //strings of text, with and without quotes (e.g. "foo", 'bar', baz)
13 //colors (e.g. blue, #04a3f9, rgba(255, 0, 0, 0.5))
14 //booleans (e.g. true, false)
15 //nulls (e.g. null)
16 //lists of values, separated by spaces or commas (e.g. 1.5em 1em 0 2em, Helvetica, Arial, sans-serif)
17 //maps from one value to another (e.g. (key1: value1, key2: value2))
18
19 //*********变量*********
20 //简单变量定义,使用
21 $blue : #1875e7;
22
23 div {
24 color : $blue;
25 }
26 //如果变量需要镶嵌在字符串之中,就必须需要写在#{}之中
27 $side : left;
28 .rounded {
29 border-#{$side}-radius: 5px;
30 }
31 //默认值 !default
32 //假设变量申明带有!default,那么如果在此申明之前没有这个变量的申明,则用这个值,反之如果之前有申明,则用申明的值。
33 $color:red;
34 $color:blue !default;
35 p{
36 color:$color;//red
37 }
38 //多个变量一起申明
39 //把多个相关的值写在一个变量里,然后通过nth($var,index)来获取第几个值
40 $linkColor: red blue !default;
41
42 a{
43 color:nth($linkColor,1);
44
45 &:hover{
46 color:nth($linkColor,2);
47 }
48 }
49 //全局变量 !global
50 #main {
51 $width: 5em !global;
52 width: $width;
53 }
54 #sidebar {
55 width: $width;
56 }
57
58 //*********计算*********
59 $var : 20;
60 body {
61 margin: (14px/2);
62 top: 50px + 100px;
63 right: $var * 10%;
64 }
65 //*********嵌套*********
66
67 /* 下面的代码,等同于:
68 div h1 {
69 color : red;
70 }
71 */
72 div {
73 hi {
74 color:red;
75 }
76 }
77 //border-color
78 p {
79 border: {
80 color: red;
81 }
82 }
83 //在嵌套的代码块内,可以使用&引用父元素。比如a:hover伪类,可以写成
84 a {
85 &:hover { color: #ffb3ff; }
86 }
87 //跳出嵌套:@at-root
88 //默认所有的嵌套,继承所有上级选择器,但有了这个就可以跳出所有上级选择器
89 //默认@at-root只会跳出选择器嵌套,而不能跳出@media或@support,如果要跳出这两种,则需使用@at-root (without: media),@at-root (without: support)。
90 //这个语法的关键词有四个:all(表示所有),rule(表示常规css),media(表示media),support(表示support)。我们默认的@at-root其实就是@at-root (without:rule)。
91
92 //跳出父级元素嵌套
93 @media print {
94 .parent1{
95 color:#f00;
96 @at-root .child1 {
97 width:200px;
98 }
99 }
100 }
101
102 //跳出media嵌套,父级有效
103 @media print {
104 .parent2{
105 color:#f00;
106
107 @at-root (without: media) {
108 .child2 {
109 width:200px;
110 }
111 }
112 }
113 }
114
115 //跳出media和父级
116 @media print {
117 .parent3{
118 color:#f00;
119
120 @at-root (without: all) {
121 .child3 {
122 width:200px;
123 }
124 }
125 }
126 }
127 //@at-root与&配合使用
128 .child{
129 @at-root .parent &{
130 color:#f00;
131 }
132 }
133
134 //*********继承 继承要使用@extend命令*********
135 //使用SASS继承时有一个规则:
136 //通过@extend引用的类名,你要有绝对的自信,它从未用在几个地方。
137 .class1 {
138 border: 1px solid #ddd;
139 }
140 .class2 {
141 @extend .class1;
142 font-size:120%;
143 }
144 //强大的%placeholders
145 //%为占位符,名称自定义
146 %placeholders {background-color: #fff;}
147 selector {
148 @extend %placeholders;
149 }
150
151 //*********重用*********
152 //使用@mixin命令,定义一个代码块
153 //使用@include命令,调用这个mixin
154 //Mixins的黄金规则是将相似的风格定义在一个@mixin中。
155 //请注意这里的一个关键词相似的,另外Mixins主要是用于重用,而不是用来指定具体的属性值。
156 //指定具体的属性值 可以用继承
157 @mixin left {
158 float: left;
159 margin-left: 10px;
160 }
161 div {
162 @include left;
163 }
164 //mixin的强大之处,在于可以指定参数和缺省值
165 @mixin left($value: 10px) {
166 float: left;
167 margin-right: $value;
168 }
169 //使用的时候,根据需要加入参数
170 div {
171 @include left(20px);
172 }
173 //多组值参数mixin
174 //如果一个参数可以有多组值,如box-shadow、transition等,那么参数则需要在变量后加三个点表示,如$variables...
175 //box-shadow可以有多组值,所以在变量参数后面添加...
176 @mixin box-shadow($shadow...) {
177 -webkit-box-shadow:$shadow;
178 box-shadow:$shadow;
179 }
180 .box{
181 border:1px solid #ccc;
182 @include box-shadow(0 2px 2px rgba(0,0,0,.3),0 3px 3px rgba(0,0,0,.3),0 4px 4px rgba(0,0,0,.3));
183 }
184 //@content
185 //它可以使@mixin接受一整块样式,接受的样式从@content开始
186 //sass style
187 @mixin max-screen($res){
188 @media only screen and ( max-width: $res )
189 {
190 @content;
191 }
192 }
193 @include max-screen(480px) {
194 body { color: red }
195 }
196 //css style
197 @media only screen and (max-width: 480px) {
198 body { color: red }
199 }
200
201 //下面是一个mixin的实例,用来生成浏览器前缀
202 @mixin rounded($vert, $horz, $radius: 10px) {
203 border-#{$vert}-#{$horz}-radius: $radius;
204 -moz-border-radius-#{$vert}#{$horz}: $radius;
205 -webkit-border-#{$vert}-#{$horz}-radius: $radius;
206 }
207 #navbar li { @include rounded(top, left); }
208 #footer { @include rounded(top, left, 5px); }
209
210 //*********颜色函数************
211 div {
212 color : lighten(#cc3, 10%); // #d6d65c
213 color : darken(#cc3, 10%); // #d6d65c
214 color : grayscale(#cc3); // #d6d65c
215 color : complement(#cc3); // #d6d65c
216 }
217
218 //*********插入文件*********
219 //@import命令,用来插入外部文件
220 @import "_test2.scss";
221
222 //*********条件语句*********
223 //@if
224 p {
225 @if 1 + 1 == 2 { border: 1px solid; }
226 @if 5 < 3 { border: 2px dotted; }
227 }
228 // @if @else
229 $color : #1875e7;
230 p {
231 @if lightness($color) > 30% {
232 background-color: #000;
233 } @else {
234 background-color: #fff;
235 }
236 }
237
238 //*********循环*********
239 //@for
240 @for $i from 1 to 10 {
241 .border-#{$i} {
242 border: #{$i}px solid blue;
243 }
244 }
245 //@while
246 $i: 6;
247 @while $i > 0 {
248 .item-#{$i} { width: 2em * $i; }
249 $i: $i - 2;
250 }
251 //@each 与for类似
252 @each $member in a, b, c, d {
253 .#{$member} {
254 background-image: url("/image/#{$member}.jpg");
255 }
256 }
257
258 //*********自定义函数*********
259 //@function与@mixin,%这两者的第一点不同在于sass本身就有一些内置的函数,方便我们调用,如强大的color函数;
260 //其次就是它返回的是一个值,而不是一段css样式代码什么的。
261 @function double($n) {
262 @return $n * 2;
263 }
264 #sidebar {
265 width: double(5px);
266 }
267
268
269 //延伸
270 //@mixin通过@include调用后解析出来的样式是以拷贝形式存在的
271 //@mixin需要@include来调用,而.class和%placeholders需要@extend来调用
272 //@include主要是用来调用@mixin定义的函数模块。在@mixin中可以定义一个相似功能样式,而且可以设置变量、定义参数和默认参数值;
273 //@extend主要是用来调用.class或者%placeholders定义的属性模块;在.class或者%placeholders中可以定义一个相同样式,但这里面不能定义参数;
274 //@include每次调用相同的@mixin时,编译出来的CSS相同样式不会进行合并;
275 //@extend每次调用相同的 .class时,如果.class在样式出现多次,那么编译出来的CSS有可能不是您需要的样式;
276 //@extend每次调用相同的%placeholders时,编译出来的CSS相同样式会进行合并。
277 //%placeholders就类似于CSS中的.classes或者#ids,只不过使用%代替了.和#。但%placeholders中的代码只有通过 @extend调用之后才会产生代码量,不然他是不会产生任何代码量。
278 //不要使用没有设置参数的@mixin,他们应该是.class或者%placeholders;
279 //不要轻意(从不使用)@extend调用.class。会得到你意想不到的结果,特别是定义的.class出现在嵌套或其他的样式表中,你应该使用@extend调用%placeholders;
280 // 不要使用太深的选择器嵌套。
281 //如果你能避免,不要使用标签名。这不是一个taxative规则,但比id或者类名的性能要更低;
282 //不要使用子选择器符号>,在SASS中很无效;
283 //不要使用同史选择器+,配合你当前的标记他是非常无效。
284 //不要太相信SASS的自动编译,你应该时时检查生成的CSS。在SASS中纠错能力比较差;
附件:https://files.cnblogs.com/files/bocoimg/sass.rar
附件是Sass代码示例,包含了Sass常用的注释、变量、计算、循环、嵌套、继承、函数等方面的内容,可以参考一下。
文件说明:
_test.scss:Sass代码示例
_test2.scss:仅为演示Import的空文件
test.css:编译_test.scss后的样式文件
ps:编译相关:
编译命令:sass _test.scss test.css
SASS提供四个编译风格的选项:* nested:嵌套缩进的css代码,它是默认值。* expanded:没有缩进的、扩展的css代码。* compact:简洁格式的css代码。* compressed:压缩后的css代码。生产环境当中,一般使用最后一个选项。sass --style compressed test.sass test.css你也可以让SASS监听某个文件或目录,一旦源文件有变动,就自动生成编译后的版本。// watch a filesass --watch input.scss:output.css// watch a directorysass --watch app/sass:public/stylesheetssass中文编译:设置环境变量:RUBYOPT=-KU。否则不支持中文,编译会报错
posted on 2015-05-21 17:37 好好学习&&&天天向上 阅读(433) 评论(0) 编辑 收藏 举报