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

sass

时间:2015-10-09 12:13:42      阅读:254      评论:0      收藏:0      [点我收藏+]

标签:

文件后缀名
    sass文件后缀名有两个,一般采用后缀名为scss的文件,格式跟css类是,有大括号和分号
文件的导入
    1、scss→css:@import "_reset"   //后缀名可以省略,两个文件会合并成一个css文件,一般文件名都是以 _开头
    2、css→css:@import "mixin.css"//编译好后还是@import "mixin.css"的格式存在
注释
    sass有两种注释方式,一种是标准的css注释方式/* */,另一种则是//双斜杆形式的单行注释,不过这种单行注释不会被转译出来
变量
    sass的变量必须是$开头,后面紧跟变量名,而变量值和变量名之间就需要使用冒号(:)分隔开(就像CSS属性设置一样),如果值后面加上!default则表示默认值
    变量的值string类型和boolean类型都不用双引号包裹
  1. //sass style
  2. //-------------------------------
  3. $fontSize: 12px !default;
  4. body{
  5. font-size:$fontSize;
  6. }
  7. //css style
  8. //-------------------------------
  9. body{
  10. font-size:12px;
  11. }
    覆盖默认变量值:可以通过在默认变量前,再重新声明一次变量。(组件化开发的时候会非常有用
  1. $baseLineHeight: 2;
  2. $baseLineHeight: 1.5 !default;
特殊变量
    变量作为属性或在某些特殊情况下:必须要以#{$variables}形式使用
  1. $borderDirection: top !default;
  2. $baseFontSize: 12px !default;
  3. $baseLineHeight: 1.5 !default;
  4. //应用于class和属性
  5. .border-#{$borderDirection}{
  6. border-#{$borderDirection}:1px solid #ccc;
  7. }
多值变量
    分为list类型和map类型。
    list数据可以通过空格,逗号,小括号分隔多值,使用nth($var,$index)取值。
  1. //一维数据
  2. $px: 5px 10px 20px 30px;
  3. //二维数据,相当于js中的二维数组
  4. $px: 5px 10px, 20px 30px;
  5. $px: (5px 10px) (20px 30px);
  1. $linkColor: #08c #333 !default;//第一个值为默认值,第二个鼠标滑过值
  2. a{
  3. color:nth($linkColor,1);
  4. &:hover{
  5. color:nth($linkColor,2);
  6. }
  7. }
    list方法
  1. length($list)
  2. Returns the length of a list.
  3. nth($list, $n)
  4. Returns a specific item in a list.
  5. set-nth($list, $n, $value)
  6. Replaces the nth item in a list.
  7. join($list1, $list2, [$separator])
  8. Joins together two lists into one.
  9. append($list1, $val, [$separator])
  10. Appends a single value onto the end of a list.
  11. zip($lists…)
  12. Combines several lists into a single multidimensional list.
  13. index($list, $value)
  14. Returns the position of a value within a list.
  15. list-separator(#list)
  16. Returns the separator of a list.
    map数据是K-V的格式。
    格式为:$map: (key1: value1, key2: value2, key3: value3);
    通过map-get($map,$key)取值
  1. $heading: (h1: 2em, h2: 1.5em, h3: 1.2em);
  1. $headings: (h1: 2em, h2: 1.5em, h3: 1.2em);
  2. @each $header, $size in $headings {
  3. #{$header} {
  4. font-size: $size;
  5. }
  6. }
    map方法
  1. map-get($map, $key)
  2. Returns the value in a map associated with a given key.
  3. map-merge($map1, $map2)
  4. Merges two maps together into a new map.
  5. map-remove($map, $keys…)
  6. Returns a new map with keys removed.
  7. map-keys($map)
  8. Returns a list of all keys in a map.
  9. map-values($map)
  10. Returns a list of all values in a map.
  11. map-has-key($map, $key)
  12. Returns whether a map has a value associated with a given key.
  13. keywords($args)
  14. Returns the keywords passed to a function that takes variable arguments.
全局变量
变量值后面加上!global即就成为了全局变量。(3.4以后才可以使用)
  1. //sass style
  2. //-------------------------------
  3. $fontSize: 12px;
  4. $color: #333;
  5. body{
  6. $fontSize: 14px;
  7. $color #fff !global;
  8. font-size:$fontSize;
  9. color:$color;
  10. }
  11. p{
  12. font-size:$fontSize;
  13. color:$color;
  14. }
  15. //css style
  16. //-------------------------------
  17. body{
  18. font-size:14px;
  19. color:#fff;
  20. }
  21. p{
  22. font-size:12px;
  23. color:#fff;
  24. }
    这里设置了两个变量,然后在body里面重新设置了下,有点不同的是对于$color变量,我们设置了!global。通过编译后的css可以看到font-size取值不同,而color取值相同。与上面的机制对比就会发现默认在选择器里面的变量为局部变量,而只有设置了!global之后才会成为全局变量。
嵌套
一种是选择器的嵌套;另一种是属性的嵌套
    选择器嵌套
    要追溯到跟节点
  1. //sass style
  2. //-------------------------------
  3. #top_nav{
  4. line-height: 40px;
  5. text-transform: capitalize;
  6. background-color:#333;
  7. li{
  8. float:left;
  9. }
  10. a{
  11. display: block;
  12. padding: 0 10px;
  13. color: #fff;
  14. &:hover{
  15. color:#ddd;
  16. }
  17. }
  18. }
  19. //css style
  20. //-------------------------------
  21. #top_nav{
  22. line-height: 40px;
  23. text-transform: capitalize;
  24. background-color:#333;
  25. }
  26. #top_nav li{
  27. float:left;
  28. }
  29. #top_nav a{
  30. display: block;
  31. padding: 0 10px;
  32. color: #fff;
  33. }
  34. #top_nav a:hover{
  35. color:#ddd;
  36. }
    属性嵌套
  1. //sass style
  2. //-------------------------------
  3. .fakeshadow {
  4. border: {
  5. style: solid;
  6. left: {
  7. width: 4px;
  8. color: #888;
  9. }
  10. right: {
  11. width: 2px;
  12. color: #ccc;
  13. }
  14. }
  15. }
  16. //css style
  17. //-------------------------------
  18. .fakeshadow {
  19. border-style: solid;
  20. border-left-width: 4px;
  21. border-left-color: #888;
  22. border-right-width: 2px;
  23. border-right-color: #ccc;
  24. }
@at-root
用来跳出选择器嵌套的。默认所有的嵌套,继承所有上级选择器,可以单个和多个(@at-root{多个选择器})选择器跳出
  1. //sass style
  2. //-------------------------------
  3. //没有跳出
  4. .parent-1 {
  5. color:#f00;
  6. .child {
  7. width:100px;
  8. }
  9. }
  10. //单个选择器跳出
  11. .parent-2 {
  12. color:#f00;
  13. @at-root .child {
  14. width:200px;
  15. }
  16. }
  17. //多个选择器跳出
  18. .parent-3 {
  19. background:#f00;
  20. @at-root {
  21. .child1 {
  22. width:300px;
  23. }
  24. .child2 {
  25. width:400px;
  26. }
  27. }
  28. }
  29. //css style
  30. //-------------------------------
  31. .parent-1 {
  32. color: #f00;
  33. }
  34. .parent-1 .child {
  35. width: 100px;
  36. }
  37. .parent-2 {
  38. color: #f00;
  39. }
  40. .child {
  41. width: 200px;
  42. }
  43. .parent-3 {
  44. background: #f00;
  45. }
  46. .child1 {
  47. width: 300px;
  48. }
  49. .child2 {
  50. width: 400px;
  51. }
@at-root (without: ...)和@at-root (with: ...)
默认@at-root只会跳出选择器嵌套,而不能跳出@media或@support,如果要跳出这两种,则需使用@at-root (without: media),@at-root (without: support)。这个语法的关键词有四个:all(表示所有),rule(表示常规css),media(表示media),support(表示support,因为@support目前还无法广泛使用,所以在此不表)。我们默认的@at-root其实就是@at-root (without:rule)。
  1. //sass style
  2. //-------------------------------
  3. //跳出父级元素嵌套
  4. @media print {
  5. .parent1{
  6. color:#f00;
  7. @at-root .child1 {
  8. width:200px;
  9. }
  10. }
  11. }
  12. //跳出media嵌套,父级有效
  13. @media print {
  14. .parent2{
  15. color:#f00;
  16. @at-root (without: media) {
  17. .child2 {
  18. width:200px;
  19. }
  20. }
  21. }
  22. }
  23. //跳出media和父级
  24. @media print {
  25. .parent3{
  26. color:#f00;
  27. @at-root (without: all) {
  28. .child3 {
  29. width:200px;
  30. }
  31. }
  32. }
  33. }
  34. //sass style
  35. //-------------------------------
  36. @media print {
  37. .parent1 {
  38. color: #f00;
  39. }
  40. .child1 {
  41. width: 200px;
  42. }
  43. }
  44. @media print {
  45. .parent2 {
  46. color: #f00;
  47. }
  48. }
  49. .parent2 .child2 {
  50. width: 200px;
  51. }
  52. @media print {
  53. .parent3 {
  54. color: #f00;
  55. }
  56. }
  57. .child3 {
  58. width: 200px;
  59. }
