npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

mass

v0.1.0

Published

mcss function collection

Downloads

37

Readme

mass

mass a css toolbox based on mcss(The new css preprocessor)

mass提供大量的函数, 同时也是mcss的官方使用示例. 如果对于文档有疑惑,请参考MCSS主页, 也可以留言

所有代码都可以黏贴到MCSS的try page可行尝试

使用

1. 安装mcss

首先,确保你安装了nodejs 和 npm.

npm install -g mcss

2. 引入mass库

直接import :

mcss可以依赖远程mcss文件, (只要进程不退出, 远程文件会缓存在内存中, 比如开启了watch参数,这样只会在第一次build中会有载入开销), 我们可以很方便的引用网络上的mcss文件

/* mass入口文件 */
@import 'https://rawgithub.com/leeluolee/mass/master/mass/index.mcss';

/* 此时你就可以使用mass的函数了 */
.m-home{
  $transition: all .1s ease-in-out; 
}

目前github对于短期多次资源的http的加载会发生503的情况,建议把组件库放置在自己可以访问的位置

本地使用时,你也可以将mass加入到你的include path(配置文件或命令),

mcss --include path/to/mass_dir

然后就只需要@import短名了

@import 'mass/css3';
@import 'mass/helper';

文档目录

  1. css3.mcss(源码) —— 提供海量的css3的兼容处理(由于mcss的强大特性,其实没写多少代码)
  2. reset.mcss(源码) —— 提供多种reset函数, nec-reset, normalize ... etc
  3. helper.mcss(源码) —— 提供一些常用帮助函数,比如$clearfix等等
  4. layout.mcss(源码) —— 提供一些布局相关函数
  5. effect.mcss(源码) —— 提供一些常用的animation mixin, 并提供参数控制.
  6. functions.mcss(源码) —— 一些函数集合, mass的每个文件都或多或少依赖了这个函数
  7. var.mcss(源码) —— 全局变量, 目前只有两个
  8. index.mcss(源码) —— 以上所有子文件的入口文件, 你偷懒可以只引入这个文件

需要注意的是 : mass中的所有文件都可以单独引入, 已经处理好了依赖关系。

使用文档

源码请看对应文件

1. css3.mcss

css3主要是帮助我们无痛的使用css3特性,

同名vendor prefixr:

一些简单的vendor prefix占据了css3处理的大部分,参考的是这个在维护中的css浏览器实验列表

Example

.u-btn{
  /* 注意mcss同时支持两种函数调用方式 */
  $transition: background-color 0.1s ease-in-out;
  $box-sizing(border-box)
}

Outport

.u-btn{
  -webkit-transition:background-color 0.1s ease-in-out;
  -moz-transition:background-color 0.1s ease-in-out;
  transition:background-color 0.1s ease-in-out;
  -webkit-box-sizing:border-box;
  -moz-box-sizing:border-box;
  box-sizing:border-box;
}

其它例如$box-sizing之类的也是一致,详细列表css3.file:L12

  • transition (webkit moz),
  • transition-delay (webkit moz),
  • transition-property (webkit moz),
  • transition-duration (webkit moz),
  • transition-timing-function (webkit moz),
  • animation (webkit moz),
  • animation-delay (webkit moz),
  • animation-name (webkit moz),
  • animation-direction (webkit moz),
  • animation-duration (webkit moz),
  • animation-fill-mode (webkit moz),
  • animation-iteration-count (webkit moz),
  • animation-timing-function (webkit moz),
  • columns (webkit moz),
  • column-count (webkit moz),
  • column-gap (webkit moz),
  • column-fill (webkit moz),
  • column-rule (webkit moz),
  • column-rule-color (webkit moz),
  • column-rule-style (webkit moz),
  • column-rule-width (webkit moz),
  • column-span (webkit moz),
  • column-width (webkit moz),
  • box-orient (webkit moz),
  • box-sizing (webkit moz),
  • box-pack (webkit moz),
  • box-align (webkit moz),
  • box-direction (webkit moz),
  • box-lines (webkit moz),
  • box-ordinal-group (webkit moz),
  • box-flex (webkit moz),
  • box-flex-group (webkit moz),
  • box-shadow (webkit moz),
  • transform null,
  • transform-origin null,
  • transform-style null,
  • perspective (webkit moz),
  • perspective-origin (webkit moz),
  • appearance (webkit moz ms o),
  • backface-visibility (webkit moz),
  • background-clip webkit,
  • background-origin webkit,
  • background-size webkit,
  • border-box (webkit moz),
  • box-shadow webkit,
  • user-select (webkit moz ms),
  • hyphens (epub moz ms),
  • filter (moz webkit);

