sass」タグアーカイブ

sassの@extend でのエラー(SASS記法とおもったら、@mediaの外側は無理みたい。

sassの@extend でのエラー(SASS記法とおもったら、@mediaの外側は無理みたい。

なぜかエラーがでいて、 みたら@mediaの外側はダメらしい。><

You may not @extend an outer selector from within @media.
You may only @extend selectors within the same directive.
From "@extend .ttl-simple" on line 965 of sass/main.sass on line 90 of sass/main.sass

sassのfunctionで戻り値に()かっこを使った場合に、スペースが入ってしまうのを解消するのは + (コンパイラによっては)

sassのfunctionで戻り値に()かっこを使った場合に、スペースが入ってしまうのを解消するのは + (コンパイラによっては)

以下の用な関数を作ってコンパイルした時に余分なスペースが入ってun validなCSSになってしまってましたが、戻り値を+で連結するとスペースが入らずvalidになりました。(※gulp-sassを使っての環境でのこと)

(以下 sass記法です)

[関数]

@function px2vw($num)
    @return ($num/1024*100)vw

[使い方]

div
    width : px2vw(500)

[コンパイル結果:期待値]

div{
    width : 48.828125vw
}

[コンパイル結果:実際]

div{
    width : 48.828125 vw
}

orz.. vwの前にスペースが入ってエラー。。

[解決方法]

@function px2vw($num)
    @return ($num/1024*100)vw

あと以前はPHPStorm上で、Compassを使ってコンパイルしていた場合は出ませんでした。

remとvwを利用した文字サイズの変更方法、vwを使ってレイアウトをほぼ完全に保つ。

remとvwを利用した文字サイズの変更方法、vwを使ってレイアウトをほぼ完全に保つ。

※以下の方法は、効率的で生産性の高い方法を考えた方法で、ベストではありません。

いろいろレスポンシブなサイトを作ってきて、効率的で生産性の高いほうほうをさぐっていくうちに、以下のよううなレスポンシブの作りを良くします。(私はフロントエンド係)

  • PCファースト(どうしてもデザインがPC先行とか)
  • PXは基本pxで組む。
  • 文字サイズはhtmlに10pxを指定、bodyに14px、その他はremにて指定。
  • Tabletは基本PCと全く同じレイアウトでiPad縦まで引きずる(文字サイズ14pxまでならなんとか読める)
  • SmartPhoneはレイアウト変更して組む。

PCファースト

まずPCは何も考えずに基本pxで組んでいきます。注意する点は以下の2点だけ。

  • 文字サイズはhtmlに10pxを指定、bodyに14px、その他はremにて指定 >> 後々重要
  • スマホのレイアウトが実現可能なタグづけをする。

とそのままマークアップ、スタイリングします。

Tabletのレイアウト(基本PCと同じレイアウトにする)

まずどのように同じレイアウトを保つかというとvwの単位をうまく使います。
ブレークポイントを設定して単位のpxをvwに置換していくわけですが、まずPCのコンテンツの幅を1024pxだとした場合の値の求め方は、

vw = PCでの幅(px) / 1024 * 100

となります。これをすべて手動で計算は無いので、以下のようなfunctionを使います。

@function px2vwTablet($num){
    @return ($num/$breakPointTablet*100)vw
}

sassのコードは

.wrapper{
    width :  500px;
    @media screen and (max-width: 1024px) {
        width : px2vwTablet(500)
    }
}

とすると、PC〜Tabletのレイアウトを同一に保持できます。
次は文字サイズを基本PCではpx、タブレットではvwにする方法は以下の通り

html{
    font-size: 10px;
    @media screen and (max-width: 1024px) {
        font-size: px2vwTablet(10)
    }
}
body{
    font-size: 1.4rem;
}

このすべてpx > vwに置換していけばPCのレイアウトがそのままタブレットに引き継切できます。
SPについてはPCのレイアウトをそのままで引き継ぐわけには行かないので、通常のレスポンシブの組み方で組んで行ってます。(これでいいのか。。悩

gulpのsass,scssのコンパイルの高速化(LibSassをつかって)

gulpのsass,scssのコンパイルの高速化(LibSassをつかって)

これまではcompass+sassをgulpのタスクランナーで利用していてコンパイルが重くなってきたのでより高速で快適な環境にするため、良いという噂のLibsassを使った環境に変更してみました。

CompassをLibsassとAutoprefixerの環境に変更

基本的なコンパイルは Libsassを使えるgulpのライブラリ’gulp-sass’をつかいます。
またベンダープリフィックスの自動付与もgulpのライブラリ’gulp-autoprefixer’を使います。
合わせてインストール。

$ npm install gulp-sass --save-dev
$ npm install --save-dev gulp-autoprefixer

gulpfile.js

ディレクトリ構成は以下を想定

webroot/
    css/コンパイルされたcss
    scss/コンパイル前のcscc

gulpfile.js 最少構成

var gulp = require( 'gulp' ),
    sass = require('gulp-sass'),
    autoprefixer = require('gulp-autoprefixer');

gulp.task('scss',function(){
  gulp.src('scss/**/*.scss')
    .pipe(
      sass({
        outputStyle: 'compressed'
      })
    .pipe(autoprefixer({
          browsers: ['last 2 versions'],
          cascade: false
    }))
    .pipe(gulp.dest('css'));
});
gulp.task('watch', function() {
  gulp.watch('sass/**/*.scss', ['scss']);
});

ターミナルからgulpを実行してwatchして完了だいぶ高速になり、快適になりました。

$ gulp watch
[12:54:32] Using gulpfile your/project/path/gulpfile.js
[12:54:32] Starting 'watch'...
[12:54:32] Finished 'watch' after 11 ms

以下のようなスピード感。(msとか、μsとか1秒以内)

参考サイト

gulp-sass
gulp-autoprefixer
「compass」をやめて、爆速「Libsass」に変えたら作業が超捗った件。

Sass記法,FlexBox,Compassでよく使う書き方メモ

Sass記法,FlexBox,Compassでよく使う書き方メモ

世の中SCSS記法がありふれてるのですが、小規模一人Web開発がおいので、より効率的なSASS記法+Compassをつかっています。あまりサンプルも落ちていなくよく忘れがちなので記法をメモ。

CSS(SASS記法)

@import compass
.row
    +flex-wrap(wrap)
    +flexbox((display: box,box-orient: horizontal), $version: 1)
    +flexbox((display: flexbox,flex-direction: row), $version: 2)
    +flexbox((display: flex,flex-direction: row))
.row.row-nowrap
    +flex-wrap(nowrap)

HTML

<!-- 折り返し有り -->
<ul class="row">
    <li>要素</li>
    <li>要素</li>
    <li>要素</li> 
    <li>要素</li>
    <li>要素</li>
    <li>要素</li> 
    <li>要素</li>
    <li>要素</li>
    <li>要素</li> 
</ul>
<!-- 折り返しなし -->
<ul class="row row-nowrap">
    <li>要素</li>
    <li>要素</li>
    <li>要素</li> 
    <li>要素</li>
    <li>要素</li>
    <li>要素</li> 
</ul>