混合(maxin)
@maxin可以传递参数,参数以$开头,多个参数之间使用空格相隔,还可以给参数设定默认值,调用使用@include调用
  1. @mixin opacity($opacity:50) {
  2. opacity: $opacity / 100;
  3. filter: alpha(opacity=$opacity);
  4. }
  5. //css style
  6. //-------------------------------
  7. .opacity{
  8. @include opacity; //参数使用默认值
  9. }
  10. .opacity-80{
  11. @include opacity(80); //传递参数
  12. }
  1. @mixin horizontal-line($border:1px dashed #ccc, $padding:10px){
  2. border-bottom:$border;
  3. padding-top:$padding;
  4. padding-bottom:$padding;
  5. }
  6. .imgtext-h li{
  7. @include horizontal-line(1px solid #ccc);
  8. }
  9. .imgtext-h--product li{
  10. @include horizontal-line($padding:15px);
  11. }
  12. //css style
  13. //-------------------------------
  14. .imgtext-h li {
  15. border-bottom: 1px solid #cccccc;
  16. padding-top: 10px;
  17. padding-bottom: 10px;
  18. }
  19. .imgtext-h--product li {
  20. border-bottom: 1px dashed #cccccc;
  21. padding-top: 15px;
  22. padding-bottom: 15px;
  23. }
如果一个参数可以有多个组值,参数的后面加三个点点
  1. //box-shadow可以有多组值,所以在变量参数后面添加...
  2. @mixin box-shadow($shadow...) {
  3. -webkit-box-shadow:$shadow;
  4. box-shadow:$shadow;
  5. }
  6. .box{
  7. border:1px solid #ccc;
  8. @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));
  9. }
  10. //css style
  11. //-------------------------------
  12. .box{
  13. border:1px solid #ccc;
  14. -webkit-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);
  15. 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);
  16. }
@content
    出现在sass3.2.0,用来解决@media引起的问题,可以让@maxin接受一整块样式,接受的样式从@content开始,用{}包裹
  1. @mixin max-screen($res){
  2. @media only screen and ( max-width: $res )
  3. {
  4. @content;
  5. }
  6. }
  7. @include max-screen(480px) {
  8. body { color: red }
  9. }
  10. //css style
  11. //-------------------------------
  12. @media only screen and (max-width: 480px) {
  13. body { color: red }
  14. }
继承
首先继承是两个选择器之间的关系问题,与变量是没有关系的,使用@extend可以获取另一个选择器的所有样式。
  1. h1{
  2. border: 4px solid #ff9aa9;
  3. }
  4. .speaker{
  5. @extend h1;
  6. border-width: 2px;
  7. }
  8. //css style
  9. //-------------------------------
  10. h1,.speaker{
  11. border: 4px solid #ff9aa9;
  12. }
  13. .speaker{
  14. border-width: 2px;
  15. }
以上,h1首先是选择器,.speaker使用了@extend,所以h1和.speaker都拥有h1的所有样式,当然.speaker还拥有自己特有的样式
    选择器占位符%
    主要目的是在生成css文件的时候,可以不生成含有没用的css样式,占位选择器以%标识定义,通过@extend调用。    
  1. %ir{
  2. color: transparent;
  3. text-shadow: none;
  4. background-color: transparent;
  5. border: 0;
  6. }
  7. %clearfix{
  8. @if $lte7 {
  9. *zoom: 1;
  10. }
  11. &:before,
  12. &:after {
  13. content: "";
  14. display: table;
  15. font: 0/0 a;
  16. }
  17. &:after {
  18. clear: both;
  19. }
  20. }
  21. #header{
  22. h1{
  23. @extend %ir;
  24. width:300px;
  25. }
  26. }
  27. .ir{
  28. @extend %ir;
  29. }
  30. //css style
  31. //-------------------------------
  32. #header h1,
  33. .ir{
  34. color: transparent;
  35. text-shadow: none;
  36. background-color: transparent;
  37. border: 0;
  38. }
  39. #header h1{
  40. width:300px;
  41. }
    该功能要在sass3.2中才可以使用,并且@media还不能使用。
函数
定义:@function 函数名(参数1,参数2){@return返回值;}
调用:样式名:函数名(参数1,参数2);
  1. $baseFontSize: 10px !default;
  2. $gray: #ccc !defualt;
  3. // pixels to rems
  4. @function pxToRem($px) {
  5. @return $px / $baseFontSize * 1rem;
  6. }
  7. body{
  8. font-size:$baseFontSize;
  9. color:lighten($gray,10%);
  10. }
  11. .test{
  12. font-size:pxToRem(16px);
  13. color:darken($gray,10%);
  14. }
  15. //css style
  16. //-------------------------------
  17. body{
  18. font-size:10px;
  19. color:#E6E6E6;
  20. }
  21. .test{
  22. font-size:1.6rem;
  23. color:#B3B3B3;
  24. }
