2012-03-05 12 views
4

6個のキーと6個の値を含むキー値リストがあるとします。私はこれらのキー、値のペアをHTMLで表形式の方法(プレゼンテーション)でレンダリングしたいと思いますが、必ずしも表形式のデータではありません。したがって、HTML <table>タグは、次の2つの理由で推奨されません。テーブルレス設計では、非タブーデータを価値のある表形式のスタイルで表示できますか?

  1. データとの表示が分離されている必要があります。
  2. <table>タグは、表形式のデータの場合のみ、表示目的で使用しないでください。

とにかく、基本的な考え方は非常に単純に次のようなこれらの値を提示することである。

enter image description here

これは非常に簡単にHTML/CSSと<table>タグで達成されます。サンプルコードが提供される:

ZOOM、多くのブラウザに共通の特徴は、直感的に期待されるすべての行がユーザとして無傷のまま、高く設定されている。また
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <title>Test 1</title> 
    <style type="text/css"> 

    table { 
     width: 300px; 
     border: solid 1px black; 
     text-align: center; 
    } 

    </style> 
</head> 

<body> 

<table> 
    <tr><td>Key 1</td><td>Val 1</td><td>Key 4</td><td>Val 4</td></tr> 
    <tr><td>Key 2</td><td>Val 2</td><td>Key 5</td><td>Val 5</td></tr> 
    <tr><td>Key 3</td><td>Val 3</td><td>Key 6</td><td>Val 6</td></tr> 
</table> 

</body> 

</html> 

enter image description here

コモン表なしこのような構造のデザインは、CSS floatスタイルと、<ul><li>要素の組み合わせによるものです。

サンプルコードは、このアプローチのために与えられる:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <title>Test 1</title> 
    <style type="text/css"> 
    .table { 
     width: 300px; 
     border: solid 1px black; 
    } 

    .table ul { 
     float: left; 
     list-style: none; 
     padding-left: 0px; 
    } 

    .table ul li { 
     width: 75px; 
     text-align: center; 
     margin: auto;  
    } 

    .clear { 
     clear: both;  
    } 

    /* For modern browsers */ 
    .cf:before, 
    .cf:after { 
     content:""; 
     display:table; 
    } 

    .cf:after { 
     clear:both; 
    } 

    /* For IE 6/7 (trigger hasLayout) */ 
    .cf { 
     zoom:1; 
    } 


    </style> 
</head> 

<body> 


<div class="table cf"> 
    <ul> 
     <li>Key 1</li> 
     <li>Key 2</li> 
     <li>Key 3</li> 
    </ul> 

    <ul> 
     <li>Val 1</li> 
     <li>Val 2</li> 
     <li>Val 3</li> 
    </ul> 

    <ul> 
     <li>Key 4</li> 
     <li>Key 5</li> 
     <li>Key 6</li> 
    </ul> 

    <ul> 
     <li>Val 4</li> 
     <li>Val 5</li> 
     <li>Val 6</li> 
    </ul> 
</div> 


</body> 

</html> 

それは規定として働き、そしてあまりにも現在のブラウザでZOOM作品。 (IE6では、テキストのズームがすべてのものをプッシュしない限り、それは混乱している)。

私にはそれが直感的にするものの数があります。

  1. より多くのCSSを使用すると、各キーが続く順序で提示したい考えアクセシビリティを理想的には、特にclearfix
  2. ために、必要とされます各値、ここでは3つのキー、3つの値、3つのキー、3つの値を取得します。これは、CSSなしでこのオプションをレンダリングするのはかなり奇妙に見えますが、CSSなしのテーブルはまだ理にかなっています。

だから、基本的には、質問がに沸く:テーブルは非表形式のデータを提示する際に同じスタイルを模倣する<ul>、複雑な山車や他のCSSのトリックを使用しようとする理由を表形式のスタイルで情報を提示するので、よく遊ぶので、表のようなファッション?すべてのHTMLから<table>を取り除こうとすると、ここの大きな利点は何ですか?

EDIT 私は、これは元の質問オフビットを取得している知っているが、いくつかの答えは、それがより意味的に正確にするために<dl>の使用を示唆しました。同意する。だから、そのアプローチのためのサンプルコードは、以下の:どのような面倒であることは、この二つの別々の定義リストを達成するために作成されていることである、しかし

