Элементы сетки CSS накладываются друг на друга вместо соблюдения области сетки

Ссылка на Code Sandbox: https://codesandbox.io/s/rw0j2orqmp

У меня есть следующая настройка шаблона сетки:

.calculator {
  margin: auto;
  vertical-align: center;
  width: 30%;
  height: 300px;
  background-color: blue;
  display: grid;
  grid-template-rows: repeat(5, auto);
  grid-template-columns: repeat(4, auto);
  grid-template-areas:
    "display display display display"
    "clear clear clear method"
    "number number number method"
    "number number number method"
    "number number number method"
    "posNeg number decimal method";

  #display {
    display: block;
    grid-area: display;
    margin: 5px;
    resize: none;
    text-align: right;
    font-size: 40px;
    width: 95%;
    height: 100px;
  }

  .clear {
    display: block;
    grid-area: clear;
  }

  .number {
    display: block;
    grid-area: number;
  }

  .method {
    display: block;
    grid-area: method;
  }

  .posNeg {
    display: block;
    grid-area: posNeg;
  }

  .decimal {
    display: block;
    grid-area: decimal;
  }
}

Все кнопки в каждом div генерируются следующим JSX в React:

function Calculator() {
  return (
    <div className = "container">
      <h1>Javascript Calculator</h1>
      <div className = "calculator">
        <textarea id = "display" />
        {types.map(y => (
          <div className = {y} key = {y}>
            {buttons.map(
              x =>
                x.type === y ? (
                  <button id = {x.id} key = {x.id}>
                    {x.name}
                  </button>
                ) : null
            )}
          </div>
        ))}
      </div>
    </div>
  );
}

По какой-то причине мои div не соблюдают свое положение в области сетки и вместо этого все отображаются внизу, когда я устанавливаю их свойство grid-area. Я пробовал установить как display: block; в каждом классе div, а также я попытался установить позицию для нескольких разных значений в родительском классе. Изначально я создавал каждую кнопку автоматически, а обертывающие их блоки div не существовали, и когда это было так, каждая кнопка все еще отображалась внизу и занимала все нижние 50% элемента контейнера.

Вот как это выглядит:

Элементы сетки CSS накладываются друг на друга вместо соблюдения области сетки

Поведение ключевого слова "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) для оценки ваших знаний,...
4
0
4 346
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Это недопустимое значение для grid-template-areas:

grid-template-areas:
  "display display display display"
  "clear clear clear method"
  "number number number method"
  "number number number method"
  "number number number method"
  "posNeg number decimal method";

Все имена ваших областей должны образовывать прямоугольники в вашей сетке, но number этого не делает, вы можете изменить свисающий number на decimal, например, чтобы исправить это:

grid-template-areas:
  "display display display display"
  "clear clear clear method"
  "number number number method"
  "number number number method"
  "number number number method"
  "posNeg decimal decimal method";

Спасибо! Я не знал, что это ограничение.

Cdhippen 21.07.2018 19:37

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