境界線を(div上で)崩壊させる方法は?


81

http://jsfiddle.net/R8eCr/1/のようなマークアップがあるとします。

<div class="container">
    <div class="column">
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
    </div>
    <div class="column">
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
    </div>
    <div class="column">
        <div class="cell"></div>
        <div class="cell"></div>
        <div class="cell"></div>
    </div>
    ...
</div>

次にCSS

.container {
    display: table;
    border-collapse: collapse;
}
.column {
    float: left;
    overflow: hidden;
    width: 120px;
}
.cell {
    display: table-cell;
    border: 1px solid red;
    width: 120px;
    height: 20px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}

私は外側のdivdisplay: table; border-collapse: collapse;とセルを持っていますが、display: table-cellなぜそれらはまだ崩壊しないのですか?ここで何が欠けていますか?

ちなみに、列には可変数のセルがあるので、片側だけに境界線を付けることはできません。


えーと、<table>テーブルに友達を使ってみませんか?
ムーが短すぎる

@ muistooshort、cosセルの数は可変である可能性があり、特定のデザインで空のセルを使用し
たくない

回答:


36

これがデモです

まず、構文エラーを修正する必要があります。

display: table-cell;

ない diaplay: table-cell;

   .container {
    display: table;
    border-collapse:collapse
}
.column {
    display:table-row;
}
.cell {
    display: table-cell;
    border: 1px solid red;
    width: 120px;
    height: 20px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}

うーん、実際のコードでは、スペルト小麦は正しいです...うーん...実際のコードでは機能していない何か他のものに違いないと思います...これを引き起こしている可能性があるものを見つけようとします
Jiew孟

私は自分の間違いを正しました。あなたの答えを確認しましたが、float:leftとwidthとheightを削除しました
。border

1
@Hushmeええ、多くの人が知っていますが、問題なくハングアップすることもありますね。とにかく続けて、私は問題ありません。
Bhojendra Rauniyar 2013

1
投票システムは私に影響を与えませんが、誰かが私を助けてくれると私は幸せかもしれません。
Bhojendra Rauniyar 2013

css機能を持っているのはあなただけではありません私のプロファイルを確認してください私はフロントエンド開発者として7年の経験があります
Hushme 2013

94

表示テーブルを使用するのではなく、単純な負のマージンを使用します。

fiddle JSFiddleで更新

.container { 
    border-style: solid;
    border-color: red;
    border-width: 1px 0 0 1px;
    display: inline-block;
}
.column { 
    float: left; overflow: hidden; 
}
.cell { 
    border: 1px solid red; width: 120px; height: 20px; 
    margin:-1px 0 0 -1px;
}
.clearfix {
    clear:both;
}

83

代わりに使用をborder使用しますbox-shadow

  box-shadow: 
    2px 0 0 0 #888, 
    0 2px 0 0 #888, 
    2px 2px 0 0 #888,   /* Just to fix the corner */
    2px 0 0 0 #888 inset, 
    0 2px 0 0 #888 inset;

デモ:http//codepen.io/Hawkun/pen/rsIEp


5
これは実際に私が見つけた最良の解決策です。データが動的に生成され、完全な保証がない場合は問題を分類します。たとえば、グリッド内に9つのアイテムがありますが、他のソリューションでそれがある場合は境界が失われます。よくやった !
2015年

3
レスポンシブレイアウトの良いトリックで、表示プロパティの変更を避けます。
コスモス2015

3
これはスクリーンメディアでは問題なく機能します。ただし、印刷メディアでは、ボックスシャドウは背景と見なされ、印刷されません。
マルチェロヌッチョ2016

これは私にとってはうまくいきましたが、最初の3つのシャドウは次の方法で実現できることに注意してください。1px1px0 1px#888スプレッドとオフセットがコーナーを処理します。
Matt Schuette 2016

1
box-shadowWindowsで高コントラストのテーマを使用する場合は無視されます(消えます)ので、アクセシビリティを気にする場合は常に代替を提供してください。
tomasz86 2017

5

あなたはあなたのコラムのdisplay: table-row代わりに使用する必要がありfloat: left;、明らかに@Hushmeがあなたdiaplay: table-cellを修正するのでdisplay: table-cell;

 .container {
    display: table;
    border-collapse: collapse;
}
.column {
    display: table-row;
    overflow: hidden;
    width: 120px;
}
.cell {
    display: table-cell;
    border: 1px solid red;
    width: 120px;
    height: 20px;
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
}

デモ


ここで、私がすでに使用していたリンクを確認しますが、float:left jsfiddle.net/R8eCr/2を削除するのを忘れています。リンク番号を参照してください
Hushme 2013

ええ、それは大丈夫です。とても近くにいてください。
Bhojendra Rauniyar 2013

4

負のマージンを使用することもできます。

.column {
  float: left;
  overflow: hidden;
  width: 120px;
}
.cell {
  border: 1px solid red;
  width: 120px;
  height: 20px;
  box-sizing: border-box;
}
.cell:not(:first-child) {
  margin-top: -1px;
}
.column:not(:first-child) > .cell {
  margin-left: -1px;
}
<div class="container">
  <div class="column">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
  </div>
  <div class="column">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
  </div>
  <div class="column">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
  </div>
  <div class="column">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
  </div>
  <div class="column">
    <div class="cell"></div>
    <div class="cell"></div>
    <div class="cell"></div>
  </div>
</div>


1
だけで同じ方法を使用しましたborder-top/left: 0;。マージンはオフセットを作成します。
toster-cx 2017

@ toster-cx境界線を重ねるよりも良いと思います。良い考え:
mpen 2017年

3

アウトラインを使ってみませんか?それはあなたが望むものです outline:1px黒一色;


1
現在の問題を修正する方法で、この答えのヘルプOPのための答えを持ついくつかの説明を追加
ρяσѕρєяK

2
ここでは、境界の崩壊の多くのバリエーションを示します。(ブートストラップグリッドを使用):codepen.io/leonardo1024/pen/KgbNGr
Muslimbek

0

border-collapseの使用例:separate; なので

  • テーブルとして表示されるコンテナ:

    ol[type="I"]>li{
      display: table;
      border-collapse: separate;
      border-spacing: 1rem;
    }
    
  • 弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
    Licensed under cc by-sa 3.0 with attribution required.