scss 用于加载图标的sass模块的两个示例。 <br/>一个使用函数自动为图标提供css <br/>秒包括%占位符fo

用于加载图标的sass模块的两个示例。 <br/>一个使用函数自动为图标提供css <br/>秒包括%占位符,用于图标的通用样式

_icons-placeholder-mixin.scss
@function icon-url($name) {
  @return url(‘/assets/images/icon-#{$name}.png’);
}

$icons: (open close message comment);

%icon {
  width: 32px;
  &:hover {
    opacity: 0.7;
  }
}

@each $icon in $icons {
  .icon-#{$icon} {
    background: icon-url($icon);
    @extend %icon;
  }
}
_icons-functions.scss
//function to load icons images
@function icon-url($name) {
  @return url(‘/assets/images/icon-#{$name}.png’);
}
// var with icons 
$icons: (open close message comment);

//the functions which creates classes for the icons
@each $icon in $icons {
  .icon-#{$icon} {
    background: icon-url($icon);
    width: 32px;
    &:hover {
      opacity: 0.7;
    }
  }
}

scss SASS MIXIN:过渡

SASS MIXIN:过渡

_mixins.scss
// -----------------------------------------
// TRANSITION
// -----------------------------------------
@mixin transition($prop: all, $time: 300ms, $ease: ease-out) {
  -webkit-transition:  $prop $time $ease;
  -moz-transition:     $prop $time $ease;
  -ms-transition:      $prop $time $ease;
  -o-transition:       $prop $time $ease;
  transition:          $prop $time $ease;
}
// @include transition;

scss EXTEND SASS:隐藏文字

EXTEND SASS:隐藏文字

_mixins.scss
// -----------------------------------------
// HIDE TEXT
// -----------------------------------------
#hidetext {
  font:        0/0 a;
  text-shadow: none;
  color:       transparent;
}
// @extend %hidetext;

scss EXTEND SASS:添加省略号

EXTEND SASS:添加省略号

_mixins.scss
// -----------------------------------------
// ADD ELLIPSIS
// -----------------------------------------
%ellipsis {
  overflow:       hidden;
  text-overflow:  ellipsis;
  white-space:    nowrap;
}
// @extend %ellipsis;

scss SASS EXTEND:重置对象

SASS EXTEND:重置对象

_mixins.scss
// -----------------------------------------
// RESET OBJECT
// -----------------------------------------
%reset {
  margin:       0px !important;
  padding:      0px !important;
  border:       none;
  background:   transparent;
}
// @extend %reset;

scss mixin:绝对位置

mixin:绝对位置

mixin_absolute-position.scss
@mixin absolute($args) {
    $offsets: top right bottom left;

    @each $o in $offsets {
        $i: index($args, $o);

        @if $i 
        and $i + 1 <= length($args) 
        and type-of( nth($args, $i + 1) ) == number {
            #{$o}: nth($args, $i + 1);
        }
    }
}


//example
.element {
    @include absolute(top 1em right 10%);
}

scss 像视图组件一样的向导的定义规范

像视图组件一样的向导的定义规范

FlowViewComponent.md
# Proposal "FlowView Component"
  > A View Component which can be used to create wizard-like Modules.

## Description
The FlowView is a component for creating wizardy-flows. It contains elements like the navbar (the header with title and buttons) and a group of view elements which the FlowView can show/hide to implement the 'flow' of a wizard.

This component is going to inherit styles from existing objects using theirs  %placeholders. 

  > Placeholders are selectors that output nothing unless the are extended.
  > Placeholders don't have the code bloa problems that mixins or regular @extend calls have. Which makes them perfect for creating non-semantic CSS modules (i.e. "patterns").

Taking this one step further is by creating a mixing which combines placeholders and configs to create components styles with configurable variables, like gradient, size, pseudo classes

### List of possible placeholders
* %navbar (abstraction containing styles for a gradient bar)
* %btn (abstraction containing styles for button)
  * navbar__nav //nav-links
  * navbar__title //brand title
  * navbar__btn  //@extends from %btn--header 
