2015年2月16日月曜日

HTML5で、JavaScriptなしでモーダルダイアログを表示しよう

HTML5でのモーダルダイアログのコード説明します。

モーダルダイアログとは、「一度開いたダイアログボックスを閉じるまで、他の操作をできなくするタイプのダイアログボックス」の事を言います。

 【CSS】
headタグ内にCSS定義を行います。
footer等の定義は省略します。
赤文字がモーダルダイアログになります。

 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
    <style type="text/css">    
   

        /*** モーダルダイアログ用領域定義***/
        .divModalDialog  {
            position:fixed;
            top:0;
            left:0;
            width:100%;
            height:100%;
            /*! important !*/
            display:none;
            /* last attribute set darkness on scale: 0...1.0 */
            background-color:rgba(0,0,0,0.8);
            text-align:center;
            z-index:101;
        }
       
        /*** ! target attribute does the job ! ***/
        .divModalDialog:target  { display:block; }

       
        /*** モーダルダイアログの内部定義 ***/
        .divModalDialog div  {
           /* either absolute or fixed */
            position:fixed;
            top:5%;
            width:100%;
            height:80%;
            /* rounded corners */
            -moz-border-radius: 10px;
            -webkit-border-radius: 10px;
            border-radius: 10px;
            z-index:102;
        }
       
        /*** モーダル内のh1定義 ***/
        .divModalDialog div h1  {
            width:100%;
            font-size:2em;
            color:#dadada;
            z-index:103;
            /* add shadows to text */
            -moz-text-shadow: 10px 3px 4px 6px rgba(0,0,0,0.9); 
            -webkit-text-shadow: 3px 4px 6px rgba(0,0,0,0.9); 
            text-shadow: 10px 4px 6px rgba(0,0,0,0.9);
        }       

        /*** モーダル内イメージ定義 ***/
        .divModalDialog img {
            padding:20px;
            z-index:105;
            border: solid 1px gray;
            /* rounded corners */
            -moz-border-radius: 10px;
            -webkit-border-radius: 10px;
            border-radius: 10px;
            background: -moz-linear-gradient(top, #dadada,
                                                    #505050 5%,
                                                    #bababa 50%,
                                                    #303030 50%,
                                                    #101010);
            background: -webkit-gradient(linear, center top, center bottom,
                                                    from(#dadada),
                                                    color-stop(0.05, #505050),
                                                    color-stop(0.5, #bababa),
                                                    color-stop(0.5, #303030),
                                                    to(#101010));
        }

        /*** モーダル内リストのリンク(aタグ)定義 ***/
        .divModalDialog ul a  {
            padding:5px;
            font-size:3em;
            font-weight:bold;
            color:Yellow;
            text-decoration:none;
            border: solid 1px Gray;
            /* rounded corners */
            -moz-border-radius: 10px;
            -webkit-border-radius: 10px;
            border-radius: 10px;
            z-index:110;
        }

        /*** メインのDIV用領域  ***/
        #divThumbnails {
            position:relative;
            margin: 75px 0 0 0;
            height:250px;
            padding-top:30px;
            background-color:#cacaca;
           
             /* add shadows */
            -moz-box-shadow: 5px 5px 10px rgba(50,50,50,0.7);
            -webkit-box-shadow: 5px 5px 10px rgba(50,50,50,0.7);
            box-shadow: 5px 5px 10px rgba(50,50,50,0.7);
           
            /* gradient effect with color-stop */
            background: -moz-linear-gradient(top, #f0f0f0,
                                                #bababa 10%,
                                                #cacaca 49%,
                                                #909090 50%,
                                                #cacaca 50%,
                                                #cacaca 90%,
                                                #ababab);
            background: -webkit-gradient(linear, center top, center bottom,
                                                from(#f0f0f0),
                                                color-stop(0.1, #bababa ),
                                                color-stop(0.49, #cacaca),
                                                color-stop(0.50, #909090),
                                                color-stop(0.50, #cacaca),
                                                color-stop(0.90, #cacaca),
                                                to(#ababab));
        }

        /***
メインのDIV用領域のイメージスタイル ***/
        #divThumbnails img {
            padding:10px;
            height:200px;
            max-width:300px;
            border: solid 1px gray;
            /* rounded corners */
            -moz-border-radius: 10px;
            -webkit-border-radius: 10px;
            border-radius: 10px;
            /* add shadows */
            -moz-box-shadow: 5px 5px 10px rgba(0,0,0,0.5);
            -webkit-box-shadow: 5px 5px 10px rgba(0,0,0,0.5);
            box-shadow: 5px 5px 10px rgba(0,0,0,0.5);       
            z-index:1;
        }

        /*** イメージ及びリスト内aタグのマウスオーバー定義 ***/
        #divThumbnails img:hover, .divModalDialog ul a:hover
        {
            background:#505050;
            background: -moz-linear-gradient(top, #eaeaea,
                                                #505050 50%,
                                                #303030 50%,
                                                #404040);
            background: -webkit-gradient(linear, left top, left bottom,
                                                        from(#eaeaea),
                                                        color-stop(0.5, #505050),
                                                        color-stop(0.5, #303030),
                                                        to(#404040));
        }

        /*** fancy text effect: 180 degree ***/
        #divUpsideDown  {
            position: relative;
            margin-top:5%;
            width:100%;
            ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; /*           
            -moz-transform: rotate(-180deg);
            -o-transform: rotate(-180deg);
            -webkit-transform: rotate(-180deg);
            font-size:3em;
            font-weight:bold;
            color:Maroon;
           /* add shadows to text */
            -moz-text-shadow: 3px 3px 5px rgba(250,250,210,0.9);
            -webkit-text-shadow: 3px 3px 5px rgba(250,250,210,0.9);
            text-shadow: 3px 3px 5px rgba(250,250,210,0.9);
        }


          </style>
</head>


 【HTML】
bodyタグ内にクリックしたら、ダイアログを表示するようにコード記載します。
一個目のリスト画像をクリックしたらID=divModealDialog1に飛び、ダイアログが表示されます。
二個目のリスト画像をクリックしたらID=divModealDialog2に飛び、ダイアログが表示されます。

<body>

     <div id="header">
        <h2>モーダルポップアップダイアログをJavaScriptなしで、HTML5+CSS3で作成</h2>
    </div>
   
    <!-- NAV THUMBNAILS -->
    <div id="divThumbnails">
        <ul>
            <li><a href="#divModalDialog1"><img>
                src="http://webinfocentral.com/html5/Travolta.JPG"
                alt="みつお治療院" /></img></a></li>
            <li><a href="#divModalDialog2"><img>
                src="http://webinfocentral.com/html5/TitanicEffortsNY.JPG"
                alt="My ブログ" /></img></a></li>
        </ul>
    </div>


    <div id="divUpsideDown">画像クリックで、モーダルダイアログが表示します</div>

    <!--1st LINK -->
    <div id="divModalDialog1" class="divModalDialog">
        <div>
            <h1>Yahoo! Japan</h1>
            <ul>
                <li><a href="#">閉じる</a></li>                      <!--閉じる-->
                <li><a href="http://www.yahoo.co.jp/">サイト移動</a></li>  <!--外部リンク-->
            </ul>
            <img src="http://k.yimg.jp/images/top/sp2/cmn/logo-ns-131205.png" alt="Yahoo! Japan" />
        </div>
    </div>

    <div id="divModalDialog2" class="divModalDialog"><div>
            <h1>TAの欝な日々</h1>
            <ul>
                <li><a href="#">閉じる</a></li>                 <!--閉じる-->
                <li><a href="http://tasano2525.blogspot.jp/">サイト移動</a></li> <!--外部リンク-->
            </ul>
            <img src="http://www.google.com/images/icons/ui/gprofile_button-16.png" alt="g++ Blog" />
    </div></div>

    <div id="footer">
        Copyrightc 2014 TAの欝な日々 | Author: T.Asano |
        <a href="http://tasano2525.blogspot.jp/" target="_blank">HOME</a> |
    </div>

</body>


 【実装】

Yahoo!Japanボタンをクリックすると 、下図のモーダルダイアログが表示します。
閉じるボタンをクリックすると、元の画面に戻ります、サイト移動をクリックすると、ボタンで設定したリンク先のサイトに移動します。
 【参考URL】
 http://www.codeproject.com/Tips/170049/Pure-HTML-CSS-Modal-Dialog-Box-no-JavaScript

0 件のコメント:

コメントを投稿