Как создать таблицу только с помощью тега <div>и Css - PullRequest
169 голосов
/ 16 июня 2010

Я хочу создать таблицу только с использованием тега <div> и CSS.

Это мой пример таблицы.

<body>
  <form id="form1">
      <div class="divTable">
             <div class="headRow">
                <div class="divCell" align="center">Customer ID</div>
                <div  class="divCell">Customer Name</div>
                <div  class="divCell">Customer Address</div>
             </div>
            <div class="divRow">
                  <div class="divCell">001</div>
                <div class="divCell">002</div>
                <div class="divCell">003</div>
            </div>
            <div class="divRow">
                <div class="divCell">xxx</div>
                <div class="divCell">yyy</div>
                <div class="divCell">www</div>
           </div>
            <div class="divRow">
                <div class="divCell">ttt</div>
                <div class="divCell">uuu</div>
                <div class="divCell">Mkkk</div>
           </div>

      </div>
  </form>
</body>

И Стиль:

<style type="text/css">
    .divTable
    {
        display:  table;
        width:auto;
        background-color:#eee;
        border:1px solid  #666666;
        border-spacing:5px;/*cellspacing:poor IE support for  this*/
       /* border-collapse:separate;*/
    }

    .divRow
    {
       display:table-row;
       width:auto;
    }

    .divCell
    {
        float:left;/*fix for  buggy browsers*/
        display:table-column;
        width:200px;
        background-color:#ccc;
    }
</style>

Но эта таблица не работает с IE7 и ниже. Пожалуйста, дайте ваше решение и идеи для меня. Благодаря.

Ответы [ 8 ]

240 голосов
/ 12 июля 2011
.div-table {
  display: table;         
  width: auto;         
  background-color: #eee;         
  border: 1px solid #666666;         
  border-spacing: 5px; /* cellspacing:poor IE support for  this */
}
.div-table-row {
  display: table-row;
  width: auto;
  clear: both;
}
.div-table-col {
  float: left; /* fix for  buggy browsers */
  display: table-column;         
  width: 200px;         
  background-color: #ccc;  
}

Запускаемый фрагмент:

.div-table {
  display: table;         
  width: auto;         
  background-color: #eee;         
  border: 1px solid #666666;         
  border-spacing: 5px; /* cellspacing:poor IE support for  this */
}
.div-table-row {
  display: table-row;
  width: auto;
  clear: both;
}
.div-table-col {
  float: left; /* fix for  buggy browsers */
  display: table-column;         
  width: 200px;         
  background-color: #ccc;  
}
<body>
  <form id="form1">
      <div class="div-table">
             <div class="div-table-row">
                <div class="div-table-col" align="center">Customer ID</div>
                <div  class="div-table-col">Customer Name</div>
                <div  class="div-table-col">Customer Address</div>
             </div>
            <div class="div-table-row">
                  <div class="div-table-col">001</div>
                <div class="div-table-col">002</div>
                <div class="div-table-col">003</div>
            </div>
            <div class="div-table-row">
                <div class="div-table-col">xxx</div>
                <div class="div-table-col">yyy</div>
                <div class="div-table-col">www</div>
           </div>
            <div class="div-table-row">
                <div class="div-table-col">ttt</div>
                <div class="div-table-col">uuu</div>
                <div class="div-table-col">Mkkk</div>
           </div>

      </div>
  </form>
</body>
96 голосов
/ 16 июня 2010

div s не должны использоваться для табличных данных.Это так же неправильно, как использовать таблицы для разметки.
Использовать <table>.Это просто, семантически правильно, и все будет сделано за 5 минут.

6 голосов
/ 03 июня 2016

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

(ПРИМЕЧАНИЕ. Конечно, для современных браузеров использование значений таблицы или строки таблицы или ячейки таблицы для отображения атрибута CSS решит проблему. Но подход, который я использовал, будет одинаково хорошо работать в современных иболее старые браузеры, поскольку они не используют эти значения для отображения атрибута CSS.)

3-ШАГОВЫЙ ПРОСТОЙ ПОДХОД

Только для таблицы с элементами div, поэтому вы получаете только ячейки и строкикак и в элементе таблицы, используйте следующий подход.

  1. Замените элемент таблицы на блок div (используйте класс .table)
  2. Замените каждый элемент tr или th на блок div(используйте класс .row)
  3. Замените каждый элемент td на встроенный блок div (используйте класс .cell)

