2012-05-21 12 views
110

私は多くの行を含むテーブルを持っています。これらの行の一部はclass="highlight"であり、行のスタイルを変更して強調表示する必要があります。私がやろうとしているのは、これらの行の前後にいくつか余分なスペースを入れて、他の行と少し離れて見えるようにすることです。テーブル行に余白を追加する方法<tr>

私はmargin-top:10px;margin-bottom:10px;でこれを行うことができると思ったが、うまくいかなかった。誰でもこれをやり遂げる方法を知っていますか?ここにHTMLがあり、tbodyの2番目のtrをクラスのハイライトに設定しました。

<table> 
<thead> 
    <tr> 
    <th>Header 1</th> 
    <th>Header 2</th> 
    </tr> 
</thead> 
<tbody> 
    <tr> 
    <td>Value1</td> 
    <td>Value2</td> 
    </tr> 
    <tr class="highlight"> 
    <td>Value1</td> 
    <td>Value2</td> 
    </tr> 
    <tr> 
    <td>Value1</td> 
    <td>Value2</td> 
    </tr> 
    <tr> 
    <td>Value1</td> 
    <td>Value2</td> 
    </tr> 
</tbody> 
</table> 
+0

が重複する可能性を[CSSの:どのようにテーブル内の行間にギャップを作成するのですか?](http://stackoverflow.com/questions/1264187/css-how-do-i-create-a-gap-between-rows-in- a-table)およびhttp://stackoverflow.com/質問/ 351058 /スペース間の2行のテーブル内 – j08691

+0

これを試してください:tr.highlight td { position:relative; 背景色:#EEEEEE; パディング:5px 0 5px 0; } – Sajmon

+2

['separated'ボックスモデル](https://developer.mozilla.org/en-US/docs/Web/CSS/border-collapse)を使用している場合は、ボーダーで再生したいという効果を得ましたセル要素(TDとTH)のうち、@JrdのようなTRは提案しません: tr.highlight td { border-top:10px solid; border-bottom:10pxソリッド; border-color:transparent; } –

答えて

102

テーブル行にはマージン値を設定できません。あなたは詰め物を増やすことができますか?それはうまくいくでしょう。そうでない場合は、class="highlighted"行の前後に<tr class="spacer"></tr>を挿入することができます。

+13

''に任意の種類のパディングを追加すると、 'display:block'を指定しないと何も移動しません。その時点で' 'の幅はコンテンツに基づいています。あなたの提案されたスペーサー ''をセットして 'height'をセットすると、完全に動作します。 – baacke

+0

より正確には、は[CSS 2.1](http://www.w3.org/TR/CSS21/box.html#propdef-margin)以来余白の値を持つことはできませんが、[CSS 2](http: //www.w3.org/TR/1998/REC-CSS2-19980512/box.html#margin-properties)。私は変化の背後にある理由を見いださなかった。 – Futal

+1

残念ながら、 'tr'はマージン値を持つことができません。スティーブが書いたように。私はこの代わりに、それぞれの 'td'にマージン値を設定しました。なぜなら、行が異なる色(背景)であり、空白(白い)の空間を必要とする場合です。 – nelek

44

あなたは<tr>が自分自身をのスタイルすることはできませんが、私はあなたがあなたの分析を見てみることをお勧め強くなり、この

tr.highlight td {padding-top: 10px; padding-bottom:10px} 
+7

'td'' background-color'が 'tr'と同じ場合にのみ視覚的に動作します。 – baacke

+1

すぐに問題が解決しました – ChrisAdmin

-1

のように、「ハイライト」<tr> SAスタイル内<td> Sを与えることができますIE7以下のユーザーがサイトにアクセスした回数を確認できます。 IE7のサポートを中止できるようになりました。これは、CSSテーブルを使用できることを意味します。これにより、作業が非常に簡単になります。あなたはCSSを使用しようとする可能性があり

+2

CSSテーブルスタイルのものが簡単になるのはなぜですか?実際のテーブルと比較して作業するには?たとえば、colspan属性とrowspan属性の簡単な代替方法は何ですか? –

+0

Colspanとrowspanは、使用方法に応じて、HTMLテーブルを使用する方が簡単です。 CSSを使ってレイアウトをより詳細に制御できるようになりました.HTMLテーブルが期待どおりに動作しないという問題に既に遭遇していますが、CSSではやや簡単です – user1337

+3

-1:表形式のデータを表示するために表を使用している場合、完全に正しく動作しています。これを行うには、表が意味的に正しい唯一の方法です。あなたがレイアウトを理由にそれらを悪用しているならば、テーブルを避けるべきです(OPは言及しませんでした)。 – Gundon

1

は全体TRをインデントに変換:

tr.indent { 
    -webkit-transform: translate(20px,0); 
    -moz-transform: translate(20px,0); 
} 

私はこれが有効な解決策だと思います。私のOSX上でFirefox 16、Chrome 23、Safari 6で正常に動作するようです。

table tr { 
    border-bottom: 4px solid; 
} 

各列の間の垂直間隔の4pxを追加します。

2

は、ここで私はそれをやったきちんとした方法です。そして、あなたは最後の子にその境界線を取得しないしたい場合:CSS3擬似セレクターのみselectivizrとIE 8で上下に動作することを

table tr:last-child { 
    border-bottom: 0; 
} 

はリマインダー。

+0

これは実際の方法です。シンプルで非常に迷惑なものです。同じ結論になったあなたは1つのことを逃しました、境界線に透明な色をつけてください。 'border-bottom:10px solid transparent' – mangonights

17

行の高さは、クラス前に、このスタイルを追加することが可能溶液

tr 
{ 
    line-height:30px; 
} 
+0

それはダックマージンであり、パディングは機能しません。 Thakns – L1ghtk3ira

+0

これで私はvertical-align:bottomを使うことができませんでした。 – Noumenon

+0

これは私にとって最高のソリューションです。 –

-1

ことができる=「強調表示」 パディング底と ディスプレイを細胞にDIVを追加インラインテーブル

0

ありますあなたには、いくつかの余分なスペースを追加したいこと:

<tr class="highlight"> 
<td><div>Value1</div></td> 
<td><div>Value2</div></td> 
</tr> 
tr.highlight td div { 
margin-top: 10px; 
} 
32

border-spacingプロパティは、このparticuために動作しますラーケース。

table { 
    border-collapse:separate; 
    border-spacing: 0 1em; 
} 

Reference

+1

のように動作します; – Verri

16

私はこれが一種だと知っていますが、私はちょうど同じ行に沿って何か作業をしています。これを行うことはできませんでしたか?

tr.highlight { 
    border-top: 10px solid; 
    border-bottom: 10px solid; 
    border-color: transparent; 
} 

希望します。後か:疑似セレクタに加え、背景色を理解していないブラウザの問題を避けるかもしれない

tr.highlight td:last-child:after 
{ 
    content: "\0a0"; 
    line-height: 3em; 
} 

がある前にいない問題

+2

ありがとうございますが、TD要素のプロパティを動かす必要がありました: tr.highlight td { border-top:10px solid; border-bottom:10pxソリッド; border-color:transparent; } –

+1

本当にその上に境界線が必要な場合は、機能しません。 – JulienD

0

別の可能性は、擬似セレクタを使用することです。

しかしながら、欠点は、最後のセルの後に余分な空白を追加することです。

0

次のように単純なjQueryコードをあきらめて挿入しました。あなたは私のような多くのtrを持っている場合、これはtrの後にtrを追加します。 デモ:https://jsfiddle.net/acf9sph6/

<table> 
    <tbody> 
    <tr class="my-tr"> 
     <td>one line</td> 
    </tr> 
    <tr class="my-tr"> 
     <td>one line</td> 
    </tr> 
    <tr class="my-tr"> 
     <td>one line</td> 
    </tr> 
    </tbody> 
</table> 
<script> 
$(function() { 
     $("tr.my-tr").after('<tr class="tr-spacer"/>'); 
}); 
</script> 
<style> 
.tr-spacer 
{ 
    height: 20px; 
} 
</style> 
2

テーブル行の間のマージンの外観を与えるためにハックは、それらを背景と同じ色の境界線を与えることです。これは、HTMLマークアップを変更できない第三者のテーマをスタイリングするときに便利です。例:

tr{ 
    border: 5px solid white; 
} 
7

margintrに無視されているので、私は通常のでbackground-colorは国境の下に塗られない透明border-bottomまたはborder-topを設定し、padding-boxbackground-clipプロパティを設定することで、回避策を使用します。

table { 
    border-collapse: collapse; /* [1] */ 
} 

th, td { 
    border-bottom: 5px solid transparent; /* [2] */ 
    background-color: gold; /* [3] */ 
    background-clip: padding-box; /* [4] */ 
} 
  1. 必ず細胞が共通の境界を共有しますが、完全に任意です。このソリューションはそれなしで動作します。
  2. 5px値は
  3. デモをここで見るbackgroundborder

の下に描かれていない得ることを確認します/セルあなたの行のbackground-colorを設定します。あなたは

  • を達成したいのマージンを表しますhttp://codepen.io/meodai/pen/MJMVNR?editors=1100

    background-clipは、all modern browserでサポートされています。 (そしてIE9 +)

    また、border-spacingを使用することもできます。しかし、これはborder-collapsecollapseに設定されていると機能しません。

  • +1

    コードペンへのリンク(404)が壊れています。 – OmegaMan

    4

    行の余白を模倣する方法は、擬似セレクタを使用してtdにスペーシングを追加することです。

    .highlight td::before, .highlight td::after 
    { 
        content:""; 
        height:10px; 
        display:block; 
    } 
    

    このように、ハイライトクラスでマークされたものは、上下に分けられます。

    https://jsfiddle.net/d0zmsrfs/

    4

    まず第一に、それは現代のレンダリングでは動作しませんので、<tr>または<td>にマージンを入れしようとしないでください。

    • ソリューション1

    マージンは動作しませんが、作業を行うパディング:

    td{ 
        padding-bottom: 10px; 
        padding-top: 10px; 
    } 
    

    警告:これも遠くから国境をプッシュします境界線が表示されている場合は、代わりにソリューション2を使用できます。

    • ソリューション2

    そうのようなあなたのリールテーブルの<tr>のそれぞれの間に別の<tr>を入れ、近い要素に境界線を維持し、マージンを模倣する:

    <tr> 
        <td> Hello </td><td> Hello</td> 
    </tr> 
    
    <tr style="height: 20px;"> <!-- Mimic the margin --> 
    </tr> 
    
    <tr> 
        <td> Hello </td><td> Hello</td> 
    </tr> 
    
    +0

    しかし、これは必ずしも所望の効果を生み出すとは限らない。たとえば、行に上部または下部の境界線がある場合、このCSSが追加するスペースは境界線の内側になりますが、マージンを使用すると外側になることが予想されます。 –

    +0

    代わりにマージンを使ってテストします。希望の結果が得られれば私の答えを編集します。 –

    +0

    @PhilipStratford私はあなたが私に進化を強いられてうれしく思います。 –

    関連する問題