Як змусити руйнуватися межі (на 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;
}

У мене є зовнішній div з display: table; border-collapse: collapse;і комірки, display: table-cellчому вони все ще не згортаються? Чого мені тут не вистачає?

До речі, там може бути змінна кількість комірок у стовпці, тому я не можу мати лише межі з одного боку.


Гм, чому ви не використовуєте <table>друзів за столами?
мю занадто коротке

@muistooshort, тому що, можливо, є змінна кількість комірок, і я волію не мати порожніх комірок у конкретному дизайні
Jiew Meng

Відповіді:


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 Meng

я виправив свою помилку, це правда, я перевірив вашу відповідь, але
видаляю

1
@Hushme, так, багато людей знають, але іноді зависання з невеликою проблемою, ні? у будь-якому разі продовжуйте, у мене немає проблем.
Bhojendra Rauniyar

1
система голосування не впливає на мене, але я можу бути радий, коли хтось допоможе мені.
Bhojendra Rauniyar

Ви не єдиний, хто має можливість css перевірити мій профіль, я маю 7-річний досвід роботи як розробник
інтерфейсу

94

Використовуйте просте від’ємне поле, а не таблицю відображення.

Оновлено у скрипті JS Fiddle

.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

Замість використання 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;

Демонстрація: http://codepen.io/Hawkun/pen/rsIEp


5
це насправді найкраще рішення, яке я знайшов. Це сортує проблему, якщо ваші дані генеруються динамічно, і це не гарантує ідеальних, скажімо, 9 елементів у сітці, а натомість 2, які, якщо у вас є це з іншими рішеннями, у вас відсутні рамки. Молодці!
Незбереження

3
Хороший трюк для адаптивних макетів, уникаючи зміни властивості відображення.
kosmos

3
Це чудово працює для екранних носіїв. Але на друкованих носіях тінь вікна вважається фоном, а не друкується.
Марчелло Нуччо,

Для мене це добре працювало, але зауважте, що перші три тіні можна виконати за допомогою: 1px 1px 0 1px # 888 Розширення та зміщення подбають про кути.
Matt Schuette

1
box-shadowігнорується (зникає) під час використання тем із високою контрастністю у Windows, тому будь-ласка завжди надайте альтернативу, якщо ви дбаєте про доступність.
tomasz86

5

Ви повинні використовувати display: table-rowзамість float: left;до вашого колонку і , очевидно , як @Hushme виправити diaplay: table-cellTodisplay: 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

так, це нормально. просто будь так близько.
Bhojendra Rauniyar

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

@ toster-cx Я думаю, це навіть краще, ніж перекриття кордонів. Гарне мислення :-)
mpen

3

Чому б не використовувати контур? це те, що ви хочете окреслити: 1px суцільно-червоний;


1
Додайте пояснення з відповіддю на те, як ця відповідь допомагає ОП у вирішенні поточної проблеми
ρяσѕρєя K

2
Тут я показую багато варіантів руйнування кордону. (з використанням сітки Bootstrap): codepen.io/leonardo1024/pen/KgbNGr
Muslimbek

0

Приклад використання граничного колапсу: окремо; як

  • контейнер, що відображається як таблиця:

    ol[type="I"]>li{
      display: table;
      border-collapse: separate;
      border-spacing: 1rem;
    }
    
  • Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
    Licensed under cc by-sa 3.0 with attribution required.