ラベル web の投稿を表示しています。 すべての投稿を表示
ラベル web の投稿を表示しています。 すべての投稿を表示

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月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年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月12日金曜日

Brackets

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

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

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

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

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に差し替えて終了。
うんうん言いながらいろいろ検証してみてよかった。こういうアクシデント(ていうほどでもないんだろうけど)対処って勉強になるなあと。

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