2013年8月31日土曜日

【jQuery】iframe要素をモーダルウィンドウっぽいポップアップで読み込ませる


課題でつかったjQueryの一部を復習かねてまとめます。

こんなかんじで、ある要素をクリックした時点で画面全体をグレーアウトさせるレイヤーとその上にポップアップする外部ファイルを読み込むiframe要素を生成し、グレーアウト部分をクリックするとポップアップもグレーアウトレイヤーも消えて元画面に戻ります。
特にプラグインは必要なく、jQuery本体があれば実装できるつくりになっています。

イメージとしてはこんな感じ。


--------------------------------------------------------------------

HTMLはjQueryが動作しない時、javascriptの動作を許可しないユーザーのために

<a href="URL" target="_blank">リンク文字</a>

と別窓リンクを設定しておきます。
HTMLはこれだけで。

---------------------------------------------------------------------

CSSの設定は以下。

/*グレーアウトのスタイル定義*/
#gray{
background:#000;
opacity:0.8;
width:100%;
height:100%;
position:fixed;
top:0;
left:0;
display:none;
z-index:500;
}

/*ポップアップ部分のスタイル定義*/
#square{
display:block;
width:490px;
height:510px;
z-index:510;
background-color:#fff;
overflow:hidden;
}

#popup{
display:block;
width:490px;
height:510px;
overflow:hidden;
border:none;
}


---------------------------------------------------------------------
以下はjQueryのコード。

$(function(){
 /*-------------------------------
 イベント処理「PopUp」を定義
 --------------------------------*/
 var PopUp = function(){
  //読み込む外部ファイルを取得しておく
  var poplink = ($(this).attr('href'));
  //要素を作成
  $('<div id="gray" class="gray_panel"></div>').appendTo($('#main'));
  $('<div id="square"><iframe id="popup" name="popup"></iframe></div>').appendTo($('#main'))
  .css('display','none');
  //ポップアップを画面中央位置になるよう、位置関係を算出
  var leftposition = Math.floor(($(window).width() - $("#square").width()) / 2);

  //グレー背景をフェードインで表示
  $('#gray')
   .fadeIn("slow")
   .css("display","block");
  //ポップアップ表示領域のスタイル定義
  $('#square')
   .fadeIn("slow")
   .css({
    "position" :"fixed",
    "top"  :"30px",
    "left"  :leftposition,
    "display" :"block",
    "overflow" :"hidden"
   });
  $('#popup')
   //ポップアップ内に外部ファイルを読み込む
   .attr('src',poplink)
   .css({
    "position" :"fixed",
    "top"  :"30px",
    "left"  :leftposition,
    "display" :"block",
    "overflow" :"hidden"
   });

  //クリックして別窓表示という本来の動作をキャンセル
  return false;
 };
 /*-------------------------------
 イベント処理「PopDown」を定義
 --------------------------------*/
 //作成したグレーアウト、iframe、表示領域をフェードアウトさせて削除する
 var PopDown = function(){
  $('#gray,#popup,#square')
   .fadeOut("slow")
   .remove();
 };

 /*-------------------------------
 定義した処理を呼び出す指示
 --------------------------------*/
 //リンクをクリックしたらイベント処理「PopUp」を呼び出し
 $('
リンクの要素名')
  .click(PopUp);
 //グレーアウト部分をクリックしたらイベント処理「PopDown」を呼び出し(追加要素へのイベント処理なのでliveメソッド使用)
 $('#gray').live('click',PopDown);
});

--------------------------------------------------------------------------
ちょこちょこ入れているコメントアウトの通りですが細かく解説をいれると以下のようになります。

1.イベント処理[PopUp]を定義

  //読み込む外部ファイルを取得しておく
  var poplink = ($(this).attr('href'));

ここで、変数poplinkを用意し、クリックした要素(HTMLのリンク文字)が持つリンク先URL(href="URL"のURL)を取得して代入しておきます。
たとえばHTMLで<a href="page1.html" target="_blank">リンク文字</a>としていたら変数poplinkにはpage1.htmlが代入されます。



  //要素を作成
  $('<div id="gray" class="gray_panel"></div>').appendTo($('#main'));
  $('<div id="square"><iframe id="popup" name="popup"></iframe></div>').appendTo($('#main'))
  .css('display','none');

ここでクリックしたときにポップアップしてくる要素を生成します。
ここではグレーアウトさせるためのdiv要素を「gray」、ポップアップするiframeを内包したdiv要素を「square」、外部ファイルを読み込むiframe要素を「popup」とID付しています。
初期状態ではCSS・display:noneで非表示にしています。



 //ポップアップを画面中央位置になるよう、位置関係を算出
  var leftposition = Math.floor(($(window).width() - $("#square").width()) / 2);

これはコメントアウトの通りです。
変数leftpositionに計算式で出した数値を代入します。



 //グレー背景をフェードインで表示
  $('#gray')
   .fadeIn("slow")
   .css("display","block");

ここで画面全体を覆うグレーアウトのdiv要素#grayをfadeInメソッドで表示させます。



//ポップアップ表示領域のスタイル定義
  $('#square')
   .fadeIn("slow")
   .css({
    "position" :"fixed",
    "top"  :"30px",
    "left"  :leftposition,
    "display" :"block",
    "overflow" :"hidden"
   });


ポップアップのiframeを内包したdiv要素・#squareを上記の#grayと同じようにフェードインさせると共に、表示位置をCSSのpositionで設定。ここでpositionのleftに、先ほど用意した変数leftpositionを使います。



$('#popup')
   //ポップアップ内に外部ファイルを読み込む
   .attr('src',poplink)


生成したdivが含むiframe ・「#popup」が読み込む外部ファイルのソースを設定します。
生成した時点では<iframe id="popup" name="popup"></iframe>と、idとname付けしかしていないのでattrメソッドで属性src,値を変数poplinkとして追加します。



 //クリックして別窓表示という本来の動作をキャンセル
  return false;

これもそのまま。javascriptが動作した場合はHTMLに設定している別窓リンクをキャンセルさせます。これって、なんでreturn falseでキャンセルされるのかいまいちわからないまま使っています。(……)



2.イベント処理「PopDown」を定義

//作成したグレーアウト、iframe、表示領域をフェードアウトさせて削除する
 var PopDown = function(){
  $('#gray,#popup,#square')
   .fadeOut("slow")
   .remove();
 };

フェードアウトさせるための処理です。
生成した#gray,#popup,#square三つの要素すべてをフェードアウトして要素を削除します。
この削除がポイント。フェードアウトさせるだけでは、非表示になるだけで、再びリンクをクリックしたタイミングで同一のIDをもつdivやiframeが新たに生成されてしまいます。
単にリンクさせている場合は特に問題なさそうですが、読み込む外部ファイルにアンカーリンクさせていると、アンカーがうまく作動しなくなりました。
なので非表示にさせるタイミングで要素辞自体を一度削除するべきでしょう。



3.定義した処理を呼び出す指示

 //リンクをクリックしたらイベント処理「PopUp」を呼び出し
 $('リンクの要素名')
  .click(PopUp);
 //グレーアウト部分をクリックしたらイベント処理「PopDown」を呼び出し(追加要素へのイベント処理なのでliveメソッド使用)
 $('#gray').live('click',PopDown);
});



