Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

scss基础语法与在datatable项目中的运用 #17

Open
ahua52 opened this issue Jun 25, 2016 · 1 comment
Open

scss基础语法与在datatable项目中的运用 #17

ahua52 opened this issue Jun 25, 2016 · 1 comment

Comments

@ahua52
Copy link

ahua52 commented Jun 25, 2016

什么是sass

SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护

安装

SASS是Ruby语言写的,必须先安装Ruby,然后再安装SASS。安装完Ruby后,执行

gem install sass

使用

SASS文件就是普通的文本文件,里面可以直接使用CSS语法。下面写法,显示.scss文件转化的css代码

sass test.scss

果要将显示结果保存成文件,后面再跟一个.css文件名。

sass test.scss test.css

基础语法

文件后缀名

sass有两种后缀名文件:一种后缀名为sass,不使用大括号和分号;另一种就是我们这里使用的scss文件,我们项目中采用scss后缀

//文件后缀名为sass的语法
body
  background: #eee
  font-size:12px
p
  background: #0982c1

//文件后缀名为scss的语法  
body {
  background: #eee;
  font-size:12px;
}
p{
  background: #0982c1;
} 

导入important

编译时会将@importscss文件合并进来只生成一个CSS文件

@import "reset.css";
@import "a";

p{
  background: #0982c1;
} 

变量

必须是$开头

普通变量

定义之后可以在全局范围内使用

//sass style
//-------------------------------
$fontSize: 12px;
body{
    font-size:$fontSize;
}

//css style
//-------------------------------
body{
    font-size:12px;
}

默认变量

仅需要在值后面加上!default即可。
默认变量的价值在进行组件化开发的时候会非常有用

//sass style
//-------------------------------
$baseLineHeight:        1.5 !default;
body{
    line-height: $baseLineHeight; 
}

//css style
//-------------------------------
body{
    line-height:1.5;
}

特殊变量

变量作为属性或在某些特殊情况下等则必须要以#{$variables}形式使用

//sass style
//-------------------------------
$borderDirection:       top !default;

//应用于class和属性

.border-#{$borderDirection}{
  border-#{$borderDirection}:1px solid #ccc;
}

//css style
//-------------------------------
.border-top{
  border-top:1px solid #ccc;
}

map

map数据以key和value成对出现,其中value又可以是list。格式为:$map: (key1: value1, key2: value2, key3: value3);。可通过map-get($map,$key)取值。

//sass style
//-------------------------------

$headings:(h1:2em,h2:1.5em,h3:1.2em;

@each $header,$size in $headings{
  #{$header} {
    font-size: $size;
  }
}

//css style
//-------------------------------

h1 {
  font-size: 2em; 
}
h2 {
  font-size: 1.5em; 
}
h3 {
  font-size: 1.2em; 
}

嵌套Nesting

选择器嵌套

使用&表示父元素选择器

//sass style
//-------------------------------
#top_nav{
  line-height: 40px;
  a{
    display: block;
    padding: 0 10px;
    color: #fff;

    &:hover{
      color:#ddd;
    }
  }
}

//css style
//-------------------------------
#top_nav{
  line-height: 40px;
}  
#top_nav a{
  display: block;
  padding: 0 10px;
  color: #fff;
}
#top_nav a:hover{
  color:#ddd;
}

属性嵌套(不常用)

指有些属性拥有同一个开始单词
border-width,border-color

//sass style
//-------------------------------
.fakeshadow {
  border:{
    style:solid;
    left:{
      width:4px;
      color:#888;   
    }
    right:{
      width:2px;
      color:#ccc;
    }
  }


}
//css style
//-------------------------------
.fakeshadow{
  border-style:solid;
  border-left-width:4px;
  border-left-color:#888;
  border-right-width:2px;
  border-right-color:#ccc;
}

@at-root

普通跳出嵌套

//sass style
//-------------------------------
//没有跳出
.parent-1 {
  color:#f00;
  .child {
    width:100px;
  }
}

//单个选择器跳出
.parent-2 {
  color:#f00;
  @at-root .child {
    width:200px;
  }
}

//多个选择器跳出
.parent-3 {
  background:#f00;
  @at-root {
    .child1 {
      width:300px;
    }
    .child2 {
      width:400px;
    }
  }
}