运算
数字型的value值可以使用四则运算,但注意运算符的前后都要有空格。
  1. $baseFontSize: 14px !default;
  2. $baseLineHeight: 1.5 !default;
  3. $baseGap: $baseFontSize * $baseLineHeight !default;
  4. $halfBaseGap: $baseGap / 2 !default;
  5. $samllFontSize: $baseFontSize - 2px !default;
  6. //grid
  7. $_columns: 12 !default; // Total number of columns
  8. $_column-width: 60px !default; // Width of a single column
  9. $_gutter: 20px !default; // Width of the gutter
  10. $_gridsystem-width: $_columns * ($_column-width + $_gutter); //grid system width
条件判断及循环
    if-else语句
  1. $lte7: true;
  2. $type: monster;
  3. .ib{
  4. display:inline-block;
  5. @if $lte7 {
  6. *display:inline;
  7. *zoom:1;
  8. }
  9. }
  10. p {
  11. @if $type == ocean {
  12. color: blue;
  13. } @else if $type == matador {
  14. color: red;
  15. } @else if $type == monster {
  16. color: green;
  17. } @else {
  18. color: black;
  19. }
  20. }
  21. //css style
  22. //-------------------------------
  23. .ib{
  24. display:inline-block;
  25. *display:inline;
  26. *zoom:1;
  27. }
  28. p {
  29. color: green;
  30. }
    三目判断
语法为:if($condition, $if_true, $if_false) 
  1. if(true, 1px, 2px) => 1px
  2. if(false, 1px, 2px) => 2px
    for循环
    语法为:@for 变量 from 起始值 through 终点值
    for 变量 from 起始值 to 终点值
    through是包含终点值,to不包含终点值
  1. @for $i from 1 through 3 {
  2. .item-#{$i} { width: 2em * $i; }
  3. }
  4. //css style
  5. //-------------------------------
  6. .item-1 {
  7. width: 2em;
  8. }
  9. .item-2 {
  10. width: 4em;
  11. }
  12. .item-3 {
  13. width: 6em;
  14. }
    @each循环
    @each 《变量(可以多个,用逗号分隔)》in 《list或者map类型数据》{  }
  1. $animal-list: puma, sea-slug, egret, salamander;
  2. @each $animal in $animal-list {
  3. .#{$animal}-icon {
  4. background-image: url(‘/images/#{$animal}.png‘);
  5. }
  6. }
  7. //css style
  8. //-------------------------------
  9. .puma-icon {
  10. background-image: url(‘/images/puma.png‘);
  11. }
  12. .sea-slug-icon {
  13. background-image: url(‘/images/sea-slug.png‘);
  14. }
  15. .egret-icon {
  16. background-image: url(‘/images/egret.png‘);
  17. }
  18. .salamander-icon {
  19. background-image: url(‘/images/salamander.png‘);
  20. }
多个字段list数据
  1. $animal-data: (puma, black, default),(sea-slug, blue, pointer),(egret, white, move);
  2. @each $animal, $color, $cursor in $animal-data {
  3. .#{$animal}-icon {
  4. background-image: url(‘/images/#{$animal}.png‘);
  5. border: 2px solid $color;
  6. cursor: $cursor;
  7. }
  8. }
  9. //css style
  10. //-------------------------------
  11. .puma-icon {
  12. background-image: url(‘/images/puma.png‘);
  13. border: 2px solid black;
  14. cursor: default;
  15. }
  16. .sea-slug-icon {
  17. background-image: url(‘/images/sea-slug.png‘);
  18. border: 2px solid blue;
  19. cursor: pointer;
  20. }
  21. .egret-icon {
  22. background-image: url(‘/images/egret.png‘);
  23. border: 2px solid white;
  24. cursor: move;
  25. }
map循环
  1. $headings: (h1: 2em, h2: 1.5em, h3: 1.2em);
  2. @each $header, $size in $headings {
  3. #{$header} {
  4. font-size: $size;
  5. }
  6. }
  7. //css style
  8. //-------------------------------
  9. h1 {
  10. font-size: 2em;
  11. }
  12. h2 {
  13. font-size: 1.5em;
  14. }
  15. h3 {
  16. font-size: 1.2em;
  17. }





sass

标签:

原文地址:http://www.cnblogs.com/zoeminghong/p/761847209136b89876731eb0214198b7.html

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