リンク文字をクリックした時点、グレーアウトをクリックした時点でそれぞれ定義したイベント処理「PopUp」「PopDown」を呼び出します。
#grayはHTMLのほうにある要素ではなく、jQueryの処理の中で新たに生成・追加した要素なのでliveメソッドを使っています。
このliveメソッドを適用させるタイミングがいまいちわかっておりません。うーん。


---------------------------------------------------------------------------

ざっとこんな感じでした。
HTMLでのリンクで外部ファイルにアンカーリンクを設定していて、removeさせるという考えが全くなく、アンカーが全く効かなくて頭をひねりまくりました。
removeが必要な理由を上で考察しましたが、その理由が正解なのかはわかりません笑

それにiframeを囲むdivも本当に必要だったのか?
iframe要素だけでは成り立たないのか、検証してません。もしかしたら必要ないかもしれません。

いろいろと詰めの甘いソースですが、現在の自分が組めたのはこんなものでした。

2013年8月29日木曜日

課題修了

通っているWEBスクールの最終課題が終了。
ごく簡単なプレゼンと質疑応答があった。他の人の課題を拝見して反省点が噴出。
言い訳を噛ませることはできるんだけど、結局は自分の詰めの甘さが浮き彫りになって情けなく。

一応金魚のECサイトという位置づけだけれども、目的はjQueryの習得でした。
自分が考えたインターフェースを実現させられるか、という自分なりの課題設定で取り組んだ。
ので、これでもかというほどjQueryを実装させている。
結果、商業デザインとしてはなりたたないインターフェースが出来上がった…。
申し訳程度に、更新部分をiframeで外部ファイル化しているだけで、正直拡張性もなく、コーディングも大部分がXHTMLのままで終わり、クロスブラウジングもそこそこの確認でしかなく…という散々な結果に。

それでも当初のイメージをほぼそのまま実現できて、スクリプトも一から組み込んだ部分もあり、単純にプラグインを置いて画像だけ変える、ということに終わらなくて済んだ。
スクリプトを組むということがどういうものなのかを経験できたのが良かったと思う。

