Как распределить элементы на адаптивной, векторной кривой?

Ссылка скопирована
12 января 2026 1 ответ

Как распределить элементы на адаптивной, векторной кривой?

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

Самое простое решение offset-path, но мне он не подходит из за ограниченной поддержки.

Подскажите какие еще есть варианты реализовать эту задачу.

Дополнительно:

Здесь скорее всего нужны библиотеки вроде three.js

  • Ещё можно канвас или свг
  • @Kentavr16

    Здесь скорее всего нужны библиотеки вроде three.js

    Скорее не нужны ) Three.js немного для другого предназначена )

    Ещё можно канвас или свг

    SVG!.. Действительно, если вопрос о векторных кривых. А что есть еще много вариантов для рисования кривых в веб-разработке?)))

    Canvas не хранит графику в виде DOM-элементов, и поэтому не так хорошо подходит для решения описанной задачи.

  • Хорошего нативного и кроссбраузерного решения у нас пока нет. Но у path в SVG есть методы getTotalLength и getPointAtLength, а из них можно сообразить себе утилиту для расположения кружков вдоль кривой в удобных единицах измерения. Это не так здорово, как на CSS, но тем не менее:

    function putCircleOnPath(path, circle, percent) {     const length = path.getTotalLength();     const point = path.getPointAtLength(length * percent / 100);      circle.setAttribute('cx', point.x);     circle.setAttribute('cy', point.y); }

    function putCircleOnPath(path, circle, percent) { const length = path.getTotalLength(); const point = path.getPointAtLength(length * percent / 100); circle.setAttribute('cx', point.x); circle.setAttribute('cy', point.y); }

    Получится что-то такое:

    snippet

    • Ivan Bogachev

      Хорошего нативного и кроссбраузерного решения у нас пока нет.

      В итоге пришлось абсолютно позиционировать элементы внутри контейнера : / поверх SVG с `preserveAspectRatio="none"`.
      Богомерзко, но задачу решает и пуленепробиваемо..

      За метод `getPointAtLength()` большое спасибо! Пойду эксперементировать ).

    • Big Wheel,

      SVG!.. Действительно, если вопрос о векторных кривых. А что есть еще много вариантов для рисования кривых в веб-разработке?)))

      . . .

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Сергей Миронов Ответ

    Для распределения элементов на адаптивной, векторной кривой можно использовать CSS и SVG. Вот пример кода на HTML, CSS и SVG, который поможет вам реализовать данную задачу:

    HTML:
    ```html

    Item 1
    Item 2
    Item 3

    ```

    CSS:
    ```css
    .curve-container {
    position: relative;
    }

    .item {
    position: absolute;
    width: 50px;
    height: 50px;
    background-color: #f0f0f0;
    }

    #curve {
    fill: none;
    stroke: #000;
    stroke-width: 2;
    }
    ```

    SVG позволяет создавать векторные элементы, такие как кривые. В данном примере мы создаем кривую с помощью элемента `path` и задаем ее координаты. Затем с помощью CSS задаем позиционирование элементов `.item` относительно этой кривой.

    Вы можете настроить параметры кривой, меняя значения в атрибуте `d` элемента `path`. Также можно добавить больше элементов `.item` и расположить их на кривой с помощью CSS.

    Надеюсь, данное решение поможет вам распределить элементы на адаптивной, векторной кривой. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно