• 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 $ 5em !global;
     52  $width;
     53 }
     54 #sidebar {
     55  $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 200px;
     98 }
     99 }
    100 }
    101 
    102 //跳出media嵌套,父级有效
    103 @media print {
    104 .parent2{
    105 color:#f00;
    106 
    107 @at-root (without: media) {
    108 .child2 {
    109 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 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- $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- 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} {  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  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。否则不支持中文,编译会报错
    
    

     

  • 相关阅读:
    接口与抽象类
    观察者模式
    kibana安装
    使用CGLib完成代理模式遇到的错误
    代理模式
    HashMap resize方法的理解(一)
    装饰模式
    volatile关键字解析(二)
    https网站引用http路径的js和css失效解决办法
    IIS7.5配置自动添加www 及 限制通过IP访问web
  • 原文地址:https://www.cnblogs.com/bocoimg/p/4520352.html
Copyright © 2020-2023  润新知