Создайте адаптивную таблицу с помощью flexbox

Как создать адаптивную таблицу?

Таблица, которую я хочу, похожа на эту:

Создайте адаптивную таблицу с помощью flexbox

Таблица должна быть адаптивной, поэтому нужно изменить ширину столбцов.

Я думаю, что лучшее решение — использовать Flexbox, но как?

Я пробую этот код:

.container {
  display: flex;
  border: 1px solid black;
}

.column {
  display: flex;
  flex-direction: column;
  border: 1px solid black;
}

.cell {
  border: 1px solid black;
  padding: 5px;
}
<div class = "container">
  <div class = "column">
    <div class = "cell"></div> <!-- empty cell -->
    <div class = "cell">something</div>
    <div class = "cell">dog</div>
    <div class = "cell">more dogs</div>
  </div>

  <div class = "column">
    <div class = "cell">column2 long title</div>
    <div class = "cell">abc</div>
    <div class = "cell">a</div>
    <div class = "cell">aaaaaaa</div>
  </div>

  <div class = "column">
    <div class = "cell">column 3 tilew</div>
    <div class = "cell">bbbb</div>
    <div class = "cell">da</div>
    <div class = "cell">f</div>
  </div>

  <div class = "column">
    <div class = "cell">something</div>
    <div class = "cell">ggggg</div>
    <div class = "cell">f</div>
    <div class = "cell">cats</div>
  </div>
</div>

Я просто создаю 4 столбца, и каждый столбец имеет одинаковое количество строк, но, конечно, они не будут одинаковой высоты. Как я могу это исправить?

Тогда первая ячейка должна быть пустой.

Большое спасибо!

Вы рассмотрели css-сетка?

fen1x 30.05.2019 11:17

На самом деле лучшее решение это стол. Здесь не нужно заново изобретать велосипед.

Paulie_D 30.05.2019 11:18

@ fen1x Да, но я не знаю, как здесь это использовать. Можно пример?

user7558372 30.05.2019 11:27

@beth Ниже приведен пример ответа kukkuz. Кроме того, как сказал Paulie_D, способ Лучший (под которым я подразумеваю самый простой) для отображения данных таблицы заключается в использовании <table>.

fen1x 30.05.2019 11:44
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
4
2 569
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не вижу Зачем, вам нужно использовать flexbox, а не таблицу. В любом случае вы можете использовать макет CSS Grid здесь только ради нет с использованием таблиц - это легко настроить для кода в вопросе.

Здесь также используется display: contents — обратите внимание, что он поддерживается в новых браузерах — полное объяснение поддержки здесь.

.container {
  display: grid; /* grid containers */
  grid-template-columns: repeat(4, 1fr); /* four columns */
  grid-template-rows: repeat(4, 1fr); /* four rows */
  grid-auto-flow: column; /* in column direction */
  border: 1px solid black;
}

.column {
  display: contents; /* the child elements would be grid items */
  border: 1px solid black;
}

.cell {
  border: 1px solid black;
  padding: 5px;
}
<div class = "container">
  <div class = "column">
    <div class = "cell"></div> <!-- empty cell -->
    <div class = "cell">something</div>
    <div class = "cell">dog</div>
    <div class = "cell">more dogs</div>
  </div>

  <div class = "column">
    <div class = "cell">column2 long title</div>
    <div class = "cell">abc</div>
    <div class = "cell">a</div>
    <div class = "cell">aaaaaaa</div>
  </div>

  <div class = "column">
    <div class = "cell">column 3 tilew</div>
    <div class = "cell">bbbb</div>
    <div class = "cell">da</div>
    <div class = "cell">f</div>
  </div>

  <div class = "column">
    <div class = "cell">something</div>
    <div class = "cell">ggggg</div>
    <div class = "cell">f</div>
    <div class = "cell">cats</div>
  </div>
</div>

@beth также проголосуйте за ответ, если он вам нравится, спасибо :)

kukkuz 30.05.2019 19:40

Это не сработает, если мы добавим такую ​​функцию, как расширение

JayK 16.11.2021 02:40

Вот!

/* 
Generic Styling, for Desktops/Laptops 
*/
table { 
  width: 100%; 
  border-collapse: collapse; 
}
/* Zebra striping */
tr:nth-of-type(odd) { 
  background: #eee; 
}
th { 
  background: #333; 
  color: white; 
  font-weight: bold; 
}
td, th { 
  padding: 6px; 
  border: 1px solid #ccc; 
  text-align: left; 
}



/* 
Max width before this PARTICULAR table gets nasty
This query will take effect for any screen smaller than 760px
and also iPads specifically.
*/
@media 
only screen and (max-width: 760px),
(min-device-width: 768px) and (max-device-width: 1024px)  {

	.responsive-table-input-matrix {
		display: block;
		position: relative;
		width: 100%;

		&:after {
			clear: both;
			content: '';
			display: block;
			font-size: 0;
			height: 0;
			visibility: hidden;
		}

		tbody {
			display: block;
			overflow-x: auto;
			position: relative;
			white-space: nowrap;
			width: auto;


			tr {
				display: inline-block;
				vertical-align: top;

				td {
					display: block;
					text-align: center;

					&:first-child {
						text-align: left;
					}
				}
			}
		}

		thead {
			display: block;
			float: left;
			margin-right: 10px;

			&:after {
				clear: both;
				content: "";
				display: block;
				font-size: 0;
				height: 0;
				visibility: hidden;
			}

			th:first-of-type {
				height: 1.4em;
			}

			th {
				display: block;
				text-align: right;

				&:first-child {
					text-align: right;
				}
			}
		}
	}
}
<table class = "responsive-table-input-matrix">
		<thead>
		<tr>
			<th></th>
			<th>Owner</th>
			<th>Group</th>
			<th>Others</th>
			<th>Administrators</th>
			<th>Managers</th>
			<th>Engineers</th>
			<th>Sales</th>
			<th>Employees</th>
			<th>Customers</th>
			<th>Community</th>
		</tr>
		</thead>
		<tbody>

		<tr>
			<td>Add</td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
		</tr>
		<tr>
			<td>Edit</td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
		</tr>
		<tr>
		<td>Delete</td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
		</tr>
		<tr>
			<td>Rename</td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
		</tr>
		<tr>
			<td>Move</td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
			<td></td>
		</tr>
		</tbody>
	</table>

Другие вопросы по теме