CSS Соедините круги пунктирной линией

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

Вот код: https://codepen.io/onche-onche/pen/LYoZBex

и вот код:

body {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  margin: 0;
  background-color: #e0e0e0;
}

.quatre-rectangles {
  width: 50%;
  position: relative;
}

.rectangle {
  height: 19em;
  margin: 1em 0;
  background-color: #fef1f2;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  position: relative;
  display: flex;
  justify-content: center;
  border-radius: 40px;
  padding: 1em;
  box-sizing: border-box;
}

.rectangle:first-child {
  margin-top: 400px;
}

.circle {
  width: 3em;
  height: 3em;
  background-color: #41be54;
  border-radius: 50%;
  display: flex;
  justify-content: center;
  align-items: center;
  color: white;
  font-size: 1.5em;
  font-family: 'Lexend Deca', sans-serif;
  position: relative;
  z-index: 1;
  margin-top: 1em;
  align-self: center;
}

.rectangle:not(:last-child) .circle::after {
  content: "";
  position: absolute;
  bottom: -7em;
  left: 50%;
  width: 0;
  height: 8em;
  border-left: 4px dotted #41be54;
  transform: translateX(-50%);
  z-index: 0;
  opacity: 0.5;
}
<body>
  <div class = "quatre-rectangles">
    <div class = "rectangle">
      <div class = "circle">1</div>
    </div>

    <div class = "rectangle">
      <div class = "circle">2</div>
    </div>

    <div class = "rectangle">
      <div class = "circle">3</div>
    </div>

    <div class = "rectangle">
      <div class = "circle">4</div>
    </div>
  </div>
</body>

Я попробовал изменить высоту:

.rectangle:not(:last-child) .circle::after {

но я получаю некоторые странные результаты

Вы задали body фиксированную высоту, но (в некоторых окнах просмотра, а не в больших) общая сумма содержимого больше - следовательно, первый элемент можно обрезать, поскольку вы центрировали объекты по вертикали.

A Haworth 23.05.2024 17:21
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в 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. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
1
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Я пытаюсь соединить эти круги пунктирной линией, но линия останавливается посередине пути.

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

Если вам нужно настроить поля прямоугольника так, чтобы они были больше круга, вы можете использовать пользовательские свойства для скорректированного поля.

И почему мой первый прямоугольник разрезан пополам?

Как упомянул @A-Haword в комментарии, это связано с тем, что высота области просмотра меньше общей высоты содержимого, но содержимое центрируется. Либо удалите ограничение по высоте, добавьте переполнение, либо удалите центр (align-items).

body {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  margin: 0;
  background-color: #e0e0e0;
}

.quatre-rectangles {
  width: 50%;
  position: relative;
}

.rectangle {
  height: 19em;
  --rectangle-margin: 1em;
  margin: var(--rectangle-margin) 0;
  background-color: #fef1f2;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  position: relative;
  display: flex;
  justify-content: center;
  border-radius: 40px;
  padding: 1em;
  box-sizing: border-box;
}


.rectangle:first-child {
  margin-top: 400px;
}

.circle {
  width: 3em;
  height: 3em;
  background-color: #41be54;
  border-radius: 50%;
  display: flex;
  justify-content: center;
  align-items: center;
  color: white;
  font-size: 1.5em;
  font-family: 'Lexend Deca', sans-serif;
  position: relative;
  z-index: 2;
  margin-top: 1em;
  align-self: center;
}

.rectangle:not(:last-child)::before {
  content: "";
  position: absolute;
  /* bottom: -7em; */
  top: 50%;
  left: 50%;
  width: 0;
  height: calc(100% + var(--rectangle-margin));
  border-left: 4px dotted #41be54;
  transform: translateX(-50%);
  z-index: 1;
  opacity: 0.5;
}
<div class = "quatre-rectangles">
  <div class = "rectangle">
    <div class = "circle">1</div>
  </div>

  <div class = "rectangle">
    <div class = "circle">2</div>
  </div>

  <div class = "rectangle">
    <div class = "circle">3</div>
  </div>

  <div class = "rectangle">
    <div class = "circle">4</div>
  </div>
</div>

Пожалуйста! Если хотите, вы можете принять ответ, который решает вашу проблему, и вопросы будут помечены как решенные.

SyndRain 23.05.2024 17:50

Измените высоту тела на проценты вместо высоты области просмотра:

body {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100%;
  margin: 0;
  background-color: #e0e0e0;
}

и удалите верхнюю часть поля «.rectangle:first-child», это должно решить вашу вторую проблему.

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