所有以上css3的参数与原样式一致


$border-radius($radius, $direction)

$border-radius 除了处理前缀, 可以传入额外参数控制位置,

Arguments

  1. $radius —— 圆角半径
  2. $direction —— (可选) 圆角的位置 可以是角(top left) 也可以是边(top)

Example

.radius{
  $border-radius: 3px;
}
.radius-corner{
  $border-radius: 3px, top left;
}
.radius-side{
  $border-radius: 3px, top;
}

Outport

.radius{
  -moz-border-radius:3px;
  border-radius:3px;
}
.radius-corner{
  -moz-border-top-left-radius:3px;
  border-top-left-radius:3px;
}
.radius-side{
  -moz-border-top-left-radius:3px;
  border-top-left-radius:3px;
  -moz-border-top-right-radius:3px;
  border-top-right-radius:3px;
}

$linear-gradient = ($direct, $color-stops...)

线型渐变

Argument

  1. $direct[可以选默认top] : 从哪个方向开始 如 top lefttop 或者以哪个角度 如 45deg 等;
  2. $color-staops: 颜色值列表, 可以加入百分比或长度 如 #fff 50%, #ccc 20px , color-stop可以有无限个;

要点

  1. 总体就是参数与规范类似
  2. 默认会mix 最末和最先的颜色进行mix 作为ie低版本的fallback
  3. 如果是垂直或者水平渐变,比如 top bottom right 和 left 会生成ie下的滤镜形式,其它角度则不生成

Exmaple

$primary = #f6ffc1;
.m-top{
  /* l-adjust 是调节亮度 */
  $linear-gradient: right, $primary , l-adjust($primary, 10%);
}

Outport

