トランスビット
トランスビットの開発ノート Webサイト制作に役立つTipsやトラブルシューティングなどの備忘録 - 制作ツール -

jQueryのドロワープラグインSlidebarsが、Androidでちょっとした問題を起こしていた件について

仕事が終わってまったりしていたら、トランスビットの外の人に「これ原因突き止めといて。じゃ、出かけてくるから!」って投げられた宿題の話です。

AndroidのChromeでページを一気にスクロールさせていると、footerを表示するあたりで一セクション前の部分まで勝手にスクロールして戻ってしまうので、正常な状態に直す。

他のデバイスではなんともないので、cssかscriptだろうとあたりをつけて探っていくと、Slidebars(2系)でした。
スクロールするのみでドロワーメニューをタップしていないにもかかわらず、slidebars.jsが動いて何らかの処理をしてしまう……。
ということで、slidebars.jsを見ていくと、一番最後にありました!

//459行目(最後から2行目)をコメントアウト

//$( window ).on( 'resize', this.css.bind( this ) );

PCでウインドウ幅を狭めてスマホ版表示にした時、ドロワー表示用のボタンが出てくるようになっています。
このドロワー表示用のボタンをタップしてドロワーメニューを表示させたままウインドウ幅を広げ、PC版表示にした時、ドロワーメニュー用の領域をきれいになかったことにしてくれるのが、この一文です。
なので、この一文がないと、ドロワーメニューを表示させたままウインドウ幅を広げPC版表示にした時、ドロワーメニュー用の領域が白い帯として残ってしまいます。

そもそもトランスビットではスマホ版でしかドロワー使わないということもあるのですが、

  • PCでサイト閲覧してて
  • 320pxまでウインドウ幅狭めてスマホ表示にして
  • ドロワー出して
  • 更にそのままウインドウ幅広げてPC表示に戻したりする

そんな人はいないんじゃないか?

という性善説で、トランスビットでは459行目をコメントアウトして問題なしとなりました。
これで宿題クリアです。

Androidでスクロールすると、ウインドウ再描画してるみたいやなーって思うときがあったんですが、リサイズしてたんですね。
cssやscriptの読込順とかなんか色々関係してるんでしょうか……リサイズ……謎です。

Filed under: ,

半年前にEmmet LiveStyleが正式公開されてた件について

半年も気づかなかっただなんて……完全に出遅れた!!orz
と思っていたんですが、意外と気づいてない人の方が多いのかな?あんまり話題になっていないような気もします。

さて、二年ちょっと前、ちょうどこのサイトをリニューアルした頃、Emmet LiveStyleのbeta版を触って遊んだ覚えがあります。確かに便利ではあったんですが、既にcssの記述はSass
(SCSS記法)に移行していたため、拡張子scssのファイルをいじれないEmmet LiveStyleは実用的じゃありませんでした。
ですが、まさしくネックなっていたその部分を克服し、Emmet LiveStyleが正式公開されたそうです。DLは公式からできます。
Emmet LiveStyle 公式サイト

これで、関連づけた.scssをいじれば、ブラウザ(Chrome)をF5しなくても即時反映。
逆もまた然りで、Chromeのデベロッパーズツールでスタイル修正すると、関連づけた.scssに即時反映。

便利!!

まだ少ししか触ってないのですが問題なく動いてくれたので、次のコーディングが楽しみになってきました。

—–
(追記 2016/10/19)

その後、わくわくしながらEmmet LiveStyle使ってみました。今からもう3か月くらい前ですが(笑)
使い心地は、Dreamweaverのcssパネルをいじるかのようなcssコーディングでした。
Sublime Textに出会う前なら、移行してたと思いますが、HayakuやらBourbonやら自分用Mixinやらのぬるま湯に慣れ親しんだ私には、残念ながらまどろっこしくて耐えられず……。
あんまりレビューを見ないと思ったら、私と同じ思いをした人が多かったと……きっとそういうわけだったんですねぇ。なんか悲しい。

実は、Emmet LiveStyleにがっかりした後、構築環境が便利にならないかなーと思ってgulpにも手をだしてみました。
compassより何倍もコンパイルが速いし、オートで画像最適化とかcss最適化とか色々出来て確かに便利なんですけど、プロジェクト毎にgulp用のファイルを用意しなければならなず、管理が煩雑になるのでやめました・というより、決して軽いとは言えないフォルダ、しかも同じものがHDD内に何個もあるなんて、悪!無駄!断捨離断捨離!!というのが本音です。
グループでプロジェクトに当たってるんならいいんでしょうけどねぇ……。
ぴったりの構築環境の構築wって、なかなか難しいです。

Filed under:

Google Fontsで代替フォント3選

あっという間に季節が過ぎてもうすぐ椿さんですね。
「……長い間ブログさぼってるやろ」って先日突っ込まれたトランスビットの中の人です。
無論、気づかれていないなどとは思ってもいませんよ……ええ。

