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

2011年7月3日日曜日

「HTML5 の基礎: 第 1 回 最初の一歩」 という記事は素晴らしい

 HTML5で理解できない部分があった。いや、理解出来ない部分のほうが多かったと言い直しておこう。それを見事に解消してくれそうなのが、HTML5 の基礎: 第 1 回 最初の一歩であります。「なんだ、まだそんなことをやっているのか」と笑われそうですが、そうなんです。モタモタしながら決して焦らず確実に学習しています。と、いうよりも自分の能力が追いつかないのですからしょうがありません。

 それでこのサイトで何がわかったのかということですが、左の図を見てください。これまで曖昧だったのが<aticle>タグと<section>タグの力関係でありました。この図をみると<aticle>タグの下に<section>がきています。これまでその反対だと誤解してましたものですから、これまで作成したものは全部書き直しになってしまいますが、ま、それも勉強ですから仕方ありません。

 とここまで書いて、もう一度記事を読み返してみると、この図には示されていないことが説明されているではないですか、危うく早とちりをやらかすところでありました。しかし、この説明は翻訳が悪いのだろか、<aticle>と<section>の関係がなかなか理解できません。もうしばらく悩む日々が続きそうです。取り敢えず、この図が示しているように<aticle>が<section>を包括するような形を採用してみようかと思います。以下引用文
記事領域およびセクション領域
ここで設計しているページには、1 つの記事セクションがあり、ここにページの実際のコンテンツが入ります。この領域を作成するには、<article> タグを使用します。このタグが定義するコンテンツは、ページの他のコンテンツとは独立して使用することができます。例えば、RSS フィードを作成する場合には、<article> を使用してフィードのコンテンツを一意に識別することができます。<article> タグによって識別されるコンテンツを削除したり、別のコンテキストに配置したりしても、そのコンテキストにおけるコンテンツは完全に理解することができます。
Acme United 計画の記事領域には、3 つのセクション領域が含まれます。これらのセクション領域を作成するには、<section> タグを使用します。<section> の中に含めるのは、Web コンテンツ内で互いに関連するコンポーネント領域です。<section> タグには (<article> タグもそうですが)、ヘッダー、フッター、さらにセクションを完成するために必要なその他すべてのコンポーネントを含めることができます。<section> タグは、コンテンツをグループ化するために使用します。<section> タグと <article> タグのコンテンツはどちらも通常は <header> で始まり、<footer> で終わります。この 2 つの間に、タグのコンテンツが入ります。
<article> タグの中に <section> タグを含めることができるのと同じく、<section> タグの中に <article> タグを含めることもできます。<section> タグは同様の情報をグループ化するために使用し、<article> タグは記事やブログなど、コンテンツが持つ意味に影響を与えることなく、削除したり、新しいコンテキストに移動したりすることができる情報に使用します。<article> タグはその名前が示唆するように、完全な情報一式を提供します。それとは対照的に、<section> タグには関連情報が含まれていても、その情報だけを別のコンテキストに配置することはできません。そうすると、その情報が持つ意味が失われてしまうためです。
リスト 4 に、<article> タグと <section> タグの使用例を記載します。

リスト 4. <article> タグおよび <section> タグの例
<article>
     <section>
          Content
     </section>
     <section>
          Content
     </section>
</article>
<section>
     <article>
          Content
     </article>
     <article>
          Content
     </article>
</section>

2011年4月13日水曜日

PHP MySQL JavaScript Jq HTML5 CSS3 混沌としていて頭のなかで繋がってこない

 昨日これまで作成していたWebアプリが完成した。いや完成したことにした。HTML部分のJavaScriptとCSS3部分は以前に学習のために作成しておいた部分を流用した。PHPとMySQLの部分は付け焼き刃で関連するサイトを調べまくりほとんどパクって稼働まで漕ぎ着けた。
 ひとつのアプリを作るのにPHP MySQL JavaScript Jquery HTML5 CSS3これだけのものを使わなくてはいけない時代になったのかと思う。どれも私は中途半端にしか理解していないので、全体を俯瞰してみるとまったく繋がってこないのであります。全部をPHPでやらなくてもJavaScriptで十分な部分もあるだろうし、Jqueryを使えばもっと格好良くできるだろうと思える部分もかなりあるのだが、全部がバラバラの状態で全体が繋がってこないのです。ま、どっちにしても年寄りの冷や水的なプログラムだからしょうがないのだけども。
 ソースを公開するのは、自分のバカさ加減がバレるようで結構恥ずかしいのですが、管理部分を除いた表示部分を一応公開してみるか。これで動作することはしているのですが、どこかに欠陥があったら教えて欲しいです。

 ソースをアップしてから気づいたのですが、DBの接続部分が3回もあります。プログラム的にはかなり饒舌だと思います。これを1回にまとめて関数化して、引数を渡し条件分岐するのが正しいと思う。なにせこれまではエラーなく動作させることばかり考えてきたので、動くなら、何度でも書けばいいやって、まったく余裕のないことをやっていましたので。少し余裕がでてきました。

 因みにDB接続部分だけを関数化して必要な場合だけ呼び出すようにしてみたけど、何故か動作しなかったのであります。なんでかというのを追求しないまま、それぞれの関数の部分に接続文字列をコピペしてしまいました。