今度からは、商業デザインということを考えなくてはならないと思う。
今回の課題サイトを三か月前の自分に納品してガイドラインを用意しても更新作業は困難だと思う。
自分は相手を考えたものづくりをしたかったはず。
サイトを利用する側だけでなく、管理運営する側のことも考えなくちゃ。

合わせてマーケティングに関しても学んでいくことも多い。頑張ろう。

2013年8月19日月曜日

【jQuery】横型コンテンツをイージースクロール【マウスホイール】

jQueryを使って横スクロール

課題サイトで実装したスクロールに関するスクリプトまとめメモ。解説ではないです。
  1. マウスホイールのスクロール方向を横に(プラグイン:「jquery.mousewheel.js」使用)
  2. アンカーリンクをイージースクロールさせる(プラグイン:「jquery.easie.js」使用)
  3. スクロールを余韻を残す動作に変更(上二つのプラグイン併用)

1.マウスホイールのスクロール方向を横にする

二つ前の記事にも記載しましたが、こちらのページを参考にさせていただきました。
プラグイン「jquery.mousewheel.js」を使ってマウスホイールの動作を検知してホイールを上に回した時の処理、下に回した時の処理をそれぞれ設定。

特定の要素上(たとえばテキストエリア上とか)では横スクロールではなく縦スクロールにホイールの挙動を戻したいのを考え中。
(unbindメソッドとか使えばいいのかな?)

2.アンカーリンクをイージースクロールさせる

ページ内リンクをパッと切り替えのように一瞬で飛ぶのではなく、アニメーションでスクロールさせる。
その際、アニメーションの速度や加速を調整するイージング処理を指定できる。jQueryの初期状態ではイージングの種類は「linear」と「swing」しかない。
そこでプラグイン「jquery.easie.js」で様々なイージング処理を追加できる。使い方はhtmlで「jquery.easie.js」を読み込んでおき、アニメーションメソッドのイージング処理指定の部分にプラグインで定義されているイージング処理名をしていするだけ。
イージング処理の種類に関してはこちらのサイトが非常にわかりやすいデモ付きで解説されています。

$(function(){
  $('クリックさせる要素').click(function(){
    $('スクロールさせる要素(bodyなど)').animate({scrollLeft:'0px'},1000,'easieEaseInCubic');
    //.animate({スクロール方向:スクロールをする目的地の数値},スピード,
’イージング処理名’)
    return false;
  })
});


スクロール方向は縦方向ならscrollTop、横方向ならscrollLeftを使用します。いずれもキャメルケースで表記。
スクロールする位置はpositionのtopとleftのようなもの。ピクセル指定。
これはclickした時にanimateメソッドを呼び出し指定した位置までスクロールさせる。
htmlでは通常のアンカーリンクを施しているので、ユーザーがjavascriptを許可しなくても、アンカーリンク自体は動作する。
 

3.スクロールの動作を余韻を残す動作に変更する

これもこちらのページを参考に。
リンク先のページのコードは縦スクロール用なので、scrollTopをscrollLeftに書き換え。

--------------------------------------------------------------------------------
プラグインや公開してくださっている方のコードを使うとなかなかさくっとはいきませんね。
人のコードを読み解きながら実装させていくのは勉強になります。

2013年8月18日日曜日

【困ったメモ】アンカーリンクの位置調整

ちょっとした問題の解決策を探していたけど、なかなか見つからず長期戦になりそうなので後回しにするため、問題把握のためのメモ。

横スクロール型コンテンツの表示領域を950*580にclearfix:hiddenで限定している。この表示領域はposition:relativeとネガティブマージンを使ってウィンドウの上下左右中央寄せにしている。
その表示領域でページ内リンクを利用するとき、リンク先の要素をウィンドウの左端ぴったりに表示するので、思いっきり非表示領域に被ってしまう。

で、じゃあこの非表示部分に被っている分だけマージンを稼いでおけば・・・と考えたんですが(そういう解決方法はたくさんまとめてくれる人がいらっしゃいました)、この表示領域は先述したとおり上下左右中央寄せしているので、被る部分の数値がユーザーの使うディスプレイやブラウザウィンドウの大きさで変わる・・・。

なのでCSSのほうで被る部分の余白を数値で設定しておくのは結局、ウィンドウの大きさを変えればまたズレてしまうのであまり意味はなさそう。
jQueryでアンカーリンクをスムーズスクロールさせているのですが、そこらへんでなんとかならないかなあ。
javascriptでウィンドウ端から表示領域までの距離を検知する方法とかって、ないのかなあ・・・。

スムーススクロールでするするーっと横に移動するのがやりたいんですが、やっぱり作っていると課題が山積みです。

2013年8月17日土曜日

【jQuery】制作中【CSS3】

出遅れている中、課題の金魚ECサイトのコーディング中。
今回は横型のコンテンツなので、ページ遷移などに関して、jQueryを使ってみた。

参考にしたサイトをメモ。

【jQueryでマウスホイールで横にスクロールする横型コンテンツ】

【jQueryでマウスホイールすると余韻が残るイージングスクロールをつくる】

こちらのページを参考にしてjQueryプラグインを使った実装。うーん、ほとんど理解せぬまま動くから、便利だけど、自分で作っておきながらいまいちわかってない不安感。
自分のつくったページを100%理解していたいなんて思ってしまうけど、じゃあそもそもライブラリ使うなって感もあるよな・・・・・・。
ともかく、WEBは惜しみなくその技術をオープンにしてくれる方々のおかげで、こんな自分でも動的コンテンツを作ることができる。とってもありがたいです。

横スクロールで、縦書きのレイアウト部分で出来るなら画像じゃなくテキストとして記述したいと、
WEB上で縦書きを実現する方法はないのかなと探していましたら、ありました。

JavaScript 版 縦書き化ツール「竹取JS」】

こちらはjQueryではなくjsです。
サンプルページがとてもきれい。横/縦書きの切り替えをさせられるのもいい。
今回は結局使わないけれど、機会があったらぜひ使ってみたい。

HTML5の授業の中でCSS3を少しずつ使いだし……
アニメーションロールオーバーが手軽でかっこいい!
透明度調整でなんかイケてる!
角丸いちいちpng画像にしなくてもいいんだ!

と、基礎的なところで感動中。
でも、感動の勢いでついつい無意味に装飾してしまいがちになるので、ほどほどに抑えよう…。
今回は通常の金魚ECサイトにないインターフェースを、というアプローチなので、装飾に凝るのは方向としては間違っていないのですが、機能性を丸無視しちゃあしょうがないですからね。改めてここら辺を念頭に入れておかないと。

PHPの勉強に手が回らない・・・・・・

2013年8月13日火曜日

並行していくこと2

見事に並行できていない。
前回の記事のタイトルが胸に刺さる。

先日無事に自分の行く先が決まった。希望していたWEB職種。
素敵なめぐりあわせに本当に感謝したい。
半月ほどの就職活動で見つかったのも、運が良かったとしか。

おかげでようやく課題に集中できるわけですが……結局、前回の課題と同じほどの作業時間しか残っていない。
はたして形になるのか……なんてのは愚問で、するのです。形に。
しばらく制作ストップしていたので、改めて進行状況を確認しないと…。

気持ちの切り替えを、もっとスマートに。
次の目標は、これですね。

2013年7月27日土曜日

並行していくこと

学校のカリキュラムがDWの操作からjQueryに入った。
まだインストールを終えたところなのでなんとも。数学的思考が全くできない自分には敷居が高いです。
ですが課題作品でモーダルやアニメーションを使う予定であるので、気を引き締めてかからないと。
今のところ課題制作のほうはワイヤーフレームを考えつつ、金魚たちのマスクをじみじみなぞっています。
ビジュアル押しでデザインを考えていると、すぐに機能性を失いそうになるのでサイト設計の難しさを実感中であります。

またぼちぼち就職活動も開始。
やっぱり求人の数が違う。photoshopとillustratorだけのしょぼいスキルだけで求人票を眺めていたころに比べると、未経験者とはいえ応募できるだけ成長したのかなと思います。
もちろん、「実務経験2年以上」の文句を見るたびに、単にスタートラインに立とうとしている程度なのは強く自覚するのですが。

面接でお聞きした話や求人票を見ていると、現場で必要とされている技術は単にHTML+CSS、DW操作に留まらず、PHPやJAVA,javascript(jQueryでなく)も求められているところが多いようです。少数精鋭の制作会社だと当然ですがこの傾向は特に顕著です。
どれも、現在通う学校の授業範囲外・・・たった3か月のコースなのでそこは仕方ないのですが。
講師の先生はとてもわかりやすく教えて下さるし、頼りになる方です。それだけにもっと長く広く深く学校で学べたらなと思ってしまいます。

残念ながらそうもいかないし、もとより職業訓練校は新しい技能習得の足がかりとして、という認識だったので甘えず、独学でも何か一つ、勉強を進めていこうと思いました。

