Имя: Пароль:
IT
Веб-мастеринг
Как обойти поведение тега "table"?
0 Sabre
 
19.08.21
14:27
Если активно использовать объединение ячеек, то строки таблицы могут "схлопнуться". Вот простейший пример, таблица на 2 колонки и 3 строки:

<table border="1" bordercolor="#999" cellspacing="0px" cellpadding="2px" width="100%">
<tbody>
<tr>
<td rowspan="2">
<div>R1C1:R2C1 (row 1)</div>
</td>
<td>
<div>R1C2 (row 1)</div>
</td>
</tr>
<tr>
<td rowspan="2">
<div>R2C2:R3C2 (row 2)</div>
</td>
</tr>
<tr>
<td>
<div>R3C1 (row 3 не должна быть здесь!)</div>
</td>
</tr>
</tbody>
</table>

Если вставите этот кусок в браузер, увидите, что одной строки не хватает. Она исчезла из за "эффективной" оптимизации. Кому лень проверять, таблица на выглядит вот так:
-----------------------------------------------------------------------------------------
|               R1C1:R2C1 (row 1)               |                R1C2 (row 1)           |
-----------------------------------------------------------------------------------------
|      R3C1 (row 3 не должна быть здесь!)       |            R2C2:R3C2 (row 2)          |
-----------------------------------------------------------------------------------------

Скорее всего, это никак не обойти, поэтому нужен аналог тега table. Какие есть варианты? Цель - показывать на сайте отчеты, те что Excel
1 polosov
 
19.08.21
14:36
2 Sabre
 
19.08.21
14:44
(1) Даже близко не рядом к проблеме
3 polosov
 
19.08.21
14:47
(2) Ближе, чем ты думаешь.
4 polosov
 
19.08.21
14:52
(2) Я бы обратил внимание на свойство table-layout. Сайтошлепы меня поправят.
5 Sabre
 
19.08.21
15:02
Сохранил табличный документ в html средствами 1с и глянул под капот. Кое что поправил, чтобы видно было. Тоже не айс, но хотя бы работает:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 5.0 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8">
<TITLE></TITLE>
<STYLE TYPE="text/css">
body { background: #ffffff; margin: 0; font-family: Arial; font-size: 8pt; font-style: normal; }
tr.R0{ height: 25px; }
tr.R0
td.R0C0{ text-align: center; vertical-align: middle; border-left: #000000 1px solid; border-top: #000000 1px solid; border-bottom: #000000 1px solid; border-right: #000000 1px solid; }
table {table-layout: fixed; padding: 0px; padding-left: 2px; vertical-align:bottom; border-collapse:collapse;width: 100%; font-family: Arial; font-size: 8pt; font-style: normal; }
td { padding: 0px; padding-left: 2px; overflow:hidden; }
</STYLE>
</HEAD>
<BODY STYLE="background: #ffffff; margin: 0; font-family: Arial; font-size: 8pt; font-style: normal; ">
<TABLE style="width:100%; height:0px; " CELLSPACING=0>
<COL WIDTH=63>
<COL WIDTH=63>
<TR CLASS=R0>
    <TD CLASS="R0C0" ROWSPAN=2>1</TD>
    <TD CLASS="R0C0">2</TD>
</TR>
<TR CLASS=R0>
    <TD CLASS="R0C0" ROWSPAN=2>4</TD>
    <TD CLASS="R0C0">4-1</TD>
</TR>
<TR CLASS=R0>
    <TD CLASS="R0C0">3</TD>
    <TD CLASS="R0C0">3-1</TD>
</TR>
</TABLE>
</BODY>
</HTML>
6 Asmody
 
19.08.21
15:15
Лучший способ обойти поведение тега <table> - не использовать тег <table>

https://replit.com/@Asmody/TrustingOrderlyFreesoftware#index.html
7 Вафель
 
19.08.21
15:40
а почему во 2 строке только 1 колонка?
8 Вафель
 
19.08.21
15:43
ты так хотел?
9 Вафель
 
19.08.21
15:43
10 Метрополь
 
19.08.21
15:51
(0) Очень просто. Не используй тег table. Это считается дурным тоном. Так только школьники и студенты делают.
11 Вафель
 
19.08.21
15:53
(10) ... и миста
12 polosov
 
19.08.21
15:55
(10) Ну не нужны ему может быть разные масштабы. Просто чтобы у 2,5 сотрудников в хроме выводилась табличка.
13 Garykom
 
гуру
19.08.21
15:55
(0) нахрен тебе table?
используй div
14 Fragster
 
гуру
19.08.21
15:56
(8) судя по всему - как-то так: https://i.imgur.com/FpfY2Ta.png
15 Fragster
 
гуру
19.08.21
16:02
(10) тег table нужен для отображения табличных данных. для лэйаута - он действительно не нужен
16 ДенисЧ
 
19.08.21
16:02
Зачем тебе table? Используй grid, на худой конец flex...
17 Fragster
 
гуру
19.08.21
16:04
елки иголки, сохранил эксель в html, открыл блокнотом...
18 Fragster
 
гуру
19.08.21
16:04
300 строк js из (14) и ни одного - html
19 Вафель
 
19.08.21
16:05
с гридом конечно все просто
grid-template-areas:
            "a b"
            "a c"
            "d c";
20 Вафель
 
19.08.21
16:08
(18) там же реакт какой или аналог
21 Метрополь
 
19.08.21
16:25
(11) На мисте использование табличной верстки сложилось исторически, и тянется с древних времен, как традиция. Может быть в этом что-то есть. Пусть будет, меня устраивает.
22 Метрополь
 
19.08.21
16:27
(15) Тег "table" не нужен ни для чего, от слова чего. Он устарел.
23 Fragster
 
гуру
19.08.21
16:38
(22) нет
24 Fragster
 
гуру
19.08.21
16:39
не хватает только высоты, если надо как в (14): https://jsfiddle.net/mq5L96bu/
25 Вафель
 
19.08.21
17:02
А если там не нужен BR ?
26 Метрополь
 
19.08.21
17:05
(23) Ты не шаришь.
27 Fragster
 
гуру
19.08.21
17:11
(26) ну ну
28 Fragster
 
гуру
19.08.21
17:12
(25) тогда увеличь высоту ячейки любым другим способом
29 Fragster
 
гуру
19.08.21
17:12
не понятно только - то ли это, что нужно автору
30 Sabre
 
20.08.21
06:05
(29) Мне нужно выводить плоские отчеты (список, кросс-таблица) в браузере. Поэтому ячейки таблицы должны быть фиксированными и предсказуемыми. Передаю таблицу в json, браузер показывает. Все счастливы.
31 Sabre
 
20.08.21
06:39
Сейчас на свежую голову покопался в этом, выяснил, что если с верхних строк до текущей строки таблицы "дотягиваются" объединенные ячейки, то они вставляются между ячейками текущей строки, выталкивая их вправо:

-------------
| 1 | 2 | 3 |
----     ----
| 1 |   | 2 | 3 |
-------------
32 Fragster
 
гуру
20.08.21
10:28
(31) ну, это соответствует спецификации
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан