Ось вращения () css

Я сослался на код в другом месте и, следуя коду, он делает квадратную зеленую линию.
Но я думаю, что код должен делать крест, а не квадрат.

Если я запускаю код, он делает квадрат, как на картинке ниже.

Кажется, что все линии имеют разные оси вращения.
Не могли бы вы объяснить мне, почему получается не крест, а квадрат?

код:

import styled from "styled-components";

export default function App() {
  const array = [0, 1, 2, 3];

  return (
    <Wrap>
      <div className = "container">
        <div className = "square">
          {array.map((idx) => {
            return <Line number = {idx} />;
          })}
        </div>
      </div>
    </Wrap>
  );
}

const Wrap = styled.div`
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  min-height: 100vh;
  justify-content: center;
  align-items: center;
  background: #111;

  .container {
    border: 3px solid orange;
    position: relative;
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
  }

  .container .square {
    top: 200px;
    left: 200px;
    border: 1px solid blue;
    position: absolute;
    width: 200px;
    height: 200px;
  }
`;

const Line = styled.span`
  border: 1px solid red;
  position: absolute;
  inset: 10px;
  transform: ${(props) => `rotate(calc(90deg * ${props.number}))`};

  &::before {
    content: "";
    position: absolute;
    width: 100%;
    height: 4px;
    background: #0f0;
  }
`;

КодПесочница https://codesandbox.io/s/zigzag-f2uybc?file=/src/App.js:0-1864

У вас опечатка - .contatiner - не уверен, что это что-то сделает для вашей проблемы.

Ben Stephens 17.04.2023 10:59

это не имеет значения, но спасибо, что сообщили мне об опечатке

DgUZH 17.04.2023 11:02

Зачем делать крест? У вас буквально есть класс под названием Square? Чтобы немного проиллюстрировать, вы можете видеть, что преобразование поворота на 90 градусов гарантирует, что маленький квадрат движется под ортогональными углами. Также ключевые кадры, в которых вы должны были добавить к своему вопросу, с координатами: (2px, 2px), (178px, 2px), (178px, 178px), (2px, 178px), (2px, 2px) проходят через 4 угла квадрата.

André 17.04.2023 11:11

когда-нибудь использовали transform-origin? developer.mozilla.org/en-US/docs/Web/CSS/transform-origin

Kathara 17.04.2023 14:32
Поведение ключевого слова "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
4
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ваш компонент Line представляет собой квадрат:

  position: absolute;
  inset: 10px;

Потому что без явной ширины и высоты поле в абсолютной позиции имеет предполагаемую ширину из свойств left и right и предполагаемую высоту из свойств top и bottom, поэтому относительно первого родителя с absolute, relative, fixed или sticky позиционирование.

-> Line parent — это элемент <div className = "square">. Итак, Line будет квадратным.

Линия барабана — это псевдоэлемент Line перед:

    position: absolute;
    width: 100%;
    height: 4px;

И без позиционирования (top, bottom, left, right) он начнется с верхнего левого угла первого позиционированного родителя.

-> Итак, каждый компонент Line представляет собой прозрачный квадрат с зеленой линией сверху. При повороте квадрата на 90° линия следует за ним, сохраняя то же положение относительно квадрата.


Если вы хотите, чтобы он образовал крест:

Вы можете центрировать элемент speudo в компоненте Line, например, просто добавьте:

  display: flex;
  justify-content: center;
  align-items: center;

В CSS компонента Line.

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