Как разделить полученный список на три столбца, чтобы все столбцы имели одинаковую высоту и ширину ячеек?

Как разделить данные, полученные из базы данных и представленные в одном списке, на три столбца в таблице, где каждая ячейка будет иметь одинаковые размеры по высоте и ширине, и при изменении высоты одной ячейки изменится высота всех ячеек в этой строке, аналогично поведению в Excel? Абзац с кодом показывает, что данные отображаются в виде таблицы с использованием Vue.js и Axios.
Изображение к вопросу
  • 31 января 2024 г. 11:40
Ответы на вопрос 3
Чтобы разделить полученный список на три столбца с одинаковой высотой и шириной ячеек, вы можете использовать HTML и CSS вместе с вашим JavaScript фреймворком (в данном случае Vue.js). Вам нужно будет создать структуру таблицы (`<table>`, `<tr>`, `<td>`) и стилизовать ее соответствующим образом.

Вот пример кода, который демонстрирует, как это может быть реализовано:

1. HTML с использованием Vue.js шаблона:

```html
<table>
  <tbody>
    <tr v-for="(row, index) in formattedList" :key="index">
      <td v-for="(item, i) in row" :key="`item-${i}`" class="equal-cell">{{ item }}</td>
    </tr>
  </tbody>
</table>
```

2. CSS для стилизации ячеек таблицы:

```css
.equal-cell {
  width: 33.33%; /* Предполагаем, что 100% / 3 столбца равняется ~33.33% на столбец */
  height: 50px; /* Вы можете установить фиксированную высоту или использовать auto/высоту по умолчанию */
  text-align: center; /* Горизонтальное выравнивание текста в ячейке */
  vertical-align: middle; /* Вертикальное выравнивание текста в ячейке */
  border: 1px solid #ccc; /* Границы ячеек, если они нужны */
}
```

3. JavaScript (Vue.js) для разбиения списка на массив массивов для строк таблицы:

```javascript
new Vue({
  el: '#app',
  data: {
    list: [], // Ваши данные из базы данных
    formattedList: [] // Преобразованный список в виде двумерного массива для строк и столбцов
  },
  methods: {
    formatList() {
      const COLUMNS = 3;
      let row = [];
      
      // Пройдемся по списку и разделим его на строки по COLUMNS элементов в каждой
      this.formattedList = [];
      this.list.forEach((item, index) => {
        row.push(item);
        if ((index + 1) % COLUMNS === 0 || (index + 1) === this.list.length) {
          this.formattedList.push(row);
          row = [];
        }
      });
    }
  },
  mounted() {
    // Здесь имитируем получение данных из базы данных через Axios
    // Предположим, что функция `fetchData` извлекает данные и обновляет `this.list`
    this.fetchData();
  },
  watch: {
    list: {
      handler() {
        // Каждый раз, когда изменяется список, переформатируем его
        this.formatList();
      },
      deep: true,
      immediate: true
    }
  }
});
```

Этот код выше предполагает, что вы получаете данные (`this.list`) и обновляете их когда это необходимо. Переменная `formattedList` является двумерным массивом, в котором каждый внутренний массив представляет собой строку таблицы с соответствующим количеством элементов (столбцов). функция `formatList` отвечает за преобразование линейного массива данных в структурированный вид, который удобно отображать в виде таблицы через Vue.js шаблоны.

Пожалуйста, помните, что этот пример является упрощенным и его следует адаптировать под вашу конкретную ситуацию.
мне его нужно разделить на три столбца, содержащие одинаковые по высоте и ширине ячейки? И если высота одной ячейки меняется, то меняется высота всех ячеек в этой строке

Если продолжать использовать таблицу, то разбить массив на чанки по три элемента https://stackoverflow.com/questions/8495687/split-... и вывести двумя вложенными циклами 


Либо вывести в одном потоке и использовать css grid в три столбика


Похожие вопросы