SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

ASP.NET 2.0を使ってCSS対応のWebサイトを作成する

CSS Friendly Control Adaptersを使い、Webサイトのマークアップを向上させる

CSS Friendly Control AdaptersのダウンロードおよびASP.NET Webサイトへの統合

 CSS Friendly Control Adaptersを使ってCSS対応のASP.NET Webサイトの構築を開始するには、最初に、Microsoftからファイルをダウンロードする必要があります。CSS Friendly Control AdaptersのWebサイトから最新バージョンを入手できます。CSS Friendly Control Adapters Version 1.0はここからダウンロードできます。

 これらのコントロールアダプタは、VSIファイルとして提供されます。Visual Studio 2005またはVisual Web Developerがインストールされている場合は、ダウンロードしたVSIファイルをそのまま実行します。Visual Studioインストールに、新しいテンプレートが追加されます。CSS Friend Control Adapters Version 1.0には、新しいASP.NET CSS対応Webサイトを作成するためのテンプレートと、ASP.NET CSS Friendly Control Adaptersに関するチュートリアルが含まれています。チュートリアルには、必要なコアファイルと、すべてのアダプタの詳細な例が含まれています。一方、Webサイトテンプレートには、コアファイルと、いくつかの簡単なサンプルだけが含まれています。CSS Friendly Control Adaptersのサイトでは、サンプルをオンラインで見ることもできます。

 これらのテンプレートを使用するには、Visual Studio 2005を起動し、新規Webサイトの作成を選択します。[New Web Site]ダイアログボックスには、[ASP.NET CSS Friendly Website]および[Tutorial on ASP.NET CSS Friendly Control Adapters]が表示されます。

 いずれかのテンプレートを使用すると、Webサイトと、コントロールアダプタを使用するのに最低限必要なコアファイルが作成されます。具体的には、「App_Code」フォルダ内のコントロールアダプタクラスファイル、「App_Browsers」フォルダ内の「CSSFriendlyAdapters.browser」ブラウザ定義ファイル(すべてのブラウザに対して使用する各コントロールアダプタを指示)、および「JavaScript」フォルダ内のいくつかのJavaScriptファイル(主にMenuコントロールとTreeViewコントロールが、レンダリング出力にとって重要なクライアント側機能を提供するために使用)です。既存のASP.NET WebサイトをCSS対応のWebサイトに変換するには、この3つのフォルダをコピーします。

CSS Friendly Control Adaptersを使用した場合のMenuのレンダリング後のマークアップ

 CSS Friendly Control Adaptersを使用した場合の出力の違いを確認するために、具体例を見てみましょう。トップレベルのメニュー項目と4つの子メニュー項目から成るメニューを表示するように定義された、Menu Webコントロールがあるものとします。このような構造は、以下の宣言的なマークアップを使って、Menu Webコントロール内で静的に定義できます。

<asp:Menu ID="ProductMenu" runat="server" Orientation="Horizontal">
    <Items>
        <asp:MenuItem Text="Products">
            <asp:MenuItem Text="Beverages" />
            <asp:MenuItem Text="Condiments" />
            <asp:MenuItem Text="Confections" />
            <asp:MenuItem Text="Dairy/Milk" />
        </asp:MenuItem>
    </Items>
</asp:Menu>

 MenuのBackColorプロパティがYellowに設定され、子メニュー項目のBackColorがPinkに設定されていることにも注意してください。Menuコントロールの「既定」のレンダリングロジックを使用した場合、レンダリング結果のHTMLは次のようになります。

<table id="ProductMenu" class="ProductMenu_2" 
    cellpadding="0" cellspacing="0" border="0">
  <tr>
    <td onmouseover="Menu_HoverStatic(this)" 
        onmouseout="Menu_Unhover(this)" 
        onkeyup="Menu_Key(this)" 
        id="ProductMenun0">
      <table cellpadding="0" cellspacing="0" border="0" width="100%">
        <tr>
          <td style="white-space:nowrap;">
            <a class="ProductMenu_1" 
                href="javascript:__doPostBack('ProductMenu',
                                           'Products')">Products</a>
          </td>
          <td style="width:0;">
            <img src="/CSSControlAdapters/WebResource.axd?d=chn_rjD
           XviMiG52QjFyPeTtWQOV3vwPBosett_KzYtE1&t=632965002926288600"
                alt="Expand Products" 
                style="border-style:none;vertical-align:middle;" />
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<div id="ProductMenun0Items" class="ProductMenu_0 ProductMenu_3">
  <table border="0" cellpadding="0" cellspacing="0">
    <tr onmouseover="Menu_HoverDynamic(this)" 
        onmouseout="Menu_Unhover(this)" onkeyup="Menu_Key(this)" 
        id="ProductMenun1">
    <td>
      <table cellpadding="0" cellspacing="0" 
          border="0" width="100%">
        <tr>
          <td style="white-space:nowrap;width:100%;">
            <a class="ProductMenu_1"
                href="javascript:__doPostBack('ProductMenu',
                                 'Products\\Beverages')">Beverages</a>
          </td>
        </tr>
      </table>
    </td>
    </tr>
    <tr onmouseover="Menu_HoverDynamic(this)" 
        onmouseout="Menu_Unhover(this)" 
        onkeyup="Menu_Key(this)" id="ProductMenun2">
      <td>
        <table cellpadding="0" cellspacing="0" 
            border="0" width="100%">
          <tr>
            <td style="white-space:nowrap;width:100%;">
              <a class="ProductMenu_1" 
                  href="javascript:__doPostBack('ProductMenu',
                               'Products\\Condiments')">Condiments</a>
            </td>
          </tr>
        </table>
      </td>
    </tr>
    <tr onmouseover="Menu_HoverDynamic(this)" 
        onmouseout="Menu_Unhover(this)" 
        onkeyup="Menu_Key(this)" id="ProductMenun3">
      <td>
        <table cellpadding="0" cellspacing="0" 
            border="0" width="100%">
          <tr>
            <td style="white-space:nowrap;width:100%;">
              <a class="ProductMenu_1" 
                  href="javascript:__doPostBack('ProductMenu',
                             'Products\\Confections')">Confections</a>
            </td>
          </tr>
        </table>
      </td>
    </tr>
    <tr onmouseover="Menu_HoverDynamic(this)" 
        onmouseout="Menu_Unhover(this)" 
        onkeyup="Menu_Key(this)" id="ProductMenun4">
      <td>
        <table cellpadding="0" cellspacing="0" 
            border="0" width="100%">
          <tr>
            <td style="white-space:nowrap;width:100%;">
              <a class="ProductMenu_1" 
                  href="javascript:__doPostBack('ProductMenu',
                  'Products\\Dairy/Milk')">Dairy/Milk</a>
            </td>
          </tr>
        </table>
      </td>
    </tr>
  </table>
  <div class="ProductMenu_0" id="ProductMenun0ItemsUp" 
     onmouseover="PopOut_Up(this)" 
     onmouseout="PopOut_Stop(this)" style="text-align:center;">
   <img src="/CSSControlAdapters/WebResource.axd?d=qidxSK8lNw1v6pL8
       IQZxzZrT3SMuvVDHqZfjfzhu6MM1&t=632965002926288600" 
       alt="Scroll up" />
  </div>
  <div class="ProductMenu_0" id="ProductMenun0ItemsDn" 
      onmouseover="PopOut_Down(this)" 
      onmouseout="PopOut_Stop(this)" style="text-align:center;">
    <img src="/CSSControlAdapters/WebResource.axd?d=uuL5BWm1omFEgQu
        N_dcSXY3whrEsc7zS_QoWROKGtMo1&t=632965002926288600" 
        alt="Scroll down" />
  </div>