enter image description here

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
    <title>Test 1</title> 
    <style type="text/css"> 
    .table { 
     width: 300px; 
     border: solid 1px black; 
    } 

    .table dl { 
     float: left; 
     padding-left: 0px; 
     width: 150px; 
    } 

    .table dl dt, .table dl dd { 
     width: 75px; 
     text-align: center; 
     float: left; 
     margin: 0px; 
    } 

    /* clear fix is below */ 
    /* For modern browsers */ 
    .cf:before, 
    .cf:after { 
     content:""; 
     display:table; 
    } 

    .cf:after { 
     clear:both; 
    } 

    /* For IE 6/7 (trigger hasLayout) */ 
    .cf { 
     zoom:1; 
    } 


    </style> 
</head> 

<body> 


<div class="table cf"> 
    <dl> 
    <dt>Key1</dt> 
    <dd>Value1</dd> 
    <dt>Key2</dt> 
    <dd>Value2</dd> 
    <dt>Key3</dt> 
    <dd>Value3</dd> 
    </dl> 
    <dl> 
    <dt>Key4</dt> 
    <dd>Value4</dd> 
    <dt>Key5</dt> 
    <dd>Value5</dd> 
    <dt>Key6</dt> 
    <dd>Value6</dd> 
    </dl> 
</div> 



</body> 

</html> 

をこれはまだ同じ視覚効果を取得します。実際に、それはちょうど1つのリストであると仮定した場合:

<dl> 
    <dt>Key1</dt> 
    <dd>Value1</dd> 
    <dt>Key2</dt> 
    <dd>Value2</dd> 
    <dt>Key3</dt> 
    <dd>Value3</dd> 
    <dt>Key4</dt> 
    <dd>Value4</dd> 
    <dt>Key5</dt> 
    <dd>Value5</dd> 
    <dt>Key6</dt> 
    <dd>Value6</dd> 
    </dl> 

分割を含めるする唯一の理由は、プレゼンテーションの目的のためでした。あなたはどうやってこれを回避しますか?

+2

あなたはその決済部門を必要としません。浮動小数点をクリアする他の方法があります。 960.gsやBlueprint-cssのような多くのCSSフレームワークで '.clearfix'クラスを見てください。 – prodigitalson

+0

代わりにclearfixメソッドを使用するようにサンプルを更新しました。 – user17753

+0

単一の 'dl'のスタイリングについて:[CSS3には、これを解決する方法があります](http://www.w3.org/TR/css3-multicol):column-count。基本的に、スタイリングは 'dl {column-count:2; } dt、dd {float:left;幅:50%;マージン:0; } '。これは、CSS3の設計者がユースケースを理解していることを示しています。しかし、これを試してみると、動作しないことがわかります。現代のFirefoxとChromeで、 '-moz-'と '-webkit-'をそれぞれ 'column-count'の前に追加するようにすることができますが、他のブラウザはまだそうではありません... – Alohci

答えて

3

<dl>タグを使用すべき最も重要な例のようです。それは<ul>のようですが、キーと値のペアを許可します。例えば

https://developer.mozilla.org/en/HTML/Element/dl

<dl> 
    <dt>Key 1</dt> 
    <dd>Value 1</dd> 
    <dt>Key 2</dt> 
    <dd>Value 2</dd> 
    <dt>Key 3</dt> 
    <dd>Value 3</dd> 
</dl> 

<dl> 
    <dt>Key 4</dt> 
    <dd>Value 4</dd> 
    <dt>Key 5</dt> 
    <dd>Value 5</dd> 
    <dt>Key 6</dt> 
    <dd>Value 6</dd> 
</dl> 
+1

* W3Schoolsを参考にしてください*、理由の長いリストについては** [W3Fools](http://w3fools.com)**をご覧ください。 [MDN](https://developer.mozilla.org/ja/HTML/Element/dl)は、いくつかの非常に優れたHTML/CSS/Javascriptリファレンスの1つです。 –

+0

Googleで最初のヒットに過ぎませんでしたが、私はそのW3Foolsに読書をします。ありがとう! –

+0

Googleにログインしている場合は、[検索結果にサイトが表示されないようにする](http://support.google.com/websearch/bin/answer.py?hl=ja&answer=1210386)を行うことができます。これは、w3schoolsをあなたの結果から保つのに特に便利です: ')。 –

0

セマンティック意味 - スクリーン・リーダーは関係なく、レイアウトを回旋か、リストとしてリストを読みません。

0

私の意見では、テーブルには利点があり、Web開発では完全に無視してはいけません。

しかし、ほとんどの場合、テーブル以外のCSSレイアウトを使用する柔軟性は、Webページ全体の設計に役立ちます。

+0

これを拡張できますか?どのような柔軟性を意味していますか?例えば。どのようにテーブルの柔軟性が低くなっていますか?ほとんどの場合、テーブルはどこにでも同じように表示されているのがわかります(これはかなり柔軟です)。テーブルのようなプレゼンテーションを模倣しようとする複雑なCSSサイトでは、ブラウザごとに複数のスタイルシートやルールが必要になることがあります。 – user17753

1

私は私たちに、このためのDLを希望:

<div class="table"> 
    <dl> 
    <dt>Key1</dt> 
    <dd>Value1</dd> 
    <dt>Key2</dt> 
    <dd>Value2</dd> 
    <dt>Key3</dt> 
    <dd>Value3</dd> 
    </dl> 
    <dl> 
    <dt>Key4</dt> 
    <dd>Value4</dd> 
    <dt>Key5</dt> 
    <dd>Value5</dd> 
    <dt>Key6</dt> 
    <dd>Value6</dd> 
    </dl> 
</div> 

次に、あなたがそれに応じて物事を浮遊し、クリアすることができます。

1

<table />は意味的意味を持ちますが、テーブルの内容はありません。それは非視覚的なレベルで意味をなさない。ヘッダーはなく、ヘッダーはありません。

<table />をレイアウト用に使用していることが承認されています(要約が含まれているかどうかに基づいてプレゼンテーションを行うかどうかを判断しようとしています)。

本当にあなたのユーザーのためにあなたのhtmlを書く方法を決定する必要があります。そのために<tables />を使用していただければ幸いです。ちょうど誰かがそのマークアップに<div />を使用して満足しているかもしれません。視覚的なレベルでそれはすることができます仕事。レイアウトのためにテーブルを使用するほうが簡単だからと言っても、それはより賢明です。

マークアップが悪いと、マークアップが悪くなることがあります。

私は、あなたがページのズームについて懸念していることに気付きました。私はこれが対処するのが苦痛かもしれないことに同意しますが、私は、ページをズームするユーザーが、主に視覚障害のあるものであることを期待しがちです。私は、これらの人々に焦点を当ててスクリーンリーダーを使ってコンテンツを入手しなければならないユーザーに迷惑をかけてしまうのは間違いだと思う。テーブルを必要としないページ拡大に関する問題があります。

意味的であるため、これは<dl />を使用するのに最適な場所です。残念ながら、値のペアを分割しているわけではないので、表示する​​のアプローチはありません。

希望すれば、特定のポイントについて話すのはうれしいことです。意味のあるマークアップは常に目標です。

2

あなたはCSSを動作させることができるなら、<dl>はHTML5の仕様に従って、キーと値の関連付けに行く方法のようになります。

ただし、は、the headers attribute

<table> 
    <tr> 
     <th id="kv1_k">Key 1</th> 
     <td headers="kv1_k">Val 1</td> 

     <th id="kv4_k">Key 4</th> 
     <td headers="kv4_k">Val 4</td> 
    </tr> 
    <tr> 
     <th id="kv2_k">Key 2</th> 
     <td headers="kv2_k">Val 2</td> 

     <th id="kv5_k">Key 5</th> 
     <td headers="kv5_k">Val 5</td> 
    </tr> 
    <tr> 
     <th id="kv3_k">Key 3</th> 
     <td headers="kv3_k">Val 3</td> 

     <th id="kv6_k">Key 6</th> 
     <td headers="kv6_k">Val 6</td> 
    </tr> 
</table> 
を使用して、テーブルとキーと値の関連付けを表します。

したがって、データのセマンティクスは可能な限り表現されているので、ここでテーブルを使用すると何も問題はありません。