みなさんこんにちは、山本です。

今回のお題は、「愛○会病院風にしよう」に決めました。

さて、作るにあたって一からというのもありなのですが、生憎と私はデザイナーでなければ、コーダーでもありません。

プログラマなので、既にある他所様のサイトをより愛○会病院風にするようにしようと思います。

仕様

  • URLを自由入力出来る。
  • 入力した対象のページを愛○会病院風にする。

を考えております。

そういえば、元ネタの某愛○会病院様のサイトが、惜しまれつつも2013年に閉鎖されてしましたね。
そして、そのサイトが最近リニューアルされました。
以前ほどの衝撃がなく、とても残念でした。。。

背景

まずは、背景を調整してみましょう。

愛○会病院風は黒一色です。
異論は認めません。

なので、背景を黒く塗り、文字を白くします。

blog_005

サンプル001

(function($) {
  $(window).load(function(){
    $('*').css({background: 'none', color : '#fff'});
  });
})(jQuery);

シンプルで目に優しい見映えになりました。

点滅

次に必要なものはなにか。

色々足りないものだらけですが、ひとまず文字を「点滅」させるべきなのではないでしょうか。

幸いにして、htmlにはblinkという、素晴らしいタグが用意されています。

早速使ってみましょう。

点滅テスト

あれ?点滅しない。

えーと、困ったらドキュメントを見てみましょう。
ドキュメント

Chrome 未サポート
Firefox (Gecko) 未サポート [1]
Internet Explorer 未サポート
Opera 未サポート [2]
Safari (WebKit) 未サポート

[1] バージョン 22 までサポートしていました。バージョン 23 で削除しました。
[2] バージョン 12.1 までサポートしていました。バージョン 15.0 で削除しました。

Firefoxは23から非対応になったんですね。。。。

OK、よく分かりました。

無いのならば、作ればいいんです。

動きとしては、jsで一定間隔で対象を、fadeIn、fadeOutを繰り返せば、点滅するでしょう。

はい、作りました。

サンプル002

いい感じに、文字が点滅していますね。

ですが、これだけでは物足りません。
そう、圧倒的に色が足りません。なので、もっと一杯色を使って目立たせようと思います。

そして強調するのであれば、ビビットな色が良いと思われますので、以下の色を採用しましょう。

  • cyan
  • red
  • blue
  • lawngreen
  • magenta
  • yellow
  • pink

そして毎回同じ色では面白くありませんので、候補の色からランダムで出すようにしましょう。

サンプル003

いい感じで目立つようになりました。

これで良しと思ったのですが、ここで隣の席のデザイナーM氏にダメ出しをされました。

愛○会病院風はそんな滑らかに色が変わるイメージじゃない。

なるほど!

指摘を受けて、何が足りないかがようやく理解出来ました。

サンプル004

  var colors = ['cyan', 'red', 'blue', 'lawngreen', 'magenta', 'yellow', 'pink'];

  var randomColor = function(count){
    var ret = [];
    var c   = colors.concat();
    for (var i = 0; i < count; i++){
      var key = Math.floor(Math.random() * c.length);
      ret.push(c[key]);
      c.splice(key, 1);
    }

    return count == 1 ? ret.shift() : ret;
  };

  $.fn.blink = function() {
    $(this).each(function(){
      if (!$(this).find('img').size()){
        var target = ($(this).find('a').size()) ? $(this).find('a') : $(this);
        target.addClass('used blink').css('color', randomColor(1));
      }

      setTimeout(function(self){
        setInterval(function(self){
          if (self.css('visibility') != 'hidden'){
            self.css('visibility', 'hidden');
          }
          else{
            self.css('visibility', 'visible');
          }
        }, 150, self);
      }, Math.floor(Math.random() * 200), $(this));
    })
  };

如何でしょう、いい感じになったんじゃないかと思います。

文字サイズ

点滅は出来ました。
次は文字の大きさです。

やはり見出しが小さいと目立たないと思います。

ですが、ただ大きいだけではオサレさが足りないとも思います。

そう、大きくしたり、小さくしたりを繰り返せばよいのです!

やってみました。

サンプル005

方向はとても良いのですが、画面の高さが変わるのはあまり良く無い気がします。

なので、高さは変わらないように調整します。

サンプル006

  $.fn.expansion = function() {
    $(this).each(function(){
      $(this).addClass('used expansion').css('color', randomColor(1)).children('*').css('color', randomColor(1));

      $(this).attr('data-font-size', $(this).css('fontSize'))
        .css({fontSize: parseInt($(this).css('fontSize')) * 3})
        .css({width: $(this).width(), height: $(this).height()})
        .css({fontSize: parseInt($(this).attr('data-font-size'))});

      setTimeout(function(self){
        setInterval(function(self){
          if (parseInt(self.css('font-size')) <= parseInt(self.attr('data-font-size'))){
            self.css('font-size', parseInt(self.attr('data-font-size')) * 3);
          }
          else{
            self.css('font-size', self.attr('data-font-size'));
          }
        }, 150, self);
      }, Math.floor(Math.random() * 500), $(this));
    })
  };

これでこの見出しを見落とす人いなくなりました。

マーキー

Blinkをやった以上、次はマーキーが書かせません。

ですが、Blinkのように廃止されている可能性がありますので、先にドキュメントを確認します。

ドキュメント

Chrome 1
Firefox (Gecko) 1.0 (1.7 or earlier)
Internet Explorer 2
Opera 7.2
Safari 1.2

よかった、廃止されていません。

ただ見る限り、いつなくなってもおかしくなさそうです。
全く、良い物はすぐなくなってしまいますね。

さて、調べるとCSS3でマーキーが出来るようなので、それで対応します。

.marquee{
    overflow:hidden;
}
.marquee div{
    width:100%;
    text-align:center;
    display:inline-block;
    white-space:nowrap;

    -moz-animation-duration: 5s;
    -moz-animation-name: marquee;
    -moz-animation-iteration-count: infinite;
    -moz-animation-timing-function: linear;

    -webkit-animation-duration: 5s;
    -webkit-animation-name: marquee;
    -webkit-animation-iteration-count: infinite;
    -webkit-animation-timing-function: linear;

    -ms-animation-duration: 5s;
    -ms-animation-name: marquee;
    -ms-animation-iteration-count: infinite;
    -ms-animation-timing-function: linear;

    -o-animation-duration: 5s;
    -o-animation-name: marquee;
    -o-animation-iteration-count: infinite;
    -o-animation-timing-function: linear;
}
@-webkit-keyframes marquee {
    from {margin-left: 100%; width: 100%; }
    to { margin-left: -100%; width: 100%; }
}
@-moz-keyframes marquee {
    from {margin-left: 100%; width: 100%; }
    to { margin-left: -100%; width: 100%; }
}
@-ms-keyframes marquee {
    from {margin-left: 100%; width: 100%; }
    to { margin-left: -100%; width: 100%; }
}
@-o-keyframes marquee {
    from {margin-left: 100%; width: 100%; }
    to { margin-left: -100%; width: 100%; }
}

サンプル007

枠線

かなり良くなってきました、ですが右側が少し寂しい気がします。

なので、枠線を付けてみようと思います。

枠線も細いと物足りませんし、そして色が一色だけでもつまらないと思いますので、多彩な色を使ってみましょう。

他にも、色がいつも同じでは楽しくありませんので、色が常に変わるようにしましょう。