//css style
//-------------------------------
.parent-1 {
  color: #f00;
}
.parent-1 .child {
  width: 100px;
}
.parent-2 {
  color: #f00;
}
.child {
  width: 200px;
}
.parent-3 {
  background: #f00;
}
.child1 {
  width: 300px;
}
.child2 {
  width: 400px;
}

@at-root与&配合使用

//sass style
//-------------------------------
.child{
    @at-root .parent &{
        color:#f00;
    }
}

//css style
//-------------------------------
.parent .child {
  color: #f00;
}

混合mixin

@mixin声明混合

无参数mixin

//sass style
//-------------------------------
@mixin center-block{
  margin-left:auto;   
}
.demo{
  @include center-block;
}
//css style
//-------------------------------
.demo{
  margin-left:auto;
}

有参数mixin

参数名以$符号开始,`也可设置默认参数

//sass style
//-------------------------------
@mixin opacity($opacity:50){
  opacity:$opacity / 100;
  filter: alpha(opacity=$opacity);  
}
//css style
//-------------------------------
.opacity{
  @include opacity; //参数使用默认值
}
.opacity-80{
  @include opacity(80); //传递参数
}

继承extend

//sass style
//-------------------------------
h1{
  border: 4px solid #ff9aa9;
}
.speaker{
  @extend h1;
  border-width: 2px;
}
//css style
//-------------------------------
h1,.speaker{
  border: 4px solid #ff9aa9;
}
.speaker{
  border-width: 2px;
}

占位选择器%

这种选择器的优势:如果不调用则不会有任何多余的css文件,避免了以前在一些基础的文件中预定义了很多基础的样式。
占位选择器以%标识定义,通过@extend调用

//sass style
//-------------------------------
%ir{
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}
#header{
  h1{
    @extend %ir;
    width:300px;
  }
}
//css style
//-------------------------------
#header h1{
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
  width:300px;
}

函数

常用的为颜色函数,lightendarken为最。lighten($color,$amount)darken($color,$amount)

//sass style
//-------------------------------
$baseFontSize:      10px !default;
$gray:              #ccc !defualt; 
// pixels to rems 
@function pxToRem($px) {
  @return $px / $baseFontSize * 1rem;
}

body{
  font-size:$baseFontSize;
  color:lighten($gray,10%);
}
.test{
  font-size:pxToRem(16px);
  color:darken($gray,10%);
}

//css style
//-------------------------------
body{
  font-size:10px;
  color:#E6E6E6;
}
.test{
  font-size:1.6rem;
  color:#B3B3B3;
}

条件判断及循环

@if判断

//sass style
//-------------------------------
$lte7: true;
$type: monster;
.ib{
    display:inline-block;
    @if $lte7 {
        *display:inline;
        *zoom:1;
    }
}

//css style
//-------------------------------
.ib{
    display:inline-block;
    *display:inline;
    *zoom:1;
}

三目判断

/if(true, 1px, 2px) => 1px
if(false, 1px, 2px) => 2px

for循环

//sass style
//-------------------------------
@for $i from 1 through 3 {
  .item-#{$i} { width: 2em * $i; }
}

//css style
//-------------------------------
.item-1 {
  width: 2em; 
}
.item-2 {
  width: 4em; 
}
.item-3 {
  width: 6em; 
}

datatable项目sass应用

sass源文件目录datatable\src\ui,项目中scss模块化管理,根据scss功能进行文件化管理

  • utility.scss 初始样式
  • global.scss 通用全局样式
  • minxins.scss 所有的混合放在这里
  • variables.scss 变量定义集合
  • color.scss 关于色值得变量定义(需配合palette.scss)
  • themeColor.scss 定义默认主题色
  • u.scss import所有scss
  • 功能页面scss 比如tooltip.scss
@GuoYongfeng
Copy link
Member

@ahua52 好文

建议

  • 整体内容需要再梳理一下
    • sass介绍(能力特性,和less对比,生态)
    • 快速上手
    • 基本语法
    • 和其他工具结合(gulp、webpack、npm script等)
    • sass在iuap-design框架(不是datatable)中的应用实践
  • 给各条目加上序号,增加条理性

@onvno onvno mentioned this issue Aug 7, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants