scss学习笔记

@charset "UTF-8";

$highlight-color:#F90;  //$来声明变量的
$basic-color:1px solid black;


/*引用方式*/
.btn{
    $width:100px; // 这个只能在{}里用,对外面的不影响
    width: $width;
    color:$highlight-color;
    border:1px solid $highlight-color;
}

/*scss 的多层嵌套*/
div {
    p {
        a{
            color:$highlight-color;
        }
    }
}
/*关于伪类的嵌套*/
div {
    p {
        &:after{
            border:$basic-color;
        }
    }
}

//子元素选择器 >
//相邻兄弟选择器 +
//普通兄弟选择器 ~  (div ~ p    div选择器不选择)


div {
    ~ p{
        color:$highlight-color;
    }
    > p {
        border:$basic-color;
    }
    nav + & {
        border:1px solid $highlight-color;
    }
}

//嵌套属性  border-style  border-width  border-color 可以这样写:
div {
    border {
        style:solid;
        width:10px;
        color:$highlight-color;
    }
}

//拆分多个scss文件,使用 @import 引入,不同文件最后会打包到一个css文件里
//css 也有@import 但是当用的时候,才会下载
//mixins.scss colors.scss grid.scss  这三个scss文件在引入的时候,可以忽略后缀
@import 'mixins';
@import 'colors';
@import 'grid';


//使用scss部分文件(局部文件)
//scss局部文件的文件名以下划线开头,sass就不会在编译时单独编译这个文件输出css,
//而只把这个文件用作导入,还是可以省略后缀,如下:(如这个文件:themes/_night-sky.scss)
@import "themes/night-sky";


//默认变量值
$link-color:red;
$link-color:green;
a {
    color:$link-color;  //color:green;
}
//可以设置默认值
$link-color:orange !default;  //权重很低,相当于!important 的对立面

a {
    $link-color:#d9d9d9;
    color:$link-color;  //color:#d9d9d9;
}

//嵌套导入


//下面是_aside-box.scss局部文件
div {
    background-color: #fff;
    width:100px;
}

//在anther-box.scss 引入这个局部文件
div {
    @import 'aside-box';
    height:100px;
}

//转会为==> div{background-color: #fff;width:100px;height:100px;}
//scss兼容css
//在scss里也可以导入css文件(以.css文件结尾的)按需加载css文件

/* scss里的注释有两种方式 */


//混合器
//  -->用来处理大段重复的样式(少的话,变量就可以替代)
//  使用@mixin 标识符定义 使用@include来使用这个混合器
@mixin rounded-corners {
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
    border-radius: 5px;
}

//引入混合器
div {
    width:100px;
    height:100px;
    border: 1px solid #000;
    @include rounded-corners;
}

//混合器中css规则
@mixin no-bullets {
    list-style: none;
    li {
        list-style-image: none;
        margin-left:0;
    }
}

ul.plain{
    color:#eee;
    @include no-bullets;
}

//编译的结果为:

ul.plain {
    color:#eee;
    list-style: none;
}

ul.plain li {
    list-style-image: none;
    margin-left:0;
}

// 给混合器传参
@mixin link-colors($normal,$hover,$visited){
    color:$normal;
    &:hover{
        color:$hover
    }
    &:visited{
        color:$visited;
    }
}

a {
    text-decoration:none;
    @include link-colors(red,green,orange)
}

//编译结果

a {
    text-decoration: none;
    color:red;
}
a:hover {
    color:green;
}
a:visited {
    color:orange;
}


//默认参数值      参数默认值使用$name: default-value的声明形式,
//默认值可以是任何有效的css属性值,甚至是其他参数的引用
@mixin link-colors{
    $normal,
    $hover:$normal,
    $visited:$normal
}

//解析结果 (直接调用@include)

{
    color:$normal;
    a:hover {
        color:$normal;
    }
    a:visited {
        color:$normal;
    }
}

//如果@include(red),编译结果
{
    color:red;
    a:hover {
        color:red;
    }
    a:visited {
        color:red;
    }
}


/*使用选择器继承来精简css 使用@extend 语法实现*/
.error {
    border-radius:10px;
}
.box {
    @extend .error;
    border-width:10px;
}

//编译结果
.box {
    border-radius:10px;
    border-width:10px;
}

//.box不仅会继承.error自身的所有样式,任何跟.error有关的组合选择器也会被.box以组合选择器的形式继承

//.box 从 .error继承样式
.error a { // 应用到.box a 
    color: red;
    font-weight:100;
}

h1.error { //应用到h1.box
    font-size:1.2rem;
}

//继承的高级用法
//继承一个html元素的样式(一个灰掉的a链接标签)
.disabled{
    color:gray;
    @extend a;  // 继承a标签的所有默认样式
}

/*  数据类型
    数字,1, 2, 13, 10px
    字符串,有引号字符串与无引号字符串,"foo", 'bar', baz
    颜色,blue, #04a3f9, rgba(255,0,0,0.5)
    布尔型,true, false
    空值,null
    数组 (list),用空格或逗号作分隔符,1.5em 1em 0 2em, Helvetica, Arial, sans-serif
    maps, 相当于 JavaScript 的 object,(key1: value1, key2: value2)
*/
 

 /*
    SassScript 对Unicode 字符集,或 !important 声明;    视为无引号字符串
    字符串:{
        有引号字符串,
        无引号字符串
    }
    使用#{}  scss会把有引号的字符串转化为没有引号的字符串,这样便于mixin引用选择器名
 */ 

 @mixin firefox-message($selector) {
     body.firefox #{$selector}:before {
         content: 'hello world'
     }
 }

@include firefox-message(".header");
 // 编译的结果为
body.firefox .header:before {
     content: 'hello world'
}

// 运算  + - * / 

$width:100px;

.box {
    width:10px*10 + 2px/2;
}

//编译结果
.box {
    width: 101px;
}
//如果需要使用变量,同时又要确保 / 不做除法运算而是完整地编译到 CSS 文件中,只需要用 #{} 插值语句将变量包裹。
p {
  $font-size: 12px;
  $line-height: 30px;
  font: #{$font-size}/#{$line-height};
}

// 编译为:
p {
  font: 12px/30px;
}

/* 颜色值运算 */ 
p {
  color: #010203 + #040506;
}
// 计算 01 + 04 = 05 02 + 05 = 07 03 + 06 = 09,然后编译为(加减乘除相同)
p {
  color: #050709;
}

/* 字符串运算 */ 

p:before {
  content: "Foo " + Bar;
  font-family: sans- + "serif";
}

// 编译为

p:before {
  content: "Foo Bar";  // 前面是有引号的字符串,后面是没有引号字符串转化的情况
  font-family: sans-serif; // 前面没有引号的字符串,后面是有引号的字符串
}


/*@if @else if*/

@mixin getColor($color) {
    @if $color == blue {
        color:$color;
    } @else if $color == green {
        color:$color;
    } @else if $color == red {
        color:$color;
    }
}

// @each 
@each $animal in green,orange,blue {
    .#{$animal}-icon {
        background-image: url('image/${$animal}.png');
    }
}

// 编译结果:
.green-icon {
    background-image: url('image/green.png');
}
.orange-icon {
    background-image: url('image/orange.png');
}
.blue-icon {
    background-image: url('image/blue.png');
}

// @for
@for $i from 1 through 3 {
    .item-#{$i} {
        width:2em * $i;
    }
}
// 编译结果
.item-1 {
  width: 2em;
}
.item-2 {
  width: 4em;
}
.item-3 {
  width: 6em;
}

 

posted @ 2017-11-10 14:38  刈懋  阅读(255)  评论(0编辑  收藏  举报