実物はこちらにあります。挑戦!一発免許学科試験問題
なぜか、IEで見ると右側に寄ってしまいます。たぶんCSS3を変更しないとダメだと思います。今のところIE以外のブラウザーで見てください(そんなWEBアプリありかよ^^;)HTML5とCSS3で作成していますので、お!っていう部分があると思います。IEはほとんど対応していません。これからIE対応をしなければいけないのですが、気が重いな。やりたくないな。IE捨てちゃおうかな。別にオレ困らないもんね。IEなんか使っているのが悪いのだから。

<?php
/*****************************************************/
/*       学科問題出題システム                        */
/*****************************************************/

 session_name('hogehoge');
 session_cache_expire(90);
 session_start();


//システム全体の制御
    if ($_SESSION[ "btn_caption" ] == "次の問題" or $_SESSION[ "btn_caption" ] == "") {
        making_question();     //新規問題作成へ
    } elseif($_SESSION[ "btn_caption" ] == "答え") {
        answer();     //答えあわせへ
    }

/*****************************************************/
/*       答えの正誤判断する                          */
/*****************************************************/
    function answer(){
    global $radio1,$radio2,$kaitou,$kaisetu,$ketuka;
    global $div_kaitou,$div_kaisetu,$div_ketuka,$end_div;

            $_SESSION[ "btn_caption" ] = "次の問題";
            $radio1 = "";      //ラジオボタンを表示しない
            $radio2 = "";      //ラジオボタンを表示しない

            //正誤判定及びメッセージ作成
            if($_REQUEST["seigo"] == 0){
                 $answer2 = "あなたは上記の問題を○と答えましたが、";
            }else{
                 $answer2 = "あなたは上記の問題を×と答えましたが、";
            }

            if ($_REQUEST["seigo"] == $_SESSION[ "seikai" ]){
                $answer = "おめでとうございます。それは<strong><span style='color: red; font-size: 20pt'>正解</span></strong>です。";
                $_SESSION[ "seikaisu" ]++;
            }else{
                $answer = "残念ですが、それは<strong><span style='color: red; font-size: 20pt'>間違い</span></strong>です。";
            }
            $kaitou = $answer2 . $answer;
            $kaisetu = $_SESSION[ "kaisetu" ];

           //---------------これまでの成績を計算する------------------------------
            $ritu = round($_SESSION[ "seikaisu" ] / $_SESSION[ "count"] * 100,1);
            if ($ritu >= 90) {
                $msg = "<strong><span style='color: yellow; font-size: 17pt'>合格圏内です。この実力をキープしてください。</span></strong>";
            } elseif ($ritu >= 80) {
                $msg = "<strong><span style='color: yellow; font-size: 17pt'>あと1歩です。90%を目指してより一層磨きを掛けてください。</span></strong>";
            } else {
                $msg = "<strong><span style='color: yellow; font-size: 17pt'>もう少しがんばりましょう!。</span></strong>";
            }

            $ketuka = "これまでの<strong><span style='color: red; font-size: 20pt'>正解数は" .$_SESSION[ "count"] ."問中". $_SESSION[ "seikaisu" ]. "問</span></strong>です。<strong><span style='color: red; font-size: 20pt'>正解率は" . $ritu . "%</span></strong>です。<br />" . $msg;

         $div_kaitou = '<div id="kaitou">';
         $div_kaisetu = '<div id="kaisetu">';
         $div_ketuka = '<div id="ketuka">';
         $end_div = "</div>";

            update_go();    //間違った答えをdbに記録する
    }