.m-top{
  background-color:#faffdb;
  background-image:-webkit-linear-gradient(right,#f6ffc1,#fdfff4);
  background-image:-moz-linear-gradient(right,#f6ffc1,#fdfff4);
  background-image:-ms-linear-gradient(right,#f6ffc1,#fdfff4);
  background-image:-o-linear-gradient(right,#f6ffc1,#fdfff4);
  background-image:linear-gradient(to left,#f6ffc1,#fdfff4);
  filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdfff4', endColorstr='#f6ffc1', GradientType=1) \9;
}

$radial-gradient = ($color-stops...)

圆形渐变, 与线性渐变类似,不过这里color-stop的扩散方向是从圆点到外圈,

Argument

  1. $color-stops: 从内向外的圆颜色层级, 一样可以加入百分比或长度值控制比例

Exmaple

.m-top{
  $radial-gradient: #aaa, #ccc 20%, #ddd 80%, #eee;
}

Outport

.m-top{
  background-color:#ccc;
  background-image:-webkit-radial-gradient(ellipse,#aaa,#ccc 20%,#ddd 80%,#eee);
  background-image:-moz-radial-gradient(ellipse,#aaa,#ccc 20%,#ddd 80%,#eee);
  background-image:-ms-radial-gradient(ellipse,#aaa,#ccc 20%,#ddd 80%,#eee);
  background-image:-o-radial-gradient(ellipse,#aaa,#ccc 20%,#ddd 80%,#eee);
  background-image:radial-gradient(ellipse,#aaa,#ccc 20%,#ddd 80%,#eee);
  background-repeat:no-repeat;
}

$keyframes = ($name, $block)

兼容浏览器的keyframs写法, 与@keyframes对应, mass同时利用它封装了effect.mcss

Arguments

  1. $name —— keyframes 名称
  2. $block —— 传入的block函数, 这个函数接受的第一个参数是前缀, 大部分情况你不需要这个参数, 比如 -o-, -webkit-

Example

$block =  ($prefix){
    20%{
        #{$prefix}transform: scale(2.0,2.0);
    }
    to{
        #{$prefix}transform: scale(1.0,1.0);
    }
}

$keyframes(hello, $block);

Outport

@-webkit-keyframes hello{
  20%{
    -webkit-transform:scale(2,2);
  }
  to{
    -webkit-transform:scale(1,1);
  }
}
@-moz-keyframes hello{
  20%{
    -moz-transform:scale(2,2);
  }
  to{
    -moz-transform:scale(1,1);
  }
}
@-o-keyframes hello{
  20%{
    -o-transform:scale(2,2);
  }
  to{
    -o-transform:scale(1,1);
  }
}
@keyframes hello{
  20%{
    transform:scale(2,2);
  }
  to{
    transform:scale(1,1);
  }
}

$placeholder ($block)

控制placeholder的样式

参数: 一个block(即无参数的函数);

示例:

#input1{
  $placeholder({
    color:#090; 
    background:#fff; 
    text-transform:uppercase;
  });
}

// 在最外层调用
$placeholder({
  color:#090; 
  background:#fff; 
  text-transform:uppercase;
});
 

输出

#input1::-webkit-input-placeholder{
  color:#090;
  background:#fff;
  text-transform:uppercase;
}
#input1::-moz-placeholder{
  color:#090;
  background:#fff;
  text-transform:uppercase;
}
#input1:-moz-placeholder{
  color:#090;
  background:#fff;
  text-transform:uppercase;
}
#input1:-ms-placeholder{
  color:#090;
  background:#fff;
  text-transform:uppercase;
}

::-webkit-input-placeholder{
  color:#090;
  background:#fff;
  text-transform:uppercase;
}
::-moz-placeholder{
  color:#090;
  background:#fff;
  text-transform:uppercase;
}
:-moz-placeholder{
  color:#090;
  background:#fff;
  text-transform:uppercase;
}
:-ms-placeholder{
  color:#090;
  background:#fff;
  text-transform:uppercase;
}

$hidpi = ($block, $ratio = 1.5)

由于处理高dpi的media query的兼容性问题

Arguments

  1. $block -- 传入@media中的block
  2. $ratio —— device-pixel-ratio 默认1.5

Example

$hidpi({
    body{
        left: 10px;
    }
    p{
        right: 20px;
    }
}, 2.0)

Outport

@media only screen and (-webkit-min-device-pixel-ratio: 2),
  only screen and (min--moz-device-pixel-ratio: 2),
  only screen and (-o-min-device-pixel-ratio: 2/1),
  only screen and (min-resolution: 192dpi),
  only screen and (min-resolution: 2dppx){
  body{
    left:10px;
  }
  p{
    right:20px;
  }
}

2. reset.mcss

目前提供$reset-normalize$nec-reset 分别提供不同功能层级的reset需要,分别Copy自NECnormalize

Exmaple

@import 'mass/reset.mcss'
$reset-nec();
// or $reset-normalize();

或者, 自动设置配置变量$include-reset 进行对应reset的include

$include-reset = nec;
@import 'mass/reset.mcss'

Tips

除了使用函数之外, 你可以在include 进reset 之前 设置 $ ?= false;

3. helper.mcss

helper主要提供一些类似 $clearfix的帮助函数,帮助处理一些兼容性问题, 或者集合缩写

$clearfix

清除浮动, 这应该是最常用的mixin

Example

.container{
  $clearfix();
}

Outport

.container{
  *zoom:1;
}
.container:before,.container:after{
  display:table;
  content:"";
  line-height:0;
}
.container:after{
  clear:both;
}

$size($width, $height)

同时设置宽度以及高度,如果没有传入$height, 则高度默认为$width Argument

  1. $width: 宽度
  2. $height: 高度(可选)

$opacity($opa)

设置透明度,处理了ie的兼容性.

Arguments

  1. $opa: 取值范围为0-1

Example:

.u-btn{
  $opacity: 0.1;
}

Outport:

.u-btn{
  filter:alpha(opacity = 10);
  opacity:0.1;
}

$min-height($height)

设置最小高度,主要是处理了IE6下的问题, 借鉴的是一般解决方案

Example

.g-sd{
  $min-height: 20px;
}

Outport

.g-sd{
  min-height:20px;
  height:auto !important;
  _height:20px;
}

$txt-ellipsis($nowrap = true)

文字超过出现省略号

Arguments

  1. $nowrap : 是否不断行 ,默认为true

Example

td{
  $txt-ellipsis();
}

Outport

td{
  white-space:nowrap;
  text-overflow:ellipsis;
  overflow:hidden;
}

$display($type)

display处理了有关display的兼容性问题, 比如inline-box, box.

Example:

body{
  $display: inline-block;
}
p{
  $display: box;
}

Outport:

body{
  display:inline-block;
  vertical-align:baseline;
  zoom:1;
  *display:inline;
  *vertical-align:auto;
}
p{
  display:-webkit-box;
  display:-moz-box;
  display:box;
}

####$font-face($name, $path, $block, $support-svg =false) 处理@font-face

Arguments

  1. $name—— 代表字体名
  2. $path—— 字体们的路径,需去掉后缀 ,如/path/to/monoco
  3. $block—— func,需混入的样式
  4. $support-svg —— 是否引入svg格式

使用这个只是方便在一定约定下 引入各个格式的字体

Exmaple

$font-face('monaco','path/to/monaco', {
  font-weight: bold; 
  font-style: italic;
});

Outport

@font-face {
  font-family:"monaco";
  src:url("path/to/monaco.eot");
  src:url("path/to/monaco.eot?#iefix") format("embedded-opentype"),url("path/to/monaco.woff") format("woff"),url("path/to/monaco.ttf") format("truetype");
  font-weight:bold;
  font-style: italic;
}

4. layout.mcss

layout处理一些常见的布局问题 , 以及栅格布局生成等功能, 目前只提供fixed-layout相关的mixin。 $fixed-layout$fixed-grid 以及 $fixed-container

1. $fixed-layout($col-widths, $gap = 0px, $prefix = 'col')

固定宽度的布局生成, 包括可以实现n栏自适应的布局, 小伙伴们说再也不怕忘记那些n栏自适应了

Arguments

  1. $col-widths : 以空格分隔的宽度值, 可以有一个auto值,代表这栏是自适应的, 则这栏内部的col-cnt节点才是容器类

  2. $gap 栏间距

  3. 类名的前缀默认为 col, 即没栏的类名默认为col-n, 当某栏为自适应时,内部的容器类为col-cnt.

Exmpale

一个三栏中部自适应的例子

.l-1{
  $fixed-layout: 200px auto 100px, 30px, g-mn;
}

Outport

.l-1{
  *zoom:1;
}
.l-1:before,.l-1:after{
  display:table;
  content:"";
  line-height:0;
}
.l-1:after{
  clear:both;
}
.l-1 .g-mn-1{
  position:relative;
  float:left;
  width:200px;
}
.l-1 .g-mn-3{
  position:relative;
  float:right;
  width:100px;
  margin-left:30px;
}
.l-1 .g-mn-2{
  width:100%;
  float:left;
  margin-left:-200px;
  margin-right:-130px;
}
.l-1 .g-mn-2 .g-mn-cnt{
  position:relative;
  margin-left:230px;
  margin-right:130px;
}

对应的html应该是

<div class="l-1">
  <div class="g-mn-1"></div>
  <div class="g-mn-2">
    <div class="g-mn-cnt">l-1</div>
  </div>
  <div class="g-mn-3"></div>
</div>

注意自适应栏的容器为g-mn-cnt, 而固定宽度栏为对应的下标容器节点

当没有 自适应栏(即无auto的参数)时,会设置容器的宽度, 值为之前所有的宽度和以及间距和如

.l-3{
  $fixed-layout: 200px 600px, 10px;
}
.l-3{
  *zoom:1;
  width:810px;
}
.l-3:before,.l-3:after{
  display:table;
  content:"";
  line-height:0;
}
.l-3:after{
  clear:both;
}
.l-3 .col-1{
  position:relative;
  float:left;
  width:200px;
}
.l-3 .col-2{
  position:relative;
  float:right;
  width:600px;
  margin-left:10px;
}

2. $fixed-grid($col-width, $gap=0px, $col-num=12, $prefix='')

固定布局(基于px)的栅格系统生成, 一般用于整个产品的页面时

Arguments

  1. $col-width 栏宽
  2. $gap 栏间距 默认为0
  3. 栏数目 默认为12
  4. 前缀 默认为''

注意

了解bootstrap2的同学可能了解这个栅栏布局结构, 生成的类型有两种, offsetspan, offset代表偏移的量, span代表此栏宽度, 例如 <div class='span1 offset2'></div> 是一个向右偏移两单位 宽度一单位的块

另外同时生成两个类.row.container, row代表一行布局的开始, 而container的宽度即12栏总宽, 只要容器内的元素的总offset+span的数目等于栏数, 则撑满这个 container

这些类都可以加入自定义前缀,比如NEC的g 命名

Exmpale

一键生成 bootstarp的栅格系统 940宽度 12栏,并且兼容ie6.

$fixed-grid(60px, 20px, 12);

Outport

.span1,.span2,.span3,.span4,.span5,.span6,.span7,.span8,.span9,.span10,.span11,.span12{
  float:left;
  min-height:1px;
  margin-left:20px;
  display:inline;
}
.span1{
  width:60px;
}
.offset1{
  margin-left:100px;
}
.span2{
  width:140px;
}
.offset2{
  margin-left:180px;
}
.span3{
  width:220px;
}
.offset3{
  margin-left:260px;
}
.span4{
  width:300px;
}
.offset4{
  margin-left:340px;
}
.span5{
  width:380px;
}
.offset5{
  margin-left:420px;
}
.span6{
  width:460px;
}
.offset6{
  margin-left:500px;
}
.span7{
  width:540px;
}
.offset7{
  margin-left:580px;
}
.span8{
  width:620px;
}
.offset8{
  margin-left:660px;
}
.span9{
  width:700px;
}
.offset9{
  margin-left:740px;
}
.span10{
  width:780px;
}
.offset10{
  margin-left:820px;
}
.span11{
  width:860px;
}
.offset11{
  margin-left:900px;
}
.span12{
  width:940px;
}
.offset12{
  margin-left:980px;
}
.offset0{
  margin-left:0px;
}
.row{
  *zoom:1;
  margin-left:-20px;
}
.row:before,.row:after{
  display:table;
  content:"";
  line-height:0;
}
.row:after{
  clear:both;
}
.container{
  width:940px;
}

对应的demo可以查看 __test__目录


$fixed-container($width)

很简单, 水平居中 、固宽(假如传入$width参数)、清除浮动的容器

Arguments

.g-doc{
  $fixed-container: 960px;
}

Outport

.g-doc{
  *zoom:1;
  width:960px;
  margin-left:auto;
  margin-right:auto;
}
.g-doc:before,.g-doc:after{
  display:table;
  content:"";
  line-height:0;
}
.g-doc:after{
  clear:both;
}

5. effect.mcss

参数配置

  1. $effect-outport —— 是否输出内置的几种效果, 默认为不输出

effect.mcss 中的所有效果都是基于以下两个函数$effect, $effect-func. 它们参数完全一致,区别是$effect-func 只在全局注册对应的函数,而$effect是直接输出

注意

使用$effect-func时,在调用对应函数

内置效果

$effect($name, $block, $with-class)

Arguments

  1. $name[text] keyframes的名字以及输出的className
  2. $block[func] keyframesblock,接受代表-o-等前缀的参数
  3. $with-class[func]—— 可选,代表输出类要做的额外样式

解决keyframes的跨浏览器生成, 并生成对应的class.

Example

$effect(flip, ($prefix){
  0% {
    #{$prefix}transform: perspective(300px) rotateY(0);
    #{$prefix}animation-timing-function: ease-out; }
  40% {
    #{$prefix}transform: perspective(300px) translateZ(100px) rotateY(170deg);
    #{$prefix}animation-timing-function: ease-out; }
  50% {
    #{$prefix}transform: perspective(300px) translateZ(100px ) rotateY(190deg) scale(1);
    #{$prefix}animation-timing-function: ease-in; }
  80% {
    #{$prefix}transform: perspective(300px) rotateY(360deg) scale(.95);
    #{$prefix}animation-timing-function: ease-in; }
  100% {
    #{$prefix}transform: perspective(300px) scale(1);
    #{$prefix}animation-timing-function: ease-in; }
},{
  $backface-visibility:  visible;
});

Outport

.animated{
  -webkit-animation-duration:1s;
  -moz-animation-duration:1s;
  animation-duration:1s;
  -webkit-animation-fill-mode:both;
  -moz-animation-fill-mode:both;
  animation-fill-mode:both;
}
@-webkit-keyframes flip{
  0%{
    -webkit-transform:perspective(300px) rotateY(0);
    -webkit-animation-timing-function:ease-out;
  }
  40%{
    -webkit-transform:perspective(300px) translateZ(100px) rotateY(170deg);
    -webkit-animation-timing-function:ease-out;
  }
  50%{
    -webkit-transform:perspective(300px) translateZ(100px) rotateY(190deg) scale(1);
    -webkit-animation-timing-function:ease-in;
  }
  80%{
    -webkit-transform:perspective(300px) rotateY(360deg) scale(0.95);
    -webkit-animation-timing-function:ease-in;
  }
  100%{
    -webkit-transform:perspective(300px) scale(1);
    -webkit-animation-timing-function:ease-in;
  }
}
@-moz-keyframes flip{
  0%{
    -moz-transform:perspective(300px) rotateY(0);
    -moz-animation-timing-function:ease-out;
  }
  40%{
    -moz-transform:perspective(300px) translateZ(100px) rotateY(170deg);
    -moz-animation-timing-function:ease-out;
  }
  50%{
    -moz-transform:perspective(300px) translateZ(100px) rotateY(190deg) scale(1);
    -moz-animation-timing-function:ease-in;
  }
  80%{
    -moz-transform:perspective(300px) rotateY(360deg) scale(0.95);
    -moz-animation-timing-function:ease-in;
  }
  100%{
    -moz-transform:perspective(300px) scale(1);
    -moz-animation-timing-function:ease-in;
  }
}
@-o-keyframes flip{
  0%{
    -o-transform:perspective(300px) rotateY(0);
    -o-animation-timing-function:ease-out;
  }
  40%{
    -o-transform:perspective(300px) translateZ(100px) rotateY(170deg);
    -o-animation-timing-function:ease-out;
  }
  50%{
    -o-transform:perspective(300px) translateZ(100px) rotateY(190deg) scale(1);
    -o-animation-timing-function:ease-in;
  }
  80%{
    -o-transform:perspective(300px) rotateY(360deg) scale(0.95);
    -o-animation-timing-function:ease-in;
  }
  100%{
    -o-transform:perspective(300px) scale(1);
    -o-animation-timing-function:ease-in;
  }
}
@keyframes flip{
  0%{
    transform:perspective(300px) rotateY(0);
    animation-timing-function:ease-out;
  }
  40%{
    transform:perspective(300px) translateZ(100px) rotateY(170deg);
    animation-timing-function:ease-out;
  }
  50%{
    transform:perspective(300px) translateZ(100px) rotateY(190deg) scale(1);
    animation-timing-function:ease-in;
  }
  80%{
    transform:perspective(300px) rotateY(360deg) scale(0.95);
    animation-timing-function:ease-in;
  }
  100%{
    transform:perspective(300px) scale(1);
    animation-timing-function:ease-in;
  }
}
.animated.flip{
  -webkit-animation-name:flip;
  -moz-animation-name:flip;
  animation-name:flip;
  -webkit-backface-visibility:visible;
  -moz-backface-visibility:visible;
  backface-visibility:visible;
}

知道animation.css的应该明白如何使用,即只要加入对应的类名即可


$effect-func($name, $block, $with-class)

$effect-func 相当于是把$effect的动作延迟到了函数调用时发生, 会在全局产生一个同名函数(区别是多了一个$前缀), 例如上个例子,使用$effect-func的话,会在全局定义一个$flip函数,调用则会输出对应的@keyframes样式,这个可以避免不需要的keyframes糟蹋了css文件.

此外当使用$effect-func时,可以加入对应的参数来控制@keyframes的block, 不仅仅是$prefix参数.

Arguments

参数与$effect, 一致

Example

$effect-func(flash,($prefix, $min-opacity = 0){

  0%, 50%, 100% {opacity: 1;} 
  25%, 75% {opacity: $min-opacity;}
});

//假如我们希望flash效果从透明度50%开始, 参数会传入到$block中, 紧接着默认加入的$prefix参数, 在这个例子就是$min-opacity参数.

$flash(0.5);

Outport

@-webkit-keyframes flash{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.5;
  }
}
@-moz-keyframes flash{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.5;
  }
}
@-o-keyframes flash{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.5;
  }
}
@keyframes flash{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.5;
  }
}
.animated.flash{
  -webkit-animation-name:flash;
  -moz-animation-name:flash;
  animation-name:flash;
}

有人可能会想到,如果需要两个不同参数的同类效果呢? 名字重复不是被覆盖了么?不用担心,只要传入的参数末位是个text类型(即没有引号的文本),会被认为是重新命名的参数,比如沿用上述例子产生的

Example2

// after example1
$flash(0.3, flash1);
$flash(0.6, flash2);

Outport2

@-webkit-keyframes flash1{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.3;
  }
}
@-moz-keyframes flash1{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.3;
  }
}
@-o-keyframes flash1{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.3;
  }
}
@keyframes flash1{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.3;
  }
}
.animated.flash1{
  -webkit-animation-name:flash1;
  -moz-animation-name:flash1;
  animation-name:flash1;
}
@-webkit-keyframes flash2{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.6;
  }
}
@-moz-keyframes flash2{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.6;
  }
}
@-o-keyframes flash2{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.6;
  }
}
@keyframes flash2{
  0%,50%,100%{
    opacity:1;
  }
  25%,75%{
    opacity:0.6;
  }
}
.animated.flash2{
  -webkit-animation-name:flash2;
  -moz-animation-name:flash2;
  animation-name:flash2;
}

这同时有个问题,就是在传入时, 不要让Text类型的参数成为你的末尾参数。否则$effect-func会视其为重命名参数


内置effect

除了提供了$effect$effect-func帮助我们创建自己的效果外,effect.mcss提供了几种效果,当开启 $effect-outport= true 时候,可以将这些特效以默认值的方式直接输出,否则你可以分别调用来达到输出。

内置effect列表以及默认值信息:

只要需要参数的特效,都有默认值,所以你完全可以不传入参数。

// 
$flash();
$shake($offset = 10px);
$bounce($height=40px);
$tada($scale-offset = 0.2, $degree = 3deg);
$swing($degree = 12deg);
$pulse($scale-offset=0.1);
$wobble($offset = 25%, $degree = 5deg);
$wiggle( $degree = 12deg);

$flip( $perspect = 300px);
$flipInX();
$flipInY();
$flipOutX();
$flipOutY();

$fadeIn();
$fadeOut();
$fadeInX($offset = 30px);
$fadeInY($offset = 30px);
$fadeOutX($offset = 30px);
$fadeOutY($offset = 30px);

$bounceIn();
$bounceOut();

$rotateIn($start-deg= -360deg, $start-scale = 1.2);
$rotateOut($end-deg= -360deg, $end-scale= 0.8);

这些函数都是利用$effect-func封装,所以可以传入参数,并修改对应的名称。 使用时只要在节点上加入.animated与对应效果名,比如.shake即可, 与animate.mcss是一致的(其实就只是animate.css的mcss移植了);

Example

$rotateIn(-270deg, 1.5);

Outport

@-webkit-keyframes rotateIn{
  0%{
    opacity:0;
    -webkit-transform:rotate(-270deg) scale(1.5);
  }
  100%{
    -webkit-transform:rotate(0) scale(1);
    opacity:1;
  }
}
@-moz-keyframes rotateIn{
  0%{
    opacity:0;
    -moz-transform:rotate(-270deg) scale(1.5);
  }
  100%{
    -moz-transform:rotate(0) scale(1);
    opacity:1;
  }
}
@-o-keyframes rotateIn{
  0%{
    opacity:0;
    -o-transform:rotate(-270deg) scale(1.5);
  }
  100%{
    -o-transform:rotate(0) scale(1);
    opacity:1;
  }
}
@keyframes rotateIn{
  0%{
    opacity:0;
    transform:rotate(-270deg) scale(1.5);
  }
  100%{
    transform:rotate(0) scale(1);
    opacity:1;
  }
}
.animated.rotateIn{
  -webkit-animation-name:rotateIn;
  -moz-animation-name:rotateIn;
  animation-name:rotateIn;
}

animation是个非常灵活的css特性,效果是写不全的,利用$effect$effect-func去封装自己的特效吧。


6. functions.mcss

这里只列出公有函数

$if( $test, $value, $value2)

如果test通过 则返回 $value, 否则返回$value2, 是的 仅仅只是用来减少@if @else的书写 Example

body{
  left: $if(true, 2, 3);
}

Outport

body{
  left:2;
}

$map($valueslist, $key)

取得fakehash的某个key下的值, mcss支持@for in 遍历一个valueslist伪造的hash。而$map方法可以取得这个hash的某个key的value

Exmpale

$fakehash = big 20px, small 10px, large 40px;

body{
  left: $map($fakehash, big);
}

Outport

body{
  left:20px;
}

7. var.mcss

集中的参数控制, 所有单独的对外文件都依赖它,目前有


// 是否直接引入某个reset的样式
$include-reset ?= false;
// 是否直接输出effect
$effect-outport ?= false;

8. index.mcss

可以调用以上所有函数

Changelog

TODO

开始写lib目录的js扩展 2013/8/4 0:17:21

  1. 雪碧图自动生成。
  2. 渐变图的生成,达到真正的跨浏览器