第6章 Sassを更に便利にする Compass

6-3 Compassのミックスインを使う

CSS3モジュール

角丸

初期値

.boxA {
	@include border-radius;
}
.boxA {
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  -ms-border-radius: 5px;
  -o-border-radius: 5px;
  border-radius: 5px;
}

値を入れた場合

.boxB {
	@include border-radius(10px 5px);
}
.boxB {
  -webkit-border-radius: 10px 5px;
  -moz-border-radius: 10px 5px;
  -ms-border-radius: 10px 5px;
  -o-border-radius: 10px 5px;
  border-radius: 10px 5px;
}

値を入れた場合(カンマ区切り)

.boxC {
	@include border-radius(10px, 5px);
}
.boxC {
  -webkit-border-radius: 10px 5px;
  -moz-border-radius: 10px / 5px;
  border-radius: 10px / 5px;
}

box-shadow

初期値

.boxA {
	@include box-shadow;
}
.boxA {
  -webkit-box-shadow: 0px 0px 5px #333333;
  -moz-box-shadow: 0px 0px 5px #333333;
  box-shadow: 0px 0px 5px #333333;
}

値を入れた場合

.boxB {
	@include box-shadow(1px 2px 3px #444);
}
.boxB {
  -webkit-box-shadow: 1px 2px 3px #444444;
  -moz-box-shadow: 1px 2px 3px #444444;
  box-shadow: 1px 2px 3px #444444;
}

text-shadow

.boxA {
	@include text-shadow;
}
.boxB {
	@include text-shadow(4px 5px 6px #777);
}
.boxA {
  text-shadow: 0px 0px 1px #aaaaaa;
}
.boxB {
  text-shadow: 4px 5px 6px #777777;
}

background-size

.boxA {
	@include background-size;	
}
.boxB {
	@include background-size(cover);
}
.boxA {
  -webkit-background-size: 100% auto;
  -moz-background-size: 100% auto;
  -o-background-size: 100% auto;
  background-size: 100% auto;
}
.boxB {
  -webkit-background-size: cover;
  -moz-background-size: cover;
  -o-background-size: cover;
  background-size: cover;
}

background-clip

.boxA {
	@include background-clip;	
}
.boxB {
	@include background-clip(border-box);	
}
.boxA {
  -webkit-background-clip: padding;
  -moz-background-clip: padding;
  background-clip: padding-box;
}
.boxB {
  -webkit-background-clip: border;
  -moz-background-clip: border;
  background-clip: border-box;
}

Ellipses

.boxA {
	@include ellipsis;
}
.boxA {
  white-space: nowrap;
  overflow: hidden;
  -ms-text-overflow: ellipsis;
  -o-text-overflow: ellipsis;
  text-overflow: ellipsis;
}
.boxB {
	@include ellipsis(false);
}
.boxB {
  overflow: hidden;
  -ms-text-overflow: ellipsis;
  -o-text-overflow: ellipsis;
  text-overflow: ellipsis;
}

Transition

.boxA {
	@include transition(width 2s linear 0.5s);
}
.boxA {
  -webkit-transition: width 2s linear;
  -webkit-transition-delay: 0.5s;
  -moz-transition: width 2s linear 0.5s;
  -o-transition: width 2s linear 0.5s;
  transition: width 2s linear 0.5s;
}
.boxB {
	@include transition-property(width);
	@include transition-duration(2s);
	@include transition-timing-function(linear);
	@include transition-delay(0.5s);
}
.boxB {
  -webkit-transition-property: width;
  -moz-transition-property: width;
  -o-transition-property: width;
  transition-property: width;
  -webkit-transition-duration: 2s;
  -moz-transition-duration: 2s;
  -o-transition-duration: 2s;
  transition-duration: 2s;
  -webkit-transition-timing-function: linear;
  -moz-transition-timing-function: linear;
  -o-transition-timing-function: linear;
  transition-timing-function: linear;
  -webkit-transition-delay: 0.5s;
  -moz-transition-delay: 0.5s;
  -o-transition-delay: 0.5s;
  transition-delay: 0.5s;
}

グラデーション

.boxA {
	@include background(linear-gradient(white, #a00));
}
.boxB {
	@include background(radial-gradient(white, #b00)); 
}
.boxA {
  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(100%, #aa0000));
  background: -webkit-linear-gradient(#ffffff, #aa0000);
  background: -moz-linear-gradient(#ffffff, #aa0000);
  background: -o-linear-gradient(#ffffff, #aa0000);
  background: linear-gradient(#ffffff, #aa0000);
}
.boxB {
  background: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 100, color-stop(0%, #ffffff), color-stop(100%, #bb0000));
  background: -webkit-radial-gradient(#ffffff, #bb0000);
  background: -moz-radial-gradient(#ffffff, #bb0000);
  background: -o-radial-gradient(#ffffff, #bb0000);
  background: radial-gradient(#ffffff, #bb0000);
}
.boxC {
	@include background(linear-gradient(left, white, #c00)); 
}
.boxD {
	@include background(linear-gradient(white, green, #d00));
}
.boxC {
  background: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #ffffff), color-stop(100%, #cc0000));
  background: -webkit-linear-gradient(left, #ffffff, #cc0000);
  background: -moz-linear-gradient(left, #ffffff, #cc0000);
  background: -o-linear-gradient(left, #ffffff, #cc0000);
  background: linear-gradient(left, #ffffff, #cc0000);
}
.boxD {
  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(50%, #008000), color-stop(100%, #dd0000));
  background: -webkit-linear-gradient(#ffffff, #008000, #dd0000);
  background: -moz-linear-gradient(#ffffff, #008000, #dd0000);
  background: -o-linear-gradient(#ffffff, #008000, #dd0000);
  background: linear-gradient(#ffffff, #008000, #dd0000);
}
.boxE {
	@include background(linear-gradient(white, green, #e00));
}
.boxF {
	@include background(linear-gradient(white, green 40%, blue 60%, #f00));
}
.boxE {
  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(50%, #008000), color-stop(100%, #ee0000));
  background: -webkit-linear-gradient(#ffffff, #008000, #ee0000);
  background: -moz-linear-gradient(#ffffff, #008000, #ee0000);
  background: -o-linear-gradient(#ffffff, #008000, #ee0000);
  background: linear-gradient(#ffffff, #008000, #ee0000);
}
.boxF {
  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(40%, #008000), color-stop(60%, #0000ff), color-stop(100%, #ff0000));
  background: -webkit-linear-gradient(#ffffff, #008000 40%, #0000ff 60%, #ff0000);
  background: -moz-linear-gradient(#ffffff, #008000 40%, #0000ff 60%, #ff0000);
  background: -o-linear-gradient(#ffffff, #008000 40%, #0000ff 60%, #ff0000);
  background: linear-gradient(#ffffff, #008000 40%, #0000ff 60%, #ff0000);
}
.boxF-svg {
	$experimental-support-for-svg: true;
	@include background(linear-gradient(left, white, green 40%, blue 60%, #f00));
}
.boxF-svg {
  background: url('data:image/svgI3Agb2Zmc2V0PSI2M 〜省略〜 QpIiAvPjwvc3ZnPiA=');
  background: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #ffffff), color-stop(40%, #008000), color-stop(60%, #0000ff), color-stop(100%, #ff0000));
  background: -webkit-linear-gradient(left, #ffffff, #008000 40%, #0000ff 60%, #ff0000);
  background: -moz-linear-gradient(left, #ffffff, #008000 40%, #0000ff 60%, #ff0000);
  background: -o-linear-gradient(left, #ffffff, #008000 40%, #0000ff 60%, #ff0000);
  background: linear-gradient(left, #ffffff, #008000 40%, #0000ff 60%, #ff0000);
}
.boxG {
	@include filter-gradient(#FFFFFF, #bb0000, horizontal);
}
#boxG {
  *zoom: 1;
  filter: progid:DXImageTransform.Microsoft.gradient(gradientType=1, startColorstr='#FFFFFFFF', endColorstr='#FFBB0000');
}

opacity

.boxA {
	 @include opacity(0.8);
}
.boxA {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
  opacity: 0.8;
}

inline-block

.boxA {
	@include inline-block;
}
.boxA {
  display: -moz-inline-stack;
  display: inline-block;
  vertical-align: middle;
  *vertical-align: auto;
  zoom: 1;
  *display: inline;
}

Webフォント

.boxA {
	@include font-face("Source Code Pro", font-files("sourcecodepro.ttf", "sourcecodepro.otf", "sourcecodepro.eot"));
}
.boxA {
  @font-face {
    font-family: "Source Code Pro";
    src: url('/css/fonts/sourcecodepro.ttf') format('truetype'), url('/css/fonts/sourcecodepro.otf') format('opentype'), url('/css/fonts/sourcecodepro.eot') format('embedded-opentype');
}
}

Utilitiesモジュール

リンクカラー

.boxA {
	@include link-colors(#111, #222, #333, #444, #555);
}
.boxA {
  color: #111111;
}
.boxB:visited {
  color: #444444;
}
.boxB:focus {
  color: #555555;
}
.boxB:hover {
  color: #222222;
}
.boxB:active {
  color: #333333;
}

Clearfix

.boxA {
	@include clearfix;
}
.boxA {
  overflow: hidden;
  *zoom: 1;
}

インラインリスト

line-list

.listA {
	@include inline-list;
}
.listA {
  list-style-type: none;
}
.listA, .listA li {
  margin: 0px;
  padding: 0px;
  display: inline;
}

line-block-list

.listB {
	@include inline-block-list;
}
.listB {
  margin: 0;
  padding: 0;
  border: 0;
  overflow: hidden;
  *zoom: 1;
}
.listB li {
  list-style-image: none;
  list-style-type: none;
  margin-left: 0;
  display: -moz-inline-stack;
  display: inline-block;
  vertical-align: middle;
  *vertical-align: auto;
  zoom: 1;
  *display: inline;
  white-space: nowrap;
}

inline-horizontal-list

.listC {
	@include horizontal-list;
}
/* @include inline-horizontal-list */
.listC {
  margin: 0;
  padding: 0;
  border: 0;
  overflow: hidden;
  *zoom: 1;
}
.listC li {
  list-style-image: none;
  list-style-type: none;
  margin-left: 0;
  white-space: nowrap;
  display: inline;
  float: left;
  padding-left: 4px;
  padding-right: 4px;
}
.listC li:first-child, .listC li.first {
  padding-left: 0;
}
.listC li:last-child {
  padding-right: 0;
}
.listC li.last {
  padding-right: 0;
}

リストアイコン

.listA {
	@include pretty-bullets("arrow.png");
}
.listA {
  margin-left: 0;
}
.listA li {
  padding-left: 14px;
  background: url('../img/arrow.png') no-repeat 2px 4px;	(※1)
  list-style-type: none;
}

min-width / min-height

.boxA {
	@include min-width(100px);
}
.boxB {
	@include min-height(200px);	
}
.boxA {
  min-width: 100px;
  width: auto !important;
  width: 100px;
}

.boxB {
  min-height: 200px;
  height: auto !important;
  height: 200px;
}

色の対比

.boxA {
	@include contrasted(#ccc);
}
.boxB {
	@include contrasted(#333);
}
.boxA {
  background-color: #cccccc;
  color: black;
}
.boxB {
  background-color: #333333;
  color: white;
}
.boxA {
	@include contrasted(hsl(0, 0, 30%));
}
.boxB {
	@include contrasted(hsl(0, 0, 29%));
}
.boxA {
  background-color: #4d4d4d;
  color: black;
}
.boxB {
  background-color: #4a4a4a;
  color: white;
}

Typographyモジュール

Vertical Rhythm

$base-font-size : 16px;
$base-line-height : 24px;

ベースフォントサイズ12px、ベースライン18pxで設定した場合

$base-font-size : 12px;
$base-line-height : 18px;

@include establish-baseline;
* html {
  font-size: 75%;
}

html {
  font-size: 12px;
  line-height: 1.5em;
}

見出しのフォントサイズを設定

第一引数のみ指定した場合

h1 {
	@include adjust-font-size-to(36px);
}
h1 {
  font-size: 3em;
  line-height: 1.5em;
}

第二引数まで指定した場合

h1 {
	@include adjust-font-size-to(36px, 2);
}
h1 {
  font-size: 3em;
  line-height: 1em;
}

文字の上のスペースを設定

laderミックスイン

h2 {
	@include leader;
}
h2 {
  margin-top: 1.5em;
}
h2 {
	@include leader(2);
}
h2 {
  margin-top: 3em;
}

padding-leaderミックスイン

h3 {
	@include padding-leader(2);
}
h3 {
	@include padding-leader(2);
}

文字の下のスペースを設定

trailerミックスイン

h4 {
	@include trailer(-0.5);
}
h4 {
  margin-bottom: -0.75em;
}

padding-trailerミックスイン

h5 {
	@include padding-trailer(3);
}
h5 {
  padding-bottom: 4.5em;
}

上下のスペースを設定

h6 {
	@include rhythm(0, 1, 2, 3);	
}
h6 {
  margin-top: 0em;
  padding-top: 1.5em;
  padding-bottom: 3em;
  margin-bottom: 4.5em;
}

画像置換

replace-textミックスイン

.boxA {
	@include replace-text("text.png", 5px, 10px);
}
.boxA {
  text-indent: -119988px;
  overflow: hidden;
  text-align: left;
  background-image: url('../img/replace.png');	(※1)
  background-repeat: no-repeat;
  background-position: 5px 10px;
}

replace-text-with-dimensionsミックスイン

.boxB {
	@include replace-text-with-dimensions("sass.gif", left, 10px);
}
.boxB {
  text-indent: -119988px;
  overflow: hidden;
  text-align: left;
  background-image: url('../img/replace.png');
  background-repeat: no-repeat;
  background-position: left 10px;
  width: 100px;
  height: 300px;
}

hide-textミックスイン、squish-textミックスイン

.boxC {
	@include hide-text;
}
.boxD {
	@include squish-text;
}
.boxC {
  text-indent: -119988px;
  overflow: hidden;
  text-align: left;
}
.boxD {
  font: 0/0 serif;
  text-shadow: none;
  color: transparent;
}