ということでフロントエンドはjQueryを学ぶので、バックエンドを学ぼうと今日図書館で「みるみるPHPがわかる本」を借りてきました。
うーん、なんてやさしそうな題名! 本自体も薄くて入門にはよさそうです。
まだfor構文とは? なんてところをやってるんですが、プログラミングの考え方になれるまで自分は時間がかかりそうです。
とりあえず、黒い画面のコマンドプロンプトをいじくりまわしているだけでテンションが上がるので(パソコンできる人っぽい!)この単純思考のモチベーションを逃さずに少しずつですが勉強を進めていきたいと思います。


関係ないですが、隅田川の花火大会がかわいそうなことになってます。テレ東の中継が大変そうです。

2013年7月18日木曜日

制作開始


ぼちぼち次の課題の制作を開始。
次の課題といっても、通っているスクールは三か月コース。八月末には修了するので、このサイトが最後の制作になる。
学んだことを駆使して……といっても今現在折り返しぐらいなので、まだまだ習っていないことだらけ。それでも授業終わってから考えよーではとてもじゃないが終わらなさそうなので、すこしずつつ準備を始めていく。

今回は自由テーマだったので、金魚の生体販売サイトにした。
金魚…は飼ったことないけれど、好きなので。パスでじみじみなぞるのも楽しそうという……安直?

サイトの構造がぼんやりとまとまってきたのでとりあえず、Fireworksでワイヤーフレームをつくっているところ。
(ちなみに画像に移っている金魚はらんちゅうではない)
前回の花屋のサイト制作で、自分のページの操作性の悪さに作り終わってから気づかされたので、できるだけコンパクトにまとめようと思った。
現在、多くのユーザーのファーストビューは大体1000×600~700px程らしいので、だいたいそんなところにメインコンテンツが収まるように設計していく。
UIを考えて設計することを考えると、IA(インフォメーション・アーキテクチャ)分野について勉強しなくちゃいけないんだろう。うーん…今すぐには取り掛かれそうもないけれど、おいおい関連書籍を読むかなんかしよう。

jQueryとCSS3の透過を積極的に使っていこうと考えているけれど、まだどちらも基礎を勉強していないので、検索でひっかかるtipsを見てもちんぷんかんぷん。
そっちの勉強も合わせると、作るのでいっぱいいっぱいになりそう。残り時間も少ないので、どこかで折り合いをつけなければいけないとは、思っているんですが。そこの選択もまた難しいな。

2013年7月16日火曜日

アナログ人間

四年ぶりに夏を東京で過ごしている。
集合住宅の狭いベランダに出るたびに、この世は地獄だと思う。
日差しが凶悪すぎる。

通学電車で少し時間があるので、できるだけ本を読むようにしている。(50%くらいで睡眠時間になっているけど)
翔泳社の Web制作標準講座・総合コース は知識ゼロの自分には優しく、導入書としてとてもよかった。
最近読んだ スタジオ イースペースの web制作新人育成ガイド は大まかな制作の流れを想像できて、なにより現場のシズル感が伝わるイラストがかわいらしかったな。
今日から読み始めた アーキテクチャの生態系――情報環境はいかに設計されてきたか ですけれども、やばい。これは勉強できる人の文章だ。引用がたくさんあってめまぐるしくて、なんだか若々しい文章だなあと思ったら自分と10しか離れていなかった。
少しずつ、制作スキルだけでなくこういった持っていて当然の知識も勉強していかないといかんなあと思う。

というわけで読むべき本、参考にしたいビジュアル集が多いので、いちいち買っていたらあっという間に生活費がなくなる。
自分一人ならどうとでもなるが家族と同居中なので、生活費は折半なのだ。なんとか倹約しなければ……

とそんな時に助かるのが行政サービス。図書館や産業支援室のようなところへいけば豊富、までいかなくともWeb関連書籍も貸し出してくれる。まだ秋田県に県民税収めている身ですけど…ありがとうございます……。
四年前以前は文庫コーナーや画集コーナーくらいしか立ち寄ったことなかった。お金のかからない勉強法って探せばいくらでもあるんだよなあ。

Webに限って言えばインターネット全てが生きた資料なのだし、個人でまとめてくれている最新のデザイン集やコードが非常にわかりやすく載っていて、その気になればいくらでも吸収できるんですよね。

とはいえ、自分はアナログ的? なのかマウスホイールぐりぐりして液晶に表示されるテキストを読んだり、エディタかなんかにタグをコピペしてまとめておいても、頭に入っていく感覚が薄くて不安になる。
紙をめくる指先に感じる厚みや、整理されていない走り書きのような手書きのノートをシャーペンの芯を折りながら埋めていく感覚が伴っていないと、どうしても自分の中に定着してかないような気がする。
ワイヤーフレームをつくろうとFireworksを開いても、新規のキャンバスを前に呆然とする。やっぱりノートかチラシの裏でもどこでもいいんだけれど、手書きのワンステップがないと非常に進みづらい。
視覚的なものより、どちらかというと、ハプティックなものが重要な気がする。
すぐにデジタルで制作に取り掛かれたら、それはやっぱり効率的なんだろうけど、きっと自分に合ったステップの踏み方なんだろうと前向きに思うことにした。
尊敬する原研哉さんも、ハプティックな感覚器官をもっと積極的に開いて世の中見るべき、というようなことをどこかの著書で言っていたはず……うろ覚えなので今度また読み返そう。

そろそろ次の課題の準備をすすめていかなければ。正直に言うけど怖いです。

2013年7月12日金曜日

Brackets

DreamWeaverの勉強が始まって、あまりの便利さにコードをすべて忘れそうな勢いでビビっている。
なんにせよ、課題を持ち帰っては持っていないので使えないDWの代わりに、同じadobeのオープンソースエディタ、「Brackets」をダウンロードしてみた。

まだしっかり触れていないが、Terapadより便利機能がいっぱいあるみたいだ。
DWを使ってからだと移行が難しそうだが、自分にはまだこれで十分。

Bracketsの特徴と拡張機能についてわかりやすくまとめたページがあった。
家に帰ったらゆっくり見てみる。拡張もしたい。

http://dev.classmethod.jp/etc/review-brackets/

2013年7月10日水曜日

帰り道

課題提出が無事終了。
アップロードした時点で大きなエラーはなかったものの、firefoxで表示ズレがあった。
自宅からは崩れてなかったはずなので、これはバージョン違いの差異なんだろうか。

同じく学んでいる人の作品を閲覧出来る機会があったので、見てみた。

やはり他の人のを見るのは勉強になる。
デザインがいいな、と思うものも機能的なページだと感じるものも、様々。
全てを自分のものと比べて悔しくなるばかり。
これは時間かけても思いつかなかったろうと思う視点での発見が多かった。

何より腹立たしいのはこの作品には遠く及んでいない、と感じたサイトの制作者が経験者だと聞いて、ほっとした自分。
伝統工芸じゃあるまいし、経験値が全てではないのだから、そんなところで納得してはダメだとおもった。
悔しい。
朝の山の手に揺られている時も今日はどうせ悔しい思いをすると考えていたが、案の定。
この情けなさを次に活かすために、どうしたらいいかを考えよう。

生産性のない感情の揺らめきにただ付き合っていられるほど、自分に猶予はないのだから。

2013年7月9日火曜日

ワークフローまとめ(課題1)

課題提出前夜なので、ちょっと振り返りつつ、自分が初めてのwebサイト制作でどんな手順を追ったのか振り返ってみる。


課題は花屋。幅は画面幅1024pxに収まるよう、ページ数は5ページ以上という課題設定だった。

コーディングに使ったのは、XHTML1.0TransitionalとCSS2.1。文字コードはUTF-8。
エディタはTerapad。画像編集はPhotoshop Elements 11と学校のFireWorks CS4。

----------------------------------------------------------

まずはコンセプトイメージを探った。
キーワードを列挙して、どんなサイトにしたいか漠然と書き出してみる。

主要なコンテンツを考え、大まかな内容を決める。
この時の項目がグローバルナビゲーションになったり。

項目別の内容をもう少し掘り下げ、どんな素材が必要になるかを洗い出す。

サイトマップを考える(この辺りから素材集めを並行して行う)

インターフェース設計
ラべリング項目名をわかりやすい単語にして決定

ここで大まかなレイアウトを見るために、ためしにindex.htmlのみコーディングしてみる。
テキストなし、画像なし、各要素の幅・高さ、背景色をのみ設定した。
ここでなんとなくreset.cssの原型ができる。positionなどコーディングの大まかな流れをつかんだ。

▲1:レイアウトテストしたものを元に、インターフェース設計のメモにposition数値やクラス、ID名などをメモしてレシピを作る。

▲2:レシピを見つつコーディング。
並行してパーツのデザインなどを考えていく。コーディングするなかで画像のファイル名を決めてしまうことも。

▲3:XHTML、CSSがあらかた出来上がってきたら、考えたパーツデザインのメモを元に怒涛の画像編集。
サイズもデザインもファイル名も決まっているのであとは作業! 作業! 作業!

▲1~3を1ページごとに繰り返す。基本的に複数ページ同時進行はしない(頭悪くてできなかった)
但しレイアウトテストはindexのみ。他ページはレシピを元に書き出していった。

前ページができたら、共通しているCSSはbase.cssに移すなどソースを整理する。

チェッカーで採点してもらい、ソースの間違いや不足を修正していく。

