2016-02-27 3 views
0

Я хотел бы получить следующий макет в HTML, используя теги div вместо тегов таблицы (раскраска только для того, чтобы сделать более понятным, какие ячейки я хочу иметь равную ширину):Вставить таблицу div в таблицу div

enter image description here

То есть, я хотел бы иметь возможность развернуть макет таблицы в другой сервировки стола, используя только Div теги. Это возможно?

Ниже я включил один из моих экспериментов. Как видите, первый столбец становится слишком широким. Внутренняя таблица не охватывает всю ширину.

.table { 
 
    display: table; 
 
    border-collapse: collapse; 
 
} 
 
.row { 
 
    display: table-row; 
 
    border-collapse: collapse; 
 
} 
 
.cell { 
 
    display: table-cell; 
 
    border-collapse: collapse; 
 
    padding: 2px 6px; 
 
} 
 
.yellow { 
 
    background-color: #ffdb4d; 
 
} 
 
.orange { 
 
    background-color: #ffa64d; 
 
} 
 
.red { 
 
    background-color: #ff6666; 
 
} 
 
.purple { 
 
    background-color: #b800e6; 
 
} 
 
.blue { 
 
    background-color: #66b3ff; 
 
} 
 
.green { 
 
    background-color: #70db70; 
 
}
<div class="table"> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell11</div> 
 
    <div class="cell orange">cell21</div> 
 
    <div class="cell red">cell31</div> 
 
    <div class="cell purple">cell41</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell12</div> 
 
    <div class="cell orange">cell22</div> 
 
    <div class="cell red">cell32</div> 
 
    <div class="cell purple">cell42</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell13</div> 
 
    <div class="cell orange">cell23</div> 
 
    <div class="cell red">cell33</div> 
 
    <div class="cell purple">cell43</div> 
 
    </div> 
 
    <div class="table"> 
 
    <div class="row"> 
 
     <div class="cell blue">Some text:</div> 
 
     <div class="cell green">blah blah</div> 
 
    </div> 
 
    <div class="row"> 
 
     <div class="cell blue">Some other text:</div> 
 
     <div class="cell green">blah blah blah</div> 
 
    </div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell15</div> 
 
    <div class="cell orange">cell25</div> 
 
    <div class="cell red">cell35</div> 
 
    <div class="cell purple">cell45</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell16</div> 
 
    <div class="cell orange">cell26</div> 
 
    <div class="cell red">cell36</div> 
 
    <div class="cell purple">cell46</div> 
 
    </div> 
 
</div>

+2

Это честно имеет смысл использовать фактические элементы таблицы в этой точке. –

ответ

1

вот код, который вам нужно будет сделать то, что вы хотите

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <style type="text/css"> 
     div { 
      min-width: 200px; 
      min-height: 200px; 
      border: 2px solid black; 
     } 
    </style> 
</head> 
<body> 
    <div style="display: table;"> 
     <div style="display: table-column-group;"> 
      <div style="display: table-column; background-color: #FFE061;"></div> 
      <div style="display: table-column; background-color: #FFC072;"></div> 
      <div style="display: table-column; background-color: #FF605E;"></div> 
      <div style="display: table-column; background-color: #9D44B8;"></div> 
     </div> 
     <div style="display: table-row;"> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
     </div> 
     <div style="display: table-row;"> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
     </div> 
     <div style="display: table-row;"> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
     </div> 
     <div style="display: table-row;"> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
      <div style="display: table-cell;"></div> 
     </div> 
    </div> 
</body> 
</html> 

Теперь давайте объясним все это как вы просили вы хотите создать таблицу, но без таблицы html tag вы можете сделать это с помощью divs, используя CSS3, специально используя дисплей, чтобы выбрать способ отображения этого div (обратите внимание, что значением по умолчанию является блок для дивы) Я считаю, что вы могли бы понять это гораздо лучше, если сравнить между двумя кодами один с дивами, а другие, который является обычной таблицей

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <style type="text/css"> 
     table { 
      min-height: 500px; 
      min-width: 600px; 
     } 
    </style> 
</head> 
<body> 
    <table> 
     <colgroup> 
      <col style="background-color: #FFE061;" /> 
      <col style="background-color: #FFC072;" /> 
      <col style="background-color: #FF605E;" /> 
      <col style="background-color: #9D44B8;" /> 
     </colgroup> 
     <tr> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
     </tr> 
     <tr> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
     </tr> 
     <tr> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
     </tr> 
     <tr> 
      <td></td> 
      <td></td> 
      <td></td> 
      <td></td> 
     </tr> 
    </table> 
</body> 
</html> 
+1

Мне нравится это решение. Но лучше использовать классы вместо встроенного кодирования. Встроенный код снижает производительность браузера. –

+0

не стесняйтесь редактировать ответ – hamada147

+0

Спасибо, но эту часть я уже знаю! Это было больше, как добиться таблицы в таблице в том, как я попытался проиллюстрировать моим рисунком ... – Stine

1

Просто предложение: я не очень понять, зачем использовать div вместо таблиц в этом случае. Кажется, что это «таблица» для реальных табличных данных, таблицы облегчили бы вам.

Несмотря на то, что да! : D Вы можете достичь этого, используя divs и css. Я сделал вам пример, и вы можете видеть, что он работает здесь http://codepen.io/anon/pen/QNWKdV

Было бы полезно использовать классы css, такие как .w[size], как вы можете видеть ниже.

<div class="table w100"> 
    <div class="row"> 
    <div class="cell yellow">cell11</div> 
    <div class="cell orange">cell21</div> 
    <div class="cell red">cell31</div> 
    <div class="cell purple">cell41</div> 
    </div> 
    <div class="row"> 
    <div class="cell yellow">cell12</div> 
    <div class="cell orange">cell22</div> 
    <div class="cell red">cell32</div> 
    <div class="cell purple">cell42</div> 
    </div> 
    <div class="row"> 
    <div class="cell yellow">cell13</div> 
    <div class="cell orange">cell23</div> 
    <div class="cell red">cell33</div> 
    <div class="cell purple">cell43</div> 
    </div> 
</div> 
<div class="table w100"> 
    <div class="row"> 
    <div class="cell w30 blue">Some text:</div> 
    <div class="cell w70 green">blah blah</div> 
    </div> 
    <div class="row"> 
    <div class="cell w30 blue">Some other text:</div> 
    <div class="cell w70 green">blah blah blah</div> 
    </div> 
</div> 
<div class="table w100"> 
    <div class="row"> 
    <div class="cell yellow">cell15</div> 
    <div class="cell orange">cell25</div> 
    <div class="cell red">cell35</div> 
    <div class="cell purple">cell45</div> 
    </div> 
    <div class="row"> 
    <div class="cell yellow">cell16</div> 
    <div class="cell orange">cell26</div> 
    <div class="cell red">cell36</div> 
    <div class="cell purple">cell46</div> 
    </div> 
</div> 
.table { 
    display: table; 
    border-collapse: collapse; 
} 
.row { 
    display: table-row; 
    border-collapse: collapse; 
} 
.cell { 
    display: table-cell; 
    border-collapse: collapse; 
    padding: 2px 6px; 
    width: 25%; 
} 
.yellow { 
    background-color: #ffdb4d; 
} 
.orange { 
    background-color: #ffa64d; 
} 
.red { 
    background-color: #ff6666; 
} 
.purple { 
    background-color: #b800e6; 
} 
.blue { 
    background-color: #66b3ff; 
} 
.green { 
    background-color: #70db70; 
} 

.w5 {width: 5%;} 
.w10 {width: 10%;} 
.w15 {width: 15%;} 
.w20 {width: 20%;} 
.w25 {width: 25%;} 
.w30 {width: 30%;} 
.w35 {width: 35%;} 
.w40 {width: 40%;} 
.w45 {width: 45%;} 
.w50 {width: 50%;} 
.w55 {width: 55%;} 
.w60 {width: 60%;} 
.w65 {width: 65%;} 
.w70 {width: 70%;} 
.w75 {width: 75%;} 
.w80 {width: 80%;} 
.w85 {width: 85%;} 
.w90 {width: 90%;} 
.w95 {width: 95%;} 
.w100 {width: 100%;} 

