第5章 現場で使える実践Sassコーディング
5-4 スマホ・マルチデバイスで使える
スマホサイトでよく見る、リストの矢印をミックスインで管理する
$setPrefix: -webkit-, -moz-, -o-, null; // リンクリスト用の→矢印 @mixin linkIcon($color: #333){ &:before { content: ""; position: absolute; top: 50%; right: 15px; width: 10px; height: 10px; margin-top: -7px; border-top: 3px solid $color; border-right: 3px solid $color; @each $prefix in $setPrefix { #{$prefix}transform: rotate(45deg); } } }
ul.linkList { margin: 20px; li { list-style: none; margin: 0 0 1px; a { position: relative; display: block; padding: 15px { right: 27px; } background: #eee; color: #333; text-decoration: none; @include linkIcon(); } } }
ul.linkList { margin: 20px; } ul.linkList li { list-style: none; margin: 0 0 1px; } ul.linkList li a { position: relative; display: block; padding: 15px; padding-right: 27px; background: #eee; color: #333; text-decoration: none; } ul.linkList li a:before { content: ""; position: absolute; top: 50%; right: 15px; width: 10px; height: 10px; margin-top: -7px; border-top: 3px solid rgba(0, 0, 139, 0.8); border-right: 3px solid rgba(0, 0, 139, 0.8); -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -o-transform: rotate(45deg); transform: rotate(45deg); }
Retinaディスプレイなど、高解像度端末の対応を楽にする
// 付与するベンダープレフィックス $setPrefix: -webkit-, -moz-, -o-, null; // background-size @mixin bg_size($w, $h: auto) { @each $prefix in $setPrefix { #{$prefix}background-size: $w $h; } }
body { background: #fff url(../img/bg_logo.png) no-repeat fixed; @media screen and (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 2dppx) { @include bg_size(690px / 2, auto); } }
body { background: white url(../img/bg_logo.png) no-repeat fixed; } @media screen and (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 2dppx) { body { -webkit-background-size: 345px auto; -moz-background-size: 345px auto; -o-background-size: 345px auto; background-size: 345px auto; } }
レスポンシブWebデザイン対応で楽をするため、@content を活用する
@media only screen and (min-width : 321px) { #main { margin: 0; } } @media all and (orientation:landscape) { #main { margin: 0; } }
@mixin yoko { @media all and (orientation:landscape) { @content; } } @mixin tate { @media all and (orientation:portrait) { @content; } }
.item { width: 50%; @include tate { width: 100%; } @include yoko { width: 25%; } .image { @include tate { width: 150px; } @include yoko { float: left; } } }
.item { width: 50%; } @media all and (orientation: portrait) { .item { width: 100%; } } @media all and (orientation: landscape) { .item { width: 25%; } } @media all and (orientation: portrait) { .item .image { width: 150px; } } @media all and (orientation: landscape) { .item .image { float: left; } }
// ブレイクポイントを設定 $bp-tablet: 1024px; $bp-sp: 640px; $bp-iphone: 320px; // メディアクエリ用のミックスイン @mixin media($media-width) { @if $media-width == sp { @media only screen and (max-width: $bp-sp) { @content; } } @else if $media-width == iphone { @media only screen and (max-width: $bp-iphone) { @content; } } @else if $media-width == tablet { @media only screen and (max-width: $bp-tablet) { @content; } } }
#main { float: left; width: 610px; padding: 15px; background: #f1f1f1; @include media(tablet) { float: none; margin: 0 auto; } @include media(sp) { width: auto; margin: 0 10px; } @include media(iphone) { width: 100%; margin: 0; } }
#main { float: left; width: 610px; padding: 15px; background: #f1f1f1; } @media only screen and (max-width: 1024px) { #main { float: none; margin: 0 auto; } } @media only screen and (max-width: 640px) { #main { width: auto; margin: 0 10px; } } @media only screen and (max-width: 320px) { #main { width: 100%; margin: 0; } }