さて、スマホの普及率が高くなったので、どこのサイトでもwebフォントが最早デフォルトのように使われていますね。
トランスビットでは、Windowsでも、Macでも、スマホでも表示できるということで、ポイントとなるような欧文のフォントには、Google Fontsが便利でよく使ってます。
Androidをぶったぎったら、システムフォントのみで済ますことができるんですけど、そういうわけにもいきませんしね。

Google Fontsで使える代替フォントの記事は、ググれば色々でてきます。
ただ、大抵ベーシックな物だけを求めている私には、情報過多。
ということで…

「アレ」と似ているGoogle Fontsの覚書:トランスビットバージョン

ゴシック

ド定番。安定のHelvetica、Arial、Gill Sans →  Open Sans または Lato

セリフ系

電話番号にも最適。みんな大好きTimes New Roman → Lusitana

その他

一気に溢れる品の良さ。碑文体のOptima → Cinzel

ゴシックの場合、Open SansよりLatoの方がすっきりしてて好みです。
両方とも選べるくらいウエイトがあるので、Arial Blackの代わりにも。
数字だけOpen Sanを使ったりもするんですが、そんな時は下記のようにパラメータを与えてサブセット化すると、軽量になって素敵。

<link href='https://fonts.googleapis.com/css?family=Open+Sans&text=089623-' rel='stylesheet' type='text/css'>

セリフ系は書体数が結構あるんですが、Lusitanaは字面から字詰めまでTimes New Romanに酷似しています。
Cinzelは……ほんと、よくぞ無料で提供してくださいましたっ!(TT)

今後も代替フォントを見つけたら、書き留めていきたいと思います。
——
追記(2016/07/06)

セリフ系の電話番号

A-OTFリュウミン → Vidaloka

Filed under: ,

iPhone5、6、6+を判別した上でviewportを最適化

こんにちは。一ヶ月ほど前にiPhone6無印を支給されたトランスビットの中の人です。

外)「これで、い つ で も 実機で確認できるから」
中)「……そうですネ(外堀埋められた気分)」

さて、レスポンシブで組むのに慣れてきたと思っていても、色々な問題に出くわします。
その度にちぎっては投げ、ちぎっては投げ……今回はiPhoneのviewport絡みです。

基本的にトランスビットの外の人は幅320pxでスマホ用縦デザインをあげてきます。
いつももっと大きいけど、仮にPC用デザインは幅1024pxとし、画面サイズ480px(スマホ横)からはPC用デザインで表示するとしましょう。
iPhone5以下、6、6+でそれぞれ画面幅が違うので、各デバイスで同一表示になるよう調整します。
※Androidぶったぎりコード

jQuery(function($){

/* ==============================================================================
   0. ユーザーエージェントタブレット・スマホの二極で取得
 ================================================================================ */
var _ua = (function(u){
  return {
    Tablet:(u.indexOf("windows") != -1 && u.indexOf("touch") != -1)
    || u.indexOf("ipad") != -1
    || (u.indexOf("android") != -1 && u.indexOf("mobile") == -1)
    || (u.indexOf("firefox") != -1 && u.indexOf("tablet") != -1)
    || u.indexOf("kindle") != -1
    || u.indexOf("silk") != -1
    || u.indexOf("playbook") != -1,
    Mobile:(u.indexOf("windows") != -1 && u.indexOf("phone") != -1)
    || u.indexOf("iphone") != -1
    || u.indexOf("ipod") != -1
    || (u.indexOf("android") != -1 && u.indexOf("mobile") != -1)
    || (u.indexOf("firefox") != -1 && u.indexOf("mobile") != -1)
    || u.indexOf("blackberry") != -1
  }
})(window.navigator.userAgent.toLowerCase());

/* ==============================================================================
   1. まずはviewportの変数を設定
 ================================================================================ */
if(navigator.userAgent.indexOf('iPhone') > 0){
  // iPhoneの場合
  if(window.devicePixelRatio == 3) {
      // iPhone6+
      var vpSp = 'width=320px,initial-scale=1.293750,maximum-scale=1.293750,user-scalable=0';
    }else if(window.devicePixelRatio <= 2){
      // iPhone6以下なら
      var height_num = screen.height * window.devicePixelRatio;
      if( height_num > 1136){
        // iPhone6
        var vpSp = 'width=320px,initial-scale=1.171875,maximum-scale=1.171875,user-scalable=0';
      }else{
        // iPhone5+以下
        var vpSp = 'width=320px,initial-scale=1,maximum-scale=1,user-scalable=0';
      }
    }
  }else{
    // iPhoneに非ず
    var vpSp = 'width=320px,initial-scale=1, maximum-scale=1, user-scalable=0';
}

/* ==============================================================================
   2. 次に、viewportの設定
 ================================================================================ */
 var vpPc = 'width=1024px';
  if(_ua.Mobile){ // スマホ用viewportの設定
    // 初期設定
    $('head').prepend('<meta name="viewport" content="' + vpSp + '">');

    $(window).on("orientationchange", function() {
        // 傾き検出
        if(Math.abs(window.orientation) === 90) {
          // 横向き
          $('meta[name=viewport]').remove();
          $('head').prepend('<meta name="viewport" content="' + vpPc + '">');
        } else {
          // 縦向き
          $('meta[name=viewport]').remove();
          $('head').prepend('<meta name="viewport" content="' + vpSp + '">');
        }
      });

  }else{ // PC用viewportの設定
    // 初期設定
    $('head').prepend('<meta name="viewport" content="' + vpPc+ '">');
  }

/* ==============================================================================
   3. 最後に、ウインドウリサイズ時のviewportの設定
 ================================================================================ */
  $(window).on("resize", function() {
    if( window.matchMedia("(max-width: 479px)").matches ){
      $('meta[name=viewport]').remove();
      $('head').prepend('<meta name="viewport" content="' + vpSp + '">');
    }
    if( window.matchMedia("(min-width: 480px)").matches ){
      $('meta[name=viewport]').remove();
      $('head').prepend('<meta name="viewport" content="' + vpPc + '">');
    }
  });
});

色んな方が書いてくださったscriptを、適当に繋ぎ合わせて動かしてるんですが……。

↓↓ いつも一方的に勝手にお世話になっていて、今回もお世話になった方々のブログ記事 ↓↓
2015年版JavaScriptユーザエージェント判別・判定
JavaScript(jQuery)とCSSでiPhone6 Plusを判別するいろいろ
iPhone 5S 以前だけでなく、iPhone 6 や iPhone 6 Plus でも幅320pxでスケールを固定する方法

みんなこういうのどうしてるんだろう……もしかして、もっとスマートな方法があるんだろうか。
ハナからリキッドデザインなんだろうか……。
ちなみに、私はこのコードの中にハンバーガーメニュー用のスライドトグルを初めとし、「スマホデザインで使う関数や色々」とか、「PC用で使う諸々」とかも、2のとこで一緒にぶち込み、ごった煮にしてます。

今更ながら、$(‘meta[name=viewport]’).remove();から$(‘head’).prepend~の下りを、attrで処理した方が数行稼げる気もするのですが、明日にしてもう寝ます。
ちなみに…。

$(window).on("load orientationchange resize", function() {}

こんな風に、ロードもリロードも傾き変化も、全部くくってしまうと設定がまとまって見やすいです。
何故か、後々別々にわけて動かす必要性が出てくるんですけどね……私だけ?

Filed under: , ,

Dreamweaverを捨てきれない理由

お陰様で、昨日子供が卒園しました。
幼稚園で使っていた制服だとか物だとかは半分以上片付けたのですが、捨てることができない物って意外とたくさんありますね。特に、絵なんかは親から見て微笑ましい物が多いので、月替わりで飾ろうかなーとか思って、クローゼットの上の方にしまっておきました。額買わないと……!(親馬鹿)

捨てきれないと言えば、Dreamweaver。
Dreamweaverは、私がSublime Text 2(今は3使ってますが)を使い始めるまでのメインエディタでした。使用暦は、12年くらいになるかも。
確か、cs4あたりからZen-Coding(後継はEmmet)を入れて使ってました。

さて、まずはDreamweaverの欠点から。

  1. 重い
  2. 落ちる

どっちも開発ツールとしては致命的。
保存時にエラー出して固まったりするので、洒落になりません。頻度も多すぎました。

次に、Dreamweaverの良いところ。

  1. プレビュー機能
  2. 強力なサイト管理機能(リンク保持や単体ファイルの検出、テンプレート機能)

プレビュー機能は、マルチディスプレイ環境ならブラウザを常に表示しておく領域が確保できるから要らないって人もいるでしょうが、そうでない場合、どのみちブラウザで確認するとはいえ、あったら便利です。

ただ、フォントサイズの指定にremを用いていると、デザインビューは崩壊としか言いようのない状態になります。
私がメインで使っていた最後のバージョンはCC無印で、ライブビューからの編集はできなかったし、あまり正確でないプレビュー(css3の対応がいまいち)だったので、ブラウザで確認とっていましたが、CC (2014)ではライブビューからの各種修正もできるようになっています。もちろん、css3の疑似セレクタもきちんと理解してくれます。

今ではWordpressの案件がほとんどなのと、それ以外の案件は数ページの小規模サイトが多いのであまり起動することもありませんが、静的ファイル全体のリンク構成を保ちつつ、特定ファイルを別階層に移動……みたいな作業が必要なときは、Dreamweaver一択です。きっと、替わりになるものはないんじゃないでしょうか。
これまでにたくさんのサイトをテンプレート機能を使って作ってきたので、それらサイトの修正にも必要……ということで、Dreamweaverは当分ランチャーの隅に居座りそうです。

Filed under: