Дмитрий Соловей@solovey
Администратор

Founder NCHub.io
NoCode / LowCode Developer
Преподаватель Creatium.io

Свечение на CSS

Добавлено: 16.03.2023 00:52

Данный код создает круговую диаграмму. Измени данный код так, чтобы у .round появилоссь свечение

<div class="demo">
   <div class="point">
      <svg class="round" viewbox="0 0 100 100" width="200" height="200" data-percent="81">
         <circle cx="50" cy="50" r="40" />
      </svg>
   </div>
   <span>100%</span>
</div>
.demo {
  position: relative;
  display: flex;
  align-items:  center;
  width: 100px;
  height: 100px;
  justify-content: center;
}
.demo  span {

}
.point { 
  width: 100px;
  height: 100px;
  position: absolute;
  top:  0;
  left: 0;
}
.round {

  transform: rotate(-90deg);
  transition: all 1s ease-in-out;
  width: 100%;
  height: 100%;
  /* SVG */
  fill: none;
  stroke: red;
  stroke-width: 8;
  stroke-linecap: round;
  stroke-dasharray: 200 999;
}
.round.yellow {
  stroke:  orange;
}
.round.green {
  stroke: green;
}
ChatGPT @chatgpt
Пользователь

OpenAI Chat GPT-3 - это прогрессивный алгоритм машинного обучения, который автоматически создает правильные и привлекательные ответы на ввод пользователя в чат-ботах.

Добавлено: 16.03.2023 00:52

const Round = document.querySelector('.round');

Round.addEventListener('mouseover', () => {
  Round.classList.add('yellow');
});

Round.addEventListener('mouseout', () => {
  Round.classList.remove('yellow');
});

Round.addEventListener('click', () => {
  Round.classList.toggle('green');
});
.round {

  transform: rotate(-90deg);
  transition: all 1s ease-in-out;
  width: 100%;
  height: 100%;
  /* SVG */
  fill: none;
  stroke: red;
  stroke-width: 8;
  stroke-linecap: round;
  stroke-dasharray: 200 999;
  box-shadow: 0 0 8px 2px  red;
}
Дмитрий Соловей@solovey
Администратор

Founder NCHub.io
NoCode / LowCode Developer
Преподаватель Creatium.io

Добавлено: 16.03.2023 00:54

box-shadow: 0 0 8px 2px red; не подходит, так как задает тень для всего блока, а нужно только для рисуемой окружности графика

ChatGPT @chatgpt
Пользователь

OpenAI Chat GPT-3 - это прогрессивный алгоритм машинного обучения, который автоматически создает правильные и привлекательные ответы на ввод пользователя в чат-ботах.

Добавлено: 16.03.2023 00:54

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

.round {
  /* свойства для окружности */
}

.round-shadow {
  box-shadow: 0 0 8px 2px red; /* свойства тени */
}

Затем при добавлении класса .round-shadow элементу .round будет добавлена тень только на окружность, но не на остальную часть блока. Например:

const Round = document.querySelector('.round');

Round.addEventListener('mouseover', () => {
  Round.classList.add('yellow');
  Round.classList.add('round-shadow');
});

Round.addEventListener('mouseout', () => {
  Round.classList.remove('yellow');
  Round.classList.remove('round-shadow');
});

Round.addEventListener('click', () => {
  Round.classList.toggle('green');
});
Дмитрий Соловей@solovey
Администратор

Founder NCHub.io
NoCode / LowCode Developer
Преподаватель Creatium.io

Добавлено: 16.03.2023 00:55

а как этот класс применить для HTML?

ChatGPT @chatgpt
Пользователь

OpenAI Chat GPT-3 - это прогрессивный алгоритм машинного обучения, который автоматически создает правильные и привлекательные ответы на ввод пользователя в чат-ботах.

Добавлено: 16.03.2023 00:55

Класс .round-shadow, который создан для добавления тени только на рисуемую окружность, нужно применить к элементу, который отвечает за рисование окружности.

В вашем случае, я вижу, что ваш график рисуется с помощью элемента SVG, в котором находится элемент <circle> (вероятно, он и отвечает за рисование окружности). Поэтому этому элементу нужно добавить класс .round-shadow:

<svg>
  <circle class="round round-shadow" cx="25" cy="25" r="20"></circle>
</svg>

Здесь я добавил классы .round и .round-shadow элементу <circle>. Обратите внимание, что оба класса записаны через пробел, это нужно для того, чтобы добавить несколько классов одному элементу.

Таким образом, при добавлении класса .round-shadow к элементу .round будет добавлена тень только на рисуемую окружность внутри SVG, а не на все содержимое.

Дмитрий Соловей@solovey
Администратор

Founder NCHub.io
NoCode / LowCode Developer
Преподаватель Creatium.io

Добавлено: 16.03.2023 00:59

данный способ не работает, есть ли еще варианты?

ChatGPT @chatgpt
Пользователь

OpenAI Chat GPT-3 - это прогрессивный алгоритм машинного обучения, который автоматически создает правильные и привлекательные ответы на ввод пользователя в чат-ботах.

Добавлено: 16.03.2023 00:59

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

Для этого нужно добавить элемент <filter> с нужными параметрами фильтрации и применить его к элементу <circle> с помощью атрибута filter. Вот пример кода:

<svg>
  <filter id="shadow">
    <feDropShadow dx="0" dy="0" stdDeviation="2" flood-color="red" />
  </filter>
  <circle class="round" cx="25" cy="25" r="20" filter="url(#shadow)"></circle>
</svg>

Здесь внутри элемента <svg> мы добавляем элемент <filter> с идентификатором id="shadow", а внутри этого элемента указываем параметры фильтрации. Затем добавляем атрибут filter="url(#shadow)" к элементу <circle>, чтобы применить данный фильтр к этому элементу.

Свойство stdDeviation отвечает за размер тени. Значение 2 означает, что тень будет 2 пикселя в ширину и высоту. Свойство flood-color отвечает за цвет тени.

При таком подходе тень будет добавлена только на рисуемую окружность, но не на остальное содержимое блока.