/*****************************************************/
/*       新しい問題を作る                            */
/*****************************************************/
    function making_question(){
    global $radio1,$radio2,$kaitou,$kaisetu,$ketuka;
    global $div_kaitou,$div_kaisetu,$div_ketuka,$end_div;

           $dbname = "hogehoe";
           $hostname = "mysq5879.db.sakura.ne.jp";
           $userid = "nantara";
           $passwd = "kantara";

          if(!$con=mysql_connect($hostname,$userid,$passwd)){
               print "データベースに接続できません". mysql_error() . "<br />\n";
               exit;
          } else {
               mysql_query("SET NAMES utf8");    //文字化け対策
          }

         mysql_select_db($dbname,$con);

        //問題の総件数を求めます。
        $sql="SELECT * FROM mondai";
        $rst = mysql_query($sql,$con);
        $maxdeta=mysql_num_rows($rst);
        //乱数を発生させます。
        $rand = mt_rand(1, $maxdeta);
        //乱数で得た問題をひとつだけ選択して表示します。
        $sql="SELECT * FROM mondai where id = ".$rand;
        $rst = mysql_query($sql,$con);
 
       if($rst==False){
         print "レコードセット収得に失敗しました。";
         exit;
        }

        $col = mysql_fetch_array($rst);

        $_SESSION[ "id" ] = $col{"id"};
        $_SESSION[ "mondai" ] = $col{"mondai"};
        $_SESSION[ "kaisetu" ] = $col{"kaisetu"};
        $_SESSION[ "seikai" ] = $col{"seikai"};
//        $_SESSION[ "imgurl" ] = $col{"imgurl"};
        $imgurl = $col{"imgurl"};

        if(!$col{"imgurl"} == ""){
           $_SESSION[ "imgurl" ] = '<img src="http://hogehoge.jp/images/' .$col{"imgurl"}. '" />';
        }

        $_SESSION[ "access" ] = $col{"access"}; //アクセス数を求める
        $_SESSION[ "go" ] = $col{"go"};         //間違いの数を求める
        $_SESSION[ "btn_caption" ] = "答え";

        $access = $_SESSION[ "access" ]+1;
        $id = $_SESSION[ "id" ];
        $sql = "UPDATE crowner.mondai SET access = '$access' WHERE id= '$id'";
        $rst = mysql_query($sql,$con);
        if($rst==False){
           print "レコードセット収得に失敗しました。". mysql_error();
           exit;
        }

       mysql_free_result($rst);   //レコードセットの解放
       $con = mysql_close($con);  //データベースの切断
       $_SESSION[ "count" ]++;
       $kaisetu = ""; $kaitou = ""; $ketuka = ""; //コメントを初期化(空に)する。

         $div_kaitou = "";
         $div_kaisetu = "";
         $div_ketuka = "";
         $end_div = "";
       $radio1 = '<input type="radio" name="seigo" value="0" checked />  <strong>正</strong> ';
       $radio2 = '<input type="radio" name="seigo" value="1" />  <strong>誤</strong> ';
    }

/*****************************************************/
/*       間違った問題に+1をつける                  */
/*****************************************************/
    function update_go(){
           $dbname = "hogehoe";
           $hostname = "mysq5879.db.sakura.ne.jp";
           $userid = "nantara";
           $passwd = "kantara";

            if(!$con=mysql_connect($hostname,$userid,$passwd)){
                 print "データベースに接続できません". mysql_error() . "<br />\n";
                 exit;
            } else {
                 mysql_query("SET NAMES utf8");
            }
          mysql_select_db($dbname,$con); //データベースの選択 ☆この一文は必要です。ここを試しに削除したらエラーになった。


        $go = $_SESSION[ "go" ]+1;
        $id = $_SESSION[ "id" ];
        $sql = "UPDATE crowner.mondai SET go = '$go' WHERE id= '$id'";
        $rst = mysql_query($sql,$con);
       if($rst==False){
         print "レコードセット収得に失敗しました。". mysql_error();
         exit;
        }

       mysql_free_result($rst);   //レコードセットの解放
       $con = mysql_close($con);  //データベースの切断
    }
?>