* %view

### Component's BEM Definition

// Block
.flowview

// Elements
.flowview__navbar // the header element
  @extends %navbar; //placeholder for the navbar pattern
  > navbar__title
  > navbar__btn

.flowview__view-group //container element for the views
  @extends %groups
  > .view-group__item // element of view-group
    @extend %view; //placeholder for the view pattern

### JS Component

Depends on transition.js
#### Using the Component
_Via data attribute_
  > Use data attributes to easily control the position of the carousel. data-show accepts the keywords prev or next, which alters the slide position relative to its current position. Alternatively, use data-show-item to pass a raw slide index to the carousel data-show-item="2", which shifts the slide position to a particular index beginning with 0.

_Via JavaScript_

Methods:
- FlowView(); //constructs
- flowview.showNext(); 
- flowview.showPrev();
- flowview.show();

Events:
- 'slide-start' //This event fires immediately when the slide instance method is invoked.
- 'slide-end' //This event fires after the slide animation is done and the view__item is active
- 

```

  var FlowView = function (element, options) {
    this.$element = $(element)
    this.options  = $.extend({}, Button.DEFAULTS, options)
  }
  FlowView.DEFAULTS = {};
  
  FlowView.prototype.showNext();
  FlowView.prototype.showPrevious();
  FlowView.prototype.show( index );
  

```
Bootstrap GridSystem mixins.scss
// Grid System
// -----------

// Centered container element
@mixin container-fixed() {
  margin-right: auto;
  margin-left: auto;
  @include clearfix();
}

// Table columns
@mixin tableColumns($columnSpan: 1) {
  float: none; // undo default grid column styles
  width: (($gridColumnWidth) * $columnSpan) + ($gridGutterWidth * ($columnSpan - 1)) - 16; // 16 is total padding on left and right of table cells
  margin-left: 0; // undo default grid column styles
}

// Make a Grid
// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior
@mixin makeRow() {
  margin-left: $gridGutterWidth * -1;
  @include clearfix();
}
@mixin makeColumn($columns: 1, $offset: 0) {
  float: left;
  margin-left: ($gridColumnWidth * $offset) + ($gridGutterWidth * ($offset - 1)) + ($gridGutterWidth * 2);
  width: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1));
}

// The Grid
@mixin grid-core($gridColumnWidth, $gridGutterWidth) {
  .row {
    margin-left: $gridGutterWidth * -1;
    @include clearfix();
  }

  [class*="span"] {
    float: left;
    min-height: 1px; // prevent collapsing columns
    margin-left: $gridGutterWidth;
  }

  // Set the container width, and override it for fixed navbars in media queries
  .container,
  .navbar-static-top .container,
  .navbar-fixed-top .container,
  .navbar-fixed-bottom .container {
    @include grid-core-span($gridColumns, $gridColumnWidth, $gridGutterWidth);
  }

  // generate .spanX and .offsetX
  @include grid-core-span-x($gridColumns, $gridColumnWidth, $gridGutterWidth);
  @include grid-core-offset-x($gridColumns, $gridColumnWidth, $gridGutterWidth);
}

@mixin grid-core-span-x($gridColumns, $gridColumnWidth, $gridGutterWidth) {
  @for $i from 1 through $gridColumns {
    .span#{$i} { @include grid-core-span($i, $gridColumnWidth, $gridGutterWidth); }
  }
}

@mixin grid-core-offset-x($gridColumns, $gridColumnWidth, $gridGutterWidth) {
  @for $i from 1 through $gridColumns {
    .offset#{$i} { @include grid-core-offset($i, $gridColumnWidth, $gridGutterWidth); }
  }
}

@mixin grid-core-span($columns, $gridColumnWidth, $gridGutterWidth) {
  width: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns - 1));
}

@mixin grid-core-offset($columns, $gridColumnWidth, $gridGutterWidth) {
  margin-left: ($gridColumnWidth * $columns) + ($gridGutterWidth * ($columns + 1));
}



