码迷,mamicode.com
首页 > 其他好文 > 详细

Sass学习 整理

时间:2015-05-21 19:06:58      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:

  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中纠错能力比较差;

附件:http://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 file
  sass --watch input.scss:output.css
  // watch a directory
  sass --watch app/sass:public/stylesheets
sass中文编译:设置环境变量:RUBYOPT=-KU。否则不支持中文,编译会报错

 

Sass学习 整理

标签:

原文地址:http://www.cnblogs.com/bocoimg/p/4520352.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!