<!--*****************************************************/
/*          HTMLの表示                              */
/*****************************************************-->

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>挑戦一発自動車免許!学科問題</title>
    <!-- The below script Makes IE understand the new html5 tags are there and applies our CSS to it -->
    <!--[if IE]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <link rel="stylesheet" href="test.css" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    <!--jquery関連呼出-->
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">google.load("jquery", "1.4");</script>

    <!--twitter呼出関連-->
    <script type="text/javascript" src="http://widgets.twimg.com/j/2/widget.js"></script> 

    <!--基本的なJsを呼び込む-->
        <script src="./kihon.js"></script>

  </head>

  <body>
    <header>
      <hgroup>
        <h1>挑戦一発自動車免許!学科問題</h1>
<!--        <h2>Media Literacy 2010, Crowner.Co.LTD</h2> -->
      </hgroup>
        <script src="./header.js"></script>
    </header>

    <section>
      <article>

    <h2>第<?= $_SESSION[ "count" ] ?>問目</h2>

         <div id="mondai">
            <h3 id="no"> NO.</h3>
            <?= $_SESSION[ "imgurl" ] ?>
            <div id="toi">
                <?= $_SESSION[ "mondai" ] ?>
            </div>
         </div>

         <?= $div_kaitou ?>
             <?= $kaitou ?>
         <?= $end_div ?>

         <?= $div_kaisetu ?>
             <?= $kaisetu ?>
         <?= $end_div ?>

         <?= $div_ketuka ?>
             <?= $ketuka ?>
         <?= $end_div ?>
<div id="frm">
    <form method="POST" action=<? $_SERVER[ "PHP_SELF" ] ?>>
          <?= $radio1 ?>
          <?= $radio2 ?>
        <br />
        <input type = "submit" name = "btn" value=<?= $_SESSION[ "btn_caption" ] ?>>
    </form>
</ div>
      </article>

      <article>
        <script src="./center.js"></script>
      </article>
    </section>
    <nav id="left_nav">

        <script src="./testnavi.js"></script>
    </nav>
    <footer>
        <script src="./footer.js"></script>
    </footer>
  </body>
</html>

2011年2月19日土曜日

CSS このサイトは凄いぞ!

 偶然に見つけたサイトで、ちらっと眺めていて、このサイト凄いんじゃないかなと直感的に思いました。まだまったく検証はしていませんが、忘れないために取り敢ずURLをメモ的に貼り付けておきます。

[CSS]今、そして近い将来に使用するであろうスタイルシートのテクニック集
まとめサイトもあるじゃん。
サイト構築 -CSS

以下のサイトも半端じゃねえな。これはすぐに使える。「なんということでしょう。」さっそくメモメモ

ここは解説↓
ちょっとした飾りに使えるCSS3.0ジェネレータ『CSS3.0Maker』
そして以下が本家↓
『CSS3.0Maker』

2011年2月7日月曜日

各要素を入れ子にした場合はどうなるのだろうか


html5になって文章を構造化するにはより良い環境になったと思ったのだろうけれども、ところがどっこい各要素を入れ子にした場合の問題につきあたった。もっと詳細に調べればどこかに書いてあるのだろうけどれども。図をみればヘッダ部分・フッタ部分・ナビゲーション部分・本文の部分と綺麗に分かれているから、一見すると問題がないように見える。しかしだ、nav部分にコマーシャルの部分が入る場合もある、asideという要素である。またsectionの要素にarticleの要素が入れ子になっている。大概はsection要素に本文を書き込んでいく。section部分を分類分けしているのが各article要素である。
本文(section)にはページの目次(nav)もくる場合がある。また、asideなどの本文と直接関係ない広告とかコラムがくる場合もある。
 そうした時のh*タグの扱いなのです。各要素タグの中にh1タグを入れても良いという。そうなると、文章を構造化するとなるとこれまでは、1ページに一個のh1タグの原則が壊れてしまって、逆にh1タグのオンパレードになってしまって、どこも文章が構造化されてないという事態に陥ってしまう。
 このあたりの使い方はどうしたらいいのだろうかという疑問にすっぽりとハマってしまったのだ。各要素の文字の大きさとか色はCSSで変更できるとしても、あまりにも多くのh1タグを使用していると、おそらくSEOのやり過ぎってことでgoogle八分にされないだろうかという心配が残る。次次に問題が表面化してくるね。

2011年2月3日木曜日

最初ゆっくりに感じていた英文の朗読が・・・・・ひえーーー

注文していたLittle House on the Prairieが到着した。「大草原の小さな家」シリーズの2巻目でテレビドラマのタイトルに採用されたものであります。紙質は悪いです。日本でこのような質の悪い書籍が発刊されたらきっとそっぽを向かれるだろうなと思えるぐらいのものであります。ただ雰囲気はいいです。イラストも豊富に入っています。全文英語です。って、あたりまえか。ペラペラめくってみる、ストーリーがあらかじめ頭に入っているせいか、なんとなく理解できる・・・・・ような錯覚を持つ。いいのだ、これでいいのだ。

 先に購入していた6枚組CDの朗読を流して、英文を追ってみる。音声だけで聞いていた時はゆっくりと流れていたと感じたが、英文を広げて同時に見る聞くを実行してみると、途中から「はぇー!」こんなに速かったっけとなる。単語を頭のなかで処理するのが間に合わないのだ。途中からいちいち単語を頭のなかに入れるのをやめた。と言うか追いつかないのだから仕方がない。表面を朗読にあわせて流すだけしかできなかった。
 当分はこの方式でなじむしかないうような気がする。次にやるのは英文をそっくりタイプすることである。次はわからない単語を抜き出して一覧表にしてみる。当然日本語の意味を対比させていく・・・・・。
 また翻訳されたものと原文とを比較してみるというのも楽しみのひとつであります。

 いろいろ思いを巡らしながら、思いついたことは、音声を流し、画面には対応する英文があわせて表示され、さらに日本語訳も表示されるとHTML5アプリを作成できないかということであります。当然自分だけのものでありますけれども、現在取り組んでいる自分の総合学習の集大成のようなものであります。できればスマートフォン対応になればバンバンザイであります。どこまでできるかはわからない。

2011年1月26日水曜日

二日間頑張ったけど、駄目だ使い物にならんかった

 JavaScriptに挑戦しているのですが、どっちかというと実質はJqueryなんですけど、といってもいろんなサイトのコードをパクッテ貼り付ける作業をやって試してみたのですが、5個ほど実験してみたけどどれも駄目ですね。自分の思い通りに動作しないというのもあるし、まったく動作しないなんてのもあって、どんどんと熱くなってしまって結局どれも使い物にならなかったです。いやーーマイリましたね。「戦い疲れて日が暮れて」なんて虚しくつぶやいています。
 このままじゃ駄目だ。表面だけ追ってみても結局本質を理解していないから、動作しないときにどうにも手の出しようがないんだね。こうなれば急がば回れで、基本からじっくりと学習することにした。しかし、久しぶりに悔しい気持ちを味わってしまいました。いやはや
 あ、それから思ったのですが、JavaScriptにはデバッガーがないんだよね。どこかにあるのかな。だから、どこでエラーになっているのかがなかなかわからない。Script自体をコメントアウトにしてみたり、アラートを出すという方法もあると思うけど、変数が良くわからないから出しようがないしね。ま、そのうちにわかるだろうけれども。

2011年1月4日火曜日

HTML5で廃止された要素

html5が少しだけわかってきたのだが、それでは廃止されたタグとか要素は何なんだろうと気になって調べてみた。以下の要素が廃止されたらしい。良かった、これまでまったく使ってこなかったものばかりだった。ほっと胸をなで下ろしました。そして、こんなものあったんだとあらためて自分の無知さに苦笑しました。おかげでこれらの廃止された要素をいちいち気にしないでサイトを構築できるようであります。

<acronym> …… 略語(頭字語)であることを表す
※<abbr>に置き換える
<applet> ……… JAVAアプレットを挿入する
※<embed>や<object>に置き換える
<basefont> …… テキストの基準サイズ・基準色・基準フォントを指定する
※fontプロパティで指定
<bgsound> …… 効果音・BGMを鳴らす(IE独自の仕様)
※<audio>に置き換える
<big> ………… テキストのサイズをひとまわり大きくする
※font-sizeプロパティで指定
<blink> ……… 文字を点滅させる(NN独自)
※text-decoration: blinkで指定
<center> …… センタリングする
※margin:autoやtext-align: centerで指定
<dir> ………… リストを表示する
※<ul>に置き換える
<font> ……… フォントの種類・大きさ・色を指定する
※fontプロパティで指定
<frame> …… フレームに表示するファイルを指定する
※<iframe>やCSSに置き換えるか、メニューなどの共通部分はサーバー側でインクルードする。
<frameset> … ウィンドウをフレームに分割する
※<iframe>やCSSに置き換えるか、メニューなどの共通部分はサーバー側でインクルードする。
<isindex> …… 検索キーワードの入力欄を作る
※<form>と<input type="text">に置き換える
<listing> ……… ソースをそのまま表示する(タグは解釈される)
      ※<pre>や<code>に置き換える
<marquee> …… 文字をスクロールさせる(IE独自)
      ※CSS3のマーキー系プロパティで指定
<nobr> ……… 改行なしで表示する(NN独自)
      ※white-space: nowrapなどのCSSで指定
<noembed> … プラグインが利用できない環境用の表示内容を指定する(NN独自)
      ※プラグインが利用できない環境用の表示が必要な場合には、<embed>の代わりに<object>を使用する
<noframes> … フレームが表示できない環境用の表示内容を指定する
      ※<iframe>やCSSに置き換えるか、メニューなどの共通部分はサーバー側でインクルードする。
<plaintext> … ソースをそのまま表示する
      ※MIMEタイプに"text/plain"を指定する
<rb> ………… ルビをふる文字を指定する(IE独自)
      ※<ruby>内に直接ルビベースを記述、<rb>タグは省略
<s> ………… 打ち消し線を引く
      ※削除を表す場合には<del>に置き換える、 それ以外の場合はtext-decoration: line-throughで指定
<spacer> …… スペースを挿入する(NN独自)
※marginやpaddingプロパティで指定
<strike> …… 打ち消し線を引く
      ※削除を表す場合には<del>に置き換える、 それ以外の場合はtext-decoration: line-throughで指定
<tt> ………… 等幅フォントで表示する
※font-family: monospaceで指定
<u> ………… テキストに下線(アンダーライン)を引く
      ※text-decoration: underlineで指定
<xmp> ……… ソースをそのまま表示する
      ※<pre>や<code>に置き換える

参考サイト

2011年1月3日月曜日

html5が少しだけわかってきた

 これまでわかったようで、わからなかったhtml5の内容がかなり理解できました。私が理解した部分はほんの少しでありますが自分のための覚え書きのつもりで掲載しておきます。もし、そこは間違っているよという点がありましたらメールかコメントで指摘していただければありがたいです。理解するためには自分で作ってみるのが一番ということで、さっそく作ってみました。ここが試作したサイトであります。どこがhtml5なのかは一見したところわからないでしょう。hタグやboxが角丸めになっている点です。それからヘッダの部分の背景が徐々に薄くなっていいるところであります。これらのことはhtml4でもできないことは無かったですがかなり面倒でした。
それでこのサイトを試作するにあたって全部パクったのがHTML5+CSS3 入門というサイトです。このサイトでは平易に初心者にも実にわかりやすく説明されている優れものサイトだと思いますので興味のある方は是非目を通しておいてください。

HTML5とCSS3の学習

IE以外のブラウザーを使用している人の目には、角が丸めに見えていることだと思います。これが今のところhtml5で作成しているサイトの特徴だと思います。「なんじゃいそれだけかい」って言われそうですが、まだ私の理解している範囲はその程度のことであります。これから少しずつ学習を重ねて理解していこうと思います。

基本的にはこれから新たに作るサイトはhtml5で作成することにします。IEでこちらが意図したように表示されようがされまいが完全に無視することとします。


まずはパクったこのサイトをバラしてみないと

最初にパクった時よりはだいぶ手を加えてしまったのですが一番最初のソースを元にして眺めてみたいと思います。一番感じたのはhtml4よりは構造的にはだいぶ簡単になったと思います。これからあれこれ弄っていった結果それは錯覚だったなんてことはたぶんないと思います。ただhtml5の仕様はまだ完全に固まったわけではないのでなんともいえないのでありますが。

まずは<head>の部分

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>HTML5とCSS3によるページサンプル</title>
    <!-- The below script Makes IE understand the new html5
            tags are there and applies our CSS to it -->
    <!--[if IE]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <link rel="stylesheet" href="style.css" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>

html5での文字コードはutf-8

<meta charset="utf-8">

html4では以下のように文書型宣言記述したものが

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

これだけで済んでいるんですね。また後方互換性があるからhtml4で書かれたものでも、以下のようにで最小限の記述すればそのままhtml5として通用してしまうのだそうです。

<!DOCTYPE html>

XML 的思索: HTML5 の XML 的な部分(次世代の Web ネイティブ言語を扱う開発者に対する 6 つの推奨事項)を参照されたし。


IEにも似たようなサイトを表示させるおまじない部分

<!--[if IE]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

コードを眺めてみれば、ブラウザーがIEであったならば、"http://html5shiv.googlecode.com/svn/trunk/html5.js"部分に読みに行けという命令ですね。確かめて見ましたら、IEでこのサイトを見てみると似たようなものが表示されました。今のところJavaScriptにも詳しくないので、結果がよければ良しとして深く追求しないことにします。

html5を追求していけば、必ずJavaScriptを追求せざるを得なくなると思います。ある程度JavaScriptの知識が目についた時点で解析しようと思います。それまでは「IEにも似たようなサイトを表示させるおまじない部分」として呪文扱いにしておきたいと思います。


補足 (新しいセマンティック・マークアップ要素)

出典は XML 的思索: HTML5 の XML 的な部分によります。まだ全部は読み切っていません。


HTML5 では、コンテンツの構造の意味体系を明確にする新しい要素が導入されています (section や article など)。これらの要素は HTML5 の一部ではあっても変更される可能性がありますが、変更はおそらく大幅なものではなく、新しい要素を使用するリスクと、それらの要素によって表現が改善されることによるメリットは同程度です。1 つの問題は、Internet Explorer がこれらの要素を DOM の中に作成しないことです。そのため JavaScript を使用する場合には、別の対策を使う必要があります。幸い Remy Sharp が JavaScript による修正を維持管理しており、この修正を適用することができます。そのためには文書の先頭に以下のスニペットを含めます (リンクは「参考文献」を参照)。

<!--[if IE]>
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

また、これらの要素に対する CSS 規則も定義する必要があります。これはいずれかのブラウザーが HTML 4 形式で文書を描画してしまう場合に備えるためです (HTML 4 形式の場合、未知の要素はデフォルトでインライン描画されます)。下記の CSS であれば動作するはずです。

header, footer, nav, section, article, figure, aside {
    display:block;
}
必死の Web ハッカーへの推奨事項: 新しい HTML5 要素を使う場合には、それらの要素をサポートする HTML5 shiv による JavaScript とデフォルトの CSS 規則を含めること。

HTML5の特徴って

まだ全体をまったく掌握していない状態なのですが、とにかくあらたに感じたことをここにメモ代わりに書いておこうと思う。

新たに加わったタグによって、文章がより構造的に書けるようになったということでしょうか。そうはいっても文章を構造的に書くというのは実際にはなかなか難しいことなのですが。

一番特徴的なのは、<h1>タグを同じサイトに複数個置けるようになったということです。



section 文章のアウトライン
header セクションのヘッダー
footer セクションのフッター
nav 外側のセクションに対するナビゲーション
aside 外側のセクションに対する補足情報
article セクションみたいな感じで、独立したコンテンツ
hgroup h1~h6をまとめる
menu コマンドのリスト
figure キャプションとセットの要素を埋め込む際に使用
video 動画
audio 音声
source videoやaudioで使う
canvas キャンバス

HTML5の構造を理解する

以下の図はHTML5の構造を理解するには最適なものだと思います。出典はHTML5+CSS3 入門からのものであります。最初の図はこれまでのHTML4での基本的な構造であります。これらの3つの図を見比べてみますとhtml5の特徴がかなりはっきりと理解することができます。出典はHTML5+CSS3 入門というサイトは実に優れものであると思います。作者の方に感謝であります。



次の図は上記の図をCSSで設定しています。私もこれまで散々このような書き方でサイトを構築してきました。


以下の図がhtml5で書いた場合になりますが、各divの位置はCSSで書かなければいけないのですが、header・section・nav・footer・article等の要素がタグ化していることがわかります。余談になりますが、ここでasideの使い方も明記して貰ってれば尚嬉しかったのですが、それはいずれ調べることにしましょう。



JavaScriptも欠かせない要素なのがHTML5なのだ

これまでまったくといっていいほどJavaScriptの勉強をしてこなかった。できれば避けて通りたかったのですが、さまざまな調査をしてきましたら、JavaScriptは避けては通れないシロモノだということが判明したので、遅ればせながら勉強を始めることにしました。最初から大げさなことはできるわけではないので、簡単なものをパクって実装することから始めたいと思います。しかしやらなければならないことが山ほどありますね。もうすでにアゴが上がっている状態であります。


役に立つサイト

便利な時代になったとつくづく思う今日この頃であります。というのもネットがこれほど発達していなかった時代では、新しい技術に挑戦するには、山ほど多くのそれも決して安くはない参考書を手に入れなければなりませんでした。しかし、今や知りたいと思ったことは検索さえすれば、ほとんどのモノが無料で手に入れることができます。



結構長くなってしまいましたが、私は上記でサイトを構築することができるようになりました。まだかなりの疑問が残っていますが、それはわかり次第に掲載してみたいと思っています。

2010年10月5日火曜日

HTML5+CSS3 入門

 HTML5+CSS3 入門というサイトは実にわかりやすいサイトであります。HTML5は少しずつほうぼうのサイトを見ながら勉強を続けてきましたが、このサイトが入門者には一番わかりやすかったです。サンプルコードもついていまして、それをパクリながら自分のサイトを構築しようと思っています。こんごここでの説明を自分でも理解するために書いて行きたいと思っています。HTML5で記述して一番ネックになるのがIEでの振る舞いであります。だからHTML5での記述は時期尚早ということで見送ろうとも思ってましたが、ここのサンプルコードを見て続けてみようと思いました。以下が気になったコードです。

<!DOCTYPE html>
<html lang="ja">
この簡単な記述で済むようですね。

次が肝心なところです。
<!-- The below script Makes IE understand the new html5 tags are there and applies our CSS to it -->

↑この部分を翻訳機で翻訳させますと、

「スクリプトのメーカーの下に新しいHTML5のタグがあると適用を理解IEの我々のそれにCSS」

となります。うーーんわかるような、さっぱりわからんような。わははは。マイッタ

<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

<link rel="stylesheet" href="style.css" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

ここらあたりの記述は深く追求しないで呪文のごとく覚えておけば済むことなのですが、これまでの浅はかな知識から推し進めますと、HTML5にほとんど対応していないIEのブラウザーだったら、HTML5に対応したJavaScriptを使用しますよということなのでしょう。そのスクリプトの在処はgooglecode.comにありますよという意味だと思います。このあたりもう少し丁寧に調査してみたいと思います。

一番気になるのはこのif文ですね。これ初めてみる文です。JavaScriptなんだろうか?
<!--[if IE]>
<![endif]-->
調査の結果JSなどではなくIEの条件分岐なのですね。以下がhttp://blog.worldending.jp/web/ie-conditional-comment.phpでの説明です。やっぱり調べてみるもんだね。

IEには「条件分岐コメント(Conditional comments)」という(気持ち悪い)独自機能が実装されていて、これをつかうとIEのみに適用可能なHTMLの記述を簡単に行うことが出来ます。
しかしIEだけに適用させる場合ってどんな場合よ?と思うところですが、CSSコーディングを行う際にIEに別のCSSファイルを適用させたいときに使うのが一般的なよう。CSSハックの記述がどうにもこうにも増えすぎてしまって、こりゃ別ファイルに分けなければどうしようもない、というような場合ですね。
自分自身はと言うとプライベートでも仕事でも今までに利用した経験は無く、別ファイルに分けなければならないほど多量のハックを必要とすることがあるか?という疑問もありますが、知っておいて損はないということでメモ。

それから"http://html5shiv.googlecode.com/svn/trunk/html5.js"というサイトにはどんな記述がなされているのかも確認してみました。それが以下の記述ですが、今の私の能力では理解できませんね。これこそ呪文ですね。

// html5shiv MIT @rem remysharp.com/html5-enabling-script
// iepp v1.5.1 MIT @jon_neal iecss.com/print-protector
/*@cc_on(function(p,e){var q=e.createElement("div");q.innerHTML="i";q.childNodes.length!==1&&function(){function r(a,b){if(g[a])g[a].styleSheet.cssText+=b;else{var c=s[l],d=e[j]("style");d.media=a;c.insertBefore(d,c[l]);g[a]=d;r(a,b)}}function t(a,b){for(var c=new RegExp("\\b("+m+")\\b(?!.*[;}])","gi"),d=function(k){return".iepp_"+k},h=-1;++h\\s*$","i");i.innerHTML=a.outerHTML.replace(/\r|\n/g," ").replace(c,a.currentStyle.display=="block"?"":"");c=i.childNodes[0];c.className+=" iepp_"+
d;c=f[f.length]=[a,c];a.parentNode.replaceChild(c[1],c[0])}t(e.styleSheets,"all")});p.attachEvent("onafterprint",function(){for(var a=-1,b;++a


 それでこのサイトにあったソースをダウンロードしてきて、実際にIEや他のブラウザーで動作確認をしましたら、確実に動くようです。