.table {display:block; }
.row { display:block;}
.cell {display:inline-block;}
    <h2>Table below using table element</h2>
    <table cellspacing="0" >
       <tr>
          <td>Mike</td>
          <td>36 years</td>
          <td>Architect</td>
       </tr>
       <tr>
          <td>Sunil</td>
          <td>45 years</td>
          <td>Vice President aas</td>
       </tr>
       <tr>
          <td>Jason</td>
          <td>27 years</td>
          <td>Junior Developer</td>
       </tr>
    </table>
    <h2>Table below is using Divs only</h2>
    <div class="table">
       <div class="row">
          <div class="cell">
             Mike
          </div>
          <div class="cell">
             36 years
          </div>
          <div class="cell">
             Architect
          </div>
       </div>
       <div class="row">
          <div class="cell">
             Sunil
          </div>
          <div class="cell">
             45 years
          </div>
          <div class="cell">
             Vice President
          </div>
       </div>
       <div class="row">
          <div class="cell">
             Jason
          </div>
          <div class="cell">
             27 years
          </div>
          <div class="cell">
             Junior Developer
          </div>
       </div>
    </div>

ОБНОВЛЕНИЕ 1

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

  • Укажите ширину для cell class

    cell {display: inline-блок;ширина: 340px;}

  • Используйте CSS современных браузеров, как показано ниже.

    .table {display: table;} .row {display: table-row;} .cell {display: table-cell;}

4 голосов
/ 16 июня 2010

Если в <table> есть что-то, что вам не нравится, возможно, вы могли бы использовать файл сброса ?

или

если вам это нужно для макета страницы, посмотрите примеры макетов cssplay для разработки сайтов без таблиц.

2 голосов
/ 17 октября 2018

Я не вижу ответа относительно Grid-Css.Я думаю, что это очень элегантный подход: grid-css даже поддерживает диапазон строк и столбец.Здесь вы можете найти очень хорошую статью:

https://medium.com/@js_tut/css-grid-tutorial-filling-in-the-gaps-c596c9534611

2 голосов
/ 14 марта 2012

Используйте правильный тип документа; это решит проблему. Добавьте строку ниже в начало вашего HTML-файла:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
1 голос
/ 27 июля 2016

При создании пользовательского набора тегов макета я нашел другой ответ на эту проблему.Здесь представлен пользовательский набор тегов и их CSS-классов.

HTML

<layout-table>
   <layout-header> 
       <layout-column> 1 a</layout-column>
       <layout-column>  </layout-column>
       <layout-column> 3 </layout-column>
       <layout-column> 4 </layout-column>
   </layout-header>

   <layout-row> 
       <layout-column> a </layout-column>
       <layout-column> a 1</layout-column>
       <layout-column> a </layout-column>
       <layout-column> a </layout-column>
   </layout-row>

   <layout-footer> 
       <layout-column> 1 </layout-column>
       <layout-column>  </layout-column>
       <layout-column> 3 b</layout-column>
       <layout-column> 4 </layout-column>
   </layout-footer>
</layout-table>

CSS

layout-table
{
    display : table;
    clear : both;
    table-layout : fixed;
    width : 100%;
}

layout-table:unresolved
{
    color : red;
    border: 1px blue solid;
    empty-cells : show;
}

layout-header, layout-footer, layout-row 
{
    display : table-row;
    clear : both;   
    empty-cells : show;
    width : 100%;
}

layout-column 
{ 
    display : table-column;
    float : left;
    width : 25%;
    min-width : 25%;
    empty-cells : show;
    box-sizing: border-box;
    /* border: 1px solid white; */
    padding : 1px 1px 1px 1px;
}

layout-row:nth-child(even)
{ 
    background-color : lightblue;
}

layout-row:hover 
{ background-color: #f5f5f5 }

Ключ к получению пустых ячеек и ячеек в целом длябыть подходящего размера, это Box-Sizing и Padding.Граница будет делать то же самое, но создает линию в ряду.Заполнение не делает.И, хотя я еще не пробовал, я думаю, что Margin будет действовать так же, как Padding, при принудительном и пустом отображении ячейки.

1 голос
/ 08 января 2016

Немного вне темы, но может помочь кому-то для более чистого HTML ... CSS

.common_table{
    display:table;
    border-collapse:collapse;
    border:1px solid grey;
    }
.common_table DIV{
    display:table-row;
    border:1px solid grey;
    }
.common_table DIV DIV{
    display:table-cell;
    }

HTML

<DIV class="common_table">
   <DIV><DIV>this is a cell</DIV></DIV>
   <DIV><DIV>this is a cell</DIV></DIV>
</DIV>

Работает на Chrome и Firefox

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...