</div>

 ご覧の通り、このマークアップでは、各メニュー項目に対して<table>要素を使用しています。ここには示されていませんが、子メニュー項目の表示と非表示を処理する外部JavaScriptファイルへの参照があります。

 CSS Friendly Control Adaptersをプラグインすることによって、レンダリング後のマークアップは、理解しやすいものに変わります。

<div class="AspNet-Menu-Horizontal" id="ProductMenu">
  <ul class="AspNet-Menu">
    <li class="AspNet-Menu-WithChildren">
      <a href="javascript:__doPostBack('ProductMenu',
                'bProducts')" class="AspNet-Menu-Link">Products</a>
      <ul>
        <li class="AspNet-Menu-Leaf">
          <a href="javascript:__doPostBack('ProductMenu',
              'bProducts\\Beverages')"
               class="AspNet-Menu-Link">Beverages</a>
        </li>
        <li class="AspNet-Menu-Leaf">
          <a href="javascript:__doPostBack('ProductMenu',
               'bProducts\\Condiments')" 
               class="AspNet-Menu-Link">Condiments</a>
        </li>
        <li class="AspNet-Menu-Leaf">
          <a href="javascript:__doPostBack('ProductMenu',
              'bProducts\\Confections')" 
               class="AspNet-Menu-Link">Confections</a>
        </li>
        <li class="AspNet-Menu-Leaf">
          <a href="javascript:__doPostBack('ProductMenu',
              'bProducts\\Dairy\\Milk')"
              class="AspNet-Menu-Link">Dairy/Milk</a>
        </li>
      </ul>
    </li>
  </ul>
</div>

 各メニュー項目には、適切な名前のCSSクラス(AspNet-MenuAspNet-Menu-WithChildrenAspNet-Menu-Leafなど)が割り当てられます。これらのクラスのプレゼンテーション設定は、ページの<style>要素、または理想的には個別のCSSファイルで指定されます。CSS Friendly Control Adaptersを使ってレンダリングされるコントロールの、外観のカスタマイズの詳細については、「CSS Friendly Control Adapters White Paper」を参照してください。

まとめ

 ASP.NETでは、コントロールやページを非常に柔軟にレンダリングできます。コントロールは、自動的にアダプティブレンダリングを使用して、アクセスしてきたユーザーがアップレベルのブラウザを使用しているのか、ダウンレベルのブラウザを使用しているのかに基づいて、適切なマークアップを発行します。レンダリングは、必要に応じて、コントロールアダプタを通じて完全にカスタマイズできます。この記事では、コントロールアダプタの基本について説明し、Microsoftが無料で提供するASP.NET 2.0 CSS Friendly Control Adatpersについて説明しました。これらのコントロールアダプタをWebサイトにプラグインすると、Menus、TreeViews、GridViews、DetailsViewsなどのコントロールが、CSS方式のレイアウトを使ってレンダリングを実行できるようになります。さらに、これらのコントロールアダプタにより、開発者はCSSクラスを使ってプレゼンテーション設定を指定するようになるので、コントロールレベルのスタイル設定が使われなくなり、レンダリング後のマークアップからインラインスタイルが排除されます。

 それでは、ハッピープログラミング!

参考資料

  1. Architectural Overview of Adaptive Control Behavior(MSDNライブラリ)
  1. ASP.NET 2.0 CSS Friendly Control Adapters Homepage
  1. ASP.NET 2.0 CSS Friendly Control Adapters: The White Paper
  1. Control AdaptersMSDN Magazineの掲載記事)

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Scott Mitchell(Scott Mitchell)

http://www.4guysfromrolla.com/ScottMitchell.shtml

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/862 2007/01/16 00:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー