やっぱりWebが好き

レスポンシブコーディングのスニペットいろいろ

コーディングを自身でやることは少なくなってきたけれど、勘が廃れないように今でも時々デザインしたり、コーディングしたりってのも大事にしてます。たまにデザインやコーディングをするのは気分転換にもなるし、新しいテクニックを知っておくことだってまだまだ大切だと思うし。
今の僕は、作る仕事はできる限り任せる立場だと思うので、あくまでもやり過ぎない程度に、って考えてますけど。というわけで、最近覚えたスニペットまとめ。

スポンシブでサイトを作ることが増えています。
予算やスケジュール、または技術的な問題など、レスポンシブで構築するのが難しいケースもありますが、今の僕はできる限りレスポンシブ優先で考えたいと思っています。
ワンソースで考えたほうが運用は効率的だと思うから。

Writing Modeは僕にとってレスポンシブデビューだったサイトで、今思うと「こうしておけばよかった」ってところはいっぱいあります。その後いくつかレスポンシブでサイトを作ってみて、よく使うスニペットだったり、覚えておくと便利なプラグインをいくつか蓄積してきてます。
そんなわけで、今回はレスポンシブコーディングのスニペットを備忘録としてまとめてみました。

JavaScriptで画面幅を計算するとき

CSSではMedia Queriesを使って以下のように画面幅によってスタイルを変えます。

/* 画面幅1000pxまで */
@media screen and (max-width:1000px) {
/* スタイルを記述 */
}

/* 画面幅320pxから640pxまで */
@media screen (min-width:320px) and (max-width:640px) {
/* スタイルを記述 */
}

jQueryでやる場合は、$(window).width(); で画面幅を取れますが、ブラウザによってスクロールバーの幅を取れなかったりします。なので、以下のように書いたほうがうまくいきます。

/* 画面幅1000pxまで */
if (window.matchMedia('(max-width:1000px)').matches) {
/* JavaScriptを記述 */
}

/* 画面幅320pxから640pxまで */
if (window.matchMedia('(min-width:320px) and (max-width:640px)').matches) {
/* JavaScriptを記述 */
}

ただし、Window.matchMedia() はIE10以上から対応なので要注意。

画面のリサイズが終わった時にイベントを実行

