Wie kann man Grenzen zum Einsturz bringen (auf einem Div)?

81

Angenommen, ich habe ein Markup wie: 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>

Dann 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;
}

Ich habe das äußere Div mit display: table; border-collapse: collapse;und Zellen mit display: table-cellwarum kollabieren sie immer noch nicht? Was vermisse ich hier?

Übrigens gibt es vielleicht eine variable Anzahl von Zellen in einer Spalte, so dass ich nicht nur Ränder auf einer Seite haben kann.

Jiew Meng
quelle
Ähm, warum benutzt du nicht <table>und Freunde für Tische?
Mu ist zu kurz
@ Muistooshort, weil es vielleicht eine variable Anzahl von Zellen gibt und ich es vorziehe, keine leeren Zellen in dem bestimmten Design zu haben
Jiew Meng
Siehe auch
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功

Antworten:

36

Hier ist eine Demo

Zuerst müssen Sie Ihren Syntaxfehler korrigieren

display: table-cell;

nicht 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;
}
Hushme
quelle
Hmm im eigentlichen Code, ich habe es richtig geschrieben ... hmm ... ich denke, es muss etwas anderes im eigentlichen Code sein, das nicht funktioniert ... Ich werde versuchen herauszufinden, was dies verursachen könnte
Jiew Meng
Ich habe meinen Fehler korrigiert. Es ist wahr. Ich habe deine Antwort überprüft, aber ich entferne float: links und Breite und Höhe, die ich bereits über Border-Cell wusste
Hushme
1
@Hushme ja viele Leute wissen, aber manchmal mit wenig Problem auflegen, nein? sowieso weiter, ich habe kein problem.
Bhojendra Rauniyar
1
Das Abstimmungssystem betrifft mich nicht, aber ich kann glücklich sein, wenn jemand Hilfe bei mir bekommt.
Bhojendra Rauniyar
Sie sind nicht der einzige mit CSS-Fähigkeit Überprüfen Sie mein Profil Ich habe 7 Jahre Erfahrung als Front-End-Entwickler
Hushme
94

Verwenden Sie einen einfachen negativen Rand anstelle einer Anzeigetabelle.

Aktualisiert in Geige JS Geige

.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;
}
iamjustcoder
quelle
83

Verwenden Sie stattdessen borderuse 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;

Demo: http://codepen.io/Hawkun/pen/rsIEp

user1032559
quelle
5
Dies ist eigentlich die beste Lösung, die ich gefunden habe. Es sortiert das Problem, wenn Ihre Daten dynamisch generiert werden und es garantiert nicht perfekt, sagen wir 9 Elemente in einem Raster, sondern 2, wenn Sie dies mit anderen Lösungen haben, fehlen Ränder. Gut gemacht !
Unsparing
3
Guter Trick für reaktionsschnelle Layouts, um Änderungen an der Anzeigeeigenschaft zu vermeiden.
Kosmos
3
Dies funktioniert gut für Bildschirmmedien. Auf Printmedien wird Box-Shadow jedoch als Hintergrund betrachtet und nicht gedruckt.
Marcello Nuccio
Dies hat bei mir gut funktioniert, aber beachten Sie, dass diese ersten drei Schatten erreicht werden können mit: 1px 1px 0 1px # 888 Die Streuung und der Versatz kümmern sich um die Ecken.
Matt Schuette
1
box-shadowwird ignoriert (verschwindet), wenn kontrastreiche Themen in Windows verwendet werden. Geben Sie daher immer eine Alternative an, wenn Sie sich für die Barrierefreiheit interessieren.
Tomasz86
5

Sie müssen display: table-rowanstelle von float: left;zu Ihrer Spalte verwenden und natürlich als @Hushme Ihre diaplay: table-cellzu korrigierendisplay: 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;
}

Demo

Bhojendra Rauniyar
quelle
Hier überprüfen Sie den Link, den ich bereits verwendet habe, aber ich vergesse, float zu entfernen: left jsfiddle.net/R8eCr/2 siehe die
Linknummer
Ja, es ist okay. Sei einfach so nah.
Bhojendra Rauniyar
4

Sie können auch negative Ränder verwenden:

.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>

mpen
quelle
1
Ich habe die gleiche Methode angewendet, nur mit border-top/left: 0;. Ränder erzeugen Offsets.
Toster-CX
@ toster-cx Ich nehme an, das ist noch besser als die Grenzen zu überlappen. Gutes Denken :-)
mpen
3

Warum nicht Gliederung verwenden? es ist das, was Sie Umriss wollen : 1px durchgehend rot;

Muslimbek
quelle
1
Fügen Sie eine Erklärung mit Antwort hinzu, wie diese Antwort OP bei der Behebung des aktuellen Problems
hilft
2
Hier zeige ich viele Variationen des Einsturzes von Grenzen. (unter Verwendung des Bootstrap-Gitters): codepen.io/leonardo1024/pen/KgbNGr
Muslimbek
0

Beispiel für die Verwendung von Border-Collapse: separate; wie

  • Container als Tabelle angezeigt:

    ol[type="I"]>li{
      display: table;
      border-collapse: separate;
      border-spacing: 1rem;
    }
    
  • Dmytro Yurchenko
    quelle