@mixin grid-fluid($fluidGridColumnWidth, $fluidGridGutterWidth) {
  .row-fluid {
    width: 100%;
    @include clearfix();
    [class*="span"] {
      @include input-block-level();
      float: left;
      margin-left: $fluidGridGutterWidth;
      *margin-left: $fluidGridGutterWidth - (.5 / $gridRowWidth * 100px * 1%);
    }
    [class*="span"]:first-child {
      margin-left: 0;
    }

    // Space grid-sized controls properly if multiple per line
    .controls-row [class*="span"] + [class*="span"] {
      margin-left: $fluidGridGutterWidth;
    }

    // generate .spanX and .offsetX
    @include grid-fluid-span-x($gridColumns, $fluidGridColumnWidth, $fluidGridGutterWidth);
    @include grid-fluid-offset-x($gridColumns, $fluidGridColumnWidth, $fluidGridGutterWidth);
  }
}

@mixin grid-fluid-span-x($gridColumns, $fluidGridColumnWidth, $fluidGridGutterWidth) {
  @for $i from 1 through $gridColumns {
    .span#{$i} { @include grid-fluid-span($i, $fluidGridColumnWidth, $fluidGridGutterWidth); }
  }
}

@mixin grid-fluid-offset-x($gridColumns, $fluidGridColumnWidth, $fluidGridGutterWidth) {
  @for $i from 1 through $gridColumns {
    .offset#{$i} { @include grid-fluid-offset($i, $fluidGridColumnWidth, $fluidGridGutterWidth); }
    .offset#{$i}:first-child { @include grid-fluid-offset-first-child($i, $fluidGridColumnWidth, $fluidGridGutterWidth); }
  }
}

@mixin grid-fluid-span($columns, $fluidGridColumnWidth, $fluidGridGutterWidth) {
  width: ($fluidGridColumnWidth * $columns) + ($fluidGridGutterWidth * ($columns - 1));
  *width: ($fluidGridColumnWidth * $columns) + ($fluidGridGutterWidth * ($columns - 1)) - (.5 / $gridRowWidth * 100px * 1%);
}

@mixin grid-fluid-offset($columns, $fluidGridColumnWidth, $fluidGridGutterWidth) {
  margin-left: ($fluidGridColumnWidth * $columns) + ($fluidGridGutterWidth * ($columns - 1)) + ($fluidGridGutterWidth * 2);
  *margin-left: ($fluidGridColumnWidth * $columns) + ($fluidGridGutterWidth * ($columns - 1)) - (.5 / $gridRowWidth * 100px * 1%) + ($fluidGridGutterWidth * 2) - (.5 / $gridRowWidth * 100px * 1%);
}

@mixin grid-fluid-offset-first-child($columns, $fluidGridColumnWidth, $fluidGridGutterWidth) {
  margin-left: ($fluidGridColumnWidth * $columns) + ($fluidGridGutterWidth * ($columns - 1)) + ($fluidGridGutterWidth);
  *margin-left: ($fluidGridColumnWidth * $columns) + ($fluidGridGutterWidth * ($columns - 1)) - (.5 / $gridRowWidth * 100px * 1%) + $fluidGridGutterWidth - (.5 / $gridRowWidth * 100px * 1%);
}



@mixin grid-input($gridColumnWidth, $gridGutterWidth) {
  input,
  textarea,
  .uneditable-input {
    margin-left: 0; // override margin-left from core grid system
  }

  // Space grid-sized controls properly if multiple per line
  .controls-row [class*="span"] + [class*="span"] {
    margin-left: $gridGutterWidth;
  }

  // generate .spanX
  @include grid-input-span-x($gridColumns, $gridColumnWidth, $gridGutterWidth);
}

@mixin grid-input-span-x($gridColumns, $gridColumnWidth, $gridGutterWidth) {
  @for $i from 1 through $gridColumns {
    input.span#{$i},
    textarea.span#{$i},
    .uneditable-input.span#{$i} {
      @include grid-input-span($i, $gridColumnWidth, $gridGutterWidth);
    }
  }
}

