2012.6.16
SCSS、コーディングの時間を短縮できそうでちょっと気になっています。で、自分用にSCSSのスニペットを作ったのでメモ。
SCSS自体多機能なためいろいろ複雑な事もできるらしいのですが、デザイナーという目線で見た時に、複雑過ぎたりやりすぎなコードは時に不便になる事もあるため、なるべく基本的な部分に留めるようにしました。
不足分は各自で作成する方が、結果的に幸せになれるかもw
一部コードにミスがありましたので更新したり、よりシンプルに書き直しています。
フォントサイズを記述するためのスニペット(変数)です。font-size: 62.5%;で10px相当に統一した上で、変数を記述すれば好きなpxサイズにすることができます。フォントサイズ1つとっても、人によって実装方法は様々ですので、こういったものを用意すると統一できて便利そうです。
body{ font-size: 62.5%; }
$fz10: 1em;
$fz11: 1.1em;
$fz12: 1.2em;
$fz13: 1.3em;
$fz14: 1.4em;
$fz15: 1.5em;
$fz16: 1.6em;
$fz17: 1.7em;
$fz18: 1.8em;
$fz19: 1.9em;
$fz20: 2em;
$fz21: 2.1em;
$fz22: 2.2em;
$fz23: 2.3em;
$fz24: 2.4em;
$fz25: 2.5em;
$fz26: 2.6em;
$fz27: 2.7em;
$fz28: 2.8em;
//記述例
.hoge{
font-size: $fz16;
}
画像パスを一括変換できるスニペットです。パスはご自身の環境で調整してください。スラッシュなどが含まれる場合「
」という書き方にする事で正しく表示できます。#{$img_path}
//基本画像パス
$img_path: "../img/";
//記述例
.hoge{
background: url(#{$img_path}fuga.png);
}
マージンもデザインによってバラバラになりがちですので、一定の数値があると便利ですね。SCSSは計算もできますので、基準値を元に半分にしたり、倍にしたりして使用すると便利そうです。
//基本マージン
$base_margin: 20px;
//記述例
.hoge{
margin: $base_margin; //20px
}
.fuga{
margin: $base_margin/2; //10px
}
.bar{
margin: $base_margin*2; //40px
}
//透明度
@mixin opacity($val: 70){
filter: alpha(opacity=$val);
-moz-opacity: $val/100;
opacity: $val/100;
}
//記述例
.hoge{
@include opacity(45); //透明度45%
}
//透明度2(RGBA)
@mixin rgba($r:0, $g:0, $b:0, $a:0.5){
background-color: rgba($r, $g, $b, $a);
color: rgba($r, $g, $b, $a);
}
//記述例
.hoge{
@include rgba(255,255,255,0.5); //白に透明度50%
}
2013.05.23:単位をいちいちpxと記述するのが面倒なので、数字だけでpxが付くようなコードに修正しました。
//角丸
@mixin border-radius($val: 5) {
-webkit-border-radius: #{$val}px;
-moz-border-radius: #{$val}px;
border-radius: #{$val}px;
}
//記述例
.hoge{
@include border-radius(10); //10pxで角丸に
}
//グラデーション縦
@mixin gradient-v($start,$end){
background: $start; /* Old browsers */
background: -moz-linear-gradient(top, $start 0%, $end 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,$start), color-stop(100%,$end)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, $start 0%,$end 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, $start 0%,$end 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, $start 0%,$end 100%); /* IE10+ */
background: linear-gradient(top, $start 0%,$end 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#{$start}', endColorstr='#{$end}',GradientType=0 ); /* IE6-9 */
}
//グラデーション横
@mixin gradient-h($start,$end){
background: $start; / Old browsers /
background: -moz-linear-gradient(left, $start 0%, $end 100%); / FF3.6+ /
background: -webkit-gradient(linear, left top, right top, color-stop(0%,$start), color-stop(100%,$end)); / Chrome,Safari4+ /
background: -webkit-linear-gradient(left, $start 0%,$end 100%); / Chrome10+,Safari5.1+ /
background: -o-linear-gradient(left, $start 0%,$end 100%); / Opera 11.10+ /
background: -ms-linear-gradient(left, $start 0%,$end 100%); / IE10+ /
background: linear-gradient(left, $start 0%,$end 100%); / W3C /
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#{$start}', endColorstr='#{$end}',GradientType=1 ); / IE6-9 /
}
//記述例
.hoge{
@include gradient-v(#999,#333);
}
.fuga{
@include gradient-h(#999,#333);
}
.clearfix{
zoom:1; //For IE 6/7 (trigger hasLayout)
&:before,&:after{
content:"";
display:table;
}
&:after{
clear:both;
}
}
//記述例
.hoge{
@extend .clearfix;
}
.fuga{
@extend .clearfix;
}
//出力結果
.clearfix, .hoge, .fuga {
zoom: 1;
}
.clearfix:before, .hoge:before, .fuga:before {
content: "";
display: table;
}
.clearfix:after, .hoge:after, .fuga:after {
content: "";
clear: both;
}
//透明度2(RGBA)
@mixin retina_img($width, $height){
background-size:#{$width/2}px #{$height/2}px;
-webkit-background-size:#{$width/2}px #{$height/2}px;
-moz-background-size:#{$width/2}px #{$height/2}px;
}
//記述例
.hoge{
@include retina_img(400,200); //400,200pxの画像を半分サイズに指定する。
}
//結果
.hoge{
background-size:200px 100px;
-webkit-background-size:200px 100px;
-moz-background-size:200px 100px
}
他にも便利そうなスニペットはあると思うので、追記または別記事で書くかもしれません。