ブラウザを伸び縮みさせてしまうのはWebデザイナーの性であって普通の人はそんなに頻繁にブラウザの伸び縮みなんてさせないでしょうけど、画面伸縮時の処理を $(window).resize(function() { …とやってしまうと、画面を伸縮させている間じゅう常にイベントが発生してしまいます。
もちろん、画面の伸び縮みと同時に動いてほしいイベントもありますが、画面がリサイズした後に走ればいいイベントは以下のように書いたほうがブラウザへの負担が少ないでしょう。

var timer = false;
$(window).resize(function() {
  // 画面リサイズ中に同時に行うイベントを記述
  if (timer !== false) {
    clearTimeout(timer);
  }
  timer = setTimeout(function() {
  // 画面サイズが変わり終わったあとに実行するイベントを記述
  }, 200);
});

[jQuery] ウインドウのリサイズ操作が終わった時にだけ処理を実行する | CreativeStyle

スマホ版は改行位置を変えたい時

PC版は意味の区切れがよいところで改行したいけど、スマホ版だとおかしいから改行を無くしたい時ってある。そんなときは、<br>タグを display:none; にすればOK。

br {
display:none;
}

SVG画像の代替表示

ようやく躊躇なくSVGが使えるようになってきた気がします。だけど、IE8はまだ捨てられないかも。
CSSの背景画像なら、IEの条件分岐コメントを使ってIE8以下にだけ代替画像を読ませればよいですね。

<!--[if lte IE 8]>
<!-- ここに書いたコードはIE8以下に適用される -->
<![endif]-->

ちなみにIE9もSVG1.1をフルサポートしているわけではないみたい。

IE Teamのプログラムマネージャが語るIE9とSVG | Web標準Blog | ミツエーリンクス

あと、<img>タグで書かれたSVGはHTMLを書き換えてやる必要があります。
僕の場合、<img>タグに独自データ属性を使って data-nosvg=’png’ みたいに代替画像の拡張子を指定しといてjQueryで置き換えちゃいます。

HTMLは以下のようなイメージ。

<!-- data-nosvg にSVG画像を書き換える画像の拡張子を指定する(ファイル名はSVGと同じ) -->
<img src="/img/image.svg" data-nosvg="png" alt="代替テキスト" width="100" height="100" />

そしてjQueryはこう。このJavaScriptもやはりIE8以下にだけ読み込ませてやります。

// 拡張子 .svg を data-nosvg で指定した拡張子に置換
$(function() {
  // 画像置換
  $('img').each(function() {
    // data-nosvgに設定した拡張子を取得
    var extension = $(this).attr('data-nosvg');
    if (extension != undefined) {
      // SVG画像を置換
      $(this).attr('src', $(this).attr('src').replace(/^(.+)(\.svg)$/ , '$1.' + extension));
    };
  });
};

SVG画像の圧縮処理

SVG画像の圧縮はComressor.ioが便利。画像によってはファイルサイズが半分ほどになることも

SVGはスケーラブルなので当然キレイなんだけど、ファイルサイズが意外と大きい。というわけで、SVG画像はオンラインツールを使って圧縮しちゃいましょう。

僕は基本的にはComressor.ioを使ってますが、さらに圧縮したい場合はSVGOMGを使えばプレビューを見ながら細かく圧縮設定を施せます。
Comressor.ioを使ってもあまりサイズが小さくならなかった場合にSVGOMGを使ってみるとよいかも。

Compressor.io – optimize and compress your images and photos

SVGOMG – SVGO’s Missing GUI

パンくずをフリックで横スライドするように

最新バージョンのiScroll 5はiOSで上手に動かないみたい。ひとつ前のバージョンだと動くとか

スマホ版デザインでいつも迷うのがパンくずリストをどうするか。
スマホ版はパンくず無くしてよいかな、とも思うけど、意外とパンくずが上部にないと上位階層に戻りにくいUIになっちゃう。そんなわけで、パンくずを横スライドさせちゃったらどうかしら。

スマホサイトでフリックで閲覧するパンくずを実装してみる | こだまする

パンくずリストが長い時に2行とか3行になっちゃうのはいやだから、今はフリックで横スライドが一番いいUIかなと思ってます。

iScroll 4

ブロック要素全体をクリックできるように

かなり古いプラグインですが、ちょくちょく使ってます。便利

HTML5の場合、ブロック要素の外側に<a>タグを書けますが、コーディングの都合で<div>のなかに<a>タグを書いたけど、外側の<div>ごと押させたいことってある。スマホの場合、なるべくタップ領域を大きくとってあげたいし。
そんなときはBiggerlinkというプラグインがオススメです。

div要素もリンクにするjavascript「jquery.biggerlink」

ollicle.com: Biggerlink – jQuery plugin

以上、最近コーディングしててよく使うスニペットやプラグインたちでした。
たまにはこんな備忘録エントリーも。

Comment / Trackback (106)

  1. @kickabout28

    レスポンシブコーディングのスニペットいろいろ - やっぱりWebが好き - Writing Mode http://t.co/ynZ4EXWJvC

    Twitter

  2. @webshabri

    レスポンシブコーディングのスニペットいろいろ - やっぱりWebが好き - Writing Mode http://t.co/QJT76gTd3F

    Twitter

  3. @43news

    レスポンシブコーディングのスニペットいろいろ - やっぱりWebが好き - Writing Mode http://t.co/YMQLTp4Fcy #43news

    Twitter

  4. @OnthenetBuzz

    レスポンシブコーディングのスニペットいろいろ - やっぱりWebが好き - Writing Mode http://t.co/oaLWVIBalB http://t.co/LjeHzRzzAK

    Twitter

  5. @NooKo3_News

    レスポンシブコーディングのスニペットいろいろ - やっぱりWebが好き - Writing Mode - はてぶ http://t.co/h6q3fS311D

    Twitter

  6. @hayashimanami75

    レスポンシブコーディングのスニペットいろいろ - やっぱりWebが好き - Writing Mode http://t.co/Rbqshm4Thi http://t.co/IePa7aOkn6

    Twitter

  7. @a_jennie02146

    レスポンシブコーディングのスニペットいろいろ - やっぱりWebが好き - Writing Mode http://t.co/BQXqqvCaYl #相互フォロー #はてぶ #自動リフォロー

    Twitter

  8. @yuwtahn

    “レスポンシブコーディングのスニペットいろいろ - やっぱりWebが好き - Writing Mode” http://t.co/dATJ5bSHRI

    Twitter

  9. @kirakirajoshi7

    レスポンシブコーディングのスニペットいろいろ - やっぱりWebが好き - Writing Mode http://t.co/4SFTwh7owD http://t.co/sAMIrdC37Q

    Twitter

  10. @nodaseinen2014

    レスポンシブコーディングのスニペットいろいろ - やっぱりWebが好き - Writing Mode http://t.co/NHMMP2HqzO http://t.co/dqNku2xDeS

    Twitter

Leave A Comment

Address never made public