サンプル008

  $.fn.frame = function() {
    $(this).each(function(){
      var c = randomColor(4);

      if (!$(this).find('table').size()){
        $(this).addClass('used frame');

        $(this).css({
          'border-left-color'   : c[0],
          'border-right-color'  : c[1],
          'border-top-color'    : c[2],
          'border-bottom-color' : c[3]
        });

        setInterval(function(self){
          var c = [
            self.css('border-left-color'),
            self.css('border-right-color'),
            self.css('border-top-color'),
            self.css('border-bottom-color')
          ];

          self.css({
            'border-left-color'   : c[3],
            'border-right-color'  : c[0],
            'border-top-color'    : c[1],
            'border-bottom-color' : c[2]
          });

        }, 200 + Math.floor(Math.random() * 50), $(this));
      }
    })
  };

これでようやく、右側の寂しさが改善されました。

色の移ろいで、ユーザの目を釘付けにすることでしょう。

文字色

最後に気になるのが文字色です。

なんというか、白が多すぎですね。

なので、ランダムで色をつけましょう。

ランダムだけでは、今までと同じですので、一文字だけ色を変えてみます。
そして、色が変わる文字も変化するようにしてみましょう。

サンプル009

文字もまた、移ろいゆくようになりました。

ですが、まだ足りません。

一文字だけ色が変わるのもいいのですが、他にもバリエーションがあっても良い気がします。

なので、四文字ごと色が変わる調整を行い、ランダムで一文字か四文字変化かが選ばれるように調整しました。

サンプル010

  $.fn.wave = function() {
    $(this).each(function(){
      if (!$(this).children('*').size() && !$(this).parent('.used').size()){
        var w = $(this).html().split('');
        for (i in w){
          if (w[i] != ''){
            w[i] = '<w class="inner">'+w[i]+'</w>';
          }
        }

        if (Math.round(Math.random()) && w.length > 5){
          var c = randomColor(5);
          $(this).html(w.join('')).addClass('wave used').css('color', c[0]).attr('data-color', [c[1], c[2], c[3], c[4]]);

          $(this).delay(Math.floor(Math.random() * 50)).queue(function(){
            setInterval(function(self){
              var c = self.data('color').split(',');
              var $elems = self.children('w');
              var currentIndex = $elems.index($elems.filter('.active'));
              nextIndex = currentIndex < 0 ? 0 : currentIndex + 1;

              $elems.removeClass('active').css('color', '').eq(nextIndex).addClass('active');
              for(var i = 0; i < 4; i++){
                $elems.eq(nextIndex).css('color', c[i]);
                nextIndex = nextIndex + 1 >= $elems.size() ? 0 : nextIndex + 1;
              }

            }, 50 + Math.floor(Math.random() * 50), $(this));
          });
        }
        else{
          var c = randomColor(2);
          $(this).html(w.join('')).addClass('wave used').css('color', c[0]).attr('data-color', c[1]);

          $(this).delay(Math.floor(Math.random() * 50)).queue(function(){
            setInterval(function(self){
              var currentIndex = self.children('w').index(self.children('w.active'));
              var nextIndex    = currentIndex < 0 ? 0 : ++currentIndex;
              self.children('w').removeClass('active').css('color', '').eq(nextIndex).addClass('active').css('color', self.attr('data-color'));
            }, 50 + Math.floor(Math.random() * 50), $(this));
          });
        }
      }
    });
  };

かなり、本物に近づいたのではないかと思います。

使ってみる

ようやく完成したので、他のサイトも見てましょう。

yahoo見るの数年ぶりなのですが、中々いい感じで染まりますね。

h1~5タグが無い為か、少々物足りない動きですね。

下の方はいいですね。
ただ上の方は、要素が少ないせいかちょっと面白くないですね。。。

まあ、なんというか苦手なサイトもあるってことですね。

皆さんも、お好きなサイトで試してみてください。

愛○会病院化ツール

まとめ

ここまで、作ってみての感想なのですが

  • 目が痛い
  • 頭がいたい
  • 気持ち悪い(吐きそう)

少しオサレ過ぎたかもしれません。。。

気を取り直して、今回作ったものはjsとCSSを読み込むだけでも動くものなので、ご自身のサイトを愛○会病院風にされたい方は、組み込まれては如何でしょうか?

js

css