Как я могу построить сетку 12 на 12 с помощью javascript?

Для ясности я использую svelte, раньше я использовал макет сетки css следующим образом:

#global_grid{
        display: grid;
        grid-template-columns: repeat(12, calc(100vw / 12));
        grid-template-rows: repeat(12, calc(100vh / 12));
    }

Проблема, с которой я сталкиваюсь, заключается в том, что сетка больше, чем внутренняя высота браузера, поскольку я использую 100vh. Я не знаю, как решить проблему, с которой я столкнулся, я подумал, что нужно сделать window.outerheight - window.innerheight, чтобы получить разницу в пикселях, и вычесть это количество внутри grid-template-rows: repeat(12, calc(100vh / 12));. Я также просто мог бы сделать внутреннюю высоту / 12, которую я себе представляю.

Чтобы еще раз уточнить, я использую svelte и хотел бы разбить страницу на сетку 12 на 12. Использование только css оставляет дополнительное пространство внизу, я думаю, что это дополнительная высота в результате заголовка браузера. Я бы предпочел решить с помощью css, любая помощь очень ценится!

«Проблема, с которой я столкнулся, заключается в том, что сетка больше, чем внутренняя высота браузера, поскольку я использую 100vh». Я не очень понимаю этот вывод. Вы не забыли избавиться от настроек полей браузера по умолчанию? А как вы тестируете? (Настоящие устройства или эмуляция браузера?) И пробовали ли вы установить сетку высотой 100vh и использовать повторение (12, 1fr) вместо выполнения вычислений?

A Haworth 28.12.2022 22:01

Я удалил отступы и поля из тела и html, мой вывод основан на том факте, что 100vh приводит к необходимости немного прокручивать страницу, я пытался сделать только повтор (12, 1fr) в самом начале, но это не работает не создавать ячейки одинакового размера

stopbanningmelmao123 28.12.2022 22:49

Возможно, вы ищете minmax(0, 1fr)svelte.dev/repl/a84d759237c04236bd058ff3d28d505c?version=3.5‌​5.0

Corrl 29.12.2022 00:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Это то, что вы хотите сделать?

Во-первых, убедитесь, что вы установили 100% для высоты и ширины элементов html и body, так как у них нет размера по умолчанию.

Затем установите значения 100vh и 100vw для элемента-контейнера с заголовком и сеткой. Дайте ему flex дисплей с column направлением, которое установит вертикальный поток.

Чтобы ваш элемент сетки занимал только оставшееся пространство области просмотра после высоты вашего заголовка, присвойте элементу сетки значение flex: 1. Кроме того, используйте 100% в своих функциях calc, поскольку вы уже установили его контейнер так, чтобы он покрывал все окно просмотра, и вы не хотите пересчитывать элемент заголовка. Если вам нужны границы или зазоры в сетке, не забудьте рассчитать смещение, которое будет вносить каждый зазор в вашем шаблоне.

Вот код:

const globalGrid = document.getElementById("global-grid");

for (let i = 0; i < 12; i++) {
  for (let j = 0; j < 12; j++) {
    const node = document.createElement("div");
    node.classList.add('grid-cell');
    globalGrid.appendChild(node);
  }
}
body,
html {
  height: 100%;
  width: 100%;
  margin: 0;
}

.layout {
  display: flex;
  flex-direction: column;
  height: 100vh;
  width: 100v;
}

.header {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 2em;
}

#global-grid {
  flex: 1;
  display: grid;
  grid-template-columns: repeat(12, calc((100% - 12px) / 12));
  grid-template-rows: repeat(12, calc((100% - 12px) / 12));
  border: solid 1px black;
  background-color: black;
  gap: 1px;
}

.grid-cell {
  background-color: white;
  display: flex;
  justify-content: center;
  align-items: center;
}
<div class = "layout">
  <div class = "header">Header</div>
  <div id = "global-grid" />
</div>

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