ブラウザ毎に確認する。
ブラウザハックを使い、デザインの崩れを手直しする。

自分で借りているレンタルサーバに仮アップロード。
ローカルで見逃されていたファイル名の大文字小文字の間違いなどを確認。手直し。

---------------------------------------------------------------------------

ざばーっと書いたけど、大まかにこんな感じだったと思う。
今週はFireWorksでのデザインカンプの作成も始まったし、これからHTML5学ぶんだし、このワークフローはまたいろいろ増えたり減ったりするんだろな。
ま、今回はこんな流れだった。

HTML・CSS・アップロード検証

課題提出を目前にしてCSS採点ページがあるということを知った。
そりゃHTML採点があるならCSS採点もあるんでしょう。そうでしょう。
なぜもっと早く気付かなかったのか……と思いながらとりあえずCSS2.1で検証してもらうと、ボッコボコに減点してもらった。

CSSを策定しているW3WのCSS検証サービスはこちら。
http://jigsaw.w3.org/css-validator/validator.html.ja#validate_by_upload+with_options
もちろん無料。いやーありがたいことです。
単純に;落としてることとか、知らなかったCSS2.1準拠の書き方とか。

HTMLはこちらでチェック。
http://cetus.sakura.ne.jp/htmllint/htmllint.html

合わせて無料レンタルサーバにFFFTPでアップロードして検証してみるとローカルでは見逃されていたファイル名の大文字小文字の違いなどが見えてきて、うわー提出前に気が付いてよかったなあ。

ただ借りているサーバーのリリースがごく最近だったようで、初心者の自分にはひどく使いにくい。
初心者にやさしい、広告のでない無料サーバーをもう少し探したい。

2013年7月6日土曜日

IE以外のブラウザでリンクが見えているのにクリックできなかった件

課題もあとわずか、作業を詰めていく中で一週間くらい悩み、放置していた問題が片付いたので、まとめてみる。
一か月前にweb制作を始めたド素人の個人用メモに過ぎないので、分かりやすい説明を求めている方は申し訳ないが他の方のまとめられているのをお勧めします。

IE以外のブラウザ(firefox,chrome,opera)でリンクが機能しなかった

上部に横一列のナビゲーションを設置していた課題作品のwebサイトで。

基本的にどのページにも設置していたナビゲーションだったが、あるページでナビゲーションが機能しなくなった。
ロールオーバーを設定していたのだが、アンカーに触れてもピクリともしない。
クリックしてもなんの反応もない。しかしナビゲーションは確かに表示されている。

アレ? と思いXHTMLを見てみるが、ほかのページと代わりはない。
そりゃそうだ。共通するナビゲーション部分のソースはコピペして使っているのだから。
いやしかし見落としているだけで、余計なの混ざっちゃってるのかもしれない、と一応、コンテンツ部分だけ抜き出して、もう一度他のページからソースをコピペしなおしてみる。

おや? リンクが反応した。クリックできる。
やはり何かまじっちゃってたのか…と思いながら、コンテンツ部分用の外部CSSを問題のページ専用のものに付け替えた。

すると、リンクが再び反応しなくなった。

エエエ、とがっくりきながら、しかしこれは前進だ。

問題は外部CSSだったのだ。

今回のサイトは

reset.css     (リセット用)
base.css     (共通している要素(headやfooter)のデザイン)(問題の上部ナビゲーションの設定はここでしていた。)
ページ名.css  (各コンテンツエリアのデザインをページごとに分けて作っていた)

の三段構えで作っていた。

件のクリックしなくなった問題は、一番下のページ名.cssを付け替えた時点で起こった。
ということはこのページ名.cssに何か問題があるのだ。

というわけであれやこれやと検証した結果……

positionを設定してある要素同士の重なりが問題だったみたいだ。

ページ全体をposition:relativeで中央寄せし、子要素ナビゲーションにはposition:absoluteでbase.cssに、同じく子要素のメインコンテンツにはposition:relativeでページ名.cssにそれぞれ位置指定していた。
しかしこれは他のページも同じだしな…と、他のページのページ名.cssを引っ張り出して見比べてみると……

*ID名などは仮

問題のページCSS

#maincontents{
 position:relative;
 margin-left:auto;
 margin-right:auto;
 padding-top:85px;


-------------------------------------

他のページCSS

#maincontents{
 position:relative;
 margin-left:auto;
 margin-right:auto;
 top:85px;


-------------------------------------

おや?
どうやらメインコンテンツの上部の余白の稼ぎ方が違ったらしい。

問題のページはpaddingを上に伸ばしているので実際は見えている状態だったが、上部ナビゲーションの上にメインコンテンツ領域がかぶさった状態だったらしい。

