6

上司から、CSS レイアウトの使用をやめて、テーブル レイアウトの使用を開始するように求められています。これの主な要因は、水平に配置された流動的なレイアウトでのテーブルの望ましい動作です。次の例を参照してください。

HTML パネルの幅を狭くスライドすると、テーブル (最初のテーブル) にいくつかの便利な特性があることがわかります。

  1. 2 つのセルを分割するのに適した場所を自動的に見つけて、コンテンツが多いセルに使用可能な幅の割合を大きくします。
  2. 使用可能なすべての幅を 100% 埋めます。
  3. どのセルをラップするかを決定するとき、垂直方向のスペースに関して最も効率的な方法で決定します。
  4. 2 つのセルを水平方向に並べたままにします。

例 A には品質 1 がありません。(コンテンツのサイズが変更された場合は、比率を手動で更新する必要があります。)

例 B には品質 1 または 3 がありません。(静的な 50% は理想的とは言えませんが、機能する可能性があります。ただし、テーブルの高さが 2 行しかないにもかかわらず、3 行に分割されます。)

例 C には品質 2 または 4 がありません。(これで品質 2 を偽装する方法はわかりますが、次の行にクリアすることは完全に契約違反です。)

例 D には品質 1 または 4 がありません。(技術的には 1 ですが、その間の巨大なギャップは実用的ではありません。また、一部のブラウザーでは、同じ行に左右をフローティングするとうまく機能しません。)

データは意味的に表形式ではないため、表の使用は避けたいと思っています。しかし、上司が私にお金を払ってくれるので、彼の言うことに従うか、より良い解決策を見つける必要があります. セマンティック マークアップと CSS を使用してこれを行う方法はありますか?

4

3 に答える 3

5

更新: すべてのブラウザ > ie7 で使用できますdisplay: table, table-row, table-cell。jQuery コードは ie7 を対象とし、div を適切なテーブル要素に置き換えます。

これがこれまでに遭遇した唯一の問題である場合、これを修正するためだけに間抜けなグリッド システムをインストールするべきではありません。それはやり過ぎであり、時間の無駄です。

http://jsfiddle.net/CoryDanielson/yuNTX/

サンプルhtml

<div class="table width100pct">  <!-- .table should have NO style. just 'display: table' -->
    <div class="tr">
        <div class="td"></div>
        <div class="td"></div>
    </div>
</div>​
<!-- class="table, tr, td" is ONLY for changing display: table, table-row and table-cell.
you SHOULD NOT include any styles inside of these CSS selectors. These classes will 
be removed when the divs are transformed into <table>, <tr>, <td>
-->

//conditionally load the javascript patches for ie7
<!--[if IE 7]><script src="/js/IE7fixes.js"></script><![endif]-->

IE7fixes.js

$(document).ready(function(){
  //comment out the if statement to check functionality without ie7    
  if ($.browser.msie && $.browser.version == 7) {
      $('html').addClass('ie7') //<html class="ie7">.. like modernizr
      var elem, elemClass    
      $('div.table').each(function(i, elem) {
          elem = $(elem)
          elemClass = elem.removeClass('table').attr('class') || ''
          elem.wrapInner("<table class='" + elemClass + "' />").children().unwrap()
      })
      $('div.tr').each(function(i, elem) {
          elem = $(elem)
          elemClass = elem.removeClass('tr').attr('class') || ''
          elem.wrapInner("<tr class='" + elemClass + "' />").children().unwrap()
      })  
      $('div.td').each(function(i, elem) {
          elem = $(elem)
          elemClass = elem.removeClass('td').attr('class') || ''
          elem.wrapInner("<td class='" + elemClass + "' />").children().unwrap()
      })
  }                    
});​

私のようにCSSを構成する必要があります

必須のCSS

table, div.table { width: 100%; }
tr, div.tr { vertical-align: top; }
/* the following 3 classes will be dropped when transformed in ie7
   but that won't matter because they'll fall back to <table><td><tr>
 */
div.table { display: table; } /* NO STYLES HERE */
div.tr { display: table-row; } /* NO STYLES HERE */
div.td { display: table-cell; } /* NO STYLES HERE */
于 2012-07-11T00:48:35.203 に答える
1

私はウェブサイトの非表形式のコンテンツをレイアウトするためにテーブルを何年も使用していないので、ここでいくつか見落としているかもしれませんが、いくつかの代替案とアイデアがあります.

要約すると: 根本的な問題は、現在使用している Web 開発手法よりも高速で、同じレイアウトを実現できる Web 開発手法を上司が使用することを望んでいるように思えます。上司はセマンティックには関心がありません。マークアップ。

表ベースのレイアウトの代わりに、CSS または Twitter Bootstrap や 960gs (注: 960gs は Bootstrap に含まれています) のようなサイト構築フレームワークを使用して、同じ目標を達成できると思います。これらのフレームワークには、行を含む div や、幅とオフセット要素を設定するスパンなどの非セマンティック マークアップがありますが、アクセシビリティと非セマンティック マークアップの量に関しては、テーブルを使用するよりも優れています。

要素 ID と追加のクラスを指定してスタイルを設定することで、これをさらに軽減できます。また、テーブル ベースのレイアウトを使用した場合よりも非意味的なマークアップが少なくなります。

根本的な問題の私の解釈から外れて、これらのいずれかのようなフレームワークは、事前にスタイル設定された要素と、全体的なデザイン -> コード -> 改訂サイクルで時間を節約する要素の適切な間隔をあける方法も提供します。 Web 開発のベスト プラクティスに反します。

Twitter Bootstrap のリソース:
http://twitter.github.com/bootstrap/ - ダウンロードと適切なドキュメントがあります
http://twitter.github.com/bootstrap/scaffolding.html - Bootstrap で使用するコードの例テーブルベースのレイアウトの代わりに

960gs (幅 960px のグリッド システム):
960.gs/ - ホームページ
https://speakerdeck.com/u/nathansmith/p/960-grid-system - 決定的な 960gs チュートリアルとそれを使用する理由
http://sixrevisions .com/web_design/the-960-grid-system-made-easy/ - Web デザインのグリッド システムについて学ぶために最初に使用したチュートリアル

私の最初の仮定が間違っていたら、ごめんなさい!また、ご不明な点や詳しい情報が必要な場合はお知らせください。

于 2012-07-11T00:50:39.537 に答える
0

Foundationなどの CSS フレームワークを試してみましたか? テーブル内の td 内のテーブル内の td 内に td を持つよりも優れています ... (:

于 2012-07-11T01:04:20.800 に答える