Как расположить некоторые элементы td один под другим в одной строке?

Есть таблица с некоторыми строками:

<table>
  <tbody>
    <tr>
      <td>Element1</td>
      <td>Element2</td>
      <td>Element3</td>
      <td>Element4</td>
    </tr>
  </tbody>
</table>

Сейчас выглядит как обычная строка, где каждый элемент идет в ряд один за другим. Мне нужно чтобы элементы Element1 и Element2 были расположены один под другим, а элементы Element3 и Element4 были расположены в ряд как обычно. Вот таким образом:

Element1
             Element3  Element4
Element2

Буду рад любым советам.


Ответы (4 шт):

Автор решения: Pavlo Khyzhniak
 <tr>
      <td>Element1</td>
      <td></td>
      <td></td>
    </tr>
 <tr>
      <td></td>
      <td>Element3</td>
      <td>Element4</td>
    </tr>
 <tr>
      <td>Element2</td>
      <td></td>
      <td></td>
    </tr>
→ Ссылка
Автор решения: Инквизитор

Совет первый: избавиться от табличной верстки в принципе. Если не имеете возможности, то:

Совет второй: волшебное свойство display, примененное к таблице и ее элементам, превратит их c точки зрения подхода к верстке в div-ы, что позволит вам расставить их как угодно.

Если все же таблицы вам нужны обязательно, то достаточно вспомнить атрибуты ячеек, придуманные в самой первой версии таблиц именно для такого случая (бордер у таблицы добавил для наглядности):

<table border="1">
  <tbody>
    <tr>
      <td>Element1</td>
      <td rowspan="2">Element3</td>
      <td rowspan="2">Element4</td>
    </tr>
    <tr>
      <td>Element2</td>

    </tr>
  </tbody>
</table>

→ Ссылка
Автор решения: ΝNL993

<table>
  <tbody style="display: grid;">
    <tr>
      <td>Element1</td>
    </tr>
<tr style="margin-left: 50%;">
      <td>Element3</td>
      <td>Element4</td>
    </tr>
  <tr>
      <td>Element2</td>
    </tr>
  </tbody>
</table>

И никаких лишних элементов. При желании можете перенести стили в отдельный блок или файл.


Используя только один tr:

tr {
  display: grid;
}
td:not(:first-child, :last-child) {
  margin-left: 50%;
  grid-area: 2 !important;
}
td:first-child {
  grid-area: 1;
}
td:last-child {
  grid-area: 3;
}
<table>
  <tbody>
    <tr>
      <td>Element1</td>
      <td>Element2</td>
      <td>Element3</td>
      <td>Element4</td>
    </tr>
  </tbody>
</table>

Референсы:

→ Ссылка
Автор решения: Amir Shikarno

Вторую и терью клетку объединить с помощью rowspan="2" Тоесть El3 Сделает row двойного размера.

   <tr>
    <td>Element1</td>
    <td rowspan="2">Element3</td>
    <td rowspan="2">Element4</td>
  </tr>
  <tr>
    <td>Element2</td>
  </tr>
→ Ссылка