他のページはpositionのtopで上から85pxのところからこの領域、という指定をしていたので上部ナビゲーションとは重なっていない。

なるほどなるほど。
レイヤーみたいに重なっちゃってるんだな……うん? なんかそんな話授業のどこかで聞いたな…と汚い殴り書きノートをめくってみる。

あった。positionを初めて習ったとき、あんま使わないよネ~と思っていたposition:fixedの項目の下に、

z-index  positionがついたものの重なり順を設定できる。
ex)z-index:10; ←1でもよいが10単位が一般的。数字が大きいほうが上に重なる。

と走り書き。
この10単位が一般的、というのは、
後から新たに挿入する要素がでてきたとき、要素1:z-index:1と要素2:z-index:2と設定してしまうと要素2のz-index:を3にしてから新要素:z-index:2などと設定しなくてはならない。
しかしもともとz-indexを10と20で設定しておけば間に挿入する新要素のz-indexは11でも15でも19でもいいのだ。
つまり、元の要素のz-indexをいじる手間が省ける。
しかも要素1のさらに下層にも挿入するのも簡単にできる。
ということらしい。

少し脱線したが、とりあえずbase.cssの上部ナビゲーション部分にz-index:100を設定してみた。
(100の理由はとにかく上! 上に来い!! という気負いと、もし他の要素にz-index指定があっても100は上回れまい、という微妙にビビりな理由から。他要素にz-indexが登場していなければ10で十分かと思われます)


きた!
リンクが反応した! ヤッターと小躍りして家族に擦り寄ったら、事情を知らない相手から「あぁそうよかったね」とドライな返事。いや、返事してくれただけでありがたい。よかったよほんと。

-----------------------------------------------------------

結果…

positionで指定した要素同士の領域が被ると、下層になってしまった要素のアンカーリンクはたとえ見えていてもクリックもロールオーバーもできない(まさに触れられない)

ということだったみたいだった。
しかも厄介なことに、IEではクリックできる。
とりあえず自分で確認したブラウザopera,firefox,chromeではクリックできなかった。

対処法は重なった要素のどちらか、あるいは全てにz-indexで重なり順を調整すること。
リンクを機能させたいなら一番上にその要素を持ってくる。

まだブラウザ毎の差異について軽く話を聞いていただけで、アァ~デフォルトのマージン量が違うんだナ~くらいにしか思っていなかったので、今回のことで身に染みた。今回はIEで通って、それ以外だと機能しないパターンだったが、世間ではその逆で、IEにだけ効かない!! ということが多々あるらしい。
IE嫌われてんだなあーとかるーく思っていたがこういうことを毎度IEだけで起こったら確かに嫌やな…と実感。

とりあえず、今回のページは特に重なりを必要とするレイアウトでもなかったので、結局z-indexを使わず、padding-topをpositionのtopに差し替えて終了。
うんうん言いながらいろいろ検証してみてよかった。こういうアクシデント(ていうほどでもないんだろうけど)対処って勉強になるなあと。

さ、課題にもどるのだ……。

2013年7月5日金曜日

課題と自分

少しずつ朝家出るのが早くなっていく。

駅までダラダラ歩きたいのと、乗り換えのとき座るために数本電車を見逃してもいいように、授業前に少しばかり作業を進められるように。
なにより心の余裕が欲しいから。
せかせかしたくないというより、出来ないから。

周りのスピードにあわせていこうとすると、体力がないので、あっという間に疲れ切ってしまう。
急ぎたくないために人より時間を掛ける。
スローペースでじっくりと。
そういえば短距離走はヘドが出るくらい嫌いだったけど、長距離走はそこまで嫌ではなかった。まあ、好きではなかったけど、決して。

それでも自分の力量を過信しているところがあるのか、まだまだ時間が足りない。
ああしたいし、これもしたい。
できると思う、やれさえすれば。ただもっと時間が必要だ。
もっと早く始めればよかった。

こういうことは自分に多い。
やってやれないことはそうそうないと思っているから。
肚くくって地道に積み重ねれば。

ここまで分かっていてうまくいかないのは自分の計画力が破滅的にないからだと思う。

今回の課題もそうなってしまった。
もう、過ぎたことはどうしようもない。
残る僅かな時間に心血注ぐのみ、である。

2013年7月3日水曜日

現在

失業保険をもらってWEB制作の職業訓練中。
短大受験以来の頭つかう勉強をしている。
 
制作の中授業の中で教わったことや自分で見つけた解決策などをメモしていくためのブログ…のつもりで借りたけど、さっそく課題で心が折れている。
自分で自分の首を絞めている感が半端ない。
 
とりあえず、こういうのが続く性質じゃないので、気楽にやっていこうと思う。