#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; }1234В данном случае в атрибуте 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; }
Комментариев нет:
Отправить комментарий