@mixin grid-input-span($columns, $gridColumnWidth, $gridGutterWidth) {
  width: (($gridColumnWidth) * $columns) + ($gridGutterWidth * ($columns - 1)) - 14;
}
Bootstrap Forms mixins
// FORMS
// --------------------------------------------------

// Block level inputs
@mixin input-block-level {
  display: block;
  width: 100%;
  min-height: $inputHeight; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
  @include box-sizing(border-box); // Makes inputs behave like true block-level elements
}



// Mixin for form field states
@mixin formFieldState($textColor: #555, $borderColor: #ccc, $backgroundColor: #f5f5f5) {
  // Set the text color
  .control-label,
  .help-block,
  .help-inline {
    color: $textColor;
  }
  // Style inputs accordingly
  .checkbox,
  .radio,
  input,
  select,
  textarea {
    color: $textColor;
  }
  input,
  select,
  textarea {
    border-color: $borderColor;
    @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
    &:focus {
      border-color: darken($borderColor, 10%);
      @include box-shadow(inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten($borderColor, 20%));
    }
  }
  // Give a small background color for input-prepend/-append
  .input-prepend .add-on,
  .input-append .add-on {
    color: $textColor;
    background-color: $backgroundColor;
    border-color: $textColor;
  }
}



Bootstrap Background mixins.scss
// BACKGROUNDS
// --------------------------------------------------

// Add an alphatransparency value to any background or border color (via Elyse Holladay)
@mixin translucent-background($color: $white, $alpha: 1) {
  background-color: hsla(hue($color), saturation($color), lightness($color), $alpha);
}

@mixin translucent-border($color: $white, $alpha: 1) {
  border-color: hsla(hue($color), saturation($color), lightness($color), $alpha);
  @include background-clip(padding-box);
}

// Gradient Bar Colors for buttons and alerts
@mixin gradientBar($primaryColor, $secondaryColor, $textColor: #fff, $textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
  color: $textColor;
  text-shadow: $textShadow;
  @include gradient-vertical($primaryColor, $secondaryColor);
  border-color: $secondaryColor $secondaryColor darken($secondaryColor, 15%);
  border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fade-in(rgba(0,0,0,.1), 0.15);
}

// Gradients
@mixin gradient-horizontal($startColor: #555, $endColor: #333) {
  background-color: $endColor;
  background-image: -moz-linear-gradient(left, $startColor, $endColor); // FF 3.6+
  background-image: -webkit-gradient(linear, 0 0, 100% 0, from($startColor), to($endColor)); // Safari 4+, Chrome 2+
  background-image: -webkit-linear-gradient(left, $startColor, $endColor); // Safari 5.1+, Chrome 10+
  background-image: -o-linear-gradient(left, $startColor, $endColor); // Opera 11.10
  background-image: linear-gradient(to right, $startColor, $endColor); // Standard, IE10
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($startColor)}', endColorstr='#{ie-hex-str($endColor)}', GradientType=1); // IE9 and down
}
@mixin gradient-vertical($startColor: #555, $endColor: #333) {
  background-color: mix($startColor, $endColor, 60%);
  background-image: -moz-linear-gradient(top, $startColor, $endColor); // FF 3.6+
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), to($endColor)); // Safari 4+, Chrome 2+
  background-image: -webkit-linear-gradient(top, $startColor, $endColor); // Safari 5.1+, Chrome 10+
  background-image: -o-linear-gradient(top, $startColor, $endColor); // Opera 11.10
  background-image: linear-gradient(to bottom, $startColor, $endColor); // Standard, IE10
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($startColor)}', endColorstr='#{ie-hex-str($endColor)}', GradientType=0); // IE9 and down
}
@mixin gradient-directional($startColor: #555, $endColor: #333, $deg: 45deg) {
  background-color: $endColor;
  background-repeat: repeat-x;
  background-image: -moz-linear-gradient($deg, $startColor, $endColor); // FF 3.6+
  background-image: -webkit-linear-gradient($deg, $startColor, $endColor); // Safari 5.1+, Chrome 10+
  background-image: -o-linear-gradient($deg, $startColor, $endColor); // Opera 11.10
  background-image: linear-gradient($deg, $startColor, $endColor); // Standard, IE10
}
@mixin gradient-horizontal-three-colors($startColor: #00b3ee, $midColor: #7a43b6, $colorStop: 50%, $endColor: #c3325f) {
  background-color: mix($midColor, $endColor, 80%);
  background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from($startColor), color-stop($colorStop, $midColor), to($endColor));
  background-image: -webkit-linear-gradient(left, $startColor, $midColor $colorStop, $endColor);
  background-image: -moz-linear-gradient(left, $startColor, $midColor $colorStop, $endColor);
  background-image: -o-linear-gradient(left, $startColor, $midColor $colorStop, $endColor);
  background-image: linear-gradient(to right, $startColor, $midColor $colorStop, $endColor);
  background-repeat: no-repeat;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($startColor)}', endColorstr='#{ie-hex-str($endColor)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback
}

@mixin gradient-vertical-three-colors($startColor: #00b3ee, $midColor: #7a43b6, $colorStop: 50%, $endColor: #c3325f) {
  background-color: mix($midColor, $endColor, 80%);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from($startColor), color-stop($colorStop, $midColor), to($endColor));
  background-image: -webkit-linear-gradient($startColor, $midColor $colorStop, $endColor);
  background-image: -moz-linear-gradient(top, $startColor, $midColor $colorStop, $endColor);
  background-image: -o-linear-gradient($startColor, $midColor $colorStop, $endColor);
  background-image: linear-gradient($startColor, $midColor $colorStop, $endColor);
  background-repeat: no-repeat;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#{ie-hex-str($startColor)}', endColorstr='#{ie-hex-str($endColor)}', GradientType=0); // IE9 and down, gets no color-stop at all for proper fallback
}
@mixin gradient-radial($innerColor: #555, $outerColor: #333)  {
  background-color: $outerColor;
  background-image: -webkit-gradient(radial, center center, 0, center center, 460, from($innerColor), to($outerColor));
  background-image: -webkit-radial-gradient(circle, $innerColor, $outerColor);
  background-image: -moz-radial-gradient(circle, $innerColor, $outerColor);
  background-image: -o-radial-gradient(circle, $innerColor, $outerColor);
  background-repeat: no-repeat;
}
@mixin gradient-striped($color: #555, $angle: 45deg) {
  background-color: $color;
  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent));
  background-image: -webkit-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
  background-image: -moz-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient($angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent);
}

//COMPONENT MIXINS
// Button backgrounds
// ------------------
@mixin buttonBackground($startColor, $endColor, $textColor: #fff, $textShadow: 0 -1px 0 rgba(0,0,0,.25)) {
  // gradientBar will set the background to a pleasing blend of these, to support IE<=9
  @include gradientBar($startColor, $endColor, $textColor, $textShadow);
  *background-color: $endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */
  @include reset-filter();

  // in these cases the gradient won't cover the background, so we override
  &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] {
    color: $textColor;
    background-color: $endColor;
    *background-color: darken($endColor, 5%);
  }

  // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves
  &:active,
  &.active {
    background-color: darken($endColor, 10%) \9;
  }
}

scss 指南针:连字符

指南针:连字符

compass_hyphenation.scss
@include hyphenation;

scss mixin:transition-hove

mixin:transition-hove

mixin_transition-hover.scss
@mixin transition-hover(){
	@include transition();
	@include transition-duration(0.2s);
}

scss SASS,SCSS,mixin:PX到EM的转换

SASS,SCSS,mixin:PX到EM的转换

style.scss
/* PX to EM conversion 
   example:  font-size: em(30);
*/

@function em($target, $context: 16) {
    @return ($target / $context) * 1em;
}