Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

round border css

#css #svg


Мой вопрос:

Возможно ли сделать средствами CSS данный блок(интересует круглый border):



Пожалуйста, обратите  внимание, синий круг над серым.

Мой вариант: я сделал, но с помощью картинки:



.number {
  position: relative;
  width: 105px;
  height: 105px;
  text-align: center;
  display: block;
  margin-left: auto;
  margin-right: auto;
  margin-top: 30px;
}
.number.number_img:before {
  content: '';
  position: absolute;
  right: -2px;
  top: -2px;
  width: 100%;
  height: 100%;
  display: block;
  background-image: url(https://erweb.ru/wp-content/uploads/2017/08/circles-1.png);
  background-repeat: no-repeat;
  background-position: top right;
  z-index: 2;
}
.number .number__value {
  position: relative;
  font-family: 'Montserrat', sans-serif;
  font-size: 55px;
  font-weight: 500;
  line-height: 0.55;
  display: block;
  padding: 35px;
  max-width: 100px;
  max-height: 100px;
  border-radius: 50px;
  color: #3e9ded;
  border: solid 1px #cccccc;
}

1
1). Ваш вариант должен иметь возможность настройки на любую длину синего круга, чтобы можно было получить и такой: 2). Данный блок не подразумевает какую-либо анимацию, решение на CSS должно быть. 3). Скругление концов полуокружности не обязательная часть, интересует только корректное наложение одного круга над другим, с возможностью ставить произвольно длину синего круга.


Ответы

Ответ 1



Решение с использованием SVG: .number { position: relative; width: 105px; height: 105px; text-align: center; display: block; border-radius: 100%; margin-left: auto; margin-right: auto; margin-top: 30px; border: solid 1px #cccccc; } .number .number__value { position: relative; font-family: 'Montserrat', sans-serif; font-size: 55px; font-weight: 500; line-height: 0.55; display: block; padding: 35px; max-width: 100px; max-height: 100px; color: #3e9ded; } .number__fill { position: absolute; z-index: 2; left: -1px; top: -1px; right: -1px; bottom: -1px; } .number__fill svg { fill: none; stroke: #3e9ded; stroke-width: 5px; overflow: visible; transform: rotate(-90deg); stroke-linecap: round; stroke-dasharray: 330px; }
1
2
3
4
В данном случае в атрибуте stroke-dasharray 330 - длина всего круга (если точнее, то 329.3343811035156), а stroke-dashoffset - смещение обводки относительно начального положения.

Ответ 2



Ответ по замечаниям в комментариях насчёт ступенек. Только круг что накладывается не идеально ровным выглядит, т.е. не идеально гладкие края. – Alexandr Kazakov Атрибут svg stroke-width рисуется своеобразно: половина толщины строки размещается снаружи фигуры, вторая половина внутри фигуры. Если круг имеет радиус 52px, то при stroke-width="5px" внешний и внутренний радиус строки будет 54.5px и 49.5px соответственно. Что не совсем правильно, так как минимальной единицей svg является 1px, то есть лучше придерживаться целочисленных значений, чтобы избежать эффекта ступенек на границе изображения. В нашем случае нужно выбирать ширину строки либо 4px либо 6px. Второй вариант возникновения конфликта полупиксельного перекрытия может возникнуть в случае, когда две окружности имеют равные радиусы, но ширина строк закраски stroke-width отличается на 1px друг от друга. Например у одной окружности ширина строки - 6px у второй -7px. Так как ширина делится на два, то перекрытие получается в полпикселя. Пример возникновения ступенек при этих параметрах: Убираем размытие краёв, устранив полупиксельное перекрытия выбором одинаковой ширины строки закраски - 6px. Вариант с четырьмя окружностями .container { width:112px; margin:10px; } .rotate { transform: rotate(-90deg); } #grey { fill:none; stroke:#d3d3d3; stroke-width:2px; } #blue { fill:none; stroke:#3e9ded;; stroke-width:6px; stroke-linecap: round; stroke-dasharray: 327px; }


Комментариев нет:

Отправить комментарий