Я работаю над пользовательским элементом с помощью lit-element. Я хочу создать свой собственный элемент таблицы, но есть некоторые проблемы.
Во-первых. Похоже, что браузер разрешает использовать теги tr
, td
только для table
.
<!-- in html -->
<my-table>
<tr>
<td>A</td>
<td>B</td>
</tr>
</my-table>
<!-- chrome rendered -->
<my-table> A B </my-table>
Второе. Это можно имитировать с помощью CSS, но CSS не может реализовать colspan.
<my-table> <!-- display: table -->
<my-tr> <!-- display: table-row -->
<my-td>A</my-td> <!-- display: table-cell -->
<my-td colspan="3">B</my-td> <!-- There is no way to implement colspan -->
</my-tr>
</my-table>
Третий. Я пытаюсь настроить стиль с помощью «display: content» на хосте. Казалось, это работает, но у хоста нет данных для определения размера блока, например clientHeight
.
class MyTd extends LitElement {
render() {
return html`
<style>
:host { display: content; }
td {
all: inherit; /* It make to inherit host's style */
display: table-cell;
}
</style>
<td>
${html`<slot></slot>`} // I don't know why it work.
</td>
`;
}
}
// other js file.
const td = document.querySelector('my-td');
td.clientHeight; // 0
Я могу переопределить clientHeight
и что-то еще (offsetHeight
, getBoundingClientRect
...), но я не знаю, правильно ли это и это единственный способ.
Есть ли другой способ создать пользовательскую таблицу или я что-то не так думаю?