Я надеюсь, что вы можете выполнить свою задачу.

Удачи.

С уважением.

+0

Спасибо, но для меня результат этого похож на то, что я разместил? Внутренняя таблица охватывает только первый столбец основной таблицы ... – Stine

1

Вы можете сделать три разделенные таблицы, а не одну. Смотрите обновленный пример:

.table { 
 
    display: table; 
 
    border-collapse: collapse; 
 
    table-layout: fixed; /*new*/ 
 
    width: 100%; /*new*/ 
 
    margin-bottom: 20px; /*new*/ 
 
} 
 
.row { 
 
    display: table-row; 
 
    border-collapse: collapse; 
 
} 
 
.cell { 
 
    display: table-cell; 
 
    border-collapse: collapse; 
 
    padding: 2px 6px; 
 
} 
 
.yellow { 
 
    background-color: #ffdb4d; 
 
} 
 
.orange { 
 
    background-color: #ffa64d; 
 
} 
 
.red { 
 
    background-color: #ff6666; 
 
} 
 
.purple { 
 
    background-color: #b800e6; 
 
} 
 
.blue { 
 
    background-color: #66b3ff; 
 
} 
 
.green { 
 
    background-color: #70db70; 
 
}
<div class="table"> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell11</div> 
 
    <div class="cell orange">cell21</div> 
 
    <div class="cell red">cell31</div> 
 
    <div class="cell purple">cell41</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell12</div> 
 
    <div class="cell orange">cell22</div> 
 
    <div class="cell red">cell32</div> 
 
    <div class="cell purple">cell42</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell13</div> 
 
    <div class="cell orange">cell23</div> 
 
    <div class="cell red">cell33</div> 
 
    <div class="cell purple">cell43</div> 
 
    </div> 
 
</div> 
 

 
<div class="table"> 
 
    <div class="row"> 
 
    <div class="cell blue" style="width:30%;">Some text:</div> 
 
    <div class="cell green">blah blah</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell blue">Some other text:</div> 
 
    <div class="cell green">blah blah blah</div> 
 
    </div> 
 
</div> 
 

 
<div class="table"> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell15</div> 
 
    <div class="cell orange">cell25</div> 
 
    <div class="cell red">cell35</div> 
 
    <div class="cell purple">cell45</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell16</div> 
 
    <div class="cell orange">cell26</div> 
 
    <div class="cell red">cell36</div> 
 
    <div class="cell purple">cell46</div> 
 
    </div> 
 
</div>

+0

Это правильный ответ. Макет одиночной таблицы приводит к тому, что ширина внутренней таблицы соответствует ширине первого столбца. – symlink

+0

Спасибо, но как я могу обеспечить, например, все желтые клетки равны по ширине? Без указания статической ширины ... – Stine

+0

У меня это в примере, который является «table-layout: fixed;», который будет выполнять столбец равной ширины, если yo не укажет ширину вручную. – Stickers

2

вы должны использовать гибкий для этого:

.table { 
 
    margin: 1em 0; 
 
} 
 
.row { 
 
    display: flex; 
 
} 
 
.cell { 
 
    flex:1; 
 
    box-shadow:0 0 0 1px gray; 
 
    padding: 2px 6px; 
 
} 
 
.cell.green { 
 
    flex:3.06; 
 
} 
 
.yellow { 
 
    background-color: #ffdb4d; 
 
} 
 
.orange { 
 
    background-color: #ffa64d; 
 
} 
 
.red { 
 
    background-color: #ff6666; 
 
} 
 
.purple { 
 
    background-color: #b800e6; 
 
} 
 
.blue { 
 
    background-color: #66b3ff; 
 
} 
 
.green { 
 
    background-color: #70db70; 
 
}
<div class="table"> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell11</div> 
 
    <div class="cell orange">cell21</div> 
 
    <div class="cell red">cell31</div> 
 
    <div class="cell purple">cell41</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell12</div> 
 
    <div class="cell orange">cell22</div> 
 
    <div class="cell red">cell32</div> 
 
    <div class="cell purple">cell42</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell13</div> 
 
    <div class="cell orange">cell23</div> 
 
    <div class="cell red">cell33</div> 
 
    <div class="cell purple">cell43</div> 
 
    </div> 
 
    <div class="table"> 
 
    <div class="row"> 
 
     <div class="cell blue">Some text:</div> 
 
     <div class="cell green">blah blah</div> 
 
    </div> 
 
    <div class="row"> 
 
     <div class="cell blue">Some other text:</div> 
 
     <div class="cell green">blah blah blah</div> 
 
    </div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell15</div> 
 
    <div class="cell orange">cell25</div> 
 
    <div class="cell red">cell35</div> 
 
    <div class="cell purple">cell45</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell16</div> 
 
    <div class="cell orange">cell26</div> 
 
    <div class="cell red">cell36</div> 
 
    <div class="cell purple">cell46</div> 
 
    </div> 
 
</div>

или падение дисплея: стол на родителей, чтобы разорвать table- раскладка. colspan CSS не доступен.

.table { 
 
    display: inline-block;/* instead table to be able to shrink on content as table does*/ 
 
    vertical-align:top; 
 
    margin:1em 0; 
 
} 
 
.row { 
 
    width:100%; 
 
    display: table; 
 
    table-layout:fixed;/* add/remove this to find out what behavior on width it involves*/ 
 
    border-collapse: collapse; 
 
} 
 
.cell { 
 
    display: table-cell; 
 
    border-collapse: collapse; 
 
    padding: 2px 6px; 
 
    box-shadow:0 0 0 1px gray 
 
} 
 
.cell.green { 
 
    width:73%; 
 
} 
 
.yellow { 
 
    background-color: #ffdb4d; 
 
} 
 
.orange { 
 
    background-color: #ffa64d; 
 
} 
 
.red { 
 
    background-color: #ff6666; 
 
} 
 
.purple { 
 
    background-color: #b800e6; 
 
} 
 
.blue { 
 
    background-color: #66b3ff; 
 
} 
 
.green { 
 
    background-color: #70db70; 
 
}
<div class="table"> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell11</div> 
 
    <div class="cell orange">cell21</div> 
 
    <div class="cell red">cell31</div> 
 
    <div class="cell purple">cell41</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell12</div> 
 
    <div class="cell orange">cell22</div> 
 
    <div class="cell red">cell32</div> 
 
    <div class="cell purple">cell42</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell13</div> 
 
    <div class="cell orange">cell23</div> 
 
    <div class="cell red">cell33</div> 
 
    <div class="cell purple">cell43</div> 
 
    </div> 
 
    <div class="table"> 
 
    <div class="row"> 
 
     <div class="cell blue">Some text:</div> 
 
     <div class="cell green">blah blah</div> 
 
    </div> 
 
    <div class="row"> 
 
     <div class="cell blue">Some other text:</div> 
 
     <div class="cell green">blah blah blah</div> 
 
    </div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell15</div> 
 
    <div class="cell orange">cell25</div> 
 
    <div class="cell red">cell35</div> 
 
    <div class="cell purple">cell45</div> 
 
    </div> 
 
    <div class="row"> 
 
    <div class="cell yellow">cell16</div> 
 
    <div class="cell orange">cell26</div> 
 
    <div class="cell red">cell36</div> 
 
    <div class="cell purple">cell46</div> 
 
    </div> 
 
</div>

+0

Вау, вот оно! : o Позвольте мне попробовать! – Stine

+0

@Stine, если вы считаете, что ответ полезен, вы можете увеличить его: он показывает, что ответ имеет некоторый интерес для любого, у кого есть аналогичный вопрос, который ищет ответы. Если этот ответ решает вашу проблему, вы также можете принять его. –

+0

Yup, просто хотел попробовать. Я понятия не имею, почему, но это работает! ; D – Stine

1

Вот встроенный блок-решение с использованием п-го ребенка для фона и границ. У этого есть некоторые профи и некоторые минусы:

  • Очень чистый и читаемый html и без вложенных таблиц. Стили легко переопределить и не зависят от таких вещей, как colspan.

  • Недостаток, заключающийся в том, что количество разделов в строке разбивает макет, по общему признанию, довольно плохо, но может быть исправлено путем упаковки каждой строки в новый тег - конечно, за счет большего количества html.

  • Удаление классов в каждой строке/ячейке является рельефом, но вместо этого читается CSS-удобочитаемость. (Однако я предпочитаю это так!)

.table{ 
 
     width: 700px;   
 
     font-size: 0; 
 
    } 
 
    .table > div > div { 
 
     width: 20%; 
 
     display: inline-block; 
 
     font-size: 1rem; 
 
     box-sizing: border-box; 
 
     padding: 2px 6px; 
 
    } 
 

 
    /** Default rows */ 
 
    /*****************/ 
 
    .rows-default { 
 
     border: 1px solid #ccc; 
 
    } 
 
    .rows-default div { 
 
     border-right: 1px solid #ccc; 
 
     border-bottom: 1px solid #ccc; 
 
    } 
 
    .rows-default div:nth-child(4n+1) { 
 
     background-color: #FFE05F; 
 
    } 
 
    .rows-default div:nth-child(4n+2) { 
 
     background-color: #FFC072; 
 
    } 
 
    .rows-default div:nth-child(4n+3) { 
 
     background-color: #FF605E; 
 
    } 
 
    .rows-default div:nth-child(4n+4) { 
 
     width: 40%; 
 
     background-color: #9D44B8; 
 
     border-right: none; 
 
    } 
 
    .rows-default div:nth-last-child(-n+4){ 
 
     border-bottom: none; 
 
    } 
 

 
    /* Highlighted rows */ 
 
    /********************/ 
 
    .rows-highlight{ 
 
     border: 1px solid #ccc; 
 
     margin: 20px 0; 
 
    } 
 
    .rows-highlight div { 
 
     border-right: 1px solid #ccc; 
 
     border-bottom: 1px solid #ccc; 
 
    } 
 
    .rows-highlight div:nth-child(2n+1) { 
 
     width: 30%; 
 
     background-color: #64B2DF; 
 
    } 
 
    .rows-highlight div:nth-child(2n+2) { 
 
     width: 70%; 
 
     background-color: #9CE25A; 
 
     border-right: none; 
 
    } 
 
    .rows-highlight div:nth-last-child(-n+2){ 
 
     border-bottom: none; 
 
    }
<div class="table"> 
 
    <div class="rows-default"> 
 
    <div>cell11</div> 
 
    <div>cell21</div> 
 
    <div>cell31</div> 
 
    <div>cell41</div> 
 

 
    <div>cell12</div> 
 
    <div>cell22</div> 
 
    <div>cell32</div> 
 
    <div>cell42</div> 
 

 
    <div>cell13</div> 
 
    <div>cell23</div> 
 
    <div>cell33</div> 
 
    <div>cell43</div> 
 
    </div> 
 

 
    <div class="rows-highlight"> 
 
    <div>Some text:</div> 
 
    <div>blah blah</div> 
 

 
    <div>Some other text:</div> 
 
    <div>blah blah blah</div> 
 
    </div> 
 

 
    <div class="rows-default"> 
 
    <div>cell11</div> 
 
    <div>cell21</div> 
 
    <div>cell31</div> 
 
    <div>cell41</div> 
 

 
    <div>cell12</div> 
 
    <div>cell22</div> 
 
    <div>cell32</div> 
 
    <div>cell42</div> 
 

 
    <div>cell13</div> 
 
    <div>cell23</div> 
 
    <div>cell33</div> 
 
    <div>cell43</div> 
 
    </div> 
 
</div>

Смежные вопросы